Name: series-workflowvbrmk Phase: Succeeded StartedAt: 2026-08-12 18:10:44 +0000 UTC FinishedAt: 2026-08-12 18:59:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbrmk[0] Phase: Succeeded StartedAt: 2026-08-12 18:10:44 +0000 UTC FinishedAt: 2026-08-12 18:16:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbrmk[0].run-triage Phase: Succeeded StartedAt: 2026-08-12 18:10:44 +0000 UTC FinishedAt: 2026-08-12 18:16:07 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "d58772d8520c7ef247c4b95c9bd76d3a25da9ff5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PKEY", "PKEY_UV", "S390_UV_UAPI" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "d58772d8520c7ef247c4b95c9bd76d3a25da9ff5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PKEY", "PKEY_UV", "S390_UV_UAPI" ], "series_id": "e85da8b1-fa9e-4bfa-99ff-54384e1568b8" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "uv_find_secret", "pkey_handler_verify_key", "pkey_handler_key_to_protkey" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BLRVkmIzM0OywKICAgICYjMzQ7UEtFWV9VViYjMzQ7LAogICAgJiMzNDtTMzkwX1VWX1VBUEkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1dl9maW5kX3NlY3JldCYjMzQ7LAogICAgJiMzNDtwa2V5X2hhbmRsZXJfdmVyaWZ5X2tleSYjMzQ7LAogICAgJiMzNDtwa2V5X2hhbmRsZXJfa2V5X3RvX3Byb3RrZXkmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgdHdvIGlzc3VlczpcbjEuIEFuIG91dC1vZi1ib3VuZHMgcmVhZCBpbiBgZmluZF9zZWNyZXRfaW5fcGFnZSgpYC4gVGhlIGxvb3AgcHJldmlvdXNseSB1c2VkIGBsaXN0LVx1MDAzZXRvdGFsX251bV9zZWNyZXRzYCBpbnN0ZWFkIG9mIGBsaXN0LVx1MDAzZW51bV9zZWNyX3N0b3JlZGAuIFNpbmNlIGBsaXN0LVx1MDAzZXNlY3JldHNgIGlzIGEgZml4ZWQtc2l6ZSBhcnJheSBvZiA4NSBlbGVtZW50cywgaWYgYHRvdGFsX251bV9zZWNyZXRzYCBleGNlZWRzIDg1LCB0aGUgbG9vcCByZWFkcyBwYXN0IHRoZSBlbmQgb2YgdGhlIGBsaXN0YCBzdHJ1Y3R1cmUgKHdoaWNoIGlzIGV4YWN0bHkgb25lIHBhZ2UgaW4gc2l6ZSkuIFRoaXMgaXMgYSBjbGFzc2ljIG91dC1vZi1ib3VuZHMgcmVhZCB0aGF0IGlzIHJlbGlhYmx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOLlxuMi4gQSBsb2dpYyBidWcgaW4gYHV2X2ZpbmRfc2VjcmV0KClgIHdoZXJlIHRoZSBsb29wIGNvbmRpdGlvbiBgc3RhcnRfaWR4IFx1MDAzYyBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeGAgd2FzIGFsd2F5cyBmYWxzZSBiZWNhdXNlIGBzdGFydF9pZHhgIHdhcyBhc3NpZ25lZCBgbGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHhgIGltbWVkaWF0ZWx5IHByaW9yIHRvIHRoZSBjaGVjay4gVGhlIGZpeCBjb3JyZWN0bHkgaW5pdGlhbGl6ZXMgYW5kIHVwZGF0ZXMgYHN0YXJ0X2lkeGAgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbG9vcC5cblxuVGhlIGBsaXN0YCBzdHJ1Y3R1cmUgcGFzc2VkIHRvIGB1dl9maW5kX3NlY3JldCgpYCBpcyBmdWxseSB6ZXJvZWQgYmVmb3JlIHVzZSAodmlhIGBtZW1zZXQodXZfbGlzdCwgMCwgc2l6ZW9mKCp1dl9saXN0KSlgIGluIGBnZXRfc2VjcmV0X21ldGFkYXRhKClgKS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlIGludHJvZHVjZWQgb3IgZml4ZWQgYnkgdGhpcyBwYXRjaC4gU3RhbmRhcmQgS0FTQU4gaXMgcGVyZmVjdGx5IHN1aXRlZCB0byBjYXRjaCB0aGUgb3V0LW9mLWJvdW5kcyByZWFkLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGB1dl9maW5kX3NlY3JldGAgd2hlcmUgYHN0YXJ0X2lkeGAgd2FzIGluY29ycmVjdGx5IHVwZGF0ZWQgYW5kIGBmaW5kX3NlY3JldF9pbl9wYWdlYCB1c2VkIHRoZSB3cm9uZyBsaW1pdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBzMzkweCB1bHRyYXZpc29yIHNlY3JldCBoYW5kbGluZyBjb2RlLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGAvZGV2L3BrZXlgIGlvY3Rscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDU2N2VmYWM4NzJlMmMzM2NhODk3MDg0NDIwMzhmYjYxN2FkYWMyZmJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxODoxMjoxNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3V2LmMgYi9hcmNoL3MzOTAva2VybmVsL3V2LmNcbmluZGV4IGEyODRmOThkOTcxNjguLmU3MGFjYWQwOWNkNWYgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva2VybmVsL3V2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rZXJuZWwvdXYuY1xuQEAgLTc2MCw3ICYjNDM7NzYwLDcgQEAgc3RhdGljIGludCBmaW5kX3NlY3JldF9pbl9wYWdlKGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcbiB7XG4gXHR1MTYgaTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGxpc3QtXHUwMDNldG90YWxfbnVtX3NlY3JldHM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbGlzdC1cdTAwM2VudW1fc2Vjcl9zdG9yZWQ7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGlmIChtZW1jbXAoc2VjcmV0X2lkLCBsaXN0LVx1MDAzZXNlY3JldHNbaV0uaWQsIFVWX1NFQ1JFVF9JRF9MRU4pID09IDApIHtcbiBcdFx0XHQqc2VjcmV0ID0gbGlzdC1cdTAwM2VzZWNyZXRzW2ldLmhkcjtcbiBcdFx0XHRyZXR1cm4gMDtcbkBAIC03ODEsMTEgJiM0Mzs3ODEsMTQgQEAgaW50IHV2X2ZpbmRfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcbiBcdFx0ICAgc3RydWN0IHV2X3NlY3JldF9saXN0ICpsaXN0LFxuIFx0XHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbV9oZHIgKnNlY3JldClcbiB7XG4tXHR1MTYgc3RhcnRfaWR4ID0gMDtcbiYjNDM7XHR1MTYgc3RhcnRfaWR4O1xuIFx0dTE2IGxpc3RfcmM7XG4gXHRpbnQgcmV0O1xuIFxuJiM0MztcdGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4ID0gMDtcbiYjNDM7XG4gXHRkbyB7XG4mIzQzO1x0XHRzdGFydF9pZHggPSBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeDtcbiBcdFx0dXZfbGlzdF9zZWNyZXRzKGxpc3QsIHN0YXJ0X2lkeCwgXHUwMDI2bGlzdF9yYywgTlVMTCk7XG4gXHRcdGlmIChsaXN0X3JjICE9IFVWQ19SQ19FWEVDVVRFRCBcdTAwMjZcdTAwMjYgbGlzdF9yYyAhPSBVVkNfUkNfTU9SRV9EQVRBKSB7XG4gXHRcdFx0aWYgKGxpc3RfcmMgPT0gVVZDX1JDX0lOVl9DTUQpXG5AQCAtNzk2LDcgJiM0Mzs3OTksNiBAQCBpbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuIFx0XHRyZXQgPSBmaW5kX3NlY3JldF9pbl9wYWdlKHNlY3JldF9pZCwgbGlzdCwgc2VjcmV0KTtcbiBcdFx0aWYgKHJldCA9PSAwKVxuIFx0XHRcdHJldHVybiByZXQ7XG4tXHRcdHN0YXJ0X2lkeCA9IGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4O1xuIFx0fSB3aGlsZSAobGlzdF9yYyA9PSBVVkNfUkNfTU9SRV9EQVRBIFx1MDAyNlx1MDAyNiBzdGFydF9pZHggXHUwMDNjIGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4KTtcbiBcbiBcdHJldHVybiAtRU5PRU5UO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjEyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQS0VZJiMzNDssCiAgICAmIzM0O1BLRVlfVVYmIzM0OywKICAgICYjMzQ7UzM5MF9VVl9VQVBJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXZfZmluZF9zZWNyZXQmIzM0OywKICAgICYjMzQ7cGtleV9oYW5kbGVyX3ZlcmlmeV9rZXkmIzM0OywKICAgICYjMzQ7cGtleV9oYW5kbGVyX2tleV90b19wcm90a2V5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGB1dl9maW5kX3NlY3JldGAgd2hlcmUgYHN0YXJ0X2lkeGAgd2FzIGluY29ycmVjdGx5IHVwZGF0ZWQgYW5kIGBmaW5kX3NlY3JldF9pbl9wYWdlYCB1c2VkIHRoZSB3cm9uZyBsaW1pdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBzMzkweCB1bHRyYXZpc29yIHNlY3JldCBoYW5kbGluZyBjb2RlLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGAvZGV2L3BrZXlgIGlvY3Rscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDU2N2VmYWM4NzJlMmMzM2NhODk3MDg0NDIwMzhmYjYxN2FkYWMyZmIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxMiAxODoxMjoxNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdXYuYyBiL2FyY2gvczM5MC9rZXJuZWwvdXYuYwppbmRleCBhMjg0Zjk4ZDk3MTY4Li5lNzBhY2FkMDljZDVmIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3V2LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2tlcm5lbC91di5jCkBAIC03NjAsNyAmIzQzOzc2MCw3IEBAIHN0YXRpYyBpbnQgZmluZF9zZWNyZXRfaW5fcGFnZShjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sCiB7CiAJdTE2IGk7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgbGlzdC0mZ3Q7dG90YWxfbnVtX3NlY3JldHM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBsaXN0LSZndDtudW1fc2Vjcl9zdG9yZWQ7IGkmIzQzOyYjNDM7KSB7CiAJCWlmIChtZW1jbXAoc2VjcmV0X2lkLCBsaXN0LSZndDtzZWNyZXRzW2ldLmlkLCBVVl9TRUNSRVRfSURfTEVOKSA9PSAwKSB7CiAJCQkqc2VjcmV0ID0gbGlzdC0mZ3Q7c2VjcmV0c1tpXS5oZHI7CiAJCQlyZXR1cm4gMDsKQEAgLTc4MSwxMSAmIzQzOzc4MSwxNCBAQCBpbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLAogCQkgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QsCiAJCSAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtX2hkciAqc2VjcmV0KQogewotCXUxNiBzdGFydF9pZHggPSAwOwomIzQzOwl1MTYgc3RhcnRfaWR4OwogCXUxNiBsaXN0X3JjOwogCWludCByZXQ7CiAKJiM0MzsJbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4ID0gMDsKJiM0MzsKIAlkbyB7CiYjNDM7CQlzdGFydF9pZHggPSBsaXN0LSZndDtuZXh0X3NlY3JldF9pZHg7CiAJCXV2X2xpc3Rfc2VjcmV0cyhsaXN0LCBzdGFydF9pZHgsICZhbXA7bGlzdF9yYywgTlVMTCk7CiAJCWlmIChsaXN0X3JjICE9IFVWQ19SQ19FWEVDVVRFRCAmYW1wOyZhbXA7IGxpc3RfcmMgIT0gVVZDX1JDX01PUkVfREFUQSkgewogCQkJaWYgKGxpc3RfcmMgPT0gVVZDX1JDX0lOVl9DTUQpCkBAIC03OTYsNyAmIzQzOzc5OSw2IEBAIGludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sCiAJCXJldCA9IGZpbmRfc2VjcmV0X2luX3BhZ2Uoc2VjcmV0X2lkLCBsaXN0LCBzZWNyZXQpOwogCQlpZiAocmV0ID09IDApCiAJCQlyZXR1cm4gcmV0OwotCQlzdGFydF9pZHggPSBsaXN0LSZndDtuZXh0X3NlY3JldF9pZHg7CiAJfSB3aGlsZSAobGlzdF9yYyA9PSBVVkNfUkNfTU9SRV9EQVRBICZhbXA7JmFtcDsgc3RhcnRfaWR4ICZsdDsgbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4KTsKIAogCXJldHVybiAtRU5PRU5UOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzc1CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoIHRvIHMzOTAgQXJjaGl0ZWN0dXJlIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyBiZWVuIGFwcGxpZWQgdG8gYGFyY2gvczM5MC9rZXJuZWwvdXYuY2AuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgbWFraW5nIGEgZmV3IGNoYW5nZXMgdG8gYGZpbmRfc2VjcmV0X2luX3BhZ2VgIGFuZCBgdXZfZmluZF9zZWNyZXRgLiBTcGVjaWZpY2FsbHksIGluIGBmaW5kX3NlY3JldF9pbl9wYWdlYCwgdGhlIGxvb3AgY29uZGl0aW9uIGhhcyBiZWVuIGFsdGVyZWQ7IGl0IG5vdyB1c2VzIGBsaXN0LSZndDtudW1fc2Vjcl9zdG9yZWRgIGluc3RlYWQgb2YgYGxpc3QtJmd0O3RvdGFsX251bV9zZWNyZXRzYCwgd2hpY2ggaXMgc29tZXRoaW5nIHRvIG5vdGUuIEFuZCB3aXRoaW4gYHV2X2ZpbmRfc2VjcmV0YCwgdGhlIGluaXRpYWxpemF0aW9uIGFuZCB1cGRhdGUgb2YgYGxpc3QtJmd0O25leHRfc2VjcmV0X2lkeGAgaGF2ZSBiZWVuIG1vdmVkICppbnNpZGUqIHRoZSBsb29wLiBUaGlzIGNvdWxkIGhhdmUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLCBkZXBlbmRpbmcgb24gdGhlIHN0cnVjdHVyZSBhbmQgdXNlIGNhc2UuCgpOb3csIGxldCYjMzk7cyBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgKnVzZWQqLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIGluIGBhcmNoL3MzOTAva2VybmVsL3V2LmNgIGZvciBjYWxscyB0byBgdXZfZmluZF9zZWNyZXRgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgaXMgdGhpcyBldmVuICpyZWFjaGFibGUqIGluIGEgdHlwaWNhbCBmdXp6aW5nIGVudmlyb25tZW50IGxpa2UgR0NFIG9yIFFFTVU/IFMzOTAgYXJjaGl0ZWN0dXJlLCBJIHNlZW0gdG8gcmVjYWxsLCBpcyBub3QgYWx3YXlzIHRoZSB0YXJnZXQsIGFuZCBzeXprYWxsZXImIzM5O3MgdHlwaWNhbCBzZXR1cHMuIEFoLCB3YWl0LCB5ZXMsIHN5emthbGxlciAqZG9lcyogc3VwcG9ydCBzMzkweC4gU28gd2UgbmVlZCB0byBjb25zaWRlciB0aGlzLiBUaGUgcHJvbXB0IGRvZXMgc2F5IHRvIHNraXAgYW55IGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEJ1dCB3YWl0LCBzaW5jZSBzMzkweCBpcyBzdXBwb3J0ZWQsIGxldCYjMzk7cyBnbyBiYWNrIHRvIGxvb2tpbmcgYXQgdGhlIHVzZSBvZiBgdXZfZmluZF9zZWNyZXRgIGluIHRoZSBjb2RlLCBhbmQgaG93IHRoYXQgY291bGQgYmUgcmVhY2hhYmxlIHZpYSBzeXprYWxsZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXZfZmluZF9zZWNyZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg9NjEzPXN0YXRpYyBpbmxpbmUgaW50IHV2X3JlbW92ZV9zaGFyZWQodW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTYxNy1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oOjYxODppbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNjE5LVx0XHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QsXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC91di5jPTc1Nz1zdGF0aWMgaW50IGZpbmRfc2VjcmV0X2luX3BhZ2UoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03NzItLyoqXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6NzczOiAqIHV2X2ZpbmRfc2VjcmV0KCkgLSBzZWFyY2ggc2VjcmV0IG1ldGFkYXRhIGZvciBhIGdpdmVuIHNlY3JldCBpZC5cbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03NzQtICogQHNlY3JldF9pZDogc2VhcmNoIHBhdHRlcm4uXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc3OS0gKi9cbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo3ODA6aW50IHV2X2ZpbmRfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03ODEtXHRcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqbGlzdCxcbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtODA1LX1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo4MDY6RVhQT1JUX1NZTUJPTF9HUEwodXZfZmluZF9zZWNyZXQpO1xuYXJjaC9zMzkwL2tlcm5lbC91di5jLTgwNy1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0yMD1NT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7czM5MCBwcm90ZWN0ZWQga2V5IFVWIGhhbmRsZXJcJiMzNDspO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTIyLS8qXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoyMzogKiBPbmUgcHJlLWFsbG9jYXRlZCB1dl9zZWNyZXRfbGlzdCBmb3IgdXNlIHdpdGggdXZfZmluZF9zZWNyZXQoKVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjQtICovXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9OTM9c3RhdGljIGludCBnZXRfc2VjcmV0X21ldGFkYXRhKGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy05OS1cdG1lbXNldCh1dl9saXN0LCAwLCBzaXplb2YoKnV2X2xpc3QpKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjEwMDpcdHJjID0gdXZfZmluZF9zZWNyZXQoc2VjcmV0X2lkLCB1dl9saXN0LCBzZWNyZXQpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMTAxLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnV2X2xpc3RfbXV0ZXgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3NTgKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBzMzkwIENyeXB0byBLZXkgSGFuZGxpbmcqKgoKUmlnaHQsIGB1dl9maW5kX3NlY3JldGDigKYgdGhhdCBmdW5jdGlvbiBuYW1lIGltbWVkaWF0ZWx5IHJpbmdzIGEgYmVsbC4gSXQmIzM5O3MgdXNlZCB3aXRoaW4gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlJiMzOTtzIGNyeXB0b2dyYXBoaWMga2V5IGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgaW4gYGRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgYHBrZXlfdXYuY2AgYWN0dWFsbHkgKmlzKi4gSXMgdGhpcyByZWxhdGVkIHRvIFVzZXIgVmVyaWZpY2F0aW9uLCBLZXkgc3RvcmFnZSBhbmQgYWNjZXNzIG9yIG1heWJlIHNvbWUgb3RoZXIgaGFyZHdhcmUgc3VwcG9ydCBmb3IgY3J5cHRvPyBJdCYjMzk7cyBiZWVuIGEgd2hpbGUgc2luY2UgSSBsYXN0IGxvb2tlZCBjbG9zZWx5IGF0IHRoZSBzMzkwIGtleSBpbmZyYXN0cnVjdHVyZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgZmlsZSBjb250YWlucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZXRfc2VjcmV0X21ldGFkYXRhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rZXJuZWwvdXYuYz04MDY9RVhQT1JUX1NZTUJPTF9HUEwodXZfZmluZF9zZWNyZXQpO1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYy04MTItICogQGJ1Zl9zaXplOiBTaXplIG9mIHRoZSBidWZmZXIuIFRoZSBjb3JyZWN0IGJ1ZmZlciBzaXplIGlzIHJlcG9ydGVkIGFzIHBhcnQgb2ZcbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo4MTM6ICogdGhlIHJlc3VsdCBmcm9tIGB1dl9nZXRfc2VjcmV0X21ldGFkYXRhYC5cbmFyY2gvczM5MC9rZXJuZWwvdXYuYy04MTQtICpcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz04Mz1zdGF0aWMgYm9vbCBpc191dl9rZXl0eXBlKGVudW0gcGtleV9rZXlfdHlwZSBrZXl0eXBlKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTkyLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6OTM6c3RhdGljIGludCBnZXRfc2VjcmV0X21ldGFkYXRhKGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTk0LVx0XHRcdCAgICAgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbV9oZHIgKnNlY3JldClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0xMDY9c3RhdGljIGludCByZXRyaWV2ZV9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTExMS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjExMjpcdHJjID0gZ2V0X3NlY3JldF9tZXRhZGF0YShzZWNyZXRfaWQsIFx1MDAyNnNlY3JldF9tZXRhX2RhdGEpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMTEzLVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTIzMz1zdGF0aWMgaW50IHV2X3ZlcmlmeWtleShjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI0Ny1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjI0ODpcdHJjID0gZ2V0X3NlY3JldF9tZXRhZGF0YSh0LVx1MDAzZXNlY3JldF9pZCwgXHUwMDI2c2VjcmV0X21ldGFfZGF0YSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yNDktXHRpZiAocmMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDUwNwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgYHBrZXlfdXYuY2AgQ29kZSoqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhpcyBgcGtleV91di5jYCBmaWxlLiBSaWdodCwgaXQmIzM5O3MgYSAmIzM0O3Byb3RlY3RlZCBrZXkgVVYgaGFuZGxlci4mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgaW50ZXJmYWNpbmcgd2l0aCBwcm90ZWN0ZWQga2V5cy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7Q2FuIEkgZXZlbiAqcmVhY2gqIHRoaXMgdGhpbmc/JiMzNDsgSSBoYXZlIHRvIHJlbWVtYmVyIGhvdyBgcGtleWAgZnVuY3Rpb25hbGl0eSBpcyBleHBvc2VkLiBJcyBpdCBhY2Nlc3NpYmxlIHRocm91Z2ggYC9kZXYvcGtleWAsIG9yIHNvbWUgcmVsYXRlZCBgaW9jdGxgIGNhbGxzIHdpdGhpbiB0aGUgczM5MCBhcmNoaXRlY3R1cmU/IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgZW50cnkgcG9pbnRzIGFuZCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGlzIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuY2AgY29kZSBpcyBpbnZva2VkLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBsYXJnZXIgYHBrZXlgIHN1YnN5c3RlbSB0byBnYWluIHNvbWUgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1dl92ZXJpZnlrZXkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9MTkwPXN0YXRpYyBpbnQgdXZfa2V5MnByb3RrZXkoY29uc3Qgc3RydWN0IHBrZXlfYXBxbiAqX2FwcW5zIF9fYWx3YXlzX3VudXNlZCxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yMzItXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoyMzM6c3RhdGljIGludCB1dl92ZXJpZnlrZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTIzNC1cdFx0XHR1MTYgKl9jYXJkIF9fYWx3YXlzX3VudXNlZCxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0yNzI9c3RhdGljIHN0cnVjdCBwa2V5X2hhbmRsZXIgdXZfaGFuZGxlciA9IHtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yNzctXHQua2V5X3RvX3Byb3RrZXlcdFx0ID0gdXZfa2V5MnByb3RrZXksXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoyNzg6XHQudmVyaWZ5X2tleVx0XHQgPSB1dl92ZXJpZnlrZXksXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yNzktfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDQzCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgcGtleV9oYW5kbGVyYCBpcyBiZWluZyB1dGlsaXplZCB3aXRoaW4gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlJiMzOTtzIGNyeXB0b2dyYXBoaWMga2V5IG1hbmFnZW1lbnQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIG91dCB0aGUgcmVsZXZhbnQgZHJpdmVyIGNvZGUsIHNwZWNpZmljYWxseSBzb21ldGhpbmcgbGlrZSBgZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jYC4gVGhpcyBzZWVtcyB0aGUgbW9zdCBsaWtlbHkgcGxhY2UgdG8gZmluZCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBncmFzcCBob3cgdGhlIGBwa2V5X2hhbmRsZXJgIHN0cnVjdHVyZSBpcyBlbXBsb3llZCB3aXRoaW4gdGhhdCBjb250ZXh0LiBJJiMzOTttIGFpbWluZyBmb3IgYSBtZW50YWwgbW9kZWwgb2YgaXRzIHJvbGUgaW4gdGhlIGtleSBtYW5hZ2VtZW50IHByb2Nlc3MuIEkmIzM5O20gdGhpbmtpbmcgYSBkZWVwIGRpdmUgaW50byB0aGUgY29kZSB3aWxsIHJldmVhbCB0aGUgbmVjZXNzYXJ5IHVzYWdlIHBhdHRlcm5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwa2V5X2hhbmRsZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTI1PXN0YXRpYyBpbnQga2V5MnByb3RrZXkoY29uc3Qgc3RydWN0IHBrZXlfYXBxbiAqYXBxbnMsIHNpemVfdCBucl9hcHFucyxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMzItXHQvKiB0cnkgdGhlIGRpcmVjdCB3YXkgKi9cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzozMzpcdHJjID0gcGtleV9oYW5kbGVyX2tleV90b19wcm90a2V5KGFwcW5zLCBucl9hcHFucyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0zNC1cdFx0XHRcdFx0IGtleSwga2V5bGVuLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0zOS1cdGlmIChyYyA9PSAtRU5PREVWKSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6NDA6XHRcdHJjID0gcGtleV9oYW5kbGVyX3Nsb3dwYXRoX2tleV90b19wcm90a2V5KGFwcW5zLCBucl9hcHFucyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy00MS1cdFx0XHRcdFx0XHRcdCAga2V5LCBrZXlsZW4sXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTU1PWludCBwa2V5X2tleTJwcm90a2V5KGNvbnN0IHU4ICprZXksIHUzMiBrZXlsZW4sXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTYyLVx0aWYgKHJjID09IC1FTk9ERVYpIHtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzo2MzpcdFx0cGtleV9oYW5kbGVyX3JlcXVlc3RfbW9kdWxlcygpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTY0LVx0XHRyYyA9IGtleTJwcm90a2V5KE5VTEwsIDAsIGtleSwga2V5bGVuLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz05Mj1zdGF0aWMgaW50IHBrZXlfaW9jdGxfZ2Vuc2VjayhzdHJ1Y3QgcGtleV9nZW5zZWNrIF9fdXNlciAqdWdzKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0xMDQtXHRrZXlidWZsZW4gPSBzaXplb2Yoa2dzLnNlY2tleS5zZWNrZXkpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjEwNTpcdHJjID0gcGtleV9oYW5kbGVyX2dlbl9rZXkoXHUwMDI2YXBxbiwgMSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0xMDYtXHRcdFx0XHQgIGtncy5rZXl0eXBlLCBQS0VZX1RZUEVfQ0NBX0RBVEEsIDAsIDAsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTExNj1zdGF0aWMgaW50IHBrZXlfaW9jdGxfY2xyMnNlY2soc3RydWN0IHBrZXlfY2xyMnNlY2sgX191c2VyICp1Y3MpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTEyOC1cdGtleWJ1ZmxlbiA9IHNpemVvZihrY3Muc2Vja2V5LnNlY2tleSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6MTI5Olx0cmMgPSBwa2V5X2hhbmRsZXJfY2xyX3RvX2tleShcdTAwMjZhcHFuLCAxLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTEzMC1cdFx0XHRcdCAgICAga2NzLmtleXR5cGUsIFBLRVlfVFlQRV9DQ0FfREFUQSwgMCwgMCxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9MTQyPXN0YXRpYyBpbnQgcGtleV9pb2N0bF9zZWMycHJvdGsoc3RydWN0IHBrZXlfc2VjMnByb3RrIF9fdXNlciAqdXNwKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0xNTMtXHRrc3AucHJvdGtleS5sZW4gPSBzaXplb2Yoa3NwLnByb3RrZXkucHJvdGtleSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6MTU0Olx0cmMgPSBwa2V5X2hhbmRsZXJfa2V5X3RvX3Byb3RrZXkoXHUwMDI2YXBxbiwgMSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0xNTUtXHRcdFx0XHRcdCBrc3Auc2Vja2V5LnNlY2tleSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9MjE1PXN0YXRpYyBpbnQgcGtleV9pb2N0bF9maW5kY2FyZChzdHJ1Y3QgcGtleV9maW5kY2FyZCBfX3VzZXIgKnVmYylcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMjI5LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjIzMDpcdHJjID0gcGtleV9oYW5kbGVyX2FwcW5zX2Zvcl9rZXkoa2ZjLnNlY2tleS5zZWNrZXksXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMjMxLVx0XHRcdFx0XHRzaXplb2Yoa2ZjLnNlY2tleS5zZWNrZXkpLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0yMzQtXHRpZiAocmMgPT0gLUVOT0RFVilcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzoyMzU6XHRcdHJjID0gcGtleV9oYW5kbGVyX2FwcW5zX2Zvcl9rZXkoa2ZjLnNlY2tleS5zZWNrZXksXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMjM2LVx0XHRcdFx0XHRcdHNpemVvZihrZmMuc2Vja2V5LnNlY2tleSksXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTI1Mz1zdGF0aWMgaW50IHBrZXlfaW9jdGxfc2tleTJwa2V5KHN0cnVjdCBwa2V5X3NrZXkycGtleSBfX3VzZXIgKnVzcClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMjYxLVx0a3NwLnByb3RrZXkubGVuID0gc2l6ZW9mKGtzcC5wcm90a2V5LnByb3RrZXkpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjI2MjpcdHJjID0gcGtleV9oYW5kbGVyX2tleV90b19wcm90a2V5KE5VTEwsIDAsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMjYzLVx0XHRcdFx0XHQga3NwLnNlY2tleS5zZWNrZXksXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTI3Nj1zdGF0aWMgaW50IHBrZXlfaW9jdGxfdmVyaWZ5a2V5KHN0cnVjdCBwa2V5X3ZlcmlmeWtleSBfX3VzZXIgKnV2aylcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMjg2LVx0a3ZrLmRvbWFpbiA9IDB4RkZGRjtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzoyODc6XHRyYyA9IHBrZXlfaGFuZGxlcl92ZXJpZnlfa2V5KGt2ay5zZWNrZXkuc2Vja2V5LFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTI4OC1cdFx0XHRcdCAgICAgc2l6ZW9mKGt2ay5zZWNrZXkuc2Vja2V5KSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9MzA1PXN0YXRpYyBpbnQgcGtleV9pb2N0bF9nZW5wcm90ayhzdHJ1Y3QgcGtleV9nZW5wcm90ayBfX3VzZXIgKnVncClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMzEzLVx0a2dwLnByb3RrZXkubGVuID0gc2l6ZW9mKGtncC5wcm90a2V5LnByb3RrZXkpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjMxNDpcdHJjID0gcGtleV9oYW5kbGVyX2dlbl9rZXkoTlVMTCwgMCwga2dwLmtleXR5cGUsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMzE1LVx0XHRcdFx0ICBQS0VZX1RZUEVfUFJPVEtFWSwgMCwgMCxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9MzI2PXN0YXRpYyBpbnQgcGtleV9pb2N0bF92ZXJpZnlwcm90ayhzdHJ1Y3QgcGtleV92ZXJpZnlwcm90ayBfX3VzZXIgKnV2cClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMzU1LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjM1NjpcdHJjID0gcGtleV9oYW5kbGVyX3ZlcmlmeV9rZXkodG1wYnVmLCBzaXplb2YoKnQpLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTM1Ny1cdFx0XHRcdCAgICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgMCk7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTM5MD1zdGF0aWMgaW50IHBrZXlfaW9jdGxfZ2Vuc2VjazIoc3RydWN0IHBrZXlfZ2Vuc2VjazIgX191c2VyICp1Z3MpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTQxNC1cdH1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzo0MTU6XHRyYyA9IHBrZXlfaGFuZGxlcl9nZW5fa2V5KGFwcW5zLCBrZ3MuYXBxbl9lbnRyaWVzLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTQxNi1cdFx0XHRcdCAgdSwga2dzLnR5cGUsIGtncy5zaXplLCBrZ3Mua2V5Z2VuZmxhZ3MsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTQ0Mj1zdGF0aWMgaW50IHBrZXlfaW9jdGxfY2xyMnNlY2syKHN0cnVjdCBwa2V5X2NscjJzZWNrMiBfX3VzZXIgKnVjcylcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNDcwLVx0fVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjQ3MTpcdHJjID0gcGtleV9oYW5kbGVyX2Nscl90b19rZXkoYXBxbnMsIGtjcy5hcHFuX2VudHJpZXMsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNDcyLVx0XHRcdFx0ICAgICB1LCBrY3MudHlwZSwga2NzLnNpemUsIGtjcy5rZXlnZW5mbGFncyxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9NTAzPXN0YXRpYyBpbnQgcGtleV9pb2N0bF92ZXJpZnlrZXkyKHN0cnVjdCBwa2V5X3ZlcmlmeWtleTIgX191c2VyICp1dmspXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTUxNC1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzo1MTU6XHRyYyA9IHBrZXlfaGFuZGxlcl92ZXJpZnlfa2V5KGtrZXksIGt2ay5rZXlsZW4sXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNTE2LVx0XHRcdFx0ICAgICBcdTAwMjZrdmsuY2FyZG5yLCBcdTAwMjZrdmsuZG9tYWluLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz01NTg9c3RhdGljIGludCBwa2V5X2lvY3RsX2FwcW5zNGsoc3RydWN0IHBrZXlfYXBxbnM0a2V5IF9fdXNlciAqdWFrKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy01NzgtXHR9XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6NTc5Olx0cmMgPSBwa2V5X2hhbmRsZXJfYXBxbnNfZm9yX2tleShra2V5LCBrYWsua2V5bGVuLCBrYWsuZmxhZ3MsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNTgwLVx0XHRcdFx0XHRhcHFucywgXHUwMDI2bnJfYXBxbnMsIDApO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz02MDg9c3RhdGljIGludCBwa2V5X2lvY3RsX2FwcW5zNGt0KHN0cnVjdCBwa2V5X2FwcW5zNGtleXR5cGUgX191c2VyICp1YXQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTYyMi1cdH1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzo2MjM6XHRyYyA9IHBrZXlfaGFuZGxlcl9hcHFuc19mb3Jfa2V5dHlwZShrYXQudHlwZSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy02MjQtXHRcdFx0XHRcdCAgICBrYXQuY3VyX21rdnAsIGthdC5hbHRfbWt2cCxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jPTM0PXN0YXRpYyBMSVNUX0hFQUQoaGFuZGxlcl9saXN0KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzUtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjM2OmludCBwa2V5X2hhbmRsZXJfcmVnaXN0ZXIoc3RydWN0IHBrZXlfaGFuZGxlciAqaGFuZGxlcilcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzcte1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzozODpcdGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmg7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTM5LVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtNzgtfVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzo3OTpFWFBPUlRfU1lNQk9MKHBrZXlfaGFuZGxlcl9yZWdpc3Rlcik7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTgwLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzo4MTppbnQgcGtleV9oYW5kbGVyX3VucmVnaXN0ZXIoc3RydWN0IHBrZXlfaGFuZGxlciAqaGFuZGxlcilcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtODIte1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtOTMtfVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzo5NDpFWFBPUlRfU1lNQk9MKHBrZXlfaGFuZGxlcl91bnJlZ2lzdGVyKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtOTUtXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy05OS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTAwOmNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKnBrZXlfaGFuZGxlcl9nZXRfa2V5YmFzZWQoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbilcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTAxLXtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTAyOlx0Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqaDtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTAzLVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTE3LX1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTE4OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX2dldF9rZXliYXNlZCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTExOS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTIwOmNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKnBrZXlfaGFuZGxlcl9nZXRfa2V5dHlwZWJhc2VkKGVudW0gcGtleV9rZXlfdHlwZSBrdClcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTIxLXtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTIyOlx0Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqaDtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTIzLVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTM3LX1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTM4OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX2dldF9rZXl0eXBlYmFzZWQpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xMzktXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjE0MDp2b2lkIHBrZXlfaGFuZGxlcl9wdXQoY29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqaGFuZGxlcilcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTQxLXtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTQyOlx0Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqaDtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTQzLVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTU1LX1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTU2OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX3B1dCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE1Ny1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTU4OmludCBwa2V5X2hhbmRsZXJfa2V5X3RvX3Byb3RrZXkoY29uc3Qgc3RydWN0IHBrZXlfYXBxbiAqYXBxbnMsIHNpemVfdCBucl9hcHFucyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTU5LVx0XHRcdFx0Y29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE2Mi17XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjE2MzpcdGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmg7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE2NC1cdGludCByYyA9IC1FTk9ERVY7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE2NS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTY2Olx0aCA9IHBrZXlfaGFuZGxlcl9nZXRfa2V5YmFzZWQoa2V5LCBrZXlsZW4pO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xNjctXHRpZiAoaCBcdTAwMjZcdTAwMjYgaC1cdTAwM2VrZXlfdG9fcHJvdGtleSkge1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTcxLVx0fVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxNzI6XHRwa2V5X2hhbmRsZXJfcHV0KGgpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xNzMtXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xNzUtfVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxNzY6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfa2V5X3RvX3Byb3RrZXkpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xNzctXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xODMtICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjE4NDppbnQgcGtleV9oYW5kbGVyX3Nsb3dwYXRoX2tleV90b19wcm90a2V5KGNvbnN0IHN0cnVjdCBwa2V5X2FwcW4gKmFwcW5zLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xODUtXHRcdFx0XHRcdCBzaXplX3QgbnJfYXBxbnMsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xODkte1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxOTA6XHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoLCAqaHRtcFsxMF07XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE5MS1cdGludCBpLCBuID0gMCwgcmMgPSAtRU5PREVWO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjE1LX1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjE2OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX3Nsb3dwYXRoX2tleV90b19wcm90a2V5KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjE3LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyMTg6aW50IHBrZXlfaGFuZGxlcl9nZW5fa2V5KGNvbnN0IHN0cnVjdCBwa2V5X2FwcW4gKmFwcW5zLCBzaXplX3QgbnJfYXBxbnMsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTIxOS1cdFx0XHQgdTMyIGtleXR5cGUsIHUzMiBrZXlzdWJ0eXBlLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjIyLXtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjIzOlx0Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqaDtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjI0LVx0aW50IHJjID0gLUVOT0RFVjtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjI1LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyMjY6XHRoID0gcGtleV9oYW5kbGVyX2dldF9rZXl0eXBlYmFzZWQoa2V5c3VidHlwZSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTIyNy1cdGlmIChoIFx1MDAyNlx1MDAyNiBoLVx1MDAzZWdlbl9rZXkpIHtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTIzMS1cdH1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjMyOlx0cGtleV9oYW5kbGVyX3B1dChoKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjMzLVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjM1LX1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjM2OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX2dlbl9rZXkpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yMzctXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjIzODppbnQgcGtleV9oYW5kbGVyX2Nscl90b19rZXkoY29uc3Qgc3RydWN0IHBrZXlfYXBxbiAqYXBxbnMsIHNpemVfdCBucl9hcHFucyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjM5LVx0XHRcdCAgICB1MzIga2V5dHlwZSwgdTMyIGtleXN1YnR5cGUsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNDQte1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyNDU6XHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNDYtXHRpbnQgcmMgPSAtRU5PREVWO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNDctXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI0ODpcdGggPSBwa2V5X2hhbmRsZXJfZ2V0X2tleXR5cGViYXNlZChrZXlzdWJ0eXBlKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjQ5LVx0aWYgKGggXHUwMDI2XHUwMDI2IGgtXHUwMDNlY2xyX3RvX2tleSkge1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjUzLVx0fVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyNTQ6XHRwa2V5X2hhbmRsZXJfcHV0KGgpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNTUtXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNTctfVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyNTg6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfY2xyX3RvX2tleSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI1OS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjYwOmludCBwa2V5X2hhbmRsZXJfdmVyaWZ5X2tleShjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNjEtXHRcdFx0ICAgIHUxNiAqY2FyZCwgdTE2ICpkb20sXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNjQte1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyNjU6XHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNjYtXHRpbnQgcmMgPSAtRU5PREVWO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNjctXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI2ODpcdGggPSBwa2V5X2hhbmRsZXJfZ2V0X2tleWJhc2VkKGtleSwga2V5bGVuKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjY5LVx0aWYgKGggXHUwMDI2XHUwMDI2IGgtXHUwMDNldmVyaWZ5X2tleSkge1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjcyLVx0fVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyNzM6XHRwa2V5X2hhbmRsZXJfcHV0KGgpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNzQtXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNzYtfVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyNzc6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfdmVyaWZ5X2tleSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI3OC1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6Mjc5OmludCBwa2V5X2hhbmRsZXJfYXBxbnNfZm9yX2tleShjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuLCB1MzIgZmxhZ3MsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI4MC1cdFx0XHQgICAgICAgc3RydWN0IHBrZXlfYXBxbiAqYXBxbnMsIHNpemVfdCAqbnJfYXBxbnMsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yODIte1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyODM6XHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yODQtXHRpbnQgcmMgPSAtRU5PREVWO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yODUtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI4NjpcdGggPSBwa2V5X2hhbmRsZXJfZ2V0X2tleWJhc2VkKGtleSwga2V5bGVuKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjg3LVx0aWYgKGggXHUwMDI2XHUwMDI2IGgtXHUwMDNlYXBxbnNfZm9yX2tleSlcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI4OS1cdFx0XHRcdCAgICAgIHhmbGFncyk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI5MDpcdHBrZXlfaGFuZGxlcl9wdXQoaCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI5MS1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI5My19XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI5NDpFWFBPUlRfU1lNQk9MKHBrZXlfaGFuZGxlcl9hcHFuc19mb3Jfa2V5KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjk1LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyOTY6aW50IHBrZXlfaGFuZGxlcl9hcHFuc19mb3Jfa2V5dHlwZShlbnVtIHBrZXlfa2V5X3R5cGUga2V5c3VidHlwZSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjk3LVx0XHRcdFx0ICAgdTggY3VyX21rdnBbMzJdLCB1OCBhbHRfbWt2cFszMl0sIHUzMiBmbGFncyxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMwMC17XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjMwMTpcdGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmg7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMwMi1cdGludCByYyA9IC1FTk9ERVY7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMwMy1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzA0Olx0aCA9IHBrZXlfaGFuZGxlcl9nZXRfa2V5dHlwZWJhc2VkKGtleXN1YnR5cGUpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zMDUtXHRpZiAoaCBcdTAwMjZcdTAwMjYgaC1cdTAwM2VhcHFuc19mb3Jfa2V5dHlwZSkge1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzA5LVx0fVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzozMTA6XHRwa2V5X2hhbmRsZXJfcHV0KGgpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zMTEtXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zMTMtfVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzozMTQ6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfYXBxbnNfZm9yX2tleXR5cGUpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zMTUtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjMxNjp2b2lkIHBrZXlfaGFuZGxlcl9yZXF1ZXN0X21vZHVsZXModm9pZClcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzE3LXtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzE4LSNpZmRlZiBDT05GSUdfTU9EVUxFU1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzozMTk6XHRzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHBrZXlfaGFuZGxlcl9tb2R1bGVzW10gPSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMyMC0jaWYgSVNfTU9EVUxFKENPTkZJR19QS0VZX0NDQSlcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMzNC1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzM1Olx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShwa2V5X2hhbmRsZXJfbW9kdWxlcyk7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjMzNjpcdFx0Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqaDtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzM3LVx0XHRib29sIGZvdW5kID0gZmFsc2U7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNDEtXHRcdFx0aWYgKGgtXHUwMDNlbW9kdWxlIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzozNDI6XHRcdFx0ICAgICFzdHJjbXAoaC1cdTAwM2Vtb2R1bGUtXHUwMDNlbmFtZSwgcGtleV9oYW5kbGVyX21vZHVsZXNbaV0pKSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTM0My1cdFx0XHRcdGZvdW5kID0gdHJ1ZTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTM0OC1cdFx0aWYgKCFmb3VuZCkge1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzozNDk6XHRcdFx0cHJfZGVidWcoXCYjMzQ7cmVxdWVzdF9tb2R1bGUoJXMpXFxuXCYjMzQ7LCBwa2V5X2hhbmRsZXJfbW9kdWxlc1tpXSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjM1MDpcdFx0XHRyZXF1ZXN0X21vZHVsZShwa2V5X2hhbmRsZXJfbW9kdWxlc1tpXSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTM1MS1cdFx0fVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzU0LX1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzU1OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX3JlcXVlc3RfbW9kdWxlcyk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTM1Ni1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oPTE0NT1leHRlcm4gY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqcGtleV9hdHRyX2dyb3Vwc1tdO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMTUwLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoxNTE6c3RydWN0IHBrZXlfaGFuZGxlciB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTE1Mi1cdHN0cnVjdCBtb2R1bGUgKm1vZHVsZTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTE5Mi1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg6MTkzOmludCBwa2V5X2hhbmRsZXJfcmVnaXN0ZXIoc3RydWN0IHBrZXlfaGFuZGxlciAqaGFuZGxlcik7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oOjE5NDppbnQgcGtleV9oYW5kbGVyX3VucmVnaXN0ZXIoc3RydWN0IHBrZXlfaGFuZGxlciAqaGFuZGxlcik7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTE5NS1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTE5OS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg6MjAwOmNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKnBrZXlfaGFuZGxlcl9nZXRfa2V5YmFzZWQoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbik7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oOjIwMTpjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpwa2V5X2hhbmRsZXJfZ2V0X2tleXR5cGViYXNlZChlbnVtIHBrZXlfa2V5X3R5cGUga3QpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoyMDI6dm9pZCBwa2V5X2hhbmRsZXJfcHV0KGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmhhbmRsZXIpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMDMtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oOjIwNDppbnQgcGtleV9oYW5kbGVyX2tleV90b19wcm90a2V5KGNvbnN0IHN0cnVjdCBwa2V5X2FwcW4gKmFwcW5zLCBzaXplX3QgbnJfYXBxbnMsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIwNS1cdFx0XHRcdGNvbnN0IHU4ICprZXksIHUzMiBrZXlsZW4sXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMDctXHRcdFx0XHR1MzIgeGZsYWdzKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg6MjA4OmludCBwa2V5X2hhbmRsZXJfc2xvd3BhdGhfa2V5X3RvX3Byb3RrZXkoY29uc3Qgc3RydWN0IHBrZXlfYXBxbiAqYXBxbnMsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIwOS1cdFx0XHRcdFx0IHNpemVfdCBucl9hcHFucyxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIxMi1cdFx0XHRcdFx0IHUzMiAqcHJvdGtleXR5cGUsIHUzMiB4ZmxhZ3MpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoyMTM6aW50IHBrZXlfaGFuZGxlcl9nZW5fa2V5KGNvbnN0IHN0cnVjdCBwa2V5X2FwcW4gKmFwcW5zLCBzaXplX3QgbnJfYXBxbnMsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIxNC1cdFx0XHQgdTMyIGtleXR5cGUsIHUzMiBrZXlzdWJ0eXBlLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjE2LVx0XHRcdCB1OCAqa2V5YnVmLCB1MzIgKmtleWJ1ZmxlbiwgdTMyICprZXlpbmZvLCB1MzIgeGZsYWdzKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg6MjE3OmludCBwa2V5X2hhbmRsZXJfY2xyX3RvX2tleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucywgc2l6ZV90IG5yX2FwcW5zLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMTgtXHRcdFx0ICAgIHUzMiBrZXl0eXBlLCB1MzIga2V5c3VidHlwZSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIyMi1cdFx0XHQgICAgdTMyIHhmbGFncyk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oOjIyMzppbnQgcGtleV9oYW5kbGVyX3ZlcmlmeV9rZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjI0LVx0XHRcdCAgICB1MTYgKmNhcmQsIHUxNiAqZG9tLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjI2LVx0XHRcdCAgICB1MzIgeGZsYWdzKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg6MjI3OmludCBwa2V5X2hhbmRsZXJfYXBxbnNfZm9yX2tleShjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuLCB1MzIgZmxhZ3MsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIyOC1cdFx0XHQgICAgICAgc3RydWN0IHBrZXlfYXBxbiAqYXBxbnMsIHNpemVfdCAqbnJfYXBxbnMsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIyOS1cdFx0XHQgICAgICAgdTMyIHhmbGFncyk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oOjIzMDppbnQgcGtleV9oYW5kbGVyX2FwcW5zX2Zvcl9rZXl0eXBlKGVudW0gcGtleV9rZXlfdHlwZSBrdHlwZSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjMxLVx0XHRcdFx0ICAgdTggY3VyX21rdnBbMzJdLCB1OCBhbHRfbWt2cFszMl0sIHUzMiBmbGFncyxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIzNy0gKi9cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg6MjM4OnZvaWQgcGtleV9oYW5kbGVyX3JlcXVlc3RfbW9kdWxlcyh2b2lkKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjM5LVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYz01NTc9c3RhdGljIGludCBjY2Ffc2xvd3BhdGhfa2V5MnByb3RrZXkoY29uc3Qgc3RydWN0IHBrZXlfYXBxbiAqYXBxbnMsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2NjYS5jLTU5NS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYzo1OTY6c3RhdGljIHN0cnVjdCBwa2V5X2hhbmRsZXIgY2NhX2hhbmRsZXIgPSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfY2NhLmMtNTk3LVx0Lm1vZHVsZVx0XHRcdCA9IFRISVNfTU9EVUxFLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYz02MTM9c3RhdGljIGludCBfX2luaXQgcGtleV9jY2FfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYy02MTUtXHQvKiByZWdpc3RlciB0aGlzIG1vZHVsZSBhcyBwa2V5IGhhbmRsZXIgZm9yIGFsbCB0aGUgY2NhIHN0dWZmICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfY2NhLmM6NjE2Olx0cmV0dXJuIHBrZXlfaGFuZGxlcl9yZWdpc3RlcihcdTAwMjZjY2FfaGFuZGxlcik7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfY2NhLmMtNjE3LX1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfY2NhLmM9NjIyPXN0YXRpYyB2b2lkIF9fZXhpdCBwa2V5X2NjYV9leGl0KHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2NjYS5jLTYyNC1cdC8qIHVucmVnaXN0ZXIgdGhpcyBtb2R1bGUgYXMgcGtleSBoYW5kbGVyICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfY2NhLmM6NjI1Olx0cGtleV9oYW5kbGVyX3VucmVnaXN0ZXIoXHUwMDI2Y2NhX2hhbmRsZXIpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2NjYS5jLTYyNi19XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2VwMTEuYz01MDQ9c3RhdGljIGludCBlcDExX3Nsb3dwYXRoX2tleTJwcm90a2V5KGNvbnN0IHN0cnVjdCBwa2V5X2FwcW4gKmFwcW5zLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmMtNTQyLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2VwMTEuYzo1NDM6c3RhdGljIHN0cnVjdCBwa2V5X2hhbmRsZXIgZXAxMV9oYW5kbGVyID0ge1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2VwMTEuYy01NDQtXHQubW9kdWxlXHRcdFx0ID0gVEhJU19NT0RVTEUsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2VwMTEuYz01NjA9c3RhdGljIGludCBfX2luaXQgcGtleV9lcDExX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jLTU2Mi1cdC8qIHJlZ2lzdGVyIHRoaXMgbW9kdWxlIGFzIHBrZXkgaGFuZGxlciBmb3IgYWxsIHRoZSBlcDExIHN0dWZmICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jOjU2MzpcdHJldHVybiBwa2V5X2hhbmRsZXJfcmVnaXN0ZXIoXHUwMDI2ZXAxMV9oYW5kbGVyKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmMtNTY0LX1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jPTU2OT1zdGF0aWMgdm9pZCBfX2V4aXQgcGtleV9lcDExX2V4aXQodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jLTU3MS1cdC8qIHVucmVnaXN0ZXIgdGhpcyBtb2R1bGUgYXMgcGtleSBoYW5kbGVyICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jOjU3MjpcdHBrZXlfaGFuZGxlcl91bnJlZ2lzdGVyKFx1MDAyNmVwMTFfaGFuZGxlcik7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jLTU3My19XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3Bja21vLmM9NDM1PXN0YXRpYyBpbnQgcGtleV9wY2ttb192ZXJpZnlrZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfcGNrbW8uYy00NDItXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfcGNrbW8uYzo0NDM6c3RhdGljIHN0cnVjdCBwa2V5X2hhbmRsZXIgcGNrbW9faGFuZGxlciA9IHtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jLTQ0NC1cdC5tb2R1bGVcdFx0ICAgICAgPSBUSElTX01PRFVMRSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfcGNrbW8uYz00NTY9c3RhdGljIGludCBfX2luaXQgcGtleV9wY2ttb19pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3Bja21vLmMtNDY5LVx0LyogcmVnaXN0ZXIgdGhpcyBtb2R1bGUgYXMgcGtleSBoYW5kbGVyIGZvciBhbGwgdGhlIHBja21vIHN0dWZmICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfcGNrbW8uYzo0NzA6XHRyZXR1cm4gcGtleV9oYW5kbGVyX3JlZ2lzdGVyKFx1MDAyNnBja21vX2hhbmRsZXIpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3Bja21vLmMtNDcxLX1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfcGNrbW8uYz00NzY9c3RhdGljIHZvaWQgX19leGl0IHBrZXlfcGNrbW9fZXhpdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jLTQ3OC1cdC8qIHVucmVnaXN0ZXIgdGhpcyBtb2R1bGUgYXMgcGtleSBoYW5kbGVyICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfcGNrbW8uYzo0Nzk6XHRwa2V5X2hhbmRsZXJfdW5yZWdpc3RlcihcdTAwMjZwY2ttb19oYW5kbGVyKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jLTQ4MC19XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMTctLypcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjE4OiAqIFdyYXBwZXIgYXJvdW5kIHBrZXlfaGFuZGxlcl9nZW5fa2V5KCkgd2hpY2ggZGVhbHMgd2l0aCB0aGVcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTE5LSAqIEVOT0RFViByZXR1cm4gY29kZSBhbmQgdGhlbiB0cmllcyB0byBlbmZvcmNlIGEgcGtleSBoYW5kbGVyXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMjEtICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYzoyMjpzdGF0aWMgaW50IHN5c19wa2V5X2hhbmRsZXJfZ2VuX2tleSh1MzIga2V5dHlwZSwgdTMyIGtleXN1YnR5cGUsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0yMy1cdFx0XHRcdCAgICB1MzIga2V5Yml0c2l6ZSwgdTMyIGZsYWdzLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTI3LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6Mjg6XHRyYyA9IHBrZXlfaGFuZGxlcl9nZW5fa2V5KE5VTEwsIDAsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0yOS1cdFx0XHRcdCAga2V5dHlwZSwga2V5c3VidHlwZSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0zMi1cdGlmIChyYyA9PSAtRU5PREVWKSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYzozMzpcdFx0cGtleV9oYW5kbGVyX3JlcXVlc3RfbW9kdWxlcygpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6MzQ6XHRcdHJjID0gcGtleV9oYW5kbGVyX2dlbl9rZXkoTlVMTCwgMCxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTM1LVx0XHRcdFx0XHQgIGtleXR5cGUsIGtleXN1YnR5cGUsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM9NDk9c3RhdGljIHNzaXplX3QgcGtleV9wcm90a2V5X2Flc19hdHRyX3JlYWQodTMyIGtleXR5cGUsIGJvb2wgaXNfeHRzLCBjaGFyICpidWYsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtNjctXHRwcm90a2V5LmxlbiA9IHNpemVvZihwcm90a2V5LnByb3RrZXkpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6Njg6XHRyYyA9IHN5c19wa2V5X2hhbmRsZXJfZ2VuX2tleShrZXl0eXBlLCBQS0VZX1RZUEVfUFJPVEtFWSwgMCwgMCxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTY5LVx0XHRcdFx0ICAgICAgcHJvdGtleS5wcm90a2V5LCBcdTAwMjZwcm90a2V5Lmxlbixcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy04MS1cdFx0cHJvdGtleS5sZW4gPSBzaXplb2YocHJvdGtleS5wcm90a2V5KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjgyOlx0XHRyYyA9IHN5c19wa2V5X2hhbmRsZXJfZ2VuX2tleShrZXl0eXBlLCBQS0VZX1RZUEVfUFJPVEtFWSwgMCwgMCxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTgzLVx0XHRcdFx0XHQgICAgICBwcm90a2V5LnByb3RrZXksIFx1MDAyNnByb3RrZXkubGVuLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jPTEwNj1zdGF0aWMgc3NpemVfdCBwa2V5X3Byb3RrZXlfYWVzX3h0c19hdHRyX3JlYWQodTMyIGtleXR5cGUsIGNoYXIgKmJ1Zixcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0xMzEtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYzoxMzI6XHRyYyA9IHN5c19wa2V5X2hhbmRsZXJfZ2VuX2tleShrZXl0eXBlLCBQS0VZX1RZUEVfUFJPVEtFWSwgMCwgMCxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTEzMy1cdFx0XHRcdCAgICAgIHQtXHUwMDNlcHJvdGtleSwgXHUwMDI2cHJvdGxlbiwgXHUwMDI2cHJvdHR5cGUpO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jPTE0OD1zdGF0aWMgc3NpemVfdCBwa2V5X3Byb3RrZXlfaG1hY19hdHRyX3JlYWQodTMyIGtleXR5cGUsIGNoYXIgKmJ1Zixcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0xNzMtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYzoxNzQ6XHRyYyA9IHN5c19wa2V5X2hhbmRsZXJfZ2VuX2tleShrZXl0eXBlLCBQS0VZX1RZUEVfUFJPVEtFWSwgMCwgMCxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTE3NS1cdFx0XHRcdCAgICAgIHQtXHUwMDNlcHJvdGtleSwgXHUwMDI2cHJvdGxlbiwgXHUwMDI2cHJvdHR5cGUpO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jPTMwOD1zdGF0aWMgc3NpemVfdCBwa2V5X2NjYWRhdGFfYWVzX2F0dHJfcmVhZCh1MzIga2V5dHlwZSwgYm9vbCBpc194dHMsIGNoYXIgKmJ1Zixcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0zMjEtXHRidWZsZW4gPSBzaXplb2Yoc2Vja2V5LVx1MDAzZXNlY2tleSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYzozMjI6XHRyYyA9IHN5c19wa2V5X2hhbmRsZXJfZ2VuX2tleShrZXl0eXBlLCBQS0VZX1RZUEVfQ0NBX0RBVEEsIDAsIDAsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0zMjMtXHRcdFx0XHQgICAgICBzZWNrZXktXHUwMDNlc2Vja2V5LCBcdTAwMjZidWZsZW4sIE5VTEwpO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTMyOS1cdFx0YnVmbGVuID0gc2l6ZW9mKHNlY2tleS1cdTAwM2VzZWNrZXkpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6MzMwOlx0XHRyYyA9IHN5c19wa2V5X2hhbmRsZXJfZ2VuX2tleShrZXl0eXBlLCBQS0VZX1RZUEVfQ0NBX0RBVEEsIDAsIDAsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0zMzEtXHRcdFx0XHRcdCAgICAgIHNlY2tleS1cdTAwM2VzZWNrZXksIFx1MDAyNmJ1ZmxlbiwgTlVMTCk7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM9NDE5PXN0YXRpYyBzc2l6ZV90IHBrZXlfY2NhY2lwaGVyX2Flc19hdHRyX3JlYWQoZW51bSBwa2V5X2tleV9zaXplIGtleWJpdHMsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtNDMzLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6NDM0Olx0cmMgPSBzeXNfcGtleV9oYW5kbGVyX2dlbl9rZXkocGtleV9hZXNfYml0c2l6ZV90b19rZXl0eXBlKGtleWJpdHMpLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtNDM1LVx0XHRcdFx0ICAgICAgUEtFWV9UWVBFX0NDQV9DSVBIRVIsIGtleWJpdHMsIDAsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtNDQyLVx0XHRidWYgJiM0Mzs9IENDQUNJUEhFUlRPS0VOU0laRTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjQ0MzpcdFx0cmMgPSBzeXNfcGtleV9oYW5kbGVyX2dlbl9rZXkoXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy00NDQtXHRcdFx0cGtleV9hZXNfYml0c2l6ZV90b19rZXl0eXBlKGtleWJpdHMpLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jPTUzND1zdGF0aWMgc3NpemVfdCBwa2V5X2VwMTFfYWVzX2F0dHJfcmVhZChlbnVtIHBrZXlfa2V5X3NpemUga2V5Yml0cyxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy01NDgtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYzo1NDk6XHRyYyA9IHN5c19wa2V5X2hhbmRsZXJfZ2VuX2tleShwa2V5X2Flc19iaXRzaXplX3RvX2tleXR5cGUoa2V5Yml0cyksXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy01NTAtXHRcdFx0XHQgICAgICBQS0VZX1RZUEVfRVAxMV9BRVMsIGtleWJpdHMsIDAsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtNTU3LVx0XHRidWYgJiM0Mzs9IE1BWEVQMTFBRVNLRVlCTE9CU0laRTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjU1ODpcdFx0cmMgPSBzeXNfcGtleV9oYW5kbGVyX2dlbl9rZXkoXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy01NTktXHRcdFx0cGtleV9hZXNfYml0c2l6ZV90b19rZXl0eXBlKGtleWJpdHMpLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTIzMz1zdGF0aWMgaW50IHV2X3ZlcmlmeWtleShjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI3MS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjI3MjpzdGF0aWMgc3RydWN0IHBrZXlfaGFuZGxlciB1dl9oYW5kbGVyID0ge1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjczLVx0Lm1vZHVsZVx0XHRcdCA9IFRISVNfTU9EVUxFLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTI4ND1zdGF0aWMgaW50IF9faW5pdCBwa2V5X3V2X2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yOTctXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoyOTg6XHRyYyA9IHBrZXlfaGFuZGxlcl9yZWdpc3RlcihcdTAwMjZ1dl9oYW5kbGVyKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI5OS1cdGlmIChyYylcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0zMDg9c3RhdGljIHZvaWQgX19leGl0IHBrZXlfdXZfZXhpdCh2b2lkKVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMzA5LXtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjMxMDpcdHBrZXlfaGFuZGxlcl91bnJlZ2lzdGVyKFx1MDAyNnV2X2hhbmRsZXIpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMzExLVx0bXV0ZXhfbG9jayhcdTAwMjZ1dl9saXN0X211dGV4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY3MDcKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVhY2hpbmcgYHV2X2ZpbmRfc2VjcmV0YCBmcm9tIFVzZXJzcGFjZSB2aWEgYC9kZXYvcGtleWAgaW9jdGxzKioKCk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRyYWNpbmcgdGhlIHBhdGggdG8gYHV2X2ZpbmRfc2VjcmV0YC4gSXQmIzM5O3MgY2FsbGVkIGZyb20gYGdldF9zZWNyZXRfbWV0YWRhdGFgLCB3aGljaCBpcyBpdHNlbGYgY2FsbGVkIGZyb20gdHdvIHBsYWNlczogYHJldHJpZXZlX3NlY3JldGAgYW5kIGB1dl92ZXJpZnlrZXlgLiBJIGtub3cgdGhhdCBgdXZfdmVyaWZ5a2V5YCBpcyByZWdpc3RlcmVkIGFzIGAudmVyaWZ5X2tleWAgd2l0aGluIGB1dl9oYW5kbGVyYCwgd2hpY2ggaXMgaW5pdGlhbGl6ZWQgZHVyaW5nIGBwa2V5X3V2X2luaXRgLiBBbmQgYHBrZXlfdXZfaW5pdGAgaXMgdGhlIG1vZHVsZSBpbml0IGZ1bmN0aW9uIGZvciBgcGtleV91dmAuCgpTbywgYHV2X3ZlcmlmeWtleWAgaXMgdWx0aW1hdGVseSBjYWxsZWQgYnkgYHBrZXlfaGFuZGxlcl92ZXJpZnlfa2V5YC4gVGhhdCwgaW4gdHVybiwgaXMgdHJpZ2dlcmVkIGJ5IGBwa2V5X2lvY3RsX3ZlcmlmeWtleWAsIGBwa2V5X2lvY3RsX3ZlcmlmeWtleTJgLCBhbmQgYHBrZXlfaW9jdGxfdmVyaWZ5cHJvdGtgLiBBaGEhIFRob3NlIGFyZSBpb2N0bHMgb24gYC9kZXYvcGtleWAuIFRoYXQmIzM5O3MgdGhlIGxpbmsuICoqWWVzLCB0aGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggdGhvc2UgYC9kZXYvcGtleWAgaW9jdGxzLioqCgpOb3cgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBjYW4gdGhpcyBiZSByZWFjaGVkIGluIFFFTVU/IEkga25vdyB0aGUgczM5MHggYXJjaGl0ZWN0dXJlIGdldHMgYXR0ZW50aW9uIGZyb20gc3l6a2FsbGVyLiBUaGF0JiMzOTtzIGEgZ29vZCBzaWduLiBBbmQsIGxvb2tpbmcgYXQgdGhlIGNvZGUsIEkgc2VlIHRoYXQgYHV2X2ZpbmRfc2VjcmV0YCBpcyBsb2NhdGVkIGluIGBhcmNoL3MzOTAva2VybmVsL3V2LmNgLiBUaGVyZWZvcmUsIHRoZSBhcmNoaXRlY3R1cmUgdGhhdCB1c2VzIHRoaXMgaXMgczM5MHguCgpMZXQmIzM5O3MgcXVpY2tseSBjaGVjayB3aGV0aGVyIGBDT05GSUdfUEtFWV9VVmAgaXMgcmVxdWlyZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24uIFRoYXQmIzM5O2xsIGJlIGEga2V5IHBhcnQgb2YgZGV0ZXJtaW5pbmcgdGhlIG92ZXJhbGwgZXhwb3N1cmUgdG8gZXhwbG9pdGF0aW9uIGluIHRoZSB2YXJpb3VzIGJ1aWxkIHNldHVwcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBLRVlfVVYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9jcnlwdG8vS2NvbmZpZz0xMzc9Y29uZmlnIFBLRVlfUENLTU9cbi0tXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTE1Ny1cbmRyaXZlcnMvY3J5cHRvL0tjb25maWc6MTU4OmNvbmZpZyBQS0VZX1VWXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTE1OS1cdHRyaXN0YXRlIFwmIzM0O1BLRVkgVVYgc3VwcG9ydCBoYW5kbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NDEwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyB0aGUgS2NvbmZpZyBPcHRpb25zIGZvciBQS0VZX1VWKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgS2NvbmZpZyBkZWZpbml0aW9uIGZvciBgUEtFWV9VVmAuIE15IGluc3RpbmN0IHNheXMgaXQmIzM5O2xsIGJlIGluIGVpdGhlciB0aGUgczM5MCBjcnlwdG8gZHJpdmVycyBvciB0aGUgZ2VuZXJpYyBjcnlwdG8gc2VjdGlvbi4gR2l2ZW4gaXRzIGxpa2VseSBmdW5jdGlvbiwgdGhlIHMzOTAgcGF0aCBtaWdodCBiZSBhIGJldHRlciBiZXQgc2luY2UgaXQmIzM5O3MgcHJvYmFibHkgcmVsYXRlZCB0byBoYXJkd2FyZS1zcGVjaWZpYyBrZXkgbWFuYWdlbWVudC4gSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgYGRyaXZlcnMvczM5MC9jcnlwdG8vS2NvbmZpZ2AgZmlyc3QuIElmIGl0JiMzOTtzIG5vdCB0aGVyZSwgSSYjMzk7bGwgbW92ZSBvbiBhbmQgaW1tZWRpYXRlbHkgbG9vayBpbiBgZHJpdmVycy9jcnlwdG8vS2NvbmZpZ2AuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcHJvZ3Jlc3Npb24uIEZpbmRpbmcgdGhlIGV4YWN0IGxvY2F0aW9uIGFuZCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgYFBLRVlfVVZgIGlzIGtleSBmb3Igd2hhdGV2ZXIgSSYjMzk7bSB0cm91Ymxlc2hvb3Rpbmcgb3IgY29uZmlndXJpbmcuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQS0VZX1VWJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2ODEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHVuZm9sZGVkOgoKKipEZWJ1Z2dpbmcgS2NvbmZpZyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gY2hhc2luZyBkb3duIHRoaXMgYFBLRVlfUENLTU9gIGNvbmZpZ3VyYXRpb24gaXNzdWUuIEl0IGxvb2tzIGxpa2UgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gaXMgcG9pbnRpbmcgbWUgdG8gYGRyaXZlcnMvY3J5cHRvL0tjb25maWdgLCB3aGljaCBzZWVtcyBsb2dpY2FsLiBXYWl0IGEgbWludXRl4oCmIHRoZSBvdXRwdXQgaW5kaWNhdGVzIGBkcml2ZXJzL2NyeXB0by9LY29uZmlnPTEzNz1jb25maWcgUEtFWV9QQ0tNT2AsIGNvbmZpcm1pbmcgdGhhdCBsb2NhdGlvbiBpcyByZWxldmFudC4gQnV0IHNvbWV0aGluZyBmZWVscyBvZmYuIERpZG4mIzM5O3QgSSBqdXN0IHRyeSB0byBsb29rIGludG8gYGRyaXZlcnMvczM5MC9jcnlwdG8vS2NvbmZpZ2A/IEFuZCB0aGF0ICpkaWRuJiMzOTt0KiBleGlzdCwgcmlnaHQ/IE9rYXksIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBsb29raW5nIGluIHRoZSByaWdodCBwbGFjZSwgc28gbm93IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBsb2NhdGlvbiBvciBqdXN0IHZlcmlmeSBpdCYjMzk7cyB0aGUgY29ycmVjdCBLY29uZmlnIGZpbGUuIExldCYjMzk7cyByZXZpc2l0IGJvdGggdGhvc2UgS2NvbmZpZyBsb2NhdGlvbnMuIEdvdHRhIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1peGVkIHNvbWV0aGluZyB1cCwgZ2l2ZW4gdGhhdCB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG9uZSBzZWVtcyBhYnNlbnQuIFRoaXMgZmVlbHMgbGlrZSBpdCBtaWdodCBiZSBhIHN1YnRsZSBidXQgY3JpdGljYWwgZGlmZmVyZW5jZSBpbiBob3cgdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQvY29uZmlndXJlZCBiYXNlZCBvbiB0aGUgYXJjaGl0ZWN0dXJlLCB3aGljaCBpcyBpbXBvcnRhbnQgdG8ga2VlcCBpbiBtaW5kLiBJIGhvcGUgSSBjYW4gcmVzb2x2ZSB0aGlzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvY3J5cHRvL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE1MDpcdFx0ICBpcyBlc3BlY2lhbGx5IHVzZWQgZHVyaW5nIHNlbGYgdGVzdCBvZiBwcm90ZWN0ZWQga2V5IGNpcGhlcnMgbGlrZVxuIDE1MTpcdFx0ICBQQUVTIGJ1dCB0aGUgQ0NBIGFuZCBFUDExIGhhbmRsZXIgcHJvdmlkZSBhbHRlcm5hdGUgd2F5cyB0b1xuIDE1MjpcdFx0ICBnZW5lcmF0ZSBwcm90ZWN0ZWQga2V5cyBmcm9tIGNsZWFyIGtleSB2YWx1ZXMuXG4gMTUzOlx0XG4gMTU0Olx0XHQgIElmIHlvdSBoYXZlIHNlbGVjdGVkIHRoZSBQS0VZIG9wdGlvbiB0aGVuIHlvdSBzaG91bGQgYWxzbyBlbmFibGVcbiAxNTU6XHRcdCAgdGhpcyBvcHRpb24gdW5sZXNzIHlvdSBhcmUgc3VyZSB5b3UgbmV2ZXIgbmVlZCB0byBkZXJpdmUgcHJvdGVjdGVkXG4gMTU2Olx0XHQgIGtleXMgZnJvbSBjbGVhciBrZXkgdmFsdWVzIGRpcmVjdGx5IHZpYSBQQ0tNTy5cbiAxNTc6XHRcbiAxNTg6XHRjb25maWcgUEtFWV9VVlxuIDE1OTpcdFx0dHJpc3RhdGUgXCYjMzQ7UEtFWSBVViBzdXBwb3J0IGhhbmRsZXJcJiMzNDtcbiAxNjA6XHRcdGRlcGVuZHMgb24gUEtFWVxuIDE2MTpcdFx0ZGVwZW5kcyBvbiBTMzkwX1VWX1VBUElcbiAxNjI6XHRcdGhlbHBcbiAxNjM6XHRcdCAgVGhpcyBpcyB0aGUgUEtFWSBVbHRyYXZpc29yIHN1cHBvcnQgaGFuZGxlciBmb3IgZGVyaXZpbmcgcHJvdGVjdGVkXG4gMTY0Olx0XHQgIGtleXMgZnJvbSBzZWNyZXRzIHN0b3JlZCB3aXRoaW4gdGhlIFVsdHJhdmlzb3IgKFVWKS5cbiAxNjU6XHRcbiAxNjY6XHRcdCAgVGhpcyBtb2R1bGUgd29ya3MgdG9nZXRoZXIgd2l0aCB0aGUgVVYgZGV2aWNlIGFuZCBzdXBwb3J0cyB0aGVcbiAxNjc6XHRcdCAgcmV0cmlldmFsIG9mIHByb3RlY3RlZCBrZXlzIGZyb20gc2VjcmV0cyBzdG9yZWQgd2l0aGluIHRoZVxuIDE2ODpcdFx0ICBVViBmaXJtd2FyZSBsYXllci4gVGhpcyBzZXJ2aWNlIGlzIG9ubHkgYXZhaWxhYmxlIHdpdGhpblxuIDE2OTpcdFx0ICBhIHByb3RlY3RlZCBleGVjdXRpb24gZ3Vlc3QgYW5kIHRodXMgdGhpcyBtb2R1bGUgd2lsbCBmYWlsIHVwb25cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzNzgKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqU2VjdXJlIEV4ZWN1dGlvbiBhbmQgU3l6a2FsbGVyIG9uIHMzOTB4KioKCk9rYXksIHNvIEkgc2VlIHRoaXMgbWVzc2FnZTogJiMzNDtUaGlzIHNlcnZpY2UgaXMgb25seSBhdmFpbGFibGUgd2l0aGluIGEgcHJvdGVjdGVkIGV4ZWN1dGlvbiBndWVzdCwmIzM0OyB3aGljaCBpbW1lZGlhdGVseSByYWlzZXMgYSBxdWVzdGlvbjogZG9lcyBRRU1VLCB0aGUgdmlydHVhbCBtYWNoaW5lIEkmIzM5O20gcHJvYmFibHkgZGVhbGluZyB3aXRoIGhlcmUsIGFjdHVhbGx5IHN1cHBvcnQgc2VjdXJlIGV4ZWN1dGlvbj8gSXQgc291bmRzIGxpa2UgYSBzZWN1cmUgZXhlY3V0aW9uIGd1ZXN0LCBvciBTZWN1cmUgRXhlY3V0aW9uLCBpcyBhIHByZXJlcXVpc2l0ZS4KCkdvb2QsIGl0IHNlZW1zIFFFTVUgKmRvZXMqIHN1cHBvcnQgczM5MHggU2VjdXJlIEV4ZWN1dGlvbiwgc3BlY2lmaWNhbGx5IHVzaW5nICYjMzk7cHJvdHZpcnQmIzM5Oy4gVGhhdCYjMzk7cyBhIHBvaW50IGluIHRoZSByaWdodCBkaXJlY3Rpb24uIEJ1dCBob2xkIG9uLCB0aGUgcmVhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHN5emthbGxlciBpcyAqY29uZmlndXJlZCogdG8gcnVuIHMzOTB4IGluIHRoaXMgU2VjdXJlIEV4ZWN1dGlvbiBtb2RlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHN5emthbGxlciYjMzk7cyBzZXR1cCBpcyBjb21wYXRpYmxlLgoKTGV0JiMzOTtzIHJlLWV4YW1pbmUgdGhlIHByb21wdCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBoaW50cywgaXQgc3RhdGVzIHRoYXQgJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUmIzM0Oy4gU2luY2UgUUVNVSAqY2FuKiBzdXBwb3J0IHMzOTB4IFNlY3VyZSBFeGVjdXRpb24sIHRoYXQgY29kZSBwYXRoIGlzIGluZGVlZCBwb3NzaWJsZSB0byByZWFjaC4KCk9rYXksIHNpbmNlIFFFTVUgKnN1cHBvcnRzKiBzMzkweCBTZWN1cmUgRXhlY3V0aW9uIGFuZCB0aGUgJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzJiMzNDsgbGluZSBjYW4gYmUgY29uc2lkZXJlZCBhcyB0aGUgY2F2ZWF0LCBpdCAqaXMqIHBvc3NpYmxlIHRvIHJlYWNoLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGlzIGFueSBldmlkZW5jZSBvZiB0aGUgYWJpbGl0eSB0byBjYWxsIGB1dl9maW5kX3NlY3JldGAgaW4gYGFyY2gvczM5MC9rZXJuZWwvdXYuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2tlcm5lbC91di5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NzA6XHR9XG4gNzcxOlx0XG4gNzcyOlx0LyoqXG4gNzczOlx0ICogdXZfZmluZF9zZWNyZXQoKSAtIHNlYXJjaCBzZWNyZXQgbWV0YWRhdGEgZm9yIGEgZ2l2ZW4gc2VjcmV0IGlkLlxuIDc3NDpcdCAqIEBzZWNyZXRfaWQ6IHNlYXJjaCBwYXR0ZXJuLlxuIDc3NTpcdCAqIEBsaXN0OiBlcGhlbWVyYWwgYnVmZmVyIHNwYWNlXG4gNzc2Olx0ICogQHNlY3JldDogb3V0cHV0IGRhdGEsIGNvbnRhaW5pbmcgdGhlIHNlY3JldCYjMzk7cyBtZXRhZGF0YS5cbiA3Nzc6XHQgKlxuIDc3ODpcdCAqIENvbnRleHQ6IG1pZ2h0IHNsZWVwLlxuIDc3OTpcdCAqL1xuIDc4MDpcdGludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG4gNzgxOlx0XHRcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqbGlzdCxcbiA3ODI6XHRcdFx0ICAgc3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW1faGRyICpzZWNyZXQpXG4gNzgzOlx0e1xuIDc4NDpcdFx0dTE2IHN0YXJ0X2lkeDtcbiA3ODU6XHRcdHUxNiBsaXN0X3JjO1xuIDc4NjpcdFx0aW50IHJldDtcbiA3ODc6XHRcbiA3ODg6XHRcdGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4ID0gMDtcbiA3ODk6XHRcbiA3OTA6XHRcdGRvIHtcbiA3OTE6XHRcdFx0c3RhcnRfaWR4ID0gbGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHg7XG4gNzkyOlx0XHRcdHV2X2xpc3Rfc2VjcmV0cyhsaXN0LCBzdGFydF9pZHgsIFx1MDAyNmxpc3RfcmMsIE5VTEwpO1xuIDc5MzpcdFx0XHRpZiAobGlzdF9yYyAhPSBVVkNfUkNfRVhFQ1VURUQgXHUwMDI2XHUwMDI2IGxpc3RfcmMgIT0gVVZDX1JDX01PUkVfREFUQSkge1xuIDc5NDpcdFx0XHRcdGlmIChsaXN0X3JjID09IFVWQ19SQ19JTlZfQ01EKVxuIDc5NTpcdFx0XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4gNzk2Olx0XHRcdFx0ZWxzZVxuIDc5NzpcdFx0XHRcdFx0cmV0dXJuIC1FSU87XG4gNzk4Olx0XHRcdH1cbiA3OTk6XHRcdFx0cmV0ID0gZmluZF9zZWNyZXRfaW5fcGFnZShzZWNyZXRfaWQsIGxpc3QsIHNlY3JldCk7XG4gODAwOlx0XHRcdGlmIChyZXQgPT0gMClcbiA4MDE6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDgwMjpcdFx0fSB3aGlsZSAobGlzdF9yYyA9PSBVVkNfUkNfTU9SRV9EQVRBIFx1MDAyNlx1MDAyNiBzdGFydF9pZHggXHUwMDNjIGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4KTtcbiA4MDM6XHRcbiA4MDQ6XHRcdHJldHVybiAtRU5PRU5UO1xuIDgwNTpcdH1cbiA4MDY6XHRFWFBPUlRfU1lNQk9MX0dQTCh1dl9maW5kX3NlY3JldCk7XG4gODA3Olx0XG4gODA4Olx0LyoqXG4gODA5Olx0ICogdXZfcmV0cmlldmVfc2VjcmV0KCkgLSBnZXQgdGhlIHNlY3JldCB2YWx1ZSBmb3IgdGhlIHNlY3JldCBpbmRleC5cbiA4MTA6XHQgKiBAc2VjcmV0X2lkeDogU2VjcmV0IGluZGV4IGZvciB3aGljaCB0aGUgc2VjcmV0IHNob3VsZCBiZSByZXRyaWV2ZWQuXG4gODExOlx0ICogQGJ1ZjogQnVmZmVyIHRvIHN0b3JlIHJldHJpZXZlZCBzZWNyZXQuXG4gODEyOlx0ICogQGJ1Zl9zaXplOiBTaXplIG9mIHRoZSBidWZmZXIuIFRoZSBjb3JyZWN0IGJ1ZmZlciBzaXplIGlzIHJlcG9ydGVkIGFzIHBhcnQgb2ZcbiA4MTM6XHQgKiB0aGUgcmVzdWx0IGZyb20gYHV2X2dldF9zZWNyZXRfbWV0YWRhdGFgLlxuIDgxNDpcdCAqXG4gODE1Olx0ICogQ2FsbHMgdGhlIFJldHJpZXZlIFNlY3JldCBVVkMgYW5kIHRyYW5zbGF0ZXMgdGhlIFVWIHJldHVybiBjb2RlIGludG8gYW4gZXJybm8uXG4gODE2Olx0ICpcbiA4MTc6XHQgKiBDb250ZXh0OiBtaWdodCBzbGVlcC5cbiA4MTg6XHQgKlxuIDgxOTpcdCAqIFJldHVybjpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk3MjEKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaDogVVYgU2VjcmV0IFNlYXJjaCBGaXgqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgdGlnaHRlbmluZyB1cCB0aGUgc2VjcmV0IHNlYXJjaGluZyBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgYHV2X2ZpbmRfc2VjcmV0YCBhbmQgYGZpbmRfc2VjcmV0X2luX3BhZ2VgIGZ1bmN0aW9ucy4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZml4aW5nIGEgYnVnIHJlbGF0ZWQgdG8gaG93IGBzdGFydF9pZHhgIGlzIGJlaW5nIGhhbmRsZWQsIGFuZCB0aGVyZSYjMzk7cyBhIHByb2JsZW0gd2l0aCBgZmluZF9zZWNyZXRfaW5fcGFnZWAgdXNpbmcgYGxpc3QtJmd0O3RvdGFsX251bV9zZWNyZXRzYCB3aGVuIGl0IHNob3VsZCBoYXZlIGJlZW4gdXNpbmcgYGxpc3QtJmd0O251bV9zZWNyX3N0b3JlZGAuIEEgZGVmaW5pdGUgZnVuY3Rpb25hbCBjaGFuZ2UsIHdoaWNoIGlzIGdvb2Qg4oCTIGl0IG1lYW5zIHdlJiMzOTtyZSBhZGRyZXNzaW5nIGEga25vd24gaXNzdWUuCgpUaGUgaW50ZXJlc3RpbmcgYml0IGlzIHdoZXJlIHRoaXMgY29kZSByZXNpZGVzIOKAkyBpdCYjMzk7cyByZWFjaGFibGUgdGhyb3VnaCB0aGUgYC9kZXYvcGtleWAgaW9jdGxzIHNwZWNpZmljYWxseSBvbiBzMzkweCBzeXN0ZW1zLiBUaGlzIHRpZXMgaXQgdG8gdGhlIGhhcmR3YXJlIGtleSBzdXBwb3J0LCBzbyB3ZSBuZWVkIHRvIGJlIGV4dHJhIGNhcmVmdWwgdG8gbm90IGJyZWFrIGFueXRoaW5nLiBUaGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIG5lZWRlZCBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5IGFyZSBgUEtFWV9VVmAsIGBTMzkwX1VWX1VBUElgLCBhbmQgYFBLRVlgLiBXZSYjMzk7cmUgZ29pbmcgdG8gbmVlZCB0byB2ZXJpZnkgaG93IGBQS0VZYCBpcyBjb25maWd1cmVkIGluIG91ciBlbnZpcm9ubWVudC4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgdGhlIGBQS0VZYCBjb25maWd1cmF0aW9uIHJpZ2h0IGF3YXkgdG8gYXNzZXNzIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQS0VZJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9jcnlwdG8vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2NyeXB0by9LY29uZmlnPTY3PWNvbmZpZyBaQ1JZUFRcbi0tXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTc3LVxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZzo3ODpjb25maWcgUEtFWVxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZy03OS1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbCBBUEkgZm9yIHByb3RlY3RlZCBrZXkgaGFuZGxpbmdcJiMzNDtcbi0tXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTEwNC1cbmRyaXZlcnMvY3J5cHRvL0tjb25maWc6MTA1OmNvbmZpZyBQS0VZX0NDQVxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZy0xMDYtXHR0cmlzdGF0ZSBcJiMzNDtQS0VZIENDQSBzdXBwb3J0IGhhbmRsZXJcJiMzNDtcbi0tXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTEyMC1cbmRyaXZlcnMvY3J5cHRvL0tjb25maWc6MTIxOmNvbmZpZyBQS0VZX0VQMTFcbmRyaXZlcnMvY3J5cHRvL0tjb25maWctMTIyLVx0dHJpc3RhdGUgXCYjMzQ7UEtFWSBFUDExIHN1cHBvcnQgaGFuZGxlclwmIzM0O1xuLS1cbmRyaXZlcnMvY3J5cHRvL0tjb25maWctMTM2LVxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZzoxMzc6Y29uZmlnIFBLRVlfUENLTU9cbmRyaXZlcnMvY3J5cHRvL0tjb25maWctMTM4LVx0dHJpc3RhdGUgXCYjMzQ7UEtFWSBQQ0tNTyBzdXBwb3J0IGhhbmRsZXJcJiMzNDtcbi0tXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTE1Ny1cbmRyaXZlcnMvY3J5cHRvL0tjb25maWc6MTU4OmNvbmZpZyBQS0VZX1VWXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTE1OS1cdHRyaXN0YXRlIFwmIzM0O1BLRVkgVVYgc3VwcG9ydCBoYW5kbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNDQzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEZXBlbmRlbmNpZXMgYW5kIEtleSBDb25zaWRlcmF0aW9ucyoqCgpBbHJpZ2h0LCByaWdodCBvZmYgdGhlIGJhdCwgSSBrbm93IEkmIzM5O20gZGVhbGluZyB3aXRoIGBQS0VZYCBhbmQgYFBLRVlfVVZgLiBUaGF0JiMzOTtzIHRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtLiBCdXQsIGhvbGQgb24gYSBzZWNvbmQuIEkgaGF2ZSBhIGh1bmNoLi4uIGRvZXNuJiMzOTt0IGBQS0VZYCBvZnRlbiBoYXZlIGEgdGlnaHQgbGluayB3aXRoIGBaQ1JZUFRgPyBJJiMzOTtkIGJldHRlciBkb3VibGUtY2hlY2sgdGhvc2UgZGVwZW5kZW5jaWVzIGJlZm9yZSBJIG1vdmUgYW55IGZ1cnRoZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHNjb3BlIGhlcmUsIGFuZCB0aGF0IHN0YXJ0cyB3aXRoIGtub3dpbmcgaG93IGBQS0VZYCByZWxpZXMgb24gb3RoZXIgbW9kdWxlcyBvciBjb21wb25lbnRzLiBMZXQmIzM5O3MgZGlnIGludG8gYFBLRVlgJiMzOTtzIGRlcGVuZGVuY2llcyBhbmQgY29uZmlybSBteSBpbml0aWFsIHRob3VnaHQuIFRoYXQgZGVwZW5kZW5jeSBjaGVjayBpcyBlc3NlbnRpYWwgdG8gYnVpbGRpbmcgYSByZWxpYWJsZSBzb2x1dGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2NyeXB0by9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA3ODpcdGNvbmZpZyBQS0VZXG4gIDc5Olx0XHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwgQVBJIGZvciBwcm90ZWN0ZWQga2V5IGhhbmRsaW5nXCYjMzQ7XG4gIDgwOlx0XHRkZXBlbmRzIG9uIFMzOTBcbiAgODE6XHRcdGhlbHBcbiAgODI6XHRcdCAgV2l0aCB0aGlzIG9wdGlvbiBlbmFibGVkIHRoZSBwa2V5IGtlcm5lbCBtb2R1bGVzIHByb3ZpZGUgYW4gQVBJXG4gIDgzOlx0XHQgIGZvciBjcmVhdGlvbiBhbmQgaGFuZGxpbmcgb2YgcHJvdGVjdGVkIGtleXMuIE90aGVyIHBhcnRzIG9mIHRoZVxuICA4NDpcdFx0ICBrZXJuZWwgb3IgdXNlcnNwYWNlIGFwcGxpY2F0aW9ucyBtYXkgdXNlIHRoZXNlIGZ1bmN0aW9ucy5cbiAgODU6XHRcbiAgODY6XHRcdCAgVGhlIHByb3RlY3RlZCBrZXkgc3VwcG9ydCBpcyBkaXN0cmlidXRlZCBpbnRvOlxuICA4NzpcdFx0ICAtIEEgcGtleSBiYXNlIGFuZCBBUEkga2VybmVsIG1vZHVsZSAocGtleS5rbykgd2hpY2ggb2ZmZXJzIHRoZVxuICA4ODpcdFx0ICAgIGluZnJhc3RydWN0dXJlIGZvciB0aGUgcGtleSBoYW5kbGVyIGtlcm5lbCBtb2R1bGVzLCB0aGUgaW9jdGxcbiAgODk6XHRcdCAgICBhbmQgdGhlIHN5c2ZzIEFQSSBhbmQgdGhlIGluLWtlcm5lbCBBUEkgdG8gdGhlIGNyeXB0byBjaXBoZXJcbiAgOTA6XHRcdCAgICBpbXBsZW1lbnRhdGlvbnMgdXNpbmcgcHJvdGVjdGVkIGtleS5cbiAgOTE6XHRcdCAgLSBBIHBrZXkgcGNrbW8ga2VybmVsIG1vZHVsZSAocGtleS1wY2ttby5rbykgd2hpY2ggaXMgYXV0b21hdGljYWxseVxuICA5MjpcdFx0ICAgIGxvYWRlZCB3aGVuIHBja21vIHN1cHBvcnQgKHRoYXQgaXMgZ2VuZXJhdGlvbiBvZiBwcm90ZWN0ZWQga2V5c1xuICA5MzpcdFx0ICAgIGZyb20gY2xlYXIga2V5IHZhbHVlcykgaXMgYXZhaWxhYmxlLlxuICA5NDpcdFx0ICAtIEEgcGtleSBDQ0Ega2VybmVsIG1vZHVsZSAocGtleS1jY2Eua28pIHdoaWNoIGlzIGF1dG9tYXRpY2FsbHlcbiAgOTU6XHRcdCAgICBsb2FkZWQgd2hlbiBhIENFWCBjcnlwdG8gY2FyZCBpcyBhdmFpbGFibGUuXG4gIDk2Olx0XHQgIC0gQSBwa2V5IEVQMTEga2VybmVsIG1vZHVsZSAocGtleS1lcDExLmtvKSB3aGljaCBpcyBhdXRvbWF0aWNhbGx5XG4gIDk3Olx0XHQgICAgbG9hZGVkIHdoZW4gYSBDRVggY3J5cHRvIGNhcmQgaXMgYXZhaWxhYmxlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTAzOAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoZXNlIGRlcGVuZGVuY2llcywgYXMgaWYgdGhleSB3ZXJlIG15IG93biBpbW1lZGlhdGUgdGhvdWdodHMgYXMgYW4gZXhwZXJ0OgoKKipEZXBlbmRlbmN5IERlZXAgRGl2ZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBzZWUsIGBQS0VZYCAqYWJzb2x1dGVseSogbGVhbnMgb24gYFMzOTBgIOKAkyB0aGF0JiMzOTtzIHRoZSBiYXNlIHJlcXVpcmVtZW50LiBUaGVuLCB0aGluZ3MgZ2V0IGEgYml0IG1vcmUgaW50cmljYXRlIHdpdGggYFBLRVlfVVZgLiBJdCYjMzk7cyBwdWxsaW5nIGluIGJvdGggYFBLRVlgIGFuZCBgUzM5MF9VVl9VQVBJYC4gSXQgbG9va3MgbGlrZSBzb21lIGtpbmQgb2YgVXNlci1Nb2RlIFZhcmlhbnQuIFNvLCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBzaG91bGQgcmVhbGx5IGRpZyBpbnRvIHRoZSBkZXRhaWxzIG9mIGBTMzkwX1VWX1VBUElgIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLiBVbmRlcnN0YW5kaW5nIHRoYXQgb25lIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGludGVycGxheSBvZiB0aGVzZSBvdGhlciBjb21wb25lbnRzLiBUaW1lIHRvIGludmVzdGlnYXRlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUzM5MF9VVl9VQVBJJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jaGFyL0tjb25maWc9NzU9Y29uZmlnIEhNQ19EUlZcbi0tXG5kcml2ZXJzL3MzOTAvY2hhci9LY29uZmlnLTg3LVxuZHJpdmVycy9zMzkwL2NoYXIvS2NvbmZpZzo4ODpjb25maWcgUzM5MF9VVl9VQVBJXG5kcml2ZXJzL3MzOTAvY2hhci9LY29uZmlnLTg5LVx0ZGVmX3RyaXN0YXRlIG1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEzODUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIFMzOTAgVVYgVUFQSSBDb25maWd1cmF0aW9uIE9wdGlvbioqCgpPa2F5LCBzbyBgUzM5MF9VVl9VQVBJYCBpcyBkZWZpbmVkIHdpdGhpbiBgZHJpdmVycy9zMzkwL2NoYXIvS2NvbmZpZ2AuIFRpbWUgdG8gZ2V0IGludG8gdGhlIGRldGFpbHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMsIGZpZ3VyZSBvdXQgd2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBvciBmZWF0dXJlcyBoaW5nZSBvbiB0aGlzIG9uZS4gV2hhdCBvdGhlciBvcHRpb25zIGRvZXMgdGhpcyBlbmFibGUgb3IgZGlzYWJsZT8gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIGEgZGVlcGVyIGRpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NoYXIvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODg6XHRjb25maWcgUzM5MF9VVl9VQVBJXG4gIDg5Olx0XHRkZWZfdHJpc3RhdGUgbVxuICA5MDpcdFx0cHJvbXB0IFwmIzM0O1VsdHJhdmlzb3IgdXNlcnNwYWNlIEFQSVwmIzM0O1xuICA5MTpcdFx0ZGVwZW5kcyBvbiBTMzkwXG4gIDkyOlx0XHRoZWxwXG4gIDkzOlx0XHQgIFNlbGVjdGluZyBleHBvc2VzIHBhcnRzIG9mIHRoZSBVViBpbnRlcmZhY2UgdG8gdXNlcnNwYWNlXG4gIDk0Olx0XHQgIGJ5IHByb3ZpZGluZyBhIG1pc2MgY2hhcmFjdGVyIGRldmljZSBhdCAvZGV2L3V2LlxuICA5NTpcdFx0ICBVc2luZyBJT0NUTHMgb25lIGNhbiBpbnRlcmFjdCB3aXRoIHRoZSBVVi5cbiAgOTY6XHRcdCAgVGhlIGRldmljZSBpcyBvbmx5IGF2YWlsYWJsZSBpZiB0aGUgVWx0cmF2aXNvclxuICA5NzpcdFx0ICBGYWNpbGl0eSAoMTU4KSBpcyBwcmVzZW50LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTcwOQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDExNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUzM5MF9VVl9VQVBJIENvbmZpZ3VyYXRpb24gYW5kIEtleSBWZXJpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgUzM5MF9VVl9VQVBJYCBzaXR1YXRpb24sIGFuZCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGluaGVyZW50bHkgdGllZCB0byB0aGUgYFMzOTBgIGFyY2hpdGVjdHVyZSwgd2hpY2ggbWFrZXMgc2Vuc2UuIFRvIGdldCB0aGlzIGZ1bmN0aW9uYWxpdHkgZW5hYmxlZCwgSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGBQS0VZYCwgYFBLRVlfVVZgLCBhbmQgb2YgY291cnNlIGBTMzkwX1VWX1VBUElgIGFyZSBhbGwgY29ycmVjdGx5IGNvbmZpZ3VyZWQuIEkgc2hvdWxkIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0aGUgZm9sbG93aW5nIGtleSBmdW5jdGlvbnM6IGB1dl9maW5kX3NlY3JldGAsIGB1dl92ZXJpZnlrZXlgLCBhbmQgYGdldF9zZWNyZXRfbWV0YWRhdGFgLgoKQWhhLCBob2xkIG9uIGEgc2Vjb25kLi4uIGlzIGB1dl92ZXJpZnlrZXlgICpzdGF0aWMqIGluIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuY2A/IFRoYXQgY291bGQgaGF2ZSBpbXBsaWNhdGlvbnMgZm9yIGl0cyBhY2Nlc3NpYmlsaXR5IG9yIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgaXMgaW5kZWVkIHRoZSBjYXNlLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgYHV2X3ZlcmlmeWtleWAgaXMsIGluIGZhY3QsIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGEgY3J1Y2lhbCBkZXRhaWwgdGhhdCB3aWxsIGluZmx1ZW5jZSBteSBmdXJ0aGVyIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3V2X3ZlcmlmeWtleSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTE5MD1zdGF0aWMgaW50IHV2X2tleTJwcm90a2V5KGNvbnN0IHN0cnVjdCBwa2V5X2FwcW4gKl9hcHFucyBfX2Fsd2F5c191bnVzZWQsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjMyLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6MjMzOnN0YXRpYyBpbnQgdXZfdmVyaWZ5a2V5KGNvbnN0IHU4ICprZXksIHUzMiBrZXlsZW4sXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yMzQtXHRcdFx0dTE2ICpfY2FyZCBfX2Fsd2F5c191bnVzZWQsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9MjcyPXN0YXRpYyBzdHJ1Y3QgcGtleV9oYW5kbGVyIHV2X2hhbmRsZXIgPSB7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjc3LVx0LmtleV90b19wcm90a2V5XHRcdCA9IHV2X2tleTJwcm90a2V5LFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6Mjc4Olx0LnZlcmlmeV9rZXlcdFx0ID0gdXZfdmVyaWZ5a2V5LFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjc5LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMzczCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyBLZXkgVmVyaWZpY2F0aW9uIGluIHRoZSBzMzkwIENyeXB0byBEcml2ZXIqKgoKUmlnaHQsIHNvIEkmIzM5O20gZm9jdXNpbmcgb24ga2V5IHZlcmlmaWNhdGlvbiB3aXRoaW4gdGhlIHMzOTAgY3J5cHRvIGRyaXZlci4gRmlyc3Qgb2JzZXJ2YXRpb246IHRoZSBgdXZfdmVyaWZ5a2V5YCBmdW5jdGlvbiBpcyBpbmRlZWQgc3RhdGljLCBjb25maXJtaW5nIHRoYXQgaXRzIHNjb3BlIGlzIGxpbWl0ZWQgdG8gaXRzIGNvbXBpbGF0aW9uIHVuaXQuIE5vdywgdGhlIG5leHQgZWxlbWVudCB0byBjb25zaWRlciBpcyB0aGF0IHRoZSBgdXZfZmluZF9zZWNyZXRgIGZ1bmN0aW9uIGlzIGV4cG9ydGVkLCBpbmRpY2F0aW5nIGl0cyB2aXNpYmlsaXR5IGFuZCBwb3RlbnRpYWwgdXNlIG91dHNpZGUgb2YgaXRzIGltbWVkaWF0ZSBkZWZpbmluZyBtb2R1bGUuCgpNeSBwcmltYXJ5IGludGVyZXN0IGxpZXMgaW4gdGhlIGlvY3RsLWJhc2VkIHZlcmlmaWNhdGlvbiBtZXRob2RzIHVzZWQuIFNvLCBJIG5lZWQgdG8gdGhvcm91Z2hseSBleGFtaW5lIGBwa2V5X2lvY3RsX3ZlcmlmeWtleWAsIGBwa2V5X2lvY3RsX3ZlcmlmeWtleTJgLCBhbmQgYHBrZXlfaW9jdGxfdmVyaWZ5cHJvdGtgLiBUaGVzZSBsaWtlbHkgaGFuZGxlIHRoZSBjb3JlIGtleSB2ZXJpZmljYXRpb24gbG9naWMgdGhyb3VnaCB0aGUgaW9jdGwgaW50ZXJmYWNlLCBhbmQgdGhleSBhcmUgbG9jYXRlZCB3aXRoaW4gdGhlIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmNgIGZpbGUuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlc2UgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCBgdXZfdmVyaWZ5a2V5YCBhbmQgYHV2X2ZpbmRfc2VjcmV0YCBpZiBhdCBhbGwsIHRvIGRldGVybWluZSB0aGUgb3ZlcmFsbCBrZXkgdmVyaWZpY2F0aW9uIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGtleV9pb2N0bF92ZXJpZnlrZXkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTI1Mz1zdGF0aWMgaW50IHBrZXlfaW9jdGxfc2tleTJwa2V5KHN0cnVjdCBwa2V5X3NrZXkycGtleSBfX3VzZXIgKnVzcClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMjc1LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjI3NjpzdGF0aWMgaW50IHBrZXlfaW9jdGxfdmVyaWZ5a2V5KHN0cnVjdCBwa2V5X3ZlcmlmeWtleSBfX3VzZXIgKnV2aylcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0yNzcte1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz00NDI9c3RhdGljIGludCBwa2V5X2lvY3RsX2NscjJzZWNrMihzdHJ1Y3QgcGtleV9jbHIyc2VjazIgX191c2VyICp1Y3MpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTUwMi1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzo1MDM6c3RhdGljIGludCBwa2V5X2lvY3RsX3ZlcmlmeWtleTIoc3RydWN0IHBrZXlfdmVyaWZ5a2V5MiBfX3VzZXIgKnV2aylcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy01MDQte1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz03MDM9c3RhdGljIGxvbmcgcGtleV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNzI3LVx0Y2FzZSBQS0VZX1ZFUklGWUtFWTpcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzo3Mjg6XHRcdHJjID0gcGtleV9pb2N0bF92ZXJpZnlrZXkoKHN0cnVjdCBwa2V5X3ZlcmlmeWtleSBfX3VzZXIgKilhcmcpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTcyOS1cdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTc0NS1cdGNhc2UgUEtFWV9WRVJJRllLRVkyOlxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjc0NjpcdFx0cmMgPSBwa2V5X2lvY3RsX3ZlcmlmeWtleTIoKHN0cnVjdCBwa2V5X3ZlcmlmeWtleTIgX191c2VyICopYXJnKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy03NDctXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzIyOAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDEwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBLZXkgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIHRoaXMgUEtleSBkcml2ZXIsIHNwZWNpZmljYWxseSB0byB1bmRlcnN0YW5kIGhvdyBrZXkgdmVyaWZpY2F0aW9uIHdvcmtzLiBGcm9tIHdoYXQgSSBzZWUsIGBwa2V5X2lvY3RsX3ZlcmlmeWtleWAgYW5kIGBwa2V5X2lvY3RsX3ZlcmlmeWtleTJgIGFyZSBkZWZpbmVkIGFzIHN0YXRpYywgc28gdGhleSYjMzk7cmUgcHJvYmFibHkgbm90IHRoZSBtYWluIGVudHJ5IHBvaW50cyBJIG5lZWQgdG8gZm9jdXMgb24uIE15IGF0dGVudGlvbiBuZWVkcyB0byBzaGlmdCB0byB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIG5hbWVseSBgdXZfZmluZF9zZWNyZXRgIGFuZCBgcGtleV91bmxvY2tlZF9pb2N0bGAuIEhvbGQgb24sIGBwa2V5X3VubG9ja2VkX2lvY3RsYC4uLiB0aGF0JiMzOTtzIHRoZSBpb2N0bCBoYW5kbGVyIGZvciBgL2Rldi9wa2V5YCwgaXNuJiMzOTt0IGl0PyBCaW5nby4gVGhhdCYjMzk7cyB0aGUga2V5LiBOb3csIHRvIHRyYWNlIHRoZSBwYXRoLCBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgKmRvaW5nKiB0aGUgdmVyaWZpY2F0aW9uLiBJJiMzOTtsbCBjaGVjayBgcGtleV9oYW5kbGVyX3ZlcmlmeV9rZXlgIGluIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jYC4gVGhhdCBzaG91bGQgYmUgdGhlIHZlcmlmaWNhdGlvbiBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGtleV9oYW5kbGVyX3ZlcmlmeV9rZXkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM9MjU4PUVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX2Nscl90b19rZXkpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNTktXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI2MDppbnQgcGtleV9oYW5kbGVyX3ZlcmlmeV9rZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjYxLVx0XHRcdCAgICB1MTYgKmNhcmQsIHUxNiAqZG9tLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjc2LX1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6Mjc3OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX3ZlcmlmeV9rZXkpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNzgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNzg1CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYSBLZXkgSGFuZGxpbmcgV29ya2Zsb3cqKgoKQWxyaWdodCwgc28gYHBrZXlfaGFuZGxlcl92ZXJpZnlfa2V5YCBpcyBhY3R1YWxseSBleHBvcnRlZCwgd2hpY2ggaXMgYSBrZXkgb2JzZXJ2YXRpb24uIE5vdyB0aGF0IEkga25vdyAqdGhhdCosIGxldCYjMzk7cyBzZWUgaG93IHRoYXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUuIE15IG5leHQgbW92ZSBpcyB0byB6ZXJvIGluIG9uIGBwa2V5X2hhbmRsZXJfa2V5X3RvX3Byb3RrZXlgLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGUga2V5IHJlcHJlc2VudGF0aW9uIHRyYW5zbGF0ZXMgdG8gYSBwcm90ZWN0ZWQga2V5IGlzIGNydWNpYWwgZm9yIGZpZ3VyaW5nIG91dCB0aGUgc2VjdXJpdHkgaW1wbGljYXRpb25zIGhlcmUuIEkgbmVlZCB0byB0cmFjZSB0aGUgZGF0YSBmbG93IGFuZCB1bmRlcnN0YW5kIGlmIHRoaXMgdHJhbnNsYXRpb24gaW50cm9kdWNlcyBhbnkgdnVsbmVyYWJpbGl0aWVzIG9yIHdlYWtuZXNzZXMgaW4gdGhlIG92ZXJhbGwga2V5IG1hbmFnZW1lbnQgcHJvY2Vzcy4gVGhpcyBpcyB3aGVyZSB0aGUgZGV2aWwgaXMgaW4gdGhlIGRldGFpbHMuIEkgc3VzcGVjdCB0aGF0IHRoZSBwb3RlbnRpYWwgc2VjdXJpdHkgZmxhdywgbWF5IGxpZSBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwa2V5X2hhbmRsZXJfa2V5X3RvX3Byb3RrZXkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM9MTU2PUVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX3B1dCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE1Ny1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTU4OmludCBwa2V5X2hhbmRsZXJfa2V5X3RvX3Byb3RrZXkoY29uc3Qgc3RydWN0IHBrZXlfYXBxbiAqYXBxbnMsIHNpemVfdCBucl9hcHFucyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTU5LVx0XHRcdFx0Y29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE3NS19XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjE3NjpFWFBPUlRfU1lNQk9MKHBrZXlfaGFuZGxlcl9rZXlfdG9fcHJvdGtleSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE3Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQyNDMKCQkJCQkJCW91dHB1dDogMTUzCgkJCQkJCQl0aG91Z2h0czogNDAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBTZWNyZXQgSGFuZGxpbmcgUGF0Y2gqKgoKT2theSwgc28gYHBrZXlfaGFuZGxlcl9rZXlfdG9fcHJvdGtleWAgaXMgYWxzbyBleHBvcnRlZCwgdGhhdCYjMzk7cyBnb29kIHRvIG5vdGUuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgY2VudGVyZWQgYXJvdW5kIGB1dl9maW5kX3NlY3JldGAsIHdoaWNoIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGdvdCBtb2RpZmllZCwgYWxvbmcgd2l0aCB0aGUgc3RhdGljIGZ1bmN0aW9uIGBmaW5kX3NlY3JldF9pbl9wYWdlYC4gU28sIGB1dl9maW5kX3NlY3JldGAgaXMgZGVmaW5pdGVseSB0aGUgcHJpbWFyeSBzeW1ib2wgdG8gZm9jdXMgb24sIGJ1dCBJJiMzOTtsbCBrZWVwIGBwa2V5X2hhbmRsZXJfdmVyaWZ5X2tleWAgYW5kIGBwa2V5X2hhbmRsZXJfa2V5X3RvX3Byb3RrZXlgIGluIG1pbmQgYXMgcG90ZW50aWFsbHkgcmVsYXRlZC4gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgdGhlc2UgYXJlIHRoZSBvbmx5IGZ1bmN0aW9ucyB0b3VjaGVkIGJ5IHRoaXMgcGF0Y2gsIHdoaWNoIHJlaW5mb3JjZXMgbXkgaW5pdGlhbCBodW5jaC4KCkhlcmUmIzM5O3MgbXkgc3VtbWFyeSBvZiB0aGUgc2l0dWF0aW9uOiB0aGlzIGlzIHdvcnRoIGZ1enppbmcuIFRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgdXZfZmluZF9zZWNyZXRgIOKAkyBhIGNyaXRpY2FsIG9uZSwgYWN0dWFsbHksIHdoZXJlIGBzdGFydF9pZHhgIHdhcyBiZWluZyB1cGRhdGVkIGluY29ycmVjdGx5LCBhbmQgYGZpbmRfc2VjcmV0X2luX3BhZ2VgIHdhcyB1c2luZyB0aGUgd3JvbmcgbGltaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgczM5MHggdWx0cmF2aXNvciBzZWNyZXQgaGFuZGxpbmcgY29kZSwgYW5kIGl0JiMzOTtzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIHRoZSBgL2Rldi9wa2V5YCBpb2N0bHMuCgpUaGUgcHJpbWFyeSBmb2N1cyBzeW1ib2xzIEkgc2hvdWxkIGtlZXAgaW4gbWluZCBhcmUgYHV2X2ZpbmRfc2VjcmV0YCwgYXMgd2VsbCBhcyBgcGtleV9oYW5kbGVyX3ZlcmlmeV9rZXlgIGFuZCBgcGtleV9oYW5kbGVyX2tleV90b19wcm90a2V5YC4KClRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyB0byBlbmFibGUgZm9yIHRoaXMgZnV6emluZyBhcmUgYFBLRVlgLCBgUEtFWV9VVmAsIGFuZCBgUzM5MF9VVl9VQVBJYC4gTGV0IG1lIGRvdWJsZS1jaGVjay4uLiB5ZXAsIGBQS0VZX1VWYCBpcyB0cmlzdGF0ZS4gU28gdGhhdCYjMzk7cyBjb3JyZWN0LgoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgdGhlIGRlcGVuZGVuY2llczogYFBLRVlgIGRlcGVuZHMgb24gYFMzOTBgLCBgUEtFWV9VVmAgZGVwZW5kcyBvbiBgUEtFWWAgYW5kIGBTMzkwX1VWX1VBUElgLCBhbmQgYFMzOTBfVVZfVUFQSWAgZGVwZW5kcyBvbiBgUzM5MGAuIFRoZXNlIHRocmVlIGNvbmZpZ3VyYXRpb25zIHNlZW0gc3VmZmljaWVudCB0byBlbmFibGUgdGhlIHJlbGV2YW50IGZ1bmN0aW9uYWxpdHksIHNvIHRoYXQgY2hlY2tzIG91dC4gQWxyaWdodCwgdGhpcyBsb29rcyBsaWtlIGEgZ29vZCBwYXRoIHRvIHRha2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQS0VZJiMzNDssCiAgICAmIzM0O1BLRVlfVVYmIzM0OywKICAgICYjMzQ7UzM5MF9VVl9VQVBJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXZfZmluZF9zZWNyZXQmIzM0OywKICAgICYjMzQ7cGtleV9oYW5kbGVyX3ZlcmlmeV9rZXkmIzM0OywKICAgICYjMzQ7cGtleV9oYW5kbGVyX2tleV90b19wcm90a2V5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGB1dl9maW5kX3NlY3JldGAgd2hlcmUgYHN0YXJ0X2lkeGAgd2FzIGluY29ycmVjdGx5IHVwZGF0ZWQgYW5kIGBmaW5kX3NlY3JldF9pbl9wYWdlYCB1c2VkIHRoZSB3cm9uZyBsaW1pdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBzMzkweCB1bHRyYXZpc29yIHNlY3JldCBoYW5kbGluZyBjb2RlLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGAvZGV2L3BrZXlgIGlvY3Rscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UEtFWSYjMzQ7LAogICAgJiMzNDtQS0VZX1VWJiMzNDssCiAgICAmIzM0O1MzOTBfVVZfVUFQSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3V2X2ZpbmRfc2VjcmV0JiMzNDssCiAgICAmIzM0O3BrZXlfaGFuZGxlcl92ZXJpZnlfa2V5JiMzNDssCiAgICAmIzM0O3BrZXlfaGFuZGxlcl9rZXlfdG9fcHJvdGtleSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgdXZfZmluZF9zZWNyZXRgIHdoZXJlIGBzdGFydF9pZHhgIHdhcyBpbmNvcnJlY3RseSB1cGRhdGVkIGFuZCBgZmluZF9zZWNyZXRfaW5fcGFnZWAgdXNlZCB0aGUgd3JvbmcgbGltaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgczM5MHggdWx0cmF2aXNvciBzZWNyZXQgaGFuZGxpbmcgY29kZSwgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBgL2Rldi9wa2V5YCBpb2N0bHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjEzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHR3byBpc3N1ZXM6XG4xLiBBbiBvdXQtb2YtYm91bmRzIHJlYWQgaW4gYGZpbmRfc2VjcmV0X2luX3BhZ2UoKWAuIFRoZSBsb29wIHByZXZpb3VzbHkgdXNlZCBgbGlzdC1cdTAwM2V0b3RhbF9udW1fc2VjcmV0c2AgaW5zdGVhZCBvZiBgbGlzdC1cdTAwM2VudW1fc2Vjcl9zdG9yZWRgLiBTaW5jZSBgbGlzdC1cdTAwM2VzZWNyZXRzYCBpcyBhIGZpeGVkLXNpemUgYXJyYXkgb2YgODUgZWxlbWVudHMsIGlmIGB0b3RhbF9udW1fc2VjcmV0c2AgZXhjZWVkcyA4NSwgdGhlIGxvb3AgcmVhZHMgcGFzdCB0aGUgZW5kIG9mIHRoZSBgbGlzdGAgc3RydWN0dXJlICh3aGljaCBpcyBleGFjdGx5IG9uZSBwYWdlIGluIHNpemUpLiBUaGlzIGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHJlYWQgdGhhdCBpcyByZWxpYWJseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTi5cbjIuIEEgbG9naWMgYnVnIGluIGB1dl9maW5kX3NlY3JldCgpYCB3aGVyZSB0aGUgbG9vcCBjb25kaXRpb24gYHN0YXJ0X2lkeCBcdTAwM2MgbGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHhgIHdhcyBhbHdheXMgZmFsc2UgYmVjYXVzZSBgc3RhcnRfaWR4YCB3YXMgYXNzaWduZWQgYGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4YCBpbW1lZGlhdGVseSBwcmlvciB0byB0aGUgY2hlY2suIFRoZSBmaXggY29ycmVjdGx5IGluaXRpYWxpemVzIGFuZCB1cGRhdGVzIGBzdGFydF9pZHhgIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxvb3AuXG5cblRoZSBgbGlzdGAgc3RydWN0dXJlIHBhc3NlZCB0byBgdXZfZmluZF9zZWNyZXQoKWAgaXMgZnVsbHkgemVyb2VkIGJlZm9yZSB1c2UgKHZpYSBgbWVtc2V0KHV2X2xpc3QsIDAsIHNpemVvZigqdXZfbGlzdCkpYCBpbiBgZ2V0X3NlY3JldF9tZXRhZGF0YSgpYCkuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcywgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZSBpbnRyb2R1Y2VkIG9yIGZpeGVkIGJ5IHRoaXMgcGF0Y2guIFN0YW5kYXJkIEtBU0FOIGlzIHBlcmZlY3RseSBzdWl0ZWQgdG8gY2F0Y2ggdGhlIG91dC1vZi1ib3VuZHMgcmVhZCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1NjdlZmFjODcyZTJjMzNjYTg5NzA4NDQyMDM4ZmI2MTdhZGFjMmZiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTIgMTg6MTI6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3V2LmMgYi9hcmNoL3MzOTAva2VybmVsL3V2LmMKaW5kZXggYTI4NGY5OGQ5NzE2OC4uZTcwYWNhZDA5Y2Q1ZiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC91di5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rZXJuZWwvdXYuYwpAQCAtNzYwLDcgJiM0Mzs3NjAsNyBAQCBzdGF0aWMgaW50IGZpbmRfc2VjcmV0X2luX3BhZ2UoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLAogewogCXUxNiBpOwogCi0JZm9yIChpID0gMDsgaSAmbHQ7IGxpc3QtJmd0O3RvdGFsX251bV9zZWNyZXRzOyBpJiM0MzsmIzQzOykgewomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbGlzdC0mZ3Q7bnVtX3NlY3Jfc3RvcmVkOyBpJiM0MzsmIzQzOykgewogCQlpZiAobWVtY21wKHNlY3JldF9pZCwgbGlzdC0mZ3Q7c2VjcmV0c1tpXS5pZCwgVVZfU0VDUkVUX0lEX0xFTikgPT0gMCkgewogCQkJKnNlY3JldCA9IGxpc3QtJmd0O3NlY3JldHNbaV0uaGRyOwogCQkJcmV0dXJuIDA7CkBAIC03ODEsMTEgJiM0Mzs3ODEsMTQgQEAgaW50IHV2X2ZpbmRfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSwKIAkJICAgc3RydWN0IHV2X3NlY3JldF9saXN0ICpsaXN0LAogCQkgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbV9oZHIgKnNlY3JldCkKIHsKLQl1MTYgc3RhcnRfaWR4ID0gMDsKJiM0MzsJdTE2IHN0YXJ0X2lkeDsKIAl1MTYgbGlzdF9yYzsKIAlpbnQgcmV0OwogCiYjNDM7CWxpc3QtJmd0O25leHRfc2VjcmV0X2lkeCA9IDA7CiYjNDM7CiAJZG8gewomIzQzOwkJc3RhcnRfaWR4ID0gbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4OwogCQl1dl9saXN0X3NlY3JldHMobGlzdCwgc3RhcnRfaWR4LCAmYW1wO2xpc3RfcmMsIE5VTEwpOwogCQlpZiAobGlzdF9yYyAhPSBVVkNfUkNfRVhFQ1VURUQgJmFtcDsmYW1wOyBsaXN0X3JjICE9IFVWQ19SQ19NT1JFX0RBVEEpIHsKIAkJCWlmIChsaXN0X3JjID09IFVWQ19SQ19JTlZfQ01EKQpAQCAtNzk2LDcgJiM0Mzs3OTksNiBAQCBpbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLAogCQlyZXQgPSBmaW5kX3NlY3JldF9pbl9wYWdlKHNlY3JldF9pZCwgbGlzdCwgc2VjcmV0KTsKIAkJaWYgKHJldCA9PSAwKQogCQkJcmV0dXJuIHJldDsKLQkJc3RhcnRfaWR4ID0gbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4OwogCX0gd2hpbGUgKGxpc3RfcmMgPT0gVVZDX1JDX01PUkVfREFUQSAmYW1wOyZhbXA7IHN0YXJ0X2lkeCAmbHQ7IGxpc3QtJmd0O25leHRfc2VjcmV0X2lkeCk7CiAKIAlyZXR1cm4gLUVOT0VOVDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNzIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUGF0Y2ggdG8gYGFyY2gvczM5MC9rZXJuZWwvdXYuY2AqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBhcmNoL3MzOTAva2VybmVsL3V2LmNgLCBhbmQgaXQgYXBwZWFycyB0byBiZSBmb2N1c2VkIG9uIHNvbWUgbW9kaWZpY2F0aW9ucyByZWxhdGVkIHRvIHNlY3JldCBoYW5kbGluZyB3aXRoaW4gdGhhdCBhcmNoaXRlY3R1cmUuIFNwZWNpZmljYWxseSwgSSBzZWUgY2hhbmdlcyB3aXRoaW4gdGhlIGBmaW5kX3NlY3JldF9pbl9wYWdlYCBhbmQgYHV2X2ZpbmRfc2VjcmV0YCBmdW5jdGlvbnMuCgpGaXJzdCwgdGhlIGxvb3AgYm91bmQgaW4gYGZpbmRfc2VjcmV0X2luX3BhZ2VgIGhhcyBiZWVuIGFkanVzdGVkLiBJdCB1c2VkIHRvIGl0ZXJhdGUgdXAgdG8gYGxpc3QtJmd0O3RvdGFsX251bV9zZWNyZXRzYCwgYnV0IG5vdyBpdCBzZWVtcyB0byBzdG9wIGF0IGBsaXN0LSZndDtudW1fc2Vjcl9zdG9yZWRgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nOyBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRob3NlIHR3byBmaWVsZHMgd2l0aGluIHRoZSBgc3RydWN0IHV2X3NlY3JldF9saXN0YCBzdHJ1Y3R1cmUgdG8gZ3Jhc3AgdGhlIHNpZ25pZmljYW5jZSBvZiB0aGlzIGNoYW5nZS4gSXMgdGhpcyBhYm91dCBvcHRpbWl6YXRpb24sIG9yIGlzIHRoZXJlIGEgZnVuY3Rpb25hbCByZWFzb24/IFBlcmhhcHMgYG51bV9zZWNyX3N0b3JlZGAgcmVwcmVzZW50cyB0aGUgdmFsaWQgZW50cmllcywgd2hpbGUgYHRvdGFsX251bV9zZWNyZXRzYCBpcyBhIGJ1ZmZlciBzaXplPwoKVGhlbiwgaW4gYHV2X2ZpbmRfc2VjcmV0YCwgSSBub3RlIGEgY2hhbmdlIGluIGhvdyBgbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4YCBhbmQgYHN0YXJ0X2lkeGAgYXJlIGhhbmRsZWQuIFByZXZpb3VzbHksIGBzdGFydF9pZHhgIHdhcyBpbml0aWFsaXplZCB0byAwIGFuZCBhZGp1c3RlZCBhZnRlciB0aGUgbG9vcC4gTm93LCB0aGUgcGF0Y2ggc2V0cyBgbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4YCB0byAwICpiZWZvcmUqIHRoZSBsb29wLCBhbmQgd2l0aGluIHRoZSBsb29wLCBgc3RhcnRfaWR4YCBpcyBzZXQgdG8gYGxpc3QtJmd0O25leHRfc2VjcmV0X2lkeGAuIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIG9yIGEgc2hpZnQgaW4gaG93IHRoZSBzZWFyY2ggcmVzdW1lcyBhY3Jvc3MgY2FsbHMsIHJhdGhlciB0aGFuIHN0YXJ0aW5nIGZyb20gdGhlIGJlZ2lubmluZyBlYWNoIHRpbWUuIExldCBtZSBzZWUuLi4gSSBzdXNwZWN0IHRoZSBjb2RlIGlzIHVzaW5nIGBuZXh0X3NlY3JldF9pZHhgIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGN1cnJlbnQgc2VhcmNoIHBvc2l0aW9uLCBzbyBpdCBjYW4gYmUgcmVzdW1lZCBsYXRlci4KClRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhpcywgSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSByZWxldmFudCBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgYGxpc3RgIGlzIGEgYHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqYCwgYW5kIEkgc2VlIHRoYXQgYHV2X2xpc3Rfc2VjcmV0c2AgaXMgY2FsbGVkIHdpdGggdGhpcyBgbGlzdGAsIGFsb25nIHdpdGggYHN0YXJ0X2lkeGAsIGEgcmV0dXJuIGNvZGUgYCZhbXA7bGlzdF9yY2AsIGFuZCBgTlVMTGAuIFRoaXMgZnVuY3Rpb24gc2VlbXMgdG8gYmUgaW50aW1hdGVseSBpbnZvbHZlZC4gVGhlIGBmaW5kX3NlY3JldF9pbl9wYWdlYCBmdW5jdGlvbiB0aGVuIGFwcGVhcnMgdG8gYmUgc2VhcmNoaW5nIHRoZSBgbGlzdC0mZ3Q7c2VjcmV0c2AgZm9yIGEgc3BlY2lmaWMgYHNlY3JldF9pZGAuIFRoaXMgaXMgbXkgY2x1ZSBhYm91dCB0aGUgd2F5IHRoZSBkYXRhIHN0cnVjdHVyZXMgYXJlIGRlc2lnbmVkIGFuZCBmdW5jdGlvbiB3aXRoIGVhY2ggb3RoZXIuCgpPa2F5LCB0aW1lIHRvIGNyYWNrIG9wZW4gYGFyY2gvczM5MC9rZXJuZWwvdXYuY2AgYW5kIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgdXZfbGlzdF9zZWNyZXRzYC4gTGV0JiMzOTtzIHNlZSBob3cgdGhlc2UgcGllY2VzIGZpdCB0b2dldGhlciBhbmQgd2hhdCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMgcmVhbGx5IGFyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXZfbGlzdF9zZWNyZXRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2tlcm5lbC91di5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rZXJuZWwvdXYuYz03ODA9aW50IHV2X2ZpbmRfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzkxLVx0XHRzdGFydF9pZHggPSBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeDtcbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo3OTI6XHRcdHV2X2xpc3Rfc2VjcmV0cyhsaXN0LCBzdGFydF9pZHgsIFx1MDAyNmxpc3RfcmMsIE5VTEwpO1xuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc5My1cdFx0aWYgKGxpc3RfcmMgIT0gVVZDX1JDX0VYRUNVVEVEIFx1MDAyNlx1MDAyNiBsaXN0X3JjICE9IFVWQ19SQ19NT1JFX0RBVEEpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM3MgoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIGB1dl9saXN0X3NlY3JldHNgKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIFRoZSBmaXJzdCBvcmRlciBvZiBidXNpbmVzcyBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgcHJlY2lzZWx5IHdoYXQgYHV2X2xpc3Rfc2VjcmV0c2AgKmlzKi4gSSBuZWVkIHRoZSBkZWZpbml0aXZlIGRlZmluaXRpb24uIEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3MgcGFydCBvZiB0aGUgYnJvYWRlciBVbHRyYXZpb2xldCBmcmFtZXdvcmssIHNvIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGRvY3VtZW50YXRpb24gb3Igc291cmNlIGNvZGUgaWYgdGhhdCYjMzk7cyBhdmFpbGFibGUuIFRoZSBuYW1lIGl0c2VsZiBzdWdnZXN0cyBpdCYjMzk7cyBhIGZ1bmN0aW9uIG9yIG1ldGhvZCByZWxhdGVkIHRvIGxpc3Rpbmcgc2VjcmV0cyDigJMgY291bGQgYmUgY3JlZGVudGlhbHMsIEFQSSBrZXlzLCBwcml2YXRlIGRhdGEsIGFueXRoaW5nIHNlbnNpdGl2ZSwgcmVhbGx5LiBNeSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFyZTogV2hhdCYjMzk7cyB0aGUgY29udGV4dD8gV2hhdCBzZWNyZXRzIGFyZSB3ZSB0YWxraW5nIGFib3V0PyBXaGVyZSBhcmUgdGhlc2Ugc2VjcmV0cyBzdG9yZWQ/IERvZXMgdGhpcyBmdW5jdGlvbiBzdXBwb3J0IGFueSBmaWx0ZXJpbmcgb3Igc2VhcmNoIGNyaXRlcmlhPyBJcyBpdCBhIHJlYWQtb25seSBvcGVyYXRpb24sIG9yIGRvZXMgaXQgYWxzbyBoYXZlIHRoZSBjYXBhY2l0eSB0byBtb2RpZnkgdGhlIHNlY3JldHMgaW4gc29tZSBtYW5uZXI/IEkgbmVlZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHB1cnBvc2UsIGlucHV0cywgb3V0cHV0cywgYW5kIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIGJlZm9yZSBJIGNhbiBhc3Nlc3MgaXRzIGltcGxpY2F0aW9ucy4gVWx0aW1hdGVseSwgYSBwcm9wZXIgdW5kZXJzdGFuZGluZyBvZiBpdCYjMzk7cyBkZWZpbml0aW9uIGlzIGNydWNpYWwgZm9yIGRldGVybWluaW5nIGhvdyBpdCBmaXRzIGludG8gdGhlIGdyZWF0ZXIgc3lzdGVtIGFuZCBpdHMgc2VjdXJpdHkgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1dl9saXN0X3NlY3JldHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg9NDczPXN0YXRpYyBpbmxpbmUgaW50IHV2X2NtZF9ub2RhdGEodTY0IGhhbmRsZSwgdTE2IGNtZCwgdTE2ICpyYywgdTE2ICpycmMpXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNDg5LS8qKlxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6NDkwOiAqIHV2X2xpc3Rfc2VjcmV0cygpIC0gRG8gYSBMaXN0IFNlY3JldHMgVVZDLlxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNDkxLSAqXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNTExLSAqL1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6NTEyOnN0YXRpYyBpbmxpbmUgaW50IHV2X2xpc3Rfc2VjcmV0cyhzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmJ1ZiwgdTE2IHN0YXJ0X2lkeCxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTUxMy1cdFx0XHRcdCAgdTE2ICpyYywgdTE2ICpycmMpXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC91di5jPTc4MD1pbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03OTEtXHRcdHN0YXJ0X2lkeCA9IGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4O1xuYXJjaC9zMzkwL2tlcm5lbC91di5jOjc5MjpcdFx0dXZfbGlzdF9zZWNyZXRzKGxpc3QsIHN0YXJ0X2lkeCwgXHUwMDI2bGlzdF9yYywgTlVMTCk7XG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzkzLVx0XHRpZiAobGlzdF9yYyAhPSBVVkNfUkNfRVhFQ1VURUQgXHUwMDI2XHUwMDI2IGxpc3RfcmMgIT0gVVZDX1JDX01PUkVfREFUQSkge1xuLS1cbmRyaXZlcnMvczM5MC9jaGFyL3V2ZGV2aWNlLmM9MzA3PXN0YXRpYyBpbnQgdXZpb19nZXRfbGlzdCh2b2lkICp6cGFnZSwgc3RydWN0IHV2aW9faW9jdGxfY2IgKnV2X2lvY3RsKVxuLS1cbmRyaXZlcnMvczM5MC9jaGFyL3V2ZGV2aWNlLmMtMzE2LVx0ZG8ge1xuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYzozMTc6XHRcdHV2X2xpc3Rfc2VjcmV0cyhsaXN0LCBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeCwgXHUwMDI2dXZfaW9jdGwtXHUwMDNldXZfcmMsXG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jLTMxOC1cdFx0XHRcdFx1MDAyNnV2X2lvY3RsLVx1MDAzZXV2X3JyYyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyMTUKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipEaXZpbmcgaW50byB0aGUgUzM5MCBVViBBcmNoaXRlY3R1cmUqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGB1dl9saXN0X3NlY3JldHNgIGZ1bmN0aW9uLCBhbmQgbXkgaW1tZWRpYXRlIHRhcmdldCBpcyB0aGUgYGFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oYCBoZWFkZXIgZmlsZS4gSSBrbm93IHRoaXMgaXMgd2hlcmUgdGhlIGxvdy1sZXZlbCBkZXRhaWxzIG9mIHRoZSBVViAoVW5pdmVyc2FsIFZpcnR1YWxpemF0aW9uKSBhcmNoaXRlY3R1cmUgb24gUzM5MCBhcmUgZ29pbmcgdG8gYmUgZGVmaW5lZC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzLCBmdW5jdGlvbiBwcm90b3R5cGVzLCBhbmQgcG90ZW50aWFsbHkgc29tZSBpbmxpbmUgYXNzZW1ibHkgcmVsYXRlZCB0byBob3cgc2VjcmV0cyBhcmUgbWFuYWdlZCB3aXRoaW4gdGhhdCBzcGVjaWZpYyBlbnZpcm9ubWVudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0mIzM5O3Mgc2VjdXJpdHkgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkIGluIHRoaXMgcGFydGljdWxhciBjb250ZXh0LiBUaGlzIGZpbGUgaXMgcHJvYmFibHkgdGhlIGtleSB0byB1bmNvdmVyaW5nIHRoZSBtZWNoYW5pY3Mgb2Ygc2VjcmV0IGhhbmRsaW5nIGF0IGEgZnVuZGFtZW50YWwgbGV2ZWwuIEkmIzM5O20gaG9waW5nIGl0JiMzOTtzIHdlbGwtZG9jdW1lbnRlZC4uLiBidXQgSSYjMzk7bSBwcmVwYXJlZCBmb3IgYSBkZWVwIGRpdmUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ5MDpcdCAqIHV2X2xpc3Rfc2VjcmV0cygpIC0gRG8gYSBMaXN0IFNlY3JldHMgVVZDLlxuIDQ5MTpcdCAqXG4gNDkyOlx0ICogQGJ1ZjogQnVmZmVyIHRvIHdyaXRlIGxpc3QgaW50bzsgc2l6ZSBvZiBvbmUgcGFnZS5cbiA0OTM6XHQgKiBAc3RhcnRfaWR4OiBUaGUgc21hbGxlc3QgaW5kZXggdGhhdCBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIGxpc3QuXG4gNDk0Olx0ICpcdFx0Rm9yIHRoZSBmaXN0IGludm9jYXRpb24gdXNlIDAuXG4gNDk1Olx0ICogQHJjOiBQb2ludGVyIHRvIHN0b3JlIHRoZSByZXR1cm4gY29kZSBvciBOVUxMLlxuIDQ5NjpcdCAqIEBycmM6IFBvaW50ZXIgdG8gc3RvcmUgdGhlIHJldHVybiByZWFzb24gY29kZSBvciBOVUxMLlxuIDQ5NzpcdCAqXG4gNDk4Olx0ICogVGhpcyBmdW5jdGlvbiBjYWxscyB0aGUgTGlzdCBTZWNyZXRzIFVWQy4gVGhlIHJlc3VsdCBpcyB3cml0dGVuIGludG8gYGJ1ZmAsXG4gNDk5Olx0ICogdGhhdCBuZWVkcyB0byBiZSBhdCBsZWFzdCBvbmUgcGFnZSBvZiB3cml0YWJsZSBtZW1vcnkuXG4gNTAwOlx0ICogYGJ1ZmAgY29uc2lzdHMgb2Y6XG4gNTAxOlx0ICogKiAlc3RydWN0IHV2X3NlY3JldF9saXN0X2hkclxuIDUwMjpcdCAqICogJXN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtIChtdWx0aXBsZSlcbiA1MDM6XHQgKlxuIDUwNDpcdCAqIEZvciBgc3RhcnRfaWR4YCB1c2UgXzBfIGZvciB0aGUgZmlyc3QgY2FsbC4gSWYgdGhlcmUgYXJlIG1vcmUgc2VjcmV0cyBhdmFpbGFibGVcbiA1MDU6XHQgKiBidXQgY291bGQgbm90IGZpdCBpbnRvIHRoZSBwYWdlIHRoZW4gYHJjYCBpcyBgVVZDX1JDX01PUkVfREFUQWAuXG4gNTA2Olx0ICogSW4gdGhpcyBjYXNlIHVzZSBgdXZfc2VjcmV0X2xpc3RfaGRyLm5leHRfc2VjcmV0X2lkeGAgZm9yIGBzdGFydF9pZHhgLlxuIDUwNzpcdCAqXG4gNTA4Olx0ICogQ29udGV4dDogbWlnaHQgc2xlZXAuXG4gNTA5Olx0ICpcbiA1MTA6XHQgKiBSZXR1cm46IFRoZSBVVkMgY29uZGl0aW9uIGNvZGUuXG4gNTExOlx0ICovXG4gNTEyOlx0c3RhdGljIGlubGluZSBpbnQgdXZfbGlzdF9zZWNyZXRzKHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqYnVmLCB1MTYgc3RhcnRfaWR4LFxuIDUxMzpcdFx0XHRcdFx0ICB1MTYgKnJjLCB1MTYgKnJyYylcbiA1MTQ6XHR7XG4gNTE1Olx0XHRzdHJ1Y3QgdXZfY2JfbGlzdF9zZWNyZXRzIHV2Y2IgPSB7XG4gNTE2Olx0XHRcdC5oZWFkZXIubGVuID0gc2l6ZW9mKHV2Y2IpLFxuIDUxNzpcdFx0XHQuaGVhZGVyLmNtZCA9IFVWQ19DTURfTElTVF9TRUNSRVRTLFxuIDUxODpcdFx0XHQuc3RhcnRfaWR4ID0gc3RhcnRfaWR4LFxuIDUxOTpcdFx0XHQubGlzdF9hZGRyID0gKHU2NClidWYsXG4gNTIwOlx0XHR9O1xuIDUyMTpcdFx0aW50IGNjID0gdXZfY2FsbF9zY2hlZCgwLCAodTY0KVx1MDAyNnV2Y2IpO1xuIDUyMjpcdFxuIDUyMzpcdFx0aWYgKHJjKVxuIDUyNDpcdFx0XHQqcmMgPSB1dmNiLmhlYWRlci5yYztcbiA1MjU6XHRcdGlmIChycmMpXG4gNTI2Olx0XHRcdCpycmMgPSB1dmNiLmhlYWRlci5ycmM7XG4gNTI3Olx0XG4gNTI4Olx0XHRyZXR1cm4gY2M7XG4gNTI5Olx0fVxuIDUzMDpcdFxuIDUzMTpcdHN0cnVjdCB1dl9pbmZvIHtcbiA1MzI6XHRcdHVuc2lnbmVkIGxvbmcgaW5zdF9jYWxsc19saXN0WzRdO1xuIDUzMzpcdFx0dW5zaWduZWQgbG9uZyB1dl9iYXNlX3N0b3JfbGVuO1xuIDUzNDpcdFx0dW5zaWduZWQgbG9uZyBndWVzdF9iYXNlX3N0b3JfbGVuO1xuIDUzNTpcdFx0dW5zaWduZWQgbG9uZyBndWVzdF92aXJ0X2Jhc2Vfc3Rvcl9sZW47XG4gNTM2Olx0XHR1bnNpZ25lZCBsb25nIGd1ZXN0X3ZpcnRfdmFyX3N0b3JfbGVuO1xuIDUzNzpcdFx0dW5zaWduZWQgbG9uZyBndWVzdF9jcHVfc3Rvcl9sZW47XG4gNTM4Olx0XHR1bnNpZ25lZCBsb25nIG1heF9zZWNfc3Rvcl9hZGRyO1xuIDUzOTpcdFx0dW5zaWduZWQgaW50IG1heF9udW1fc2VjX2NvbmY7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMjkKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNlY3JldHMgTGlzdGluZyBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgdXZfbGlzdF9zZWNyZXRzYCBmdW5jdGlvbiwgYW5kIGl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQgb24gdGhlIHN1cmZhY2UuIEl0JiMzOTtzIGVzc2VudGlhbGx5IGNhbGxpbmcgYSBoeXBlcnZpc29yIGNhbGwsIGEgVVZDLCB0byBmZXRjaCBhIGxpc3Qgb2Ygc2VjcmV0cy4gVGhlIFVWQywgb2YgY291cnNlLCBpcyB0aGUgbG93LWxldmVsIGludGVyZmFjZSB0aGF0IGRvZXMgdGhlIGhlYXZ5IGxpZnRpbmcuIFRoZSByZXN1bHRzIG9mIHRoYXQgY2FsbCBhcmUgdGhlbiB3cml0dGVuIGludG8gdGhpcyBgYnVmYC4gTm93LCB0aGlzIGBidWZgIHNlZW1zIGludGVyZXN0aW5nLCBpdCYjMzk7cyBhbGxvY2F0ZWQgYXMgYSBwYWdlIG9mIG1lbW9yeSwgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIHBvdGVudGlhbCBzaXplIGNvbnNpZGVyYXRpb25zLiBBbmQgaXQmIzM5O3MgYWxzbyB0eXBlIGBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RgLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoYXQgc3RydWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZm9ybWF0IG9mIHRoYXQgZGF0YS4gSSB3b25kZXIgd2hhdCBmaWVsZHMgYXJlIGluY2x1ZGVkLCBob3cgdGhlIGxpc3QgaXMgb3JnYW5pemVkLCBhbmQgd2hhdCBjb25zaWRlcmF0aW9ucyB3ZXJlIG1hZGUgZm9yIHRoZSB2YXJpb3VzIHNpemVzIGFuZCBzZWNyZXQgcHJvcGVydGllcy4gVGltZSB0byBkaXZlIGludG8gdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCB1dl9zZWNyZXRfbGlzdGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCB1dl9zZWNyZXRfbGlzdCAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg9NDExPXN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtIHtcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC00MjMtICovXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaDo0MjQ6c3RydWN0IHV2X3NlY3JldF9saXN0IHtcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTQyNS1cdHUxNiBudW1fc2Vjcl9zdG9yZWQ7XG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg9NDczPXN0YXRpYyBpbmxpbmUgaW50IHV2X2NtZF9ub2RhdGEodTY0IGhhbmRsZSwgdTE2IGNtZCwgdTE2ICpyYywgdTE2ICpycmMpXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNTExLSAqL1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6NTEyOnN0YXRpYyBpbmxpbmUgaW50IHV2X2xpc3Rfc2VjcmV0cyhzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmJ1ZiwgdTE2IHN0YXJ0X2lkeCxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTUxMy1cdFx0XHRcdCAgdTE2ICpyYywgdTE2ICpycmMpXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg9NjE4PWludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaDo2MTk6XHRcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqbGlzdCxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTYyMC1cdFx0ICAgc3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW1faGRyICpzZWNyZXQpO1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYz03NTc9c3RhdGljIGludCBmaW5kX3NlY3JldF9pbl9wYWdlKGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo3NTg6XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqbGlzdCxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03NTktXHRcdFx0ICAgICAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtX2hkciAqc2VjcmV0KVxuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYz03ODA9aW50IHV2X2ZpbmRfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo3ODE6XHRcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqbGlzdCxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03ODItXHRcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtX2hkciAqc2VjcmV0KVxuLS1cbmRyaXZlcnMvczM5MC9jaGFyL3V2ZGV2aWNlLmM9MzA3PXN0YXRpYyBpbnQgdXZpb19nZXRfbGlzdCh2b2lkICp6cGFnZSwgc3RydWN0IHV2aW9faW9jdGxfY2IgKnV2X2lvY3RsKVxuLS1cbmRyaXZlcnMvczM5MC9jaGFyL3V2ZGV2aWNlLmMtMzEwLVx0dTggX191c2VyICp1c2VyX2J1ZiA9ICh1OCBfX3VzZXIgKil1dl9pb2N0bC1cdTAwM2Vhcmd1bWVudF9hZGRyO1xuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYzozMTE6XHRzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QgPSB6cGFnZTtcbmRyaXZlcnMvczM5MC9jaGFyL3V2ZGV2aWNlLmMtMzEyLVx0dTE2IG51bV9zZWNyZXRzX3N0b3JlZCA9IDA7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9MjA9TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O3MzOTAgcHJvdGVjdGVkIGtleSBVViBoYW5kbGVyXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yNC0gKi9cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjI1OnN0YXRpYyBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKnV2X2xpc3Q7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yNi1zdGF0aWMgREVGSU5FX01VVEVYKHV2X2xpc3RfbXV0ZXgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDkzCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOgoKKipEaXZpbmcgaW50byB0aGUgUzM5MCBVViBTZWNyZXQgTGlzdCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gaXQuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYHN0cnVjdCB1dl9zZWNyZXRfbGlzdGAuIEl0JiMzOTtzIGRlZmluZWQgd2l0aGluIGBhcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaGAuIEdpdmVuIG15IGJhY2tncm91bmQgd2l0aCBzMzkwIGFyY2hpdGVjdHVyZSBhbmQgdGhlIFVWIChVbHRyYVZpb2xldCkgcGxhdGZvcm0sIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgc3RydWN0dXJlIHRvIGhvbGQgZGV0YWlscyByZWxldmFudCB0byBzZWN1cmUgbWVtb3J5IGFjY2VzcyBvciBjb25maWRlbnRpYWwgZGF0YSBtYW5hZ2VtZW50IHdpdGhpbiB0aGF0IHNwZWNpZmljIGVudmlyb25tZW50LiBJIGFudGljaXBhdGUgdGhpcyB3aWxsIGJlIGEgY3JpdGljYWwgc3RydWN0dXJlIGZvciBhbnkgY29kZSBkZWFsaW5nIHdpdGggc2Vuc2l0aXZlIGluZm9ybWF0aW9uIG9yIHBlcmhhcHMgaW52b2x2ZWQgaW4gZXN0YWJsaXNoaW5nIHNlY3VyZSBleGVjdXRpb24gY29udGV4dHMuIEkmIzM5O20ga2VlbiB0byBzZWUgaWYgaXQgdXRpbGl6ZXMgYW55IHVuaXF1ZSBzMzkwLXNwZWNpZmljIG1lbW9yeSBwcm90ZWN0aW9uIG1lY2hhbmlzbXMuIFRpbWUgdG8gY2hlY2sgaXQgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDExLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MTE6XHRzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbSB7XG4gNDEyOlx0XHRzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbV9oZHIgaGRyO1xuIDQxMzpcdFx0dTY0IHJlc2VydmVyZDA4O1xuIDQxNDpcdFx0dTggaWRbVVZfU0VDUkVUX0lEX0xFTl07XG4gNDE1Olx0fSBfX3BhY2tlZCBfX2FsaWduZWQoOCk7XG4gNDE2Olx0XG4gNDE3Olx0LyoqXG4gNDE4Olx0ICogdXZfc2VjcmV0X2xpc3QgLSBVViBzZWNyZXQtbWV0YWRhdGEgbGlzdC5cbiA0MTk6XHQgKiBAbnVtX3NlY3Jfc3RvcmVkOiBOdW1iZXIgb2Ygc2VjcmV0cyBzdG9yZWQgaW4gdGhpcyBsaXN0LlxuIDQyMDpcdCAqIEB0b3RhbF9udW1fc2VjcmV0czogTnVtYmVyIG9mIHNlY3JldHMgc3RvcmVkIGluIHRoZSBVViBmb3IgdGhpcyBndWVzdC5cbiA0MjE6XHQgKiBAbmV4dF9zZWNyZXRfaWR4OiBwb3NpdGl2ZSBudW1iZXIgaWYgdGhlcmUgYXJlIG1vcmUgc2VjcmV0cyBhdmFpbGFibGUgb3IgemVyby5cbiA0MjI6XHQgKiBAc2VjcmV0czogVXAgdG8gODUgVVYtc2VjcmV0IG1ldGFkYXRhIGVudHJpZXMuXG4gNDIzOlx0ICovXG4gNDI0Olx0c3RydWN0IHV2X3NlY3JldF9saXN0IHtcbiA0MjU6XHRcdHUxNiBudW1fc2Vjcl9zdG9yZWQ7XG4gNDI2Olx0XHR1MTYgdG90YWxfbnVtX3NlY3JldHM7XG4gNDI3Olx0XHR1MTYgbmV4dF9zZWNyZXRfaWR4O1xuIDQyODpcdFx0dTE2IHJlc2VydmVkXzA2O1xuIDQyOTpcdFx0dTY0IHJlc2VydmVkXzA4O1xuIDQzMDpcdFx0c3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW0gc2VjcmV0c1s4NV07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwODgKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxMzczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQnVnIEZpeGVzKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIGlzc3VlIGluIGBmaW5kX3NlY3JldF9pbl9wYWdlYC4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzIHVzaW5nIGB0b3RhbF9udW1fc2VjcmV0c2AgaW5zdGVhZCBvZiBgbnVtX3NlY3Jfc3RvcmVkYCBpbiB0aGUgbG9vcCBjb25kaXRpb24uIE5vdywgYHRvdGFsX251bV9zZWNyZXRzYCByZXByZXNlbnRzIHRoZSB0b3RhbCBzZWNyZXRzLCB3aGljaCBjb3VsZCBiZSBtb3JlIHRoYW4gdGhlIDg1LWVsZW1lbnQgYXJyYXkgYGxpc3QtJmd0O3NlY3JldHNgIGNhbiBhY3R1YWxseSBob2xkIGZvciB0aGUgY3VycmVudCBwYWdlLiBJZiBgdG90YWxfbnVtX3NlY3JldHNgIGV4Y2VlZHMgODUsIHRoaXMgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIHdoZW4gaXRlcmF0aW5nIHRocm91Z2ggYGxpc3QtJmd0O3NlY3JldHNgLiBLQVNBTiB3b3VsZCBkZWZpbml0ZWx5IGNhdGNoIHRoYXQsIHdoaWNoIGlzIGdvb2QuCgpOZXh0LCBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBjaGFuZ2UgaW4gYHV2X2ZpbmRfc2VjcmV0YC4gVGhlIG9yaWdpbmFsIGxvb3AgY29uZGl0aW9uIHdhcyBmdW5kYW1lbnRhbGx5IGZsYXdlZC4gSXQgd2FzIHRha2luZyBgc3RhcnRfaWR4YCBhbmQgc2V0dGluZyBpdCB0byBgbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4YCBpbW1lZGlhdGVseSBiZWZvcmUgY29tcGFyaW5nIHRoZW0gaW4gdGhlIGxvb3AgY29uZGl0aW9uLiBUaGF0IG1ha2VzIHRoZSBjb25kaXRpb24gYHN0YXJ0X2lkeCAmbHQ7IGxpc3QtJmd0O25leHRfc2VjcmV0X2lkeGAgZWZmZWN0aXZlbHkgYHggJmx0OyB4YCwgd2hpY2ggaXMgYWx3YXlzIGZhbHNlLCByaWdodD8gU28gdGhlIGxvb3Agd2FzIGd1YXJhbnRlZWQgdG8gZXhlY3V0ZSBvbmx5IG9uY2UuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGxvZ2ljIGVycm9yLCB2ZXJ5IGVhc2lseSBtaXNzZWQuIFRoZSBmaXggaW5pdGlhbGl6ZXMgYGxpc3QtJmd0O25leHRfc2VjcmV0X2lkeGAgdG8gYDBgIGFuZCB0aGVuIHVzZXMgdGhlIGluY3JlbWVudGVkIHZhbHVlIGluIHRoZSBsb29wIGNvbmRpdGlvbiwgc28gdGhlIGxvb3AgZXhlY3V0ZXMgY29ycmVjdGx5LgoKVGhlIGNyaXRpY2FsIHRoaW5nIEkmIzM5O20gYXNzZXNzaW5nIGlzIGlmIHRoaXMgaXMgcmVsYXRlZCB0byBLTVNBTiYjMzk7cyBkb21haW4gb2YgdW5pbml0aWFsaXplZCByZWFkcy4gTmVpdGhlciBvZiB0aGVzZSBmaXhlcyAqZGlyZWN0bHkqIGRlYWxzIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBmaXJzdCBpcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQg4oCTIEtBU0FOIGRvZXMgdGhhdC4gVGhlIHNlY29uZCBpcyBhIGxvZ2ljIGVycm9yIHRoYXQgYnJlYWtzIHRoZSBsb29wIC0gdGhhdCBoYXMgdG8gYmUgZml4ZWQuIEl04oCZcyBhbiBpbnRlcmVzdGluZyBidWcsIGJ1dCBpdCBkb2VzIG5vdCBzZWVtIEtNU0FOIHNwZWNpZmljLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHdoZXJlIGB1dl9maW5kX3NlY3JldGAgaXMgY2FsbGVkIHRvIHJ1bGUgb3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXZfZmluZF9zZWNyZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg9NjEzPXN0YXRpYyBpbmxpbmUgaW50IHV2X3JlbW92ZV9zaGFyZWQodW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTYxNy1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oOjYxODppbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNjE5LVx0XHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QsXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC91di5jPTc1Nz1zdGF0aWMgaW50IGZpbmRfc2VjcmV0X2luX3BhZ2UoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03NzItLyoqXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6NzczOiAqIHV2X2ZpbmRfc2VjcmV0KCkgLSBzZWFyY2ggc2VjcmV0IG1ldGFkYXRhIGZvciBhIGdpdmVuIHNlY3JldCBpZC5cbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03NzQtICogQHNlY3JldF9pZDogc2VhcmNoIHBhdHRlcm4uXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc3OS0gKi9cbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo3ODA6aW50IHV2X2ZpbmRfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03ODEtXHRcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqbGlzdCxcbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtODA1LX1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo4MDY6RVhQT1JUX1NZTUJPTF9HUEwodXZfZmluZF9zZWNyZXQpO1xuYXJjaC9zMzkwL2tlcm5lbC91di5jLTgwNy1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0yMD1NT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7czM5MCBwcm90ZWN0ZWQga2V5IFVWIGhhbmRsZXJcJiMzNDspO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTIyLS8qXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoyMzogKiBPbmUgcHJlLWFsbG9jYXRlZCB1dl9zZWNyZXRfbGlzdCBmb3IgdXNlIHdpdGggdXZfZmluZF9zZWNyZXQoKVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjQtICovXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9OTM9c3RhdGljIGludCBnZXRfc2VjcmV0X21ldGFkYXRhKGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy05OS1cdG1lbXNldCh1dl9saXN0LCAwLCBzaXplb2YoKnV2X2xpc3QpKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjEwMDpcdHJjID0gdXZfZmluZF9zZWNyZXQoc2VjcmV0X2lkLCB1dl9saXN0LCBzZWNyZXQpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMTAxLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnV2X2xpc3RfbXV0ZXgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTc2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBPdXQtb2YtQm91bmRzIFJlYWQgaW4gYHMzOTAvY3J5cHRvL3BrZXlfdXYuY2AqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuY2AsIGFuZCBJIHNlZSB0aGF0IGB1dl9saXN0YCBnZXRzIHByZS1hbGxvY2F0ZWQgYW5kIHplcm9lZCBiZWZvcmUgdGhlIGB1dl9maW5kX3NlY3JldGAgZnVuY3Rpb24gaXMgY2FsbGVkLiBUaGlzIG1lYW5zIHRoZSBzdHJ1Y3R1cmUgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgcmlnaHQgZnJvbSB0aGUgc3RhcnQuIFRoYXQmIzM5O3MgZ29vZCwgcHJlZGljdGFibGUgYmVoYXZpb3IuIE5vdywgdGhlIHBvdGVudGlhbCBpc3N1ZSBhcmlzZXMgd2l0aGluIGBmaW5kX3NlY3JldF9pbl9wYWdlYCwgc3BlY2lmaWNhbGx5IHdoZW4gaXQgcmVhZHMgZnJvbSBgbGlzdC0mZ3Q7c2VjcmV0c1tpXWAuIElmIHRoaXMgYGlgIGluZGV4IGV4Y2VlZHMgdGhlIGFsbG9jYXRlZCBib3VuZGFyaWVzLCBpdCBsb29rcyBsaWtlIHdlIGNvdWxkIGhhdmUgYW4gb3V0LW9mLWJvdW5kcyByZWFkLCBhbmQgdGhhdCYjMzk7cyBuZXZlciBnb29kLgoKSSYjMzk7bSB0aGlua2luZywgdGhpcyBgbGlzdGAgdmFyaWFibGUsIGl0JiMzOTtzIHByb2JhYmx5IGFsbG9jYXRlZCBhcyBhIHBhZ2UsIHByb2JhYmx5IGEgc2luZ2xlIHBhZ2UuIElmIHdlIGdvIHBhc3QgaW5kZXggODUsIHdlJiMzOTtyZSBsaWtlbHkgZ29pbmcgdG8gcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIGBsaXN0LSZndDtzZWNyZXRzYCBhcnJheS4gSSBuZWVkIHRvIGJlIHN1cmUgdGhvdWdoLiBMZXQgbWUgY2hlY2sgdGhlIHNpemUgb2YgYHN0cnVjdCB1dl9zZWNyZXRfbGlzdGAuLi4gQWgsIHllcywgaXQmIzM5O3MgZGVmaW5lZCBsaWtlIHRoaXM6CmBgYGMKc3RydWN0IHV2X3NlY3JldF9saXN0IHsKCXUxNiBudW1fc2Vjcl9zdG9yZWQ7Cgl1MTYgdG90YWxfbnVtX3NlY3JldHM7Cgl1MTYgbmV4dF9zZWNyZXRfaWR4OwoJdTE2IHJlc2VydmVkXzA2OwoJdTY0IHJlc2VydmVkXzA4OwoJc3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW0gc2VjcmV0c1s4NV07Cn07CmBgYApPa2F5LCBzbyBpdCBoYXMgdGhhdCBhcnJheSBvZiBgc2VjcmV0c1s4NV1gLiBBbmQgdGhlbiBgc3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW1gIGlzIGRlZmluZWQgYXM6CmBgYGMKc3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW0gewoJc3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW1faGRyIGhkcjsKCXU2NCByZXNlcnZlcmQwODsKCXU4IGlkW1VWX1NFQ1JFVF9JRF9MRU5dOwp9IF9fcGFja2VkIF9fYWxpZ25lZCg4KTsKYGBgClNvIEkgZ3Vlc3MgSSBuZWVkIHRvIGNoZWNrIHRoZSBleGFjdCBzaXplIG9mIGBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbV9oZHJgIGFuZCBgVVZfU0VDUkVUX0lEX0xFTmAgdG8gbmFpbCBkb3duIHRoZSBzaXplIGFuZCBjYWxjdWxhdGUgdGhlIGJvdW5kcy4gSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIGRpZyBpbnRvIHRob3NlIGRlZmluaXRpb25zIHRvIHVuZGVyc3RhbmQgdGhlIG1lbW9yeSBsYXlvdXQgcHJlY2lzZWx5LiBXZSBoYXZlIHRoZSBwb3RlbnRpYWwgZm9yIGEgYnVmZmVyIG92ZXJmbG93IGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtX2hkciAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg9MzczPWVudW0gdXZfc2VjcmV0X3R5cGVzIHtcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC0zOTgtICovXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaDozOTk6c3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW1faGRyIHtcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTQwMC1cdHUxNiBpbmRleDtcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaD00MTE9c3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW0ge1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6NDEyOlx0c3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW1faGRyIGhkcjtcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTQxMy1cdHU2NCByZXNlcnZlcmQwODtcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaD02MTg9aW50IHV2X2ZpbmRfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTYxOS1cdFx0ICAgc3RydWN0IHV2X3NlY3JldF9saXN0ICpsaXN0LFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6NjIwOlx0XHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbV9oZHIgKnNlY3JldCk7XG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC02MjEtaW50IHV2X3JldHJpZXZlX3NlY3JldCh1MTYgc2VjcmV0X2lkeCwgdTggKmJ1Ziwgc2l6ZV90IGJ1Zl9zaXplKTtcbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmM9NzU3PXN0YXRpYyBpbnQgZmluZF9zZWNyZXRfaW5fcGFnZShjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzU4LVx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QsXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6NzU5Olx0XHRcdCAgICAgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbV9oZHIgKnNlY3JldClcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03NjAte1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYz03ODA9aW50IHV2X2ZpbmRfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03ODEtXHRcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqbGlzdCxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo3ODI6XHRcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtX2hkciAqc2VjcmV0KVxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc4My17XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9OTM9c3RhdGljIGludCBnZXRfc2VjcmV0X21ldGFkYXRhKGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjk0Olx0XHRcdCAgICAgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbV9oZHIgKnNlY3JldClcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTk1LXtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0xMDY9c3RhdGljIGludCByZXRyaWV2ZV9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTEwOC17XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoxMDk6XHRzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbV9oZHIgc2VjcmV0X21ldGFfZGF0YTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTExMC1cdGludCByYztcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0yMzM9c3RhdGljIGludCB1dl92ZXJpZnlrZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yMzktXHRzdHJ1Y3QgdXZzZWNyZXR0b2tlbiAqdCA9IChzdHJ1Y3QgdXZzZWNyZXR0b2tlbiAqKWtleTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjI0MDpcdHN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtX2hkciBzZWNyZXRfbWV0YV9kYXRhO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjQxLVx0dTMyIHBrZXlzaXplLCBwa2V5dHlwZSwgYml0c2l6ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0NzYKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgdXZfc2VjcmV0X2xpc3RfaXRlbV9oZHJgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXNzZWN0IHRoaXMgYHN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtX2hkcmAuIEkmIzM5O20gaW1tZWRpYXRlbHkgY3VyaW91cyBhYm91dCBpdHMgc3RydWN0dXJlIOKAkyB3aGF0JiMzOTtzIHRoZSB1bmRlcmx5aW5nIHB1cnBvc2Ugb2YgdGhpcyBoZWFkZXIgd2l0aGluIGxpYnV2JiMzOTtzIHNlY3JldCBsaXN0IGltcGxlbWVudGF0aW9uPyBJcyBpdCBhIHNpbmdsZSBub2RlLCBvciBhIG1vcmUgY29tcGxleCBtZXRhZGF0YSBzdHJ1Y3R1cmUgZm9yIGEgbGlua2VkIGxpc3Q/IE15IGltbWVkaWF0ZSBxdWVzdGlvbnMgcmV2b2x2ZSBhcm91bmQgbWVtb3J5IG1hbmFnZW1lbnQ6IGFyZSB3ZSBkZWFsaW5nIHdpdGggZW1iZWRkZWQgZGF0YSwgb3IgcG9pbnRlcnMgdG8gZXh0ZXJuYWwgYmxvY2tzPyBBcmUgdGhlcmUgaW1wbGljYXRpb25zIGZvciBhdG9taWNpdHkgYW5kIHRocmVhZCBzYWZldHkgaGVyZSwgcGFydGljdWxhcmx5IGlmIHRoaXMgZGF0YSBzdHJ1Y3R1cmUgaXMgYWNjZXNzZWQgY29uY3VycmVudGx5PyBJcyB0aGVyZSBhbiBpbmhlcmVudCBvcmRlcmluZyB0byB0aGUgc2VjcmV0IGl0ZW1zLCBvciBpcyB0aGlzIGp1c3QgYW4gdW5vcmRlcmVkIGNvbGxlY3Rpb24/IEFyZSB0aGVyZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnM/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIGxvY2tpbmcsIHBhcnRpY3VsYXJseSBpbiBtdWx0aS10aHJlYWRlZCBlbnZpcm9ubWVudHMgd2hlcmUgc2VjcmV0cyBtaWdodCBiZSBhY2Nlc3NlZCBvciB1cGRhdGVkPyBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZGVzaWduIHRyYWRlb2ZmcyB0aGV5IG1hZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOTksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM5OTpcdHN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtX2hkciB7XG4gNDAwOlx0XHR1MTYgaW5kZXg7XG4gNDAxOlx0XHR1MTYgdHlwZTtcbiA0MDI6XHRcdHUzMiBsZW5ndGg7XG4gNDAzOlx0fSBfX3BhY2tlZCBfX2FsaWduZWQoOCk7XG4gNDA0Olx0XG4gNDA1Olx0I2RlZmluZSBVVl9TRUNSRVRfSURfTEVOIDMyXG4gNDA2Olx0LyoqXG4gNDA3Olx0ICogdXZfc2VjcmV0X2xpc3RfaXRlbSAtIFVWIHNlY3JldCBlbnRyeS5cbiA0MDg6XHQgKiBAaGRyOiBUaGUgbWV0YWRhdGEgb2YgdGhpcyBzZWNyZXQuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODgwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBPdXQtb2YtQm91bmRzIFJlYWQgaW4gYHV2X3NlY3JldF9saXN0YCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgZm9jdXNlZCBvbiBtZW1vcnkgbGF5b3V0LiBJJiMzOTttIHNlZWluZyB0aGF0IGBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbV9oZHJgIGlzIGEgbW9kZXN0IDggYnl0ZXMsIHdoaWNoIGlzIGdvb2QuIFRoZW4gYHN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtYCBiYWxsb29ucyB0byA0OCBieXRlcyAoOCBmb3IgdGhlIGhlYWRlciwgOCBmb3Igc29tZXRoaW5nIGVsc2UsIGFuZCBhIDMyLWJ5dGUgSUQsIHByZXN1bWFibHkpLiBOb3csIHRoZSBjcnVjaWFsIHBhcnQ6IGBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RgIGl0c2VsZi4gVGhlIGNhbGN1bGF0aW9uIGxvb2tzIGxpa2UgdGhpczogMiAmIzQzOyAyICYjNDM7IDIgJiM0MzsgMiAmIzQzOyA4ICYjNDM7ICg4NSAqIDQ4KSA9IDQwOTYgYnl0ZXMgdG90YWwuIEhtbSwgdGhhdCYjMzk7cyBleGFjdGx5IG9uZSBwYWdlLiBUaGF0JiMzOTtzIGEgcmVkIGZsYWcgaW4gaXRzZWxmLgoKTm93LCB0aGF0IGJyaW5ncyBtZSB0byB0aGUgcG90ZW50aWFsIGJ1ZyBpbiBgZmluZF9zZWNyZXRfaW5fcGFnZWA6CgpgYGBjCglmb3IgKGkgPSAwOyBpICZsdDsgbGlzdC0mZ3Q7dG90YWxfbnVtX3NlY3JldHM7IGkmIzQzOyYjNDM7KSB7CgkJaWYgKG1lbWNtcChzZWNyZXRfaWQsIGxpc3QtJmd0O3NlY3JldHNbaV0uaWQsIFVWX1NFQ1JFVF9JRF9MRU4pID09IDApIHsKCQkJKnNlY3JldCA9IGxpc3QtJmd0O3NlY3JldHNbaV0uaGRyOwoJCQlyZXR1cm4gMDsKCQl9Cgl9CmBgYAoKVGhlIGxvb3AgaXRlcmF0ZXMgdXAgdG8gYHRvdGFsX251bV9zZWNyZXRzYC4gSWYgYHRvdGFsX251bV9zZWNyZXRzYCBleGNlZWRzIDg1LCB0aGVuIGBsaXN0LSZndDtzZWNyZXRzW2ldYCBnb2VzIG91dC1vZi1ib3VuZHMsIHNpbmNlIHdlIG9ubHkgaGF2ZSBzcGFjZSBmb3IgODUgYHV2X3NlY3JldF9saXN0X2l0ZW1gcywgcG90ZW50aWFsbHkgd3JpdGluZyBhdCBhIG1lbW9yeSBhZGRyZXNzIHRoYXQmIzM5O3Mgb3V0c2lkZSBvZiB0aGUgYWxsb2NhdGVkIHBhZ2UuIFRoaXMgaXMgYSBjbGFzc2ljIG91dC1vZi1ib3VuZHMgcmVhZCwgYW5kIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIHNob3VsZCBuYWlsIGl0IGJlY2F1c2UgaXQmIzM5O3MgcmVhZGluZyBwYXN0IHRoZSBwYWdlIGJvdW5kYXJ5LgoKVGhlIG5leHQgcXVlc3Rpb24gaXMsIGhvdyBpcyB0aGUgbWVtb3J5IGZvciB0aGUgYGxpc3RgIGFsbG9jYXRlZD8gSXMgaXQgYGttYWxsb2NgPyBgZ2V0X2ZyZWVfcGFnZWA/IFRoYXQmIzM5O3MgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgb3ZlcmZsb3cuIEdvaW5nIGJhY2sgdG8gdGhlIGRyaXZlciBjb2RlLCBJIHNlZSB0aGF0IHRoZSBgdXZfbGlzdGAgaXMgcHJlLWFsbG9jYXRlZC4gTGV0JiMzOTtzIGRpZyBkZWVwZXIgdG8gc2VlIGV4YWN0bHkgaG93IGFuZCB3aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXZfbGlzdCA9JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9Mjg0PXN0YXRpYyBpbnQgX19pbml0IHBrZXlfdXZfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI5My1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjI5NDpcdHV2X2xpc3QgPSBrbWFsbG9jX29iaigqdXZfbGlzdCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yOTUtXHRpZiAoIXV2X2xpc3QpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODY1CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4KCioqRGVjb25zdHJ1Y3RpbmcgdGhpcyBNZW1vcnkgQWxsb2NhdGlvbioqCgpIbW0sIGBrbWFsbG9jX29iaigqdXZfbGlzdClgLi4uIHRoYXQgc3ludGF4IHRocm93cyBhIGZsYWcuIGBrbWFsbG9jX29iamAgaXMgZGVmaW5pdGVseSBub3QgYSBzdGFuZGFyZCBrZXJuZWwgYWxsb2NhdG9yLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0aGF0IGl0JiMzOTtzIGEgbWFjcm8gb3IgYSBjdXN0b20gd3JhcHBlciBkZWZpbmVkIHNvbWV3aGVyZSBzcGVjaWZpYyB0byB0aGlzIGNvZGViYXNlLiBJdCYjMzk7cyBvZnRlbiB0aGF0IHRoZXNlIHR5cGVzIG9mIGNvbnN0cnVjdHMgYXJlIHVzZWQgdG8gaGFuZGxlIG9iamVjdC1zcGVjaWZpYyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcG90ZW50aWFsbHkgcHJvdmlkZSBhZGRpdGlvbmFsIGNvbnRleHQgb3IgZGVidWdnaW5nIGluZm9ybWF0aW9uLiBCdXQgbGV0JiMzOTtzIHZlcmlmeSB0aGF0LgoKTXkgbmV4dCBtb3ZlIGlzIHRvIGZhbGwgYmFjayB0byB0aGUgdHJpZWQtYW5kLXRydWUgc3RhbmRhcmQga2VybmVsIGFsbG9jYXRpb246IGBrbWFsbG9jKHNpemVvZigqdXZfbGlzdCksIEdGUF9LRVJORUwpYC4gIEl0JiMzOTtzIG11Y2ggbW9yZSBsaWtlbHkgdGhpcyBpcyB3aGF0IHRoZXkgKm1lYW50KiBhbmQgdGhlIGNvZGUgaXMgdXNpbmcgdGhlIHJpZ2h0IHNpemUgYW5kIGFsbG9jYXRpb24gZmxhZ3MuIFRpbWUgdG8gY2hlY2sgdGhlIGFjdHVhbCBjb2RlIG9yIHJlbGV2YW50IGhlYWRlciBmaWxlcyB0byBjb25maXJtIHRoaXMgYXNzdW1wdGlvbiBhbmQgZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IG1lbW9yeSBhbGxvY2F0aW9uIGlzIGhhbmRsZWQgd2l0aGluIHRoaXMgc3BlY2lmaWMgY29udGV4dC4gVGhhdCYjMzk7cyB0aGUgb25seSB3YXkgdG8gYmUgY29tcGxldGVseSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjg0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyODQ6XHRzdGF0aWMgaW50IF9faW5pdCBwa2V5X3V2X2luaXQodm9pZClcbiAyODU6XHR7XG4gMjg2Olx0XHRpbnQgcmM7XG4gMjg3Olx0XG4gMjg4Olx0XHRpZiAoIWlzX3Byb3RfdmlydF9ndWVzdCgpKVxuIDI4OTpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbiAyOTA6XHRcbiAyOTE6XHRcdGlmICghdGVzdF9iaXRfaW52KEJJVF9VVkNfQ01EX1JFVFJfU0VDUkVULCB1dl9pbmZvLmluc3RfY2FsbHNfbGlzdCkpXG4gMjkyOlx0XHRcdHJldHVybiAtRU5PREVWO1xuIDI5MzpcdFxuIDI5NDpcdFx0dXZfbGlzdCA9IGttYWxsb2Nfb2JqKCp1dl9saXN0KTtcbiAyOTU6XHRcdGlmICghdXZfbGlzdClcbiAyOTY6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMjk3Olx0XG4gMjk4Olx0XHRyYyA9IHBrZXlfaGFuZGxlcl9yZWdpc3RlcihcdTAwMjZ1dl9oYW5kbGVyKTtcbiAyOTk6XHRcdGlmIChyYylcbiAzMDA6XHRcdFx0a2ZyZWUodXZfbGlzdCk7XG4gMzAxOlx0XG4gMzAyOlx0XHRyZXR1cm4gcmM7XG4gMzAzOlx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ0MQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgVW5mYW1pbGlhciBDb2RlKioKClJpZ2h0LCBsZXQgbWUgc2VlLi4uIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBrbWFsbG9jX29iamAgdGhpbmcgYW5kIGl0JiMzOTtzIG5vdCBpbW1lZGlhdGVseSBqdW1waW5nIG91dCBhdCBtZSBhcyBzdGFuZGFyZCBrZXJuZWwgY29kZS4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIHRoZSBjb250ZXh0LCBpcyB0aGF0IGl0JiMzOTtzIGxpa2VseSBhIG1hY3JvIHNwZWNpZmljIHRvIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSwgb3IgbWF5YmUgZGVmaW5lZCBpbiBzb21lIGxvY2FsLCBwcm9qZWN0LXNwZWNpZmljIGhlYWRlciBmaWxlLiBPa2F5LCBob2xkIG9uLiBKdXN0IGNvbmZpcm1pbmcgbXkgaW5pdGlhbCBpbXByZXNzaW9uLi4uIFllcCwgYGttYWxsb2Nfb2JqYCBpc24mIzM5O3QgYSBzdGFuZGFyZCwgdW5pdmVyc2FsbHkgZGVmaW5lZCBrZXJuZWwgZnVuY3Rpb24gb3IgbWFjcm8uIFNvLCB0aW1lIHRvIHRyYWNrIGRvd24gaXRzIGRlZmluaXRpb24uIExldCYjMzk7cyBmaW5kIG91dCB3aGVyZSB0aGlzIHRoaW5nIGlzIGFjdHVhbGx5IGRlY2xhcmVkISBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0JiMzOTtzIGRvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrbWFsbG9jX29iaiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTU0OTcgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdD0yMDM9bm9uLVxcIGBgTlVMTGBgLCBsb2NrbGVzc2x5IGFjY2Vzc2luZyB0aGUgYGAtXHUwMDNlYWBgIGFuZCBgYC1cdTAwM2ViYGAgZmllbGRzLlxuLS1cbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdC0yMDgtICAgICAgIDIge1xuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0OjIwOTogICAgICAgMyAgIHAgPSBrbWFsbG9jX29iaigqcCk7XG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3QtMjEwLSAgICAgICA0ICAgaWYgKCFwKVxuLS1cbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdD0yMjU9dGhlaXIgcmlnaHRzIHRvIHJlb3JkZXIgdGhpcyBjb2RlIGFzIGZvbGxvd3M6XG4tLVxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0LTIzMC0gICAgICAgMiB7XG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3Q6MjMxOiAgICAgICAzICAgcCA9IGttYWxsb2Nfb2JqKCpwKTtcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdC0yMzItICAgICAgIDQgICBpZiAoIXApXG4tLVxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0PTI2MT1zaG93cyBhbiBleGFtcGxlIG9mIGluc2VydGlvbjpcbi0tXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3QtMjY2LSAgICAgICAyIHtcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdDoyNjc6ICAgICAgIDMgICBwID0ga21hbGxvY19vYmooKnApO1xuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0LTI2OC0gICAgICAgNCAgIGlmICghcClcbi0tXG5Eb2N1bWVudGF0aW9uL1JDVS9saXN0UkNVLnJzdD0yNjc9VGhlIFJDVSB2ZXJzaW9uIG9mIGF1ZGl0X3VwZF9ydWxlKCkgaXMgYXMgZm9sbG93czo6XG4tLVxuRG9jdW1lbnRhdGlvbi9SQ1UvbGlzdFJDVS5yc3QtMjc4LVx0XHRcdGlmICghYXVkaXRfY29tcGFyZV9ydWxlKHJ1bGUsIFx1MDAyNmUtXHUwMDNlcnVsZSkpIHtcbkRvY3VtZW50YXRpb24vUkNVL2xpc3RSQ1UucnN0OjI3OTpcdFx0XHRcdG5lID0ga21hbGxvY19vYmooKmVudHJ5LCBHRlBfQVRPTUlDKTtcbkRvY3VtZW50YXRpb24vUkNVL2xpc3RSQ1UucnN0LTI4MC1cdFx0XHRcdGlmIChuZSA9PSBOVUxMKVxuLS1cbkRvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS5yc3Q9NDQxPXVzZXMgb2YgUkNVIG1heSBiZSBmb3VuZCBpbiBsaXN0UkNVLnJzdCBhbmQgTk1JLVJDVS5yc3QuXG4tLVxuRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnJzdC00NzAtXG5Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UucnN0OjQ3MTpcdFx0bmV3X2ZwID0ga21hbGxvY19vYmooKm5ld19mcCk7XG5Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UucnN0LTQ3Mi1cdFx0c3Bpbl9sb2NrKFx1MDAyNmZvb19tdXRleCk7XG4tLVxuRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnJzdD01NTM9VGhlIGZvb191cGRhdGVfYSgpIGZ1bmN0aW9uIG1pZ2h0IHRoZW4gYmUgd3JpdHRlbiBhcyBmb2xsb3dzOjpcbi0tXG5Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UucnN0LTU3Mi1cbkRvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS5yc3Q6NTczOlx0XHRuZXdfZnAgPSBrbWFsbG9jX29iaigqbmV3X2ZwKTtcbkRvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS5yc3QtNTc0LVx0XHRzcGluX2xvY2soXHUwMDI2Zm9vX211dGV4KTtcbi0tXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2tyZWYucnN0PTM5PWtyZWZfaW5pdCBhcyBzbzo6XG4tLVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9rcmVmLnJzdC00Mi1cbkRvY3VtZW50YXRpb24vY29yZS1hcGkva3JlZi5yc3Q6NDM6ICAgICBkYXRhID0ga21hbGxvY19vYmooKmRhdGEpO1xuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9rcmVmLnJzdC00NC0gICAgIGlmICghZGF0YSlcbi0tXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2tyZWYucnN0PTgxPXRocmVhZCB0byBwcm9jZXNzOjpcbi0tXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2tyZWYucnN0LTEwMi1cdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaztcbkRvY3VtZW50YXRpb24vY29yZS1hcGkva3JlZi5yc3Q6MTAzOlx0ZGF0YSA9IGttYWxsb2Nfb2JqKCpkYXRhKTtcbkRvY3VtZW50YXRpb24vY29yZS1hcGkva3JlZi5yc3QtMTA0LVx0aWYgKCFkYXRhKVxuLS1cbkRvY3VtZW50YXRpb24va2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3Q9MzgzPXRvIHByb3RlY3QgdGhlIGNhY2hlIGFuZCBhbGwgdGhlIG9iamVjdHMgd2l0aGluIGl0LiBIZXJlJiMzOTtzIHRoZSBjb2RlOjpcbi0tXG5Eb2N1bWVudGF0aW9uL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0LTQ0NC1cbkRvY3VtZW50YXRpb24va2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3Q6NDQ1OiAgICAgICAgICAgIGlmICgob2JqID0ga21hbGxvY19vYmooKm9iaikpID09IE5VTEwpXG5Eb2N1bWVudGF0aW9uL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0LTQ0Ni0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNO1xuLS1cbkRvY3VtZW50YXRpb24va2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3Q9NDk5PXdoaWNoIGFyZSB0YWtlbiBhd2F5LCBhbmQgdGhlIGBgJiM0MztgYCBhcmUgbGluZXMgd2hpY2ggYXJlIGFkZGVkLlxuLS1cbkRvY3VtZW50YXRpb24va2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3QtNTE5LVxuRG9jdW1lbnRhdGlvbi9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdDo1MjA6ICAgICAgICAgICAgIGlmICgob2JqID0ga21hbGxvY19vYmooKm9iaikpID09IE5VTEwpXG5Eb2N1bWVudGF0aW9uL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0LTUyMS0gICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTtcbi0tXG5Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbG9ja3R5cGVzLnJzdD00OTg9d29ya3MgcGVyZmVjdGx5Ojpcbi0tXG5Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbG9ja3R5cGVzLnJzdC01MDAtICByYXdfc3Bpbl9sb2NrKFx1MDAyNmxvY2spO1xuRG9jdW1lbnRhdGlvbi9sb2NraW5nL2xvY2t0eXBlcy5yc3Q6NTAxOiAgcCA9IGttYWxsb2Nfb2JqKCpwLCBHRlBfQVRPTUlDKTtcbkRvY3VtZW50YXRpb24vbG9ja2luZy9sb2NrdHlwZXMucnN0LTUwMi1cbi0tXG5Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbG9ja3R5cGVzLnJzdD01MDc9cHJlZW1wdGlvbiBvbiBQUkVFTVBUX1JUIGtlcm5lbHM6OlxuLS1cbkRvY3VtZW50YXRpb24vbG9ja2luZy9sb2NrdHlwZXMucnN0LTUwOS0gIHNwaW5fbG9jayhcdTAwMjZsb2NrKTtcbkRvY3VtZW50YXRpb24vbG9ja2luZy9sb2NrdHlwZXMucnN0OjUxMDogIHAgPSBrbWFsbG9jX29iaigqcCwgR0ZQX0FUT01JQyk7XG5Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbG9ja3R5cGVzLnJzdC01MTEtXG4tLVxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9OTM4PVRoZSBrZXJuZWwgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBnZW5lcmFsIHB1cnBvc2UgbWVtb3J5IGFsbG9jYXRvcnM6XG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo5Mzk6a21hbGxvYygpLCBremFsbG9jKCksIGttYWxsb2Nfb2JqcygpLCBremFsbG9jX29ianMoKSwgdm1hbGxvYygpLCBhbmRcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk0MC12emFsbG9jKCkuICBQbGVhc2UgcmVmZXIgdG8gdGhlIEFQSSBkb2N1bWVudGF0aW9uIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uXG4tLVxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9OTQ0PVRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgcGFzc2luZyBhIHNpemUgb2YgYSBzdHJ1Y3QgaXMgdGhlIGZvbGxvd2luZzpcbi0tXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NDctXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo5NDg6XHRwID0ga21hbGxvY19vYmooKnAsIC4uLik7XG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NDktXG4tLVxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9OTU4PVRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgYWxsb2NhdGluZyBhbiBhcnJheSBpcyB0aGUgZm9sbG93aW5nOlxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk2MS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0Ojk2MjpcdHAgPSBrbWFsbG9jX29ianMoKnAsIG4sIC4uLik7XG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NjMtXG4tLVxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0PTM4Nj1tYXkgaGVscCB3aXRoIGFsaWdubWVudCwgd3JhcC1hcm91bmQsIG9yIGFkZGl0aW9uYWwgaGFyZGVuaW5nLiBUaGVcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdDozODc6a21hbGxvY19vYmooKS1mYW1pbHkgb2YgbWFjcm9zIHByb3ZpZGUgdGhpcyBpbnRyb3NwZWN0aW9uLCB3aGljaCBjYW4gYmVcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC0zODgtdXNlZCBmb3IgdGhlIGNvbW1vbiBjb2RlIHBhdHRlcm5zIGZvciBzaW5nbGUsIGFycmF5LCBhbmQgZmxleGlibGUgb2JqZWN0XG4tLVxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0PTM5OD1iZWNvbWUsIHJlc3BlY3RpdmVseTo6XG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtMzk5LVxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0OjQwMDpcdHB0ciA9IGttYWxsb2Nfb2JqKCpwdHIgWywgZ2ZwXSApO1xuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0LTQwMS1cdHB0ciA9IGt6YWxsb2Nfb2JqKCpwdHIgWywgZ2ZwXSApO1xuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0OjQwMjpcdHB0ciA9IGttYWxsb2Nfb2JqcygqcHRyLCBjb3VudCBbLCBnZnBdICk7XG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtNDAzLVx0cHRyID0ga3phbGxvY19vYmpzKCpwdHIsIGNvdW50IFssIGdmcF0gKTtcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDQtXHRwdHIgPSBrbWFsbG9jX2ZsZXgoKnB0ciwgZmxleF9tZW1iZXIsIGNvdW50IFssIGdmcF0gKTtcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdDo0MDU6XHRfX2F1dG9fdHlwZSBwdHIgPSBrbWFsbG9jX29iaihzdHJ1Y3QgZm9vIFssIGdmcF0gKTtcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDYtXG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTE3MzQ9Y2FsbGJhY2s6OlxuLS1cbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC0xNzM5LSAgICAgICAgICAuLi4uXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q6MTc0MDogICAgICAgICAgZGF0YSA9IGttYWxsb2Nfb2JqKCpkYXRhKTtcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC0xNzQxLSAgICAgICAgICBzdWJzdHJlYW0tXHUwMDNlcnVudGltZS1cdTAwM2Vwcml2YXRlX2RhdGEgPSBkYXRhO1xuLS1cbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdD0zMzAyPWRlc3RydWN0b3IgZnVuY3Rpb24gaXMgc2V0IGluIHRoZSBgYHByaXZhdGVfZnJlZWBgIGZpZWxkOjpcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC0zMzAzLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0OjMzMDQ6ICBzdHJ1Y3QgbXlkYXRhICpwID0ga21hbGxvY19vYmooKnApO1xuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTMzMDUtICBody1cdTAwM2Vwcml2YXRlX2RhdGEgPSBwO1xuLS1cbkRvY3VtZW50YXRpb24vc3BpL3NwaS1zdW1tYXJ5LnJzdD0yNDI9QW5kIFNPQy1zcGVjaWZpYyB1dGlsaXR5IGNvZGUgbWlnaHQgbG9vayBzb21ldGhpbmcgbGlrZTo6XG4tLVxuRG9jdW1lbnRhdGlvbi9zcGkvc3BpLXN1bW1hcnkucnN0LTI1MS1cbkRvY3VtZW50YXRpb24vc3BpL3NwaS1zdW1tYXJ5LnJzdDoyNTI6XHRcdHBkYXRhMiA9IGttYWxsb2Nfb2JqKCpwZGF0YTIpO1xuRG9jdW1lbnRhdGlvbi9zcGkvc3BpLXN1bW1hcnkucnN0LTI1My1cdFx0KnBkYXRhMiA9IHBkYXRhO1xuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0PTQwMz1lIHR1dHRpIGdsaSBvZ2dldHRpIGNoZSBjb250aWVuZS4gRWNjbyBpbCBjb2RpY2U6OlxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0LTQ2NC1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0OjQ2NTogICAgICAgICAgICBpZiAoKG9iaiA9IGttYWxsb2Nfb2JqKCpvYmopKSA9PSBOVUxMKVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQva2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3QtNDY2LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07XG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQva2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3Q9NTE5PXNvbm8gcXVlbGxlIHJpbW9zc2UsIG1lbnRyZSBxdWVsbGUgYGAmIzQzO2BgIHNvbm8gcXVlbGxlIGFnZ2l1bnRlLlxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0LTUzOS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0OjU0MDogICAgICAgICAgICAgaWYgKChvYmogPSBrbWFsbG9jX29iaigqb2JqKSkgPT0gTlVMTClcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0LTU0MS0gICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTtcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9sb2NraW5nL2xvY2t0eXBlcy5yc3Q9NDg4PW1lbW9yaWEuIFN1IHVuIGtlcm5lbCBub24tUFJFRU1QVF9SVCBpbCBzZWd1ZW50ZSBjb2RpY2UgZnVuemlvbmEgcGVyZmV0dGFtZW50ZTo6XG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvbG9ja2luZy9sb2NrdHlwZXMucnN0LTQ5MC0gIHJhd19zcGluX2xvY2soXHUwMDI2bG9jayk7XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9sb2NraW5nL2xvY2t0eXBlcy5yc3Q6NDkxOiAgcCA9IGttYWxsb2Nfb2JqKCpwLCBHRlBfQVRPTUlDKTtcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2xvY2tpbmcvbG9ja3R5cGVzLnJzdC00OTItXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvbG9ja2luZy9sb2NrdHlwZXMucnN0PTQ5Nz1QUkVFTVBUX1JUOjpcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9sb2NraW5nL2xvY2t0eXBlcy5yc3QtNDk5LSAgc3Bpbl9sb2NrKFx1MDAyNmxvY2spO1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvbG9ja2luZy9sb2NrdHlwZXMucnN0OjUwMDogIHAgPSBrbWFsbG9jX29iaigqcCwgR0ZQX0FUT01JQyk7XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9sb2NraW5nL2xvY2t0eXBlcy5yc3QtNTAxLVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdD05NDI9SWwgbW9kbyBwcmVmZXJpdG8gcGVyIHBhc3NhcmUgbGEgZGltZW5zaW9uZSBkaSB1bmEgc3RydXR0dXJhIMOoIGlsIHNlZ3VlbnRlOlxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NDUtXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6OTQ2Olx0cCA9IGttYWxsb2Nfb2JqKCpwLCAuLi4pO1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk0Ny1cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9zcF9TUC9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9OTU0PUxhIGZvcm1hIHByZWZlcmlkYSBwYXJhIHBhc2FyIGVsIHRhbWHDsW8gZGUgdW5hIGVzdHJ1Y3R1cmEgZXMgbGEgc2lndWllbnRlOlxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3NwX1NQL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NTctXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9zcF9TUC9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6OTU4Olx0cCA9IGttYWxsb2Nfb2JqKCpwLCAuLi4pO1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvc3BfU1AvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk1OS1cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9rcmVmLnJzdD00Nj1rcmVm5Y+v5Lul5Ye6546w5Zyo5pWw5o2u57uT5p6E5L2T5Lit55qE5Lu75L2V5Zyw5pa544CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkva3JlZi5yc3QtNTQtXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9rcmVmLnJzdDo1NTogICAgIGRhdGEgPSBrbWFsbG9jX29iaigqZGF0YSk7XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9rcmVmLnJzdC01Ni0gICAgIGlmICghZGF0YSlcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9rcmVmLnJzdD02Mj1LcmVm6KeE5YiZXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkva3JlZi5yc3QtMTA4LVx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrO1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkva3JlZi5yc3Q6MTA5Olx0ZGF0YSA9IGttYWxsb2Nfb2JqKCpkYXRhKTtcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL2tyZWYucnN0LTExMC1cdGlmICghZGF0YSlcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9ODEwPURvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL21lbW9yeS1hbGxvY2F0aW9uLnJzdCDjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtODE1LVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0OjgxNjpcdHAgPSBrbWFsbG9jX29iaigqcCwgLi4uKTtcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC04MTctXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTgyND1Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9tZW1vcnktYWxsb2NhdGlvbi5yc3Qg44CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTgyOS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo4MzA6XHRwID0ga21hbGxvY19vYmooKnAsIC4uLik7XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtODMxLVxuLS1cbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmM9ODU3PW1hcnZlbF9hZ3Bfc2V0dXAoYWxwaGFfYWdwX2luZm8gKmFncClcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jLTg2My1cbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmM6ODY0Olx0YXBlciA9IGttYWxsb2Nfb2JqKCphcGVyKTtcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmMtODY1LVx0aWYgKGFwZXIgPT0gTlVMTCkgcmV0dXJuIC1FTk9NRU07XG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYz0xMDE5PW1hcnZlbF9hZ3BfaW5mbyh2b2lkKVxuLS1cbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmMtMTA2MS1cdCAqL1xuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYzoxMDYyOlx0YWdwID0ga21hbGxvY19vYmooKmFncCk7XG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jLTEwNjMtXHRpZiAoIWFncClcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX3RpdGFuLmM9NTkwPXRpdGFuX2FncF9zZXR1cChhbHBoYV9hZ3BfaW5mbyAqYWdwKVxuLS1cbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfdGl0YW4uYy01OTYtXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX3RpdGFuLmM6NTk3Olx0YXBlciA9IGttYWxsb2Nfb2JqKHN0cnVjdCB0aXRhbl9hZ3BfYXBlcnR1cmUpO1xuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV90aXRhbi5jLTU5OC1cdGlmIChhcGVyID09IE5VTEwpXG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV90aXRhbi5jPTczMT10aXRhbl9hZ3BfaW5mbyh2b2lkKVxuLS1cbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfdGl0YW4uYy03NjItXHQgKi9cbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfdGl0YW4uYzo3NjM6XHRhZ3AgPSBrbWFsbG9jX29iaigqYWdwKTtcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfdGl0YW4uYy03NjQtXHRpZiAoIWFncClcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9tb2R1bGUuYz0yOT1wcm9jZXNzX3JlbG9jX2Zvcl9nb3QoRWxmNjRfUmVsYSAqcmVsYSxcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9tb2R1bGUuYy00OC1cbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jOjQ5Olx0ZyA9IGttYWxsb2Nfb2JqKCpnKTtcbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jLTUwLVx0Zy1cdTAwM2VuZXh0ID0gY2hhaW5zW3Jfc3ltXS5uZXh0O1xuLS1cbmFyY2gvYWxwaGEva2VybmVsL3BjaS5jPTIxMT1zdGF0aWMgdm9pZCBwZGV2X3NhdmVfc3JtX2NvbmZpZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuLS1cbmFyY2gvYWxwaGEva2VybmVsL3BjaS5jLTIyMy1cbmFyY2gvYWxwaGEva2VybmVsL3BjaS5jOjIyNDpcdHRtcCA9IGttYWxsb2Nfb2JqKCp0bXApO1xuYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmMtMjI1LVx0aWYgKCF0bXApIHtcbi0tXG5hcmNoL2FyYy9rZXJuZWwvdW53aW5kLmM9MzU5PXZvaWQgKnVud2luZF9hZGRfdGFibGUoc3RydWN0IG1vZHVsZSAqbW9kdWxlLCBjb25zdCB2b2lkICp0YWJsZV9zdGFydCxcbi0tXG5hcmNoL2FyYy9rZXJuZWwvdW53aW5kLmMtMzY4LVxuYXJjaC9hcmMva2VybmVsL3Vud2luZC5jOjM2OTpcdHRhYmxlID0ga21hbGxvY19vYmooKnRhYmxlKTtcbmFyY2gvYXJjL2tlcm5lbC91bndpbmQuYy0zNzAtXHRpZiAoIXRhYmxlKVxuLS1cbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYz0yNzQ9c3RhdGljIGludCBsb2NvbW9fc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSlcbi0tXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmMtMjc5LVxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jOjI4MDpcdHNhdmUgPSBrbWFsbG9jX29iaihzdHJ1Y3QgbG9jb21vX3NhdmVfZGF0YSk7XG5hcmNoL2FybS9jb21tb24vbG9jb21vLmMtMjgxLVx0aWYgKCFzYXZlKVxuLS1cbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYz05NjQ9c3RhdGljIGludCBzYTExMTFfc3VzcGVuZF9ub2lycShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jLTk3MS1cbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYzo5NzI6XHRzYXZlID0ga21hbGxvY19vYmooc3RydWN0IHNhMTExMV9zYXZlX2RhdGEpO1xuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jLTk3My1cdGlmICghc2F2ZSlcbi0tXG5hcmNoL2FybS9rZXJuZWwvdW53aW5kLmM9NTcyPXN0cnVjdCB1bndpbmRfdGFibGUgKnVud2luZF90YWJsZV9hZGQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplLFxuLS1cbmFyY2gvYXJtL2tlcm5lbC91bndpbmQuYy01NzYtXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuYXJjaC9hcm0va2VybmVsL3Vud2luZC5jOjU3NzpcdHN0cnVjdCB1bndpbmRfdGFibGUgKnRhYiA9IGttYWxsb2Nfb2JqKCp0YWIpO1xuYXJjaC9hcm0va2VybmVsL3Vud2luZC5jLTU3OC1cbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtaW9tbXUuYz01Mz1zdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluICpfZ2V0X3B3cmRtKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtaW9tbXUuYy0xMDEtXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtaW9tbXUuYzoxMDI6XHRlbnRyeSA9IGttYWxsb2Nfb2JqKCplbnRyeSk7XG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtaW9tbXUuYy0xMDMtXHRpZiAoZW50cnkpIHtcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzR4eC5jPTQwNj1zdGF0aWMgaW50IF9faW5pdCBwd3JkbXNfc2V0dXAoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdm9pZCAqdW51c2VkKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmMtNDEyLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYzo0MTM6XHRwd3JzdCA9IGttYWxsb2Nfb2JqKHN0cnVjdCBwb3dlcl9zdGF0ZSwgR0ZQX0FUT01JQyk7XG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzR4eC5jLTQxNC1cdGlmICghcHdyc3QpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTQ0eHguYz0xMTM9c3RhdGljIGludCBfX2luaXQgcHdyZG1zX3NldHVwKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHZvaWQgKnVudXNlZClcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtNDR4eC5jLTEzNC1cbmFyY2gvYXJtL21hY2gtb21hcDIvcG00NHh4LmM6MTM1Olx0cHdyc3QgPSBrbWFsbG9jX29iaihzdHJ1Y3QgcG93ZXJfc3RhdGUsIEdGUF9BVE9NSUMpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTQ0eHguYy0xMzYtXHRpZiAoIXB3cnN0KVxuLS1cbmFyY2gvYXJtL21tL3BnZC5jLTE5LSNpZmRlZiBDT05GSUdfQVJNX0xQQUVcbmFyY2gvYXJtL21tL3BnZC5jOjIwOiNkZWZpbmUgX3BnZF9hbGxvYyhtbSlcdFx0a21hbGxvY19vYmpzKHBnZF90LCBQVFJTX1BFUl9QR0QsIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKVxuYXJjaC9hcm0vbW0vcGdkLmMtMjEtI2RlZmluZSBfcGdkX2ZyZWUobW0sIHBnZClcdGtmcmVlKHBnZClcbi0tXG5hcmNoL2FybS9wcm9iZXMva3Byb2Jlcy90ZXN0LWNvcmUuYz03NjQ9c3RhdGljIGludCBjb3ZlcmFnZV9zdGFydChjb25zdCB1bmlvbiBkZWNvZGVfaXRlbSAqdGFibGUpXG5hcmNoL2FybS9wcm9iZXMva3Byb2Jlcy90ZXN0LWNvcmUuYy03NjUte1xuYXJjaC9hcm0vcHJvYmVzL2twcm9iZXMvdGVzdC1jb3JlLmM6NzY2Olx0Y292ZXJhZ2UuYmFzZSA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgY292ZXJhZ2VfZW50cnksXG5hcmNoL2FybS9wcm9iZXMva3Byb2Jlcy90ZXN0LWNvcmUuYy03NjctXHRcdFx0XHQgICAgIE1BWF9DT1ZFUkFHRV9FTlRSSUVTKTtcbi0tXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jPTc3ND12b2lkIGt2bV9ob3N0X3BtdV9pbml0KHN0cnVjdCBhcm1fcG11ICpwbXUpXG4tLVxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYy03ODYtXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jOjc4NzpcdGVudHJ5ID0ga21hbGxvY19vYmooKmVudHJ5KTtcbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMtNzg4LVx0aWYgKCFlbnRyeSlcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtZGVidWcuYz0xMDI9c3RhdGljIHZvaWQgKnZnaWNfZGVidWdfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzLCBsb2ZmX3QgKnBvcylcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtZGVidWcuYy0xMDYtXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtZGVidWcuYzoxMDc6XHRpdGVyID0ga21hbGxvY19vYmooKml0ZXIpO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWRlYnVnLmMtMTA4LVx0aWYgKCFpdGVyKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1kZWJ1Zy5jPTM2ND1zdGF0aWMgdm9pZCAqdmdpY19pdHNfZGVidWdfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzLCBsb2ZmX3QgKnBvcylcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtZGVidWcuYy0zNzctXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtZGVidWcuYzozNzg6XHRpdGVyID0ga21hbGxvY19vYmooKml0ZXIpO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWRlYnVnLmMtMzc5LVx0aWYgKCFpdGVyKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM9NzQzPXZvaWQgX19pbml0IHZnaWNfc2V0X2t2bV9pbmZvKGNvbnN0IHN0cnVjdCBnaWNfa3ZtX2luZm8gKmluZm8pXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy03NDUtXHRCVUdfT04oZ2ljX2t2bV9pbmZvICE9IE5VTEwpO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYzo3NDY6XHRnaWNfa3ZtX2luZm8gPSBrbWFsbG9jX29iaigqZ2ljX2t2bV9pbmZvKTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMtNzQ3LVx0aWYgKGdpY19rdm1faW5mbylcbi0tXG5hcmNoL202OGsvZW11L25mYmxvY2suYz05Nz1zdGF0aWMgaW50IF9faW5pdCBuZmhkX2luaXRfb25lKGludCBpZCwgdTMyIGJsb2NrcywgdTMyIGJzaXplKVxuLS1cbmFyY2gvbTY4ay9lbXUvbmZibG9jay5jLTExNC1cbmFyY2gvbTY4ay9lbXUvbmZibG9jay5jOjExNTpcdGRldiA9IGttYWxsb2Nfb2JqKHN0cnVjdCBuZmhkX2RldmljZSk7XG5hcmNoL202OGsvZW11L25mYmxvY2suYy0xMTYtXHRpZiAoIWRldilcbi0tXG5hcmNoL202OGsvbW0va21hcC5jPTEwOD1zdGF0aWMgc3RydWN0IHZtX3N0cnVjdCAqZ2V0X2lvX2FyZWEodW5zaWduZWQgbG9uZyBzaXplKVxuLS1cbmFyY2gvbTY4ay9tbS9rbWFwLmMtMTEyLVxuYXJjaC9tNjhrL21tL2ttYXAuYzoxMTM6XHRhcmVhID0ga21hbGxvY19vYmooKmFyZWEpO1xuYXJjaC9tNjhrL21tL2ttYXAuYy0xMTQtXHRpZiAoIWFyZWEpXG4tLVxuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmM9MjUzPXUzMiBhdTF4eHhfZGJkbWFfY2hhbl9hbGxvYyh1MzIgc3JjaWQsIHUzMiBkZXN0aWQsXG4tLVxuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmMtMzEyLVx0XHRcdCAqL1xuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmM6MzEzOlx0XHRcdGN0cCA9IGttYWxsb2Nfb2JqKGNoYW5fdGFiX3QsIEdGUF9BVE9NSUMpO1xuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmMtMzE0LVx0XHRcdGNoYW5fdGFiX3B0cltpXSA9IGN0cDtcbi0tXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYz0zOTE9dTMyIGF1MXh4eF9kYmRtYV9yaW5nX2FsbG9jKHUzMiBjaGFuaWQsIGludCBlbnRyaWVzKVxuLS1cbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jLTQxNC1cdCAqL1xuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmM6NDE1Olx0ZGVzY19iYXNlID0gKHUzMikga21hbGxvY19vYmpzKGF1MXhfZGRtYV9kZXNjX3QsIGVudHJpZXMsXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYy00MTYtXHRcdFx0XHQgICAgICAgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xuLS1cbmFyY2gvbWlwcy9rZXJuZWwvbW9kdWxlLmM9NTk9c3RhdGljIGludCBhcHBseV9yX21pcHNfaGkxNihzdHJ1Y3QgbW9kdWxlICptZSwgdTMyICpsb2NhdGlvbiwgRWxmX0FkZHIgdixcbi0tXG5hcmNoL21pcHMva2VybmVsL21vZHVsZS5jLTc0LVx0ICovXG5hcmNoL21pcHMva2VybmVsL21vZHVsZS5jOjc1Olx0biA9IGttYWxsb2Nfb2JqKCpuKTtcbmFyY2gvbWlwcy9rZXJuZWwvbW9kdWxlLmMtNzYtXHRpZiAoIW4pXG4tLVxuYXJjaC9taXBzL2tlcm5lbC92cGUuYz0zMTE9c3RhdGljIGludCBhcHBseV9yX21pcHNfaGkxNihzdHJ1Y3QgbW9kdWxlICptZSwgdWludDMyX3QgKmxvY2F0aW9uLFxuLS1cbmFyY2gvbWlwcy9rZXJuZWwvdnBlLmMtMzIwLVx0ICovXG5hcmNoL21pcHMva2VybmVsL3ZwZS5jOjMyMTpcdG4gPSBrbWFsbG9jX29iaigqbik7XG5hcmNoL21pcHMva2VybmVsL3ZwZS5jLTMyMi1cdGlmICghbilcbi0tXG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmM9MTg4PXBhdF9xdWVyeV9tb2R1bGUodWxvbmcgcGNlbGxfbG9jLCB1bG9uZyBtb2RfaW5kZXgpXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jLTE5NS1cbmFyY2gvcGFyaXNjL2tlcm5lbC9pbnZlbnRvcnkuYzoxOTY6XHRwYV9wZGNfY2VsbCA9IGttYWxsb2Nfb2JqKCpwYV9wZGNfY2VsbCk7XG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmMtMTk3LVx0aWYgKCFwYV9wZGNfY2VsbClcbi0tXG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmM9NTMyPWFkZF9zeXN0ZW1fbWFwX2FkZHJlc3NlcyhzdHJ1Y3QgcGFyaXNjX2RldmljZSAqZGV2LCBpbnQgbnVtX2FkZHJzLCBcbi0tXG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmMtNTM4LVxuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jOjUzOTpcdGRldi1cdTAwM2VhZGRyID0ga21hbGxvY19vYmpzKCpkZXYtXHUwMDNlYWRkciwgbnVtX2FkZHJzKTtcbmFyY2gvcGFyaXNjL2tlcm5lbC9pbnZlbnRvcnkuYy01NDAtXHRpZighZGV2LVx1MDAzZWFkZHIpIHtcbi0tXG5hcmNoL3BhcmlzYy9rZXJuZWwvcHJvY2Vzc29yLmM9ODE9c3RhdGljIGludCBfX2luaXQgcHJvY2Vzc29yX3Byb2JlKHN0cnVjdCBwYXJpc2NfZGV2aWNlICpkZXYpXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3Nvci5jLTExMi1cbmFyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzb3IuYzoxMTM6XHRcdHBhX3BkY19jZWxsID0ga21hbGxvY19vYmooKnBhX3BkY19jZWxsKTtcbmFyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzb3IuYy0xMTQtXHRcdGlmICghcGFfcGRjX2NlbGwpXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jPTE0OT11bndpbmRfdGFibGVfYWRkKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgYmFzZV9hZGRyLCBcbi0tXG5hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmMtMTU5LVxuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jOjE2MDpcdHRhYmxlID0ga21hbGxvY19vYmooc3RydWN0IHVud2luZF90YWJsZSwgR0ZQX1VTRVIpO1xuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jLTE2MS1cdGlmICh0YWJsZSA9PSBOVUxMKVxuLS1cbmFyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYz00MDY9dm9pZCB1bndpbmRfZnJhbWVfaW5pdF9mcm9tX2Jsb2NrZWRfdGFzayhzdHJ1Y3QgdW53aW5kX2ZyYW1lX2luZm8gKmluZm8sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdClcbi0tXG5hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmMtNDEwLVxuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jOjQxMTpcdHIyID0ga21hbGxvY19vYmooc3RydWN0IHB0X3JlZ3MsIEdGUF9BVE9NSUMpO1xuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jLTQxMi1cdGlmICghcjIpXG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9udnJhbV82NC5jPTk4ND1pbnQgX19pbml0IG52cmFtX3NjYW5fcGFydGl0aW9ucyh2b2lkKVxuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvbnZyYW1fNjQuYy0xMDMyLVx0XHR9XG5hcmNoL3Bvd2VycGMva2VybmVsL252cmFtXzY0LmM6MTAzMzpcdFx0dG1wX3BhcnQgPSBrbWFsbG9jX29iaigqdG1wX3BhcnQpO1xuYXJjaC9wb3dlcnBjL2tlcm5lbC9udnJhbV82NC5jLTEwMzQtXHRcdGVyciA9IC1FTk9NRU07XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jPTczMT1pbnQga3ZtX3ZjcHVfaW9jdGxfY29uZmlnX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jLTc3NC1cdFx0ICAgIGNmZy1cdTAwM2VhcnJheSAvIFBBR0VfU0laRTtcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYzo3NzU6XHRwYWdlcyA9IGttYWxsb2Nfb2JqcygqcGFnZXMsIG51bV9wYWdlcyk7XG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmMtNzc2LVx0aWYgKCFwYWdlcylcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmM9ODk4PWludCBrdm1wcGNfZTUwMF90bGJfaW5pdChzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYy05MTQtXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmM6OTE1Olx0dmNwdV9lNTAwLVx1MDAzZWd0bGJfYXJjaCA9IGttYWxsb2Nfb2JqcygqdmNwdV9lNTAwLVx1MDAzZWd0bGJfYXJjaCxcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYy05MTYtXHRcdFx0XHRcdCAgICBLVk1fRTUwMF9UTEIwX1NJWkUgJiM0MzsgS1ZNX0U1MDBfVExCMV9TSVpFKTtcbi0tXG5hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmM9NDU9c3RhdGljIGludCBncm93KHJoX2luZm9fdCAqIGluZm8sIGludCBtYXhfYmxvY2tzKVxuLS1cbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYy01Ni1cbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYzo1NzpcdGJsb2NrID0ga21hbGxvY19vYmpzKHJoX2Jsb2NrX3QsIG1heF9ibG9ja3MsIEdGUF9BVE9NSUMpO1xuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jLTU4LVx0aWYgKGJsb2NrID09IE5VTEwpXG4tLVxuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jPTI1Mz1yaF9pbmZvX3QgKnJoX2NyZWF0ZSh1bnNpZ25lZCBpbnQgYWxpZ25tZW50KVxuLS1cbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYy0yNjAtXG5hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmM6MjYxOlx0aW5mbyA9IGttYWxsb2Nfb2JqKCppbmZvLCBHRlBfQVRPTUlDKTtcbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYy0yNjItXHRpZiAoaW5mbyA9PSBOVUxMKVxuLS1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9tbXVfY29udGV4dC5jPTk1PXN0YXRpYyBpbnQgaGFzaF9faW5pdF9uZXdfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvbW11X2NvbnRleHQuYy05OC1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9tbXVfY29udGV4dC5jOjk5Olx0bW0tXHUwMDNlY29udGV4dC5oYXNoX2NvbnRleHQgPSBrbWFsbG9jX29iaihzdHJ1Y3QgaGFzaF9tbV9jb250ZXh0KTtcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9tbXVfY29udGV4dC5jLTEwMC1cdGlmICghbW0tXHUwMDNlY29udGV4dC5oYXNoX2NvbnRleHQpXG4tLVxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L21tdV9jb250ZXh0LmMtMTI1LVx0XHRpZiAoY3VycmVudC1cdTAwM2VtbS1cdTAwM2Vjb250ZXh0Lmhhc2hfY29udGV4dC1cdTAwM2VzcHQpIHtcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9tbXVfY29udGV4dC5jOjEyNjpcdFx0XHRtbS1cdTAwM2Vjb250ZXh0Lmhhc2hfY29udGV4dC1cdTAwM2VzcHQgPSBrbWFsbG9jX29iaihzdHJ1Y3Qgc3VicGFnZV9wcm90X3RhYmxlKTtcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9tbXVfY29udGV4dC5jLTEyNy1cdFx0XHRpZiAoIW1tLVx1MDAzZWNvbnRleHQuaGFzaF9jb250ZXh0LVx1MDAzZXNwdCkge1xuLS1cbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYz02MjM9c3RhdGljIGludCBldmVudF91bmlxX2FkZChzdHJ1Y3QgcmJfcm9vdCAqcm9vdCwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5sLFxuLS1cbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy02NTAtXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmM6NjUxOlx0ZGF0YSA9IGttYWxsb2Nfb2JqKCpkYXRhKTtcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy02NTItXHRpZiAoIWRhdGEpXG4tLVxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jPTc1NT1zdGF0aWMgaW50IGNyZWF0ZV9ldmVudHNfZnJvbV9jYXRhbG9nKHN0cnVjdCBhdHRyaWJ1dGUgKioqZXZlbnRzXyxcbi0tXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtOTA4LVxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jOjkwOTpcdGV2ZW50cyA9IGttYWxsb2Nfb2JqcygqZXZlbnRzLCBhdHRyX21heCAmIzQzOyAxKTtcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MTAtXHRpZiAoIWV2ZW50cykge1xuLS1cbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MTQtXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmM6OTE1Olx0ZXZlbnRfZGVzY3MgPSBrbWFsbG9jX29ianMoKmV2ZW50X2Rlc2NzLCBldmVudF9pZHggJiM0MzsgMSk7XG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtOTE2LVx0aWYgKCFldmVudF9kZXNjcykge1xuLS1cbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MjAtXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmM6OTIxOlx0ZXZlbnRfbG9uZ19kZXNjcyA9IGttYWxsb2Nfb2JqcygqZXZlbnRfbG9uZ19kZXNjcywgZXZlbnRfaWR4ICYjNDM7IDEpO1xuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jLTkyMi1cdGlmICghZXZlbnRfbG9uZ19kZXNjcykge1xuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2hzdGFfbXNpLmM9MTIyPXN0YXRpYyBpbnQgaHN0YV9tc2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9oc3RhX21zaS5jLTE1My1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2hzdGFfbXNpLmM6MTU0Olx0cHBjNHh4X2hzdGFfbXNpLmlycV9tYXAgPSBrbWFsbG9jX29ianMoaW50LCBpcnFfY291bnQpO1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvaHN0YV9tc2kuYy0xNTUtXHRpZiAoIXBwYzR4eF9oc3RhX21zaS5pcnFfbWFwKSB7XG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYz00ND1zdGF0aWMgaW50IHNwdWZzX2F0dHJfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jLTQ5LVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYzo1MDpcdGF0dHIgPSBrbWFsbG9jX29iaigqYXR0cik7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jLTUxLVx0aWYgKCFhdHRyKVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9kbHBhci5jPTYyOD12b2lkIHF1ZXVlX2hvdHBsdWdfZXZlbnQoc3RydWN0IHBzZXJpZXNfaHBfZXJyb3Jsb2cgKmhwX2VycmxvZylcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZGxwYXIuYy02MzYtXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZGxwYXIuYzo2Mzc6XHR3b3JrID0ga21hbGxvY19vYmooc3RydWN0IHBzZXJpZXNfaHBfd29yaywgR0ZQX0FUT01JQyk7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZGxwYXIuYy02MzgtXHRpZiAod29yaykge1xuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odmNzZXJ2ZXIuYz0xMTk9aW50IGh2Y3NfZ2V0X3BhcnRuZXJfaW5mbyh1aW50MzJfdCB1bml0X2FkZHJlc3MsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2h2Y3NlcnZlci5jLTE2Mi1cdFx0ICogaHZjc19mcmVlX3BhcnRuZXJfaW5mbygpLiAqL1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2h2Y3NlcnZlci5jOjE2MzpcdFx0bmV4dF9wYXJ0bmVyX2luZm8gPSBrbWFsbG9jX29iaihzdHJ1Y3QgaHZjc19wYXJ0bmVyX2luZm8sXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZjc2VydmVyLmMtMTY0LVx0XHRcdFx0XHRcdEdGUF9BVE9NSUMpO1xuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyY2ZnLmM9MTQ0PXN0YXRpYyB2b2lkIHNob3dfZ3BjaV9kYXRhKHN0cnVjdCBzZXFfZmlsZSAqbSlcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbHBhcmNmZy5jLTE0OS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyY2ZnLmM6MTUwOlx0YnVmID0ga21hbGxvY19vYmooKmJ1Zik7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbHBhcmNmZy5jLTE1MS1cdGlmIChidWYgPT0gTlVMTClcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbXNpLmM9NDM1PXN0YXRpYyBpbnQgcHNlcmllc19tc2lfb3BzX3ByZXBhcmUoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwgc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9tc2kuYy00NDMtXHRzdHJ1Y3QgcHNlcmllc19tc2lfZGV2aWNlICpwc2VyaWVzX2RldiBfX2ZyZWUoa2ZyZWUpXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbXNpLmM6NDQ0Olx0XHQ9IGttYWxsb2Nfb2JqKCpwc2VyaWVzX2Rldik7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbXNpLmMtNDQ1LVx0aWYgKCFwc2VyaWVzX2Rldilcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpLmM9MTIwPXN0YXRpYyBpbnQgcHNlcmllc19wY2lfc3Jpb3ZfZW5hYmxlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1MTYgbnVtX3Zmcylcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpLmMtMTQzLVx0cGRuID0gcGNpX2dldF9wZG4ocGRldik7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpLmM6MTQ0Olx0cGRuLVx1MDAzZXBlX251bV9tYXAgPSBrbWFsbG9jX29ianMoKnBkbi1cdTAwM2VwZV9udW1fbWFwLCBudW1fdmZzKTtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wY2kuYy0xNDUtXHRpZiAoIXBkbi1cdTAwM2VwZV9udW1fbWFwKVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92YXMuYz0xMDc2PXN0YXRpYyBpbnQgX19pbml0IHBzZXJpZXNfdmFzX2luaXQodm9pZClcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvdmFzLmMtMTA4OS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92YXMuYzoxMDkwOlx0aHZfY2FwcyA9IGttYWxsb2Nfb2JqKCpodl9jYXBzKTtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92YXMuYy0xMDkxLVx0aWYgKCFodl9jYXBzKVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92aW8uYz03MDU9c3RhdGljIGludCB2aW9fY21vX2J1c19wcm9iZShzdHJ1Y3QgdmlvX2RldiAqdmlvZGV2KVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92aW8uYy03NDctXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvdmlvLmM6NzQ4Olx0XHRkZXZfZW50ID0ga21hbGxvY19vYmooc3RydWN0IHZpb19jbW9fZGV2X2VudHJ5KTtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92aW8uYy03NDktXHRcdGlmICghZGV2X2VudClcbi0tXG5hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9sYmMuYz0zNTI9c3RhdGljIGludCBmc2xfbGJjX3N5c2NvcmVfc3VzcGVuZCh2b2lkICpkYXRhKVxuLS1cbmFyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX2xiYy5jLTM2NC1cbmFyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX2xiYy5jOjM2NTpcdGN0cmwtXHUwMDNlc2F2ZWRfcmVncyA9IGttYWxsb2Nfb2JqKHN0cnVjdCBmc2xfbGJjX3JlZ3MpO1xuYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfbGJjLmMtMzY2LVx0aWYgKCFjdHJsLVx1MDAzZXNhdmVkX3JlZ3MpXG4tLVxuYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmM9MTU0OT12b2lkIF9faW5pdCBtcGljX2luaXQoc3RydWN0IG1waWMgKm1waWMpXG4tLVxuYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMtMTY0MS1cdC8qIGFsbG9jYXRlIG1lbW9yeSB0byBzYXZlIG1waWMgc3RhdGUgKi9cbmFyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jOjE2NDI6XHRtcGljLVx1MDAzZXNhdmVfZGF0YSA9IGttYWxsb2Nfb2JqcygqbXBpYy1cdTAwM2VzYXZlX2RhdGEsIG1waWMtXHUwMDNlbnVtX3NvdXJjZXMpO1xuYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMtMTY0My1cdEJVR19PTihtcGljLVx1MDAzZXNhdmVfZGF0YSA9PSBOVUxMKTtcbi0tXG5hcmNoL3Bvd2VycGMvc3lzZGV2L29mX3J0Yy5jPTIzPXZvaWQgX19pbml0IG9mX2luc3RhbnRpYXRlX3J0Yyh2b2lkKVxuLS1cbmFyY2gvcG93ZXJwYy9zeXNkZXYvb2ZfcnRjLmMtMzUtXG5hcmNoL3Bvd2VycGMvc3lzZGV2L29mX3J0Yy5jOjM2Olx0XHRcdHJlcyA9IGttYWxsb2Nfb2JqKCpyZXMpO1xuYXJjaC9wb3dlcnBjL3N5c2Rldi9vZl9ydGMuYy0zNy1cdFx0XHRpZiAoIXJlcykge1xuLS1cbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jPTY1ND1zdGF0aWMgaW50IGFkZF9yZWxvY2F0aW9uX3RvX2FjY3VtdWxhdGUoc3RydWN0IG1vZHVsZSAqbWUsIGludCB0eXBlLFxuLS1cbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jLTY2NS1cbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jOjY2NjpcdGVudHJ5ID0ga21hbGxvY19vYmooKmVudHJ5KTtcbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jLTY2Ny1cbi0tXG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUuYy02OTktXHRpZiAoIWZvdW5kKSB7XG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUuYzo3MDA6XHRcdHJlbF9oZWFkID0ga21hbGxvY19vYmooKnJlbF9oZWFkKTtcbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jLTcwMS1cbi0tXG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUuYy03MTEtXHRcdFx0YnVja2V0ID1cbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jOjcxMjpcdFx0XHRcdGttYWxsb2Nfb2JqKHN0cnVjdCB1c2VkX2J1Y2tldCk7XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQwMTAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtlcm5lbCBNZW1vcnkgQWxsb2NhdGlvbiBhbmQgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgbmV3IGBrbWFsbG9jX29iamAgbWFjcm8gaW4gdGhlIGtlcm5lbCDigJMgc2VlbXMgbGlrZSBpdCYjMzk7cyBtZWFudCB0byBjbGVhbiB1cCBjb2RlIGJ5IHJlcGxhY2luZyB0aGUgbW9yZSB2ZXJib3NlIGBrbWFsbG9jKHNpemVvZigqcHRyKSwgLi4uKWAuIE15IGluaXRpYWwgdGhvdWdodCB3YXMsIGhtbSwgaXQmIzM5O3MgYGttYWxsb2Nfb2JqKCp1dl9saXN0KWAsIG9yIG1heWJl4oCmIG5vLCB3YWl0LCBpdCYjMzk7cyBkZWZpbml0ZWx5IGBrbWFsbG9jX29iaigqcHRyKWAuIEkgbmVlZCB0byByZW1lbWJlciB0aGF0LiBBaCwgcmlnaHQsIHNvIGB1dl9saXN0ID0ga21hbGxvY19vYmooKnV2X2xpc3QpO2AgaXMgcmVhbGx5IGp1c3QgYSBzaG9ydGhhbmQgZm9yIHNvbWV0aGluZyBsaWtlIGB1dl9saXN0ID0ga21hbGxvYyhzaXplb2YoKnV2X2xpc3QpLCBHRlBfS0VSTkVMKTtgLgoKTm93LCB0aGUgaW1wb3J0YW50IHRoaW5nIGhlcmUgaXMgdGhhdCBga21hbGxvY2AgKmRvZXNuJiMzOTt0KiB6ZXJvIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LiBUaGF0JiMzOTtzIGBremFsbG9jYCYjMzk7cyBqb2IuIFRoaXMgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50IGluIGp1c3QgYSBiaXQuCgpPa2F5LCBsZXQmIzM5O3MgbG9vayBhdCBgZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmNgLiBTcGVjaWZpY2FsbHksIGF0IHRoZSBgZ2V0X3NlY3JldF9tZXRhZGF0YWAgZnVuY3Rpb24uIEhlcmUsIEkgc2VlIHRoYXQgYHV2X2xpc3RgIGlzIHplcm9lZCAqYmVmb3JlKiBjYWxsaW5nIGB1dl9maW5kX3NlY3JldGAgd2l0aCBgbWVtc2V0KHV2X2xpc3QsIDAsIHNpemVvZigqdXZfbGlzdCkpO2AuIFRoaXMgbWVhbnMgdGhhdCBgdXZfbGlzdGAgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHdlIGV2ZW4gZ2V0IHRvIHRoYXQgZnVuY3Rpb24hCgpIbW0sIHRoYXQgYWxsIHNlZW1zIGNvcnJlY3QuIE5vdywgSSBoYXZlIHRvIHdvbmRlciBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBgdXZpb19nZXRfbGlzdGAgaW4gYGRyaXZlcnMvczM5MC9jaGFyL3V2ZGV2aWNlLmNgLiBUaGF0JiMzOTtzIHRoZSBuZXh0IHBsYWNlIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzA3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMDc6XHRzdGF0aWMgaW50IHV2aW9fZ2V0X2xpc3Qodm9pZCAqenBhZ2UsIHN0cnVjdCB1dmlvX2lvY3RsX2NiICp1dl9pb2N0bClcbiAzMDg6XHR7XG4gMzA5Olx0XHRjb25zdCBzaXplX3QgZGF0YV9vZmYgPSBvZmZzZXRvZihzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QsIHNlY3JldHMpO1xuIDMxMDpcdFx0dTggX191c2VyICp1c2VyX2J1ZiA9ICh1OCBfX3VzZXIgKil1dl9pb2N0bC1cdTAwM2Vhcmd1bWVudF9hZGRyO1xuIDMxMTpcdFx0c3RydWN0IHV2X3NlY3JldF9saXN0ICpsaXN0ID0genBhZ2U7XG4gMzEyOlx0XHR1MTYgbnVtX3NlY3JldHNfc3RvcmVkID0gMDtcbiAzMTM6XHRcdHNpemVfdCB1c2VyX29mZiA9IGRhdGFfb2ZmO1xuIDMxNDpcdFx0c2l6ZV90IGNvcHlfbGVuO1xuIDMxNTpcdFxuIDMxNjpcdFx0ZG8ge1xuIDMxNzpcdFx0XHR1dl9saXN0X3NlY3JldHMobGlzdCwgbGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHgsIFx1MDAyNnV2X2lvY3RsLVx1MDAzZXV2X3JjLFxuIDMxODpcdFx0XHRcdFx0XHUwMDI2dXZfaW9jdGwtXHUwMDNldXZfcnJjKTtcbiAzMTk6XHRcdFx0aWYgKHV2X2lvY3RsLVx1MDAzZXV2X3JjICE9IFVWQ19SQ19FWEVDVVRFRCBcdTAwMjZcdTAwMjZcbiAzMjA6XHRcdFx0ICAgIHV2X2lvY3RsLVx1MDAzZXV2X3JjICE9IFVWQ19SQ19NT1JFX0RBVEEpXG4gMzIxOlx0XHRcdFx0YnJlYWs7XG4gMzIyOlx0XG4gMzIzOlx0XHRcdGNvcHlfbGVuID0gc2l6ZW9mKGxpc3QtXHUwMDNlc2VjcmV0c1swXSkgKiBsaXN0LVx1MDAzZW51bV9zZWNyX3N0b3JlZDtcbiAzMjQ6XHRcdFx0aWYgKGNvcHlfdG9fdXNlcih1c2VyX2J1ZiAmIzQzOyB1c2VyX29mZiwgbGlzdC1cdTAwM2VzZWNyZXRzLCBjb3B5X2xlbikpXG4gMzI1Olx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gMzI2Olx0XG4gMzI3Olx0XHRcdHVzZXJfb2ZmICYjNDM7PSBjb3B5X2xlbjtcbiAzMjg6XHRcdFx0bnVtX3NlY3JldHNfc3RvcmVkICYjNDM7PSBsaXN0LVx1MDAzZW51bV9zZWNyX3N0b3JlZDtcbiAzMjk6XHRcdH0gd2hpbGUgKHV2X2lvY3RsLVx1MDAzZXV2X3JjID09IFVWQ19SQ19NT1JFX0RBVEEgXHUwMDI2XHUwMDI2XG4gMzMwOlx0XHRcdCB1c2VyX29mZiAmIzQzOyBzaXplb2YoKmxpc3QpIFx1MDAzYz0gdXZfaW9jdGwtXHUwMDNlYXJndW1lbnRfbGVuKTtcbiAzMzE6XHRcbiAzMzI6XHRcdGxpc3QtXHUwMDNlbnVtX3NlY3Jfc3RvcmVkID0gbnVtX3NlY3JldHNfc3RvcmVkO1xuIDMzMzpcdFx0aWYgKGNvcHlfdG9fdXNlcih1c2VyX2J1ZiwgbGlzdCwgZGF0YV9vZmYpKVxuIDMzNDpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiAzMzU6XHRcdHJldHVybiAwO1xuIDMzNjpcdH1cbiAzMzc6XHRcbiAzMzg6XHQvKipcbiAzMzk6XHQgKiB1dmlvX2xpc3Rfc2VjcmV0cygpIC0gUGVyZm9ybSBhIExpc3QgU2VjcmV0IFVWQ1xuIDM0MDpcdCAqXG4gMzQxOlx0ICogQHV2X2lvY3RsOiBpb2N0bCBjb250cm9sIGJsb2NrXG4gMzQyOlx0ICpcbiAzNDM6XHQgKiB1dmlvX2xpc3Rfc2VjcmV0cygpIHBlcmZvcm1zIHRoZSBMaXN0IFNlY3JldCBVbHRyYXZpc29yIENhbGwuIEl0IHZlcmlmaWVzXG4gMzQ0Olx0ICogdGhhdCB0aGUgZ2l2ZW4gdXNlcnNwYWNlIGFyZ3VtZW50IGFkZHJlc3MgaXMgdmFsaWQgYW5kIGl0cyBzaXplIGlzIHNhbmUuXG4gMzQ1Olx0ICogRXZlcnkgb3RoZXIgY2hlY2sgaXMgbWFkZSBieSB0aGUgVWx0cmF2aXNvciAoVVYpIGFuZCB3b24mIzM5O3QgcmVzdWx0IGluIGFcbiAzNDY6XHQgKiBuZWdhdGl2ZSByZXR1cm4gdmFsdWUuIEl0IGJ1aWxkcyB0aGUgcmVxdWVzdCwgcGVyZm9ybXMgdGhlIFVWLWNhbGwsIGFuZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTQ5NQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIHRoZSBNZW1vcnkgQWxsb2NhdGlvbiBhbmQgVXNhZ2UgaW4gYHV2aW9fZ2V0X2xpc3RgKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGB1dmlvX2dldF9saXN0YCBmdW5jdGlvbi4gSSBzZWUgdGhhdCBgenBhZ2VgIGlzIGJlaW5nIHBhc3NlZCBpbiBhcyBhIGBsaXN0YC4gTm93LCBgenBhZ2VgLCBmcm9tIHdoYXQgSSByZWNhbGwgb2YgdGhlIGNvZGViYXNlLCBpcyBhIGNodW5rIG9mIG1lbW9yeSwgYSBwYWdlIHNwZWNpZmljYWxseS4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiBJcyB0aGlzIG1lbW9yeSBndWFyYW50ZWVkIHRvIGJlIGluaXRpYWxpemVkLCBvciBpcyBpdCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkLCBob2xkaW5nIGdhcmJhZ2UgZGF0YT8gVGhpcyBpcyBjcnVjaWFsIGZvciBhdm9pZGluZyB1bmV4cGVjdGVkIGJlaGF2aW9yIGRvd24gdGhlIGxpbmUsIHBvdGVudGlhbGx5IHNlY3VyaXR5IGlzc3Vlcywgb3Igc2ltcGx5IGRhdGEgY29ycnVwdGlvbiBpZiB0aGUgY29kZSByZWxpZXMgb24gYSB6ZXJvZWQgcGFnZS4gSSByZWFsbHkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYHpwYWdlYCBpcyBwcm9wZXJseSBjbGVhcmVkLiBUaGUgYmVzdCB0aGluZyB0byBkbyBpcyB0cmFjayBkb3duIHdoZXJlIGB1dmlvX2dldF9saXN0YCBpcyBjYWxsZWQgZnJvbS4gVGhhdCBjYWxsIHNpdGUgd2lsbCBnaXZlIG1vcmUgY29udGV4dCBvbiBob3cgdGhlIGB6cGFnZWAgaXMgbWFuYWdlZCBhbmQgYWxsb2NhdGVkLCBob3BlZnVsbHkgYW5zd2VyaW5nIHRoaXMgYWxsIGltcG9ydGFudCBxdWVzdGlvbiBvbiBpbml0aWFsIHN0YXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1dmlvX2dldF9saXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jPTI2OT1zdGF0aWMgaW50IHV2aW9fYWRkX3NlY3JldChzdHJ1Y3QgdXZpb19pb2N0bF9jYiAqdXZfaW9jdGwpXG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYy0zMDYtICovXG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jOjMwNzpzdGF0aWMgaW50IHV2aW9fZ2V0X2xpc3Qodm9pZCAqenBhZ2UsIHN0cnVjdCB1dmlvX2lvY3RsX2NiICp1dl9pb2N0bClcbmRyaXZlcnMvczM5MC9jaGFyL3V2ZGV2aWNlLmMtMzA4LXtcbi0tXG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jPTM2NT1zdGF0aWMgaW50IHV2aW9fbGlzdF9zZWNyZXRzKHN0cnVjdCB1dmlvX2lvY3RsX2NiICp1dl9pb2N0bClcbi0tXG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jLTM3Ny1cbmRyaXZlcnMvczM5MC9jaGFyL3V2ZGV2aWNlLmM6Mzc4Olx0cmMgPSB1dmlvX2dldF9saXN0KHpwYWdlLCB1dl9pb2N0bCk7XG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jLTM3OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYwNTMKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZDoKCioqRGl2aW5nIGludG8gdGhlIGB1dmlvX2xpc3Rfc2VjcmV0c2AgQ29tbWFuZCoqCgpBbHJpZ2h0LCBgdXZpb19saXN0X3NlY3JldHNgLiBMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzLCAmIzM0O1JpZ2h0LCBJIGtub3cgdGhpcyBvbmUuJiMzNDsgVGhhdCBjb21tYW5kIGlzIGxpa2VseSBwYXJ0IG9mIHRoZSBgdXZpb2AgdXRpbGl0eSwgd2hhdGV2ZXIgc3lzdGVtIGl0IG1pZ2h0IGJlIHBhcnQgb2YuIFRoZSAmIzM5O2xpc3QmIzM5OyBwYXJ0IGlzIHByZXR0eSBzZWxmLWV4cGxhbmF0b3J5IOKAkyB3ZSYjMzk7cmUgZW51bWVyYXRpbmcgc29tZXRoaW5nLiBBbmQgJiMzOTtzZWNyZXRzJiMzOTvigKYgd2VsbCwgdGhhdCBjb3VsZCBtZWFuIGEgcmFuZ2Ugb2YgdGhpbmdzLCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQuCgpNeSBleHBlcnRpc2UgaW1tZWRpYXRlbHkga2lja3MgaW4gdG8gaGVscCBtZSBjYXRlZ29yaXplIG15IHRoaW5raW5nOgoKKiAgICoqUG90ZW50aWFsIENvbnRleHQ6KiogSSBuZWVkIHRvIGltbWVkaWF0ZWx5IGNvbnNpZGVyIHRoZSBzeXN0ZW0gdGhpcyBpcyBwYXJ0IG9mLiBJcyBpdCBhIGNsb3VkIGVudmlyb25tZW50PyBBIGRldmVsb3BtZW50IGZyYW1ld29yaz8gSXMgaXQgcmVsYXRlZCB0byBjb250YWluZXJpemF0aW9uIG9yIEt1YmVybmV0ZXM/IFVuZGVyc3RhbmRpbmcgdGhlIGVudmlyb25tZW50IGluZm9ybXMgdGhlICp0eXBlKiBvZiBzZWNyZXRzIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IChBUEkga2V5cywgcGFzc3dvcmRzLCBjZXJ0aWZpY2F0ZXMsIGV0Yy4pIGFuZCB3aGVyZSB0aGV5IGFyZSBzdG9yZWQsIGJlY2F1c2UgdGhlIGB1dmlvYCBmdW5jdGlvbmFsaXR5IGRpY3RhdGVzIGhvdyB3ZSBpbnRlcmFjdCB3aXRoIHRob3NlIGl0ZW1zLgoqICAgKipTZWN1cml0eSBJbXBsaWNhdGlvbnM6KiogTGlzdGluZyBzZWNyZXRzIGlzIGluaGVyZW50bHkgc2Vuc2l0aXZlLiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IHBlcm1pc3Npb25zIGFuZCBhY2Nlc3MgY29udHJvbHMuIEkmIzM5O2QgZXhwZWN0IHRoaXMgY29tbWFuZCB0byByZXF1aXJlIGF1dGhlbnRpY2F0aW9uIGFuZCBhdXRob3JpemF0aW9uLiBJdCYjMzk7cyBjcnVjaWFsIHRoaXMgdG9vbCBpcyBjb25maWd1cmVkIHRvIG9ubHkgcmV2ZWFsIHNlY3JldHMgdG8gdGhlIHJpZ2h0IHVzZXJzIGFuZCBwcm9jZXNzZXMuCiogICAqKkRhdGEgRm9ybWF0ICZhbXA7IE91dHB1dDoqKiBXaGF0IHdpbGwgdGhlIG91dHB1dCBsb29rIGxpa2U/IFdpbGwgaXQgYmUgYSBzaW1wbGUgbGlzdCBvZiBuYW1lcywgb3IgbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiAoZGVzY3JpcHRpb25zLCBhc3NvY2lhdGVkIGFwcGxpY2F0aW9ucywgdXNhZ2UgZGF0YSwgZXRjLik/IEkmIzM5O2xsIHByb2JhYmx5IGJlIGxvb2tpbmcgZm9yIGZvcm1hdHRpbmcgb3B0aW9ucyBsaWtlIEpTT04sIFlBTUwsIG9yIGEgc3RydWN0dXJlZCB0YWJsZSBmb3IgZWFzeSBwYXJzaW5nIGFuZCBhdXRvbWF0aW9uLiBXaGF0IGZsYWdzIGFyZSBzdXBwb3J0ZWQgdG8gdGFpbG9yIHRoaXMgb3V0cHV0PwoqICAgKipFcnJvciBIYW5kbGluZzoqKiBXaGF0IGhhcHBlbnMgaWYgSSBkb24mIzM5O3QgaGF2ZSB0aGUgcHJvcGVyIHBlcm1pc3Npb25zPyBPciBpZiB0aGVyZSYjMzk7cyBhbiBlcnJvciByZXRyaWV2aW5nIHRoZSBzZWNyZXRzPyBHb29kIGxvZ2dpbmcgYW5kIGVycm9yIG1lc3NhZ2VzIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHRvb2wmIzM5O3MgYmVoYXZpb3IgYW5kIHRyb3VibGVzaG9vdGluZyBhbnkgaXNzdWVzLgoqICAgKipVc2UgQ2FzZXM6KiogV2hhdCBhcmUgdGhlIHR5cGljYWwgcmVhc29ucyBmb3IgbGlzdGluZyBzZWNyZXRzPyBEZWJ1Z2dpbmcgYW4gYXBwbGljYXRpb24/IEF1ZGl0aW5nIHNlY3VyaXR5IGNvbmZpZ3VyYXRpb25zPyBBdXRvbWF0aW5nIHNlY3JldCByb3RhdGlvbj8gVGhlIHVzZSBjYXNlIHdpbGwgaW5mb3JtIGhvdyBJIGFwcHJvYWNoIHRoaXMgY29tbWFuZC4KKiAgICoqQXNzdW1lZCBLbm93bGVkZ2U6KiogSXQmIzM5O3MgbGlrZWx5IEkgYWxyZWFkeSB1bmRlcnN0YW5kIGhvdyB0byBtYW5hZ2Ugc2VjcmV0cyB3aXRoaW4gdGhpcyBlY29zeXN0ZW0uIElmIGl0JiMzOTtzIGEgZGVkaWNhdGVkIHNlY3JldHMgbWFuYWdlciwgSSBsaWtlbHkga25vdyB0aGUga2V5IGNvbmNlcHRzIG9mIHRoZSB0ZWNobm9sb2d5LgoKU28sIG92ZXJhbGwsIG15IG1pbmQgaXMgaW1tZWRpYXRlbHkgZm9ybXVsYXRpbmcgcXVlc3Rpb25zIGFuZCBoeXBvdGhlc2VzLiBJJiMzOTttIHJlYWR5IHRvIGRpZyBpbnRvIHRoZSBkb2N1bWVudGF0aW9uLCBvciB0cnkgdGhlIGNvbW1hbmQgZGlyZWN0bHkgdG8gc2VlIHdoYXQgaW5mb3JtYXRpb24gaXQgcmV2ZWFscy4gSXQgYWxsIGNvbWVzIGRvd24gdG8gdGhlIGNvbnRleHQgSSBrbm93IGFuZCBob3cgbXVjaCBjb250cm9sIEkgaGF2ZSBvdmVyIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jaGFyL3V2ZGV2aWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM2NTpcdHN0YXRpYyBpbnQgdXZpb19saXN0X3NlY3JldHMoc3RydWN0IHV2aW9faW9jdGxfY2IgKnV2X2lvY3RsKVxuIDM2NjpcdHtcbiAzNjc6XHRcdHZvaWQgKnpwYWdlO1xuIDM2ODpcdFx0aW50IHJjO1xuIDM2OTpcdFxuIDM3MDpcdFx0aWYgKHV2X2lvY3RsLVx1MDAzZWFyZ3VtZW50X2xlbiA9PSAwIHx8XG4gMzcxOlx0XHQgICAgdXZfaW9jdGwtXHUwMDNlYXJndW1lbnRfbGVuICUgVVZJT19MSVNUX1NFQ1JFVFNfTEVOICE9IDApXG4gMzcyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDM3MzpcdFxuIDM3NDpcdFx0enBhZ2UgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTtcbiAzNzU6XHRcdGlmICghenBhZ2UpXG4gMzc2Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDM3NzpcdFxuIDM3ODpcdFx0cmMgPSB1dmlvX2dldF9saXN0KHpwYWdlLCB1dl9pb2N0bCk7XG4gMzc5Olx0XG4gMzgwOlx0XHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpenBhZ2UpO1xuIDM4MTpcdFx0cmV0dXJuIHJjO1xuIDM4MjpcdH1cbiAzODM6XHRcbiAzODQ6XHQvKipcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY5MzIKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxNjIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBDb2RlIGFuZCBWdWxuZXJhYmlsaXRpZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIGB6cGFnZWAgaXMgZXhwbGljaXRseSB6ZXJvZWQgd2l0aCBgZ2V0X3plcm9lZF9wYWdlYC4gR29vZCwgdGhhdCBlbGltaW5hdGVzIGEgd2hvbGUgY2xhc3Mgb2YgcG90ZW50aWFsIHByb2JsZW1zIHJpZ2h0IG9mZiB0aGUgYmF0LiBUaGVuIEkgc3RhcnRlZCB0byB0aGluaywgJiMzNDtXaGF0IGFib3V0IGB1dl9saXN0X3NlY3JldHNgPyBDb3VsZCBpdCBiZSB3cml0aW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSBzb21ld2hlcmU/JiMzNDsgQnV0LCBgdXZfbGlzdF9zZWNyZXRzYCBpcyBhIGh5cGVydmlzb3IgY2FsbCwgc28gdGhlIGh5cGVydmlzb3IgaXMgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIGl0IHdyaXRlcyBpbml0aWFsaXplZCBkYXRhLiBFdmVuIGlmIGl0IGRvZXNuJiMzOTt0LCB0aGF0JiMzOTtzIG5vdCBhIGtlcm5lbC1zcGFjZSBidWcuCgpCdXQsIHdoZW4gSSBleGFtaW5lIGB1dl9saXN0X3NlY3JldHNgIGNhbGxlZCBpbiBgdXZpb19nZXRfbGlzdGAsIEkgc2VlIHRoYXQgaXQgdXNlcyBgbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4YCBhcyBgc3RhcnRfaWR4YC4gSW4gdGhlIGZpcnN0IGl0ZXJhdGlvbiwgYGxpc3QtJmd0O25leHRfc2VjcmV0X2lkeGAgaXMgemVybywgYmVjYXVzZSB0aGUgcGFnZSBgenBhZ2VgIGlzIHplcm9lZCwgYW5kIGl0IGlzIHplcm8taW5pdGlhbGl6ZWQuIEFmdGVyIHRoZSBjYWxsIHRvIGB1dl9saXN0X3NlY3JldHNgLCBpdCB1cGRhdGVzIGBsaXN0LSZndDtuZXh0X3NlY3JldF9pZHhgIGlmIHRoZXJlJiMzOTtzIG1vcmUgZGF0YS4gVGhlbiBgY29weV90b191c2VyYCBjb3BpZXMgYGxpc3QtJmd0O3NlY3JldHNgIHRvIHVzZXIgc3BhY2UuIEl0IGNvcGllcyBleGFjdGx5IGBsaXN0LSZndDtudW1fc2Vjcl9zdG9yZWRgIGl0ZW1zLiBUaGUgemVyb2luZyBvZiB0aGUgcGFnZSBtZWFucyBhbnl0aGluZyAqbm90KiB3cml0dGVuIHdpbGwgYmUgemVyby4gU2luY2UgdGhlIGh5cGVydmlzb3IgaXMgKnN1cHBvc2VkKiB0byB3cml0ZSB0aG9zZSBlbGVtZW50cywgYW55IHVud3JpdHRlbiBlbGVtZW50cyBhcmUgemVyby4gU28gSSBhbSBjb25maWRlbnQsIGF0IHRoaXMgcG9pbnQsIHRoYXQgdGhlcmUmIzM5O3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhayB0byB1c2VyIHNwYWNlIGhlcmUuCgpOb3csIGxldCYjMzk7cyByZS1leGFtaW5lIHRoZSBwYXRjaCBpdHNlbGYuCgpgYGBjCiAJdTE2IGk7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgbGlzdC0mZ3Q7dG90YWxfbnVtX3NlY3JldHM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBsaXN0LSZndDtudW1fc2Vjcl9zdG9yZWQ7IGkmIzQzOyYjNDM7KSB7CiAJCWlmIChtZW1jbXAoc2VjcmV0X2lkLCBsaXN0LSZndDtzZWNyZXRzW2ldLmlkLCBVVl9TRUNSRVRfSURfTEVOKSA9PSAwKSB7CiAJCQkqc2VjcmV0ID0gbGlzdC0mZ3Q7c2VjcmV0c1tpXS5oZHI7CiAJCQlyZXR1cm4gMDsKYGBgCgpBaCwgdGhpcyBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0eS4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzIHVzaW5nIGBsaXN0LSZndDt0b3RhbF9udW1fc2VjcmV0c2AgdG8gaXRlcmF0ZSB0aHJvdWdoIGBsaXN0LSZndDtzZWNyZXRzYC4gVGhlIGBsaXN0LSZndDtzZWNyZXRzYCBhcnJheSBoYXMgYSBmaXhlZCBzaXplIG9mIDg1IGVsZW1lbnRzLiBJZiBgdG90YWxfbnVtX3NlY3JldHNgIGV4Y2VlZHMgODUsIHRoaXMgbG9vcCB3b3VsZCBiZSByZWFkaW5nIHBhc3QgdGhlIGVuZCBvZiB0aGUgYXJyYXksIGFuZCB0aGVyZWZvcmUgdGhlIGVuZCBvZiB0aGUgYGxpc3RgIHN0cnVjdHVyZSwgY2F1c2luZyBhbiBvdXQtb2YtYm91bmRzIHJlYWQuIFRoaXMgaXMgYSBjbGVhciBjYXNlIGZvciBLQVNBTiB0byBjYXRjaC4KClRoZSBzZWNvbmQgcGFydDoKCmBgYGMKLQl1MTYgc3RhcnRfaWR4ID0gMDsKJiM0MzsJdTE2IHN0YXJ0X2lkeDsKIAl1MTYgbGlzdF9yYzsKIAlpbnQgcmV0OwogCiYjNDM7CWxpc3QtJmd0O25leHRfc2VjcmV0X2lkeCA9IDA7CiYjNDM7CiAJZG8gewomIzQzOwkJc3RhcnRfaWR4ID0gbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4OwogCQl1dl9saXN0X3NlY3JldHMobGlzdCwgc3RhcnRfaWR4LCAmYW1wO2xpc3RfcmMsIE5VTEwpOwogCQlpZiAobGlzdF9yYyAhPSBVVkNfUkNfRVhFQ1VURUQgJmFtcDsmYW1wOyBsaXN0X3JjICE9IFVWQ19SQ19NT1JFX0RBVEEpIHsKIAkJCWlmIChsaXN0X3JjID09IFVWQ19SQ19JTlZfQ01EKQpAQCAtNzk2LDcgJiM0Mzs3OTksNiBAQCBpbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLAogCQlyZXQgPSBmaW5kX3NlY3JldF9pbl9wYWdlKHNlY3JldF9pZCwgbGlzdCwgc2VjcmV0KTsKIAkJaWYgKHJldCA9PSAwKQogCQkJcmV0dXJuIHJldDsKLQkJc3RhcnRfaWR4ID0gbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4OwogCX0gd2hpbGUgKGxpc3RfcmMgPT0gVVZDX1JDX01PUkVfREFUQSAmYW1wOyZhbXA7IHN0YXJ0X2lkeCAmbHQ7IGxpc3QtJmd0O25leHRfc2VjcmV0X2lkeCk7CmBgYAoKT2theSwgdGhlIG9yaWdpbmFsIGNvZGUgaGFkIGEgbG9naWMgYnVnLiBgc3RhcnRfaWR4YCB3YXMgaW5pdGlhbGl6ZWQgdG8gMCBhbmQgYHV2X2xpc3Rfc2VjcmV0c2Agd2FzIGNhbGxlZC4gVGhlbiwgYHN0YXJ0X2lkeGAgd2FzIGFzc2lnbmVkIHRoZSB2YWx1ZSBvZiBgbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4YC4gVGhlbiB0aGUgYHdoaWxlYCBsb29wIGNvbmRpdGlvbiBjaGVja2VkIGlmIGBzdGFydF9pZHggJmx0OyBsaXN0LSZndDtuZXh0X3NlY3JldF9pZHhgLiBCdXQgc2luY2UgYHN0YXJ0X2lkeGAgd2FzIGp1c3QgYXNzaWduZWQgdGhlIHZhbHVlIG9mIGBsaXN0LSZndDtuZXh0X3NlY3JldF9pZHhgLCB0aGlzIGNvbmRpdGlvbiB3b3VsZCAqYWx3YXlzKiBiZSBmYWxzZSBpbiB0aGUgZmlyc3QgaXRlcmF0aW9uLiBTbyB0aGUgbG9vcCB3b3VsZCB0ZXJtaW5hdGUgYWZ0ZXIgb25seSB0aGUgZmlyc3QgaXRlcmF0aW9uLCBldmVuIGlmIHRoZXJlIHdhcyBtb3JlIGRhdGEgKGBVVkNfUkNfTU9SRV9EQVRBYCkuIFRoZSBmaXggZW5zdXJlcyB0aGUgbG9vcCBjb250aW51ZXMgdG8gaXRlcmF0ZS4KCklzIHRoZXJlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGhlcmU/IExldCYjMzk7cyBjaGVjay4gSW4gdGhlIG9yaWdpbmFsIGNvZGUsIGBsaXN0LSZndDtuZXh0X3NlY3JldF9pZHhgIGlzIHJlYWQgYXQgdGhlIGVuZCBvZgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3V2X2ZpbmRfc2VjcmV0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oPTYxMz1zdGF0aWMgaW5saW5lIGludCB1dl9yZW1vdmVfc2hhcmVkKHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC02MTctXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaDo2MTg6aW50IHV2X2ZpbmRfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTYxOS1cdFx0ICAgc3RydWN0IHV2X3NlY3JldF9saXN0ICpsaXN0LFxuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYz03NTc9c3RhdGljIGludCBmaW5kX3NlY3JldF9pbl9wYWdlKGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzcyLS8qKlxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjc3MzogKiB1dl9maW5kX3NlY3JldCgpIC0gc2VhcmNoIHNlY3JldCBtZXRhZGF0YSBmb3IgYSBnaXZlbiBzZWNyZXQgaWQuXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzc0LSAqIEBzZWNyZXRfaWQ6IHNlYXJjaCBwYXR0ZXJuLlxuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03NzktICovXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6NzgwOmludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzgxLVx0XHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QsXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTgwNS19XG5hcmNoL3MzOTAva2VybmVsL3V2LmM6ODA2OkVYUE9SVF9TWU1CT0xfR1BMKHV2X2ZpbmRfc2VjcmV0KTtcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy04MDctXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9MjA9TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O3MzOTAgcHJvdGVjdGVkIGtleSBVViBoYW5kbGVyXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yMi0vKlxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6MjM6ICogT25lIHByZS1hbGxvY2F0ZWQgdXZfc2VjcmV0X2xpc3QgZm9yIHVzZSB3aXRoIHV2X2ZpbmRfc2VjcmV0KClcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI0LSAqL1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTkzPXN0YXRpYyBpbnQgZ2V0X3NlY3JldF9tZXRhZGF0YShjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtOTktXHRtZW1zZXQodXZfbGlzdCwgMCwgc2l6ZW9mKCp1dl9saXN0KSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoxMDA6XHRyYyA9IHV2X2ZpbmRfc2VjcmV0KHNlY3JldF9pZCwgdXZfbGlzdCwgc2VjcmV0KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTEwMS1cdG11dGV4X3VubG9jayhcdTAwMjZ1dl9saXN0X211dGV4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAyOTcKCQkJCQkJCW91dHB1dDogMzI4CgkJCQkJCQl0aG91Z2h0czogMzc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFNlY3VyaXR5IEZpeCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCB0aGlzIHBhdGNoIGlzIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIHZ1bG5lcmFiaWxpdHkgbGllcyB3aXRoaW4gYGRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jYCwgc3BlY2lmaWNhbGx5IGluIGhvdyB0aGUgYHV2X2ZpbmRfc2VjcmV0YCBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgYHV2X2xpc3RgIHN0cnVjdHVyZS4gSSYjMzk7bSBub3RpbmcgdGhhdCB0aGUgY29kZSBpcyBvbmx5IGNhbGxlZCBmcm9tIGBnZXRfc2VjcmV0X21ldGFkYXRhYC4gTW9zdCBpbXBvcnRhbnRseSwgdGhlIGB1dl9saXN0YCBpcyBleHBsaWNpdGx5IHplcm9lZCBvdXQgYmVmb3JlIGJlaW5nIHVzZWQuIFRoYXQmIzM5O3Mga2V5LgoKU28sIHRoZSBmaXJzdCBjaGFuZ2UgaW4gdGhlIGBmaW5kX3NlY3JldF9pbl9wYWdlYCBmdW5jdGlvbiBhZGRyZXNzZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkLiBUaGUgb3JpZ2luYWwgbG9vcCBpbmNvcnJlY3RseSB1c2VkIGBsaXN0LSZndDt0b3RhbF9udW1fc2VjcmV0c2AgdG8gaXRlcmF0ZSwgd2hpY2ggY291bGQgZXhjZWVkIHRoZSBib3VuZHMgb2YgdGhlIGBsaXN0LSZndDtzZWNyZXRzYCBhcnJheSAobGltaXRlZCB0byA4NSBlbGVtZW50cykuIFRoaXMgbWVhbnMgYSBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSB0cmlnZ2VyZWQsIHdoaWNoIGlzIGdyZWF0IGJlY2F1c2UgaXQgbWVhbnMgdGhhdCBwcm9ibGVtIGlzIGVhc3kgdG8gZGV0ZWN0LgoKVGhlIHNlY29uZCBjaGFuZ2UgaW4gYHV2X2ZpbmRfc2VjcmV0YCBmaXhlcyBhIGxvZ2ljIGJ1Zy4gVGhlIGluaXRpYWwgbG9vcCBjb25kaXRpb24gdXNlZCBgc3RhcnRfaWR4ICZsdDsgbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4YC4gSG93ZXZlciwgYHN0YXJ0X2lkeGAgd2FzIGFzc2lnbmVkIGBsaXN0LSZndDtuZXh0X3NlY3JldF9pZHhgIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgY2hlY2ssIHNvIHRoZSBsb29wIHdhcyBuZXZlciBleGVjdXRlZC4gVGhlIGNvcnJlY3RlZCB2ZXJzaW9uIGNvcnJlY3RseSBpbml0aWFsaXplcyBhbmQgdXBkYXRlcyBgc3RhcnRfaWR4YCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsb29wLgoKQmVjYXVzZSB0aGUgc3RydWN0dXJlIHBhc3NlZCB0byBgdXZfZmluZF9zZWNyZXRgIGlzIGluaXRpYWxpemVkIHRvIHplcm8gYmVmb3JlIHVzZSwgdGhlcmUgYXJlbiYjMzk7dCBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MsIGFuZCBzbyBgTmVlZHNLTVNBTmAgaXMgZmFsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyB0d28gaXNzdWVzOlxuMS4gQW4gb3V0LW9mLWJvdW5kcyByZWFkIGluIGBmaW5kX3NlY3JldF9pbl9wYWdlKClgLiBUaGUgbG9vcCBwcmV2aW91c2x5IHVzZWQgYGxpc3QtXHUwMDNldG90YWxfbnVtX3NlY3JldHNgIGluc3RlYWQgb2YgYGxpc3QtXHUwMDNlbnVtX3NlY3Jfc3RvcmVkYC4gU2luY2UgYGxpc3QtXHUwMDNlc2VjcmV0c2AgaXMgYSBmaXhlZC1zaXplIGFycmF5IG9mIDg1IGVsZW1lbnRzLCBpZiBgdG90YWxfbnVtX3NlY3JldHNgIGV4Y2VlZHMgODUsIHRoZSBsb29wIHJlYWRzIHBhc3QgdGhlIGVuZCBvZiB0aGUgYGxpc3RgIHN0cnVjdHVyZSAod2hpY2ggaXMgZXhhY3RseSBvbmUgcGFnZSBpbiBzaXplKS4gVGhpcyBpcyBhIGNsYXNzaWMgb3V0LW9mLWJvdW5kcyByZWFkIHRoYXQgaXMgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4uXG4yLiBBIGxvZ2ljIGJ1ZyBpbiBgdXZfZmluZF9zZWNyZXQoKWAgd2hlcmUgdGhlIGxvb3AgY29uZGl0aW9uIGBzdGFydF9pZHggXHUwMDNjIGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4YCB3YXMgYWx3YXlzIGZhbHNlIGJlY2F1c2UgYHN0YXJ0X2lkeGAgd2FzIGFzc2lnbmVkIGBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeGAgaW1tZWRpYXRlbHkgcHJpb3IgdG8gdGhlIGNoZWNrLiBUaGUgZml4IGNvcnJlY3RseSBpbml0aWFsaXplcyBhbmQgdXBkYXRlcyBgc3RhcnRfaWR4YCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsb29wLlxuXG5UaGUgYGxpc3RgIHN0cnVjdHVyZSBwYXNzZWQgdG8gYHV2X2ZpbmRfc2VjcmV0KClgIGlzIGZ1bGx5IHplcm9lZCBiZWZvcmUgdXNlICh2aWEgYG1lbXNldCh1dl9saXN0LCAwLCBzaXplb2YoKnV2X2xpc3QpKWAgaW4gYGdldF9zZWNyZXRfbWV0YWRhdGEoKWApLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMsIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UgaW50cm9kdWNlZCBvciBmaXhlZCBieSB0aGlzIHBhdGNoLiBTdGFuZGFyZCBLQVNBTiBpcyBwZXJmZWN0bHkgc3VpdGVkIHRvIGNhdGNoIHRoZSBvdXQtb2YtYm91bmRzIHJlYWQsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyB0d28gaXNzdWVzOlxuMS4gQW4gb3V0LW9mLWJvdW5kcyByZWFkIGluIGBmaW5kX3NlY3JldF9pbl9wYWdlKClgLiBUaGUgbG9vcCBwcmV2aW91c2x5IHVzZWQgYGxpc3QtXHUwMDNldG90YWxfbnVtX3NlY3JldHNgIGluc3RlYWQgb2YgYGxpc3QtXHUwMDNlbnVtX3NlY3Jfc3RvcmVkYC4gU2luY2UgYGxpc3QtXHUwMDNlc2VjcmV0c2AgaXMgYSBmaXhlZC1zaXplIGFycmF5IG9mIDg1IGVsZW1lbnRzLCBpZiBgdG90YWxfbnVtX3NlY3JldHNgIGV4Y2VlZHMgODUsIHRoZSBsb29wIHJlYWRzIHBhc3QgdGhlIGVuZCBvZiB0aGUgYGxpc3RgIHN0cnVjdHVyZSAod2hpY2ggaXMgZXhhY3RseSBvbmUgcGFnZSBpbiBzaXplKS4gVGhpcyBpcyBhIGNsYXNzaWMgb3V0LW9mLWJvdW5kcyByZWFkIHRoYXQgaXMgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4uXG4yLiBBIGxvZ2ljIGJ1ZyBpbiBgdXZfZmluZF9zZWNyZXQoKWAgd2hlcmUgdGhlIGxvb3AgY29uZGl0aW9uIGBzdGFydF9pZHggXHUwMDNjIGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4YCB3YXMgYWx3YXlzIGZhbHNlIGJlY2F1c2UgYHN0YXJ0X2lkeGAgd2FzIGFzc2lnbmVkIGBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeGAgaW1tZWRpYXRlbHkgcHJpb3IgdG8gdGhlIGNoZWNrLiBUaGUgZml4IGNvcnJlY3RseSBpbml0aWFsaXplcyBhbmQgdXBkYXRlcyBgc3RhcnRfaWR4YCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsb29wLlxuXG5UaGUgYGxpc3RgIHN0cnVjdHVyZSBwYXNzZWQgdG8gYHV2X2ZpbmRfc2VjcmV0KClgIGlzIGZ1bGx5IHplcm9lZCBiZWZvcmUgdXNlICh2aWEgYG1lbXNldCh1dl9saXN0LCAwLCBzaXplb2YoKnV2X2xpc3QpKWAgaW4gYGdldF9zZWNyZXRfbWV0YWRhdGEoKWApLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMsIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UgaW50cm9kdWNlZCBvciBmaXhlZCBieSB0aGlzIHBhdGNoLiBTdGFuZGFyZCBLQVNBTiBpcyBwZXJmZWN0bHkgc3VpdGVkIHRvIGNhdGNoIHRoZSBvdXQtb2YtYm91bmRzIHJlYWQsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTI6MTUuMjE3OTgyMzQ1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIwODUzMDgyMjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBLRVlcIixcbiAgICBcIlBLRVlfVVZcIixcbiAgICBcIlMzOTBfVVZfVUFQSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInV2X2ZpbmRfc2VjcmV0XCIsXG4gICAgXCJwa2V5X2hhbmRsZXJfdmVyaWZ5X2tleVwiLFxuICAgIFwicGtleV9oYW5kbGVyX2tleV90b19wcm90a2V5XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgdHdvIGlzc3VlczpcXG4xLiBBbiBvdXQtb2YtYm91bmRzIHJlYWQgaW4gYGZpbmRfc2VjcmV0X2luX3BhZ2UoKWAuIFRoZSBsb29wIHByZXZpb3VzbHkgdXNlZCBgbGlzdC1cXHUwMDNldG90YWxfbnVtX3NlY3JldHNgIGluc3RlYWQgb2YgYGxpc3QtXFx1MDAzZW51bV9zZWNyX3N0b3JlZGAuIFNpbmNlIGBsaXN0LVxcdTAwM2VzZWNyZXRzYCBpcyBhIGZpeGVkLXNpemUgYXJyYXkgb2YgODUgZWxlbWVudHMsIGlmIGB0b3RhbF9udW1fc2VjcmV0c2AgZXhjZWVkcyA4NSwgdGhlIGxvb3AgcmVhZHMgcGFzdCB0aGUgZW5kIG9mIHRoZSBgbGlzdGAgc3RydWN0dXJlICh3aGljaCBpcyBleGFjdGx5IG9uZSBwYWdlIGluIHNpemUpLiBUaGlzIGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHJlYWQgdGhhdCBpcyByZWxpYWJseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTi5cXG4yLiBBIGxvZ2ljIGJ1ZyBpbiBgdXZfZmluZF9zZWNyZXQoKWAgd2hlcmUgdGhlIGxvb3AgY29uZGl0aW9uIGBzdGFydF9pZHggXFx1MDAzYyBsaXN0LVxcdTAwM2VuZXh0X3NlY3JldF9pZHhgIHdhcyBhbHdheXMgZmFsc2UgYmVjYXVzZSBgc3RhcnRfaWR4YCB3YXMgYXNzaWduZWQgYGxpc3QtXFx1MDAzZW5leHRfc2VjcmV0X2lkeGAgaW1tZWRpYXRlbHkgcHJpb3IgdG8gdGhlIGNoZWNrLiBUaGUgZml4IGNvcnJlY3RseSBpbml0aWFsaXplcyBhbmQgdXBkYXRlcyBgc3RhcnRfaWR4YCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsb29wLlxcblxcblRoZSBgbGlzdGAgc3RydWN0dXJlIHBhc3NlZCB0byBgdXZfZmluZF9zZWNyZXQoKWAgaXMgZnVsbHkgemVyb2VkIGJlZm9yZSB1c2UgKHZpYSBgbWVtc2V0KHV2X2xpc3QsIDAsIHNpemVvZigqdXZfbGlzdCkpYCBpbiBgZ2V0X3NlY3JldF9tZXRhZGF0YSgpYCkuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcywgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZSBpbnRyb2R1Y2VkIG9yIGZpeGVkIGJ5IHRoaXMgcGF0Y2guIFN0YW5kYXJkIEtBU0FOIGlzIHBlcmZlY3RseSBzdWl0ZWQgdG8gY2F0Y2ggdGhlIG91dC1vZi1ib3VuZHMgcmVhZCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGB1dl9maW5kX3NlY3JldGAgd2hlcmUgYHN0YXJ0X2lkeGAgd2FzIGluY29ycmVjdGx5IHVwZGF0ZWQgYW5kIGBmaW5kX3NlY3JldF9pbl9wYWdlYCB1c2VkIHRoZSB3cm9uZyBsaW1pdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBzMzkweCB1bHRyYXZpc29yIHNlY3JldCBoYW5kbGluZyBjb2RlLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGAvZGV2L3BrZXlgIGlvY3Rscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTI6MTUuMjE3OTg3MzQ1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODgyMTk0NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1NjdlZmFjODcyZTJjMzNjYTg5NzA4NDQyMDM4ZmI2MTdhZGFjMmZiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDEyIDE4OjEyOjE0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdXYuYyBiL2FyY2gvczM5MC9rZXJuZWwvdXYuY1xcbmluZGV4IGEyODRmOThkOTcxNjguLmU3MGFjYWQwOWNkNWYgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC91di5jXFxuKysrIGIvYXJjaC9zMzkwL2tlcm5lbC91di5jXFxuQEAgLTc2MCw3ICs3NjAsNyBAQCBzdGF0aWMgaW50IGZpbmRfc2VjcmV0X2luX3BhZ2UoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxcbiB7XFxuIFxcdHUxNiBpO1xcbiBcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGxpc3QtXFx1MDAzZXRvdGFsX251bV9zZWNyZXRzOyBpKyspIHtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGxpc3QtXFx1MDAzZW51bV9zZWNyX3N0b3JlZDsgaSsrKSB7XFxuIFxcdFxcdGlmIChtZW1jbXAoc2VjcmV0X2lkLCBsaXN0LVxcdTAwM2VzZWNyZXRzW2ldLmlkLCBVVl9TRUNSRVRfSURfTEVOKSA9PSAwKSB7XFxuIFxcdFxcdFxcdCpzZWNyZXQgPSBsaXN0LVxcdTAwM2VzZWNyZXRzW2ldLmhkcjtcXG4gXFx0XFx0XFx0cmV0dXJuIDA7XFxuQEAgLTc4MSwxMSArNzgxLDE0IEBAIGludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXFxuIFxcdFxcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqbGlzdCxcXG4gXFx0XFx0ICAgc3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW1faGRyICpzZWNyZXQpXFxuIHtcXG4tXFx0dTE2IHN0YXJ0X2lkeCA9IDA7XFxuK1xcdHUxNiBzdGFydF9pZHg7XFxuIFxcdHUxNiBsaXN0X3JjO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4rXFx0bGlzdC1cXHUwMDNlbmV4dF9zZWNyZXRfaWR4ID0gMDtcXG4rXFxuIFxcdGRvIHtcXG4rXFx0XFx0c3RhcnRfaWR4ID0gbGlzdC1cXHUwMDNlbmV4dF9zZWNyZXRfaWR4O1xcbiBcXHRcXHR1dl9saXN0X3NlY3JldHMobGlzdCwgc3RhcnRfaWR4LCBcXHUwMDI2bGlzdF9yYywgTlVMTCk7XFxuIFxcdFxcdGlmIChsaXN0X3JjICE9IFVWQ19SQ19FWEVDVVRFRCBcXHUwMDI2XFx1MDAyNiBsaXN0X3JjICE9IFVWQ19SQ19NT1JFX0RBVEEpIHtcXG4gXFx0XFx0XFx0aWYgKGxpc3RfcmMgPT0gVVZDX1JDX0lOVl9DTUQpXFxuQEAgLTc5Niw3ICs3OTksNiBAQCBpbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxcbiBcXHRcXHRyZXQgPSBmaW5kX3NlY3JldF9pbl9wYWdlKHNlY3JldF9pZCwgbGlzdCwgc2VjcmV0KTtcXG4gXFx0XFx0aWYgKHJldCA9PSAwKVxcbiBcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbi1cXHRcXHRzdGFydF9pZHggPSBsaXN0LVxcdTAwM2VuZXh0X3NlY3JldF9pZHg7XFxuIFxcdH0gd2hpbGUgKGxpc3RfcmMgPT0gVVZDX1JDX01PUkVfREFUQSBcXHUwMDI2XFx1MDAyNiBzdGFydF9pZHggXFx1MDAzYyBsaXN0LVxcdTAwM2VuZXh0X3NlY3JldF9pZHgpO1xcbiBcXG4gXFx0cmV0dXJuIC1FTk9FTlQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjEyOjE1LjYwNzExNDI3NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg3NDk0NzE5OTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBLRVlcIixcbiAgICBcIlBLRVlfVVZcIixcbiAgICBcIlMzOTBfVVZfVUFQSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInV2X2ZpbmRfc2VjcmV0XCIsXG4gICAgXCJwa2V5X2hhbmRsZXJfdmVyaWZ5X2tleVwiLFxuICAgIFwicGtleV9oYW5kbGVyX2tleV90b19wcm90a2V5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYHV2X2ZpbmRfc2VjcmV0YCB3aGVyZSBgc3RhcnRfaWR4YCB3YXMgaW5jb3JyZWN0bHkgdXBkYXRlZCBhbmQgYGZpbmRfc2VjcmV0X2luX3BhZ2VgIHVzZWQgdGhlIHdyb25nIGxpbWl0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHMzOTB4IHVsdHJhdmlzb3Igc2VjcmV0IGhhbmRsaW5nIGNvZGUsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgYC9kZXYvcGtleWAgaW9jdGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1NjdlZmFjODcyZTJjMzNjYTg5NzA4NDQyMDM4ZmI2MTdhZGFjMmZiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMTg6MTI6MTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3V2LmMgYi9hcmNoL3MzOTAva2VybmVsL3V2LmNcbmluZGV4IGEyODRmOThkOTcxNjguLmU3MGFjYWQwOWNkNWYgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva2VybmVsL3V2LmNcbisrKyBiL2FyY2gvczM5MC9rZXJuZWwvdXYuY1xuQEAgLTc2MCw3ICs3NjAsNyBAQCBzdGF0aWMgaW50IGZpbmRfc2VjcmV0X2luX3BhZ2UoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuIHtcbiBcdHUxNiBpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbGlzdC1cdTAwM2V0b3RhbF9udW1fc2VjcmV0czsgaSsrKSB7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBsaXN0LVx1MDAzZW51bV9zZWNyX3N0b3JlZDsgaSsrKSB7XG4gXHRcdGlmIChtZW1jbXAoc2VjcmV0X2lkLCBsaXN0LVx1MDAzZXNlY3JldHNbaV0uaWQsIFVWX1NFQ1JFVF9JRF9MRU4pID09IDApIHtcbiBcdFx0XHQqc2VjcmV0ID0gbGlzdC1cdTAwM2VzZWNyZXRzW2ldLmhkcjtcbiBcdFx0XHRyZXR1cm4gMDtcbkBAIC03ODEsMTEgKzc4MSwxNCBAQCBpbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuIFx0XHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QsXG4gXHRcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtX2hkciAqc2VjcmV0KVxuIHtcbi1cdHUxNiBzdGFydF9pZHggPSAwO1xuK1x0dTE2IHN0YXJ0X2lkeDtcbiBcdHUxNiBsaXN0X3JjO1xuIFx0aW50IHJldDtcbiBcbitcdGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4ID0gMDtcbitcbiBcdGRvIHtcbitcdFx0c3RhcnRfaWR4ID0gbGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHg7XG4gXHRcdHV2X2xpc3Rfc2VjcmV0cyhsaXN0LCBzdGFydF9pZHgsIFx1MDAyNmxpc3RfcmMsIE5VTEwpO1xuIFx0XHRpZiAobGlzdF9yYyAhPSBVVkNfUkNfRVhFQ1VURUQgXHUwMDI2XHUwMDI2IGxpc3RfcmMgIT0gVVZDX1JDX01PUkVfREFUQSkge1xuIFx0XHRcdGlmIChsaXN0X3JjID09IFVWQ19SQ19JTlZfQ01EKVxuQEAgLTc5Niw3ICs3OTksNiBAQCBpbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuIFx0XHRyZXQgPSBmaW5kX3NlY3JldF9pbl9wYWdlKHNlY3JldF9pZCwgbGlzdCwgc2VjcmV0KTtcbiBcdFx0aWYgKHJldCA9PSAwKVxuIFx0XHRcdHJldHVybiByZXQ7XG4tXHRcdHN0YXJ0X2lkeCA9IGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4O1xuIFx0fSB3aGlsZSAobGlzdF9yYyA9PSBVVkNfUkNfTU9SRV9EQVRBIFx1MDAyNlx1MDAyNiBzdGFydF9pZHggXHUwMDNjIGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4KTtcbiBcbiBcdHJldHVybiAtRU5PRU5UO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTI6MTUuNjA3MTE2MzU0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTgzNzAxODQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaCB0byBzMzkwIEFyY2hpdGVjdHVyZSBDb2RlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0J3MgYmVlbiBhcHBsaWVkIHRvIGBhcmNoL3MzOTAva2VybmVsL3V2LmNgLiBJdCBsb29rcyBsaWtlIGl0J3MgbWFraW5nIGEgZmV3IGNoYW5nZXMgdG8gYGZpbmRfc2VjcmV0X2luX3BhZ2VgIGFuZCBgdXZfZmluZF9zZWNyZXRgLiBTcGVjaWZpY2FsbHksIGluIGBmaW5kX3NlY3JldF9pbl9wYWdlYCwgdGhlIGxvb3AgY29uZGl0aW9uIGhhcyBiZWVuIGFsdGVyZWQ7IGl0IG5vdyB1c2VzIGBsaXN0LVx1MDAzZW51bV9zZWNyX3N0b3JlZGAgaW5zdGVhZCBvZiBgbGlzdC1cdTAwM2V0b3RhbF9udW1fc2VjcmV0c2AsIHdoaWNoIGlzIHNvbWV0aGluZyB0byBub3RlLiBBbmQgd2l0aGluIGB1dl9maW5kX3NlY3JldGAsIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgdXBkYXRlIG9mIGBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeGAgaGF2ZSBiZWVuIG1vdmVkICppbnNpZGUqIHRoZSBsb29wLiBUaGlzIGNvdWxkIGhhdmUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLCBkZXBlbmRpbmcgb24gdGhlIHN0cnVjdHVyZSBhbmQgdXNlIGNhc2UuXG5cbk5vdywgbGV0J3Mgc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICp1c2VkKi4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIGluIGBhcmNoL3MzOTAva2VybmVsL3V2LmNgIGZvciBjYWxscyB0byBgdXZfZmluZF9zZWNyZXRgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgaXMgdGhpcyBldmVuICpyZWFjaGFibGUqIGluIGEgdHlwaWNhbCBmdXp6aW5nIGVudmlyb25tZW50IGxpa2UgR0NFIG9yIFFFTVU/IFMzOTAgYXJjaGl0ZWN0dXJlLCBJIHNlZW0gdG8gcmVjYWxsLCBpcyBub3QgYWx3YXlzIHRoZSB0YXJnZXQsIGFuZCBzeXprYWxsZXIncyB0eXBpY2FsIHNldHVwcy4gQWgsIHdhaXQsIHllcywgc3l6a2FsbGVyICpkb2VzKiBzdXBwb3J0IHMzOTB4LiBTbyB3ZSBuZWVkIHRvIGNvbnNpZGVyIHRoaXMuIFRoZSBwcm9tcHQgZG9lcyBzYXkgdG8gc2tpcCBhbnkgY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gQnV0IHdhaXQsIHNpbmNlIHMzOTB4IGlzIHN1cHBvcnRlZCwgbGV0J3MgZ28gYmFjayB0byBsb29raW5nIGF0IHRoZSB1c2Ugb2YgYHV2X2ZpbmRfc2VjcmV0YCBpbiB0aGUgY29kZSwgYW5kIGhvdyB0aGF0IGNvdWxkIGJlIHJlYWNoYWJsZSB2aWEgc3l6a2FsbGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzc1LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTI6MjEuNDQ0MTM4Nzg0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjgyOTIzMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXZfZmluZF9zZWNyZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg9NjEzPXN0YXRpYyBpbmxpbmUgaW50IHV2X3JlbW92ZV9zaGFyZWQodW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNjE3LVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oOjYxODppbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTYxOS1cXHRcXHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QsXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmM9NzU3PXN0YXRpYyBpbnQgZmluZF9zZWNyZXRfaW5fcGFnZShjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzcyLS8qKlxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo3NzM6ICogdXZfZmluZF9zZWNyZXQoKSAtIHNlYXJjaCBzZWNyZXQgbWV0YWRhdGEgZm9yIGEgZ2l2ZW4gc2VjcmV0IGlkLlxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03NzQtICogQHNlY3JldF9pZDogc2VhcmNoIHBhdHRlcm4uXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzc5LSAqL1xcbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo3ODA6aW50IHV2X2ZpbmRfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzgxLVxcdFxcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqbGlzdCxcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy04MDUtfVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo4MDY6RVhQT1JUX1NZTUJPTF9HUEwodXZfZmluZF9zZWNyZXQpO1xcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy04MDctXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0yMD1NT0RVTEVfREVTQ1JJUFRJT04oXFxcInMzOTAgcHJvdGVjdGVkIGtleSBVViBoYW5kbGVyXFxcIik7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yMi0vKlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjIzOiAqIE9uZSBwcmUtYWxsb2NhdGVkIHV2X3NlY3JldF9saXN0IGZvciB1c2Ugd2l0aCB1dl9maW5kX3NlY3JldCgpXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjQtICovXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz05Mz1zdGF0aWMgaW50IGdldF9zZWNyZXRfbWV0YWRhdGEoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtOTktXFx0bWVtc2V0KHV2X2xpc3QsIDAsIHNpemVvZigqdXZfbGlzdCkpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjEwMDpcXHRyYyA9IHV2X2ZpbmRfc2VjcmV0KHNlY3JldF9pZCwgdXZfbGlzdCwgc2VjcmV0KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0xMDEtXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ1dl9saXN0X211dGV4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTI6MjMuMjEyNDM2NjYyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE2MDY2NjEzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBzMzkwIENyeXB0byBLZXkgSGFuZGxpbmcqKlxuXG5SaWdodCwgYHV2X2ZpbmRfc2VjcmV0YOKApiB0aGF0IGZ1bmN0aW9uIG5hbWUgaW1tZWRpYXRlbHkgcmluZ3MgYSBiZWxsLiBJdCdzIHVzZWQgd2l0aGluIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSdzIGNyeXB0b2dyYXBoaWMga2V5IGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgaW4gYGRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgYHBrZXlfdXYuY2AgYWN0dWFsbHkgKmlzKi4gSXMgdGhpcyByZWxhdGVkIHRvIFVzZXIgVmVyaWZpY2F0aW9uLCBLZXkgc3RvcmFnZSBhbmQgYWNjZXNzIG9yIG1heWJlIHNvbWUgb3RoZXIgaGFyZHdhcmUgc3VwcG9ydCBmb3IgY3J5cHRvPyBJdCdzIGJlZW4gYSB3aGlsZSBzaW5jZSBJIGxhc3QgbG9va2VkIGNsb3NlbHkgYXQgdGhlIHMzOTAga2V5IGluZnJhc3RydWN0dXJlLiBMZXQncyBzZWUgd2hhdCB0aGF0IGZpbGUgY29udGFpbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NTgsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODoxMjoyNi4zNzMxMDQ4NTdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzNzAwMTgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZXRfc2VjcmV0X21ldGFkYXRhXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rZXJuZWwvdXYuYz04MDY9RVhQT1JUX1NZTUJPTF9HUEwodXZfZmluZF9zZWNyZXQpO1xcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTgxMi0gKiBAYnVmX3NpemU6IFNpemUgb2YgdGhlIGJ1ZmZlci4gVGhlIGNvcnJlY3QgYnVmZmVyIHNpemUgaXMgcmVwb3J0ZWQgYXMgcGFydCBvZlxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo4MTM6ICogdGhlIHJlc3VsdCBmcm9tIGB1dl9nZXRfc2VjcmV0X21ldGFkYXRhYC5cXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtODE0LSAqXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz04Mz1zdGF0aWMgYm9vbCBpc191dl9rZXl0eXBlKGVudW0gcGtleV9rZXlfdHlwZSBrZXl0eXBlKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtOTItXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6OTM6c3RhdGljIGludCBnZXRfc2VjcmV0X21ldGFkYXRhKGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy05NC1cXHRcXHRcXHQgICAgICAgc3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW1faGRyICpzZWNyZXQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0xMDY9c3RhdGljIGludCByZXRyaWV2ZV9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMTExLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjExMjpcXHRyYyA9IGdldF9zZWNyZXRfbWV0YWRhdGEoc2VjcmV0X2lkLCBcXHUwMDI2c2VjcmV0X21ldGFfZGF0YSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMTEzLVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTIzMz1zdGF0aWMgaW50IHV2X3ZlcmlmeWtleShjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjQ3LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjI0ODpcXHRyYyA9IGdldF9zZWNyZXRfbWV0YWRhdGEodC1cXHUwMDNlc2VjcmV0X2lkLCBcXHUwMDI2c2VjcmV0X21ldGFfZGF0YSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjQ5LVxcdGlmIChyYylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTI6MjguMjEwMTEyNzI4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY0NzA1Nzk0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIGBwa2V5X3V2LmNgIENvZGUqKlxuXG5Pa2F5LCBsZXQncyBnZXQgaW50byB0aGlzIGBwa2V5X3V2LmNgIGZpbGUuIFJpZ2h0LCBpdCdzIGEgXCJwcm90ZWN0ZWQga2V5IFVWIGhhbmRsZXIuXCIgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgaW50ZXJmYWNpbmcgd2l0aCBwcm90ZWN0ZWQga2V5cy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiQ2FuIEkgZXZlbiAqcmVhY2gqIHRoaXMgdGhpbmc/XCIgSSBoYXZlIHRvIHJlbWVtYmVyIGhvdyBgcGtleWAgZnVuY3Rpb25hbGl0eSBpcyBleHBvc2VkLiBJcyBpdCBhY2Nlc3NpYmxlIHRocm91Z2ggYC9kZXYvcGtleWAsIG9yIHNvbWUgcmVsYXRlZCBgaW9jdGxgIGNhbGxzIHdpdGhpbiB0aGUgczM5MCBhcmNoaXRlY3R1cmU/IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgZW50cnkgcG9pbnRzIGFuZCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGlzIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuY2AgY29kZSBpcyBpbnZva2VkLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBsYXJnZXIgYHBrZXlgIHN1YnN5c3RlbSB0byBnYWluIHNvbWUgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDUwNywiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjEyOjMxLjg1NzE3MzA1MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTkzNTYzNDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInV2X3ZlcmlmeWtleVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0xOTA9c3RhdGljIGludCB1dl9rZXkycHJvdGtleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICpfYXBxbnMgX19hbHdheXNfdW51c2VkLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjMyLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjIzMzpzdGF0aWMgaW50IHV2X3ZlcmlmeWtleShjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTIzNC1cXHRcXHRcXHR1MTYgKl9jYXJkIF9fYWx3YXlzX3VudXNlZCxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTI3Mj1zdGF0aWMgc3RydWN0IHBrZXlfaGFuZGxlciB1dl9oYW5kbGVyID0ge1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjc3LVxcdC5rZXlfdG9fcHJvdGtleVxcdFxcdCA9IHV2X2tleTJwcm90a2V5LFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjI3ODpcXHQudmVyaWZ5X2tleVxcdFxcdCA9IHV2X3ZlcmlmeWtleSxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yNzktfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTI6MzMuNDUwNzQyNzE4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA2OTAxNjYwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYHBrZXlfaGFuZGxlcmAgaXMgYmVpbmcgdXRpbGl6ZWQgd2l0aGluIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSdzIGNyeXB0b2dyYXBoaWMga2V5IG1hbmFnZW1lbnQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIG91dCB0aGUgcmVsZXZhbnQgZHJpdmVyIGNvZGUsIHNwZWNpZmljYWxseSBzb21ldGhpbmcgbGlrZSBgZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jYC4gVGhpcyBzZWVtcyB0aGUgbW9zdCBsaWtlbHkgcGxhY2UgdG8gZmluZCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gSSdtIGhvcGluZyB0byBxdWlja2x5IGdyYXNwIGhvdyB0aGUgYHBrZXlfaGFuZGxlcmAgc3RydWN0dXJlIGlzIGVtcGxveWVkIHdpdGhpbiB0aGF0IGNvbnRleHQuIEknbSBhaW1pbmcgZm9yIGEgbWVudGFsIG1vZGVsIG9mIGl0cyByb2xlIGluIHRoZSBrZXkgbWFuYWdlbWVudCBwcm9jZXNzLiBJJ20gdGhpbmtpbmcgYSBkZWVwIGRpdmUgaW50byB0aGUgY29kZSB3aWxsIHJldmVhbCB0aGUgbmVjZXNzYXJ5IHVzYWdlIHBhdHRlcm5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDQzLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTI6MzYuNTE5NzYyNDQyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjIzOTE3MjYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBrZXlfaGFuZGxlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9MjU9c3RhdGljIGludCBrZXkycHJvdGtleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucywgc2l6ZV90IG5yX2FwcW5zLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTMyLVxcdC8qIHRyeSB0aGUgZGlyZWN0IHdheSAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzozMzpcXHRyYyA9IHBrZXlfaGFuZGxlcl9rZXlfdG9fcHJvdGtleShhcHFucywgbnJfYXBxbnMsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTM0LVxcdFxcdFxcdFxcdFxcdCBrZXksIGtleWxlbixcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0zOS1cXHRpZiAocmMgPT0gLUVOT0RFVikge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzo0MDpcXHRcXHRyYyA9IHBrZXlfaGFuZGxlcl9zbG93cGF0aF9rZXlfdG9fcHJvdGtleShhcHFucywgbnJfYXBxbnMsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTQxLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAga2V5LCBrZXlsZW4sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9NTU9aW50IHBrZXlfa2V5MnByb3RrZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy02Mi1cXHRpZiAocmMgPT0gLUVOT0RFVikge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzo2MzpcXHRcXHRwa2V5X2hhbmRsZXJfcmVxdWVzdF9tb2R1bGVzKCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTY0LVxcdFxcdHJjID0ga2V5MnByb3RrZXkoTlVMTCwgMCwga2V5LCBrZXlsZW4sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9OTI9c3RhdGljIGludCBwa2V5X2lvY3RsX2dlbnNlY2soc3RydWN0IHBrZXlfZ2Vuc2VjayBfX3VzZXIgKnVncylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0xMDQtXFx0a2V5YnVmbGVuID0gc2l6ZW9mKGtncy5zZWNrZXkuc2Vja2V5KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6MTA1OlxcdHJjID0gcGtleV9oYW5kbGVyX2dlbl9rZXkoXFx1MDAyNmFwcW4sIDEsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTEwNi1cXHRcXHRcXHRcXHQgIGtncy5rZXl0eXBlLCBQS0VZX1RZUEVfQ0NBX0RBVEEsIDAsIDAsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9MTE2PXN0YXRpYyBpbnQgcGtleV9pb2N0bF9jbHIyc2VjayhzdHJ1Y3QgcGtleV9jbHIyc2VjayBfX3VzZXIgKnVjcylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0xMjgtXFx0a2V5YnVmbGVuID0gc2l6ZW9mKGtjcy5zZWNrZXkuc2Vja2V5KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6MTI5OlxcdHJjID0gcGtleV9oYW5kbGVyX2Nscl90b19rZXkoXFx1MDAyNmFwcW4sIDEsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTEzMC1cXHRcXHRcXHRcXHQgICAgIGtjcy5rZXl0eXBlLCBQS0VZX1RZUEVfQ0NBX0RBVEEsIDAsIDAsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9MTQyPXN0YXRpYyBpbnQgcGtleV9pb2N0bF9zZWMycHJvdGsoc3RydWN0IHBrZXlfc2VjMnByb3RrIF9fdXNlciAqdXNwKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTE1My1cXHRrc3AucHJvdGtleS5sZW4gPSBzaXplb2Yoa3NwLnByb3RrZXkucHJvdGtleSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjE1NDpcXHRyYyA9IHBrZXlfaGFuZGxlcl9rZXlfdG9fcHJvdGtleShcXHUwMDI2YXBxbiwgMSxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMTU1LVxcdFxcdFxcdFxcdFxcdCBrc3Auc2Vja2V5LnNlY2tleSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz0yMTU9c3RhdGljIGludCBwa2V5X2lvY3RsX2ZpbmRjYXJkKHN0cnVjdCBwa2V5X2ZpbmRjYXJkIF9fdXNlciAqdWZjKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTIyOS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6MjMwOlxcdHJjID0gcGtleV9oYW5kbGVyX2FwcW5zX2Zvcl9rZXkoa2ZjLnNlY2tleS5zZWNrZXksXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTIzMS1cXHRcXHRcXHRcXHRcXHRzaXplb2Yoa2ZjLnNlY2tleS5zZWNrZXkpLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTIzNC1cXHRpZiAocmMgPT0gLUVOT0RFVilcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6MjM1OlxcdFxcdHJjID0gcGtleV9oYW5kbGVyX2FwcW5zX2Zvcl9rZXkoa2ZjLnNlY2tleS5zZWNrZXksXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTIzNi1cXHRcXHRcXHRcXHRcXHRcXHRzaXplb2Yoa2ZjLnNlY2tleS5zZWNrZXkpLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTI1Mz1zdGF0aWMgaW50IHBrZXlfaW9jdGxfc2tleTJwa2V5KHN0cnVjdCBwa2V5X3NrZXkycGtleSBfX3VzZXIgKnVzcClcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0yNjEtXFx0a3NwLnByb3RrZXkubGVuID0gc2l6ZW9mKGtzcC5wcm90a2V5LnByb3RrZXkpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzoyNjI6XFx0cmMgPSBwa2V5X2hhbmRsZXJfa2V5X3RvX3Byb3RrZXkoTlVMTCwgMCxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMjYzLVxcdFxcdFxcdFxcdFxcdCBrc3Auc2Vja2V5LnNlY2tleSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz0yNzY9c3RhdGljIGludCBwa2V5X2lvY3RsX3ZlcmlmeWtleShzdHJ1Y3QgcGtleV92ZXJpZnlrZXkgX191c2VyICp1dmspXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMjg2LVxcdGt2ay5kb21haW4gPSAweEZGRkY7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjI4NzpcXHRyYyA9IHBrZXlfaGFuZGxlcl92ZXJpZnlfa2V5KGt2ay5zZWNrZXkuc2Vja2V5LFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0yODgtXFx0XFx0XFx0XFx0ICAgICBzaXplb2Yoa3ZrLnNlY2tleS5zZWNrZXkpLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTMwNT1zdGF0aWMgaW50IHBrZXlfaW9jdGxfZ2VucHJvdGsoc3RydWN0IHBrZXlfZ2VucHJvdGsgX191c2VyICp1Z3ApXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMzEzLVxcdGtncC5wcm90a2V5LmxlbiA9IHNpemVvZihrZ3AucHJvdGtleS5wcm90a2V5KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6MzE0OlxcdHJjID0gcGtleV9oYW5kbGVyX2dlbl9rZXkoTlVMTCwgMCwga2dwLmtleXR5cGUsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTMxNS1cXHRcXHRcXHRcXHQgIFBLRVlfVFlQRV9QUk9US0VZLCAwLCAwLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTMyNj1zdGF0aWMgaW50IHBrZXlfaW9jdGxfdmVyaWZ5cHJvdGsoc3RydWN0IHBrZXlfdmVyaWZ5cHJvdGsgX191c2VyICp1dnApXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMzU1LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzozNTY6XFx0cmMgPSBwa2V5X2hhbmRsZXJfdmVyaWZ5X2tleSh0bXBidWYsIHNpemVvZigqdCksXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTM1Ny1cXHRcXHRcXHRcXHQgICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIDApO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTM5MD1zdGF0aWMgaW50IHBrZXlfaW9jdGxfZ2Vuc2VjazIoc3RydWN0IHBrZXlfZ2Vuc2VjazIgX191c2VyICp1Z3MpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNDE0LVxcdH1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6NDE1OlxcdHJjID0gcGtleV9oYW5kbGVyX2dlbl9rZXkoYXBxbnMsIGtncy5hcHFuX2VudHJpZXMsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTQxNi1cXHRcXHRcXHRcXHQgIHUsIGtncy50eXBlLCBrZ3Muc2l6ZSwga2dzLmtleWdlbmZsYWdzLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTQ0Mj1zdGF0aWMgaW50IHBrZXlfaW9jdGxfY2xyMnNlY2syKHN0cnVjdCBwa2V5X2NscjJzZWNrMiBfX3VzZXIgKnVjcylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy00NzAtXFx0fVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzo0NzE6XFx0cmMgPSBwa2V5X2hhbmRsZXJfY2xyX3RvX2tleShhcHFucywga2NzLmFwcW5fZW50cmllcyxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNDcyLVxcdFxcdFxcdFxcdCAgICAgdSwga2NzLnR5cGUsIGtjcy5zaXplLCBrY3Mua2V5Z2VuZmxhZ3MsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9NTAzPXN0YXRpYyBpbnQgcGtleV9pb2N0bF92ZXJpZnlrZXkyKHN0cnVjdCBwa2V5X3ZlcmlmeWtleTIgX191c2VyICp1dmspXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNTE0LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzo1MTU6XFx0cmMgPSBwa2V5X2hhbmRsZXJfdmVyaWZ5X2tleShra2V5LCBrdmsua2V5bGVuLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy01MTYtXFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2a3ZrLmNhcmRuciwgXFx1MDAyNmt2ay5kb21haW4sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9NTU4PXN0YXRpYyBpbnQgcGtleV9pb2N0bF9hcHFuczRrKHN0cnVjdCBwa2V5X2FwcW5zNGtleSBfX3VzZXIgKnVhaylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy01NzgtXFx0fVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzo1Nzk6XFx0cmMgPSBwa2V5X2hhbmRsZXJfYXBxbnNfZm9yX2tleShra2V5LCBrYWsua2V5bGVuLCBrYWsuZmxhZ3MsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTU4MC1cXHRcXHRcXHRcXHRcXHRhcHFucywgXFx1MDAyNm5yX2FwcW5zLCAwKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz02MDg9c3RhdGljIGludCBwa2V5X2lvY3RsX2FwcW5zNGt0KHN0cnVjdCBwa2V5X2FwcW5zNGtleXR5cGUgX191c2VyICp1YXQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNjIyLVxcdH1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6NjIzOlxcdHJjID0gcGtleV9oYW5kbGVyX2FwcW5zX2Zvcl9rZXl0eXBlKGthdC50eXBlLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy02MjQtXFx0XFx0XFx0XFx0XFx0ICAgIGthdC5jdXJfbWt2cCwga2F0LmFsdF9ta3ZwLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYz0zND1zdGF0aWMgTElTVF9IRUFEKGhhbmRsZXJfbGlzdCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjM2OmludCBwa2V5X2hhbmRsZXJfcmVnaXN0ZXIoc3RydWN0IHBrZXlfaGFuZGxlciAqaGFuZGxlcilcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTM3LXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjM4OlxcdGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmg7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zOS1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtNzgtfVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6Nzk6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfcmVnaXN0ZXIpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtODAtXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzo4MTppbnQgcGtleV9oYW5kbGVyX3VucmVnaXN0ZXIoc3RydWN0IHBrZXlfaGFuZGxlciAqaGFuZGxlcilcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTgyLXtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtOTMtfVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6OTQ6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfdW5yZWdpc3Rlcik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy05NS1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtOTktXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxMDA6Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqcGtleV9oYW5kbGVyX2dldF9rZXliYXNlZChjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuKVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTAxLXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjEwMjpcXHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTAzLVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xMTctfVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTE4OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX2dldF9rZXliYXNlZCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xMTktXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxMjA6Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqcGtleV9oYW5kbGVyX2dldF9rZXl0eXBlYmFzZWQoZW51bSBwa2V5X2tleV90eXBlIGt0KVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTIxLXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjEyMjpcXHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTIzLVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xMzctfVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTM4OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX2dldF9rZXl0eXBlYmFzZWQpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTM5LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTQwOnZvaWQgcGtleV9oYW5kbGVyX3B1dChjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoYW5kbGVyKVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTQxLXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjE0MjpcXHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTQzLVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xNTUtfVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTU2OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX3B1dCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xNTctXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxNTg6aW50IHBrZXlfaGFuZGxlcl9rZXlfdG9fcHJvdGtleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucywgc2l6ZV90IG5yX2FwcW5zLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTU5LVxcdFxcdFxcdFxcdGNvbnN0IHU4ICprZXksIHUzMiBrZXlsZW4sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE2Mi17XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxNjM6XFx0Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqaDtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE2NC1cXHRpbnQgcmMgPSAtRU5PREVWO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTY1LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTY2OlxcdGggPSBwa2V5X2hhbmRsZXJfZ2V0X2tleWJhc2VkKGtleSwga2V5bGVuKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE2Ny1cXHRpZiAoaCBcXHUwMDI2XFx1MDAyNiBoLVxcdTAwM2VrZXlfdG9fcHJvdGtleSkge1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xNzEtXFx0fVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTcyOlxcdHBrZXlfaGFuZGxlcl9wdXQoaCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xNzMtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE3NS19XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxNzY6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfa2V5X3RvX3Byb3RrZXkpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTc3LVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xODMtICovXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxODQ6aW50IHBrZXlfaGFuZGxlcl9zbG93cGF0aF9rZXlfdG9fcHJvdGtleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucyxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE4NS1cXHRcXHRcXHRcXHRcXHQgc2l6ZV90IG5yX2FwcW5zLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xODkte1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTkwOlxcdGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmgsICpodG1wWzEwXTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE5MS1cXHRpbnQgaSwgbiA9IDAsIHJjID0gLUVOT0RFVjtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjE1LX1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjIxNjpFWFBPUlRfU1lNQk9MKHBrZXlfaGFuZGxlcl9zbG93cGF0aF9rZXlfdG9fcHJvdGtleSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yMTctXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyMTg6aW50IHBrZXlfaGFuZGxlcl9nZW5fa2V5KGNvbnN0IHN0cnVjdCBwa2V5X2FwcW4gKmFwcW5zLCBzaXplX3QgbnJfYXBxbnMsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yMTktXFx0XFx0XFx0IHUzMiBrZXl0eXBlLCB1MzIga2V5c3VidHlwZSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjIyLXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjIyMzpcXHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjI0LVxcdGludCByYyA9IC1FTk9ERVY7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yMjUtXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyMjY6XFx0aCA9IHBrZXlfaGFuZGxlcl9nZXRfa2V5dHlwZWJhc2VkKGtleXN1YnR5cGUpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjI3LVxcdGlmIChoIFxcdTAwMjZcXHUwMDI2IGgtXFx1MDAzZWdlbl9rZXkpIHtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjMxLVxcdH1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjIzMjpcXHRwa2V5X2hhbmRsZXJfcHV0KGgpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjMzLVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yMzUtfVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjM2OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX2dlbl9rZXkpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjM3LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjM4OmludCBwa2V5X2hhbmRsZXJfY2xyX3RvX2tleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucywgc2l6ZV90IG5yX2FwcW5zLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjM5LVxcdFxcdFxcdCAgICB1MzIga2V5dHlwZSwgdTMyIGtleXN1YnR5cGUsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI0NC17XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyNDU6XFx0Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqaDtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI0Ni1cXHRpbnQgcmMgPSAtRU5PREVWO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjQ3LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjQ4OlxcdGggPSBwa2V5X2hhbmRsZXJfZ2V0X2tleXR5cGViYXNlZChrZXlzdWJ0eXBlKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI0OS1cXHRpZiAoaCBcXHUwMDI2XFx1MDAyNiBoLVxcdTAwM2VjbHJfdG9fa2V5KSB7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI1My1cXHR9XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyNTQ6XFx0cGtleV9oYW5kbGVyX3B1dChoKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI1NS1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjU3LX1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI1ODpFWFBPUlRfU1lNQk9MKHBrZXlfaGFuZGxlcl9jbHJfdG9fa2V5KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI1OS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI2MDppbnQgcGtleV9oYW5kbGVyX3ZlcmlmeV9rZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI2MS1cXHRcXHRcXHQgICAgdTE2ICpjYXJkLCB1MTYgKmRvbSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjY0LXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI2NTpcXHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjY2LVxcdGludCByYyA9IC1FTk9ERVY7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNjctXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyNjg6XFx0aCA9IHBrZXlfaGFuZGxlcl9nZXRfa2V5YmFzZWQoa2V5LCBrZXlsZW4pO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjY5LVxcdGlmIChoIFxcdTAwMjZcXHUwMDI2IGgtXFx1MDAzZXZlcmlmeV9rZXkpIHtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjcyLVxcdH1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI3MzpcXHRwa2V5X2hhbmRsZXJfcHV0KGgpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjc0LVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNzYtfVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6Mjc3OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX3ZlcmlmeV9rZXkpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjc4LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6Mjc5OmludCBwa2V5X2hhbmRsZXJfYXBxbnNfZm9yX2tleShjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuLCB1MzIgZmxhZ3MsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yODAtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBwa2V5X2FwcW4gKmFwcW5zLCBzaXplX3QgKm5yX2FwcW5zLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yODIte1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjgzOlxcdGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmg7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yODQtXFx0aW50IHJjID0gLUVOT0RFVjtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI4NS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI4NjpcXHRoID0gcGtleV9oYW5kbGVyX2dldF9rZXliYXNlZChrZXksIGtleWxlbik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yODctXFx0aWYgKGggXFx1MDAyNlxcdTAwMjYgaC1cXHUwMDNlYXBxbnNfZm9yX2tleSlcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjg5LVxcdFxcdFxcdFxcdCAgICAgIHhmbGFncyk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyOTA6XFx0cGtleV9oYW5kbGVyX3B1dChoKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI5MS1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjkzLX1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI5NDpFWFBPUlRfU1lNQk9MKHBrZXlfaGFuZGxlcl9hcHFuc19mb3Jfa2V5KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI5NS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI5NjppbnQgcGtleV9oYW5kbGVyX2FwcW5zX2Zvcl9rZXl0eXBlKGVudW0gcGtleV9rZXlfdHlwZSBrZXlzdWJ0eXBlLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjk3LVxcdFxcdFxcdFxcdCAgIHU4IGN1cl9ta3ZwWzMyXSwgdTggYWx0X21rdnBbMzJdLCB1MzIgZmxhZ3MsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMwMC17XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzozMDE6XFx0Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqaDtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMwMi1cXHRpbnQgcmMgPSAtRU5PREVWO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzAzLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzA0OlxcdGggPSBwa2V5X2hhbmRsZXJfZ2V0X2tleXR5cGViYXNlZChrZXlzdWJ0eXBlKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMwNS1cXHRpZiAoaCBcXHUwMDI2XFx1MDAyNiBoLVxcdTAwM2VhcHFuc19mb3Jfa2V5dHlwZSkge1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zMDktXFx0fVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzEwOlxcdHBrZXlfaGFuZGxlcl9wdXQoaCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zMTEtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMxMy19XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzozMTQ6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfYXBxbnNfZm9yX2tleXR5cGUpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzE1LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzE2OnZvaWQgcGtleV9oYW5kbGVyX3JlcXVlc3RfbW9kdWxlcyh2b2lkKVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzE3LXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMxOC0jaWZkZWYgQ09ORklHX01PRFVMRVNcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjMxOTpcXHRzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHBrZXlfaGFuZGxlcl9tb2R1bGVzW10gPSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zMjAtI2lmIElTX01PRFVMRShDT05GSUdfUEtFWV9DQ0EpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMzNC1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjMzNTpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShwa2V5X2hhbmRsZXJfbW9kdWxlcyk7IGkrKykge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzM2OlxcdFxcdGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmg7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zMzctXFx0XFx0Ym9vbCBmb3VuZCA9IGZhbHNlO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNDEtXFx0XFx0XFx0aWYgKGgtXFx1MDAzZW1vZHVsZSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzQyOlxcdFxcdFxcdCAgICAhc3RyY21wKGgtXFx1MDAzZW1vZHVsZS1cXHUwMDNlbmFtZSwgcGtleV9oYW5kbGVyX21vZHVsZXNbaV0pKSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNDMtXFx0XFx0XFx0XFx0Zm91bmQgPSB0cnVlO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNDgtXFx0XFx0aWYgKCFmb3VuZCkge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzQ5OlxcdFxcdFxcdHByX2RlYnVnKFxcXCJyZXF1ZXN0X21vZHVsZSglcylcXFxcblxcXCIsIHBrZXlfaGFuZGxlcl9tb2R1bGVzW2ldKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjM1MDpcXHRcXHRcXHRyZXF1ZXN0X21vZHVsZShwa2V5X2hhbmRsZXJfbW9kdWxlc1tpXSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNTEtXFx0XFx0fVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNTQtfVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzU1OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX3JlcXVlc3RfbW9kdWxlcyk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNTYtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oPTE0NT1leHRlcm4gY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqcGtleV9hdHRyX2dyb3Vwc1tdO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0xNTAtXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoxNTE6c3RydWN0IHBrZXlfaGFuZGxlciB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0xNTItXFx0c3RydWN0IG1vZHVsZSAqbW9kdWxlO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0xOTItXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoxOTM6aW50IHBrZXlfaGFuZGxlcl9yZWdpc3RlcihzdHJ1Y3QgcGtleV9oYW5kbGVyICpoYW5kbGVyKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oOjE5NDppbnQgcGtleV9oYW5kbGVyX3VucmVnaXN0ZXIoc3RydWN0IHBrZXlfaGFuZGxlciAqaGFuZGxlcik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0xOTUtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTE5OS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oOjIwMDpjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpwa2V5X2hhbmRsZXJfZ2V0X2tleWJhc2VkKGNvbnN0IHU4ICprZXksIHUzMiBrZXlsZW4pO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg6MjAxOmNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKnBrZXlfaGFuZGxlcl9nZXRfa2V5dHlwZWJhc2VkKGVudW0gcGtleV9rZXlfdHlwZSBrdCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoyMDI6dm9pZCBwa2V5X2hhbmRsZXJfcHV0KGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmhhbmRsZXIpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjAzLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg6MjA0OmludCBwa2V5X2hhbmRsZXJfa2V5X3RvX3Byb3RrZXkoY29uc3Qgc3RydWN0IHBrZXlfYXBxbiAqYXBxbnMsIHNpemVfdCBucl9hcHFucyxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIwNS1cXHRcXHRcXHRcXHRjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMDctXFx0XFx0XFx0XFx0dTMyIHhmbGFncyk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoyMDg6aW50IHBrZXlfaGFuZGxlcl9zbG93cGF0aF9rZXlfdG9fcHJvdGtleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucyxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIwOS1cXHRcXHRcXHRcXHRcXHQgc2l6ZV90IG5yX2FwcW5zLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMTItXFx0XFx0XFx0XFx0XFx0IHUzMiAqcHJvdGtleXR5cGUsIHUzMiB4ZmxhZ3MpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg6MjEzOmludCBwa2V5X2hhbmRsZXJfZ2VuX2tleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucywgc2l6ZV90IG5yX2FwcW5zLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjE0LVxcdFxcdFxcdCB1MzIga2V5dHlwZSwgdTMyIGtleXN1YnR5cGUsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIxNi1cXHRcXHRcXHQgdTggKmtleWJ1ZiwgdTMyICprZXlidWZsZW4sIHUzMiAqa2V5aW5mbywgdTMyIHhmbGFncyk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoyMTc6aW50IHBrZXlfaGFuZGxlcl9jbHJfdG9fa2V5KGNvbnN0IHN0cnVjdCBwa2V5X2FwcW4gKmFwcW5zLCBzaXplX3QgbnJfYXBxbnMsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMTgtXFx0XFx0XFx0ICAgIHUzMiBrZXl0eXBlLCB1MzIga2V5c3VidHlwZSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjIyLVxcdFxcdFxcdCAgICB1MzIgeGZsYWdzKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oOjIyMzppbnQgcGtleV9oYW5kbGVyX3ZlcmlmeV9rZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIyNC1cXHRcXHRcXHQgICAgdTE2ICpjYXJkLCB1MTYgKmRvbSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjI2LVxcdFxcdFxcdCAgICB1MzIgeGZsYWdzKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oOjIyNzppbnQgcGtleV9oYW5kbGVyX2FwcW5zX2Zvcl9rZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbiwgdTMyIGZsYWdzLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjI4LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgcGtleV9hcHFuICphcHFucywgc2l6ZV90ICpucl9hcHFucyxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIyOS1cXHRcXHRcXHQgICAgICAgdTMyIHhmbGFncyk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoyMzA6aW50IHBrZXlfaGFuZGxlcl9hcHFuc19mb3Jfa2V5dHlwZShlbnVtIHBrZXlfa2V5X3R5cGUga3R5cGUsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMzEtXFx0XFx0XFx0XFx0ICAgdTggY3VyX21rdnBbMzJdLCB1OCBhbHRfbWt2cFszMl0sIHUzMiBmbGFncyxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjM3LSAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg6MjM4OnZvaWQgcGtleV9oYW5kbGVyX3JlcXVlc3RfbW9kdWxlcyh2b2lkKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIzOS1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYz01NTc9c3RhdGljIGludCBjY2Ffc2xvd3BhdGhfa2V5MnByb3RrZXkoY29uc3Qgc3RydWN0IHBrZXlfYXBxbiAqYXBxbnMsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfY2NhLmMtNTk1LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYzo1OTY6c3RhdGljIHN0cnVjdCBwa2V5X2hhbmRsZXIgY2NhX2hhbmRsZXIgPSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2NjYS5jLTU5Ny1cXHQubW9kdWxlXFx0XFx0XFx0ID0gVEhJU19NT0RVTEUsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfY2NhLmM9NjEzPXN0YXRpYyBpbnQgX19pbml0IHBrZXlfY2NhX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYy02MTUtXFx0LyogcmVnaXN0ZXIgdGhpcyBtb2R1bGUgYXMgcGtleSBoYW5kbGVyIGZvciBhbGwgdGhlIGNjYSBzdHVmZiAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYzo2MTY6XFx0cmV0dXJuIHBrZXlfaGFuZGxlcl9yZWdpc3RlcihcXHUwMDI2Y2NhX2hhbmRsZXIpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYy02MTctfVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2NjYS5jPTYyMj1zdGF0aWMgdm9pZCBfX2V4aXQgcGtleV9jY2FfZXhpdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2NjYS5jLTYyNC1cXHQvKiB1bnJlZ2lzdGVyIHRoaXMgbW9kdWxlIGFzIHBrZXkgaGFuZGxlciAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYzo2MjU6XFx0cGtleV9oYW5kbGVyX3VucmVnaXN0ZXIoXFx1MDAyNmNjYV9oYW5kbGVyKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfY2NhLmMtNjI2LX1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmM9NTA0PXN0YXRpYyBpbnQgZXAxMV9zbG93cGF0aF9rZXkycHJvdGtleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucyxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmMtNTQyLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmM6NTQzOnN0YXRpYyBzdHJ1Y3QgcGtleV9oYW5kbGVyIGVwMTFfaGFuZGxlciA9IHtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jLTU0NC1cXHQubW9kdWxlXFx0XFx0XFx0ID0gVEhJU19NT0RVTEUsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jPTU2MD1zdGF0aWMgaW50IF9faW5pdCBwa2V5X2VwMTFfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2VwMTEuYy01NjItXFx0LyogcmVnaXN0ZXIgdGhpcyBtb2R1bGUgYXMgcGtleSBoYW5kbGVyIGZvciBhbGwgdGhlIGVwMTEgc3R1ZmYgKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jOjU2MzpcXHRyZXR1cm4gcGtleV9oYW5kbGVyX3JlZ2lzdGVyKFxcdTAwMjZlcDExX2hhbmRsZXIpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmMtNTY0LX1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmM9NTY5PXN0YXRpYyB2b2lkIF9fZXhpdCBwa2V5X2VwMTFfZXhpdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2VwMTEuYy01NzEtXFx0LyogdW5yZWdpc3RlciB0aGlzIG1vZHVsZSBhcyBwa2V5IGhhbmRsZXIgKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jOjU3MjpcXHRwa2V5X2hhbmRsZXJfdW5yZWdpc3RlcihcXHUwMDI2ZXAxMV9oYW5kbGVyKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jLTU3My19XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfcGNrbW8uYz00MzU9c3RhdGljIGludCBwa2V5X3Bja21vX3ZlcmlmeWtleShjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3Bja21vLmMtNDQyLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jOjQ0MzpzdGF0aWMgc3RydWN0IHBrZXlfaGFuZGxlciBwY2ttb19oYW5kbGVyID0ge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jLTQ0NC1cXHQubW9kdWxlXFx0XFx0ICAgICAgPSBUSElTX01PRFVMRSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jPTQ1Nj1zdGF0aWMgaW50IF9faW5pdCBwa2V5X3Bja21vX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jLTQ2OS1cXHQvKiByZWdpc3RlciB0aGlzIG1vZHVsZSBhcyBwa2V5IGhhbmRsZXIgZm9yIGFsbCB0aGUgcGNrbW8gc3R1ZmYgKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfcGNrbW8uYzo0NzA6XFx0cmV0dXJuIHBrZXlfaGFuZGxlcl9yZWdpc3RlcihcXHUwMDI2cGNrbW9faGFuZGxlcik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3Bja21vLmMtNDcxLX1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jPTQ3Nj1zdGF0aWMgdm9pZCBfX2V4aXQgcGtleV9wY2ttb19leGl0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfcGNrbW8uYy00NzgtXFx0LyogdW5yZWdpc3RlciB0aGlzIG1vZHVsZSBhcyBwa2V5IGhhbmRsZXIgKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfcGNrbW8uYzo0Nzk6XFx0cGtleV9oYW5kbGVyX3VucmVnaXN0ZXIoXFx1MDAyNnBja21vX2hhbmRsZXIpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jLTQ4MC19XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0xNy0vKlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjE4OiAqIFdyYXBwZXIgYXJvdW5kIHBrZXlfaGFuZGxlcl9nZW5fa2V5KCkgd2hpY2ggZGVhbHMgd2l0aCB0aGVcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0xOS0gKiBFTk9ERVYgcmV0dXJuIGNvZGUgYW5kIHRoZW4gdHJpZXMgdG8gZW5mb3JjZSBhIHBrZXkgaGFuZGxlclxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMjEtICovXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6MjI6c3RhdGljIGludCBzeXNfcGtleV9oYW5kbGVyX2dlbl9rZXkodTMyIGtleXR5cGUsIHUzMiBrZXlzdWJ0eXBlLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTIzLVxcdFxcdFxcdFxcdCAgICB1MzIga2V5Yml0c2l6ZSwgdTMyIGZsYWdzLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMjctXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6Mjg6XFx0cmMgPSBwa2V5X2hhbmRsZXJfZ2VuX2tleShOVUxMLCAwLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTI5LVxcdFxcdFxcdFxcdCAga2V5dHlwZSwga2V5c3VidHlwZSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTMyLVxcdGlmIChyYyA9PSAtRU5PREVWKSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6MzM6XFx0XFx0cGtleV9oYW5kbGVyX3JlcXVlc3RfbW9kdWxlcygpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjM0OlxcdFxcdHJjID0gcGtleV9oYW5kbGVyX2dlbl9rZXkoTlVMTCwgMCxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0zNS1cXHRcXHRcXHRcXHRcXHQgIGtleXR5cGUsIGtleXN1YnR5cGUsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYz00OT1zdGF0aWMgc3NpemVfdCBwa2V5X3Byb3RrZXlfYWVzX2F0dHJfcmVhZCh1MzIga2V5dHlwZSwgYm9vbCBpc194dHMsIGNoYXIgKmJ1ZixcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTY3LVxcdHByb3RrZXkubGVuID0gc2l6ZW9mKHByb3RrZXkucHJvdGtleSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6Njg6XFx0cmMgPSBzeXNfcGtleV9oYW5kbGVyX2dlbl9rZXkoa2V5dHlwZSwgUEtFWV9UWVBFX1BST1RLRVksIDAsIDAsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtNjktXFx0XFx0XFx0XFx0ICAgICAgcHJvdGtleS5wcm90a2V5LCBcXHUwMDI2cHJvdGtleS5sZW4sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy04MS1cXHRcXHRwcm90a2V5LmxlbiA9IHNpemVvZihwcm90a2V5LnByb3RrZXkpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjgyOlxcdFxcdHJjID0gc3lzX3BrZXlfaGFuZGxlcl9nZW5fa2V5KGtleXR5cGUsIFBLRVlfVFlQRV9QUk9US0VZLCAwLCAwLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTgzLVxcdFxcdFxcdFxcdFxcdCAgICAgIHByb3RrZXkucHJvdGtleSwgXFx1MDAyNnByb3RrZXkubGVuLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM9MTA2PXN0YXRpYyBzc2l6ZV90IHBrZXlfcHJvdGtleV9hZXNfeHRzX2F0dHJfcmVhZCh1MzIga2V5dHlwZSwgY2hhciAqYnVmLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMTMxLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjEzMjpcXHRyYyA9IHN5c19wa2V5X2hhbmRsZXJfZ2VuX2tleShrZXl0eXBlLCBQS0VZX1RZUEVfUFJPVEtFWSwgMCwgMCxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0xMzMtXFx0XFx0XFx0XFx0ICAgICAgdC1cXHUwMDNlcHJvdGtleSwgXFx1MDAyNnByb3RsZW4sIFxcdTAwMjZwcm90dHlwZSk7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYz0xNDg9c3RhdGljIHNzaXplX3QgcGtleV9wcm90a2V5X2htYWNfYXR0cl9yZWFkKHUzMiBrZXl0eXBlLCBjaGFyICpidWYsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0xNzMtXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6MTc0OlxcdHJjID0gc3lzX3BrZXlfaGFuZGxlcl9nZW5fa2V5KGtleXR5cGUsIFBLRVlfVFlQRV9QUk9US0VZLCAwLCAwLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTE3NS1cXHRcXHRcXHRcXHQgICAgICB0LVxcdTAwM2Vwcm90a2V5LCBcXHUwMDI2cHJvdGxlbiwgXFx1MDAyNnByb3R0eXBlKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jPTMwOD1zdGF0aWMgc3NpemVfdCBwa2V5X2NjYWRhdGFfYWVzX2F0dHJfcmVhZCh1MzIga2V5dHlwZSwgYm9vbCBpc194dHMsIGNoYXIgKmJ1ZixcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTMyMS1cXHRidWZsZW4gPSBzaXplb2Yoc2Vja2V5LVxcdTAwM2VzZWNrZXkpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjMyMjpcXHRyYyA9IHN5c19wa2V5X2hhbmRsZXJfZ2VuX2tleShrZXl0eXBlLCBQS0VZX1RZUEVfQ0NBX0RBVEEsIDAsIDAsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMzIzLVxcdFxcdFxcdFxcdCAgICAgIHNlY2tleS1cXHUwMDNlc2Vja2V5LCBcXHUwMDI2YnVmbGVuLCBOVUxMKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTMyOS1cXHRcXHRidWZsZW4gPSBzaXplb2Yoc2Vja2V5LVxcdTAwM2VzZWNrZXkpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjMzMDpcXHRcXHRyYyA9IHN5c19wa2V5X2hhbmRsZXJfZ2VuX2tleShrZXl0eXBlLCBQS0VZX1RZUEVfQ0NBX0RBVEEsIDAsIDAsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMzMxLVxcdFxcdFxcdFxcdFxcdCAgICAgIHNlY2tleS1cXHUwMDNlc2Vja2V5LCBcXHUwMDI2YnVmbGVuLCBOVUxMKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jPTQxOT1zdGF0aWMgc3NpemVfdCBwa2V5X2NjYWNpcGhlcl9hZXNfYXR0cl9yZWFkKGVudW0gcGtleV9rZXlfc2l6ZSBrZXliaXRzLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtNDMzLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjQzNDpcXHRyYyA9IHN5c19wa2V5X2hhbmRsZXJfZ2VuX2tleShwa2V5X2Flc19iaXRzaXplX3RvX2tleXR5cGUoa2V5Yml0cyksXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtNDM1LVxcdFxcdFxcdFxcdCAgICAgIFBLRVlfVFlQRV9DQ0FfQ0lQSEVSLCBrZXliaXRzLCAwLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtNDQyLVxcdFxcdGJ1ZiArPSBDQ0FDSVBIRVJUT0tFTlNJWkU7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6NDQzOlxcdFxcdHJjID0gc3lzX3BrZXlfaGFuZGxlcl9nZW5fa2V5KFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTQ0NC1cXHRcXHRcXHRwa2V5X2Flc19iaXRzaXplX3RvX2tleXR5cGUoa2V5Yml0cyksXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYz01MzQ9c3RhdGljIHNzaXplX3QgcGtleV9lcDExX2Flc19hdHRyX3JlYWQoZW51bSBwa2V5X2tleV9zaXplIGtleWJpdHMsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy01NDgtXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6NTQ5OlxcdHJjID0gc3lzX3BrZXlfaGFuZGxlcl9nZW5fa2V5KHBrZXlfYWVzX2JpdHNpemVfdG9fa2V5dHlwZShrZXliaXRzKSxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy01NTAtXFx0XFx0XFx0XFx0ICAgICAgUEtFWV9UWVBFX0VQMTFfQUVTLCBrZXliaXRzLCAwLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtNTU3LVxcdFxcdGJ1ZiArPSBNQVhFUDExQUVTS0VZQkxPQlNJWkU7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6NTU4OlxcdFxcdHJjID0gc3lzX3BrZXlfaGFuZGxlcl9nZW5fa2V5KFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTU1OS1cXHRcXHRcXHRwa2V5X2Flc19iaXRzaXplX3RvX2tleXR5cGUoa2V5Yml0cyksXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0yMzM9c3RhdGljIGludCB1dl92ZXJpZnlrZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI3MS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoyNzI6c3RhdGljIHN0cnVjdCBwa2V5X2hhbmRsZXIgdXZfaGFuZGxlciA9IHtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yNzMtXFx0Lm1vZHVsZVxcdFxcdFxcdCA9IFRISVNfTU9EVUxFLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9Mjg0PXN0YXRpYyBpbnQgX19pbml0IHBrZXlfdXZfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjk3LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjI5ODpcXHRyYyA9IHBrZXlfaGFuZGxlcl9yZWdpc3RlcihcXHUwMDI2dXZfaGFuZGxlcik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjk5LVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTMwOD1zdGF0aWMgdm9pZCBfX2V4aXQgcGtleV91dl9leGl0KHZvaWQpXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMzA5LXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzozMTA6XFx0cGtleV9oYW5kbGVyX3VucmVnaXN0ZXIoXFx1MDAyNnV2X2hhbmRsZXIpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTMxMS1cXHRtdXRleF9sb2NrKFxcdTAwMjZ1dl9saXN0X211dGV4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTI6MzguMTQzNzM1Nzc1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1MDAzOTM3MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhY2hpbmcgYHV2X2ZpbmRfc2VjcmV0YCBmcm9tIFVzZXJzcGFjZSB2aWEgYC9kZXYvcGtleWAgaW9jdGxzKipcblxuT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdHJhY2luZyB0aGUgcGF0aCB0byBgdXZfZmluZF9zZWNyZXRgLiBJdCdzIGNhbGxlZCBmcm9tIGBnZXRfc2VjcmV0X21ldGFkYXRhYCwgd2hpY2ggaXMgaXRzZWxmIGNhbGxlZCBmcm9tIHR3byBwbGFjZXM6IGByZXRyaWV2ZV9zZWNyZXRgIGFuZCBgdXZfdmVyaWZ5a2V5YC4gSSBrbm93IHRoYXQgYHV2X3ZlcmlmeWtleWAgaXMgcmVnaXN0ZXJlZCBhcyBgLnZlcmlmeV9rZXlgIHdpdGhpbiBgdXZfaGFuZGxlcmAsIHdoaWNoIGlzIGluaXRpYWxpemVkIGR1cmluZyBgcGtleV91dl9pbml0YC4gQW5kIGBwa2V5X3V2X2luaXRgIGlzIHRoZSBtb2R1bGUgaW5pdCBmdW5jdGlvbiBmb3IgYHBrZXlfdXZgLlxuXG5TbywgYHV2X3ZlcmlmeWtleWAgaXMgdWx0aW1hdGVseSBjYWxsZWQgYnkgYHBrZXlfaGFuZGxlcl92ZXJpZnlfa2V5YC4gVGhhdCwgaW4gdHVybiwgaXMgdHJpZ2dlcmVkIGJ5IGBwa2V5X2lvY3RsX3ZlcmlmeWtleWAsIGBwa2V5X2lvY3RsX3ZlcmlmeWtleTJgLCBhbmQgYHBrZXlfaW9jdGxfdmVyaWZ5cHJvdGtgLiBBaGEhIFRob3NlIGFyZSBpb2N0bHMgb24gYC9kZXYvcGtleWAuIFRoYXQncyB0aGUgbGluay4gKipZZXMsIHRoaXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCB0aG9zZSBgL2Rldi9wa2V5YCBpb2N0bHMuKipcblxuTm93IHRoZSBjcml0aWNhbCBxdWVzdGlvbjogY2FuIHRoaXMgYmUgcmVhY2hlZCBpbiBRRU1VPyBJIGtub3cgdGhlIHMzOTB4IGFyY2hpdGVjdHVyZSBnZXRzIGF0dGVudGlvbiBmcm9tIHN5emthbGxlci4gVGhhdCdzIGEgZ29vZCBzaWduLiBBbmQsIGxvb2tpbmcgYXQgdGhlIGNvZGUsIEkgc2VlIHRoYXQgYHV2X2ZpbmRfc2VjcmV0YCBpcyBsb2NhdGVkIGluIGBhcmNoL3MzOTAva2VybmVsL3V2LmNgLiBUaGVyZWZvcmUsIHRoZSBhcmNoaXRlY3R1cmUgdGhhdCB1c2VzIHRoaXMgaXMgczM5MHguXG5cbkxldCdzIHF1aWNrbHkgY2hlY2sgd2hldGhlciBgQ09ORklHX1BLRVlfVVZgIGlzIHJlcXVpcmVkIGluIHRoZSBjb25maWd1cmF0aW9uLiBUaGF0J2xsIGJlIGEga2V5IHBhcnQgb2YgZGV0ZXJtaW5pbmcgdGhlIG92ZXJhbGwgZXhwb3N1cmUgdG8gZXhwbG9pdGF0aW9uIGluIHRoZSB2YXJpb3VzIGJ1aWxkIHNldHVwcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3MDcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTI6NDMuNjQ0MTMyNDc5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjIwNzA2NjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQS0VZX1VWXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvY3J5cHRvL0tjb25maWc9MTM3PWNvbmZpZyBQS0VZX1BDS01PXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTE1Ny1cXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnOjE1ODpjb25maWcgUEtFWV9VVlxcbmRyaXZlcnMvY3J5cHRvL0tjb25maWctMTU5LVxcdHRyaXN0YXRlIFxcXCJQS0VZIFVWIHN1cHBvcnQgaGFuZGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTI6NDUuMjY0ODQ2OTkyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MTIxODIzNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIEtjb25maWcgT3B0aW9ucyBmb3IgUEtFWV9VVioqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgS2NvbmZpZyBkZWZpbml0aW9uIGZvciBgUEtFWV9VVmAuIE15IGluc3RpbmN0IHNheXMgaXQnbGwgYmUgaW4gZWl0aGVyIHRoZSBzMzkwIGNyeXB0byBkcml2ZXJzIG9yIHRoZSBnZW5lcmljIGNyeXB0byBzZWN0aW9uLiBHaXZlbiBpdHMgbGlrZWx5IGZ1bmN0aW9uLCB0aGUgczM5MCBwYXRoIG1pZ2h0IGJlIGEgYmV0dGVyIGJldCBzaW5jZSBpdCdzIHByb2JhYmx5IHJlbGF0ZWQgdG8gaGFyZHdhcmUtc3BlY2lmaWMga2V5IG1hbmFnZW1lbnQuIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgYGRyaXZlcnMvczM5MC9jcnlwdG8vS2NvbmZpZ2AgZmlyc3QuIElmIGl0J3Mgbm90IHRoZXJlLCBJJ2xsIG1vdmUgb24gYW5kIGltbWVkaWF0ZWx5IGxvb2sgaW4gYGRyaXZlcnMvY3J5cHRvL0tjb25maWdgLiBUaGF0J3MgdGhlIGxvZ2ljYWwgcHJvZ3Jlc3Npb24uIEZpbmRpbmcgdGhlIGV4YWN0IGxvY2F0aW9uIGFuZCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgYFBLRVlfVVZgIGlzIGtleSBmb3Igd2hhdGV2ZXIgSSdtIHRyb3VibGVzaG9vdGluZyBvciBjb25maWd1cmluZy4gTGV0J3Mgc2VlIHdoYXQgd2UgZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc0MTAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODoxMjo0OS4wNzcwMzIxOVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM1NTAxMjYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQS0VZX1VWXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTI6NDkuMTIwNTkyNjA1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MTMzOTU2MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHVuZm9sZGVkOlxuXG4qKkRlYnVnZ2luZyBLY29uZmlnIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gY2hhc2luZyBkb3duIHRoaXMgYFBLRVlfUENLTU9gIGNvbmZpZ3VyYXRpb24gaXNzdWUuIEl0IGxvb2tzIGxpa2UgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gaXMgcG9pbnRpbmcgbWUgdG8gYGRyaXZlcnMvY3J5cHRvL0tjb25maWdgLCB3aGljaCBzZWVtcyBsb2dpY2FsLiBXYWl0IGEgbWludXRl4oCmIHRoZSBvdXRwdXQgaW5kaWNhdGVzIGBkcml2ZXJzL2NyeXB0by9LY29uZmlnPTEzNz1jb25maWcgUEtFWV9QQ0tNT2AsIGNvbmZpcm1pbmcgdGhhdCBsb2NhdGlvbiBpcyByZWxldmFudC4gQnV0IHNvbWV0aGluZyBmZWVscyBvZmYuIERpZG4ndCBJIGp1c3QgdHJ5IHRvIGxvb2sgaW50byBgZHJpdmVycy9zMzkwL2NyeXB0by9LY29uZmlnYD8gQW5kIHRoYXQgKmRpZG4ndCogZXhpc3QsIHJpZ2h0PyBPa2F5LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gbG9va2luZyBpbiB0aGUgcmlnaHQgcGxhY2UsIHNvIG5vdyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgbG9jYXRpb24gb3IganVzdCB2ZXJpZnkgaXQncyB0aGUgY29ycmVjdCBLY29uZmlnIGZpbGUuIExldCdzIHJldmlzaXQgYm90aCB0aG9zZSBLY29uZmlnIGxvY2F0aW9ucy4gR290dGEgbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXhlZCBzb21ldGhpbmcgdXAsIGdpdmVuIHRoYXQgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBvbmUgc2VlbXMgYWJzZW50LiBUaGlzIGZlZWxzIGxpa2UgaXQgbWlnaHQgYmUgYSBzdWJ0bGUgYnV0IGNyaXRpY2FsIGRpZmZlcmVuY2UgaW4gaG93IHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkL2NvbmZpZ3VyZWQgYmFzZWQgb24gdGhlIGFyY2hpdGVjdHVyZSwgd2hpY2ggaXMgaW1wb3J0YW50IHRvIGtlZXAgaW4gbWluZC4gSSBob3BlIEkgY2FuIHJlc29sdmUgdGhpcyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTc2ODEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODoxMjo1NC4wMzM5OTA3NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9jcnlwdG8vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNTA6XFx0XFx0ICBpcyBlc3BlY2lhbGx5IHVzZWQgZHVyaW5nIHNlbGYgdGVzdCBvZiBwcm90ZWN0ZWQga2V5IGNpcGhlcnMgbGlrZVxcbiAxNTE6XFx0XFx0ICBQQUVTIGJ1dCB0aGUgQ0NBIGFuZCBFUDExIGhhbmRsZXIgcHJvdmlkZSBhbHRlcm5hdGUgd2F5cyB0b1xcbiAxNTI6XFx0XFx0ICBnZW5lcmF0ZSBwcm90ZWN0ZWQga2V5cyBmcm9tIGNsZWFyIGtleSB2YWx1ZXMuXFxuIDE1MzpcXHRcXG4gMTU0OlxcdFxcdCAgSWYgeW91IGhhdmUgc2VsZWN0ZWQgdGhlIFBLRVkgb3B0aW9uIHRoZW4geW91IHNob3VsZCBhbHNvIGVuYWJsZVxcbiAxNTU6XFx0XFx0ICB0aGlzIG9wdGlvbiB1bmxlc3MgeW91IGFyZSBzdXJlIHlvdSBuZXZlciBuZWVkIHRvIGRlcml2ZSBwcm90ZWN0ZWRcXG4gMTU2OlxcdFxcdCAga2V5cyBmcm9tIGNsZWFyIGtleSB2YWx1ZXMgZGlyZWN0bHkgdmlhIFBDS01PLlxcbiAxNTc6XFx0XFxuIDE1ODpcXHRjb25maWcgUEtFWV9VVlxcbiAxNTk6XFx0XFx0dHJpc3RhdGUgXFxcIlBLRVkgVVYgc3VwcG9ydCBoYW5kbGVyXFxcIlxcbiAxNjA6XFx0XFx0ZGVwZW5kcyBvbiBQS0VZXFxuIDE2MTpcXHRcXHRkZXBlbmRzIG9uIFMzOTBfVVZfVUFQSVxcbiAxNjI6XFx0XFx0aGVscFxcbiAxNjM6XFx0XFx0ICBUaGlzIGlzIHRoZSBQS0VZIFVsdHJhdmlzb3Igc3VwcG9ydCBoYW5kbGVyIGZvciBkZXJpdmluZyBwcm90ZWN0ZWRcXG4gMTY0OlxcdFxcdCAga2V5cyBmcm9tIHNlY3JldHMgc3RvcmVkIHdpdGhpbiB0aGUgVWx0cmF2aXNvciAoVVYpLlxcbiAxNjU6XFx0XFxuIDE2NjpcXHRcXHQgIFRoaXMgbW9kdWxlIHdvcmtzIHRvZ2V0aGVyIHdpdGggdGhlIFVWIGRldmljZSBhbmQgc3VwcG9ydHMgdGhlXFxuIDE2NzpcXHRcXHQgIHJldHJpZXZhbCBvZiBwcm90ZWN0ZWQga2V5cyBmcm9tIHNlY3JldHMgc3RvcmVkIHdpdGhpbiB0aGVcXG4gMTY4OlxcdFxcdCAgVVYgZmlybXdhcmUgbGF5ZXIuIFRoaXMgc2VydmljZSBpcyBvbmx5IGF2YWlsYWJsZSB3aXRoaW5cXG4gMTY5OlxcdFxcdCAgYSBwcm90ZWN0ZWQgZXhlY3V0aW9uIGd1ZXN0IGFuZCB0aHVzIHRoaXMgbW9kdWxlIHdpbGwgZmFpbCB1cG9uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjEyOjU0LjAzNDA5NzEyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzMTkzODYwMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqU2VjdXJlIEV4ZWN1dGlvbiBhbmQgU3l6a2FsbGVyIG9uIHMzOTB4KipcblxuT2theSwgc28gSSBzZWUgdGhpcyBtZXNzYWdlOiBcIlRoaXMgc2VydmljZSBpcyBvbmx5IGF2YWlsYWJsZSB3aXRoaW4gYSBwcm90ZWN0ZWQgZXhlY3V0aW9uIGd1ZXN0LFwiIHdoaWNoIGltbWVkaWF0ZWx5IHJhaXNlcyBhIHF1ZXN0aW9uOiBkb2VzIFFFTVUsIHRoZSB2aXJ0dWFsIG1hY2hpbmUgSSdtIHByb2JhYmx5IGRlYWxpbmcgd2l0aCBoZXJlLCBhY3R1YWxseSBzdXBwb3J0IHNlY3VyZSBleGVjdXRpb24/IEl0IHNvdW5kcyBsaWtlIGEgc2VjdXJlIGV4ZWN1dGlvbiBndWVzdCwgb3IgU2VjdXJlIEV4ZWN1dGlvbiwgaXMgYSBwcmVyZXF1aXNpdGUuXG5cbkdvb2QsIGl0IHNlZW1zIFFFTVUgKmRvZXMqIHN1cHBvcnQgczM5MHggU2VjdXJlIEV4ZWN1dGlvbiwgc3BlY2lmaWNhbGx5IHVzaW5nICdwcm90dmlydCcuIFRoYXQncyBhIHBvaW50IGluIHRoZSByaWdodCBkaXJlY3Rpb24uIEJ1dCBob2xkIG9uLCB0aGUgcmVhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHN5emthbGxlciBpcyAqY29uZmlndXJlZCogdG8gcnVuIHMzOTB4IGluIHRoaXMgU2VjdXJlIEV4ZWN1dGlvbiBtb2RlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHN5emthbGxlcidzIHNldHVwIGlzIGNvbXBhdGlibGUuXG5cbkxldCdzIHJlLWV4YW1pbmUgdGhlIHByb21wdCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBoaW50cywgaXQgc3RhdGVzIHRoYXQgXCJDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmVcIi4gU2luY2UgUUVNVSAqY2FuKiBzdXBwb3J0IHMzOTB4IFNlY3VyZSBFeGVjdXRpb24sIHRoYXQgY29kZSBwYXRoIGlzIGluZGVlZCBwb3NzaWJsZSB0byByZWFjaC5cblxuT2theSwgc2luY2UgUUVNVSAqc3VwcG9ydHMqIHMzOTB4IFNlY3VyZSBFeGVjdXRpb24gYW5kIHRoZSBcIkNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHNcIiBsaW5lIGNhbiBiZSBjb25zaWRlcmVkIGFzIHRoZSBjYXZlYXQsIGl0ICppcyogcG9zc2libGUgdG8gcmVhY2guIExldCdzIHNlZSBpZiB0aGVyZSBpcyBhbnkgZXZpZGVuY2Ugb2YgdGhlIGFiaWxpdHkgdG8gY2FsbCBgdXZfZmluZF9zZWNyZXRgIGluIGBhcmNoL3MzOTAva2VybmVsL3V2LmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODM3OCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjEzOjAwLjM1MzQ4NjQ0OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3MzOTAva2VybmVsL3V2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzcwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzcwOlxcdH1cXG4gNzcxOlxcdFxcbiA3NzI6XFx0LyoqXFxuIDc3MzpcXHQgKiB1dl9maW5kX3NlY3JldCgpIC0gc2VhcmNoIHNlY3JldCBtZXRhZGF0YSBmb3IgYSBnaXZlbiBzZWNyZXQgaWQuXFxuIDc3NDpcXHQgKiBAc2VjcmV0X2lkOiBzZWFyY2ggcGF0dGVybi5cXG4gNzc1OlxcdCAqIEBsaXN0OiBlcGhlbWVyYWwgYnVmZmVyIHNwYWNlXFxuIDc3NjpcXHQgKiBAc2VjcmV0OiBvdXRwdXQgZGF0YSwgY29udGFpbmluZyB0aGUgc2VjcmV0J3MgbWV0YWRhdGEuXFxuIDc3NzpcXHQgKlxcbiA3Nzg6XFx0ICogQ29udGV4dDogbWlnaHQgc2xlZXAuXFxuIDc3OTpcXHQgKi9cXG4gNzgwOlxcdGludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXFxuIDc4MTpcXHRcXHRcXHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QsXFxuIDc4MjpcXHRcXHRcXHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbV9oZHIgKnNlY3JldClcXG4gNzgzOlxcdHtcXG4gNzg0OlxcdFxcdHUxNiBzdGFydF9pZHg7XFxuIDc4NTpcXHRcXHR1MTYgbGlzdF9yYztcXG4gNzg2OlxcdFxcdGludCByZXQ7XFxuIDc4NzpcXHRcXG4gNzg4OlxcdFxcdGxpc3QtXFx1MDAzZW5leHRfc2VjcmV0X2lkeCA9IDA7XFxuIDc4OTpcXHRcXG4gNzkwOlxcdFxcdGRvIHtcXG4gNzkxOlxcdFxcdFxcdHN0YXJ0X2lkeCA9IGxpc3QtXFx1MDAzZW5leHRfc2VjcmV0X2lkeDtcXG4gNzkyOlxcdFxcdFxcdHV2X2xpc3Rfc2VjcmV0cyhsaXN0LCBzdGFydF9pZHgsIFxcdTAwMjZsaXN0X3JjLCBOVUxMKTtcXG4gNzkzOlxcdFxcdFxcdGlmIChsaXN0X3JjICE9IFVWQ19SQ19FWEVDVVRFRCBcXHUwMDI2XFx1MDAyNiBsaXN0X3JjICE9IFVWQ19SQ19NT1JFX0RBVEEpIHtcXG4gNzk0OlxcdFxcdFxcdFxcdGlmIChsaXN0X3JjID09IFVWQ19SQ19JTlZfQ01EKVxcbiA3OTU6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIDc5NjpcXHRcXHRcXHRcXHRlbHNlXFxuIDc5NzpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTztcXG4gNzk4OlxcdFxcdFxcdH1cXG4gNzk5OlxcdFxcdFxcdHJldCA9IGZpbmRfc2VjcmV0X2luX3BhZ2Uoc2VjcmV0X2lkLCBsaXN0LCBzZWNyZXQpO1xcbiA4MDA6XFx0XFx0XFx0aWYgKHJldCA9PSAwKVxcbiA4MDE6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gODAyOlxcdFxcdH0gd2hpbGUgKGxpc3RfcmMgPT0gVVZDX1JDX01PUkVfREFUQSBcXHUwMDI2XFx1MDAyNiBzdGFydF9pZHggXFx1MDAzYyBsaXN0LVxcdTAwM2VuZXh0X3NlY3JldF9pZHgpO1xcbiA4MDM6XFx0XFxuIDgwNDpcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4gODA1OlxcdH1cXG4gODA2OlxcdEVYUE9SVF9TWU1CT0xfR1BMKHV2X2ZpbmRfc2VjcmV0KTtcXG4gODA3OlxcdFxcbiA4MDg6XFx0LyoqXFxuIDgwOTpcXHQgKiB1dl9yZXRyaWV2ZV9zZWNyZXQoKSAtIGdldCB0aGUgc2VjcmV0IHZhbHVlIGZvciB0aGUgc2VjcmV0IGluZGV4LlxcbiA4MTA6XFx0ICogQHNlY3JldF9pZHg6IFNlY3JldCBpbmRleCBmb3Igd2hpY2ggdGhlIHNlY3JldCBzaG91bGQgYmUgcmV0cmlldmVkLlxcbiA4MTE6XFx0ICogQGJ1ZjogQnVmZmVyIHRvIHN0b3JlIHJldHJpZXZlZCBzZWNyZXQuXFxuIDgxMjpcXHQgKiBAYnVmX3NpemU6IFNpemUgb2YgdGhlIGJ1ZmZlci4gVGhlIGNvcnJlY3QgYnVmZmVyIHNpemUgaXMgcmVwb3J0ZWQgYXMgcGFydCBvZlxcbiA4MTM6XFx0ICogdGhlIHJlc3VsdCBmcm9tIGB1dl9nZXRfc2VjcmV0X21ldGFkYXRhYC5cXG4gODE0OlxcdCAqXFxuIDgxNTpcXHQgKiBDYWxscyB0aGUgUmV0cmlldmUgU2VjcmV0IFVWQyBhbmQgdHJhbnNsYXRlcyB0aGUgVVYgcmV0dXJuIGNvZGUgaW50byBhbiBlcnJuby5cXG4gODE2OlxcdCAqXFxuIDgxNzpcXHQgKiBDb250ZXh0OiBtaWdodCBzbGVlcC5cXG4gODE4OlxcdCAqXFxuIDgxOTpcXHQgKiBSZXR1cm46XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjEzOjAwLjM1MzU3ODQ1OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDIwMjM4MDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IFVWIFNlY3JldCBTZWFyY2ggRml4KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgdGlnaHRlbmluZyB1cCB0aGUgc2VjcmV0IHNlYXJjaGluZyBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgYHV2X2ZpbmRfc2VjcmV0YCBhbmQgYGZpbmRfc2VjcmV0X2luX3BhZ2VgIGZ1bmN0aW9ucy4gSXQgbG9va3MgbGlrZSB3ZSdyZSBmaXhpbmcgYSBidWcgcmVsYXRlZCB0byBob3cgYHN0YXJ0X2lkeGAgaXMgYmVpbmcgaGFuZGxlZCwgYW5kIHRoZXJlJ3MgYSBwcm9ibGVtIHdpdGggYGZpbmRfc2VjcmV0X2luX3BhZ2VgIHVzaW5nIGBsaXN0LVx1MDAzZXRvdGFsX251bV9zZWNyZXRzYCB3aGVuIGl0IHNob3VsZCBoYXZlIGJlZW4gdXNpbmcgYGxpc3QtXHUwMDNlbnVtX3NlY3Jfc3RvcmVkYC4gQSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZSwgd2hpY2ggaXMgZ29vZCDigJMgaXQgbWVhbnMgd2UncmUgYWRkcmVzc2luZyBhIGtub3duIGlzc3VlLlxuXG5UaGUgaW50ZXJlc3RpbmcgYml0IGlzIHdoZXJlIHRoaXMgY29kZSByZXNpZGVzIOKAkyBpdCdzIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBgL2Rldi9wa2V5YCBpb2N0bHMgc3BlY2lmaWNhbGx5IG9uIHMzOTB4IHN5c3RlbXMuIFRoaXMgdGllcyBpdCB0byB0aGUgaGFyZHdhcmUga2V5IHN1cHBvcnQsIHNvIHdlIG5lZWQgdG8gYmUgZXh0cmEgY2FyZWZ1bCB0byBub3QgYnJlYWsgYW55dGhpbmcuIFRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgbmVlZGVkIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHkgYXJlIGBQS0VZX1VWYCwgYFMzOTBfVVZfVUFQSWAsIGFuZCBgUEtFWWAuIFdlJ3JlIGdvaW5nIHRvIG5lZWQgdG8gdmVyaWZ5IGhvdyBgUEtFWWAgaXMgY29uZmlndXJlZCBpbiBvdXIgZW52aXJvbm1lbnQuIEknbGwgdGFrZSBhIGxvb2sgYXQgdGhlIGBQS0VZYCBjb25maWd1cmF0aW9uIHJpZ2h0IGF3YXkgdG8gYXNzZXNzIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NzIxLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTM6MDQuNzczODE4NjI1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDU4ODEzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUEtFWVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2NyeXB0by9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvY3J5cHRvL0tjb25maWc9Njc9Y29uZmlnIFpDUllQVFxcbi0tXFxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZy03Ny1cXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnOjc4OmNvbmZpZyBQS0VZXFxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZy03OS1cXHR0cmlzdGF0ZSBcXFwiS2VybmVsIEFQSSBmb3IgcHJvdGVjdGVkIGtleSBoYW5kbGluZ1xcXCJcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL0tjb25maWctMTA0LVxcbmRyaXZlcnMvY3J5cHRvL0tjb25maWc6MTA1OmNvbmZpZyBQS0VZX0NDQVxcbmRyaXZlcnMvY3J5cHRvL0tjb25maWctMTA2LVxcdHRyaXN0YXRlIFxcXCJQS0VZIENDQSBzdXBwb3J0IGhhbmRsZXJcXFwiXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTEyMC1cXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnOjEyMTpjb25maWcgUEtFWV9FUDExXFxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZy0xMjItXFx0dHJpc3RhdGUgXFxcIlBLRVkgRVAxMSBzdXBwb3J0IGhhbmRsZXJcXFwiXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTEzNi1cXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnOjEzNzpjb25maWcgUEtFWV9QQ0tNT1xcbmRyaXZlcnMvY3J5cHRvL0tjb25maWctMTM4LVxcdHRyaXN0YXRlIFxcXCJQS0VZIFBDS01PIHN1cHBvcnQgaGFuZGxlclxcXCJcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL0tjb25maWctMTU3LVxcbmRyaXZlcnMvY3J5cHRvL0tjb25maWc6MTU4OmNvbmZpZyBQS0VZX1VWXFxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZy0xNTktXFx0dHJpc3RhdGUgXFxcIlBLRVkgVVYgc3VwcG9ydCBoYW5kbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODoxMzowNC44MTg0MTUwNFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzk2ODIyMDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGVwZW5kZW5jaWVzIGFuZCBLZXkgQ29uc2lkZXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCByaWdodCBvZmYgdGhlIGJhdCwgSSBrbm93IEknbSBkZWFsaW5nIHdpdGggYFBLRVlgIGFuZCBgUEtFWV9VVmAuIFRoYXQncyB0aGUgY29yZSBvZiB0aGUgcHJvYmxlbS4gQnV0LCBob2xkIG9uIGEgc2Vjb25kLiBJIGhhdmUgYSBodW5jaC4uLiBkb2Vzbid0IGBQS0VZYCBvZnRlbiBoYXZlIGEgdGlnaHQgbGluayB3aXRoIGBaQ1JZUFRgPyBJJ2QgYmV0dGVyIGRvdWJsZS1jaGVjayB0aG9zZSBkZXBlbmRlbmNpZXMgYmVmb3JlIEkgbW92ZSBhbnkgZnVydGhlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgc2NvcGUgaGVyZSwgYW5kIHRoYXQgc3RhcnRzIHdpdGgga25vd2luZyBob3cgYFBLRVlgIHJlbGllcyBvbiBvdGhlciBtb2R1bGVzIG9yIGNvbXBvbmVudHMuIExldCdzIGRpZyBpbnRvIGBQS0VZYCdzIGRlcGVuZGVuY2llcyBhbmQgY29uZmlybSBteSBpbml0aWFsIHRob3VnaHQuIFRoYXQgZGVwZW5kZW5jeSBjaGVjayBpcyBlc3NlbnRpYWwgdG8gYnVpbGRpbmcgYSByZWxpYWJsZSBzb2x1dGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA0NDMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODoxMzowOC42MTUyMzk3NzlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9jcnlwdG8vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA3OCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA3ODpcXHRjb25maWcgUEtFWVxcbiAgNzk6XFx0XFx0dHJpc3RhdGUgXFxcIktlcm5lbCBBUEkgZm9yIHByb3RlY3RlZCBrZXkgaGFuZGxpbmdcXFwiXFxuICA4MDpcXHRcXHRkZXBlbmRzIG9uIFMzOTBcXG4gIDgxOlxcdFxcdGhlbHBcXG4gIDgyOlxcdFxcdCAgV2l0aCB0aGlzIG9wdGlvbiBlbmFibGVkIHRoZSBwa2V5IGtlcm5lbCBtb2R1bGVzIHByb3ZpZGUgYW4gQVBJXFxuICA4MzpcXHRcXHQgIGZvciBjcmVhdGlvbiBhbmQgaGFuZGxpbmcgb2YgcHJvdGVjdGVkIGtleXMuIE90aGVyIHBhcnRzIG9mIHRoZVxcbiAgODQ6XFx0XFx0ICBrZXJuZWwgb3IgdXNlcnNwYWNlIGFwcGxpY2F0aW9ucyBtYXkgdXNlIHRoZXNlIGZ1bmN0aW9ucy5cXG4gIDg1OlxcdFxcbiAgODY6XFx0XFx0ICBUaGUgcHJvdGVjdGVkIGtleSBzdXBwb3J0IGlzIGRpc3RyaWJ1dGVkIGludG86XFxuICA4NzpcXHRcXHQgIC0gQSBwa2V5IGJhc2UgYW5kIEFQSSBrZXJuZWwgbW9kdWxlIChwa2V5LmtvKSB3aGljaCBvZmZlcnMgdGhlXFxuICA4ODpcXHRcXHQgICAgaW5mcmFzdHJ1Y3R1cmUgZm9yIHRoZSBwa2V5IGhhbmRsZXIga2VybmVsIG1vZHVsZXMsIHRoZSBpb2N0bFxcbiAgODk6XFx0XFx0ICAgIGFuZCB0aGUgc3lzZnMgQVBJIGFuZCB0aGUgaW4ta2VybmVsIEFQSSB0byB0aGUgY3J5cHRvIGNpcGhlclxcbiAgOTA6XFx0XFx0ICAgIGltcGxlbWVudGF0aW9ucyB1c2luZyBwcm90ZWN0ZWQga2V5LlxcbiAgOTE6XFx0XFx0ICAtIEEgcGtleSBwY2ttbyBrZXJuZWwgbW9kdWxlIChwa2V5LXBja21vLmtvKSB3aGljaCBpcyBhdXRvbWF0aWNhbGx5XFxuICA5MjpcXHRcXHQgICAgbG9hZGVkIHdoZW4gcGNrbW8gc3VwcG9ydCAodGhhdCBpcyBnZW5lcmF0aW9uIG9mIHByb3RlY3RlZCBrZXlzXFxuICA5MzpcXHRcXHQgICAgZnJvbSBjbGVhciBrZXkgdmFsdWVzKSBpcyBhdmFpbGFibGUuXFxuICA5NDpcXHRcXHQgIC0gQSBwa2V5IENDQSBrZXJuZWwgbW9kdWxlIChwa2V5LWNjYS5rbykgd2hpY2ggaXMgYXV0b21hdGljYWxseVxcbiAgOTU6XFx0XFx0ICAgIGxvYWRlZCB3aGVuIGEgQ0VYIGNyeXB0byBjYXJkIGlzIGF2YWlsYWJsZS5cXG4gIDk2OlxcdFxcdCAgLSBBIHBrZXkgRVAxMSBrZXJuZWwgbW9kdWxlIChwa2V5LWVwMTEua28pIHdoaWNoIGlzIGF1dG9tYXRpY2FsbHlcXG4gIDk3OlxcdFxcdCAgICBsb2FkZWQgd2hlbiBhIENFWCBjcnlwdG8gY2FyZCBpcyBhdmFpbGFibGUuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjEzOjA4LjYxNTMyNTcxOVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjM5NTYxMDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhlc2UgZGVwZW5kZW5jaWVzLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duIGltbWVkaWF0ZSB0aG91Z2h0cyBhcyBhbiBleHBlcnQ6XG5cbioqRGVwZW5kZW5jeSBEZWVwIERpdmUqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgYFBLRVlgICphYnNvbHV0ZWx5KiBsZWFucyBvbiBgUzM5MGAg4oCTIHRoYXQncyB0aGUgYmFzZSByZXF1aXJlbWVudC4gVGhlbiwgdGhpbmdzIGdldCBhIGJpdCBtb3JlIGludHJpY2F0ZSB3aXRoIGBQS0VZX1VWYC4gSXQncyBwdWxsaW5nIGluIGJvdGggYFBLRVlgIGFuZCBgUzM5MF9VVl9VQVBJYC4gSXQgbG9va3MgbGlrZSBzb21lIGtpbmQgb2YgVXNlci1Nb2RlIFZhcmlhbnQuIFNvLCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBzaG91bGQgcmVhbGx5IGRpZyBpbnRvIHRoZSBkZXRhaWxzIG9mIGBTMzkwX1VWX1VBUElgIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLiBVbmRlcnN0YW5kaW5nIHRoYXQgb25lIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGludGVycGxheSBvZiB0aGVzZSBvdGhlciBjb21wb25lbnRzLiBUaW1lIHRvIGludmVzdGlnYXRlIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTAzOCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTM6MTEuODU0ODg5NTM2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjU1MDkzNjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTMzkwX1VWX1VBUElcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zMzkwL2NoYXIvS2NvbmZpZz03NT1jb25maWcgSE1DX0RSVlxcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvS2NvbmZpZy04Ny1cXG5kcml2ZXJzL3MzOTAvY2hhci9LY29uZmlnOjg4OmNvbmZpZyBTMzkwX1VWX1VBUElcXG5kcml2ZXJzL3MzOTAvY2hhci9LY29uZmlnLTg5LVxcdGRlZl90cmlzdGF0ZSBtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjEzOjEzLjUwOTk4NzE5NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjA2MTU1NTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgUzM5MCBVViBVQVBJIENvbmZpZ3VyYXRpb24gT3B0aW9uKipcblxuT2theSwgc28gYFMzOTBfVVZfVUFQSWAgaXMgZGVmaW5lZCB3aXRoaW4gYGRyaXZlcnMvczM5MC9jaGFyL0tjb25maWdgLiBUaW1lIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLCBmaWd1cmUgb3V0IHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgb3IgZmVhdHVyZXMgaGluZ2Ugb24gdGhpcyBvbmUuIFdoYXQgb3RoZXIgb3B0aW9ucyBkb2VzIHRoaXMgZW5hYmxlIG9yIGRpc2FibGU/IFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBhIGRlZXBlciBkaXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTM4NSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjEzOjE2LjcxNjE0NDk5NVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3MzOTAvY2hhci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg4LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDg4OlxcdGNvbmZpZyBTMzkwX1VWX1VBUElcXG4gIDg5OlxcdFxcdGRlZl90cmlzdGF0ZSBtXFxuICA5MDpcXHRcXHRwcm9tcHQgXFxcIlVsdHJhdmlzb3IgdXNlcnNwYWNlIEFQSVxcXCJcXG4gIDkxOlxcdFxcdGRlcGVuZHMgb24gUzM5MFxcbiAgOTI6XFx0XFx0aGVscFxcbiAgOTM6XFx0XFx0ICBTZWxlY3RpbmcgZXhwb3NlcyBwYXJ0cyBvZiB0aGUgVVYgaW50ZXJmYWNlIHRvIHVzZXJzcGFjZVxcbiAgOTQ6XFx0XFx0ICBieSBwcm92aWRpbmcgYSBtaXNjIGNoYXJhY3RlciBkZXZpY2UgYXQgL2Rldi91di5cXG4gIDk1OlxcdFxcdCAgVXNpbmcgSU9DVExzIG9uZSBjYW4gaW50ZXJhY3Qgd2l0aCB0aGUgVVYuXFxuICA5NjpcXHRcXHQgIFRoZSBkZXZpY2UgaXMgb25seSBhdmFpbGFibGUgaWYgdGhlIFVsdHJhdmlzb3JcXG4gIDk3OlxcdFxcdCAgRmFjaWxpdHkgKDE1OCkgaXMgcHJlc2VudC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTM6MTYuNzE2MjEyMzM1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwNDExMzE5MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFMzOTBfVVZfVUFQSSBDb25maWd1cmF0aW9uIGFuZCBLZXkgVmVyaWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBTMzkwX1VWX1VBUElgIHNpdHVhdGlvbiwgYW5kIGl0IGxvb2tzIGxpa2UgaXQncyBpbmhlcmVudGx5IHRpZWQgdG8gdGhlIGBTMzkwYCBhcmNoaXRlY3R1cmUsIHdoaWNoIG1ha2VzIHNlbnNlLiBUbyBnZXQgdGhpcyBmdW5jdGlvbmFsaXR5IGVuYWJsZWQsIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBgUEtFWWAsIGBQS0VZX1VWYCwgYW5kIG9mIGNvdXJzZSBgUzM5MF9VVl9VQVBJYCBhcmUgYWxsIGNvcnJlY3RseSBjb25maWd1cmVkLiBJIHNob3VsZCBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlIGZvbGxvd2luZyBrZXkgZnVuY3Rpb25zOiBgdXZfZmluZF9zZWNyZXRgLCBgdXZfdmVyaWZ5a2V5YCwgYW5kIGBnZXRfc2VjcmV0X21ldGFkYXRhYC5cblxuQWhhLCBob2xkIG9uIGEgc2Vjb25kLi4uIGlzIGB1dl92ZXJpZnlrZXlgICpzdGF0aWMqIGluIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuY2A/IFRoYXQgY291bGQgaGF2ZSBpbXBsaWNhdGlvbnMgZm9yIGl0cyBhY2Nlc3NpYmlsaXR5IG9yIGhvdyBpdCdzIGJlaW5nIHVzZWQuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBpcyBpbmRlZWQgdGhlIGNhc2UuIExldCBtZSBkb3VibGUtY2hlY2sgdGhhdCBgdXZfdmVyaWZ5a2V5YCBpcywgaW4gZmFjdCwgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQncyBhIGNydWNpYWwgZGV0YWlsIHRoYXQgd2lsbCBpbmZsdWVuY2UgbXkgZnVydGhlciBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTcwOSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjEzOjIxLjc1NzM0Njk4NloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0NjM1NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXZfdmVyaWZ5a2V5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTE5MD1zdGF0aWMgaW50IHV2X2tleTJwcm90a2V5KGNvbnN0IHN0cnVjdCBwa2V5X2FwcW4gKl9hcHFucyBfX2Fsd2F5c191bnVzZWQsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yMzItXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6MjMzOnN0YXRpYyBpbnQgdXZfdmVyaWZ5a2V5KGNvbnN0IHU4ICprZXksIHUzMiBrZXlsZW4sXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjM0LVxcdFxcdFxcdHUxNiAqX2NhcmQgX19hbHdheXNfdW51c2VkLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9MjcyPXN0YXRpYyBzdHJ1Y3QgcGtleV9oYW5kbGVyIHV2X2hhbmRsZXIgPSB7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yNzctXFx0LmtleV90b19wcm90a2V5XFx0XFx0ID0gdXZfa2V5MnByb3RrZXksXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6Mjc4OlxcdC52ZXJpZnlfa2V5XFx0XFx0ID0gdXZfdmVyaWZ5a2V5LFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI3OS19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODoxMzoyMS44MDI4MTk1MTJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ3ODEwNzcxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyBLZXkgVmVyaWZpY2F0aW9uIGluIHRoZSBzMzkwIENyeXB0byBEcml2ZXIqKlxuXG5SaWdodCwgc28gSSdtIGZvY3VzaW5nIG9uIGtleSB2ZXJpZmljYXRpb24gd2l0aGluIHRoZSBzMzkwIGNyeXB0byBkcml2ZXIuIEZpcnN0IG9ic2VydmF0aW9uOiB0aGUgYHV2X3ZlcmlmeWtleWAgZnVuY3Rpb24gaXMgaW5kZWVkIHN0YXRpYywgY29uZmlybWluZyB0aGF0IGl0cyBzY29wZSBpcyBsaW1pdGVkIHRvIGl0cyBjb21waWxhdGlvbiB1bml0LiBOb3csIHRoZSBuZXh0IGVsZW1lbnQgdG8gY29uc2lkZXIgaXMgdGhhdCB0aGUgYHV2X2ZpbmRfc2VjcmV0YCBmdW5jdGlvbiBpcyBleHBvcnRlZCwgaW5kaWNhdGluZyBpdHMgdmlzaWJpbGl0eSBhbmQgcG90ZW50aWFsIHVzZSBvdXRzaWRlIG9mIGl0cyBpbW1lZGlhdGUgZGVmaW5pbmcgbW9kdWxlLlxuXG5NeSBwcmltYXJ5IGludGVyZXN0IGxpZXMgaW4gdGhlIGlvY3RsLWJhc2VkIHZlcmlmaWNhdGlvbiBtZXRob2RzIHVzZWQuIFNvLCBJIG5lZWQgdG8gdGhvcm91Z2hseSBleGFtaW5lIGBwa2V5X2lvY3RsX3ZlcmlmeWtleWAsIGBwa2V5X2lvY3RsX3ZlcmlmeWtleTJgLCBhbmQgYHBrZXlfaW9jdGxfdmVyaWZ5cHJvdGtgLiBUaGVzZSBsaWtlbHkgaGFuZGxlIHRoZSBjb3JlIGtleSB2ZXJpZmljYXRpb24gbG9naWMgdGhyb3VnaCB0aGUgaW9jdGwgaW50ZXJmYWNlLCBhbmQgdGhleSBhcmUgbG9jYXRlZCB3aXRoaW4gdGhlIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmNgIGZpbGUuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGVzZSBmdW5jdGlvbnMgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBpbnRlcmFjdCB3aXRoIGB1dl92ZXJpZnlrZXlgIGFuZCBgdXZfZmluZF9zZWNyZXRgIGlmIGF0IGFsbCwgdG8gZGV0ZXJtaW5lIHRoZSBvdmVyYWxsIGtleSB2ZXJpZmljYXRpb24gYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjM3MywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjEzOjI2LjI4MDkzMDM4MVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAxNzk4MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGtleV9pb2N0bF92ZXJpZnlrZXlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz0yNTM9c3RhdGljIGludCBwa2V5X2lvY3RsX3NrZXkycGtleShzdHJ1Y3QgcGtleV9za2V5MnBrZXkgX191c2VyICp1c3ApXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMjc1LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzoyNzY6c3RhdGljIGludCBwa2V5X2lvY3RsX3ZlcmlmeWtleShzdHJ1Y3QgcGtleV92ZXJpZnlrZXkgX191c2VyICp1dmspXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTI3Ny17XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9NDQyPXN0YXRpYyBpbnQgcGtleV9pb2N0bF9jbHIyc2VjazIoc3RydWN0IHBrZXlfY2xyMnNlY2syIF9fdXNlciAqdWNzKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTUwMi1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6NTAzOnN0YXRpYyBpbnQgcGtleV9pb2N0bF92ZXJpZnlrZXkyKHN0cnVjdCBwa2V5X3ZlcmlmeWtleTIgX191c2VyICp1dmspXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTUwNC17XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9NzAzPXN0YXRpYyBsb25nIHBrZXlfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNzI3LVxcdGNhc2UgUEtFWV9WRVJJRllLRVk6XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjcyODpcXHRcXHRyYyA9IHBrZXlfaW9jdGxfdmVyaWZ5a2V5KChzdHJ1Y3QgcGtleV92ZXJpZnlrZXkgX191c2VyICopYXJnKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNzI5LVxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTc0NS1cXHRjYXNlIFBLRVlfVkVSSUZZS0VZMjpcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6NzQ2OlxcdFxcdHJjID0gcGtleV9pb2N0bF92ZXJpZnlrZXkyKChzdHJ1Y3QgcGtleV92ZXJpZnlrZXkyIF9fdXNlciAqKWFyZyk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTc0Ny1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTM6MjYuMzMxMTE0OTU2WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MzQ5MjY5OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQS2V5IERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gdGhpcyBQS2V5IGRyaXZlciwgc3BlY2lmaWNhbGx5IHRvIHVuZGVyc3RhbmQgaG93IGtleSB2ZXJpZmljYXRpb24gd29ya3MuIEZyb20gd2hhdCBJIHNlZSwgYHBrZXlfaW9jdGxfdmVyaWZ5a2V5YCBhbmQgYHBrZXlfaW9jdGxfdmVyaWZ5a2V5MmAgYXJlIGRlZmluZWQgYXMgc3RhdGljLCBzbyB0aGV5J3JlIHByb2JhYmx5IG5vdCB0aGUgbWFpbiBlbnRyeSBwb2ludHMgSSBuZWVkIHRvIGZvY3VzIG9uLiBNeSBhdHRlbnRpb24gbmVlZHMgdG8gc2hpZnQgdG8gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBuYW1lbHkgYHV2X2ZpbmRfc2VjcmV0YCBhbmQgYHBrZXlfdW5sb2NrZWRfaW9jdGxgLiBIb2xkIG9uLCBgcGtleV91bmxvY2tlZF9pb2N0bGAuLi4gdGhhdCdzIHRoZSBpb2N0bCBoYW5kbGVyIGZvciBgL2Rldi9wa2V5YCwgaXNuJ3QgaXQ/IEJpbmdvLiBUaGF0J3MgdGhlIGtleS4gTm93LCB0byB0cmFjZSB0aGUgcGF0aCwgSSBuZWVkIHRvIHNlZSB3aGF0J3MgYWN0dWFsbHkgKmRvaW5nKiB0aGUgdmVyaWZpY2F0aW9uLiBJJ2xsIGNoZWNrIGBwa2V5X2hhbmRsZXJfdmVyaWZ5X2tleWAgaW4gYGRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmNgLiBUaGF0IHNob3VsZCBiZSB0aGUgdmVyaWZpY2F0aW9uIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzIyOCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODoxMzozMS4wNjYwNDQwOThaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODYxNDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBrZXlfaGFuZGxlcl92ZXJpZnlfa2V5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYz0yNTg9RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfY2xyX3RvX2tleSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNTktXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyNjA6aW50IHBrZXlfaGFuZGxlcl92ZXJpZnlfa2V5KGNvbnN0IHU4ICprZXksIHUzMiBrZXlsZW4sXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNjEtXFx0XFx0XFx0ICAgIHUxNiAqY2FyZCwgdTE2ICpkb20sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI3Ni19XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyNzc6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfdmVyaWZ5X2tleSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNzgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjEzOjMxLjExMDkxMTEzNFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzM1Mzg2MDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgS2V5IEhhbmRsaW5nIFdvcmtmbG93KipcblxuQWxyaWdodCwgc28gYHBrZXlfaGFuZGxlcl92ZXJpZnlfa2V5YCBpcyBhY3R1YWxseSBleHBvcnRlZCwgd2hpY2ggaXMgYSBrZXkgb2JzZXJ2YXRpb24uIE5vdyB0aGF0IEkga25vdyAqdGhhdCosIGxldCdzIHNlZSBob3cgdGhhdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZS4gTXkgbmV4dCBtb3ZlIGlzIHRvIHplcm8gaW4gb24gYHBrZXlfaGFuZGxlcl9rZXlfdG9fcHJvdGtleWAuIFVuZGVyc3RhbmRpbmcgaG93IHRoZSBrZXkgcmVwcmVzZW50YXRpb24gdHJhbnNsYXRlcyB0byBhIHByb3RlY3RlZCBrZXkgaXMgY3J1Y2lhbCBmb3IgZmlndXJpbmcgb3V0IHRoZSBzZWN1cml0eSBpbXBsaWNhdGlvbnMgaGVyZS4gSSBuZWVkIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cgYW5kIHVuZGVyc3RhbmQgaWYgdGhpcyB0cmFuc2xhdGlvbiBpbnRyb2R1Y2VzIGFueSB2dWxuZXJhYmlsaXRpZXMgb3Igd2Vha25lc3NlcyBpbiB0aGUgb3ZlcmFsbCBrZXkgbWFuYWdlbWVudCBwcm9jZXNzLiBUaGlzIGlzIHdoZXJlIHRoZSBkZXZpbCBpcyBpbiB0aGUgZGV0YWlscy4gSSBzdXNwZWN0IHRoYXQgdGhlIHBvdGVudGlhbCBzZWN1cml0eSBmbGF3LCBtYXkgbGllIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNzg1LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTM6MzQuNDQ2MzAwMDZaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NjIxMzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBrZXlfaGFuZGxlcl9rZXlfdG9fcHJvdGtleVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM9MTU2PUVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX3B1dCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xNTctXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxNTg6aW50IHBrZXlfaGFuZGxlcl9rZXlfdG9fcHJvdGtleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucywgc2l6ZV90IG5yX2FwcW5zLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTU5LVxcdFxcdFxcdFxcdGNvbnN0IHU4ICprZXksIHUzMiBrZXlsZW4sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE3NS19XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxNzY6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfa2V5X3RvX3Byb3RrZXkpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTc3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODoxMzozNC40OTM5MzEyNjZaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODUzMjg1MzA0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgU2VjcmV0IEhhbmRsaW5nIFBhdGNoKipcblxuT2theSwgc28gYHBrZXlfaGFuZGxlcl9rZXlfdG9fcHJvdGtleWAgaXMgYWxzbyBleHBvcnRlZCwgdGhhdCdzIGdvb2QgdG8gbm90ZS4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSBjZW50ZXJlZCBhcm91bmQgYHV2X2ZpbmRfc2VjcmV0YCwgd2hpY2ggaXMgdGhlIGZ1bmN0aW9uIHRoYXQgZ290IG1vZGlmaWVkLCBhbG9uZyB3aXRoIHRoZSBzdGF0aWMgZnVuY3Rpb24gYGZpbmRfc2VjcmV0X2luX3BhZ2VgLiBTbywgYHV2X2ZpbmRfc2VjcmV0YCBpcyBkZWZpbml0ZWx5IHRoZSBwcmltYXJ5IHN5bWJvbCB0byBmb2N1cyBvbiwgYnV0IEknbGwga2VlcCBgcGtleV9oYW5kbGVyX3ZlcmlmeV9rZXlgIGFuZCBgcGtleV9oYW5kbGVyX2tleV90b19wcm90a2V5YCBpbiBtaW5kIGFzIHBvdGVudGlhbGx5IHJlbGF0ZWQuIEkndmUgY29uZmlybWVkIHRoYXQgdGhlc2UgYXJlIHRoZSBvbmx5IGZ1bmN0aW9ucyB0b3VjaGVkIGJ5IHRoaXMgcGF0Y2gsIHdoaWNoIHJlaW5mb3JjZXMgbXkgaW5pdGlhbCBodW5jaC5cblxuSGVyZSdzIG15IHN1bW1hcnkgb2YgdGhlIHNpdHVhdGlvbjogdGhpcyBpcyB3b3J0aCBmdXp6aW5nLiBUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYHV2X2ZpbmRfc2VjcmV0YCDigJMgYSBjcml0aWNhbCBvbmUsIGFjdHVhbGx5LCB3aGVyZSBgc3RhcnRfaWR4YCB3YXMgYmVpbmcgdXBkYXRlZCBpbmNvcnJlY3RseSwgYW5kIGBmaW5kX3NlY3JldF9pbl9wYWdlYCB3YXMgdXNpbmcgdGhlIHdyb25nIGxpbWl0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHMzOTB4IHVsdHJhdmlzb3Igc2VjcmV0IGhhbmRsaW5nIGNvZGUsIGFuZCBpdCdzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIHRoZSBgL2Rldi9wa2V5YCBpb2N0bHMuXG5cblRoZSBwcmltYXJ5IGZvY3VzIHN5bWJvbHMgSSBzaG91bGQga2VlcCBpbiBtaW5kIGFyZSBgdXZfZmluZF9zZWNyZXRgLCBhcyB3ZWxsIGFzIGBwa2V5X2hhbmRsZXJfdmVyaWZ5X2tleWAgYW5kIGBwa2V5X2hhbmRsZXJfa2V5X3RvX3Byb3RrZXlgLlxuXG5UaGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgdG8gZW5hYmxlIGZvciB0aGlzIGZ1enppbmcgYXJlIGBQS0VZYCwgYFBLRVlfVVZgLCBhbmQgYFMzOTBfVVZfVUFQSWAuIExldCBtZSBkb3VibGUtY2hlY2suLi4geWVwLCBgUEtFWV9VVmAgaXMgdHJpc3RhdGUuIFNvIHRoYXQncyBjb3JyZWN0LlxuXG5MZXQncyBxdWlja2x5IGNoZWNrIHRoZSBkZXBlbmRlbmNpZXM6IGBQS0VZYCBkZXBlbmRzIG9uIGBTMzkwYCwgYFBLRVlfVVZgIGRlcGVuZHMgb24gYFBLRVlgIGFuZCBgUzM5MF9VVl9VQVBJYCwgYW5kIGBTMzkwX1VWX1VBUElgIGRlcGVuZHMgb24gYFMzOTBgLiBUaGVzZSB0aHJlZSBjb25maWd1cmF0aW9ucyBzZWVtIHN1ZmZpY2llbnQgdG8gZW5hYmxlIHRoZSByZWxldmFudCBmdW5jdGlvbmFsaXR5LCBzbyB0aGF0IGNoZWNrcyBvdXQuIEFscmlnaHQsIHRoaXMgbG9va3MgbGlrZSBhIGdvb2QgcGF0aCB0byB0YWtlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDI0MywiT3V0cHV0VG9rZW5zIjoxNTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTM6NDMuMDI2Nzg3MzY3WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzUwNDQwOTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBLRVlcIixcbiAgICBcIlBLRVlfVVZcIixcbiAgICBcIlMzOTBfVVZfVUFQSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInV2X2ZpbmRfc2VjcmV0XCIsXG4gICAgXCJwa2V5X2hhbmRsZXJfdmVyaWZ5X2tleVwiLFxuICAgIFwicGtleV9oYW5kbGVyX2tleV90b19wcm90a2V5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYHV2X2ZpbmRfc2VjcmV0YCB3aGVyZSBgc3RhcnRfaWR4YCB3YXMgaW5jb3JyZWN0bHkgdXBkYXRlZCBhbmQgYGZpbmRfc2VjcmV0X2luX3BhZ2VgIHVzZWQgdGhlIHdyb25nIGxpbWl0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHMzOTB4IHVsdHJhdmlzb3Igc2VjcmV0IGhhbmRsaW5nIGNvZGUsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgYC9kZXYvcGtleWAgaW9jdGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBLRVlcIixcbiAgICBcIlBLRVlfVVZcIixcbiAgICBcIlMzOTBfVVZfVUFQSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInV2X2ZpbmRfc2VjcmV0XCIsXG4gICAgXCJwa2V5X2hhbmRsZXJfdmVyaWZ5X2tleVwiLFxuICAgIFwicGtleV9oYW5kbGVyX2tleV90b19wcm90a2V5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYHV2X2ZpbmRfc2VjcmV0YCB3aGVyZSBgc3RhcnRfaWR4YCB3YXMgaW5jb3JyZWN0bHkgdXBkYXRlZCBhbmQgYGZpbmRfc2VjcmV0X2luX3BhZ2VgIHVzZWQgdGhlIHdyb25nIGxpbWl0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHMzOTB4IHVsdHJhdmlzb3Igc2VjcmV0IGhhbmRsaW5nIGNvZGUsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgYC9kZXYvcGtleWAgaW9jdGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODoxMzo0My4xMDE4Mzc2NVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMyOTY5MjEyMDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTM6NDMuMTAyMzYyMTFaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTMyOTY4NjgzODk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgdHdvIGlzc3VlczpcXG4xLiBBbiBvdXQtb2YtYm91bmRzIHJlYWQgaW4gYGZpbmRfc2VjcmV0X2luX3BhZ2UoKWAuIFRoZSBsb29wIHByZXZpb3VzbHkgdXNlZCBgbGlzdC1cXHUwMDNldG90YWxfbnVtX3NlY3JldHNgIGluc3RlYWQgb2YgYGxpc3QtXFx1MDAzZW51bV9zZWNyX3N0b3JlZGAuIFNpbmNlIGBsaXN0LVxcdTAwM2VzZWNyZXRzYCBpcyBhIGZpeGVkLXNpemUgYXJyYXkgb2YgODUgZWxlbWVudHMsIGlmIGB0b3RhbF9udW1fc2VjcmV0c2AgZXhjZWVkcyA4NSwgdGhlIGxvb3AgcmVhZHMgcGFzdCB0aGUgZW5kIG9mIHRoZSBgbGlzdGAgc3RydWN0dXJlICh3aGljaCBpcyBleGFjdGx5IG9uZSBwYWdlIGluIHNpemUpLiBUaGlzIGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHJlYWQgdGhhdCBpcyByZWxpYWJseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTi5cXG4yLiBBIGxvZ2ljIGJ1ZyBpbiBgdXZfZmluZF9zZWNyZXQoKWAgd2hlcmUgdGhlIGxvb3AgY29uZGl0aW9uIGBzdGFydF9pZHggXFx1MDAzYyBsaXN0LVxcdTAwM2VuZXh0X3NlY3JldF9pZHhgIHdhcyBhbHdheXMgZmFsc2UgYmVjYXVzZSBgc3RhcnRfaWR4YCB3YXMgYXNzaWduZWQgYGxpc3QtXFx1MDAzZW5leHRfc2VjcmV0X2lkeGAgaW1tZWRpYXRlbHkgcHJpb3IgdG8gdGhlIGNoZWNrLiBUaGUgZml4IGNvcnJlY3RseSBpbml0aWFsaXplcyBhbmQgdXBkYXRlcyBgc3RhcnRfaWR4YCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsb29wLlxcblxcblRoZSBgbGlzdGAgc3RydWN0dXJlIHBhc3NlZCB0byBgdXZfZmluZF9zZWNyZXQoKWAgaXMgZnVsbHkgemVyb2VkIGJlZm9yZSB1c2UgKHZpYSBgbWVtc2V0KHV2X2xpc3QsIDAsIHNpemVvZigqdXZfbGlzdCkpYCBpbiBgZ2V0X3NlY3JldF9tZXRhZGF0YSgpYCkuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcywgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZSBpbnRyb2R1Y2VkIG9yIGZpeGVkIGJ5IHRoaXMgcGF0Y2guIFN0YW5kYXJkIEtBU0FOIGlzIHBlcmZlY3RseSBzdWl0ZWQgdG8gY2F0Y2ggdGhlIG91dC1vZi1ib3VuZHMgcmVhZCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDU2N2VmYWM4NzJlMmMzM2NhODk3MDg0NDIwMzhmYjYxN2FkYWMyZmJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxODoxMjoxNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdXYuYyBiL2FyY2gvczM5MC9rZXJuZWwvdXYuY1xuaW5kZXggYTI4NGY5OGQ5NzE2OC4uZTcwYWNhZDA5Y2Q1ZiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rZXJuZWwvdXYuY1xuKysrIGIvYXJjaC9zMzkwL2tlcm5lbC91di5jXG5AQCAtNzYwLDcgKzc2MCw3IEBAIHN0YXRpYyBpbnQgZmluZF9zZWNyZXRfaW5fcGFnZShjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG4ge1xuIFx0dTE2IGk7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBsaXN0LVx1MDAzZXRvdGFsX251bV9zZWNyZXRzOyBpKyspIHtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGxpc3QtXHUwMDNlbnVtX3NlY3Jfc3RvcmVkOyBpKyspIHtcbiBcdFx0aWYgKG1lbWNtcChzZWNyZXRfaWQsIGxpc3QtXHUwMDNlc2VjcmV0c1tpXS5pZCwgVVZfU0VDUkVUX0lEX0xFTikgPT0gMCkge1xuIFx0XHRcdCpzZWNyZXQgPSBsaXN0LVx1MDAzZXNlY3JldHNbaV0uaGRyO1xuIFx0XHRcdHJldHVybiAwO1xuQEAgLTc4MSwxMSArNzgxLDE0IEBAIGludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG4gXHRcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqbGlzdCxcbiBcdFx0ICAgc3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW1faGRyICpzZWNyZXQpXG4ge1xuLVx0dTE2IHN0YXJ0X2lkeCA9IDA7XG4rXHR1MTYgc3RhcnRfaWR4O1xuIFx0dTE2IGxpc3RfcmM7XG4gXHRpbnQgcmV0O1xuIFxuK1x0bGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHggPSAwO1xuK1xuIFx0ZG8ge1xuK1x0XHRzdGFydF9pZHggPSBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeDtcbiBcdFx0dXZfbGlzdF9zZWNyZXRzKGxpc3QsIHN0YXJ0X2lkeCwgXHUwMDI2bGlzdF9yYywgTlVMTCk7XG4gXHRcdGlmIChsaXN0X3JjICE9IFVWQ19SQ19FWEVDVVRFRCBcdTAwMjZcdTAwMjYgbGlzdF9yYyAhPSBVVkNfUkNfTU9SRV9EQVRBKSB7XG4gXHRcdFx0aWYgKGxpc3RfcmMgPT0gVVZDX1JDX0lOVl9DTUQpXG5AQCAtNzk2LDcgKzc5OSw2IEBAIGludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG4gXHRcdHJldCA9IGZpbmRfc2VjcmV0X2luX3BhZ2Uoc2VjcmV0X2lkLCBsaXN0LCBzZWNyZXQpO1xuIFx0XHRpZiAocmV0ID09IDApXG4gXHRcdFx0cmV0dXJuIHJldDtcbi1cdFx0c3RhcnRfaWR4ID0gbGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHg7XG4gXHR9IHdoaWxlIChsaXN0X3JjID09IFVWQ19SQ19NT1JFX0RBVEEgXHUwMDI2XHUwMDI2IHN0YXJ0X2lkeCBcdTAwM2MgbGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHgpO1xuIFxuIFx0cmV0dXJuIC1FTk9FTlQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODoxMzo0My4xMDIzNjI5WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyNjg4MTk5OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2ggdG8gYGFyY2gvczM5MC9rZXJuZWwvdXYuY2AqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgYXJjaC9zMzkwL2tlcm5lbC91di5jYCwgYW5kIGl0IGFwcGVhcnMgdG8gYmUgZm9jdXNlZCBvbiBzb21lIG1vZGlmaWNhdGlvbnMgcmVsYXRlZCB0byBzZWNyZXQgaGFuZGxpbmcgd2l0aGluIHRoYXQgYXJjaGl0ZWN0dXJlLiBTcGVjaWZpY2FsbHksIEkgc2VlIGNoYW5nZXMgd2l0aGluIHRoZSBgZmluZF9zZWNyZXRfaW5fcGFnZWAgYW5kIGB1dl9maW5kX3NlY3JldGAgZnVuY3Rpb25zLlxuXG5GaXJzdCwgdGhlIGxvb3AgYm91bmQgaW4gYGZpbmRfc2VjcmV0X2luX3BhZ2VgIGhhcyBiZWVuIGFkanVzdGVkLiBJdCB1c2VkIHRvIGl0ZXJhdGUgdXAgdG8gYGxpc3QtXHUwMDNldG90YWxfbnVtX3NlY3JldHNgLCBidXQgbm93IGl0IHNlZW1zIHRvIHN0b3AgYXQgYGxpc3QtXHUwMDNlbnVtX3NlY3Jfc3RvcmVkYC4gVGhhdCdzIGludGVyZXN0aW5nOyBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhvc2UgdHdvIGZpZWxkcyB3aXRoaW4gdGhlIGBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RgIHN0cnVjdHVyZSB0byBncmFzcCB0aGUgc2lnbmlmaWNhbmNlIG9mIHRoaXMgY2hhbmdlLiBJcyB0aGlzIGFib3V0IG9wdGltaXphdGlvbiwgb3IgaXMgdGhlcmUgYSBmdW5jdGlvbmFsIHJlYXNvbj8gUGVyaGFwcyBgbnVtX3NlY3Jfc3RvcmVkYCByZXByZXNlbnRzIHRoZSB2YWxpZCBlbnRyaWVzLCB3aGlsZSBgdG90YWxfbnVtX3NlY3JldHNgIGlzIGEgYnVmZmVyIHNpemU/XG5cblRoZW4sIGluIGB1dl9maW5kX3NlY3JldGAsIEkgbm90ZSBhIGNoYW5nZSBpbiBob3cgYGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4YCBhbmQgYHN0YXJ0X2lkeGAgYXJlIGhhbmRsZWQuIFByZXZpb3VzbHksIGBzdGFydF9pZHhgIHdhcyBpbml0aWFsaXplZCB0byAwIGFuZCBhZGp1c3RlZCBhZnRlciB0aGUgbG9vcC4gTm93LCB0aGUgcGF0Y2ggc2V0cyBgbGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHhgIHRvIDAgKmJlZm9yZSogdGhlIGxvb3AsIGFuZCB3aXRoaW4gdGhlIGxvb3AsIGBzdGFydF9pZHhgIGlzIHNldCB0byBgbGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHhgLiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIG9wdGltaXphdGlvbiBvciBhIHNoaWZ0IGluIGhvdyB0aGUgc2VhcmNoIHJlc3VtZXMgYWNyb3NzIGNhbGxzLCByYXRoZXIgdGhhbiBzdGFydGluZyBmcm9tIHRoZSBiZWdpbm5pbmcgZWFjaCB0aW1lLiBMZXQgbWUgc2VlLi4uIEkgc3VzcGVjdCB0aGUgY29kZSBpcyB1c2luZyBgbmV4dF9zZWNyZXRfaWR4YCB0byBrZWVwIHRyYWNrIG9mIHRoZSBjdXJyZW50IHNlYXJjaCBwb3NpdGlvbiwgc28gaXQgY2FuIGJlIHJlc3VtZWQgbGF0ZXIuXG5cblRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhpcywgSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSByZWxldmFudCBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgYGxpc3RgIGlzIGEgYHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqYCwgYW5kIEkgc2VlIHRoYXQgYHV2X2xpc3Rfc2VjcmV0c2AgaXMgY2FsbGVkIHdpdGggdGhpcyBgbGlzdGAsIGFsb25nIHdpdGggYHN0YXJ0X2lkeGAsIGEgcmV0dXJuIGNvZGUgYFx1MDAyNmxpc3RfcmNgLCBhbmQgYE5VTExgLiBUaGlzIGZ1bmN0aW9uIHNlZW1zIHRvIGJlIGludGltYXRlbHkgaW52b2x2ZWQuIFRoZSBgZmluZF9zZWNyZXRfaW5fcGFnZWAgZnVuY3Rpb24gdGhlbiBhcHBlYXJzIHRvIGJlIHNlYXJjaGluZyB0aGUgYGxpc3QtXHUwMDNlc2VjcmV0c2AgZm9yIGEgc3BlY2lmaWMgYHNlY3JldF9pZGAuIFRoaXMgaXMgbXkgY2x1ZSBhYm91dCB0aGUgd2F5IHRoZSBkYXRhIHN0cnVjdHVyZXMgYXJlIGRlc2lnbmVkIGFuZCBmdW5jdGlvbiB3aXRoIGVhY2ggb3RoZXIuXG5cbk9rYXksIHRpbWUgdG8gY3JhY2sgb3BlbiBgYXJjaC9zMzkwL2tlcm5lbC91di5jYCBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IGB1dl9saXN0X3NlY3JldHNgLiBMZXQncyBzZWUgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIgYW5kIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzIHJlYWxseSBhcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNzIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODoxMzo0OS4zNzExODYzOTVaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1Njg2MzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInV2X2xpc3Rfc2VjcmV0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva2VybmVsL3V2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2tlcm5lbC91di5jPTc4MD1pbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc5MS1cXHRcXHRzdGFydF9pZHggPSBsaXN0LVxcdTAwM2VuZXh0X3NlY3JldF9pZHg7XFxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjc5MjpcXHRcXHR1dl9saXN0X3NlY3JldHMobGlzdCwgc3RhcnRfaWR4LCBcXHUwMDI2bGlzdF9yYywgTlVMTCk7XFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc5My1cXHRcXHRpZiAobGlzdF9yYyAhPSBVVkNfUkNfRVhFQ1VURUQgXFx1MDAyNlxcdTAwMjYgbGlzdF9yYyAhPSBVVkNfUkNfTU9SRV9EQVRBKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjEzOjQ5LjQxNjg3Njk3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NjIwMzIwOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSdyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBgdXZfbGlzdF9zZWNyZXRzYCoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gVGhlIGZpcnN0IG9yZGVyIG9mIGJ1c2luZXNzIGhlcmUgaXMgdG8gdW5kZXJzdGFuZCBwcmVjaXNlbHkgd2hhdCBgdXZfbGlzdF9zZWNyZXRzYCAqaXMqLiBJIG5lZWQgdGhlIGRlZmluaXRpdmUgZGVmaW5pdGlvbi4gSSdtIGFzc3VtaW5nIGl0J3MgcGFydCBvZiB0aGUgYnJvYWRlciBVbHRyYXZpb2xldCBmcmFtZXdvcmssIHNvIEknbGwgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiBvciBzb3VyY2UgY29kZSBpZiB0aGF0J3MgYXZhaWxhYmxlLiBUaGUgbmFtZSBpdHNlbGYgc3VnZ2VzdHMgaXQncyBhIGZ1bmN0aW9uIG9yIG1ldGhvZCByZWxhdGVkIHRvIGxpc3Rpbmcgc2VjcmV0cyDigJMgY291bGQgYmUgY3JlZGVudGlhbHMsIEFQSSBrZXlzLCBwcml2YXRlIGRhdGEsIGFueXRoaW5nIHNlbnNpdGl2ZSwgcmVhbGx5LiBNeSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFyZTogV2hhdCdzIHRoZSBjb250ZXh0PyBXaGF0IHNlY3JldHMgYXJlIHdlIHRhbGtpbmcgYWJvdXQ/IFdoZXJlIGFyZSB0aGVzZSBzZWNyZXRzIHN0b3JlZD8gRG9lcyB0aGlzIGZ1bmN0aW9uIHN1cHBvcnQgYW55IGZpbHRlcmluZyBvciBzZWFyY2ggY3JpdGVyaWE/IElzIGl0IGEgcmVhZC1vbmx5IG9wZXJhdGlvbiwgb3IgZG9lcyBpdCBhbHNvIGhhdmUgdGhlIGNhcGFjaXR5IHRvIG1vZGlmeSB0aGUgc2VjcmV0cyBpbiBzb21lIG1hbm5lcj8gSSBuZWVkIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgcHVycG9zZSwgaW5wdXRzLCBvdXRwdXRzLCBhbmQgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgYmVmb3JlIEkgY2FuIGFzc2VzcyBpdHMgaW1wbGljYXRpb25zLiBVbHRpbWF0ZWx5LCBhIHByb3BlciB1bmRlcnN0YW5kaW5nIG9mIGl0J3MgZGVmaW5pdGlvbiBpcyBjcnVjaWFsIGZvciBkZXRlcm1pbmluZyBob3cgaXQgZml0cyBpbnRvIHRoZSBncmVhdGVyIHN5c3RlbSBhbmQgaXRzIHNlY3VyaXR5IGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM3MiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjEzOjUyLjk3ODkxMjEyM1oiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzNTY4NTI0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1dl9saXN0X3NlY3JldHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oPTQ3Mz1zdGF0aWMgaW5saW5lIGludCB1dl9jbWRfbm9kYXRhKHU2NCBoYW5kbGUsIHUxNiBjbWQsIHUxNiAqcmMsIHUxNiAqcnJjKVxcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNDg5LS8qKlxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oOjQ5MDogKiB1dl9saXN0X3NlY3JldHMoKSAtIERvIGEgTGlzdCBTZWNyZXRzIFVWQy5cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC00OTEtICpcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTUxMS0gKi9cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaDo1MTI6c3RhdGljIGlubGluZSBpbnQgdXZfbGlzdF9zZWNyZXRzKHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqYnVmLCB1MTYgc3RhcnRfaWR4LFxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTUxMy1cXHRcXHRcXHRcXHQgIHUxNiAqcmMsIHUxNiAqcnJjKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jPTc4MD1pbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc5MS1cXHRcXHRzdGFydF9pZHggPSBsaXN0LVxcdTAwM2VuZXh0X3NlY3JldF9pZHg7XFxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjc5MjpcXHRcXHR1dl9saXN0X3NlY3JldHMobGlzdCwgc3RhcnRfaWR4LCBcXHUwMDI2bGlzdF9yYywgTlVMTCk7XFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc5My1cXHRcXHRpZiAobGlzdF9yYyAhPSBVVkNfUkNfRVhFQ1VURUQgXFx1MDAyNlxcdTAwMjYgbGlzdF9yYyAhPSBVVkNfUkNfTU9SRV9EQVRBKSB7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jPTMwNz1zdGF0aWMgaW50IHV2aW9fZ2V0X2xpc3Qodm9pZCAqenBhZ2UsIHN0cnVjdCB1dmlvX2lvY3RsX2NiICp1dl9pb2N0bClcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL3V2ZGV2aWNlLmMtMzE2LVxcdGRvIHtcXG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jOjMxNzpcXHRcXHR1dl9saXN0X3NlY3JldHMobGlzdCwgbGlzdC1cXHUwMDNlbmV4dF9zZWNyZXRfaWR4LCBcXHUwMDI2dXZfaW9jdGwtXFx1MDAzZXV2X3JjLFxcbmRyaXZlcnMvczM5MC9jaGFyL3V2ZGV2aWNlLmMtMzE4LVxcdFxcdFxcdFxcdFxcdTAwMjZ1dl9pb2N0bC1cXHUwMDNldXZfcnJjKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTM6NTQuNjE0NjA1NDA1WiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMjgzMzM4MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTMzkwIFVWIEFyY2hpdGVjdHVyZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZm9jdXNpbmcgb24gdGhlIGB1dl9saXN0X3NlY3JldHNgIGZ1bmN0aW9uLCBhbmQgbXkgaW1tZWRpYXRlIHRhcmdldCBpcyB0aGUgYGFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oYCBoZWFkZXIgZmlsZS4gSSBrbm93IHRoaXMgaXMgd2hlcmUgdGhlIGxvdy1sZXZlbCBkZXRhaWxzIG9mIHRoZSBVViAoVW5pdmVyc2FsIFZpcnR1YWxpemF0aW9uKSBhcmNoaXRlY3R1cmUgb24gUzM5MCBhcmUgZ29pbmcgdG8gYmUgZGVmaW5lZC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBkYXRhIHN0cnVjdHVyZXMsIGZ1bmN0aW9uIHByb3RvdHlwZXMsIGFuZCBwb3RlbnRpYWxseSBzb21lIGlubGluZSBhc3NlbWJseSByZWxhdGVkIHRvIGhvdyBzZWNyZXRzIGFyZSBtYW5hZ2VkIHdpdGhpbiB0aGF0IHNwZWNpZmljIGVudmlyb25tZW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSdzIHNlY3VyaXR5IGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZCBpbiB0aGlzIHBhcnRpY3VsYXIgY29udGV4dC4gVGhpcyBmaWxlIGlzIHByb2JhYmx5IHRoZSBrZXkgdG8gdW5jb3ZlcmluZyB0aGUgbWVjaGFuaWNzIG9mIHNlY3JldCBoYW5kbGluZyBhdCBhIGZ1bmRhbWVudGFsIGxldmVsLiBJJ20gaG9waW5nIGl0J3Mgd2VsbC1kb2N1bWVudGVkLi4uIGJ1dCBJJ20gcHJlcGFyZWQgZm9yIGEgZGVlcCBkaXZlIVxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjE1LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTM6NTcuOTQyOTQyMTcyWiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4MTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ5MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ5MDpcXHQgKiB1dl9saXN0X3NlY3JldHMoKSAtIERvIGEgTGlzdCBTZWNyZXRzIFVWQy5cXG4gNDkxOlxcdCAqXFxuIDQ5MjpcXHQgKiBAYnVmOiBCdWZmZXIgdG8gd3JpdGUgbGlzdCBpbnRvOyBzaXplIG9mIG9uZSBwYWdlLlxcbiA0OTM6XFx0ICogQHN0YXJ0X2lkeDogVGhlIHNtYWxsZXN0IGluZGV4IHRoYXQgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBsaXN0LlxcbiA0OTQ6XFx0ICpcXHRcXHRGb3IgdGhlIGZpc3QgaW52b2NhdGlvbiB1c2UgMC5cXG4gNDk1OlxcdCAqIEByYzogUG9pbnRlciB0byBzdG9yZSB0aGUgcmV0dXJuIGNvZGUgb3IgTlVMTC5cXG4gNDk2OlxcdCAqIEBycmM6IFBvaW50ZXIgdG8gc3RvcmUgdGhlIHJldHVybiByZWFzb24gY29kZSBvciBOVUxMLlxcbiA0OTc6XFx0ICpcXG4gNDk4OlxcdCAqIFRoaXMgZnVuY3Rpb24gY2FsbHMgdGhlIExpc3QgU2VjcmV0cyBVVkMuIFRoZSByZXN1bHQgaXMgd3JpdHRlbiBpbnRvIGBidWZgLFxcbiA0OTk6XFx0ICogdGhhdCBuZWVkcyB0byBiZSBhdCBsZWFzdCBvbmUgcGFnZSBvZiB3cml0YWJsZSBtZW1vcnkuXFxuIDUwMDpcXHQgKiBgYnVmYCBjb25zaXN0cyBvZjpcXG4gNTAxOlxcdCAqICogJXN0cnVjdCB1dl9zZWNyZXRfbGlzdF9oZHJcXG4gNTAyOlxcdCAqICogJXN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtIChtdWx0aXBsZSlcXG4gNTAzOlxcdCAqXFxuIDUwNDpcXHQgKiBGb3IgYHN0YXJ0X2lkeGAgdXNlIF8wXyBmb3IgdGhlIGZpcnN0IGNhbGwuIElmIHRoZXJlIGFyZSBtb3JlIHNlY3JldHMgYXZhaWxhYmxlXFxuIDUwNTpcXHQgKiBidXQgY291bGQgbm90IGZpdCBpbnRvIHRoZSBwYWdlIHRoZW4gYHJjYCBpcyBgVVZDX1JDX01PUkVfREFUQWAuXFxuIDUwNjpcXHQgKiBJbiB0aGlzIGNhc2UgdXNlIGB1dl9zZWNyZXRfbGlzdF9oZHIubmV4dF9zZWNyZXRfaWR4YCBmb3IgYHN0YXJ0X2lkeGAuXFxuIDUwNzpcXHQgKlxcbiA1MDg6XFx0ICogQ29udGV4dDogbWlnaHQgc2xlZXAuXFxuIDUwOTpcXHQgKlxcbiA1MTA6XFx0ICogUmV0dXJuOiBUaGUgVVZDIGNvbmRpdGlvbiBjb2RlLlxcbiA1MTE6XFx0ICovXFxuIDUxMjpcXHRzdGF0aWMgaW5saW5lIGludCB1dl9saXN0X3NlY3JldHMoc3RydWN0IHV2X3NlY3JldF9saXN0ICpidWYsIHUxNiBzdGFydF9pZHgsXFxuIDUxMzpcXHRcXHRcXHRcXHRcXHQgIHUxNiAqcmMsIHUxNiAqcnJjKVxcbiA1MTQ6XFx0e1xcbiA1MTU6XFx0XFx0c3RydWN0IHV2X2NiX2xpc3Rfc2VjcmV0cyB1dmNiID0ge1xcbiA1MTY6XFx0XFx0XFx0LmhlYWRlci5sZW4gPSBzaXplb2YodXZjYiksXFxuIDUxNzpcXHRcXHRcXHQuaGVhZGVyLmNtZCA9IFVWQ19DTURfTElTVF9TRUNSRVRTLFxcbiA1MTg6XFx0XFx0XFx0LnN0YXJ0X2lkeCA9IHN0YXJ0X2lkeCxcXG4gNTE5OlxcdFxcdFxcdC5saXN0X2FkZHIgPSAodTY0KWJ1ZixcXG4gNTIwOlxcdFxcdH07XFxuIDUyMTpcXHRcXHRpbnQgY2MgPSB1dl9jYWxsX3NjaGVkKDAsICh1NjQpXFx1MDAyNnV2Y2IpO1xcbiA1MjI6XFx0XFxuIDUyMzpcXHRcXHRpZiAocmMpXFxuIDUyNDpcXHRcXHRcXHQqcmMgPSB1dmNiLmhlYWRlci5yYztcXG4gNTI1OlxcdFxcdGlmIChycmMpXFxuIDUyNjpcXHRcXHRcXHQqcnJjID0gdXZjYi5oZWFkZXIucnJjO1xcbiA1Mjc6XFx0XFxuIDUyODpcXHRcXHRyZXR1cm4gY2M7XFxuIDUyOTpcXHR9XFxuIDUzMDpcXHRcXG4gNTMxOlxcdHN0cnVjdCB1dl9pbmZvIHtcXG4gNTMyOlxcdFxcdHVuc2lnbmVkIGxvbmcgaW5zdF9jYWxsc19saXN0WzRdO1xcbiA1MzM6XFx0XFx0dW5zaWduZWQgbG9uZyB1dl9iYXNlX3N0b3JfbGVuO1xcbiA1MzQ6XFx0XFx0dW5zaWduZWQgbG9uZyBndWVzdF9iYXNlX3N0b3JfbGVuO1xcbiA1MzU6XFx0XFx0dW5zaWduZWQgbG9uZyBndWVzdF92aXJ0X2Jhc2Vfc3Rvcl9sZW47XFxuIDUzNjpcXHRcXHR1bnNpZ25lZCBsb25nIGd1ZXN0X3ZpcnRfdmFyX3N0b3JfbGVuO1xcbiA1Mzc6XFx0XFx0dW5zaWduZWQgbG9uZyBndWVzdF9jcHVfc3Rvcl9sZW47XFxuIDUzODpcXHRcXHR1bnNpZ25lZCBsb25nIG1heF9zZWNfc3Rvcl9hZGRyO1xcbiA1Mzk6XFx0XFx0dW5zaWduZWQgaW50IG1heF9udW1fc2VjX2NvbmY7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjEzOjU3Ljk0MzA0MTQ1MloiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjM5MzQyNjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU2VjcmV0cyBMaXN0aW5nIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgdXZfbGlzdF9zZWNyZXRzYCBmdW5jdGlvbiwgYW5kIGl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQgb24gdGhlIHN1cmZhY2UuIEl0J3MgZXNzZW50aWFsbHkgY2FsbGluZyBhIGh5cGVydmlzb3IgY2FsbCwgYSBVVkMsIHRvIGZldGNoIGEgbGlzdCBvZiBzZWNyZXRzLiBUaGUgVVZDLCBvZiBjb3Vyc2UsIGlzIHRoZSBsb3ctbGV2ZWwgaW50ZXJmYWNlIHRoYXQgZG9lcyB0aGUgaGVhdnkgbGlmdGluZy4gVGhlIHJlc3VsdHMgb2YgdGhhdCBjYWxsIGFyZSB0aGVuIHdyaXR0ZW4gaW50byB0aGlzIGBidWZgLiBOb3csIHRoaXMgYGJ1ZmAgc2VlbXMgaW50ZXJlc3RpbmcsIGl0J3MgYWxsb2NhdGVkIGFzIGEgcGFnZSBvZiBtZW1vcnksIHdoaWNoIG1ha2VzIHNlbnNlIGZvciBwb3RlbnRpYWwgc2l6ZSBjb25zaWRlcmF0aW9ucy4gQW5kIGl0J3MgYWxzbyB0eXBlIGBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RgLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoYXQgc3RydWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZm9ybWF0IG9mIHRoYXQgZGF0YS4gSSB3b25kZXIgd2hhdCBmaWVsZHMgYXJlIGluY2x1ZGVkLCBob3cgdGhlIGxpc3QgaXMgb3JnYW5pemVkLCBhbmQgd2hhdCBjb25zaWRlcmF0aW9ucyB3ZXJlIG1hZGUgZm9yIHRoZSB2YXJpb3VzIHNpemVzIGFuZCBzZWNyZXQgcHJvcGVydGllcy4gVGltZSB0byBkaXZlIGludG8gdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCB1dl9zZWNyZXRfbGlzdGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMjksIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjE0OjAyLjU4MjM4NzY3NVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3MzUwNDQ3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaD00MTE9c3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW0ge1xcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNDIzLSAqL1xcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oOjQyNDpzdHJ1Y3QgdXZfc2VjcmV0X2xpc3Qge1xcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTQyNS1cXHR1MTYgbnVtX3NlY3Jfc3RvcmVkO1xcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg9NDczPXN0YXRpYyBpbmxpbmUgaW50IHV2X2NtZF9ub2RhdGEodTY0IGhhbmRsZSwgdTE2IGNtZCwgdTE2ICpyYywgdTE2ICpycmMpXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC01MTEtICovXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6NTEyOnN0YXRpYyBpbmxpbmUgaW50IHV2X2xpc3Rfc2VjcmV0cyhzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmJ1ZiwgdTE2IHN0YXJ0X2lkeCxcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC01MTMtXFx0XFx0XFx0XFx0ICB1MTYgKnJjLCB1MTYgKnJyYylcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oPTYxOD1pbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oOjYxOTpcXHRcXHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QsXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNjIwLVxcdFxcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtX2hkciAqc2VjcmV0KTtcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYz03NTc9c3RhdGljIGludCBmaW5kX3NlY3JldF9pbl9wYWdlKGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6NzU4OlxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QsXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc1OS1cXHRcXHRcXHQgICAgICAgc3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW1faGRyICpzZWNyZXQpXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmM9NzgwPWludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjc4MTpcXHRcXHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QsXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc4Mi1cXHRcXHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbV9oZHIgKnNlY3JldClcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL3V2ZGV2aWNlLmM9MzA3PXN0YXRpYyBpbnQgdXZpb19nZXRfbGlzdCh2b2lkICp6cGFnZSwgc3RydWN0IHV2aW9faW9jdGxfY2IgKnV2X2lvY3RsKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYy0zMTAtXFx0dTggX191c2VyICp1c2VyX2J1ZiA9ICh1OCBfX3VzZXIgKil1dl9pb2N0bC1cXHUwMDNlYXJndW1lbnRfYWRkcjtcXG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jOjMxMTpcXHRzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QgPSB6cGFnZTtcXG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jLTMxMi1cXHR1MTYgbnVtX3NlY3JldHNfc3RvcmVkID0gMDtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTIwPU1PRFVMRV9ERVNDUklQVElPTihcXFwiczM5MCBwcm90ZWN0ZWQga2V5IFVWIGhhbmRsZXJcXFwiKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI0LSAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjI1OnN0YXRpYyBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKnV2X2xpc3Q7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjYtc3RhdGljIERFRklORV9NVVRFWCh1dl9saXN0X211dGV4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTQ6MDQuMjU1OTE2NTUyWiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MjkyNzk2ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqRGl2aW5nIGludG8gdGhlIFMzOTAgVVYgU2VjcmV0IExpc3QqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBpdC4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgc3RydWN0IHV2X3NlY3JldF9saXN0YC4gSXQncyBkZWZpbmVkIHdpdGhpbiBgYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmhgLiBHaXZlbiBteSBiYWNrZ3JvdW5kIHdpdGggczM5MCBhcmNoaXRlY3R1cmUgYW5kIHRoZSBVViAoVWx0cmFWaW9sZXQpIHBsYXRmb3JtLCBJJ20gZXhwZWN0aW5nIHRoaXMgc3RydWN0dXJlIHRvIGhvbGQgZGV0YWlscyByZWxldmFudCB0byBzZWN1cmUgbWVtb3J5IGFjY2VzcyBvciBjb25maWRlbnRpYWwgZGF0YSBtYW5hZ2VtZW50IHdpdGhpbiB0aGF0IHNwZWNpZmljIGVudmlyb25tZW50LiBJIGFudGljaXBhdGUgdGhpcyB3aWxsIGJlIGEgY3JpdGljYWwgc3RydWN0dXJlIGZvciBhbnkgY29kZSBkZWFsaW5nIHdpdGggc2Vuc2l0aXZlIGluZm9ybWF0aW9uIG9yIHBlcmhhcHMgaW52b2x2ZWQgaW4gZXN0YWJsaXNoaW5nIHNlY3VyZSBleGVjdXRpb24gY29udGV4dHMuIEknbSBrZWVuIHRvIHNlZSBpZiBpdCB1dGlsaXplcyBhbnkgdW5pcXVlIHMzOTAtc3BlY2lmaWMgbWVtb3J5IHByb3RlY3Rpb24gbWVjaGFuaXNtcy4gVGltZSB0byBjaGVjayBpdCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0OTMsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODoxNDowNy44ODUxOTg2MjlaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmhcIixcbiAgXCJGaXJzdExpbmVcIjogNDExLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDExOlxcdHN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtIHtcXG4gNDEyOlxcdFxcdHN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtX2hkciBoZHI7XFxuIDQxMzpcXHRcXHR1NjQgcmVzZXJ2ZXJkMDg7XFxuIDQxNDpcXHRcXHR1OCBpZFtVVl9TRUNSRVRfSURfTEVOXTtcXG4gNDE1OlxcdH0gX19wYWNrZWQgX19hbGlnbmVkKDgpO1xcbiA0MTY6XFx0XFxuIDQxNzpcXHQvKipcXG4gNDE4OlxcdCAqIHV2X3NlY3JldF9saXN0IC0gVVYgc2VjcmV0LW1ldGFkYXRhIGxpc3QuXFxuIDQxOTpcXHQgKiBAbnVtX3NlY3Jfc3RvcmVkOiBOdW1iZXIgb2Ygc2VjcmV0cyBzdG9yZWQgaW4gdGhpcyBsaXN0LlxcbiA0MjA6XFx0ICogQHRvdGFsX251bV9zZWNyZXRzOiBOdW1iZXIgb2Ygc2VjcmV0cyBzdG9yZWQgaW4gdGhlIFVWIGZvciB0aGlzIGd1ZXN0LlxcbiA0MjE6XFx0ICogQG5leHRfc2VjcmV0X2lkeDogcG9zaXRpdmUgbnVtYmVyIGlmIHRoZXJlIGFyZSBtb3JlIHNlY3JldHMgYXZhaWxhYmxlIG9yIHplcm8uXFxuIDQyMjpcXHQgKiBAc2VjcmV0czogVXAgdG8gODUgVVYtc2VjcmV0IG1ldGFkYXRhIGVudHJpZXMuXFxuIDQyMzpcXHQgKi9cXG4gNDI0OlxcdHN0cnVjdCB1dl9zZWNyZXRfbGlzdCB7XFxuIDQyNTpcXHRcXHR1MTYgbnVtX3NlY3Jfc3RvcmVkO1xcbiA0MjY6XFx0XFx0dTE2IHRvdGFsX251bV9zZWNyZXRzO1xcbiA0Mjc6XFx0XFx0dTE2IG5leHRfc2VjcmV0X2lkeDtcXG4gNDI4OlxcdFxcdHUxNiByZXNlcnZlZF8wNjtcXG4gNDI5OlxcdFxcdHU2NCByZXNlcnZlZF8wODtcXG4gNDMwOlxcdFxcdHN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtIHNlY3JldHNbODVdO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODoxNDowNy44ODUyOTQzMjlaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ3NTA2MjQyNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCdWcgRml4ZXMqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSwgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBpc3N1ZSBpbiBgZmluZF9zZWNyZXRfaW5fcGFnZWAuIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyB1c2luZyBgdG90YWxfbnVtX3NlY3JldHNgIGluc3RlYWQgb2YgYG51bV9zZWNyX3N0b3JlZGAgaW4gdGhlIGxvb3AgY29uZGl0aW9uLiBOb3csIGB0b3RhbF9udW1fc2VjcmV0c2AgcmVwcmVzZW50cyB0aGUgdG90YWwgc2VjcmV0cywgd2hpY2ggY291bGQgYmUgbW9yZSB0aGFuIHRoZSA4NS1lbGVtZW50IGFycmF5IGBsaXN0LVx1MDAzZXNlY3JldHNgIGNhbiBhY3R1YWxseSBob2xkIGZvciB0aGUgY3VycmVudCBwYWdlLiBJZiBgdG90YWxfbnVtX3NlY3JldHNgIGV4Y2VlZHMgODUsIHRoaXMgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIHdoZW4gaXRlcmF0aW5nIHRocm91Z2ggYGxpc3QtXHUwMDNlc2VjcmV0c2AuIEtBU0FOIHdvdWxkIGRlZmluaXRlbHkgY2F0Y2ggdGhhdCwgd2hpY2ggaXMgZ29vZC5cblxuTmV4dCwgSSdtIGZvY3VzaW5nIG9uIHRoZSBjaGFuZ2UgaW4gYHV2X2ZpbmRfc2VjcmV0YC4gVGhlIG9yaWdpbmFsIGxvb3AgY29uZGl0aW9uIHdhcyBmdW5kYW1lbnRhbGx5IGZsYXdlZC4gSXQgd2FzIHRha2luZyBgc3RhcnRfaWR4YCBhbmQgc2V0dGluZyBpdCB0byBgbGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHhgIGltbWVkaWF0ZWx5IGJlZm9yZSBjb21wYXJpbmcgdGhlbSBpbiB0aGUgbG9vcCBjb25kaXRpb24uIFRoYXQgbWFrZXMgdGhlIGNvbmRpdGlvbiBgc3RhcnRfaWR4IFx1MDAzYyBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeGAgZWZmZWN0aXZlbHkgYHggXHUwMDNjIHhgLCB3aGljaCBpcyBhbHdheXMgZmFsc2UsIHJpZ2h0PyBTbyB0aGUgbG9vcCB3YXMgZ3VhcmFudGVlZCB0byBleGVjdXRlIG9ubHkgb25jZS4gVGhhdCdzIGEgY2xhc3NpYyBsb2dpYyBlcnJvciwgdmVyeSBlYXNpbHkgbWlzc2VkLiBUaGUgZml4IGluaXRpYWxpemVzIGBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeGAgdG8gYDBgIGFuZCB0aGVuIHVzZXMgdGhlIGluY3JlbWVudGVkIHZhbHVlIGluIHRoZSBsb29wIGNvbmRpdGlvbiwgc28gdGhlIGxvb3AgZXhlY3V0ZXMgY29ycmVjdGx5LlxuXG5UaGUgY3JpdGljYWwgdGhpbmcgSSdtIGFzc2Vzc2luZyBpcyBpZiB0aGlzIGlzIHJlbGF0ZWQgdG8gS01TQU4ncyBkb21haW4gb2YgdW5pbml0aWFsaXplZCByZWFkcy4gTmVpdGhlciBvZiB0aGVzZSBmaXhlcyAqZGlyZWN0bHkqIGRlYWxzIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBmaXJzdCBpcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQg4oCTIEtBU0FOIGRvZXMgdGhhdC4gVGhlIHNlY29uZCBpcyBhIGxvZ2ljIGVycm9yIHRoYXQgYnJlYWtzIHRoZSBsb29wIC0gdGhhdCBoYXMgdG8gYmUgZml4ZWQuIEl04oCZcyBhbiBpbnRlcmVzdGluZyBidWcsIGJ1dCBpdCBkb2VzIG5vdCBzZWVtIEtNU0FOIHNwZWNpZmljLiBJJ2xsIG5lZWQgdG8gY2hlY2sgd2hlcmUgYHV2X2ZpbmRfc2VjcmV0YCBpcyBjYWxsZWQgdG8gcnVsZSBvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDg4LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM3MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjE0OjIyLjYzNTkyMTM5MVoiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzMTExMDI4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1dl9maW5kX3NlY3JldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg9NjEzPXN0YXRpYyBpbmxpbmUgaW50IHV2X3JlbW92ZV9zaGFyZWQodW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNjE3LVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oOjYxODppbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTYxOS1cXHRcXHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QsXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmM9NzU3PXN0YXRpYyBpbnQgZmluZF9zZWNyZXRfaW5fcGFnZShjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzcyLS8qKlxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo3NzM6ICogdXZfZmluZF9zZWNyZXQoKSAtIHNlYXJjaCBzZWNyZXQgbWV0YWRhdGEgZm9yIGEgZ2l2ZW4gc2VjcmV0IGlkLlxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03NzQtICogQHNlY3JldF9pZDogc2VhcmNoIHBhdHRlcm4uXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzc5LSAqL1xcbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo3ODA6aW50IHV2X2ZpbmRfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzgxLVxcdFxcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqbGlzdCxcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy04MDUtfVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo4MDY6RVhQT1JUX1NZTUJPTF9HUEwodXZfZmluZF9zZWNyZXQpO1xcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy04MDctXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0yMD1NT0RVTEVfREVTQ1JJUFRJT04oXFxcInMzOTAgcHJvdGVjdGVkIGtleSBVViBoYW5kbGVyXFxcIik7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yMi0vKlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjIzOiAqIE9uZSBwcmUtYWxsb2NhdGVkIHV2X3NlY3JldF9saXN0IGZvciB1c2Ugd2l0aCB1dl9maW5kX3NlY3JldCgpXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjQtICovXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz05Mz1zdGF0aWMgaW50IGdldF9zZWNyZXRfbWV0YWRhdGEoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtOTktXFx0bWVtc2V0KHV2X2xpc3QsIDAsIHNpemVvZigqdXZfbGlzdCkpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjEwMDpcXHRyYyA9IHV2X2ZpbmRfc2VjcmV0KHNlY3JldF9pZCwgdXZfbGlzdCwgc2VjcmV0KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0xMDEtXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ1dl9saXN0X211dGV4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTQ6MjQuMjY3MDM2MDkzWiIsIlNlcSI6NTEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3OTY1MzIzNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIE91dC1vZi1Cb3VuZHMgUmVhZCBpbiBgczM5MC9jcnlwdG8vcGtleV91di5jYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuY2AsIGFuZCBJIHNlZSB0aGF0IGB1dl9saXN0YCBnZXRzIHByZS1hbGxvY2F0ZWQgYW5kIHplcm9lZCBiZWZvcmUgdGhlIGB1dl9maW5kX3NlY3JldGAgZnVuY3Rpb24gaXMgY2FsbGVkLiBUaGlzIG1lYW5zIHRoZSBzdHJ1Y3R1cmUgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgcmlnaHQgZnJvbSB0aGUgc3RhcnQuIFRoYXQncyBnb29kLCBwcmVkaWN0YWJsZSBiZWhhdmlvci4gTm93LCB0aGUgcG90ZW50aWFsIGlzc3VlIGFyaXNlcyB3aXRoaW4gYGZpbmRfc2VjcmV0X2luX3BhZ2VgLCBzcGVjaWZpY2FsbHkgd2hlbiBpdCByZWFkcyBmcm9tIGBsaXN0LVx1MDAzZXNlY3JldHNbaV1gLiBJZiB0aGlzIGBpYCBpbmRleCBleGNlZWRzIHRoZSBhbGxvY2F0ZWQgYm91bmRhcmllcywgaXQgbG9va3MgbGlrZSB3ZSBjb3VsZCBoYXZlIGFuIG91dC1vZi1ib3VuZHMgcmVhZCwgYW5kIHRoYXQncyBuZXZlciBnb29kLlxuXG5JJ20gdGhpbmtpbmcsIHRoaXMgYGxpc3RgIHZhcmlhYmxlLCBpdCdzIHByb2JhYmx5IGFsbG9jYXRlZCBhcyBhIHBhZ2UsIHByb2JhYmx5IGEgc2luZ2xlIHBhZ2UuIElmIHdlIGdvIHBhc3QgaW5kZXggODUsIHdlJ3JlIGxpa2VseSBnb2luZyB0byByZWFkIHBhc3QgdGhlIGVuZCBvZiB0aGUgYGxpc3QtXHUwMDNlc2VjcmV0c2AgYXJyYXkuIEkgbmVlZCB0byBiZSBzdXJlIHRob3VnaC4gTGV0IG1lIGNoZWNrIHRoZSBzaXplIG9mIGBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RgLi4uIEFoLCB5ZXMsIGl0J3MgZGVmaW5lZCBsaWtlIHRoaXM6XG5gYGBjXG5zdHJ1Y3QgdXZfc2VjcmV0X2xpc3Qge1xuXHR1MTYgbnVtX3NlY3Jfc3RvcmVkO1xuXHR1MTYgdG90YWxfbnVtX3NlY3JldHM7XG5cdHUxNiBuZXh0X3NlY3JldF9pZHg7XG5cdHUxNiByZXNlcnZlZF8wNjtcblx0dTY0IHJlc2VydmVkXzA4O1xuXHRzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbSBzZWNyZXRzWzg1XTtcbn07XG5gYGBcbk9rYXksIHNvIGl0IGhhcyB0aGF0IGFycmF5IG9mIGBzZWNyZXRzWzg1XWAuIEFuZCB0aGVuIGBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbWAgaXMgZGVmaW5lZCBhczpcbmBgYGNcbnN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtIHtcblx0c3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW1faGRyIGhkcjtcblx0dTY0IHJlc2VydmVyZDA4O1xuXHR1OCBpZFtVVl9TRUNSRVRfSURfTEVOXTtcbn0gX19wYWNrZWQgX19hbGlnbmVkKDgpO1xuYGBgXG5TbyBJIGd1ZXNzIEkgbmVlZCB0byBjaGVjayB0aGUgZXhhY3Qgc2l6ZSBvZiBgc3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW1faGRyYCBhbmQgYFVWX1NFQ1JFVF9JRF9MRU5gIHRvIG5haWwgZG93biB0aGUgc2l6ZSBhbmQgY2FsY3VsYXRlIHRoZSBib3VuZHMuIEknbSBnb2luZyB0byBoYXZlIHRvIGRpZyBpbnRvIHRob3NlIGRlZmluaXRpb25zIHRvIHVuZGVyc3RhbmQgdGhlIG1lbW9yeSBsYXlvdXQgcHJlY2lzZWx5LiBXZSBoYXZlIHRoZSBwb3RlbnRpYWwgZm9yIGEgYnVmZmVyIG92ZXJmbG93IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1NzYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTQ6MzEuMDYzNTcxNTczWiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjY2MjAxMjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtX2hkciBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oPTM3Mz1lbnVtIHV2X3NlY3JldF90eXBlcyB7XFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC0zOTgtICovXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6Mzk5OnN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtX2hkciB7XFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNDAwLVxcdHUxNiBpbmRleDtcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oPTQxMT1zdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbSB7XFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6NDEyOlxcdHN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtX2hkciBoZHI7XFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNDEzLVxcdHU2NCByZXNlcnZlcmQwODtcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oPTYxOD1pbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTYxOS1cXHRcXHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QsXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6NjIwOlxcdFxcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtX2hkciAqc2VjcmV0KTtcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC02MjEtaW50IHV2X3JldHJpZXZlX3NlY3JldCh1MTYgc2VjcmV0X2lkeCwgdTggKmJ1Ziwgc2l6ZV90IGJ1Zl9zaXplKTtcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYz03NTc9c3RhdGljIGludCBmaW5kX3NlY3JldF9pbl9wYWdlKGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzU4LVxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QsXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjc1OTpcXHRcXHRcXHQgICAgICAgc3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW1faGRyICpzZWNyZXQpXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc2MC17XFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmM9NzgwPWludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc4MS1cXHRcXHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QsXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjc4MjpcXHRcXHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbV9oZHIgKnNlY3JldClcXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzgzLXtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTkzPXN0YXRpYyBpbnQgZ2V0X3NlY3JldF9tZXRhZGF0YShjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6OTQ6XFx0XFx0XFx0ICAgICAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtX2hkciAqc2VjcmV0KVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTk1LXtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTEwNj1zdGF0aWMgaW50IHJldHJpZXZlX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0xMDgte1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjEwOTpcXHRzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbV9oZHIgc2VjcmV0X21ldGFfZGF0YTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0xMTAtXFx0aW50IHJjO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9MjMzPXN0YXRpYyBpbnQgdXZfdmVyaWZ5a2V5KGNvbnN0IHU4ICprZXksIHUzMiBrZXlsZW4sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yMzktXFx0c3RydWN0IHV2c2VjcmV0dG9rZW4gKnQgPSAoc3RydWN0IHV2c2VjcmV0dG9rZW4gKilrZXk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6MjQwOlxcdHN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtX2hkciBzZWNyZXRfbWV0YV9kYXRhO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI0MS1cXHR1MzIgcGtleXNpemUsIHBrZXl0eXBlLCBiaXRzaXplO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODoxNDozMi43Mjk3ODQxNzJaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMyMzQyODI0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYHV2X3NlY3JldF9saXN0X2l0ZW1faGRyYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpc3NlY3QgdGhpcyBgc3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW1faGRyYC4gSSdtIGltbWVkaWF0ZWx5IGN1cmlvdXMgYWJvdXQgaXRzIHN0cnVjdHVyZSDigJMgd2hhdCdzIHRoZSB1bmRlcmx5aW5nIHB1cnBvc2Ugb2YgdGhpcyBoZWFkZXIgd2l0aGluIGxpYnV2J3Mgc2VjcmV0IGxpc3QgaW1wbGVtZW50YXRpb24/IElzIGl0IGEgc2luZ2xlIG5vZGUsIG9yIGEgbW9yZSBjb21wbGV4IG1ldGFkYXRhIHN0cnVjdHVyZSBmb3IgYSBsaW5rZWQgbGlzdD8gTXkgaW1tZWRpYXRlIHF1ZXN0aW9ucyByZXZvbHZlIGFyb3VuZCBtZW1vcnkgbWFuYWdlbWVudDogYXJlIHdlIGRlYWxpbmcgd2l0aCBlbWJlZGRlZCBkYXRhLCBvciBwb2ludGVycyB0byBleHRlcm5hbCBibG9ja3M/IEFyZSB0aGVyZSBpbXBsaWNhdGlvbnMgZm9yIGF0b21pY2l0eSBhbmQgdGhyZWFkIHNhZmV0eSBoZXJlLCBwYXJ0aWN1bGFybHkgaWYgdGhpcyBkYXRhIHN0cnVjdHVyZSBpcyBhY2Nlc3NlZCBjb25jdXJyZW50bHk/IElzIHRoZXJlIGFuIGluaGVyZW50IG9yZGVyaW5nIHRvIHRoZSBzZWNyZXQgaXRlbXMsIG9yIGlzIHRoaXMganVzdCBhbiB1bm9yZGVyZWQgY29sbGVjdGlvbj8gQXJlIHRoZXJlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBmb3IgbG9ja2luZywgcGFydGljdWxhcmx5IGluIG11bHRpLXRocmVhZGVkIGVudmlyb25tZW50cyB3aGVyZSBzZWNyZXRzIG1pZ2h0IGJlIGFjY2Vzc2VkIG9yIHVwZGF0ZWQ/IEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBkZXNpZ24gdHJhZGVvZmZzIHRoZXkgbWFkZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0NzYsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODoxNDozNy4wNTMyMTUxNzdaIiwiU2VxIjo1NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODkyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmhcIixcbiAgXCJGaXJzdExpbmVcIjogMzk5LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzk5OlxcdHN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtX2hkciB7XFxuIDQwMDpcXHRcXHR1MTYgaW5kZXg7XFxuIDQwMTpcXHRcXHR1MTYgdHlwZTtcXG4gNDAyOlxcdFxcdHUzMiBsZW5ndGg7XFxuIDQwMzpcXHR9IF9fcGFja2VkIF9fYWxpZ25lZCg4KTtcXG4gNDA0OlxcdFxcbiA0MDU6XFx0I2RlZmluZSBVVl9TRUNSRVRfSURfTEVOIDMyXFxuIDQwNjpcXHQvKipcXG4gNDA3OlxcdCAqIHV2X3NlY3JldF9saXN0X2l0ZW0gLSBVViBzZWNyZXQgZW50cnkuXFxuIDQwODpcXHQgKiBAaGRyOiBUaGUgbWV0YWRhdGEgb2YgdGhpcyBzZWNyZXQuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjE0OjM3LjA1MzMwNjI0N1oiLCJTZXEiOjU1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODAxMDY4OTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBPdXQtb2YtQm91bmRzIFJlYWQgaW4gYHV2X3NlY3JldF9saXN0YCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGZvY3VzZWQgb24gbWVtb3J5IGxheW91dC4gSSdtIHNlZWluZyB0aGF0IGBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbV9oZHJgIGlzIGEgbW9kZXN0IDggYnl0ZXMsIHdoaWNoIGlzIGdvb2QuIFRoZW4gYHN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtYCBiYWxsb29ucyB0byA0OCBieXRlcyAoOCBmb3IgdGhlIGhlYWRlciwgOCBmb3Igc29tZXRoaW5nIGVsc2UsIGFuZCBhIDMyLWJ5dGUgSUQsIHByZXN1bWFibHkpLiBOb3csIHRoZSBjcnVjaWFsIHBhcnQ6IGBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RgIGl0c2VsZi4gVGhlIGNhbGN1bGF0aW9uIGxvb2tzIGxpa2UgdGhpczogMiArIDIgKyAyICsgMiArIDggKyAoODUgKiA0OCkgPSA0MDk2IGJ5dGVzIHRvdGFsLiBIbW0sIHRoYXQncyBleGFjdGx5IG9uZSBwYWdlLiBUaGF0J3MgYSByZWQgZmxhZyBpbiBpdHNlbGYuXG5cbk5vdywgdGhhdCBicmluZ3MgbWUgdG8gdGhlIHBvdGVudGlhbCBidWcgaW4gYGZpbmRfc2VjcmV0X2luX3BhZ2VgOlxuXG5gYGBjXG5cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGxpc3QtXHUwMDNldG90YWxfbnVtX3NlY3JldHM7IGkrKykge1xuXHRcdGlmIChtZW1jbXAoc2VjcmV0X2lkLCBsaXN0LVx1MDAzZXNlY3JldHNbaV0uaWQsIFVWX1NFQ1JFVF9JRF9MRU4pID09IDApIHtcblx0XHRcdCpzZWNyZXQgPSBsaXN0LVx1MDAzZXNlY3JldHNbaV0uaGRyO1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXHR9XG5gYGBcblxuVGhlIGxvb3AgaXRlcmF0ZXMgdXAgdG8gYHRvdGFsX251bV9zZWNyZXRzYC4gSWYgYHRvdGFsX251bV9zZWNyZXRzYCBleGNlZWRzIDg1LCB0aGVuIGBsaXN0LVx1MDAzZXNlY3JldHNbaV1gIGdvZXMgb3V0LW9mLWJvdW5kcywgc2luY2Ugd2Ugb25seSBoYXZlIHNwYWNlIGZvciA4NSBgdXZfc2VjcmV0X2xpc3RfaXRlbWBzLCBwb3RlbnRpYWxseSB3cml0aW5nIGF0IGEgbWVtb3J5IGFkZHJlc3MgdGhhdCdzIG91dHNpZGUgb2YgdGhlIGFsbG9jYXRlZCBwYWdlLiBUaGlzIGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHJlYWQsIGFuZCBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBzaG91bGQgbmFpbCBpdCBiZWNhdXNlIGl0J3MgcmVhZGluZyBwYXN0IHRoZSBwYWdlIGJvdW5kYXJ5LlxuXG5UaGUgbmV4dCBxdWVzdGlvbiBpcywgaG93IGlzIHRoZSBtZW1vcnkgZm9yIHRoZSBgbGlzdGAgYWxsb2NhdGVkPyBJcyBpdCBga21hbGxvY2A/IGBnZXRfZnJlZV9wYWdlYD8gVGhhdCdzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIG92ZXJmbG93LiBHb2luZyBiYWNrIHRvIHRoZSBkcml2ZXIgY29kZSwgSSBzZWUgdGhhdCB0aGUgYHV2X2xpc3RgIGlzIHByZS1hbGxvY2F0ZWQuIExldCdzIGRpZyBkZWVwZXIgdG8gc2VlIGV4YWN0bHkgaG93IGFuZCB3aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4ODAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODoxNDo0NC44NTQzNzc4NzRaIiwiU2VxIjo1NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NDI4MTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInV2X2xpc3QgPVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0yODQ9c3RhdGljIGludCBfX2luaXQgcGtleV91dl9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yOTMtXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6Mjk0OlxcdHV2X2xpc3QgPSBrbWFsbG9jX29iaigqdXZfbGlzdCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjk1LVxcdGlmICghdXZfbGlzdClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTQ6NDQuOTAyODEwNjc5WiIsIlNlcSI6NTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNDUzODIwNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLlxuXG4qKkRlY29uc3RydWN0aW5nIHRoaXMgTWVtb3J5IEFsbG9jYXRpb24qKlxuXG5IbW0sIGBrbWFsbG9jX29iaigqdXZfbGlzdClgLi4uIHRoYXQgc3ludGF4IHRocm93cyBhIGZsYWcuIGBrbWFsbG9jX29iamAgaXMgZGVmaW5pdGVseSBub3QgYSBzdGFuZGFyZCBrZXJuZWwgYWxsb2NhdG9yLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0aGF0IGl0J3MgYSBtYWNybyBvciBhIGN1c3RvbSB3cmFwcGVyIGRlZmluZWQgc29tZXdoZXJlIHNwZWNpZmljIHRvIHRoaXMgY29kZWJhc2UuIEl0J3Mgb2Z0ZW4gdGhhdCB0aGVzZSB0eXBlcyBvZiBjb25zdHJ1Y3RzIGFyZSB1c2VkIHRvIGhhbmRsZSBvYmplY3Qtc3BlY2lmaWMgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBvdGVudGlhbGx5IHByb3ZpZGUgYWRkaXRpb25hbCBjb250ZXh0IG9yIGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4gQnV0IGxldCdzIHZlcmlmeSB0aGF0LlxuXG5NeSBuZXh0IG1vdmUgaXMgdG8gZmFsbCBiYWNrIHRvIHRoZSB0cmllZC1hbmQtdHJ1ZSBzdGFuZGFyZCBrZXJuZWwgYWxsb2NhdGlvbjogYGttYWxsb2Moc2l6ZW9mKCp1dl9saXN0KSwgR0ZQX0tFUk5FTClgLiAgSXQncyBtdWNoIG1vcmUgbGlrZWx5IHRoaXMgaXMgd2hhdCB0aGV5ICptZWFudCogYW5kIHRoZSBjb2RlIGlzIHVzaW5nIHRoZSByaWdodCBzaXplIGFuZCBhbGxvY2F0aW9uIGZsYWdzLiBUaW1lIHRvIGNoZWNrIHRoZSBhY3R1YWwgY29kZSBvciByZWxldmFudCBoZWFkZXIgZmlsZXMgdG8gY29uZmlybSB0aGlzIGFzc3VtcHRpb24gYW5kIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBtZW1vcnkgYWxsb2NhdGlvbiBpcyBoYW5kbGVkIHdpdGhpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQuIFRoYXQncyB0aGUgb25seSB3YXkgdG8gYmUgY29tcGxldGVseSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg2NSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjE0OjQ5LjI0ODE5NTM1MloiLCJTZXEiOjU4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODQsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyODQ6XFx0c3RhdGljIGludCBfX2luaXQgcGtleV91dl9pbml0KHZvaWQpXFxuIDI4NTpcXHR7XFxuIDI4NjpcXHRcXHRpbnQgcmM7XFxuIDI4NzpcXHRcXG4gMjg4OlxcdFxcdGlmICghaXNfcHJvdF92aXJ0X2d1ZXN0KCkpXFxuIDI4OTpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gMjkwOlxcdFxcbiAyOTE6XFx0XFx0aWYgKCF0ZXN0X2JpdF9pbnYoQklUX1VWQ19DTURfUkVUUl9TRUNSRVQsIHV2X2luZm8uaW5zdF9jYWxsc19saXN0KSlcXG4gMjkyOlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiAyOTM6XFx0XFxuIDI5NDpcXHRcXHR1dl9saXN0ID0ga21hbGxvY19vYmooKnV2X2xpc3QpO1xcbiAyOTU6XFx0XFx0aWYgKCF1dl9saXN0KVxcbiAyOTY6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDI5NzpcXHRcXG4gMjk4OlxcdFxcdHJjID0gcGtleV9oYW5kbGVyX3JlZ2lzdGVyKFxcdTAwMjZ1dl9oYW5kbGVyKTtcXG4gMjk5OlxcdFxcdGlmIChyYylcXG4gMzAwOlxcdFxcdFxcdGtmcmVlKHV2X2xpc3QpO1xcbiAzMDE6XFx0XFxuIDMwMjpcXHRcXHRyZXR1cm4gcmM7XFxuIDMwMzpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjE0OjQ5LjI0ODI3ODU1MloiLCJTZXEiOjU5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTEwMjExMDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIFVuZmFtaWxpYXIgQ29kZSoqXG5cblJpZ2h0LCBsZXQgbWUgc2VlLi4uIEknbSBsb29raW5nIGF0IHRoaXMgYGttYWxsb2Nfb2JqYCB0aGluZyBhbmQgaXQncyBub3QgaW1tZWRpYXRlbHkganVtcGluZyBvdXQgYXQgbWUgYXMgc3RhbmRhcmQga2VybmVsIGNvZGUuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiB0aGUgY29udGV4dCwgaXMgdGhhdCBpdCdzIGxpa2VseSBhIG1hY3JvIHNwZWNpZmljIHRvIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSwgb3IgbWF5YmUgZGVmaW5lZCBpbiBzb21lIGxvY2FsLCBwcm9qZWN0LXNwZWNpZmljIGhlYWRlciBmaWxlLiBPa2F5LCBob2xkIG9uLiBKdXN0IGNvbmZpcm1pbmcgbXkgaW5pdGlhbCBpbXByZXNzaW9uLi4uIFllcCwgYGttYWxsb2Nfb2JqYCBpc24ndCBhIHN0YW5kYXJkLCB1bml2ZXJzYWxseSBkZWZpbmVkIGtlcm5lbCBmdW5jdGlvbiBvciBtYWNyby4gU28sIHRpbWUgdG8gdHJhY2sgZG93biBpdHMgZGVmaW5pdGlvbi4gTGV0J3MgZmluZCBvdXQgd2hlcmUgdGhpcyB0aGluZyBpcyBhY3R1YWxseSBkZWNsYXJlZCEgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBpdCdzIGRvaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ0MSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTQ6NTMuMzU4NDkzMTk5WiIsIlNlcSI6NjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzEyNzEyMjczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImttYWxsb2Nfb2JqXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDE1NDk3IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3Q9MjAzPW5vbi1cXFxcIGBgTlVMTGBgLCBsb2NrbGVzc2x5IGFjY2Vzc2luZyB0aGUgYGAtXFx1MDAzZWFgYCBhbmQgYGAtXFx1MDAzZWJgYCBmaWVsZHMuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3QtMjA4LSAgICAgICAyIHtcXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3Q6MjA5OiAgICAgICAzICAgcCA9IGttYWxsb2Nfb2JqKCpwKTtcXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3QtMjEwLSAgICAgICA0ICAgaWYgKCFwKVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0PTIyNT10aGVpciByaWdodHMgdG8gcmVvcmRlciB0aGlzIGNvZGUgYXMgZm9sbG93czpcXG4tLVxcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdC0yMzAtICAgICAgIDIge1xcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdDoyMzE6ICAgICAgIDMgICBwID0ga21hbGxvY19vYmooKnApO1xcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdC0yMzItICAgICAgIDQgICBpZiAoIXApXFxuLS1cXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3Q9MjYxPXNob3dzIGFuIGV4YW1wbGUgb2YgaW5zZXJ0aW9uOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0LTI2Ni0gICAgICAgMiB7XFxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0OjI2NzogICAgICAgMyAgIHAgPSBrbWFsbG9jX29iaigqcCk7XFxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0LTI2OC0gICAgICAgNCAgIGlmICghcClcXG4tLVxcbkRvY3VtZW50YXRpb24vUkNVL2xpc3RSQ1UucnN0PTI2Nz1UaGUgUkNVIHZlcnNpb24gb2YgYXVkaXRfdXBkX3J1bGUoKSBpcyBhcyBmb2xsb3dzOjpcXG4tLVxcbkRvY3VtZW50YXRpb24vUkNVL2xpc3RSQ1UucnN0LTI3OC1cXHRcXHRcXHRpZiAoIWF1ZGl0X2NvbXBhcmVfcnVsZShydWxlLCBcXHUwMDI2ZS1cXHUwMDNlcnVsZSkpIHtcXG5Eb2N1bWVudGF0aW9uL1JDVS9saXN0UkNVLnJzdDoyNzk6XFx0XFx0XFx0XFx0bmUgPSBrbWFsbG9jX29iaigqZW50cnksIEdGUF9BVE9NSUMpO1xcbkRvY3VtZW50YXRpb24vUkNVL2xpc3RSQ1UucnN0LTI4MC1cXHRcXHRcXHRcXHRpZiAobmUgPT0gTlVMTClcXG4tLVxcbkRvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS5yc3Q9NDQxPXVzZXMgb2YgUkNVIG1heSBiZSBmb3VuZCBpbiBsaXN0UkNVLnJzdCBhbmQgTk1JLVJDVS5yc3QuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UucnN0LTQ3MC1cXG5Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UucnN0OjQ3MTpcXHRcXHRuZXdfZnAgPSBrbWFsbG9jX29iaigqbmV3X2ZwKTtcXG5Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UucnN0LTQ3Mi1cXHRcXHRzcGluX2xvY2soXFx1MDAyNmZvb19tdXRleCk7XFxuLS1cXG5Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UucnN0PTU1Mz1UaGUgZm9vX3VwZGF0ZV9hKCkgZnVuY3Rpb24gbWlnaHQgdGhlbiBiZSB3cml0dGVuIGFzIGZvbGxvd3M6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnJzdC01NzItXFxuRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnJzdDo1NzM6XFx0XFx0bmV3X2ZwID0ga21hbGxvY19vYmooKm5ld19mcCk7XFxuRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnJzdC01NzQtXFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZmb29fbXV0ZXgpO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9rcmVmLnJzdD0zOT1rcmVmX2luaXQgYXMgc286Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9rcmVmLnJzdC00Mi1cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2tyZWYucnN0OjQzOiAgICAgZGF0YSA9IGttYWxsb2Nfb2JqKCpkYXRhKTtcXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2tyZWYucnN0LTQ0LSAgICAgaWYgKCFkYXRhKVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9rcmVmLnJzdD04MT10aHJlYWQgdG8gcHJvY2Vzczo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2tyZWYucnN0LTEwMi1cXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9rcmVmLnJzdDoxMDM6XFx0ZGF0YSA9IGttYWxsb2Nfb2JqKCpkYXRhKTtcXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2tyZWYucnN0LTEwNC1cXHRpZiAoIWRhdGEpXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0PTM4Mz10byBwcm90ZWN0IHRoZSBjYWNoZSBhbmQgYWxsIHRoZSBvYmplY3RzIHdpdGhpbiBpdC4gSGVyZSdzIHRoZSBjb2RlOjpcXG4tLVxcbkRvY3VtZW50YXRpb24va2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3QtNDQ0LVxcbkRvY3VtZW50YXRpb24va2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3Q6NDQ1OiAgICAgICAgICAgIGlmICgob2JqID0ga21hbGxvY19vYmooKm9iaikpID09IE5VTEwpXFxuRG9jdW1lbnRhdGlvbi9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdC00NDYtICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTtcXG4tLVxcbkRvY3VtZW50YXRpb24va2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3Q9NDk5PXdoaWNoIGFyZSB0YWtlbiBhd2F5LCBhbmQgdGhlIGBgK2BgIGFyZSBsaW5lcyB3aGljaCBhcmUgYWRkZWQuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0LTUxOS1cXG5Eb2N1bWVudGF0aW9uL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0OjUyMDogICAgICAgICAgICAgaWYgKChvYmogPSBrbWFsbG9jX29iaigqb2JqKSkgPT0gTlVMTClcXG5Eb2N1bWVudGF0aW9uL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0LTUyMS0gICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTtcXG4tLVxcbkRvY3VtZW50YXRpb24vbG9ja2luZy9sb2NrdHlwZXMucnN0PTQ5OD13b3JrcyBwZXJmZWN0bHk6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9sb2NraW5nL2xvY2t0eXBlcy5yc3QtNTAwLSAgcmF3X3NwaW5fbG9jayhcXHUwMDI2bG9jayk7XFxuRG9jdW1lbnRhdGlvbi9sb2NraW5nL2xvY2t0eXBlcy5yc3Q6NTAxOiAgcCA9IGttYWxsb2Nfb2JqKCpwLCBHRlBfQVRPTUlDKTtcXG5Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbG9ja3R5cGVzLnJzdC01MDItXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbG9ja3R5cGVzLnJzdD01MDc9cHJlZW1wdGlvbiBvbiBQUkVFTVBUX1JUIGtlcm5lbHM6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9sb2NraW5nL2xvY2t0eXBlcy5yc3QtNTA5LSAgc3Bpbl9sb2NrKFxcdTAwMjZsb2NrKTtcXG5Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbG9ja3R5cGVzLnJzdDo1MTA6ICBwID0ga21hbGxvY19vYmooKnAsIEdGUF9BVE9NSUMpO1xcbkRvY3VtZW50YXRpb24vbG9ja2luZy9sb2NrdHlwZXMucnN0LTUxMS1cXG4tLVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTkzOD1UaGUga2VybmVsIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgZ2VuZXJhbCBwdXJwb3NlIG1lbW9yeSBhbGxvY2F0b3JzOlxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0OjkzOTprbWFsbG9jKCksIGt6YWxsb2MoKSwga21hbGxvY19vYmpzKCksIGt6YWxsb2Nfb2JqcygpLCB2bWFsbG9jKCksIGFuZFxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk0MC12emFsbG9jKCkuICBQbGVhc2UgcmVmZXIgdG8gdGhlIEFQSSBkb2N1bWVudGF0aW9uIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdD05NDQ9VGhlIHByZWZlcnJlZCBmb3JtIGZvciBwYXNzaW5nIGEgc2l6ZSBvZiBhIHN0cnVjdCBpcyB0aGUgZm9sbG93aW5nOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTQ3LVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0Ojk0ODpcXHRwID0ga21hbGxvY19vYmooKnAsIC4uLik7XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTQ5LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9OTU4PVRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgYWxsb2NhdGluZyBhbiBhcnJheSBpcyB0aGUgZm9sbG93aW5nOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTYxLVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0Ojk2MjpcXHRwID0ga21hbGxvY19vYmpzKCpwLCBuLCAuLi4pO1xcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk2My1cXG4tLVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdD0zODY9bWF5IGhlbHAgd2l0aCBhbGlnbm1lbnQsIHdyYXAtYXJvdW5kLCBvciBhZGRpdGlvbmFsIGhhcmRlbmluZy4gVGhlXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0OjM4NzprbWFsbG9jX29iaigpLWZhbWlseSBvZiBtYWNyb3MgcHJvdmlkZSB0aGlzIGludHJvc3BlY3Rpb24sIHdoaWNoIGNhbiBiZVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC0zODgtdXNlZCBmb3IgdGhlIGNvbW1vbiBjb2RlIHBhdHRlcm5zIGZvciBzaW5nbGUsIGFycmF5LCBhbmQgZmxleGlibGUgb2JqZWN0XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3Q9Mzk4PWJlY29tZSwgcmVzcGVjdGl2ZWx5OjpcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtMzk5LVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdDo0MDA6XFx0cHRyID0ga21hbGxvY19vYmooKnB0ciBbLCBnZnBdICk7XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0LTQwMS1cXHRwdHIgPSBremFsbG9jX29iaigqcHRyIFssIGdmcF0gKTtcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3Q6NDAyOlxcdHB0ciA9IGttYWxsb2Nfb2JqcygqcHRyLCBjb3VudCBbLCBnZnBdICk7XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0LTQwMy1cXHRwdHIgPSBremFsbG9jX29ianMoKnB0ciwgY291bnQgWywgZ2ZwXSApO1xcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDQtXFx0cHRyID0ga21hbGxvY19mbGV4KCpwdHIsIGZsZXhfbWVtYmVyLCBjb3VudCBbLCBnZnBdICk7XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0OjQwNTpcXHRfX2F1dG9fdHlwZSBwdHIgPSBrbWFsbG9jX29iaihzdHJ1Y3QgZm9vIFssIGdmcF0gKTtcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtNDA2LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTE3MzQ9Y2FsbGJhY2s6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTE3MzktICAgICAgICAgIC4uLi5cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q6MTc0MDogICAgICAgICAgZGF0YSA9IGttYWxsb2Nfb2JqKCpkYXRhKTtcXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMTc0MS0gICAgICAgICAgc3Vic3RyZWFtLVxcdTAwM2VydW50aW1lLVxcdTAwM2Vwcml2YXRlX2RhdGEgPSBkYXRhO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTMzMDI9ZGVzdHJ1Y3RvciBmdW5jdGlvbiBpcyBzZXQgaW4gdGhlIGBgcHJpdmF0ZV9mcmVlYGAgZmllbGQ6OlxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC0zMzAzLVxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdDozMzA0OiAgc3RydWN0IG15ZGF0YSAqcCA9IGttYWxsb2Nfb2JqKCpwKTtcXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMzMwNS0gIGh3LVxcdTAwM2Vwcml2YXRlX2RhdGEgPSBwO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9zcGkvc3BpLXN1bW1hcnkucnN0PTI0Mj1BbmQgU09DLXNwZWNpZmljIHV0aWxpdHkgY29kZSBtaWdodCBsb29rIHNvbWV0aGluZyBsaWtlOjpcXG4tLVxcbkRvY3VtZW50YXRpb24vc3BpL3NwaS1zdW1tYXJ5LnJzdC0yNTEtXFxuRG9jdW1lbnRhdGlvbi9zcGkvc3BpLXN1bW1hcnkucnN0OjI1MjpcXHRcXHRwZGF0YTIgPSBrbWFsbG9jX29iaigqcGRhdGEyKTtcXG5Eb2N1bWVudGF0aW9uL3NwaS9zcGktc3VtbWFyeS5yc3QtMjUzLVxcdFxcdCpwZGF0YTIgPSBwZGF0YTtcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0PTQwMz1lIHR1dHRpIGdsaSBvZ2dldHRpIGNoZSBjb250aWVuZS4gRWNjbyBpbCBjb2RpY2U6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQva2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3QtNDY0LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0OjQ2NTogICAgICAgICAgICBpZiAoKG9iaiA9IGttYWxsb2Nfb2JqKCpvYmopKSA9PSBOVUxMKVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0LTQ2Ni0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQva2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3Q9NTE5PXNvbm8gcXVlbGxlIHJpbW9zc2UsIG1lbnRyZSBxdWVsbGUgYGArYGAgc29ubyBxdWVsbGUgYWdnaXVudGUuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdC01MzktXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQva2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3Q6NTQwOiAgICAgICAgICAgICBpZiAoKG9iaiA9IGttYWxsb2Nfb2JqKCpvYmopKSA9PSBOVUxMKVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0LTU0MS0gICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTtcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2xvY2tpbmcvbG9ja3R5cGVzLnJzdD00ODg9bWVtb3JpYS4gU3UgdW4ga2VybmVsIG5vbi1QUkVFTVBUX1JUIGlsIHNlZ3VlbnRlIGNvZGljZSBmdW56aW9uYSBwZXJmZXR0YW1lbnRlOjpcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2xvY2tpbmcvbG9ja3R5cGVzLnJzdC00OTAtICByYXdfc3Bpbl9sb2NrKFxcdTAwMjZsb2NrKTtcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9sb2NraW5nL2xvY2t0eXBlcy5yc3Q6NDkxOiAgcCA9IGttYWxsb2Nfb2JqKCpwLCBHRlBfQVRPTUlDKTtcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9sb2NraW5nL2xvY2t0eXBlcy5yc3QtNDkyLVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvbG9ja2luZy9sb2NrdHlwZXMucnN0PTQ5Nz1QUkVFTVBUX1JUOjpcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2xvY2tpbmcvbG9ja3R5cGVzLnJzdC00OTktICBzcGluX2xvY2soXFx1MDAyNmxvY2spO1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2xvY2tpbmcvbG9ja3R5cGVzLnJzdDo1MDA6ICBwID0ga21hbGxvY19vYmooKnAsIEdGUF9BVE9NSUMpO1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2xvY2tpbmcvbG9ja3R5cGVzLnJzdC01MDEtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9OTQyPUlsIG1vZG8gcHJlZmVyaXRvIHBlciBwYXNzYXJlIGxhIGRpbWVuc2lvbmUgZGkgdW5hIHN0cnV0dHVyYSDDqCBpbCBzZWd1ZW50ZTpcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NDUtXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0Ojk0NjpcXHRwID0ga21hbGxvY19vYmooKnAsIC4uLik7XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk0Ny1cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3NwX1NQL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdD05NTQ9TGEgZm9ybWEgcHJlZmVyaWRhIHBhcmEgcGFzYXIgZWwgdGFtYcOxbyBkZSB1bmEgZXN0cnVjdHVyYSBlcyBsYSBzaWd1aWVudGU6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9zcF9TUC9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTU3LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3NwX1NQL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo5NTg6XFx0cCA9IGttYWxsb2Nfb2JqKCpwLCAuLi4pO1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3NwX1NQL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NTktXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9rcmVmLnJzdD00Nj1rcmVm5Y+v5Lul5Ye6546w5Zyo5pWw5o2u57uT5p6E5L2T5Lit55qE5Lu75L2V5Zyw5pa544CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9rcmVmLnJzdC01NC1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9rcmVmLnJzdDo1NTogICAgIGRhdGEgPSBrbWFsbG9jX29iaigqZGF0YSk7XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkva3JlZi5yc3QtNTYtICAgICBpZiAoIWRhdGEpXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9rcmVmLnJzdD02Mj1LcmVm6KeE5YiZXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9rcmVmLnJzdC0xMDgtXFx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrO1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL2tyZWYucnN0OjEwOTpcXHRkYXRhID0ga21hbGxvY19vYmooKmRhdGEpO1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL2tyZWYucnN0LTExMC1cXHRpZiAoIWRhdGEpXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9ODEwPURvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL21lbW9yeS1hbGxvY2F0aW9uLnJzdCDjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC04MTUtXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0OjgxNjpcXHRwID0ga21hbGxvY19vYmooKnAsIC4uLik7XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTgxNy1cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdD04MjQ9RG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkvbWVtb3J5LWFsbG9jYXRpb24ucnN0IOOAglxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTgyOS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6ODMwOlxcdHAgPSBrbWFsbG9jX29iaigqcCwgLi4uKTtcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtODMxLVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYz04NTc9bWFydmVsX2FncF9zZXR1cChhbHBoYV9hZ3BfaW5mbyAqYWdwKVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYy04NjMtXFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYzo4NjQ6XFx0YXBlciA9IGttYWxsb2Nfb2JqKCphcGVyKTtcXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jLTg2NS1cXHRpZiAoYXBlciA9PSBOVUxMKSByZXR1cm4gLUVOT01FTTtcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmM9MTAxOT1tYXJ2ZWxfYWdwX2luZm8odm9pZClcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmMtMTA2MS1cXHQgKi9cXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jOjEwNjI6XFx0YWdwID0ga21hbGxvY19vYmooKmFncCk7XFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYy0xMDYzLVxcdGlmICghYWdwKVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV90aXRhbi5jPTU5MD10aXRhbl9hZ3Bfc2V0dXAoYWxwaGFfYWdwX2luZm8gKmFncClcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfdGl0YW4uYy01OTYtXFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV90aXRhbi5jOjU5NzpcXHRhcGVyID0ga21hbGxvY19vYmooc3RydWN0IHRpdGFuX2FncF9hcGVydHVyZSk7XFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV90aXRhbi5jLTU5OC1cXHRpZiAoYXBlciA9PSBOVUxMKVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV90aXRhbi5jPTczMT10aXRhbl9hZ3BfaW5mbyh2b2lkKVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV90aXRhbi5jLTc2Mi1cXHQgKi9cXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX3RpdGFuLmM6NzYzOlxcdGFncCA9IGttYWxsb2Nfb2JqKCphZ3ApO1xcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfdGl0YW4uYy03NjQtXFx0aWYgKCFhZ3ApXFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9tb2R1bGUuYz0yOT1wcm9jZXNzX3JlbG9jX2Zvcl9nb3QoRWxmNjRfUmVsYSAqcmVsYSxcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jLTQ4LVxcbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jOjQ5OlxcdGcgPSBrbWFsbG9jX29iaigqZyk7XFxuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmMtNTAtXFx0Zy1cXHUwMDNlbmV4dCA9IGNoYWluc1tyX3N5bV0ubmV4dDtcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL3BjaS5jPTIxMT1zdGF0aWMgdm9pZCBwZGV2X3NhdmVfc3JtX2NvbmZpZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmMtMjIzLVxcbmFyY2gvYWxwaGEva2VybmVsL3BjaS5jOjIyNDpcXHR0bXAgPSBrbWFsbG9jX29iaigqdG1wKTtcXG5hcmNoL2FscGhhL2tlcm5lbC9wY2kuYy0yMjUtXFx0aWYgKCF0bXApIHtcXG4tLVxcbmFyY2gvYXJjL2tlcm5lbC91bndpbmQuYz0zNTk9dm9pZCAqdW53aW5kX2FkZF90YWJsZShzdHJ1Y3QgbW9kdWxlICptb2R1bGUsIGNvbnN0IHZvaWQgKnRhYmxlX3N0YXJ0LFxcbi0tXFxuYXJjaC9hcmMva2VybmVsL3Vud2luZC5jLTM2OC1cXG5hcmNoL2FyYy9rZXJuZWwvdW53aW5kLmM6MzY5OlxcdHRhYmxlID0ga21hbGxvY19vYmooKnRhYmxlKTtcXG5hcmNoL2FyYy9rZXJuZWwvdW53aW5kLmMtMzcwLVxcdGlmICghdGFibGUpXFxuLS1cXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmM9Mjc0PXN0YXRpYyBpbnQgbG9jb21vX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpXFxuLS1cXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmMtMjc5LVxcbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYzoyODA6XFx0c2F2ZSA9IGttYWxsb2Nfb2JqKHN0cnVjdCBsb2NvbW9fc2F2ZV9kYXRhKTtcXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmMtMjgxLVxcdGlmICghc2F2ZSlcXG4tLVxcbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYz05NjQ9c3RhdGljIGludCBzYTExMTFfc3VzcGVuZF9ub2lycShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5hcmNoL2FybS9jb21tb24vc2ExMTExLmMtOTcxLVxcbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYzo5NzI6XFx0c2F2ZSA9IGttYWxsb2Nfb2JqKHN0cnVjdCBzYTExMTFfc2F2ZV9kYXRhKTtcXG5hcmNoL2FybS9jb21tb24vc2ExMTExLmMtOTczLVxcdGlmICghc2F2ZSlcXG4tLVxcbmFyY2gvYXJtL2tlcm5lbC91bndpbmQuYz01NzI9c3RydWN0IHVud2luZF90YWJsZSAqdW53aW5kX3RhYmxlX2FkZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUsXFxuLS1cXG5hcmNoL2FybS9rZXJuZWwvdW53aW5kLmMtNTc2LVxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuYXJjaC9hcm0va2VybmVsL3Vud2luZC5jOjU3NzpcXHRzdHJ1Y3QgdW53aW5kX3RhYmxlICp0YWIgPSBrbWFsbG9jX29iaigqdGFiKTtcXG5hcmNoL2FybS9rZXJuZWwvdW53aW5kLmMtNTc4LVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwLWlvbW11LmM9NTM9c3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiAqX2dldF9wd3JkbShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtaW9tbXUuYy0xMDEtXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwLWlvbW11LmM6MTAyOlxcdGVudHJ5ID0ga21hbGxvY19vYmooKmVudHJ5KTtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtaW9tbXUuYy0xMDMtXFx0aWYgKGVudHJ5KSB7XFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzR4eC5jPTQwNj1zdGF0aWMgaW50IF9faW5pdCBwd3JkbXNfc2V0dXAoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdm9pZCAqdW51c2VkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYy00MTItXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYzo0MTM6XFx0cHdyc3QgPSBrbWFsbG9jX29iaihzdHJ1Y3QgcG93ZXJfc3RhdGUsIEdGUF9BVE9NSUMpO1xcbmFyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmMtNDE0LVxcdGlmICghcHdyc3QpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtNDR4eC5jPTExMz1zdGF0aWMgaW50IF9faW5pdCBwd3JkbXNfc2V0dXAoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdm9pZCAqdW51c2VkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTQ0eHguYy0xMzQtXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTQ0eHguYzoxMzU6XFx0cHdyc3QgPSBrbWFsbG9jX29iaihzdHJ1Y3QgcG93ZXJfc3RhdGUsIEdGUF9BVE9NSUMpO1xcbmFyY2gvYXJtL21hY2gtb21hcDIvcG00NHh4LmMtMTM2LVxcdGlmICghcHdyc3QpXFxuLS1cXG5hcmNoL2FybS9tbS9wZ2QuYy0xOS0jaWZkZWYgQ09ORklHX0FSTV9MUEFFXFxuYXJjaC9hcm0vbW0vcGdkLmM6MjA6I2RlZmluZSBfcGdkX2FsbG9jKG1tKVxcdFxcdGttYWxsb2Nfb2JqcyhwZ2RfdCwgUFRSU19QRVJfUEdELCBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTylcXG5hcmNoL2FybS9tbS9wZ2QuYy0yMS0jZGVmaW5lIF9wZ2RfZnJlZShtbSwgcGdkKVxcdGtmcmVlKHBnZClcXG4tLVxcbmFyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL3Rlc3QtY29yZS5jPTc2ND1zdGF0aWMgaW50IGNvdmVyYWdlX3N0YXJ0KGNvbnN0IHVuaW9uIGRlY29kZV9pdGVtICp0YWJsZSlcXG5hcmNoL2FybS9wcm9iZXMva3Byb2Jlcy90ZXN0LWNvcmUuYy03NjUte1xcbmFyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL3Rlc3QtY29yZS5jOjc2NjpcXHRjb3ZlcmFnZS5iYXNlID0ga21hbGxvY19vYmpzKHN0cnVjdCBjb3ZlcmFnZV9lbnRyeSxcXG5hcmNoL2FybS9wcm9iZXMva3Byb2Jlcy90ZXN0LWNvcmUuYy03NjctXFx0XFx0XFx0XFx0ICAgICBNQVhfQ09WRVJBR0VfRU5UUklFUyk7XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jPTc3ND12b2lkIGt2bV9ob3N0X3BtdV9pbml0KHN0cnVjdCBhcm1fcG11ICpwbXUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jLTc4Ni1cXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jOjc4NzpcXHRlbnRyeSA9IGttYWxsb2Nfb2JqKCplbnRyeSk7XFxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYy03ODgtXFx0aWYgKCFlbnRyeSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1kZWJ1Zy5jPTEwMj1zdGF0aWMgdm9pZCAqdmdpY19kZWJ1Z19zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGxvZmZfdCAqcG9zKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWRlYnVnLmMtMTA2LVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1kZWJ1Zy5jOjEwNzpcXHRpdGVyID0ga21hbGxvY19vYmooKml0ZXIpO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1kZWJ1Zy5jLTEwOC1cXHRpZiAoIWl0ZXIpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtZGVidWcuYz0zNjQ9c3RhdGljIHZvaWQgKnZnaWNfaXRzX2RlYnVnX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqcywgbG9mZl90ICpwb3MpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtZGVidWcuYy0zNzctXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWRlYnVnLmM6Mzc4OlxcdGl0ZXIgPSBrbWFsbG9jX29iaigqaXRlcik7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWRlYnVnLmMtMzc5LVxcdGlmICghaXRlcilcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM9NzQzPXZvaWQgX19pbml0IHZnaWNfc2V0X2t2bV9pbmZvKGNvbnN0IHN0cnVjdCBnaWNfa3ZtX2luZm8gKmluZm8pXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jLTc0NS1cXHRCVUdfT04oZ2ljX2t2bV9pbmZvICE9IE5VTEwpO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM6NzQ2OlxcdGdpY19rdm1faW5mbyA9IGttYWxsb2Nfb2JqKCpnaWNfa3ZtX2luZm8pO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMtNzQ3LVxcdGlmIChnaWNfa3ZtX2luZm8pXFxuLS1cXG5hcmNoL202OGsvZW11L25mYmxvY2suYz05Nz1zdGF0aWMgaW50IF9faW5pdCBuZmhkX2luaXRfb25lKGludCBpZCwgdTMyIGJsb2NrcywgdTMyIGJzaXplKVxcbi0tXFxuYXJjaC9tNjhrL2VtdS9uZmJsb2NrLmMtMTE0LVxcbmFyY2gvbTY4ay9lbXUvbmZibG9jay5jOjExNTpcXHRkZXYgPSBrbWFsbG9jX29iaihzdHJ1Y3QgbmZoZF9kZXZpY2UpO1xcbmFyY2gvbTY4ay9lbXUvbmZibG9jay5jLTExNi1cXHRpZiAoIWRldilcXG4tLVxcbmFyY2gvbTY4ay9tbS9rbWFwLmM9MTA4PXN0YXRpYyBzdHJ1Y3Qgdm1fc3RydWN0ICpnZXRfaW9fYXJlYSh1bnNpZ25lZCBsb25nIHNpemUpXFxuLS1cXG5hcmNoL202OGsvbW0va21hcC5jLTExMi1cXG5hcmNoL202OGsvbW0va21hcC5jOjExMzpcXHRhcmVhID0ga21hbGxvY19vYmooKmFyZWEpO1xcbmFyY2gvbTY4ay9tbS9rbWFwLmMtMTE0LVxcdGlmICghYXJlYSlcXG4tLVxcbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jPTI1Mz11MzIgYXUxeHh4X2RiZG1hX2NoYW5fYWxsb2ModTMyIHNyY2lkLCB1MzIgZGVzdGlkLFxcbi0tXFxuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmMtMzEyLVxcdFxcdFxcdCAqL1xcbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jOjMxMzpcXHRcXHRcXHRjdHAgPSBrbWFsbG9jX29iaihjaGFuX3RhYl90LCBHRlBfQVRPTUlDKTtcXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYy0zMTQtXFx0XFx0XFx0Y2hhbl90YWJfcHRyW2ldID0gY3RwO1xcbi0tXFxuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmM9MzkxPXUzMiBhdTF4eHhfZGJkbWFfcmluZ19hbGxvYyh1MzIgY2hhbmlkLCBpbnQgZW50cmllcylcXG4tLVxcbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jLTQxNC1cXHQgKi9cXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYzo0MTU6XFx0ZGVzY19iYXNlID0gKHUzMikga21hbGxvY19vYmpzKGF1MXhfZGRtYV9kZXNjX3QsIGVudHJpZXMsXFxuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmMtNDE2LVxcdFxcdFxcdFxcdCAgICAgICBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XFxuLS1cXG5hcmNoL21pcHMva2VybmVsL21vZHVsZS5jPTU5PXN0YXRpYyBpbnQgYXBwbHlfcl9taXBzX2hpMTYoc3RydWN0IG1vZHVsZSAqbWUsIHUzMiAqbG9jYXRpb24sIEVsZl9BZGRyIHYsXFxuLS1cXG5hcmNoL21pcHMva2VybmVsL21vZHVsZS5jLTc0LVxcdCAqL1xcbmFyY2gvbWlwcy9rZXJuZWwvbW9kdWxlLmM6NzU6XFx0biA9IGttYWxsb2Nfb2JqKCpuKTtcXG5hcmNoL21pcHMva2VybmVsL21vZHVsZS5jLTc2LVxcdGlmICghbilcXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvdnBlLmM9MzExPXN0YXRpYyBpbnQgYXBwbHlfcl9taXBzX2hpMTYoc3RydWN0IG1vZHVsZSAqbWUsIHVpbnQzMl90ICpsb2NhdGlvbixcXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvdnBlLmMtMzIwLVxcdCAqL1xcbmFyY2gvbWlwcy9rZXJuZWwvdnBlLmM6MzIxOlxcdG4gPSBrbWFsbG9jX29iaigqbik7XFxuYXJjaC9taXBzL2tlcm5lbC92cGUuYy0zMjItXFx0aWYgKCFuKVxcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jPTE4OD1wYXRfcXVlcnlfbW9kdWxlKHVsb25nIHBjZWxsX2xvYywgdWxvbmcgbW9kX2luZGV4KVxcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jLTE5NS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmM6MTk2OlxcdHBhX3BkY19jZWxsID0ga21hbGxvY19vYmooKnBhX3BkY19jZWxsKTtcXG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmMtMTk3LVxcdGlmICghcGFfcGRjX2NlbGwpXFxuLS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmM9NTMyPWFkZF9zeXN0ZW1fbWFwX2FkZHJlc3NlcyhzdHJ1Y3QgcGFyaXNjX2RldmljZSAqZGV2LCBpbnQgbnVtX2FkZHJzLCBcXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9pbnZlbnRvcnkuYy01MzgtXFxuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jOjUzOTpcXHRkZXYtXFx1MDAzZWFkZHIgPSBrbWFsbG9jX29ianMoKmRldi1cXHUwMDNlYWRkciwgbnVtX2FkZHJzKTtcXG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmMtNTQwLVxcdGlmKCFkZXYtXFx1MDAzZWFkZHIpIHtcXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzb3IuYz04MT1zdGF0aWMgaW50IF9faW5pdCBwcm9jZXNzb3JfcHJvYmUoc3RydWN0IHBhcmlzY19kZXZpY2UgKmRldilcXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzb3IuYy0xMTItXFxuYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3Nvci5jOjExMzpcXHRcXHRwYV9wZGNfY2VsbCA9IGttYWxsb2Nfb2JqKCpwYV9wZGNfY2VsbCk7XFxuYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3Nvci5jLTExNC1cXHRcXHRpZiAoIXBhX3BkY19jZWxsKVxcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jPTE0OT11bndpbmRfdGFibGVfYWRkKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgYmFzZV9hZGRyLCBcXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYy0xNTktXFxuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jOjE2MDpcXHR0YWJsZSA9IGttYWxsb2Nfb2JqKHN0cnVjdCB1bndpbmRfdGFibGUsIEdGUF9VU0VSKTtcXG5hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmMtMTYxLVxcdGlmICh0YWJsZSA9PSBOVUxMKVxcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jPTQwNj12b2lkIHVud2luZF9mcmFtZV9pbml0X2Zyb21fYmxvY2tlZF90YXNrKHN0cnVjdCB1bndpbmRfZnJhbWVfaW5mbyAqaW5mbywgc3RydWN0IHRhc2tfc3RydWN0ICp0KVxcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jLTQxMC1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmM6NDExOlxcdHIyID0ga21hbGxvY19vYmooc3RydWN0IHB0X3JlZ3MsIEdGUF9BVE9NSUMpO1xcbmFyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYy00MTItXFx0aWYgKCFyMilcXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvbnZyYW1fNjQuYz05ODQ9aW50IF9faW5pdCBudnJhbV9zY2FuX3BhcnRpdGlvbnModm9pZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvbnZyYW1fNjQuYy0xMDMyLVxcdFxcdH1cXG5hcmNoL3Bvd2VycGMva2VybmVsL252cmFtXzY0LmM6MTAzMzpcXHRcXHR0bXBfcGFydCA9IGttYWxsb2Nfb2JqKCp0bXBfcGFydCk7XFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9udnJhbV82NC5jLTEwMzQtXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYz03MzE9aW50IGt2bV92Y3B1X2lvY3RsX2NvbmZpZ190bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jLTc3NC1cXHRcXHQgICAgY2ZnLVxcdTAwM2VhcnJheSAvIFBBR0VfU0laRTtcXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmM6Nzc1OlxcdHBhZ2VzID0ga21hbGxvY19vYmpzKCpwYWdlcywgbnVtX3BhZ2VzKTtcXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmMtNzc2LVxcdGlmICghcGFnZXMpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmM9ODk4PWludCBrdm1wcGNfZTUwMF90bGJfaW5pdChzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jLTkxNC1cXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmM6OTE1OlxcdHZjcHVfZTUwMC1cXHUwMDNlZ3RsYl9hcmNoID0ga21hbGxvY19vYmpzKCp2Y3B1X2U1MDAtXFx1MDAzZWd0bGJfYXJjaCxcXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmMtOTE2LVxcdFxcdFxcdFxcdFxcdCAgICBLVk1fRTUwMF9UTEIwX1NJWkUgKyBLVk1fRTUwMF9UTEIxX1NJWkUpO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jPTQ1PXN0YXRpYyBpbnQgZ3JvdyhyaF9pbmZvX3QgKiBpbmZvLCBpbnQgbWF4X2Jsb2NrcylcXG4tLVxcbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYy01Ni1cXG5hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmM6NTc6XFx0YmxvY2sgPSBrbWFsbG9jX29ianMocmhfYmxvY2tfdCwgbWF4X2Jsb2NrcywgR0ZQX0FUT01JQyk7XFxuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jLTU4LVxcdGlmIChibG9jayA9PSBOVUxMKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jPTI1Mz1yaF9pbmZvX3QgKnJoX2NyZWF0ZSh1bnNpZ25lZCBpbnQgYWxpZ25tZW50KVxcbi0tXFxuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jLTI2MC1cXG5hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmM6MjYxOlxcdGluZm8gPSBrbWFsbG9jX29iaigqaW5mbywgR0ZQX0FUT01JQyk7XFxuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jLTI2Mi1cXHRpZiAoaW5mbyA9PSBOVUxMKVxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L21tdV9jb250ZXh0LmM9OTU9c3RhdGljIGludCBoYXNoX19pbml0X25ld19jb250ZXh0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L21tdV9jb250ZXh0LmMtOTgtXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L21tdV9jb250ZXh0LmM6OTk6XFx0bW0tXFx1MDAzZWNvbnRleHQuaGFzaF9jb250ZXh0ID0ga21hbGxvY19vYmooc3RydWN0IGhhc2hfbW1fY29udGV4dCk7XFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L21tdV9jb250ZXh0LmMtMTAwLVxcdGlmICghbW0tXFx1MDAzZWNvbnRleHQuaGFzaF9jb250ZXh0KVxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L21tdV9jb250ZXh0LmMtMTI1LVxcdFxcdGlmIChjdXJyZW50LVxcdTAwM2VtbS1cXHUwMDNlY29udGV4dC5oYXNoX2NvbnRleHQtXFx1MDAzZXNwdCkge1xcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9tbXVfY29udGV4dC5jOjEyNjpcXHRcXHRcXHRtbS1cXHUwMDNlY29udGV4dC5oYXNoX2NvbnRleHQtXFx1MDAzZXNwdCA9IGttYWxsb2Nfb2JqKHN0cnVjdCBzdWJwYWdlX3Byb3RfdGFibGUpO1xcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9tbXVfY29udGV4dC5jLTEyNy1cXHRcXHRcXHRpZiAoIW1tLVxcdTAwM2Vjb250ZXh0Lmhhc2hfY29udGV4dC1cXHUwMDNlc3B0KSB7XFxuLS1cXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmM9NjIzPXN0YXRpYyBpbnQgZXZlbnRfdW5pcV9hZGQoc3RydWN0IHJiX3Jvb3QgKnJvb3QsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBubCxcXG4tLVxcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy02NTAtXFxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jOjY1MTpcXHRkYXRhID0ga21hbGxvY19vYmooKmRhdGEpO1xcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy02NTItXFx0aWYgKCFkYXRhKVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jPTc1NT1zdGF0aWMgaW50IGNyZWF0ZV9ldmVudHNfZnJvbV9jYXRhbG9nKHN0cnVjdCBhdHRyaWJ1dGUgKioqZXZlbnRzXyxcXG4tLVxcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MDgtXFxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jOjkwOTpcXHRldmVudHMgPSBrbWFsbG9jX29ianMoKmV2ZW50cywgYXR0cl9tYXggKyAxKTtcXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtOTEwLVxcdGlmICghZXZlbnRzKSB7XFxuLS1cXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtOTE0LVxcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYzo5MTU6XFx0ZXZlbnRfZGVzY3MgPSBrbWFsbG9jX29ianMoKmV2ZW50X2Rlc2NzLCBldmVudF9pZHggKyAxKTtcXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtOTE2LVxcdGlmICghZXZlbnRfZGVzY3MpIHtcXG4tLVxcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MjAtXFxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jOjkyMTpcXHRldmVudF9sb25nX2Rlc2NzID0ga21hbGxvY19vYmpzKCpldmVudF9sb25nX2Rlc2NzLCBldmVudF9pZHggKyAxKTtcXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtOTIyLVxcdGlmICghZXZlbnRfbG9uZ19kZXNjcykge1xcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvaHN0YV9tc2kuYz0xMjI9c3RhdGljIGludCBoc3RhX21zaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvaHN0YV9tc2kuYy0xNTMtXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvaHN0YV9tc2kuYzoxNTQ6XFx0cHBjNHh4X2hzdGFfbXNpLmlycV9tYXAgPSBrbWFsbG9jX29ianMoaW50LCBpcnFfY291bnQpO1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2hzdGFfbXNpLmMtMTU1LVxcdGlmICghcHBjNHh4X2hzdGFfbXNpLmlycV9tYXApIHtcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmM9NDQ9c3RhdGljIGludCBzcHVmc19hdHRyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jLTQ5LVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmM6NTA6XFx0YXR0ciA9IGttYWxsb2Nfb2JqKCphdHRyKTtcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jLTUxLVxcdGlmICghYXR0cilcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9kbHBhci5jPTYyOD12b2lkIHF1ZXVlX2hvdHBsdWdfZXZlbnQoc3RydWN0IHBzZXJpZXNfaHBfZXJyb3Jsb2cgKmhwX2VycmxvZylcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9kbHBhci5jLTYzNi1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZGxwYXIuYzo2Mzc6XFx0d29yayA9IGttYWxsb2Nfb2JqKHN0cnVjdCBwc2VyaWVzX2hwX3dvcmssIEdGUF9BVE9NSUMpO1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9kbHBhci5jLTYzOC1cXHRpZiAod29yaykge1xcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2h2Y3NlcnZlci5jPTExOT1pbnQgaHZjc19nZXRfcGFydG5lcl9pbmZvKHVpbnQzMl90IHVuaXRfYWRkcmVzcywgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCxcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odmNzZXJ2ZXIuYy0xNjItXFx0XFx0ICogaHZjc19mcmVlX3BhcnRuZXJfaW5mbygpLiAqL1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odmNzZXJ2ZXIuYzoxNjM6XFx0XFx0bmV4dF9wYXJ0bmVyX2luZm8gPSBrbWFsbG9jX29iaihzdHJ1Y3QgaHZjc19wYXJ0bmVyX2luZm8sXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2h2Y3NlcnZlci5jLTE2NC1cXHRcXHRcXHRcXHRcXHRcXHRHRlBfQVRPTUlDKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyY2ZnLmM9MTQ0PXN0YXRpYyB2b2lkIHNob3dfZ3BjaV9kYXRhKHN0cnVjdCBzZXFfZmlsZSAqbSlcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyY2ZnLmMtMTQ5LVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyY2ZnLmM6MTUwOlxcdGJ1ZiA9IGttYWxsb2Nfb2JqKCpidWYpO1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyY2ZnLmMtMTUxLVxcdGlmIChidWYgPT0gTlVMTClcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9tc2kuYz00MzU9c3RhdGljIGludCBwc2VyaWVzX21zaV9vcHNfcHJlcGFyZShzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLCBzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbXNpLmMtNDQzLVxcdHN0cnVjdCBwc2VyaWVzX21zaV9kZXZpY2UgKnBzZXJpZXNfZGV2IF9fZnJlZShrZnJlZSlcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbXNpLmM6NDQ0OlxcdFxcdD0ga21hbGxvY19vYmooKnBzZXJpZXNfZGV2KTtcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbXNpLmMtNDQ1LVxcdGlmICghcHNlcmllc19kZXYpXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpLmM9MTIwPXN0YXRpYyBpbnQgcHNlcmllc19wY2lfc3Jpb3ZfZW5hYmxlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1MTYgbnVtX3ZmcylcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wY2kuYy0xNDMtXFx0cGRuID0gcGNpX2dldF9wZG4ocGRldik7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaS5jOjE0NDpcXHRwZG4tXFx1MDAzZXBlX251bV9tYXAgPSBrbWFsbG9jX29ianMoKnBkbi1cXHUwMDNlcGVfbnVtX21hcCwgbnVtX3Zmcyk7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaS5jLTE0NS1cXHRpZiAoIXBkbi1cXHUwMDNlcGVfbnVtX21hcClcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92YXMuYz0xMDc2PXN0YXRpYyBpbnQgX19pbml0IHBzZXJpZXNfdmFzX2luaXQodm9pZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92YXMuYy0xMDg5LVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92YXMuYzoxMDkwOlxcdGh2X2NhcHMgPSBrbWFsbG9jX29iaigqaHZfY2Fwcyk7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Zhcy5jLTEwOTEtXFx0aWYgKCFodl9jYXBzKVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Zpby5jPTcwNT1zdGF0aWMgaW50IHZpb19jbW9fYnVzX3Byb2JlKHN0cnVjdCB2aW9fZGV2ICp2aW9kZXYpXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvdmlvLmMtNzQ3LVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92aW8uYzo3NDg6XFx0XFx0ZGV2X2VudCA9IGttYWxsb2Nfb2JqKHN0cnVjdCB2aW9fY21vX2Rldl9lbnRyeSk7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Zpby5jLTc0OS1cXHRcXHRpZiAoIWRldl9lbnQpXFxuLS1cXG5hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9sYmMuYz0zNTI9c3RhdGljIGludCBmc2xfbGJjX3N5c2NvcmVfc3VzcGVuZCh2b2lkICpkYXRhKVxcbi0tXFxuYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfbGJjLmMtMzY0LVxcbmFyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX2xiYy5jOjM2NTpcXHRjdHJsLVxcdTAwM2VzYXZlZF9yZWdzID0ga21hbGxvY19vYmooc3RydWN0IGZzbF9sYmNfcmVncyk7XFxuYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfbGJjLmMtMzY2LVxcdGlmICghY3RybC1cXHUwMDNlc2F2ZWRfcmVncylcXG4tLVxcbmFyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jPTE1NDk9dm9pZCBfX2luaXQgbXBpY19pbml0KHN0cnVjdCBtcGljICptcGljKVxcbi0tXFxuYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMtMTY0MS1cXHQvKiBhbGxvY2F0ZSBtZW1vcnkgdG8gc2F2ZSBtcGljIHN0YXRlICovXFxuYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmM6MTY0MjpcXHRtcGljLVxcdTAwM2VzYXZlX2RhdGEgPSBrbWFsbG9jX29ianMoKm1waWMtXFx1MDAzZXNhdmVfZGF0YSwgbXBpYy1cXHUwMDNlbnVtX3NvdXJjZXMpO1xcbmFyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jLTE2NDMtXFx0QlVHX09OKG1waWMtXFx1MDAzZXNhdmVfZGF0YSA9PSBOVUxMKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9zeXNkZXYvb2ZfcnRjLmM9MjM9dm9pZCBfX2luaXQgb2ZfaW5zdGFudGlhdGVfcnRjKHZvaWQpXFxuLS1cXG5hcmNoL3Bvd2VycGMvc3lzZGV2L29mX3J0Yy5jLTM1LVxcbmFyY2gvcG93ZXJwYy9zeXNkZXYvb2ZfcnRjLmM6MzY6XFx0XFx0XFx0cmVzID0ga21hbGxvY19vYmooKnJlcyk7XFxuYXJjaC9wb3dlcnBjL3N5c2Rldi9vZl9ydGMuYy0zNy1cXHRcXHRcXHRpZiAoIXJlcykge1xcbi0tXFxuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLmM9NjU0PXN0YXRpYyBpbnQgYWRkX3JlbG9jYXRpb25fdG9fYWNjdW11bGF0ZShzdHJ1Y3QgbW9kdWxlICptZSwgaW50IHR5cGUsXFxuLS1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUuYy02NjUtXFxuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLmM6NjY2OlxcdGVudHJ5ID0ga21hbGxvY19vYmooKmVudHJ5KTtcXG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUuYy02NjctXFxuLS1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUuYy02OTktXFx0aWYgKCFmb3VuZCkge1xcbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jOjcwMDpcXHRcXHRyZWxfaGVhZCA9IGttYWxsb2Nfb2JqKCpyZWxfaGVhZCk7XFxuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLmMtNzAxLVxcbi0tXFxuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLmMtNzExLVxcdFxcdFxcdGJ1Y2tldCA9XFxuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLmM6NzEyOlxcdFxcdFxcdFxcdGttYWxsb2Nfb2JqKHN0cnVjdCB1c2VkX2J1Y2tldCk7XFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjE0OjU1LjA3MTIxMTY1MloiLCJTZXEiOjYxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjcxNTU5NjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLZXJuZWwgTWVtb3J5IEFsbG9jYXRpb24gYW5kIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBuZXcgYGttYWxsb2Nfb2JqYCBtYWNybyBpbiB0aGUga2VybmVsIOKAkyBzZWVtcyBsaWtlIGl0J3MgbWVhbnQgdG8gY2xlYW4gdXAgY29kZSBieSByZXBsYWNpbmcgdGhlIG1vcmUgdmVyYm9zZSBga21hbGxvYyhzaXplb2YoKnB0ciksIC4uLilgLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzLCBobW0sIGl0J3MgYGttYWxsb2Nfb2JqKCp1dl9saXN0KWAsIG9yIG1heWJl4oCmIG5vLCB3YWl0LCBpdCdzIGRlZmluaXRlbHkgYGttYWxsb2Nfb2JqKCpwdHIpYC4gSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQuIEFoLCByaWdodCwgc28gYHV2X2xpc3QgPSBrbWFsbG9jX29iaigqdXZfbGlzdCk7YCBpcyByZWFsbHkganVzdCBhIHNob3J0aGFuZCBmb3Igc29tZXRoaW5nIGxpa2UgYHV2X2xpc3QgPSBrbWFsbG9jKHNpemVvZigqdXZfbGlzdCksIEdGUF9LRVJORUwpO2AuXG5cbk5vdywgdGhlIGltcG9ydGFudCB0aGluZyBoZXJlIGlzIHRoYXQgYGttYWxsb2NgICpkb2Vzbid0KiB6ZXJvIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LiBUaGF0J3MgYGt6YWxsb2NgJ3Mgam9iLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGltcG9ydGFudCBpbiBqdXN0IGEgYml0LlxuXG5Pa2F5LCBsZXQncyBsb29rIGF0IGBkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuY2AuIFNwZWNpZmljYWxseSwgYXQgdGhlIGBnZXRfc2VjcmV0X21ldGFkYXRhYCBmdW5jdGlvbi4gSGVyZSwgSSBzZWUgdGhhdCBgdXZfbGlzdGAgaXMgemVyb2VkICpiZWZvcmUqIGNhbGxpbmcgYHV2X2ZpbmRfc2VjcmV0YCB3aXRoIGBtZW1zZXQodXZfbGlzdCwgMCwgc2l6ZW9mKCp1dl9saXN0KSk7YC4gVGhpcyBtZWFucyB0aGF0IGB1dl9saXN0YCBpcyBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgd2UgZXZlbiBnZXQgdG8gdGhhdCBmdW5jdGlvbiFcblxuSG1tLCB0aGF0IGFsbCBzZWVtcyBjb3JyZWN0LiBOb3csIEkgaGF2ZSB0byB3b25kZXIgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3IgYHV2aW9fZ2V0X2xpc3RgIGluIGBkcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jYC4gVGhhdCdzIHRoZSBuZXh0IHBsYWNlIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQwMTAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTU6MDIuMzQyNzc0NzE0WiIsIlNlcSI6NjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwNyxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMwNzpcXHRzdGF0aWMgaW50IHV2aW9fZ2V0X2xpc3Qodm9pZCAqenBhZ2UsIHN0cnVjdCB1dmlvX2lvY3RsX2NiICp1dl9pb2N0bClcXG4gMzA4OlxcdHtcXG4gMzA5OlxcdFxcdGNvbnN0IHNpemVfdCBkYXRhX29mZiA9IG9mZnNldG9mKHN0cnVjdCB1dl9zZWNyZXRfbGlzdCwgc2VjcmV0cyk7XFxuIDMxMDpcXHRcXHR1OCBfX3VzZXIgKnVzZXJfYnVmID0gKHU4IF9fdXNlciAqKXV2X2lvY3RsLVxcdTAwM2Vhcmd1bWVudF9hZGRyO1xcbiAzMTE6XFx0XFx0c3RydWN0IHV2X3NlY3JldF9saXN0ICpsaXN0ID0genBhZ2U7XFxuIDMxMjpcXHRcXHR1MTYgbnVtX3NlY3JldHNfc3RvcmVkID0gMDtcXG4gMzEzOlxcdFxcdHNpemVfdCB1c2VyX29mZiA9IGRhdGFfb2ZmO1xcbiAzMTQ6XFx0XFx0c2l6ZV90IGNvcHlfbGVuO1xcbiAzMTU6XFx0XFxuIDMxNjpcXHRcXHRkbyB7XFxuIDMxNzpcXHRcXHRcXHR1dl9saXN0X3NlY3JldHMobGlzdCwgbGlzdC1cXHUwMDNlbmV4dF9zZWNyZXRfaWR4LCBcXHUwMDI2dXZfaW9jdGwtXFx1MDAzZXV2X3JjLFxcbiAzMTg6XFx0XFx0XFx0XFx0XFx0XFx1MDAyNnV2X2lvY3RsLVxcdTAwM2V1dl9ycmMpO1xcbiAzMTk6XFx0XFx0XFx0aWYgKHV2X2lvY3RsLVxcdTAwM2V1dl9yYyAhPSBVVkNfUkNfRVhFQ1VURUQgXFx1MDAyNlxcdTAwMjZcXG4gMzIwOlxcdFxcdFxcdCAgICB1dl9pb2N0bC1cXHUwMDNldXZfcmMgIT0gVVZDX1JDX01PUkVfREFUQSlcXG4gMzIxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAzMjI6XFx0XFxuIDMyMzpcXHRcXHRcXHRjb3B5X2xlbiA9IHNpemVvZihsaXN0LVxcdTAwM2VzZWNyZXRzWzBdKSAqIGxpc3QtXFx1MDAzZW51bV9zZWNyX3N0b3JlZDtcXG4gMzI0OlxcdFxcdFxcdGlmIChjb3B5X3RvX3VzZXIodXNlcl9idWYgKyB1c2VyX29mZiwgbGlzdC1cXHUwMDNlc2VjcmV0cywgY29weV9sZW4pKVxcbiAzMjU6XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDMyNjpcXHRcXG4gMzI3OlxcdFxcdFxcdHVzZXJfb2ZmICs9IGNvcHlfbGVuO1xcbiAzMjg6XFx0XFx0XFx0bnVtX3NlY3JldHNfc3RvcmVkICs9IGxpc3QtXFx1MDAzZW51bV9zZWNyX3N0b3JlZDtcXG4gMzI5OlxcdFxcdH0gd2hpbGUgKHV2X2lvY3RsLVxcdTAwM2V1dl9yYyA9PSBVVkNfUkNfTU9SRV9EQVRBIFxcdTAwMjZcXHUwMDI2XFxuIDMzMDpcXHRcXHRcXHQgdXNlcl9vZmYgKyBzaXplb2YoKmxpc3QpIFxcdTAwM2M9IHV2X2lvY3RsLVxcdTAwM2Vhcmd1bWVudF9sZW4pO1xcbiAzMzE6XFx0XFxuIDMzMjpcXHRcXHRsaXN0LVxcdTAwM2VudW1fc2Vjcl9zdG9yZWQgPSBudW1fc2VjcmV0c19zdG9yZWQ7XFxuIDMzMzpcXHRcXHRpZiAoY29weV90b191c2VyKHVzZXJfYnVmLCBsaXN0LCBkYXRhX29mZikpXFxuIDMzNDpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gMzM1OlxcdFxcdHJldHVybiAwO1xcbiAzMzY6XFx0fVxcbiAzMzc6XFx0XFxuIDMzODpcXHQvKipcXG4gMzM5OlxcdCAqIHV2aW9fbGlzdF9zZWNyZXRzKCkgLSBQZXJmb3JtIGEgTGlzdCBTZWNyZXQgVVZDXFxuIDM0MDpcXHQgKlxcbiAzNDE6XFx0ICogQHV2X2lvY3RsOiBpb2N0bCBjb250cm9sIGJsb2NrXFxuIDM0MjpcXHQgKlxcbiAzNDM6XFx0ICogdXZpb19saXN0X3NlY3JldHMoKSBwZXJmb3JtcyB0aGUgTGlzdCBTZWNyZXQgVWx0cmF2aXNvciBDYWxsLiBJdCB2ZXJpZmllc1xcbiAzNDQ6XFx0ICogdGhhdCB0aGUgZ2l2ZW4gdXNlcnNwYWNlIGFyZ3VtZW50IGFkZHJlc3MgaXMgdmFsaWQgYW5kIGl0cyBzaXplIGlzIHNhbmUuXFxuIDM0NTpcXHQgKiBFdmVyeSBvdGhlciBjaGVjayBpcyBtYWRlIGJ5IHRoZSBVbHRyYXZpc29yIChVVikgYW5kIHdvbid0IHJlc3VsdCBpbiBhXFxuIDM0NjpcXHQgKiBuZWdhdGl2ZSByZXR1cm4gdmFsdWUuIEl0IGJ1aWxkcyB0aGUgcmVxdWVzdCwgcGVyZm9ybXMgdGhlIFVWLWNhbGwsIGFuZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODoxNTowMi4zNDI5MTE2NzRaIiwiU2VxIjo2MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA3NTk5ODE3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgdGhlIE1lbW9yeSBBbGxvY2F0aW9uIGFuZCBVc2FnZSBpbiBgdXZpb19nZXRfbGlzdGAqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGB1dmlvX2dldF9saXN0YCBmdW5jdGlvbi4gSSBzZWUgdGhhdCBgenBhZ2VgIGlzIGJlaW5nIHBhc3NlZCBpbiBhcyBhIGBsaXN0YC4gTm93LCBgenBhZ2VgLCBmcm9tIHdoYXQgSSByZWNhbGwgb2YgdGhlIGNvZGViYXNlLCBpcyBhIGNodW5rIG9mIG1lbW9yeSwgYSBwYWdlIHNwZWNpZmljYWxseS4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiBJcyB0aGlzIG1lbW9yeSBndWFyYW50ZWVkIHRvIGJlIGluaXRpYWxpemVkLCBvciBpcyBpdCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkLCBob2xkaW5nIGdhcmJhZ2UgZGF0YT8gVGhpcyBpcyBjcnVjaWFsIGZvciBhdm9pZGluZyB1bmV4cGVjdGVkIGJlaGF2aW9yIGRvd24gdGhlIGxpbmUsIHBvdGVudGlhbGx5IHNlY3VyaXR5IGlzc3Vlcywgb3Igc2ltcGx5IGRhdGEgY29ycnVwdGlvbiBpZiB0aGUgY29kZSByZWxpZXMgb24gYSB6ZXJvZWQgcGFnZS4gSSByZWFsbHkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYHpwYWdlYCBpcyBwcm9wZXJseSBjbGVhcmVkLiBUaGUgYmVzdCB0aGluZyB0byBkbyBpcyB0cmFjayBkb3duIHdoZXJlIGB1dmlvX2dldF9saXN0YCBpcyBjYWxsZWQgZnJvbS4gVGhhdCBjYWxsIHNpdGUgd2lsbCBnaXZlIG1vcmUgY29udGV4dCBvbiBob3cgdGhlIGB6cGFnZWAgaXMgbWFuYWdlZCBhbmQgYWxsb2NhdGVkLCBob3BlZnVsbHkgYW5zd2VyaW5nIHRoaXMgYWxsIGltcG9ydGFudCBxdWVzdGlvbiBvbiBpbml0aWFsIHN0YXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTQ5NSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTU6MDYuNDE4OTEyMTM0WiIsIlNlcSI6NjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTU3MTYxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1dmlvX2dldF9saXN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvczM5MC9jaGFyL3V2ZGV2aWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYz0yNjk9c3RhdGljIGludCB1dmlvX2FkZF9zZWNyZXQoc3RydWN0IHV2aW9faW9jdGxfY2IgKnV2X2lvY3RsKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYy0zMDYtICovXFxuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYzozMDc6c3RhdGljIGludCB1dmlvX2dldF9saXN0KHZvaWQgKnpwYWdlLCBzdHJ1Y3QgdXZpb19pb2N0bF9jYiAqdXZfaW9jdGwpXFxuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYy0zMDgte1xcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYz0zNjU9c3RhdGljIGludCB1dmlvX2xpc3Rfc2VjcmV0cyhzdHJ1Y3QgdXZpb19pb2N0bF9jYiAqdXZfaW9jdGwpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jLTM3Ny1cXG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jOjM3ODpcXHRyYyA9IHV2aW9fZ2V0X2xpc3QoenBhZ2UsIHV2X2lvY3RsKTtcXG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jLTM3OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTU6MDYuNDY0NDkxMzhaIiwiU2VxIjo2NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTEyNzA4MzMwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQ6XG5cbioqRGl2aW5nIGludG8gdGhlIGB1dmlvX2xpc3Rfc2VjcmV0c2AgQ29tbWFuZCoqXG5cbkFscmlnaHQsIGB1dmlvX2xpc3Rfc2VjcmV0c2AuIExldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCByZWFjdGlvbiBpcywgXCJSaWdodCwgSSBrbm93IHRoaXMgb25lLlwiIFRoYXQgY29tbWFuZCBpcyBsaWtlbHkgcGFydCBvZiB0aGUgYHV2aW9gIHV0aWxpdHksIHdoYXRldmVyIHN5c3RlbSBpdCBtaWdodCBiZSBwYXJ0IG9mLiBUaGUgJ2xpc3QnIHBhcnQgaXMgcHJldHR5IHNlbGYtZXhwbGFuYXRvcnkg4oCTIHdlJ3JlIGVudW1lcmF0aW5nIHNvbWV0aGluZy4gQW5kICdzZWNyZXRzJ+KApiB3ZWxsLCB0aGF0IGNvdWxkIG1lYW4gYSByYW5nZSBvZiB0aGluZ3MsIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dC5cblxuTXkgZXhwZXJ0aXNlIGltbWVkaWF0ZWx5IGtpY2tzIGluIHRvIGhlbHAgbWUgY2F0ZWdvcml6ZSBteSB0aGlua2luZzpcblxuKiAgICoqUG90ZW50aWFsIENvbnRleHQ6KiogSSBuZWVkIHRvIGltbWVkaWF0ZWx5IGNvbnNpZGVyIHRoZSBzeXN0ZW0gdGhpcyBpcyBwYXJ0IG9mLiBJcyBpdCBhIGNsb3VkIGVudmlyb25tZW50PyBBIGRldmVsb3BtZW50IGZyYW1ld29yaz8gSXMgaXQgcmVsYXRlZCB0byBjb250YWluZXJpemF0aW9uIG9yIEt1YmVybmV0ZXM/IFVuZGVyc3RhbmRpbmcgdGhlIGVudmlyb25tZW50IGluZm9ybXMgdGhlICp0eXBlKiBvZiBzZWNyZXRzIHdlJ3JlIHRhbGtpbmcgYWJvdXQgKEFQSSBrZXlzLCBwYXNzd29yZHMsIGNlcnRpZmljYXRlcywgZXRjLikgYW5kIHdoZXJlIHRoZXkgYXJlIHN0b3JlZCwgYmVjYXVzZSB0aGUgYHV2aW9gIGZ1bmN0aW9uYWxpdHkgZGljdGF0ZXMgaG93IHdlIGludGVyYWN0IHdpdGggdGhvc2UgaXRlbXMuXG4qICAgKipTZWN1cml0eSBJbXBsaWNhdGlvbnM6KiogTGlzdGluZyBzZWNyZXRzIGlzIGluaGVyZW50bHkgc2Vuc2l0aXZlLiBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgcGVybWlzc2lvbnMgYW5kIGFjY2VzcyBjb250cm9scy4gSSdkIGV4cGVjdCB0aGlzIGNvbW1hbmQgdG8gcmVxdWlyZSBhdXRoZW50aWNhdGlvbiBhbmQgYXV0aG9yaXphdGlvbi4gSXQncyBjcnVjaWFsIHRoaXMgdG9vbCBpcyBjb25maWd1cmVkIHRvIG9ubHkgcmV2ZWFsIHNlY3JldHMgdG8gdGhlIHJpZ2h0IHVzZXJzIGFuZCBwcm9jZXNzZXMuXG4qICAgKipEYXRhIEZvcm1hdCBcdTAwMjYgT3V0cHV0OioqIFdoYXQgd2lsbCB0aGUgb3V0cHV0IGxvb2sgbGlrZT8gV2lsbCBpdCBiZSBhIHNpbXBsZSBsaXN0IG9mIG5hbWVzLCBvciBtb3JlIGRldGFpbGVkIGluZm9ybWF0aW9uIChkZXNjcmlwdGlvbnMsIGFzc29jaWF0ZWQgYXBwbGljYXRpb25zLCB1c2FnZSBkYXRhLCBldGMuKT8gSSdsbCBwcm9iYWJseSBiZSBsb29raW5nIGZvciBmb3JtYXR0aW5nIG9wdGlvbnMgbGlrZSBKU09OLCBZQU1MLCBvciBhIHN0cnVjdHVyZWQgdGFibGUgZm9yIGVhc3kgcGFyc2luZyBhbmQgYXV0b21hdGlvbi4gV2hhdCBmbGFncyBhcmUgc3VwcG9ydGVkIHRvIHRhaWxvciB0aGlzIG91dHB1dD9cbiogICAqKkVycm9yIEhhbmRsaW5nOioqIFdoYXQgaGFwcGVucyBpZiBJIGRvbid0IGhhdmUgdGhlIHByb3BlciBwZXJtaXNzaW9ucz8gT3IgaWYgdGhlcmUncyBhbiBlcnJvciByZXRyaWV2aW5nIHRoZSBzZWNyZXRzPyBHb29kIGxvZ2dpbmcgYW5kIGVycm9yIG1lc3NhZ2VzIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHRvb2wncyBiZWhhdmlvciBhbmQgdHJvdWJsZXNob290aW5nIGFueSBpc3N1ZXMuXG4qICAgKipVc2UgQ2FzZXM6KiogV2hhdCBhcmUgdGhlIHR5cGljYWwgcmVhc29ucyBmb3IgbGlzdGluZyBzZWNyZXRzPyBEZWJ1Z2dpbmcgYW4gYXBwbGljYXRpb24/IEF1ZGl0aW5nIHNlY3VyaXR5IGNvbmZpZ3VyYXRpb25zPyBBdXRvbWF0aW5nIHNlY3JldCByb3RhdGlvbj8gVGhlIHVzZSBjYXNlIHdpbGwgaW5mb3JtIGhvdyBJIGFwcHJvYWNoIHRoaXMgY29tbWFuZC5cbiogICAqKkFzc3VtZWQgS25vd2xlZGdlOioqIEl0J3MgbGlrZWx5IEkgYWxyZWFkeSB1bmRlcnN0YW5kIGhvdyB0byBtYW5hZ2Ugc2VjcmV0cyB3aXRoaW4gdGhpcyBlY29zeXN0ZW0uIElmIGl0J3MgYSBkZWRpY2F0ZWQgc2VjcmV0cyBtYW5hZ2VyLCBJIGxpa2VseSBrbm93IHRoZSBrZXkgY29uY2VwdHMgb2YgdGhlIHRlY2hub2xvZ3kuXG5cblNvLCBvdmVyYWxsLCBteSBtaW5kIGlzIGltbWVkaWF0ZWx5IGZvcm11bGF0aW5nIHF1ZXN0aW9ucyBhbmQgaHlwb3RoZXNlcy4gSSdtIHJlYWR5IHRvIGRpZyBpbnRvIHRoZSBkb2N1bWVudGF0aW9uLCBvciB0cnkgdGhlIGNvbW1hbmQgZGlyZWN0bHkgdG8gc2VlIHdoYXQgaW5mb3JtYXRpb24gaXQgcmV2ZWFscy4gSXQgYWxsIGNvbWVzIGRvd24gdG8gdGhlIGNvbnRleHQgSSBrbm93IGFuZCBob3cgbXVjaCBjb250cm9sIEkgaGF2ZSBvdmVyIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjA1MywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjE1OjExLjU5MTU3NzU3MloiLCJTZXEiOjY2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Nzg1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM2NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM2NTpcXHRzdGF0aWMgaW50IHV2aW9fbGlzdF9zZWNyZXRzKHN0cnVjdCB1dmlvX2lvY3RsX2NiICp1dl9pb2N0bClcXG4gMzY2OlxcdHtcXG4gMzY3OlxcdFxcdHZvaWQgKnpwYWdlO1xcbiAzNjg6XFx0XFx0aW50IHJjO1xcbiAzNjk6XFx0XFxuIDM3MDpcXHRcXHRpZiAodXZfaW9jdGwtXFx1MDAzZWFyZ3VtZW50X2xlbiA9PSAwIHx8XFxuIDM3MTpcXHRcXHQgICAgdXZfaW9jdGwtXFx1MDAzZWFyZ3VtZW50X2xlbiAlIFVWSU9fTElTVF9TRUNSRVRTX0xFTiAhPSAwKVxcbiAzNzI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDM3MzpcXHRcXG4gMzc0OlxcdFxcdHpwYWdlID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7XFxuIDM3NTpcXHRcXHRpZiAoIXpwYWdlKVxcbiAzNzY6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDM3NzpcXHRcXG4gMzc4OlxcdFxcdHJjID0gdXZpb19nZXRfbGlzdCh6cGFnZSwgdXZfaW9jdGwpO1xcbiAzNzk6XFx0XFxuIDM4MDpcXHRcXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpenBhZ2UpO1xcbiAzODE6XFx0XFx0cmV0dXJuIHJjO1xcbiAzODI6XFx0fVxcbiAzODM6XFx0XFxuIDM4NDpcXHQvKipcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTU6MTEuNTkxNjU2NTUyWiIsIlNlcSI6NjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxODMzMzUxMjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBDb2RlIGFuZCBWdWxuZXJhYmlsaXRpZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSBgenBhZ2VgIGlzIGV4cGxpY2l0bHkgemVyb2VkIHdpdGggYGdldF96ZXJvZWRfcGFnZWAuIEdvb2QsIHRoYXQgZWxpbWluYXRlcyBhIHdob2xlIGNsYXNzIG9mIHBvdGVudGlhbCBwcm9ibGVtcyByaWdodCBvZmYgdGhlIGJhdC4gVGhlbiBJIHN0YXJ0ZWQgdG8gdGhpbmssIFwiV2hhdCBhYm91dCBgdXZfbGlzdF9zZWNyZXRzYD8gQ291bGQgaXQgYmUgd3JpdGluZyB1bmluaXRpYWxpemVkIGRhdGEgc29tZXdoZXJlP1wiIEJ1dCwgYHV2X2xpc3Rfc2VjcmV0c2AgaXMgYSBoeXBlcnZpc29yIGNhbGwsIHNvIHRoZSBoeXBlcnZpc29yIGlzIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyBpdCB3cml0ZXMgaW5pdGlhbGl6ZWQgZGF0YS4gRXZlbiBpZiBpdCBkb2Vzbid0LCB0aGF0J3Mgbm90IGEga2VybmVsLXNwYWNlIGJ1Zy5cblxuQnV0LCB3aGVuIEkgZXhhbWluZSBgdXZfbGlzdF9zZWNyZXRzYCBjYWxsZWQgaW4gYHV2aW9fZ2V0X2xpc3RgLCBJIHNlZSB0aGF0IGl0IHVzZXMgYGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4YCBhcyBgc3RhcnRfaWR4YC4gSW4gdGhlIGZpcnN0IGl0ZXJhdGlvbiwgYGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4YCBpcyB6ZXJvLCBiZWNhdXNlIHRoZSBwYWdlIGB6cGFnZWAgaXMgemVyb2VkLCBhbmQgaXQgaXMgemVyby1pbml0aWFsaXplZC4gQWZ0ZXIgdGhlIGNhbGwgdG8gYHV2X2xpc3Rfc2VjcmV0c2AsIGl0IHVwZGF0ZXMgYGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4YCBpZiB0aGVyZSdzIG1vcmUgZGF0YS4gVGhlbiBgY29weV90b191c2VyYCBjb3BpZXMgYGxpc3QtXHUwMDNlc2VjcmV0c2AgdG8gdXNlciBzcGFjZS4gSXQgY29waWVzIGV4YWN0bHkgYGxpc3QtXHUwMDNlbnVtX3NlY3Jfc3RvcmVkYCBpdGVtcy4gVGhlIHplcm9pbmcgb2YgdGhlIHBhZ2UgbWVhbnMgYW55dGhpbmcgKm5vdCogd3JpdHRlbiB3aWxsIGJlIHplcm8uIFNpbmNlIHRoZSBoeXBlcnZpc29yIGlzICpzdXBwb3NlZCogdG8gd3JpdGUgdGhvc2UgZWxlbWVudHMsIGFueSB1bndyaXR0ZW4gZWxlbWVudHMgYXJlIHplcm8uIFNvIEkgYW0gY29uZmlkZW50LCBhdCB0aGlzIHBvaW50LCB0aGF0IHRoZXJlJ3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhayB0byB1c2VyIHNwYWNlIGhlcmUuXG5cbk5vdywgbGV0J3MgcmUtZXhhbWluZSB0aGUgcGF0Y2ggaXRzZWxmLlxuXG5gYGBjXG4gXHR1MTYgaTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGxpc3QtXHUwMDNldG90YWxfbnVtX3NlY3JldHM7IGkrKykge1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbGlzdC1cdTAwM2VudW1fc2Vjcl9zdG9yZWQ7IGkrKykge1xuIFx0XHRpZiAobWVtY21wKHNlY3JldF9pZCwgbGlzdC1cdTAwM2VzZWNyZXRzW2ldLmlkLCBVVl9TRUNSRVRfSURfTEVOKSA9PSAwKSB7XG4gXHRcdFx0KnNlY3JldCA9IGxpc3QtXHUwMDNlc2VjcmV0c1tpXS5oZHI7XG4gXHRcdFx0cmV0dXJuIDA7XG5gYGBcblxuQWgsIHRoaXMgZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIHZ1bG5lcmFiaWxpdHkuIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyB1c2luZyBgbGlzdC1cdTAwM2V0b3RhbF9udW1fc2VjcmV0c2AgdG8gaXRlcmF0ZSB0aHJvdWdoIGBsaXN0LVx1MDAzZXNlY3JldHNgLiBUaGUgYGxpc3QtXHUwMDNlc2VjcmV0c2AgYXJyYXkgaGFzIGEgZml4ZWQgc2l6ZSBvZiA4NSBlbGVtZW50cy4gSWYgYHRvdGFsX251bV9zZWNyZXRzYCBleGNlZWRzIDg1LCB0aGlzIGxvb3Agd291bGQgYmUgcmVhZGluZyBwYXN0IHRoZSBlbmQgb2YgdGhlIGFycmF5LCBhbmQgdGhlcmVmb3JlIHRoZSBlbmQgb2YgdGhlIGBsaXN0YCBzdHJ1Y3R1cmUsIGNhdXNpbmcgYW4gb3V0LW9mLWJvdW5kcyByZWFkLiBUaGlzIGlzIGEgY2xlYXIgY2FzZSBmb3IgS0FTQU4gdG8gY2F0Y2guXG5cblRoZSBzZWNvbmQgcGFydDpcblxuYGBgY1xuLVx0dTE2IHN0YXJ0X2lkeCA9IDA7XG4rXHR1MTYgc3RhcnRfaWR4O1xuIFx0dTE2IGxpc3RfcmM7XG4gXHRpbnQgcmV0O1xuIFxuK1x0bGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHggPSAwO1xuK1xuIFx0ZG8ge1xuK1x0XHRzdGFydF9pZHggPSBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeDtcbiBcdFx0dXZfbGlzdF9zZWNyZXRzKGxpc3QsIHN0YXJ0X2lkeCwgXHUwMDI2bGlzdF9yYywgTlVMTCk7XG4gXHRcdGlmIChsaXN0X3JjICE9IFVWQ19SQ19FWEVDVVRFRCBcdTAwMjZcdTAwMjYgbGlzdF9yYyAhPSBVVkNfUkNfTU9SRV9EQVRBKSB7XG4gXHRcdFx0aWYgKGxpc3RfcmMgPT0gVVZDX1JDX0lOVl9DTUQpXG5AQCAtNzk2LDcgKzc5OSw2IEBAIGludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG4gXHRcdHJldCA9IGZpbmRfc2VjcmV0X2luX3BhZ2Uoc2VjcmV0X2lkLCBsaXN0LCBzZWNyZXQpO1xuIFx0XHRpZiAocmV0ID09IDApXG4gXHRcdFx0cmV0dXJuIHJldDtcbi1cdFx0c3RhcnRfaWR4ID0gbGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHg7XG4gXHR9IHdoaWxlIChsaXN0X3JjID09IFVWQ19SQ19NT1JFX0RBVEEgXHUwMDI2XHUwMDI2IHN0YXJ0X2lkeCBcdTAwM2MgbGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHgpO1xuYGBgXG5cbk9rYXksIHRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhIGxvZ2ljIGJ1Zy4gYHN0YXJ0X2lkeGAgd2FzIGluaXRpYWxpemVkIHRvIDAgYW5kIGB1dl9saXN0X3NlY3JldHNgIHdhcyBjYWxsZWQuIFRoZW4sIGBzdGFydF9pZHhgIHdhcyBhc3NpZ25lZCB0aGUgdmFsdWUgb2YgYGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4YC4gVGhlbiB0aGUgYHdoaWxlYCBsb29wIGNvbmRpdGlvbiBjaGVja2VkIGlmIGBzdGFydF9pZHggXHUwMDNjIGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4YC4gQnV0IHNpbmNlIGBzdGFydF9pZHhgIHdhcyBqdXN0IGFzc2lnbmVkIHRoZSB2YWx1ZSBvZiBgbGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHhgLCB0aGlzIGNvbmRpdGlvbiB3b3VsZCAqYWx3YXlzKiBiZSBmYWxzZSBpbiB0aGUgZmlyc3QgaXRlcmF0aW9uLiBTbyB0aGUgbG9vcCB3b3VsZCB0ZXJtaW5hdGUgYWZ0ZXIgb25seSB0aGUgZmlyc3QgaXRlcmF0aW9uLCBldmVuIGlmIHRoZXJlIHdhcyBtb3JlIGRhdGEgKGBVVkNfUkNfTU9SRV9EQVRBYCkuIFRoZSBmaXggZW5zdXJlcyB0aGUgbG9vcCBjb250aW51ZXMgdG8gaXRlcmF0ZS5cblxuSXMgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgaGVyZT8gTGV0J3MgY2hlY2suIEluIHRoZSBvcmlnaW5hbCBjb2RlLCBgbGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHhgIGlzIHJlYWQgYXQgdGhlIGVuZCBvZlxuXG4iLCJJbnB1dFRva2VucyI6MjY5MzIsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTU6NDMuNDI1MDEwMDQ2WiIsIlNlcSI6NjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjMyMjI3NjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInV2X2ZpbmRfc2VjcmV0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaD02MTM9c3RhdGljIGlubGluZSBpbnQgdXZfcmVtb3ZlX3NoYXJlZCh1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC02MTctXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6NjE4OmludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNjE5LVxcdFxcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqbGlzdCxcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYz03NTc9c3RhdGljIGludCBmaW5kX3NlY3JldF9pbl9wYWdlKGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03NzItLyoqXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjc3MzogKiB1dl9maW5kX3NlY3JldCgpIC0gc2VhcmNoIHNlY3JldCBtZXRhZGF0YSBmb3IgYSBnaXZlbiBzZWNyZXQgaWQuXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc3NC0gKiBAc2VjcmV0X2lkOiBzZWFyY2ggcGF0dGVybi5cXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03NzktICovXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjc4MDppbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03ODEtXFx0XFx0ICAgc3RydWN0IHV2X3NlY3JldF9saXN0ICpsaXN0LFxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTgwNS19XFxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjgwNjpFWFBPUlRfU1lNQk9MX0dQTCh1dl9maW5kX3NlY3JldCk7XFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTgwNy1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTIwPU1PRFVMRV9ERVNDUklQVElPTihcXFwiczM5MCBwcm90ZWN0ZWQga2V5IFVWIGhhbmRsZXJcXFwiKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTIyLS8qXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6MjM6ICogT25lIHByZS1hbGxvY2F0ZWQgdXZfc2VjcmV0X2xpc3QgZm9yIHVzZSB3aXRoIHV2X2ZpbmRfc2VjcmV0KClcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yNC0gKi9cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTkzPXN0YXRpYyBpbnQgZ2V0X3NlY3JldF9tZXRhZGF0YShjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy05OS1cXHRtZW1zZXQodXZfbGlzdCwgMCwgc2l6ZW9mKCp1dl9saXN0KSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6MTAwOlxcdHJjID0gdXZfZmluZF9zZWNyZXQoc2VjcmV0X2lkLCB1dl9saXN0LCBzZWNyZXQpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTEwMS1cXHRtdXRleF91bmxvY2soXFx1MDAyNnV2X2xpc3RfbXV0ZXgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODoxNTo0NS4wNTcyNDQzNjhaIiwiU2VxIjo2OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEwMTM3ODI5NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgU2VjdXJpdHkgRml4KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCB0aGlzIHBhdGNoIGlzIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIHZ1bG5lcmFiaWxpdHkgbGllcyB3aXRoaW4gYGRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jYCwgc3BlY2lmaWNhbGx5IGluIGhvdyB0aGUgYHV2X2ZpbmRfc2VjcmV0YCBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgYHV2X2xpc3RgIHN0cnVjdHVyZS4gSSdtIG5vdGluZyB0aGF0IHRoZSBjb2RlIGlzIG9ubHkgY2FsbGVkIGZyb20gYGdldF9zZWNyZXRfbWV0YWRhdGFgLiBNb3N0IGltcG9ydGFudGx5LCB0aGUgYHV2X2xpc3RgIGlzIGV4cGxpY2l0bHkgemVyb2VkIG91dCBiZWZvcmUgYmVpbmcgdXNlZC4gVGhhdCdzIGtleS5cblxuU28sIHRoZSBmaXJzdCBjaGFuZ2UgaW4gdGhlIGBmaW5kX3NlY3JldF9pbl9wYWdlYCBmdW5jdGlvbiBhZGRyZXNzZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkLiBUaGUgb3JpZ2luYWwgbG9vcCBpbmNvcnJlY3RseSB1c2VkIGBsaXN0LVx1MDAzZXRvdGFsX251bV9zZWNyZXRzYCB0byBpdGVyYXRlLCB3aGljaCBjb3VsZCBleGNlZWQgdGhlIGJvdW5kcyBvZiB0aGUgYGxpc3QtXHUwMDNlc2VjcmV0c2AgYXJyYXkgKGxpbWl0ZWQgdG8gODUgZWxlbWVudHMpLiBUaGlzIG1lYW5zIGEgS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNhbml0aXplcikgdHJpZ2dlcmVkLCB3aGljaCBpcyBncmVhdCBiZWNhdXNlIGl0IG1lYW5zIHRoYXQgcHJvYmxlbSBpcyBlYXN5IHRvIGRldGVjdC5cblxuVGhlIHNlY29uZCBjaGFuZ2UgaW4gYHV2X2ZpbmRfc2VjcmV0YCBmaXhlcyBhIGxvZ2ljIGJ1Zy4gVGhlIGluaXRpYWwgbG9vcCBjb25kaXRpb24gdXNlZCBgc3RhcnRfaWR4IFx1MDAzYyBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeGAuIEhvd2V2ZXIsIGBzdGFydF9pZHhgIHdhcyBhc3NpZ25lZCBgbGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHhgIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgY2hlY2ssIHNvIHRoZSBsb29wIHdhcyBuZXZlciBleGVjdXRlZC4gVGhlIGNvcnJlY3RlZCB2ZXJzaW9uIGNvcnJlY3RseSBpbml0aWFsaXplcyBhbmQgdXBkYXRlcyBgc3RhcnRfaWR4YCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsb29wLlxuXG5CZWNhdXNlIHRoZSBzdHJ1Y3R1cmUgcGFzc2VkIHRvIGB1dl9maW5kX3NlY3JldGAgaXMgaW5pdGlhbGl6ZWQgdG8gemVybyBiZWZvcmUgdXNlLCB0aGVyZSBhcmVuJ3QgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBhbmQgc28gYE5lZWRzS01TQU5gIGlzIGZhbHNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDI5NywiT3V0cHV0VG9rZW5zIjozMjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTU6NTYuMDcxMDI5NzQ0WiIsIlNlcSI6NzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgdHdvIGlzc3VlczpcXG4xLiBBbiBvdXQtb2YtYm91bmRzIHJlYWQgaW4gYGZpbmRfc2VjcmV0X2luX3BhZ2UoKWAuIFRoZSBsb29wIHByZXZpb3VzbHkgdXNlZCBgbGlzdC1cXHUwMDNldG90YWxfbnVtX3NlY3JldHNgIGluc3RlYWQgb2YgYGxpc3QtXFx1MDAzZW51bV9zZWNyX3N0b3JlZGAuIFNpbmNlIGBsaXN0LVxcdTAwM2VzZWNyZXRzYCBpcyBhIGZpeGVkLXNpemUgYXJyYXkgb2YgODUgZWxlbWVudHMsIGlmIGB0b3RhbF9udW1fc2VjcmV0c2AgZXhjZWVkcyA4NSwgdGhlIGxvb3AgcmVhZHMgcGFzdCB0aGUgZW5kIG9mIHRoZSBgbGlzdGAgc3RydWN0dXJlICh3aGljaCBpcyBleGFjdGx5IG9uZSBwYWdlIGluIHNpemUpLiBUaGlzIGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHJlYWQgdGhhdCBpcyByZWxpYWJseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTi5cXG4yLiBBIGxvZ2ljIGJ1ZyBpbiBgdXZfZmluZF9zZWNyZXQoKWAgd2hlcmUgdGhlIGxvb3AgY29uZGl0aW9uIGBzdGFydF9pZHggXFx1MDAzYyBsaXN0LVxcdTAwM2VuZXh0X3NlY3JldF9pZHhgIHdhcyBhbHdheXMgZmFsc2UgYmVjYXVzZSBgc3RhcnRfaWR4YCB3YXMgYXNzaWduZWQgYGxpc3QtXFx1MDAzZW5leHRfc2VjcmV0X2lkeGAgaW1tZWRpYXRlbHkgcHJpb3IgdG8gdGhlIGNoZWNrLiBUaGUgZml4IGNvcnJlY3RseSBpbml0aWFsaXplcyBhbmQgdXBkYXRlcyBgc3RhcnRfaWR4YCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsb29wLlxcblxcblRoZSBgbGlzdGAgc3RydWN0dXJlIHBhc3NlZCB0byBgdXZfZmluZF9zZWNyZXQoKWAgaXMgZnVsbHkgemVyb2VkIGJlZm9yZSB1c2UgKHZpYSBgbWVtc2V0KHV2X2xpc3QsIDAsIHNpemVvZigqdXZfbGlzdCkpYCBpbiBgZ2V0X3NlY3JldF9tZXRhZGF0YSgpYCkuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcywgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZSBpbnRyb2R1Y2VkIG9yIGZpeGVkIGJ5IHRoaXMgcGF0Y2guIFN0YW5kYXJkIEtBU0FOIGlzIHBlcmZlY3RseSBzdWl0ZWQgdG8gY2F0Y2ggdGhlIG91dC1vZi1ib3VuZHMgcmVhZCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyB0d28gaXNzdWVzOlxcbjEuIEFuIG91dC1vZi1ib3VuZHMgcmVhZCBpbiBgZmluZF9zZWNyZXRfaW5fcGFnZSgpYC4gVGhlIGxvb3AgcHJldmlvdXNseSB1c2VkIGBsaXN0LVxcdTAwM2V0b3RhbF9udW1fc2VjcmV0c2AgaW5zdGVhZCBvZiBgbGlzdC1cXHUwMDNlbnVtX3NlY3Jfc3RvcmVkYC4gU2luY2UgYGxpc3QtXFx1MDAzZXNlY3JldHNgIGlzIGEgZml4ZWQtc2l6ZSBhcnJheSBvZiA4NSBlbGVtZW50cywgaWYgYHRvdGFsX251bV9zZWNyZXRzYCBleGNlZWRzIDg1LCB0aGUgbG9vcCByZWFkcyBwYXN0IHRoZSBlbmQgb2YgdGhlIGBsaXN0YCBzdHJ1Y3R1cmUgKHdoaWNoIGlzIGV4YWN0bHkgb25lIHBhZ2UgaW4gc2l6ZSkuIFRoaXMgaXMgYSBjbGFzc2ljIG91dC1vZi1ib3VuZHMgcmVhZCB0aGF0IGlzIHJlbGlhYmx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOLlxcbjIuIEEgbG9naWMgYnVnIGluIGB1dl9maW5kX3NlY3JldCgpYCB3aGVyZSB0aGUgbG9vcCBjb25kaXRpb24gYHN0YXJ0X2lkeCBcXHUwMDNjIGxpc3QtXFx1MDAzZW5leHRfc2VjcmV0X2lkeGAgd2FzIGFsd2F5cyBmYWxzZSBiZWNhdXNlIGBzdGFydF9pZHhgIHdhcyBhc3NpZ25lZCBgbGlzdC1cXHUwMDNlbmV4dF9zZWNyZXRfaWR4YCBpbW1lZGlhdGVseSBwcmlvciB0byB0aGUgY2hlY2suIFRoZSBmaXggY29ycmVjdGx5IGluaXRpYWxpemVzIGFuZCB1cGRhdGVzIGBzdGFydF9pZHhgIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxvb3AuXFxuXFxuVGhlIGBsaXN0YCBzdHJ1Y3R1cmUgcGFzc2VkIHRvIGB1dl9maW5kX3NlY3JldCgpYCBpcyBmdWxseSB6ZXJvZWQgYmVmb3JlIHVzZSAodmlhIGBtZW1zZXQodXZfbGlzdCwgMCwgc2l6ZW9mKCp1dl9saXN0KSlgIGluIGBnZXRfc2VjcmV0X21ldGFkYXRhKClgKS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlIGludHJvZHVjZWQgb3IgZml4ZWQgYnkgdGhpcyBwYXRjaC4gU3RhbmRhcmQgS0FTQU4gaXMgcGVyZmVjdGx5IHN1aXRlZCB0byBjYXRjaCB0aGUgb3V0LW9mLWJvdW5kcyByZWFkLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvbrmk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-12 18:10:44 +0000 UTC FinishedAt: 2026-08-12 18:15:57 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "d58772d8520c7ef247c4b95c9bd76d3a25da9ff5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PKEY", "PKEY_UV", "S390_UV_UAPI" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "d58772d8520c7ef247c4b95c9bd76d3a25da9ff5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PKEY", "PKEY_UV", "S390_UV_UAPI" ], "series_id": "e85da8b1-fa9e-4bfa-99ff-54384e1568b8" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "uv_find_secret", "pkey_handler_verify_key", "pkey_handler_key_to_protkey" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BLRVkmIzM0OywKICAgICYjMzQ7UEtFWV9VViYjMzQ7LAogICAgJiMzNDtTMzkwX1VWX1VBUEkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1dl9maW5kX3NlY3JldCYjMzQ7LAogICAgJiMzNDtwa2V5X2hhbmRsZXJfdmVyaWZ5X2tleSYjMzQ7LAogICAgJiMzNDtwa2V5X2hhbmRsZXJfa2V5X3RvX3Byb3RrZXkmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgdHdvIGlzc3VlczpcbjEuIEFuIG91dC1vZi1ib3VuZHMgcmVhZCBpbiBgZmluZF9zZWNyZXRfaW5fcGFnZSgpYC4gVGhlIGxvb3AgcHJldmlvdXNseSB1c2VkIGBsaXN0LVx1MDAzZXRvdGFsX251bV9zZWNyZXRzYCBpbnN0ZWFkIG9mIGBsaXN0LVx1MDAzZW51bV9zZWNyX3N0b3JlZGAuIFNpbmNlIGBsaXN0LVx1MDAzZXNlY3JldHNgIGlzIGEgZml4ZWQtc2l6ZSBhcnJheSBvZiA4NSBlbGVtZW50cywgaWYgYHRvdGFsX251bV9zZWNyZXRzYCBleGNlZWRzIDg1LCB0aGUgbG9vcCByZWFkcyBwYXN0IHRoZSBlbmQgb2YgdGhlIGBsaXN0YCBzdHJ1Y3R1cmUgKHdoaWNoIGlzIGV4YWN0bHkgb25lIHBhZ2UgaW4gc2l6ZSkuIFRoaXMgaXMgYSBjbGFzc2ljIG91dC1vZi1ib3VuZHMgcmVhZCB0aGF0IGlzIHJlbGlhYmx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOLlxuMi4gQSBsb2dpYyBidWcgaW4gYHV2X2ZpbmRfc2VjcmV0KClgIHdoZXJlIHRoZSBsb29wIGNvbmRpdGlvbiBgc3RhcnRfaWR4IFx1MDAzYyBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeGAgd2FzIGFsd2F5cyBmYWxzZSBiZWNhdXNlIGBzdGFydF9pZHhgIHdhcyBhc3NpZ25lZCBgbGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHhgIGltbWVkaWF0ZWx5IHByaW9yIHRvIHRoZSBjaGVjay4gVGhlIGZpeCBjb3JyZWN0bHkgaW5pdGlhbGl6ZXMgYW5kIHVwZGF0ZXMgYHN0YXJ0X2lkeGAgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbG9vcC5cblxuVGhlIGBsaXN0YCBzdHJ1Y3R1cmUgcGFzc2VkIHRvIGB1dl9maW5kX3NlY3JldCgpYCBpcyBmdWxseSB6ZXJvZWQgYmVmb3JlIHVzZSAodmlhIGBtZW1zZXQodXZfbGlzdCwgMCwgc2l6ZW9mKCp1dl9saXN0KSlgIGluIGBnZXRfc2VjcmV0X21ldGFkYXRhKClgKS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlIGludHJvZHVjZWQgb3IgZml4ZWQgYnkgdGhpcyBwYXRjaC4gU3RhbmRhcmQgS0FTQU4gaXMgcGVyZmVjdGx5IHN1aXRlZCB0byBjYXRjaCB0aGUgb3V0LW9mLWJvdW5kcyByZWFkLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGB1dl9maW5kX3NlY3JldGAgd2hlcmUgYHN0YXJ0X2lkeGAgd2FzIGluY29ycmVjdGx5IHVwZGF0ZWQgYW5kIGBmaW5kX3NlY3JldF9pbl9wYWdlYCB1c2VkIHRoZSB3cm9uZyBsaW1pdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBzMzkweCB1bHRyYXZpc29yIHNlY3JldCBoYW5kbGluZyBjb2RlLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGAvZGV2L3BrZXlgIGlvY3Rscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDU2N2VmYWM4NzJlMmMzM2NhODk3MDg0NDIwMzhmYjYxN2FkYWMyZmJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxODoxMjoxNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3V2LmMgYi9hcmNoL3MzOTAva2VybmVsL3V2LmNcbmluZGV4IGEyODRmOThkOTcxNjguLmU3MGFjYWQwOWNkNWYgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva2VybmVsL3V2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rZXJuZWwvdXYuY1xuQEAgLTc2MCw3ICYjNDM7NzYwLDcgQEAgc3RhdGljIGludCBmaW5kX3NlY3JldF9pbl9wYWdlKGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcbiB7XG4gXHR1MTYgaTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGxpc3QtXHUwMDNldG90YWxfbnVtX3NlY3JldHM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbGlzdC1cdTAwM2VudW1fc2Vjcl9zdG9yZWQ7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGlmIChtZW1jbXAoc2VjcmV0X2lkLCBsaXN0LVx1MDAzZXNlY3JldHNbaV0uaWQsIFVWX1NFQ1JFVF9JRF9MRU4pID09IDApIHtcbiBcdFx0XHQqc2VjcmV0ID0gbGlzdC1cdTAwM2VzZWNyZXRzW2ldLmhkcjtcbiBcdFx0XHRyZXR1cm4gMDtcbkBAIC03ODEsMTEgJiM0Mzs3ODEsMTQgQEAgaW50IHV2X2ZpbmRfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcbiBcdFx0ICAgc3RydWN0IHV2X3NlY3JldF9saXN0ICpsaXN0LFxuIFx0XHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbV9oZHIgKnNlY3JldClcbiB7XG4tXHR1MTYgc3RhcnRfaWR4ID0gMDtcbiYjNDM7XHR1MTYgc3RhcnRfaWR4O1xuIFx0dTE2IGxpc3RfcmM7XG4gXHRpbnQgcmV0O1xuIFxuJiM0MztcdGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4ID0gMDtcbiYjNDM7XG4gXHRkbyB7XG4mIzQzO1x0XHRzdGFydF9pZHggPSBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeDtcbiBcdFx0dXZfbGlzdF9zZWNyZXRzKGxpc3QsIHN0YXJ0X2lkeCwgXHUwMDI2bGlzdF9yYywgTlVMTCk7XG4gXHRcdGlmIChsaXN0X3JjICE9IFVWQ19SQ19FWEVDVVRFRCBcdTAwMjZcdTAwMjYgbGlzdF9yYyAhPSBVVkNfUkNfTU9SRV9EQVRBKSB7XG4gXHRcdFx0aWYgKGxpc3RfcmMgPT0gVVZDX1JDX0lOVl9DTUQpXG5AQCAtNzk2LDcgJiM0Mzs3OTksNiBAQCBpbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuIFx0XHRyZXQgPSBmaW5kX3NlY3JldF9pbl9wYWdlKHNlY3JldF9pZCwgbGlzdCwgc2VjcmV0KTtcbiBcdFx0aWYgKHJldCA9PSAwKVxuIFx0XHRcdHJldHVybiByZXQ7XG4tXHRcdHN0YXJ0X2lkeCA9IGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4O1xuIFx0fSB3aGlsZSAobGlzdF9yYyA9PSBVVkNfUkNfTU9SRV9EQVRBIFx1MDAyNlx1MDAyNiBzdGFydF9pZHggXHUwMDNjIGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4KTtcbiBcbiBcdHJldHVybiAtRU5PRU5UO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjEyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQS0VZJiMzNDssCiAgICAmIzM0O1BLRVlfVVYmIzM0OywKICAgICYjMzQ7UzM5MF9VVl9VQVBJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXZfZmluZF9zZWNyZXQmIzM0OywKICAgICYjMzQ7cGtleV9oYW5kbGVyX3ZlcmlmeV9rZXkmIzM0OywKICAgICYjMzQ7cGtleV9oYW5kbGVyX2tleV90b19wcm90a2V5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGB1dl9maW5kX3NlY3JldGAgd2hlcmUgYHN0YXJ0X2lkeGAgd2FzIGluY29ycmVjdGx5IHVwZGF0ZWQgYW5kIGBmaW5kX3NlY3JldF9pbl9wYWdlYCB1c2VkIHRoZSB3cm9uZyBsaW1pdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBzMzkweCB1bHRyYXZpc29yIHNlY3JldCBoYW5kbGluZyBjb2RlLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGAvZGV2L3BrZXlgIGlvY3Rscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDU2N2VmYWM4NzJlMmMzM2NhODk3MDg0NDIwMzhmYjYxN2FkYWMyZmIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxMiAxODoxMjoxNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdXYuYyBiL2FyY2gvczM5MC9rZXJuZWwvdXYuYwppbmRleCBhMjg0Zjk4ZDk3MTY4Li5lNzBhY2FkMDljZDVmIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3V2LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2tlcm5lbC91di5jCkBAIC03NjAsNyAmIzQzOzc2MCw3IEBAIHN0YXRpYyBpbnQgZmluZF9zZWNyZXRfaW5fcGFnZShjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sCiB7CiAJdTE2IGk7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgbGlzdC0mZ3Q7dG90YWxfbnVtX3NlY3JldHM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBsaXN0LSZndDtudW1fc2Vjcl9zdG9yZWQ7IGkmIzQzOyYjNDM7KSB7CiAJCWlmIChtZW1jbXAoc2VjcmV0X2lkLCBsaXN0LSZndDtzZWNyZXRzW2ldLmlkLCBVVl9TRUNSRVRfSURfTEVOKSA9PSAwKSB7CiAJCQkqc2VjcmV0ID0gbGlzdC0mZ3Q7c2VjcmV0c1tpXS5oZHI7CiAJCQlyZXR1cm4gMDsKQEAgLTc4MSwxMSAmIzQzOzc4MSwxNCBAQCBpbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLAogCQkgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QsCiAJCSAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtX2hkciAqc2VjcmV0KQogewotCXUxNiBzdGFydF9pZHggPSAwOwomIzQzOwl1MTYgc3RhcnRfaWR4OwogCXUxNiBsaXN0X3JjOwogCWludCByZXQ7CiAKJiM0MzsJbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4ID0gMDsKJiM0MzsKIAlkbyB7CiYjNDM7CQlzdGFydF9pZHggPSBsaXN0LSZndDtuZXh0X3NlY3JldF9pZHg7CiAJCXV2X2xpc3Rfc2VjcmV0cyhsaXN0LCBzdGFydF9pZHgsICZhbXA7bGlzdF9yYywgTlVMTCk7CiAJCWlmIChsaXN0X3JjICE9IFVWQ19SQ19FWEVDVVRFRCAmYW1wOyZhbXA7IGxpc3RfcmMgIT0gVVZDX1JDX01PUkVfREFUQSkgewogCQkJaWYgKGxpc3RfcmMgPT0gVVZDX1JDX0lOVl9DTUQpCkBAIC03OTYsNyAmIzQzOzc5OSw2IEBAIGludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sCiAJCXJldCA9IGZpbmRfc2VjcmV0X2luX3BhZ2Uoc2VjcmV0X2lkLCBsaXN0LCBzZWNyZXQpOwogCQlpZiAocmV0ID09IDApCiAJCQlyZXR1cm4gcmV0OwotCQlzdGFydF9pZHggPSBsaXN0LSZndDtuZXh0X3NlY3JldF9pZHg7CiAJfSB3aGlsZSAobGlzdF9yYyA9PSBVVkNfUkNfTU9SRV9EQVRBICZhbXA7JmFtcDsgc3RhcnRfaWR4ICZsdDsgbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4KTsKIAogCXJldHVybiAtRU5PRU5UOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzc1CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoIHRvIHMzOTAgQXJjaGl0ZWN0dXJlIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyBiZWVuIGFwcGxpZWQgdG8gYGFyY2gvczM5MC9rZXJuZWwvdXYuY2AuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgbWFraW5nIGEgZmV3IGNoYW5nZXMgdG8gYGZpbmRfc2VjcmV0X2luX3BhZ2VgIGFuZCBgdXZfZmluZF9zZWNyZXRgLiBTcGVjaWZpY2FsbHksIGluIGBmaW5kX3NlY3JldF9pbl9wYWdlYCwgdGhlIGxvb3AgY29uZGl0aW9uIGhhcyBiZWVuIGFsdGVyZWQ7IGl0IG5vdyB1c2VzIGBsaXN0LSZndDtudW1fc2Vjcl9zdG9yZWRgIGluc3RlYWQgb2YgYGxpc3QtJmd0O3RvdGFsX251bV9zZWNyZXRzYCwgd2hpY2ggaXMgc29tZXRoaW5nIHRvIG5vdGUuIEFuZCB3aXRoaW4gYHV2X2ZpbmRfc2VjcmV0YCwgdGhlIGluaXRpYWxpemF0aW9uIGFuZCB1cGRhdGUgb2YgYGxpc3QtJmd0O25leHRfc2VjcmV0X2lkeGAgaGF2ZSBiZWVuIG1vdmVkICppbnNpZGUqIHRoZSBsb29wLiBUaGlzIGNvdWxkIGhhdmUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLCBkZXBlbmRpbmcgb24gdGhlIHN0cnVjdHVyZSBhbmQgdXNlIGNhc2UuCgpOb3csIGxldCYjMzk7cyBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgKnVzZWQqLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIGluIGBhcmNoL3MzOTAva2VybmVsL3V2LmNgIGZvciBjYWxscyB0byBgdXZfZmluZF9zZWNyZXRgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgaXMgdGhpcyBldmVuICpyZWFjaGFibGUqIGluIGEgdHlwaWNhbCBmdXp6aW5nIGVudmlyb25tZW50IGxpa2UgR0NFIG9yIFFFTVU/IFMzOTAgYXJjaGl0ZWN0dXJlLCBJIHNlZW0gdG8gcmVjYWxsLCBpcyBub3QgYWx3YXlzIHRoZSB0YXJnZXQsIGFuZCBzeXprYWxsZXImIzM5O3MgdHlwaWNhbCBzZXR1cHMuIEFoLCB3YWl0LCB5ZXMsIHN5emthbGxlciAqZG9lcyogc3VwcG9ydCBzMzkweC4gU28gd2UgbmVlZCB0byBjb25zaWRlciB0aGlzLiBUaGUgcHJvbXB0IGRvZXMgc2F5IHRvIHNraXAgYW55IGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEJ1dCB3YWl0LCBzaW5jZSBzMzkweCBpcyBzdXBwb3J0ZWQsIGxldCYjMzk7cyBnbyBiYWNrIHRvIGxvb2tpbmcgYXQgdGhlIHVzZSBvZiBgdXZfZmluZF9zZWNyZXRgIGluIHRoZSBjb2RlLCBhbmQgaG93IHRoYXQgY291bGQgYmUgcmVhY2hhYmxlIHZpYSBzeXprYWxsZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXZfZmluZF9zZWNyZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg9NjEzPXN0YXRpYyBpbmxpbmUgaW50IHV2X3JlbW92ZV9zaGFyZWQodW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTYxNy1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oOjYxODppbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNjE5LVx0XHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QsXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC91di5jPTc1Nz1zdGF0aWMgaW50IGZpbmRfc2VjcmV0X2luX3BhZ2UoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03NzItLyoqXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6NzczOiAqIHV2X2ZpbmRfc2VjcmV0KCkgLSBzZWFyY2ggc2VjcmV0IG1ldGFkYXRhIGZvciBhIGdpdmVuIHNlY3JldCBpZC5cbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03NzQtICogQHNlY3JldF9pZDogc2VhcmNoIHBhdHRlcm4uXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc3OS0gKi9cbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo3ODA6aW50IHV2X2ZpbmRfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03ODEtXHRcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqbGlzdCxcbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtODA1LX1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo4MDY6RVhQT1JUX1NZTUJPTF9HUEwodXZfZmluZF9zZWNyZXQpO1xuYXJjaC9zMzkwL2tlcm5lbC91di5jLTgwNy1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0yMD1NT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7czM5MCBwcm90ZWN0ZWQga2V5IFVWIGhhbmRsZXJcJiMzNDspO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTIyLS8qXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoyMzogKiBPbmUgcHJlLWFsbG9jYXRlZCB1dl9zZWNyZXRfbGlzdCBmb3IgdXNlIHdpdGggdXZfZmluZF9zZWNyZXQoKVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjQtICovXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9OTM9c3RhdGljIGludCBnZXRfc2VjcmV0X21ldGFkYXRhKGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy05OS1cdG1lbXNldCh1dl9saXN0LCAwLCBzaXplb2YoKnV2X2xpc3QpKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjEwMDpcdHJjID0gdXZfZmluZF9zZWNyZXQoc2VjcmV0X2lkLCB1dl9saXN0LCBzZWNyZXQpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMTAxLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnV2X2xpc3RfbXV0ZXgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3NTgKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBzMzkwIENyeXB0byBLZXkgSGFuZGxpbmcqKgoKUmlnaHQsIGB1dl9maW5kX3NlY3JldGDigKYgdGhhdCBmdW5jdGlvbiBuYW1lIGltbWVkaWF0ZWx5IHJpbmdzIGEgYmVsbC4gSXQmIzM5O3MgdXNlZCB3aXRoaW4gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlJiMzOTtzIGNyeXB0b2dyYXBoaWMga2V5IGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgaW4gYGRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgYHBrZXlfdXYuY2AgYWN0dWFsbHkgKmlzKi4gSXMgdGhpcyByZWxhdGVkIHRvIFVzZXIgVmVyaWZpY2F0aW9uLCBLZXkgc3RvcmFnZSBhbmQgYWNjZXNzIG9yIG1heWJlIHNvbWUgb3RoZXIgaGFyZHdhcmUgc3VwcG9ydCBmb3IgY3J5cHRvPyBJdCYjMzk7cyBiZWVuIGEgd2hpbGUgc2luY2UgSSBsYXN0IGxvb2tlZCBjbG9zZWx5IGF0IHRoZSBzMzkwIGtleSBpbmZyYXN0cnVjdHVyZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgZmlsZSBjb250YWlucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZXRfc2VjcmV0X21ldGFkYXRhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rZXJuZWwvdXYuYz04MDY9RVhQT1JUX1NZTUJPTF9HUEwodXZfZmluZF9zZWNyZXQpO1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYy04MTItICogQGJ1Zl9zaXplOiBTaXplIG9mIHRoZSBidWZmZXIuIFRoZSBjb3JyZWN0IGJ1ZmZlciBzaXplIGlzIHJlcG9ydGVkIGFzIHBhcnQgb2ZcbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo4MTM6ICogdGhlIHJlc3VsdCBmcm9tIGB1dl9nZXRfc2VjcmV0X21ldGFkYXRhYC5cbmFyY2gvczM5MC9rZXJuZWwvdXYuYy04MTQtICpcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz04Mz1zdGF0aWMgYm9vbCBpc191dl9rZXl0eXBlKGVudW0gcGtleV9rZXlfdHlwZSBrZXl0eXBlKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTkyLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6OTM6c3RhdGljIGludCBnZXRfc2VjcmV0X21ldGFkYXRhKGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTk0LVx0XHRcdCAgICAgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbV9oZHIgKnNlY3JldClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0xMDY9c3RhdGljIGludCByZXRyaWV2ZV9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTExMS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjExMjpcdHJjID0gZ2V0X3NlY3JldF9tZXRhZGF0YShzZWNyZXRfaWQsIFx1MDAyNnNlY3JldF9tZXRhX2RhdGEpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMTEzLVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTIzMz1zdGF0aWMgaW50IHV2X3ZlcmlmeWtleShjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI0Ny1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjI0ODpcdHJjID0gZ2V0X3NlY3JldF9tZXRhZGF0YSh0LVx1MDAzZXNlY3JldF9pZCwgXHUwMDI2c2VjcmV0X21ldGFfZGF0YSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yNDktXHRpZiAocmMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDUwNwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgYHBrZXlfdXYuY2AgQ29kZSoqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhpcyBgcGtleV91di5jYCBmaWxlLiBSaWdodCwgaXQmIzM5O3MgYSAmIzM0O3Byb3RlY3RlZCBrZXkgVVYgaGFuZGxlci4mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgaW50ZXJmYWNpbmcgd2l0aCBwcm90ZWN0ZWQga2V5cy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7Q2FuIEkgZXZlbiAqcmVhY2gqIHRoaXMgdGhpbmc/JiMzNDsgSSBoYXZlIHRvIHJlbWVtYmVyIGhvdyBgcGtleWAgZnVuY3Rpb25hbGl0eSBpcyBleHBvc2VkLiBJcyBpdCBhY2Nlc3NpYmxlIHRocm91Z2ggYC9kZXYvcGtleWAsIG9yIHNvbWUgcmVsYXRlZCBgaW9jdGxgIGNhbGxzIHdpdGhpbiB0aGUgczM5MCBhcmNoaXRlY3R1cmU/IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgZW50cnkgcG9pbnRzIGFuZCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGlzIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuY2AgY29kZSBpcyBpbnZva2VkLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBsYXJnZXIgYHBrZXlgIHN1YnN5c3RlbSB0byBnYWluIHNvbWUgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1dl92ZXJpZnlrZXkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9MTkwPXN0YXRpYyBpbnQgdXZfa2V5MnByb3RrZXkoY29uc3Qgc3RydWN0IHBrZXlfYXBxbiAqX2FwcW5zIF9fYWx3YXlzX3VudXNlZCxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yMzItXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoyMzM6c3RhdGljIGludCB1dl92ZXJpZnlrZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTIzNC1cdFx0XHR1MTYgKl9jYXJkIF9fYWx3YXlzX3VudXNlZCxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0yNzI9c3RhdGljIHN0cnVjdCBwa2V5X2hhbmRsZXIgdXZfaGFuZGxlciA9IHtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yNzctXHQua2V5X3RvX3Byb3RrZXlcdFx0ID0gdXZfa2V5MnByb3RrZXksXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoyNzg6XHQudmVyaWZ5X2tleVx0XHQgPSB1dl92ZXJpZnlrZXksXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yNzktfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDQzCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgcGtleV9oYW5kbGVyYCBpcyBiZWluZyB1dGlsaXplZCB3aXRoaW4gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlJiMzOTtzIGNyeXB0b2dyYXBoaWMga2V5IG1hbmFnZW1lbnQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIG91dCB0aGUgcmVsZXZhbnQgZHJpdmVyIGNvZGUsIHNwZWNpZmljYWxseSBzb21ldGhpbmcgbGlrZSBgZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jYC4gVGhpcyBzZWVtcyB0aGUgbW9zdCBsaWtlbHkgcGxhY2UgdG8gZmluZCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBncmFzcCBob3cgdGhlIGBwa2V5X2hhbmRsZXJgIHN0cnVjdHVyZSBpcyBlbXBsb3llZCB3aXRoaW4gdGhhdCBjb250ZXh0LiBJJiMzOTttIGFpbWluZyBmb3IgYSBtZW50YWwgbW9kZWwgb2YgaXRzIHJvbGUgaW4gdGhlIGtleSBtYW5hZ2VtZW50IHByb2Nlc3MuIEkmIzM5O20gdGhpbmtpbmcgYSBkZWVwIGRpdmUgaW50byB0aGUgY29kZSB3aWxsIHJldmVhbCB0aGUgbmVjZXNzYXJ5IHVzYWdlIHBhdHRlcm5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwa2V5X2hhbmRsZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTI1PXN0YXRpYyBpbnQga2V5MnByb3RrZXkoY29uc3Qgc3RydWN0IHBrZXlfYXBxbiAqYXBxbnMsIHNpemVfdCBucl9hcHFucyxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMzItXHQvKiB0cnkgdGhlIGRpcmVjdCB3YXkgKi9cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzozMzpcdHJjID0gcGtleV9oYW5kbGVyX2tleV90b19wcm90a2V5KGFwcW5zLCBucl9hcHFucyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0zNC1cdFx0XHRcdFx0IGtleSwga2V5bGVuLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0zOS1cdGlmIChyYyA9PSAtRU5PREVWKSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6NDA6XHRcdHJjID0gcGtleV9oYW5kbGVyX3Nsb3dwYXRoX2tleV90b19wcm90a2V5KGFwcW5zLCBucl9hcHFucyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy00MS1cdFx0XHRcdFx0XHRcdCAga2V5LCBrZXlsZW4sXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTU1PWludCBwa2V5X2tleTJwcm90a2V5KGNvbnN0IHU4ICprZXksIHUzMiBrZXlsZW4sXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTYyLVx0aWYgKHJjID09IC1FTk9ERVYpIHtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzo2MzpcdFx0cGtleV9oYW5kbGVyX3JlcXVlc3RfbW9kdWxlcygpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTY0LVx0XHRyYyA9IGtleTJwcm90a2V5KE5VTEwsIDAsIGtleSwga2V5bGVuLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz05Mj1zdGF0aWMgaW50IHBrZXlfaW9jdGxfZ2Vuc2VjayhzdHJ1Y3QgcGtleV9nZW5zZWNrIF9fdXNlciAqdWdzKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0xMDQtXHRrZXlidWZsZW4gPSBzaXplb2Yoa2dzLnNlY2tleS5zZWNrZXkpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjEwNTpcdHJjID0gcGtleV9oYW5kbGVyX2dlbl9rZXkoXHUwMDI2YXBxbiwgMSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0xMDYtXHRcdFx0XHQgIGtncy5rZXl0eXBlLCBQS0VZX1RZUEVfQ0NBX0RBVEEsIDAsIDAsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTExNj1zdGF0aWMgaW50IHBrZXlfaW9jdGxfY2xyMnNlY2soc3RydWN0IHBrZXlfY2xyMnNlY2sgX191c2VyICp1Y3MpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTEyOC1cdGtleWJ1ZmxlbiA9IHNpemVvZihrY3Muc2Vja2V5LnNlY2tleSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6MTI5Olx0cmMgPSBwa2V5X2hhbmRsZXJfY2xyX3RvX2tleShcdTAwMjZhcHFuLCAxLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTEzMC1cdFx0XHRcdCAgICAga2NzLmtleXR5cGUsIFBLRVlfVFlQRV9DQ0FfREFUQSwgMCwgMCxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9MTQyPXN0YXRpYyBpbnQgcGtleV9pb2N0bF9zZWMycHJvdGsoc3RydWN0IHBrZXlfc2VjMnByb3RrIF9fdXNlciAqdXNwKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0xNTMtXHRrc3AucHJvdGtleS5sZW4gPSBzaXplb2Yoa3NwLnByb3RrZXkucHJvdGtleSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6MTU0Olx0cmMgPSBwa2V5X2hhbmRsZXJfa2V5X3RvX3Byb3RrZXkoXHUwMDI2YXBxbiwgMSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0xNTUtXHRcdFx0XHRcdCBrc3Auc2Vja2V5LnNlY2tleSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9MjE1PXN0YXRpYyBpbnQgcGtleV9pb2N0bF9maW5kY2FyZChzdHJ1Y3QgcGtleV9maW5kY2FyZCBfX3VzZXIgKnVmYylcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMjI5LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjIzMDpcdHJjID0gcGtleV9oYW5kbGVyX2FwcW5zX2Zvcl9rZXkoa2ZjLnNlY2tleS5zZWNrZXksXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMjMxLVx0XHRcdFx0XHRzaXplb2Yoa2ZjLnNlY2tleS5zZWNrZXkpLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0yMzQtXHRpZiAocmMgPT0gLUVOT0RFVilcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzoyMzU6XHRcdHJjID0gcGtleV9oYW5kbGVyX2FwcW5zX2Zvcl9rZXkoa2ZjLnNlY2tleS5zZWNrZXksXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMjM2LVx0XHRcdFx0XHRcdHNpemVvZihrZmMuc2Vja2V5LnNlY2tleSksXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTI1Mz1zdGF0aWMgaW50IHBrZXlfaW9jdGxfc2tleTJwa2V5KHN0cnVjdCBwa2V5X3NrZXkycGtleSBfX3VzZXIgKnVzcClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMjYxLVx0a3NwLnByb3RrZXkubGVuID0gc2l6ZW9mKGtzcC5wcm90a2V5LnByb3RrZXkpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjI2MjpcdHJjID0gcGtleV9oYW5kbGVyX2tleV90b19wcm90a2V5KE5VTEwsIDAsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMjYzLVx0XHRcdFx0XHQga3NwLnNlY2tleS5zZWNrZXksXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTI3Nj1zdGF0aWMgaW50IHBrZXlfaW9jdGxfdmVyaWZ5a2V5KHN0cnVjdCBwa2V5X3ZlcmlmeWtleSBfX3VzZXIgKnV2aylcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMjg2LVx0a3ZrLmRvbWFpbiA9IDB4RkZGRjtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzoyODc6XHRyYyA9IHBrZXlfaGFuZGxlcl92ZXJpZnlfa2V5KGt2ay5zZWNrZXkuc2Vja2V5LFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTI4OC1cdFx0XHRcdCAgICAgc2l6ZW9mKGt2ay5zZWNrZXkuc2Vja2V5KSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9MzA1PXN0YXRpYyBpbnQgcGtleV9pb2N0bF9nZW5wcm90ayhzdHJ1Y3QgcGtleV9nZW5wcm90ayBfX3VzZXIgKnVncClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMzEzLVx0a2dwLnByb3RrZXkubGVuID0gc2l6ZW9mKGtncC5wcm90a2V5LnByb3RrZXkpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjMxNDpcdHJjID0gcGtleV9oYW5kbGVyX2dlbl9rZXkoTlVMTCwgMCwga2dwLmtleXR5cGUsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMzE1LVx0XHRcdFx0ICBQS0VZX1RZUEVfUFJPVEtFWSwgMCwgMCxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9MzI2PXN0YXRpYyBpbnQgcGtleV9pb2N0bF92ZXJpZnlwcm90ayhzdHJ1Y3QgcGtleV92ZXJpZnlwcm90ayBfX3VzZXIgKnV2cClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMzU1LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjM1NjpcdHJjID0gcGtleV9oYW5kbGVyX3ZlcmlmeV9rZXkodG1wYnVmLCBzaXplb2YoKnQpLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTM1Ny1cdFx0XHRcdCAgICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgMCk7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTM5MD1zdGF0aWMgaW50IHBrZXlfaW9jdGxfZ2Vuc2VjazIoc3RydWN0IHBrZXlfZ2Vuc2VjazIgX191c2VyICp1Z3MpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTQxNC1cdH1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzo0MTU6XHRyYyA9IHBrZXlfaGFuZGxlcl9nZW5fa2V5KGFwcW5zLCBrZ3MuYXBxbl9lbnRyaWVzLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTQxNi1cdFx0XHRcdCAgdSwga2dzLnR5cGUsIGtncy5zaXplLCBrZ3Mua2V5Z2VuZmxhZ3MsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTQ0Mj1zdGF0aWMgaW50IHBrZXlfaW9jdGxfY2xyMnNlY2syKHN0cnVjdCBwa2V5X2NscjJzZWNrMiBfX3VzZXIgKnVjcylcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNDcwLVx0fVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjQ3MTpcdHJjID0gcGtleV9oYW5kbGVyX2Nscl90b19rZXkoYXBxbnMsIGtjcy5hcHFuX2VudHJpZXMsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNDcyLVx0XHRcdFx0ICAgICB1LCBrY3MudHlwZSwga2NzLnNpemUsIGtjcy5rZXlnZW5mbGFncyxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9NTAzPXN0YXRpYyBpbnQgcGtleV9pb2N0bF92ZXJpZnlrZXkyKHN0cnVjdCBwa2V5X3ZlcmlmeWtleTIgX191c2VyICp1dmspXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTUxNC1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzo1MTU6XHRyYyA9IHBrZXlfaGFuZGxlcl92ZXJpZnlfa2V5KGtrZXksIGt2ay5rZXlsZW4sXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNTE2LVx0XHRcdFx0ICAgICBcdTAwMjZrdmsuY2FyZG5yLCBcdTAwMjZrdmsuZG9tYWluLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz01NTg9c3RhdGljIGludCBwa2V5X2lvY3RsX2FwcW5zNGsoc3RydWN0IHBrZXlfYXBxbnM0a2V5IF9fdXNlciAqdWFrKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy01NzgtXHR9XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6NTc5Olx0cmMgPSBwa2V5X2hhbmRsZXJfYXBxbnNfZm9yX2tleShra2V5LCBrYWsua2V5bGVuLCBrYWsuZmxhZ3MsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNTgwLVx0XHRcdFx0XHRhcHFucywgXHUwMDI2bnJfYXBxbnMsIDApO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz02MDg9c3RhdGljIGludCBwa2V5X2lvY3RsX2FwcW5zNGt0KHN0cnVjdCBwa2V5X2FwcW5zNGtleXR5cGUgX191c2VyICp1YXQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTYyMi1cdH1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzo2MjM6XHRyYyA9IHBrZXlfaGFuZGxlcl9hcHFuc19mb3Jfa2V5dHlwZShrYXQudHlwZSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy02MjQtXHRcdFx0XHRcdCAgICBrYXQuY3VyX21rdnAsIGthdC5hbHRfbWt2cCxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jPTM0PXN0YXRpYyBMSVNUX0hFQUQoaGFuZGxlcl9saXN0KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzUtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjM2OmludCBwa2V5X2hhbmRsZXJfcmVnaXN0ZXIoc3RydWN0IHBrZXlfaGFuZGxlciAqaGFuZGxlcilcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzcte1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzozODpcdGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmg7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTM5LVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtNzgtfVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzo3OTpFWFBPUlRfU1lNQk9MKHBrZXlfaGFuZGxlcl9yZWdpc3Rlcik7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTgwLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzo4MTppbnQgcGtleV9oYW5kbGVyX3VucmVnaXN0ZXIoc3RydWN0IHBrZXlfaGFuZGxlciAqaGFuZGxlcilcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtODIte1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtOTMtfVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzo5NDpFWFBPUlRfU1lNQk9MKHBrZXlfaGFuZGxlcl91bnJlZ2lzdGVyKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtOTUtXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy05OS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTAwOmNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKnBrZXlfaGFuZGxlcl9nZXRfa2V5YmFzZWQoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbilcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTAxLXtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTAyOlx0Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqaDtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTAzLVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTE3LX1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTE4OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX2dldF9rZXliYXNlZCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTExOS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTIwOmNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKnBrZXlfaGFuZGxlcl9nZXRfa2V5dHlwZWJhc2VkKGVudW0gcGtleV9rZXlfdHlwZSBrdClcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTIxLXtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTIyOlx0Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqaDtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTIzLVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTM3LX1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTM4OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX2dldF9rZXl0eXBlYmFzZWQpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xMzktXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjE0MDp2b2lkIHBrZXlfaGFuZGxlcl9wdXQoY29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqaGFuZGxlcilcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTQxLXtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTQyOlx0Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqaDtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTQzLVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTU1LX1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTU2OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX3B1dCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE1Ny1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTU4OmludCBwa2V5X2hhbmRsZXJfa2V5X3RvX3Byb3RrZXkoY29uc3Qgc3RydWN0IHBrZXlfYXBxbiAqYXBxbnMsIHNpemVfdCBucl9hcHFucyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTU5LVx0XHRcdFx0Y29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE2Mi17XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjE2MzpcdGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmg7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE2NC1cdGludCByYyA9IC1FTk9ERVY7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE2NS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTY2Olx0aCA9IHBrZXlfaGFuZGxlcl9nZXRfa2V5YmFzZWQoa2V5LCBrZXlsZW4pO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xNjctXHRpZiAoaCBcdTAwMjZcdTAwMjYgaC1cdTAwM2VrZXlfdG9fcHJvdGtleSkge1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTcxLVx0fVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxNzI6XHRwa2V5X2hhbmRsZXJfcHV0KGgpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xNzMtXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xNzUtfVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxNzY6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfa2V5X3RvX3Byb3RrZXkpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xNzctXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xODMtICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjE4NDppbnQgcGtleV9oYW5kbGVyX3Nsb3dwYXRoX2tleV90b19wcm90a2V5KGNvbnN0IHN0cnVjdCBwa2V5X2FwcW4gKmFwcW5zLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xODUtXHRcdFx0XHRcdCBzaXplX3QgbnJfYXBxbnMsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xODkte1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxOTA6XHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoLCAqaHRtcFsxMF07XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE5MS1cdGludCBpLCBuID0gMCwgcmMgPSAtRU5PREVWO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjE1LX1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjE2OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX3Nsb3dwYXRoX2tleV90b19wcm90a2V5KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjE3LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyMTg6aW50IHBrZXlfaGFuZGxlcl9nZW5fa2V5KGNvbnN0IHN0cnVjdCBwa2V5X2FwcW4gKmFwcW5zLCBzaXplX3QgbnJfYXBxbnMsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTIxOS1cdFx0XHQgdTMyIGtleXR5cGUsIHUzMiBrZXlzdWJ0eXBlLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjIyLXtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjIzOlx0Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqaDtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjI0LVx0aW50IHJjID0gLUVOT0RFVjtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjI1LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyMjY6XHRoID0gcGtleV9oYW5kbGVyX2dldF9rZXl0eXBlYmFzZWQoa2V5c3VidHlwZSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTIyNy1cdGlmIChoIFx1MDAyNlx1MDAyNiBoLVx1MDAzZWdlbl9rZXkpIHtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTIzMS1cdH1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjMyOlx0cGtleV9oYW5kbGVyX3B1dChoKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjMzLVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjM1LX1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjM2OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX2dlbl9rZXkpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yMzctXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjIzODppbnQgcGtleV9oYW5kbGVyX2Nscl90b19rZXkoY29uc3Qgc3RydWN0IHBrZXlfYXBxbiAqYXBxbnMsIHNpemVfdCBucl9hcHFucyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjM5LVx0XHRcdCAgICB1MzIga2V5dHlwZSwgdTMyIGtleXN1YnR5cGUsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNDQte1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyNDU6XHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNDYtXHRpbnQgcmMgPSAtRU5PREVWO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNDctXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI0ODpcdGggPSBwa2V5X2hhbmRsZXJfZ2V0X2tleXR5cGViYXNlZChrZXlzdWJ0eXBlKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjQ5LVx0aWYgKGggXHUwMDI2XHUwMDI2IGgtXHUwMDNlY2xyX3RvX2tleSkge1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjUzLVx0fVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyNTQ6XHRwa2V5X2hhbmRsZXJfcHV0KGgpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNTUtXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNTctfVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyNTg6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfY2xyX3RvX2tleSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI1OS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjYwOmludCBwa2V5X2hhbmRsZXJfdmVyaWZ5X2tleShjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNjEtXHRcdFx0ICAgIHUxNiAqY2FyZCwgdTE2ICpkb20sXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNjQte1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyNjU6XHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNjYtXHRpbnQgcmMgPSAtRU5PREVWO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNjctXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI2ODpcdGggPSBwa2V5X2hhbmRsZXJfZ2V0X2tleWJhc2VkKGtleSwga2V5bGVuKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjY5LVx0aWYgKGggXHUwMDI2XHUwMDI2IGgtXHUwMDNldmVyaWZ5X2tleSkge1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjcyLVx0fVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyNzM6XHRwa2V5X2hhbmRsZXJfcHV0KGgpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNzQtXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNzYtfVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyNzc6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfdmVyaWZ5X2tleSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI3OC1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6Mjc5OmludCBwa2V5X2hhbmRsZXJfYXBxbnNfZm9yX2tleShjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuLCB1MzIgZmxhZ3MsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI4MC1cdFx0XHQgICAgICAgc3RydWN0IHBrZXlfYXBxbiAqYXBxbnMsIHNpemVfdCAqbnJfYXBxbnMsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yODIte1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyODM6XHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yODQtXHRpbnQgcmMgPSAtRU5PREVWO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yODUtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI4NjpcdGggPSBwa2V5X2hhbmRsZXJfZ2V0X2tleWJhc2VkKGtleSwga2V5bGVuKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjg3LVx0aWYgKGggXHUwMDI2XHUwMDI2IGgtXHUwMDNlYXBxbnNfZm9yX2tleSlcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI4OS1cdFx0XHRcdCAgICAgIHhmbGFncyk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI5MDpcdHBrZXlfaGFuZGxlcl9wdXQoaCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI5MS1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI5My19XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI5NDpFWFBPUlRfU1lNQk9MKHBrZXlfaGFuZGxlcl9hcHFuc19mb3Jfa2V5KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjk1LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyOTY6aW50IHBrZXlfaGFuZGxlcl9hcHFuc19mb3Jfa2V5dHlwZShlbnVtIHBrZXlfa2V5X3R5cGUga2V5c3VidHlwZSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjk3LVx0XHRcdFx0ICAgdTggY3VyX21rdnBbMzJdLCB1OCBhbHRfbWt2cFszMl0sIHUzMiBmbGFncyxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMwMC17XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjMwMTpcdGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmg7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMwMi1cdGludCByYyA9IC1FTk9ERVY7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMwMy1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzA0Olx0aCA9IHBrZXlfaGFuZGxlcl9nZXRfa2V5dHlwZWJhc2VkKGtleXN1YnR5cGUpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zMDUtXHRpZiAoaCBcdTAwMjZcdTAwMjYgaC1cdTAwM2VhcHFuc19mb3Jfa2V5dHlwZSkge1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzA5LVx0fVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzozMTA6XHRwa2V5X2hhbmRsZXJfcHV0KGgpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zMTEtXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zMTMtfVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzozMTQ6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfYXBxbnNfZm9yX2tleXR5cGUpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zMTUtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjMxNjp2b2lkIHBrZXlfaGFuZGxlcl9yZXF1ZXN0X21vZHVsZXModm9pZClcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzE3LXtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzE4LSNpZmRlZiBDT05GSUdfTU9EVUxFU1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzozMTk6XHRzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHBrZXlfaGFuZGxlcl9tb2R1bGVzW10gPSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMyMC0jaWYgSVNfTU9EVUxFKENPTkZJR19QS0VZX0NDQSlcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMzNC1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzM1Olx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShwa2V5X2hhbmRsZXJfbW9kdWxlcyk7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjMzNjpcdFx0Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqaDtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzM3LVx0XHRib29sIGZvdW5kID0gZmFsc2U7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNDEtXHRcdFx0aWYgKGgtXHUwMDNlbW9kdWxlIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzozNDI6XHRcdFx0ICAgICFzdHJjbXAoaC1cdTAwM2Vtb2R1bGUtXHUwMDNlbmFtZSwgcGtleV9oYW5kbGVyX21vZHVsZXNbaV0pKSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTM0My1cdFx0XHRcdGZvdW5kID0gdHJ1ZTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTM0OC1cdFx0aWYgKCFmb3VuZCkge1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzozNDk6XHRcdFx0cHJfZGVidWcoXCYjMzQ7cmVxdWVzdF9tb2R1bGUoJXMpXFxuXCYjMzQ7LCBwa2V5X2hhbmRsZXJfbW9kdWxlc1tpXSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjM1MDpcdFx0XHRyZXF1ZXN0X21vZHVsZShwa2V5X2hhbmRsZXJfbW9kdWxlc1tpXSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTM1MS1cdFx0fVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzU0LX1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzU1OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX3JlcXVlc3RfbW9kdWxlcyk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTM1Ni1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oPTE0NT1leHRlcm4gY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqcGtleV9hdHRyX2dyb3Vwc1tdO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMTUwLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoxNTE6c3RydWN0IHBrZXlfaGFuZGxlciB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTE1Mi1cdHN0cnVjdCBtb2R1bGUgKm1vZHVsZTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTE5Mi1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg6MTkzOmludCBwa2V5X2hhbmRsZXJfcmVnaXN0ZXIoc3RydWN0IHBrZXlfaGFuZGxlciAqaGFuZGxlcik7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oOjE5NDppbnQgcGtleV9oYW5kbGVyX3VucmVnaXN0ZXIoc3RydWN0IHBrZXlfaGFuZGxlciAqaGFuZGxlcik7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTE5NS1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTE5OS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg6MjAwOmNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKnBrZXlfaGFuZGxlcl9nZXRfa2V5YmFzZWQoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbik7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oOjIwMTpjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpwa2V5X2hhbmRsZXJfZ2V0X2tleXR5cGViYXNlZChlbnVtIHBrZXlfa2V5X3R5cGUga3QpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoyMDI6dm9pZCBwa2V5X2hhbmRsZXJfcHV0KGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmhhbmRsZXIpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMDMtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oOjIwNDppbnQgcGtleV9oYW5kbGVyX2tleV90b19wcm90a2V5KGNvbnN0IHN0cnVjdCBwa2V5X2FwcW4gKmFwcW5zLCBzaXplX3QgbnJfYXBxbnMsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIwNS1cdFx0XHRcdGNvbnN0IHU4ICprZXksIHUzMiBrZXlsZW4sXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMDctXHRcdFx0XHR1MzIgeGZsYWdzKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg6MjA4OmludCBwa2V5X2hhbmRsZXJfc2xvd3BhdGhfa2V5X3RvX3Byb3RrZXkoY29uc3Qgc3RydWN0IHBrZXlfYXBxbiAqYXBxbnMsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIwOS1cdFx0XHRcdFx0IHNpemVfdCBucl9hcHFucyxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIxMi1cdFx0XHRcdFx0IHUzMiAqcHJvdGtleXR5cGUsIHUzMiB4ZmxhZ3MpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoyMTM6aW50IHBrZXlfaGFuZGxlcl9nZW5fa2V5KGNvbnN0IHN0cnVjdCBwa2V5X2FwcW4gKmFwcW5zLCBzaXplX3QgbnJfYXBxbnMsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIxNC1cdFx0XHQgdTMyIGtleXR5cGUsIHUzMiBrZXlzdWJ0eXBlLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjE2LVx0XHRcdCB1OCAqa2V5YnVmLCB1MzIgKmtleWJ1ZmxlbiwgdTMyICprZXlpbmZvLCB1MzIgeGZsYWdzKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg6MjE3OmludCBwa2V5X2hhbmRsZXJfY2xyX3RvX2tleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucywgc2l6ZV90IG5yX2FwcW5zLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMTgtXHRcdFx0ICAgIHUzMiBrZXl0eXBlLCB1MzIga2V5c3VidHlwZSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIyMi1cdFx0XHQgICAgdTMyIHhmbGFncyk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oOjIyMzppbnQgcGtleV9oYW5kbGVyX3ZlcmlmeV9rZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjI0LVx0XHRcdCAgICB1MTYgKmNhcmQsIHUxNiAqZG9tLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjI2LVx0XHRcdCAgICB1MzIgeGZsYWdzKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg6MjI3OmludCBwa2V5X2hhbmRsZXJfYXBxbnNfZm9yX2tleShjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuLCB1MzIgZmxhZ3MsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIyOC1cdFx0XHQgICAgICAgc3RydWN0IHBrZXlfYXBxbiAqYXBxbnMsIHNpemVfdCAqbnJfYXBxbnMsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIyOS1cdFx0XHQgICAgICAgdTMyIHhmbGFncyk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oOjIzMDppbnQgcGtleV9oYW5kbGVyX2FwcW5zX2Zvcl9rZXl0eXBlKGVudW0gcGtleV9rZXlfdHlwZSBrdHlwZSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjMxLVx0XHRcdFx0ICAgdTggY3VyX21rdnBbMzJdLCB1OCBhbHRfbWt2cFszMl0sIHUzMiBmbGFncyxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIzNy0gKi9cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg6MjM4OnZvaWQgcGtleV9oYW5kbGVyX3JlcXVlc3RfbW9kdWxlcyh2b2lkKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjM5LVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYz01NTc9c3RhdGljIGludCBjY2Ffc2xvd3BhdGhfa2V5MnByb3RrZXkoY29uc3Qgc3RydWN0IHBrZXlfYXBxbiAqYXBxbnMsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2NjYS5jLTU5NS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYzo1OTY6c3RhdGljIHN0cnVjdCBwa2V5X2hhbmRsZXIgY2NhX2hhbmRsZXIgPSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfY2NhLmMtNTk3LVx0Lm1vZHVsZVx0XHRcdCA9IFRISVNfTU9EVUxFLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYz02MTM9c3RhdGljIGludCBfX2luaXQgcGtleV9jY2FfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYy02MTUtXHQvKiByZWdpc3RlciB0aGlzIG1vZHVsZSBhcyBwa2V5IGhhbmRsZXIgZm9yIGFsbCB0aGUgY2NhIHN0dWZmICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfY2NhLmM6NjE2Olx0cmV0dXJuIHBrZXlfaGFuZGxlcl9yZWdpc3RlcihcdTAwMjZjY2FfaGFuZGxlcik7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfY2NhLmMtNjE3LX1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfY2NhLmM9NjIyPXN0YXRpYyB2b2lkIF9fZXhpdCBwa2V5X2NjYV9leGl0KHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2NjYS5jLTYyNC1cdC8qIHVucmVnaXN0ZXIgdGhpcyBtb2R1bGUgYXMgcGtleSBoYW5kbGVyICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfY2NhLmM6NjI1Olx0cGtleV9oYW5kbGVyX3VucmVnaXN0ZXIoXHUwMDI2Y2NhX2hhbmRsZXIpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2NjYS5jLTYyNi19XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2VwMTEuYz01MDQ9c3RhdGljIGludCBlcDExX3Nsb3dwYXRoX2tleTJwcm90a2V5KGNvbnN0IHN0cnVjdCBwa2V5X2FwcW4gKmFwcW5zLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmMtNTQyLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2VwMTEuYzo1NDM6c3RhdGljIHN0cnVjdCBwa2V5X2hhbmRsZXIgZXAxMV9oYW5kbGVyID0ge1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2VwMTEuYy01NDQtXHQubW9kdWxlXHRcdFx0ID0gVEhJU19NT0RVTEUsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2VwMTEuYz01NjA9c3RhdGljIGludCBfX2luaXQgcGtleV9lcDExX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jLTU2Mi1cdC8qIHJlZ2lzdGVyIHRoaXMgbW9kdWxlIGFzIHBrZXkgaGFuZGxlciBmb3IgYWxsIHRoZSBlcDExIHN0dWZmICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jOjU2MzpcdHJldHVybiBwa2V5X2hhbmRsZXJfcmVnaXN0ZXIoXHUwMDI2ZXAxMV9oYW5kbGVyKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmMtNTY0LX1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jPTU2OT1zdGF0aWMgdm9pZCBfX2V4aXQgcGtleV9lcDExX2V4aXQodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jLTU3MS1cdC8qIHVucmVnaXN0ZXIgdGhpcyBtb2R1bGUgYXMgcGtleSBoYW5kbGVyICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jOjU3MjpcdHBrZXlfaGFuZGxlcl91bnJlZ2lzdGVyKFx1MDAyNmVwMTFfaGFuZGxlcik7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jLTU3My19XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3Bja21vLmM9NDM1PXN0YXRpYyBpbnQgcGtleV9wY2ttb192ZXJpZnlrZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfcGNrbW8uYy00NDItXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfcGNrbW8uYzo0NDM6c3RhdGljIHN0cnVjdCBwa2V5X2hhbmRsZXIgcGNrbW9faGFuZGxlciA9IHtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jLTQ0NC1cdC5tb2R1bGVcdFx0ICAgICAgPSBUSElTX01PRFVMRSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfcGNrbW8uYz00NTY9c3RhdGljIGludCBfX2luaXQgcGtleV9wY2ttb19pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3Bja21vLmMtNDY5LVx0LyogcmVnaXN0ZXIgdGhpcyBtb2R1bGUgYXMgcGtleSBoYW5kbGVyIGZvciBhbGwgdGhlIHBja21vIHN0dWZmICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfcGNrbW8uYzo0NzA6XHRyZXR1cm4gcGtleV9oYW5kbGVyX3JlZ2lzdGVyKFx1MDAyNnBja21vX2hhbmRsZXIpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3Bja21vLmMtNDcxLX1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfcGNrbW8uYz00NzY9c3RhdGljIHZvaWQgX19leGl0IHBrZXlfcGNrbW9fZXhpdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jLTQ3OC1cdC8qIHVucmVnaXN0ZXIgdGhpcyBtb2R1bGUgYXMgcGtleSBoYW5kbGVyICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfcGNrbW8uYzo0Nzk6XHRwa2V5X2hhbmRsZXJfdW5yZWdpc3RlcihcdTAwMjZwY2ttb19oYW5kbGVyKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jLTQ4MC19XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMTctLypcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjE4OiAqIFdyYXBwZXIgYXJvdW5kIHBrZXlfaGFuZGxlcl9nZW5fa2V5KCkgd2hpY2ggZGVhbHMgd2l0aCB0aGVcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTE5LSAqIEVOT0RFViByZXR1cm4gY29kZSBhbmQgdGhlbiB0cmllcyB0byBlbmZvcmNlIGEgcGtleSBoYW5kbGVyXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMjEtICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYzoyMjpzdGF0aWMgaW50IHN5c19wa2V5X2hhbmRsZXJfZ2VuX2tleSh1MzIga2V5dHlwZSwgdTMyIGtleXN1YnR5cGUsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0yMy1cdFx0XHRcdCAgICB1MzIga2V5Yml0c2l6ZSwgdTMyIGZsYWdzLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTI3LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6Mjg6XHRyYyA9IHBrZXlfaGFuZGxlcl9nZW5fa2V5KE5VTEwsIDAsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0yOS1cdFx0XHRcdCAga2V5dHlwZSwga2V5c3VidHlwZSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0zMi1cdGlmIChyYyA9PSAtRU5PREVWKSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYzozMzpcdFx0cGtleV9oYW5kbGVyX3JlcXVlc3RfbW9kdWxlcygpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6MzQ6XHRcdHJjID0gcGtleV9oYW5kbGVyX2dlbl9rZXkoTlVMTCwgMCxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTM1LVx0XHRcdFx0XHQgIGtleXR5cGUsIGtleXN1YnR5cGUsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM9NDk9c3RhdGljIHNzaXplX3QgcGtleV9wcm90a2V5X2Flc19hdHRyX3JlYWQodTMyIGtleXR5cGUsIGJvb2wgaXNfeHRzLCBjaGFyICpidWYsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtNjctXHRwcm90a2V5LmxlbiA9IHNpemVvZihwcm90a2V5LnByb3RrZXkpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6Njg6XHRyYyA9IHN5c19wa2V5X2hhbmRsZXJfZ2VuX2tleShrZXl0eXBlLCBQS0VZX1RZUEVfUFJPVEtFWSwgMCwgMCxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTY5LVx0XHRcdFx0ICAgICAgcHJvdGtleS5wcm90a2V5LCBcdTAwMjZwcm90a2V5Lmxlbixcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy04MS1cdFx0cHJvdGtleS5sZW4gPSBzaXplb2YocHJvdGtleS5wcm90a2V5KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjgyOlx0XHRyYyA9IHN5c19wa2V5X2hhbmRsZXJfZ2VuX2tleShrZXl0eXBlLCBQS0VZX1RZUEVfUFJPVEtFWSwgMCwgMCxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTgzLVx0XHRcdFx0XHQgICAgICBwcm90a2V5LnByb3RrZXksIFx1MDAyNnByb3RrZXkubGVuLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jPTEwNj1zdGF0aWMgc3NpemVfdCBwa2V5X3Byb3RrZXlfYWVzX3h0c19hdHRyX3JlYWQodTMyIGtleXR5cGUsIGNoYXIgKmJ1Zixcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0xMzEtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYzoxMzI6XHRyYyA9IHN5c19wa2V5X2hhbmRsZXJfZ2VuX2tleShrZXl0eXBlLCBQS0VZX1RZUEVfUFJPVEtFWSwgMCwgMCxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTEzMy1cdFx0XHRcdCAgICAgIHQtXHUwMDNlcHJvdGtleSwgXHUwMDI2cHJvdGxlbiwgXHUwMDI2cHJvdHR5cGUpO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jPTE0OD1zdGF0aWMgc3NpemVfdCBwa2V5X3Byb3RrZXlfaG1hY19hdHRyX3JlYWQodTMyIGtleXR5cGUsIGNoYXIgKmJ1Zixcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0xNzMtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYzoxNzQ6XHRyYyA9IHN5c19wa2V5X2hhbmRsZXJfZ2VuX2tleShrZXl0eXBlLCBQS0VZX1RZUEVfUFJPVEtFWSwgMCwgMCxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTE3NS1cdFx0XHRcdCAgICAgIHQtXHUwMDNlcHJvdGtleSwgXHUwMDI2cHJvdGxlbiwgXHUwMDI2cHJvdHR5cGUpO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jPTMwOD1zdGF0aWMgc3NpemVfdCBwa2V5X2NjYWRhdGFfYWVzX2F0dHJfcmVhZCh1MzIga2V5dHlwZSwgYm9vbCBpc194dHMsIGNoYXIgKmJ1Zixcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0zMjEtXHRidWZsZW4gPSBzaXplb2Yoc2Vja2V5LVx1MDAzZXNlY2tleSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYzozMjI6XHRyYyA9IHN5c19wa2V5X2hhbmRsZXJfZ2VuX2tleShrZXl0eXBlLCBQS0VZX1RZUEVfQ0NBX0RBVEEsIDAsIDAsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0zMjMtXHRcdFx0XHQgICAgICBzZWNrZXktXHUwMDNlc2Vja2V5LCBcdTAwMjZidWZsZW4sIE5VTEwpO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTMyOS1cdFx0YnVmbGVuID0gc2l6ZW9mKHNlY2tleS1cdTAwM2VzZWNrZXkpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6MzMwOlx0XHRyYyA9IHN5c19wa2V5X2hhbmRsZXJfZ2VuX2tleShrZXl0eXBlLCBQS0VZX1RZUEVfQ0NBX0RBVEEsIDAsIDAsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0zMzEtXHRcdFx0XHRcdCAgICAgIHNlY2tleS1cdTAwM2VzZWNrZXksIFx1MDAyNmJ1ZmxlbiwgTlVMTCk7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM9NDE5PXN0YXRpYyBzc2l6ZV90IHBrZXlfY2NhY2lwaGVyX2Flc19hdHRyX3JlYWQoZW51bSBwa2V5X2tleV9zaXplIGtleWJpdHMsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtNDMzLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6NDM0Olx0cmMgPSBzeXNfcGtleV9oYW5kbGVyX2dlbl9rZXkocGtleV9hZXNfYml0c2l6ZV90b19rZXl0eXBlKGtleWJpdHMpLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtNDM1LVx0XHRcdFx0ICAgICAgUEtFWV9UWVBFX0NDQV9DSVBIRVIsIGtleWJpdHMsIDAsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtNDQyLVx0XHRidWYgJiM0Mzs9IENDQUNJUEhFUlRPS0VOU0laRTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjQ0MzpcdFx0cmMgPSBzeXNfcGtleV9oYW5kbGVyX2dlbl9rZXkoXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy00NDQtXHRcdFx0cGtleV9hZXNfYml0c2l6ZV90b19rZXl0eXBlKGtleWJpdHMpLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jPTUzND1zdGF0aWMgc3NpemVfdCBwa2V5X2VwMTFfYWVzX2F0dHJfcmVhZChlbnVtIHBrZXlfa2V5X3NpemUga2V5Yml0cyxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy01NDgtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYzo1NDk6XHRyYyA9IHN5c19wa2V5X2hhbmRsZXJfZ2VuX2tleShwa2V5X2Flc19iaXRzaXplX3RvX2tleXR5cGUoa2V5Yml0cyksXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy01NTAtXHRcdFx0XHQgICAgICBQS0VZX1RZUEVfRVAxMV9BRVMsIGtleWJpdHMsIDAsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtNTU3LVx0XHRidWYgJiM0Mzs9IE1BWEVQMTFBRVNLRVlCTE9CU0laRTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjU1ODpcdFx0cmMgPSBzeXNfcGtleV9oYW5kbGVyX2dlbl9rZXkoXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy01NTktXHRcdFx0cGtleV9hZXNfYml0c2l6ZV90b19rZXl0eXBlKGtleWJpdHMpLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTIzMz1zdGF0aWMgaW50IHV2X3ZlcmlmeWtleShjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI3MS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjI3MjpzdGF0aWMgc3RydWN0IHBrZXlfaGFuZGxlciB1dl9oYW5kbGVyID0ge1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjczLVx0Lm1vZHVsZVx0XHRcdCA9IFRISVNfTU9EVUxFLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTI4ND1zdGF0aWMgaW50IF9faW5pdCBwa2V5X3V2X2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yOTctXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoyOTg6XHRyYyA9IHBrZXlfaGFuZGxlcl9yZWdpc3RlcihcdTAwMjZ1dl9oYW5kbGVyKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI5OS1cdGlmIChyYylcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0zMDg9c3RhdGljIHZvaWQgX19leGl0IHBrZXlfdXZfZXhpdCh2b2lkKVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMzA5LXtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjMxMDpcdHBrZXlfaGFuZGxlcl91bnJlZ2lzdGVyKFx1MDAyNnV2X2hhbmRsZXIpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMzExLVx0bXV0ZXhfbG9jayhcdTAwMjZ1dl9saXN0X211dGV4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY3MDcKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVhY2hpbmcgYHV2X2ZpbmRfc2VjcmV0YCBmcm9tIFVzZXJzcGFjZSB2aWEgYC9kZXYvcGtleWAgaW9jdGxzKioKCk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRyYWNpbmcgdGhlIHBhdGggdG8gYHV2X2ZpbmRfc2VjcmV0YC4gSXQmIzM5O3MgY2FsbGVkIGZyb20gYGdldF9zZWNyZXRfbWV0YWRhdGFgLCB3aGljaCBpcyBpdHNlbGYgY2FsbGVkIGZyb20gdHdvIHBsYWNlczogYHJldHJpZXZlX3NlY3JldGAgYW5kIGB1dl92ZXJpZnlrZXlgLiBJIGtub3cgdGhhdCBgdXZfdmVyaWZ5a2V5YCBpcyByZWdpc3RlcmVkIGFzIGAudmVyaWZ5X2tleWAgd2l0aGluIGB1dl9oYW5kbGVyYCwgd2hpY2ggaXMgaW5pdGlhbGl6ZWQgZHVyaW5nIGBwa2V5X3V2X2luaXRgLiBBbmQgYHBrZXlfdXZfaW5pdGAgaXMgdGhlIG1vZHVsZSBpbml0IGZ1bmN0aW9uIGZvciBgcGtleV91dmAuCgpTbywgYHV2X3ZlcmlmeWtleWAgaXMgdWx0aW1hdGVseSBjYWxsZWQgYnkgYHBrZXlfaGFuZGxlcl92ZXJpZnlfa2V5YC4gVGhhdCwgaW4gdHVybiwgaXMgdHJpZ2dlcmVkIGJ5IGBwa2V5X2lvY3RsX3ZlcmlmeWtleWAsIGBwa2V5X2lvY3RsX3ZlcmlmeWtleTJgLCBhbmQgYHBrZXlfaW9jdGxfdmVyaWZ5cHJvdGtgLiBBaGEhIFRob3NlIGFyZSBpb2N0bHMgb24gYC9kZXYvcGtleWAuIFRoYXQmIzM5O3MgdGhlIGxpbmsuICoqWWVzLCB0aGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggdGhvc2UgYC9kZXYvcGtleWAgaW9jdGxzLioqCgpOb3cgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBjYW4gdGhpcyBiZSByZWFjaGVkIGluIFFFTVU/IEkga25vdyB0aGUgczM5MHggYXJjaGl0ZWN0dXJlIGdldHMgYXR0ZW50aW9uIGZyb20gc3l6a2FsbGVyLiBUaGF0JiMzOTtzIGEgZ29vZCBzaWduLiBBbmQsIGxvb2tpbmcgYXQgdGhlIGNvZGUsIEkgc2VlIHRoYXQgYHV2X2ZpbmRfc2VjcmV0YCBpcyBsb2NhdGVkIGluIGBhcmNoL3MzOTAva2VybmVsL3V2LmNgLiBUaGVyZWZvcmUsIHRoZSBhcmNoaXRlY3R1cmUgdGhhdCB1c2VzIHRoaXMgaXMgczM5MHguCgpMZXQmIzM5O3MgcXVpY2tseSBjaGVjayB3aGV0aGVyIGBDT05GSUdfUEtFWV9VVmAgaXMgcmVxdWlyZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24uIFRoYXQmIzM5O2xsIGJlIGEga2V5IHBhcnQgb2YgZGV0ZXJtaW5pbmcgdGhlIG92ZXJhbGwgZXhwb3N1cmUgdG8gZXhwbG9pdGF0aW9uIGluIHRoZSB2YXJpb3VzIGJ1aWxkIHNldHVwcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBLRVlfVVYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9jcnlwdG8vS2NvbmZpZz0xMzc9Y29uZmlnIFBLRVlfUENLTU9cbi0tXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTE1Ny1cbmRyaXZlcnMvY3J5cHRvL0tjb25maWc6MTU4OmNvbmZpZyBQS0VZX1VWXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTE1OS1cdHRyaXN0YXRlIFwmIzM0O1BLRVkgVVYgc3VwcG9ydCBoYW5kbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NDEwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyB0aGUgS2NvbmZpZyBPcHRpb25zIGZvciBQS0VZX1VWKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgS2NvbmZpZyBkZWZpbml0aW9uIGZvciBgUEtFWV9VVmAuIE15IGluc3RpbmN0IHNheXMgaXQmIzM5O2xsIGJlIGluIGVpdGhlciB0aGUgczM5MCBjcnlwdG8gZHJpdmVycyBvciB0aGUgZ2VuZXJpYyBjcnlwdG8gc2VjdGlvbi4gR2l2ZW4gaXRzIGxpa2VseSBmdW5jdGlvbiwgdGhlIHMzOTAgcGF0aCBtaWdodCBiZSBhIGJldHRlciBiZXQgc2luY2UgaXQmIzM5O3MgcHJvYmFibHkgcmVsYXRlZCB0byBoYXJkd2FyZS1zcGVjaWZpYyBrZXkgbWFuYWdlbWVudC4gSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgYGRyaXZlcnMvczM5MC9jcnlwdG8vS2NvbmZpZ2AgZmlyc3QuIElmIGl0JiMzOTtzIG5vdCB0aGVyZSwgSSYjMzk7bGwgbW92ZSBvbiBhbmQgaW1tZWRpYXRlbHkgbG9vayBpbiBgZHJpdmVycy9jcnlwdG8vS2NvbmZpZ2AuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcHJvZ3Jlc3Npb24uIEZpbmRpbmcgdGhlIGV4YWN0IGxvY2F0aW9uIGFuZCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgYFBLRVlfVVZgIGlzIGtleSBmb3Igd2hhdGV2ZXIgSSYjMzk7bSB0cm91Ymxlc2hvb3Rpbmcgb3IgY29uZmlndXJpbmcuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQS0VZX1VWJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2ODEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHVuZm9sZGVkOgoKKipEZWJ1Z2dpbmcgS2NvbmZpZyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gY2hhc2luZyBkb3duIHRoaXMgYFBLRVlfUENLTU9gIGNvbmZpZ3VyYXRpb24gaXNzdWUuIEl0IGxvb2tzIGxpa2UgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gaXMgcG9pbnRpbmcgbWUgdG8gYGRyaXZlcnMvY3J5cHRvL0tjb25maWdgLCB3aGljaCBzZWVtcyBsb2dpY2FsLiBXYWl0IGEgbWludXRl4oCmIHRoZSBvdXRwdXQgaW5kaWNhdGVzIGBkcml2ZXJzL2NyeXB0by9LY29uZmlnPTEzNz1jb25maWcgUEtFWV9QQ0tNT2AsIGNvbmZpcm1pbmcgdGhhdCBsb2NhdGlvbiBpcyByZWxldmFudC4gQnV0IHNvbWV0aGluZyBmZWVscyBvZmYuIERpZG4mIzM5O3QgSSBqdXN0IHRyeSB0byBsb29rIGludG8gYGRyaXZlcnMvczM5MC9jcnlwdG8vS2NvbmZpZ2A/IEFuZCB0aGF0ICpkaWRuJiMzOTt0KiBleGlzdCwgcmlnaHQ/IE9rYXksIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBsb29raW5nIGluIHRoZSByaWdodCBwbGFjZSwgc28gbm93IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBsb2NhdGlvbiBvciBqdXN0IHZlcmlmeSBpdCYjMzk7cyB0aGUgY29ycmVjdCBLY29uZmlnIGZpbGUuIExldCYjMzk7cyByZXZpc2l0IGJvdGggdGhvc2UgS2NvbmZpZyBsb2NhdGlvbnMuIEdvdHRhIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1peGVkIHNvbWV0aGluZyB1cCwgZ2l2ZW4gdGhhdCB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG9uZSBzZWVtcyBhYnNlbnQuIFRoaXMgZmVlbHMgbGlrZSBpdCBtaWdodCBiZSBhIHN1YnRsZSBidXQgY3JpdGljYWwgZGlmZmVyZW5jZSBpbiBob3cgdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQvY29uZmlndXJlZCBiYXNlZCBvbiB0aGUgYXJjaGl0ZWN0dXJlLCB3aGljaCBpcyBpbXBvcnRhbnQgdG8ga2VlcCBpbiBtaW5kLiBJIGhvcGUgSSBjYW4gcmVzb2x2ZSB0aGlzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvY3J5cHRvL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE1MDpcdFx0ICBpcyBlc3BlY2lhbGx5IHVzZWQgZHVyaW5nIHNlbGYgdGVzdCBvZiBwcm90ZWN0ZWQga2V5IGNpcGhlcnMgbGlrZVxuIDE1MTpcdFx0ICBQQUVTIGJ1dCB0aGUgQ0NBIGFuZCBFUDExIGhhbmRsZXIgcHJvdmlkZSBhbHRlcm5hdGUgd2F5cyB0b1xuIDE1MjpcdFx0ICBnZW5lcmF0ZSBwcm90ZWN0ZWQga2V5cyBmcm9tIGNsZWFyIGtleSB2YWx1ZXMuXG4gMTUzOlx0XG4gMTU0Olx0XHQgIElmIHlvdSBoYXZlIHNlbGVjdGVkIHRoZSBQS0VZIG9wdGlvbiB0aGVuIHlvdSBzaG91bGQgYWxzbyBlbmFibGVcbiAxNTU6XHRcdCAgdGhpcyBvcHRpb24gdW5sZXNzIHlvdSBhcmUgc3VyZSB5b3UgbmV2ZXIgbmVlZCB0byBkZXJpdmUgcHJvdGVjdGVkXG4gMTU2Olx0XHQgIGtleXMgZnJvbSBjbGVhciBrZXkgdmFsdWVzIGRpcmVjdGx5IHZpYSBQQ0tNTy5cbiAxNTc6XHRcbiAxNTg6XHRjb25maWcgUEtFWV9VVlxuIDE1OTpcdFx0dHJpc3RhdGUgXCYjMzQ7UEtFWSBVViBzdXBwb3J0IGhhbmRsZXJcJiMzNDtcbiAxNjA6XHRcdGRlcGVuZHMgb24gUEtFWVxuIDE2MTpcdFx0ZGVwZW5kcyBvbiBTMzkwX1VWX1VBUElcbiAxNjI6XHRcdGhlbHBcbiAxNjM6XHRcdCAgVGhpcyBpcyB0aGUgUEtFWSBVbHRyYXZpc29yIHN1cHBvcnQgaGFuZGxlciBmb3IgZGVyaXZpbmcgcHJvdGVjdGVkXG4gMTY0Olx0XHQgIGtleXMgZnJvbSBzZWNyZXRzIHN0b3JlZCB3aXRoaW4gdGhlIFVsdHJhdmlzb3IgKFVWKS5cbiAxNjU6XHRcbiAxNjY6XHRcdCAgVGhpcyBtb2R1bGUgd29ya3MgdG9nZXRoZXIgd2l0aCB0aGUgVVYgZGV2aWNlIGFuZCBzdXBwb3J0cyB0aGVcbiAxNjc6XHRcdCAgcmV0cmlldmFsIG9mIHByb3RlY3RlZCBrZXlzIGZyb20gc2VjcmV0cyBzdG9yZWQgd2l0aGluIHRoZVxuIDE2ODpcdFx0ICBVViBmaXJtd2FyZSBsYXllci4gVGhpcyBzZXJ2aWNlIGlzIG9ubHkgYXZhaWxhYmxlIHdpdGhpblxuIDE2OTpcdFx0ICBhIHByb3RlY3RlZCBleGVjdXRpb24gZ3Vlc3QgYW5kIHRodXMgdGhpcyBtb2R1bGUgd2lsbCBmYWlsIHVwb25cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzNzgKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqU2VjdXJlIEV4ZWN1dGlvbiBhbmQgU3l6a2FsbGVyIG9uIHMzOTB4KioKCk9rYXksIHNvIEkgc2VlIHRoaXMgbWVzc2FnZTogJiMzNDtUaGlzIHNlcnZpY2UgaXMgb25seSBhdmFpbGFibGUgd2l0aGluIGEgcHJvdGVjdGVkIGV4ZWN1dGlvbiBndWVzdCwmIzM0OyB3aGljaCBpbW1lZGlhdGVseSByYWlzZXMgYSBxdWVzdGlvbjogZG9lcyBRRU1VLCB0aGUgdmlydHVhbCBtYWNoaW5lIEkmIzM5O20gcHJvYmFibHkgZGVhbGluZyB3aXRoIGhlcmUsIGFjdHVhbGx5IHN1cHBvcnQgc2VjdXJlIGV4ZWN1dGlvbj8gSXQgc291bmRzIGxpa2UgYSBzZWN1cmUgZXhlY3V0aW9uIGd1ZXN0LCBvciBTZWN1cmUgRXhlY3V0aW9uLCBpcyBhIHByZXJlcXVpc2l0ZS4KCkdvb2QsIGl0IHNlZW1zIFFFTVUgKmRvZXMqIHN1cHBvcnQgczM5MHggU2VjdXJlIEV4ZWN1dGlvbiwgc3BlY2lmaWNhbGx5IHVzaW5nICYjMzk7cHJvdHZpcnQmIzM5Oy4gVGhhdCYjMzk7cyBhIHBvaW50IGluIHRoZSByaWdodCBkaXJlY3Rpb24uIEJ1dCBob2xkIG9uLCB0aGUgcmVhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHN5emthbGxlciBpcyAqY29uZmlndXJlZCogdG8gcnVuIHMzOTB4IGluIHRoaXMgU2VjdXJlIEV4ZWN1dGlvbiBtb2RlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHN5emthbGxlciYjMzk7cyBzZXR1cCBpcyBjb21wYXRpYmxlLgoKTGV0JiMzOTtzIHJlLWV4YW1pbmUgdGhlIHByb21wdCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBoaW50cywgaXQgc3RhdGVzIHRoYXQgJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUmIzM0Oy4gU2luY2UgUUVNVSAqY2FuKiBzdXBwb3J0IHMzOTB4IFNlY3VyZSBFeGVjdXRpb24sIHRoYXQgY29kZSBwYXRoIGlzIGluZGVlZCBwb3NzaWJsZSB0byByZWFjaC4KCk9rYXksIHNpbmNlIFFFTVUgKnN1cHBvcnRzKiBzMzkweCBTZWN1cmUgRXhlY3V0aW9uIGFuZCB0aGUgJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzJiMzNDsgbGluZSBjYW4gYmUgY29uc2lkZXJlZCBhcyB0aGUgY2F2ZWF0LCBpdCAqaXMqIHBvc3NpYmxlIHRvIHJlYWNoLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGlzIGFueSBldmlkZW5jZSBvZiB0aGUgYWJpbGl0eSB0byBjYWxsIGB1dl9maW5kX3NlY3JldGAgaW4gYGFyY2gvczM5MC9rZXJuZWwvdXYuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2tlcm5lbC91di5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NzA6XHR9XG4gNzcxOlx0XG4gNzcyOlx0LyoqXG4gNzczOlx0ICogdXZfZmluZF9zZWNyZXQoKSAtIHNlYXJjaCBzZWNyZXQgbWV0YWRhdGEgZm9yIGEgZ2l2ZW4gc2VjcmV0IGlkLlxuIDc3NDpcdCAqIEBzZWNyZXRfaWQ6IHNlYXJjaCBwYXR0ZXJuLlxuIDc3NTpcdCAqIEBsaXN0OiBlcGhlbWVyYWwgYnVmZmVyIHNwYWNlXG4gNzc2Olx0ICogQHNlY3JldDogb3V0cHV0IGRhdGEsIGNvbnRhaW5pbmcgdGhlIHNlY3JldCYjMzk7cyBtZXRhZGF0YS5cbiA3Nzc6XHQgKlxuIDc3ODpcdCAqIENvbnRleHQ6IG1pZ2h0IHNsZWVwLlxuIDc3OTpcdCAqL1xuIDc4MDpcdGludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG4gNzgxOlx0XHRcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqbGlzdCxcbiA3ODI6XHRcdFx0ICAgc3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW1faGRyICpzZWNyZXQpXG4gNzgzOlx0e1xuIDc4NDpcdFx0dTE2IHN0YXJ0X2lkeDtcbiA3ODU6XHRcdHUxNiBsaXN0X3JjO1xuIDc4NjpcdFx0aW50IHJldDtcbiA3ODc6XHRcbiA3ODg6XHRcdGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4ID0gMDtcbiA3ODk6XHRcbiA3OTA6XHRcdGRvIHtcbiA3OTE6XHRcdFx0c3RhcnRfaWR4ID0gbGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHg7XG4gNzkyOlx0XHRcdHV2X2xpc3Rfc2VjcmV0cyhsaXN0LCBzdGFydF9pZHgsIFx1MDAyNmxpc3RfcmMsIE5VTEwpO1xuIDc5MzpcdFx0XHRpZiAobGlzdF9yYyAhPSBVVkNfUkNfRVhFQ1VURUQgXHUwMDI2XHUwMDI2IGxpc3RfcmMgIT0gVVZDX1JDX01PUkVfREFUQSkge1xuIDc5NDpcdFx0XHRcdGlmIChsaXN0X3JjID09IFVWQ19SQ19JTlZfQ01EKVxuIDc5NTpcdFx0XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4gNzk2Olx0XHRcdFx0ZWxzZVxuIDc5NzpcdFx0XHRcdFx0cmV0dXJuIC1FSU87XG4gNzk4Olx0XHRcdH1cbiA3OTk6XHRcdFx0cmV0ID0gZmluZF9zZWNyZXRfaW5fcGFnZShzZWNyZXRfaWQsIGxpc3QsIHNlY3JldCk7XG4gODAwOlx0XHRcdGlmIChyZXQgPT0gMClcbiA4MDE6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDgwMjpcdFx0fSB3aGlsZSAobGlzdF9yYyA9PSBVVkNfUkNfTU9SRV9EQVRBIFx1MDAyNlx1MDAyNiBzdGFydF9pZHggXHUwMDNjIGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4KTtcbiA4MDM6XHRcbiA4MDQ6XHRcdHJldHVybiAtRU5PRU5UO1xuIDgwNTpcdH1cbiA4MDY6XHRFWFBPUlRfU1lNQk9MX0dQTCh1dl9maW5kX3NlY3JldCk7XG4gODA3Olx0XG4gODA4Olx0LyoqXG4gODA5Olx0ICogdXZfcmV0cmlldmVfc2VjcmV0KCkgLSBnZXQgdGhlIHNlY3JldCB2YWx1ZSBmb3IgdGhlIHNlY3JldCBpbmRleC5cbiA4MTA6XHQgKiBAc2VjcmV0X2lkeDogU2VjcmV0IGluZGV4IGZvciB3aGljaCB0aGUgc2VjcmV0IHNob3VsZCBiZSByZXRyaWV2ZWQuXG4gODExOlx0ICogQGJ1ZjogQnVmZmVyIHRvIHN0b3JlIHJldHJpZXZlZCBzZWNyZXQuXG4gODEyOlx0ICogQGJ1Zl9zaXplOiBTaXplIG9mIHRoZSBidWZmZXIuIFRoZSBjb3JyZWN0IGJ1ZmZlciBzaXplIGlzIHJlcG9ydGVkIGFzIHBhcnQgb2ZcbiA4MTM6XHQgKiB0aGUgcmVzdWx0IGZyb20gYHV2X2dldF9zZWNyZXRfbWV0YWRhdGFgLlxuIDgxNDpcdCAqXG4gODE1Olx0ICogQ2FsbHMgdGhlIFJldHJpZXZlIFNlY3JldCBVVkMgYW5kIHRyYW5zbGF0ZXMgdGhlIFVWIHJldHVybiBjb2RlIGludG8gYW4gZXJybm8uXG4gODE2Olx0ICpcbiA4MTc6XHQgKiBDb250ZXh0OiBtaWdodCBzbGVlcC5cbiA4MTg6XHQgKlxuIDgxOTpcdCAqIFJldHVybjpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk3MjEKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaDogVVYgU2VjcmV0IFNlYXJjaCBGaXgqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgdGlnaHRlbmluZyB1cCB0aGUgc2VjcmV0IHNlYXJjaGluZyBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgYHV2X2ZpbmRfc2VjcmV0YCBhbmQgYGZpbmRfc2VjcmV0X2luX3BhZ2VgIGZ1bmN0aW9ucy4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZml4aW5nIGEgYnVnIHJlbGF0ZWQgdG8gaG93IGBzdGFydF9pZHhgIGlzIGJlaW5nIGhhbmRsZWQsIGFuZCB0aGVyZSYjMzk7cyBhIHByb2JsZW0gd2l0aCBgZmluZF9zZWNyZXRfaW5fcGFnZWAgdXNpbmcgYGxpc3QtJmd0O3RvdGFsX251bV9zZWNyZXRzYCB3aGVuIGl0IHNob3VsZCBoYXZlIGJlZW4gdXNpbmcgYGxpc3QtJmd0O251bV9zZWNyX3N0b3JlZGAuIEEgZGVmaW5pdGUgZnVuY3Rpb25hbCBjaGFuZ2UsIHdoaWNoIGlzIGdvb2Qg4oCTIGl0IG1lYW5zIHdlJiMzOTtyZSBhZGRyZXNzaW5nIGEga25vd24gaXNzdWUuCgpUaGUgaW50ZXJlc3RpbmcgYml0IGlzIHdoZXJlIHRoaXMgY29kZSByZXNpZGVzIOKAkyBpdCYjMzk7cyByZWFjaGFibGUgdGhyb3VnaCB0aGUgYC9kZXYvcGtleWAgaW9jdGxzIHNwZWNpZmljYWxseSBvbiBzMzkweCBzeXN0ZW1zLiBUaGlzIHRpZXMgaXQgdG8gdGhlIGhhcmR3YXJlIGtleSBzdXBwb3J0LCBzbyB3ZSBuZWVkIHRvIGJlIGV4dHJhIGNhcmVmdWwgdG8gbm90IGJyZWFrIGFueXRoaW5nLiBUaGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIG5lZWRlZCBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5IGFyZSBgUEtFWV9VVmAsIGBTMzkwX1VWX1VBUElgLCBhbmQgYFBLRVlgLiBXZSYjMzk7cmUgZ29pbmcgdG8gbmVlZCB0byB2ZXJpZnkgaG93IGBQS0VZYCBpcyBjb25maWd1cmVkIGluIG91ciBlbnZpcm9ubWVudC4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgdGhlIGBQS0VZYCBjb25maWd1cmF0aW9uIHJpZ2h0IGF3YXkgdG8gYXNzZXNzIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQS0VZJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9jcnlwdG8vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2NyeXB0by9LY29uZmlnPTY3PWNvbmZpZyBaQ1JZUFRcbi0tXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTc3LVxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZzo3ODpjb25maWcgUEtFWVxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZy03OS1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbCBBUEkgZm9yIHByb3RlY3RlZCBrZXkgaGFuZGxpbmdcJiMzNDtcbi0tXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTEwNC1cbmRyaXZlcnMvY3J5cHRvL0tjb25maWc6MTA1OmNvbmZpZyBQS0VZX0NDQVxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZy0xMDYtXHR0cmlzdGF0ZSBcJiMzNDtQS0VZIENDQSBzdXBwb3J0IGhhbmRsZXJcJiMzNDtcbi0tXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTEyMC1cbmRyaXZlcnMvY3J5cHRvL0tjb25maWc6MTIxOmNvbmZpZyBQS0VZX0VQMTFcbmRyaXZlcnMvY3J5cHRvL0tjb25maWctMTIyLVx0dHJpc3RhdGUgXCYjMzQ7UEtFWSBFUDExIHN1cHBvcnQgaGFuZGxlclwmIzM0O1xuLS1cbmRyaXZlcnMvY3J5cHRvL0tjb25maWctMTM2LVxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZzoxMzc6Y29uZmlnIFBLRVlfUENLTU9cbmRyaXZlcnMvY3J5cHRvL0tjb25maWctMTM4LVx0dHJpc3RhdGUgXCYjMzQ7UEtFWSBQQ0tNTyBzdXBwb3J0IGhhbmRsZXJcJiMzNDtcbi0tXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTE1Ny1cbmRyaXZlcnMvY3J5cHRvL0tjb25maWc6MTU4OmNvbmZpZyBQS0VZX1VWXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTE1OS1cdHRyaXN0YXRlIFwmIzM0O1BLRVkgVVYgc3VwcG9ydCBoYW5kbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNDQzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEZXBlbmRlbmNpZXMgYW5kIEtleSBDb25zaWRlcmF0aW9ucyoqCgpBbHJpZ2h0LCByaWdodCBvZmYgdGhlIGJhdCwgSSBrbm93IEkmIzM5O20gZGVhbGluZyB3aXRoIGBQS0VZYCBhbmQgYFBLRVlfVVZgLiBUaGF0JiMzOTtzIHRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtLiBCdXQsIGhvbGQgb24gYSBzZWNvbmQuIEkgaGF2ZSBhIGh1bmNoLi4uIGRvZXNuJiMzOTt0IGBQS0VZYCBvZnRlbiBoYXZlIGEgdGlnaHQgbGluayB3aXRoIGBaQ1JZUFRgPyBJJiMzOTtkIGJldHRlciBkb3VibGUtY2hlY2sgdGhvc2UgZGVwZW5kZW5jaWVzIGJlZm9yZSBJIG1vdmUgYW55IGZ1cnRoZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHNjb3BlIGhlcmUsIGFuZCB0aGF0IHN0YXJ0cyB3aXRoIGtub3dpbmcgaG93IGBQS0VZYCByZWxpZXMgb24gb3RoZXIgbW9kdWxlcyBvciBjb21wb25lbnRzLiBMZXQmIzM5O3MgZGlnIGludG8gYFBLRVlgJiMzOTtzIGRlcGVuZGVuY2llcyBhbmQgY29uZmlybSBteSBpbml0aWFsIHRob3VnaHQuIFRoYXQgZGVwZW5kZW5jeSBjaGVjayBpcyBlc3NlbnRpYWwgdG8gYnVpbGRpbmcgYSByZWxpYWJsZSBzb2x1dGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2NyeXB0by9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA3ODpcdGNvbmZpZyBQS0VZXG4gIDc5Olx0XHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwgQVBJIGZvciBwcm90ZWN0ZWQga2V5IGhhbmRsaW5nXCYjMzQ7XG4gIDgwOlx0XHRkZXBlbmRzIG9uIFMzOTBcbiAgODE6XHRcdGhlbHBcbiAgODI6XHRcdCAgV2l0aCB0aGlzIG9wdGlvbiBlbmFibGVkIHRoZSBwa2V5IGtlcm5lbCBtb2R1bGVzIHByb3ZpZGUgYW4gQVBJXG4gIDgzOlx0XHQgIGZvciBjcmVhdGlvbiBhbmQgaGFuZGxpbmcgb2YgcHJvdGVjdGVkIGtleXMuIE90aGVyIHBhcnRzIG9mIHRoZVxuICA4NDpcdFx0ICBrZXJuZWwgb3IgdXNlcnNwYWNlIGFwcGxpY2F0aW9ucyBtYXkgdXNlIHRoZXNlIGZ1bmN0aW9ucy5cbiAgODU6XHRcbiAgODY6XHRcdCAgVGhlIHByb3RlY3RlZCBrZXkgc3VwcG9ydCBpcyBkaXN0cmlidXRlZCBpbnRvOlxuICA4NzpcdFx0ICAtIEEgcGtleSBiYXNlIGFuZCBBUEkga2VybmVsIG1vZHVsZSAocGtleS5rbykgd2hpY2ggb2ZmZXJzIHRoZVxuICA4ODpcdFx0ICAgIGluZnJhc3RydWN0dXJlIGZvciB0aGUgcGtleSBoYW5kbGVyIGtlcm5lbCBtb2R1bGVzLCB0aGUgaW9jdGxcbiAgODk6XHRcdCAgICBhbmQgdGhlIHN5c2ZzIEFQSSBhbmQgdGhlIGluLWtlcm5lbCBBUEkgdG8gdGhlIGNyeXB0byBjaXBoZXJcbiAgOTA6XHRcdCAgICBpbXBsZW1lbnRhdGlvbnMgdXNpbmcgcHJvdGVjdGVkIGtleS5cbiAgOTE6XHRcdCAgLSBBIHBrZXkgcGNrbW8ga2VybmVsIG1vZHVsZSAocGtleS1wY2ttby5rbykgd2hpY2ggaXMgYXV0b21hdGljYWxseVxuICA5MjpcdFx0ICAgIGxvYWRlZCB3aGVuIHBja21vIHN1cHBvcnQgKHRoYXQgaXMgZ2VuZXJhdGlvbiBvZiBwcm90ZWN0ZWQga2V5c1xuICA5MzpcdFx0ICAgIGZyb20gY2xlYXIga2V5IHZhbHVlcykgaXMgYXZhaWxhYmxlLlxuICA5NDpcdFx0ICAtIEEgcGtleSBDQ0Ega2VybmVsIG1vZHVsZSAocGtleS1jY2Eua28pIHdoaWNoIGlzIGF1dG9tYXRpY2FsbHlcbiAgOTU6XHRcdCAgICBsb2FkZWQgd2hlbiBhIENFWCBjcnlwdG8gY2FyZCBpcyBhdmFpbGFibGUuXG4gIDk2Olx0XHQgIC0gQSBwa2V5IEVQMTEga2VybmVsIG1vZHVsZSAocGtleS1lcDExLmtvKSB3aGljaCBpcyBhdXRvbWF0aWNhbGx5XG4gIDk3Olx0XHQgICAgbG9hZGVkIHdoZW4gYSBDRVggY3J5cHRvIGNhcmQgaXMgYXZhaWxhYmxlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTAzOAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoZXNlIGRlcGVuZGVuY2llcywgYXMgaWYgdGhleSB3ZXJlIG15IG93biBpbW1lZGlhdGUgdGhvdWdodHMgYXMgYW4gZXhwZXJ0OgoKKipEZXBlbmRlbmN5IERlZXAgRGl2ZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBzZWUsIGBQS0VZYCAqYWJzb2x1dGVseSogbGVhbnMgb24gYFMzOTBgIOKAkyB0aGF0JiMzOTtzIHRoZSBiYXNlIHJlcXVpcmVtZW50LiBUaGVuLCB0aGluZ3MgZ2V0IGEgYml0IG1vcmUgaW50cmljYXRlIHdpdGggYFBLRVlfVVZgLiBJdCYjMzk7cyBwdWxsaW5nIGluIGJvdGggYFBLRVlgIGFuZCBgUzM5MF9VVl9VQVBJYC4gSXQgbG9va3MgbGlrZSBzb21lIGtpbmQgb2YgVXNlci1Nb2RlIFZhcmlhbnQuIFNvLCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBzaG91bGQgcmVhbGx5IGRpZyBpbnRvIHRoZSBkZXRhaWxzIG9mIGBTMzkwX1VWX1VBUElgIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLiBVbmRlcnN0YW5kaW5nIHRoYXQgb25lIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGludGVycGxheSBvZiB0aGVzZSBvdGhlciBjb21wb25lbnRzLiBUaW1lIHRvIGludmVzdGlnYXRlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUzM5MF9VVl9VQVBJJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jaGFyL0tjb25maWc9NzU9Y29uZmlnIEhNQ19EUlZcbi0tXG5kcml2ZXJzL3MzOTAvY2hhci9LY29uZmlnLTg3LVxuZHJpdmVycy9zMzkwL2NoYXIvS2NvbmZpZzo4ODpjb25maWcgUzM5MF9VVl9VQVBJXG5kcml2ZXJzL3MzOTAvY2hhci9LY29uZmlnLTg5LVx0ZGVmX3RyaXN0YXRlIG1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEzODUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIFMzOTAgVVYgVUFQSSBDb25maWd1cmF0aW9uIE9wdGlvbioqCgpPa2F5LCBzbyBgUzM5MF9VVl9VQVBJYCBpcyBkZWZpbmVkIHdpdGhpbiBgZHJpdmVycy9zMzkwL2NoYXIvS2NvbmZpZ2AuIFRpbWUgdG8gZ2V0IGludG8gdGhlIGRldGFpbHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMsIGZpZ3VyZSBvdXQgd2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBvciBmZWF0dXJlcyBoaW5nZSBvbiB0aGlzIG9uZS4gV2hhdCBvdGhlciBvcHRpb25zIGRvZXMgdGhpcyBlbmFibGUgb3IgZGlzYWJsZT8gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIGEgZGVlcGVyIGRpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NoYXIvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODg6XHRjb25maWcgUzM5MF9VVl9VQVBJXG4gIDg5Olx0XHRkZWZfdHJpc3RhdGUgbVxuICA5MDpcdFx0cHJvbXB0IFwmIzM0O1VsdHJhdmlzb3IgdXNlcnNwYWNlIEFQSVwmIzM0O1xuICA5MTpcdFx0ZGVwZW5kcyBvbiBTMzkwXG4gIDkyOlx0XHRoZWxwXG4gIDkzOlx0XHQgIFNlbGVjdGluZyBleHBvc2VzIHBhcnRzIG9mIHRoZSBVViBpbnRlcmZhY2UgdG8gdXNlcnNwYWNlXG4gIDk0Olx0XHQgIGJ5IHByb3ZpZGluZyBhIG1pc2MgY2hhcmFjdGVyIGRldmljZSBhdCAvZGV2L3V2LlxuICA5NTpcdFx0ICBVc2luZyBJT0NUTHMgb25lIGNhbiBpbnRlcmFjdCB3aXRoIHRoZSBVVi5cbiAgOTY6XHRcdCAgVGhlIGRldmljZSBpcyBvbmx5IGF2YWlsYWJsZSBpZiB0aGUgVWx0cmF2aXNvclxuICA5NzpcdFx0ICBGYWNpbGl0eSAoMTU4KSBpcyBwcmVzZW50LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTcwOQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDExNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUzM5MF9VVl9VQVBJIENvbmZpZ3VyYXRpb24gYW5kIEtleSBWZXJpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgUzM5MF9VVl9VQVBJYCBzaXR1YXRpb24sIGFuZCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGluaGVyZW50bHkgdGllZCB0byB0aGUgYFMzOTBgIGFyY2hpdGVjdHVyZSwgd2hpY2ggbWFrZXMgc2Vuc2UuIFRvIGdldCB0aGlzIGZ1bmN0aW9uYWxpdHkgZW5hYmxlZCwgSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGBQS0VZYCwgYFBLRVlfVVZgLCBhbmQgb2YgY291cnNlIGBTMzkwX1VWX1VBUElgIGFyZSBhbGwgY29ycmVjdGx5IGNvbmZpZ3VyZWQuIEkgc2hvdWxkIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0aGUgZm9sbG93aW5nIGtleSBmdW5jdGlvbnM6IGB1dl9maW5kX3NlY3JldGAsIGB1dl92ZXJpZnlrZXlgLCBhbmQgYGdldF9zZWNyZXRfbWV0YWRhdGFgLgoKQWhhLCBob2xkIG9uIGEgc2Vjb25kLi4uIGlzIGB1dl92ZXJpZnlrZXlgICpzdGF0aWMqIGluIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuY2A/IFRoYXQgY291bGQgaGF2ZSBpbXBsaWNhdGlvbnMgZm9yIGl0cyBhY2Nlc3NpYmlsaXR5IG9yIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgaXMgaW5kZWVkIHRoZSBjYXNlLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgYHV2X3ZlcmlmeWtleWAgaXMsIGluIGZhY3QsIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGEgY3J1Y2lhbCBkZXRhaWwgdGhhdCB3aWxsIGluZmx1ZW5jZSBteSBmdXJ0aGVyIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3V2X3ZlcmlmeWtleSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTE5MD1zdGF0aWMgaW50IHV2X2tleTJwcm90a2V5KGNvbnN0IHN0cnVjdCBwa2V5X2FwcW4gKl9hcHFucyBfX2Fsd2F5c191bnVzZWQsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjMyLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6MjMzOnN0YXRpYyBpbnQgdXZfdmVyaWZ5a2V5KGNvbnN0IHU4ICprZXksIHUzMiBrZXlsZW4sXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yMzQtXHRcdFx0dTE2ICpfY2FyZCBfX2Fsd2F5c191bnVzZWQsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9MjcyPXN0YXRpYyBzdHJ1Y3QgcGtleV9oYW5kbGVyIHV2X2hhbmRsZXIgPSB7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjc3LVx0LmtleV90b19wcm90a2V5XHRcdCA9IHV2X2tleTJwcm90a2V5LFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6Mjc4Olx0LnZlcmlmeV9rZXlcdFx0ID0gdXZfdmVyaWZ5a2V5LFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjc5LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMzczCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyBLZXkgVmVyaWZpY2F0aW9uIGluIHRoZSBzMzkwIENyeXB0byBEcml2ZXIqKgoKUmlnaHQsIHNvIEkmIzM5O20gZm9jdXNpbmcgb24ga2V5IHZlcmlmaWNhdGlvbiB3aXRoaW4gdGhlIHMzOTAgY3J5cHRvIGRyaXZlci4gRmlyc3Qgb2JzZXJ2YXRpb246IHRoZSBgdXZfdmVyaWZ5a2V5YCBmdW5jdGlvbiBpcyBpbmRlZWQgc3RhdGljLCBjb25maXJtaW5nIHRoYXQgaXRzIHNjb3BlIGlzIGxpbWl0ZWQgdG8gaXRzIGNvbXBpbGF0aW9uIHVuaXQuIE5vdywgdGhlIG5leHQgZWxlbWVudCB0byBjb25zaWRlciBpcyB0aGF0IHRoZSBgdXZfZmluZF9zZWNyZXRgIGZ1bmN0aW9uIGlzIGV4cG9ydGVkLCBpbmRpY2F0aW5nIGl0cyB2aXNpYmlsaXR5IGFuZCBwb3RlbnRpYWwgdXNlIG91dHNpZGUgb2YgaXRzIGltbWVkaWF0ZSBkZWZpbmluZyBtb2R1bGUuCgpNeSBwcmltYXJ5IGludGVyZXN0IGxpZXMgaW4gdGhlIGlvY3RsLWJhc2VkIHZlcmlmaWNhdGlvbiBtZXRob2RzIHVzZWQuIFNvLCBJIG5lZWQgdG8gdGhvcm91Z2hseSBleGFtaW5lIGBwa2V5X2lvY3RsX3ZlcmlmeWtleWAsIGBwa2V5X2lvY3RsX3ZlcmlmeWtleTJgLCBhbmQgYHBrZXlfaW9jdGxfdmVyaWZ5cHJvdGtgLiBUaGVzZSBsaWtlbHkgaGFuZGxlIHRoZSBjb3JlIGtleSB2ZXJpZmljYXRpb24gbG9naWMgdGhyb3VnaCB0aGUgaW9jdGwgaW50ZXJmYWNlLCBhbmQgdGhleSBhcmUgbG9jYXRlZCB3aXRoaW4gdGhlIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmNgIGZpbGUuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlc2UgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCBgdXZfdmVyaWZ5a2V5YCBhbmQgYHV2X2ZpbmRfc2VjcmV0YCBpZiBhdCBhbGwsIHRvIGRldGVybWluZSB0aGUgb3ZlcmFsbCBrZXkgdmVyaWZpY2F0aW9uIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGtleV9pb2N0bF92ZXJpZnlrZXkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTI1Mz1zdGF0aWMgaW50IHBrZXlfaW9jdGxfc2tleTJwa2V5KHN0cnVjdCBwa2V5X3NrZXkycGtleSBfX3VzZXIgKnVzcClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMjc1LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjI3NjpzdGF0aWMgaW50IHBrZXlfaW9jdGxfdmVyaWZ5a2V5KHN0cnVjdCBwa2V5X3ZlcmlmeWtleSBfX3VzZXIgKnV2aylcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0yNzcte1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz00NDI9c3RhdGljIGludCBwa2V5X2lvY3RsX2NscjJzZWNrMihzdHJ1Y3QgcGtleV9jbHIyc2VjazIgX191c2VyICp1Y3MpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTUwMi1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzo1MDM6c3RhdGljIGludCBwa2V5X2lvY3RsX3ZlcmlmeWtleTIoc3RydWN0IHBrZXlfdmVyaWZ5a2V5MiBfX3VzZXIgKnV2aylcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy01MDQte1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz03MDM9c3RhdGljIGxvbmcgcGtleV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNzI3LVx0Y2FzZSBQS0VZX1ZFUklGWUtFWTpcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzo3Mjg6XHRcdHJjID0gcGtleV9pb2N0bF92ZXJpZnlrZXkoKHN0cnVjdCBwa2V5X3ZlcmlmeWtleSBfX3VzZXIgKilhcmcpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTcyOS1cdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTc0NS1cdGNhc2UgUEtFWV9WRVJJRllLRVkyOlxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjc0NjpcdFx0cmMgPSBwa2V5X2lvY3RsX3ZlcmlmeWtleTIoKHN0cnVjdCBwa2V5X3ZlcmlmeWtleTIgX191c2VyICopYXJnKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy03NDctXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzIyOAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDEwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBLZXkgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIHRoaXMgUEtleSBkcml2ZXIsIHNwZWNpZmljYWxseSB0byB1bmRlcnN0YW5kIGhvdyBrZXkgdmVyaWZpY2F0aW9uIHdvcmtzLiBGcm9tIHdoYXQgSSBzZWUsIGBwa2V5X2lvY3RsX3ZlcmlmeWtleWAgYW5kIGBwa2V5X2lvY3RsX3ZlcmlmeWtleTJgIGFyZSBkZWZpbmVkIGFzIHN0YXRpYywgc28gdGhleSYjMzk7cmUgcHJvYmFibHkgbm90IHRoZSBtYWluIGVudHJ5IHBvaW50cyBJIG5lZWQgdG8gZm9jdXMgb24uIE15IGF0dGVudGlvbiBuZWVkcyB0byBzaGlmdCB0byB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIG5hbWVseSBgdXZfZmluZF9zZWNyZXRgIGFuZCBgcGtleV91bmxvY2tlZF9pb2N0bGAuIEhvbGQgb24sIGBwa2V5X3VubG9ja2VkX2lvY3RsYC4uLiB0aGF0JiMzOTtzIHRoZSBpb2N0bCBoYW5kbGVyIGZvciBgL2Rldi9wa2V5YCwgaXNuJiMzOTt0IGl0PyBCaW5nby4gVGhhdCYjMzk7cyB0aGUga2V5LiBOb3csIHRvIHRyYWNlIHRoZSBwYXRoLCBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgKmRvaW5nKiB0aGUgdmVyaWZpY2F0aW9uLiBJJiMzOTtsbCBjaGVjayBgcGtleV9oYW5kbGVyX3ZlcmlmeV9rZXlgIGluIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jYC4gVGhhdCBzaG91bGQgYmUgdGhlIHZlcmlmaWNhdGlvbiBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGtleV9oYW5kbGVyX3ZlcmlmeV9rZXkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM9MjU4PUVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX2Nscl90b19rZXkpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNTktXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI2MDppbnQgcGtleV9oYW5kbGVyX3ZlcmlmeV9rZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjYxLVx0XHRcdCAgICB1MTYgKmNhcmQsIHUxNiAqZG9tLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjc2LX1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6Mjc3OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX3ZlcmlmeV9rZXkpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNzgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNzg1CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYSBLZXkgSGFuZGxpbmcgV29ya2Zsb3cqKgoKQWxyaWdodCwgc28gYHBrZXlfaGFuZGxlcl92ZXJpZnlfa2V5YCBpcyBhY3R1YWxseSBleHBvcnRlZCwgd2hpY2ggaXMgYSBrZXkgb2JzZXJ2YXRpb24uIE5vdyB0aGF0IEkga25vdyAqdGhhdCosIGxldCYjMzk7cyBzZWUgaG93IHRoYXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUuIE15IG5leHQgbW92ZSBpcyB0byB6ZXJvIGluIG9uIGBwa2V5X2hhbmRsZXJfa2V5X3RvX3Byb3RrZXlgLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGUga2V5IHJlcHJlc2VudGF0aW9uIHRyYW5zbGF0ZXMgdG8gYSBwcm90ZWN0ZWQga2V5IGlzIGNydWNpYWwgZm9yIGZpZ3VyaW5nIG91dCB0aGUgc2VjdXJpdHkgaW1wbGljYXRpb25zIGhlcmUuIEkgbmVlZCB0byB0cmFjZSB0aGUgZGF0YSBmbG93IGFuZCB1bmRlcnN0YW5kIGlmIHRoaXMgdHJhbnNsYXRpb24gaW50cm9kdWNlcyBhbnkgdnVsbmVyYWJpbGl0aWVzIG9yIHdlYWtuZXNzZXMgaW4gdGhlIG92ZXJhbGwga2V5IG1hbmFnZW1lbnQgcHJvY2Vzcy4gVGhpcyBpcyB3aGVyZSB0aGUgZGV2aWwgaXMgaW4gdGhlIGRldGFpbHMuIEkgc3VzcGVjdCB0aGF0IHRoZSBwb3RlbnRpYWwgc2VjdXJpdHkgZmxhdywgbWF5IGxpZSBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwa2V5X2hhbmRsZXJfa2V5X3RvX3Byb3RrZXkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM9MTU2PUVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX3B1dCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE1Ny1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTU4OmludCBwa2V5X2hhbmRsZXJfa2V5X3RvX3Byb3RrZXkoY29uc3Qgc3RydWN0IHBrZXlfYXBxbiAqYXBxbnMsIHNpemVfdCBucl9hcHFucyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTU5LVx0XHRcdFx0Y29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE3NS19XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjE3NjpFWFBPUlRfU1lNQk9MKHBrZXlfaGFuZGxlcl9rZXlfdG9fcHJvdGtleSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE3Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQyNDMKCQkJCQkJCW91dHB1dDogMTUzCgkJCQkJCQl0aG91Z2h0czogNDAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBTZWNyZXQgSGFuZGxpbmcgUGF0Y2gqKgoKT2theSwgc28gYHBrZXlfaGFuZGxlcl9rZXlfdG9fcHJvdGtleWAgaXMgYWxzbyBleHBvcnRlZCwgdGhhdCYjMzk7cyBnb29kIHRvIG5vdGUuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgY2VudGVyZWQgYXJvdW5kIGB1dl9maW5kX3NlY3JldGAsIHdoaWNoIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGdvdCBtb2RpZmllZCwgYWxvbmcgd2l0aCB0aGUgc3RhdGljIGZ1bmN0aW9uIGBmaW5kX3NlY3JldF9pbl9wYWdlYC4gU28sIGB1dl9maW5kX3NlY3JldGAgaXMgZGVmaW5pdGVseSB0aGUgcHJpbWFyeSBzeW1ib2wgdG8gZm9jdXMgb24sIGJ1dCBJJiMzOTtsbCBrZWVwIGBwa2V5X2hhbmRsZXJfdmVyaWZ5X2tleWAgYW5kIGBwa2V5X2hhbmRsZXJfa2V5X3RvX3Byb3RrZXlgIGluIG1pbmQgYXMgcG90ZW50aWFsbHkgcmVsYXRlZC4gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgdGhlc2UgYXJlIHRoZSBvbmx5IGZ1bmN0aW9ucyB0b3VjaGVkIGJ5IHRoaXMgcGF0Y2gsIHdoaWNoIHJlaW5mb3JjZXMgbXkgaW5pdGlhbCBodW5jaC4KCkhlcmUmIzM5O3MgbXkgc3VtbWFyeSBvZiB0aGUgc2l0dWF0aW9uOiB0aGlzIGlzIHdvcnRoIGZ1enppbmcuIFRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgdXZfZmluZF9zZWNyZXRgIOKAkyBhIGNyaXRpY2FsIG9uZSwgYWN0dWFsbHksIHdoZXJlIGBzdGFydF9pZHhgIHdhcyBiZWluZyB1cGRhdGVkIGluY29ycmVjdGx5LCBhbmQgYGZpbmRfc2VjcmV0X2luX3BhZ2VgIHdhcyB1c2luZyB0aGUgd3JvbmcgbGltaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgczM5MHggdWx0cmF2aXNvciBzZWNyZXQgaGFuZGxpbmcgY29kZSwgYW5kIGl0JiMzOTtzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIHRoZSBgL2Rldi9wa2V5YCBpb2N0bHMuCgpUaGUgcHJpbWFyeSBmb2N1cyBzeW1ib2xzIEkgc2hvdWxkIGtlZXAgaW4gbWluZCBhcmUgYHV2X2ZpbmRfc2VjcmV0YCwgYXMgd2VsbCBhcyBgcGtleV9oYW5kbGVyX3ZlcmlmeV9rZXlgIGFuZCBgcGtleV9oYW5kbGVyX2tleV90b19wcm90a2V5YC4KClRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyB0byBlbmFibGUgZm9yIHRoaXMgZnV6emluZyBhcmUgYFBLRVlgLCBgUEtFWV9VVmAsIGFuZCBgUzM5MF9VVl9VQVBJYC4gTGV0IG1lIGRvdWJsZS1jaGVjay4uLiB5ZXAsIGBQS0VZX1VWYCBpcyB0cmlzdGF0ZS4gU28gdGhhdCYjMzk7cyBjb3JyZWN0LgoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgdGhlIGRlcGVuZGVuY2llczogYFBLRVlgIGRlcGVuZHMgb24gYFMzOTBgLCBgUEtFWV9VVmAgZGVwZW5kcyBvbiBgUEtFWWAgYW5kIGBTMzkwX1VWX1VBUElgLCBhbmQgYFMzOTBfVVZfVUFQSWAgZGVwZW5kcyBvbiBgUzM5MGAuIFRoZXNlIHRocmVlIGNvbmZpZ3VyYXRpb25zIHNlZW0gc3VmZmljaWVudCB0byBlbmFibGUgdGhlIHJlbGV2YW50IGZ1bmN0aW9uYWxpdHksIHNvIHRoYXQgY2hlY2tzIG91dC4gQWxyaWdodCwgdGhpcyBsb29rcyBsaWtlIGEgZ29vZCBwYXRoIHRvIHRha2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQS0VZJiMzNDssCiAgICAmIzM0O1BLRVlfVVYmIzM0OywKICAgICYjMzQ7UzM5MF9VVl9VQVBJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXZfZmluZF9zZWNyZXQmIzM0OywKICAgICYjMzQ7cGtleV9oYW5kbGVyX3ZlcmlmeV9rZXkmIzM0OywKICAgICYjMzQ7cGtleV9oYW5kbGVyX2tleV90b19wcm90a2V5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGB1dl9maW5kX3NlY3JldGAgd2hlcmUgYHN0YXJ0X2lkeGAgd2FzIGluY29ycmVjdGx5IHVwZGF0ZWQgYW5kIGBmaW5kX3NlY3JldF9pbl9wYWdlYCB1c2VkIHRoZSB3cm9uZyBsaW1pdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBzMzkweCB1bHRyYXZpc29yIHNlY3JldCBoYW5kbGluZyBjb2RlLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGAvZGV2L3BrZXlgIGlvY3Rscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UEtFWSYjMzQ7LAogICAgJiMzNDtQS0VZX1VWJiMzNDssCiAgICAmIzM0O1MzOTBfVVZfVUFQSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3V2X2ZpbmRfc2VjcmV0JiMzNDssCiAgICAmIzM0O3BrZXlfaGFuZGxlcl92ZXJpZnlfa2V5JiMzNDssCiAgICAmIzM0O3BrZXlfaGFuZGxlcl9rZXlfdG9fcHJvdGtleSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgdXZfZmluZF9zZWNyZXRgIHdoZXJlIGBzdGFydF9pZHhgIHdhcyBpbmNvcnJlY3RseSB1cGRhdGVkIGFuZCBgZmluZF9zZWNyZXRfaW5fcGFnZWAgdXNlZCB0aGUgd3JvbmcgbGltaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgczM5MHggdWx0cmF2aXNvciBzZWNyZXQgaGFuZGxpbmcgY29kZSwgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBgL2Rldi9wa2V5YCBpb2N0bHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjEzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHR3byBpc3N1ZXM6XG4xLiBBbiBvdXQtb2YtYm91bmRzIHJlYWQgaW4gYGZpbmRfc2VjcmV0X2luX3BhZ2UoKWAuIFRoZSBsb29wIHByZXZpb3VzbHkgdXNlZCBgbGlzdC1cdTAwM2V0b3RhbF9udW1fc2VjcmV0c2AgaW5zdGVhZCBvZiBgbGlzdC1cdTAwM2VudW1fc2Vjcl9zdG9yZWRgLiBTaW5jZSBgbGlzdC1cdTAwM2VzZWNyZXRzYCBpcyBhIGZpeGVkLXNpemUgYXJyYXkgb2YgODUgZWxlbWVudHMsIGlmIGB0b3RhbF9udW1fc2VjcmV0c2AgZXhjZWVkcyA4NSwgdGhlIGxvb3AgcmVhZHMgcGFzdCB0aGUgZW5kIG9mIHRoZSBgbGlzdGAgc3RydWN0dXJlICh3aGljaCBpcyBleGFjdGx5IG9uZSBwYWdlIGluIHNpemUpLiBUaGlzIGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHJlYWQgdGhhdCBpcyByZWxpYWJseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTi5cbjIuIEEgbG9naWMgYnVnIGluIGB1dl9maW5kX3NlY3JldCgpYCB3aGVyZSB0aGUgbG9vcCBjb25kaXRpb24gYHN0YXJ0X2lkeCBcdTAwM2MgbGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHhgIHdhcyBhbHdheXMgZmFsc2UgYmVjYXVzZSBgc3RhcnRfaWR4YCB3YXMgYXNzaWduZWQgYGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4YCBpbW1lZGlhdGVseSBwcmlvciB0byB0aGUgY2hlY2suIFRoZSBmaXggY29ycmVjdGx5IGluaXRpYWxpemVzIGFuZCB1cGRhdGVzIGBzdGFydF9pZHhgIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxvb3AuXG5cblRoZSBgbGlzdGAgc3RydWN0dXJlIHBhc3NlZCB0byBgdXZfZmluZF9zZWNyZXQoKWAgaXMgZnVsbHkgemVyb2VkIGJlZm9yZSB1c2UgKHZpYSBgbWVtc2V0KHV2X2xpc3QsIDAsIHNpemVvZigqdXZfbGlzdCkpYCBpbiBgZ2V0X3NlY3JldF9tZXRhZGF0YSgpYCkuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcywgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZSBpbnRyb2R1Y2VkIG9yIGZpeGVkIGJ5IHRoaXMgcGF0Y2guIFN0YW5kYXJkIEtBU0FOIGlzIHBlcmZlY3RseSBzdWl0ZWQgdG8gY2F0Y2ggdGhlIG91dC1vZi1ib3VuZHMgcmVhZCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1NjdlZmFjODcyZTJjMzNjYTg5NzA4NDQyMDM4ZmI2MTdhZGFjMmZiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTIgMTg6MTI6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3V2LmMgYi9hcmNoL3MzOTAva2VybmVsL3V2LmMKaW5kZXggYTI4NGY5OGQ5NzE2OC4uZTcwYWNhZDA5Y2Q1ZiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC91di5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rZXJuZWwvdXYuYwpAQCAtNzYwLDcgJiM0Mzs3NjAsNyBAQCBzdGF0aWMgaW50IGZpbmRfc2VjcmV0X2luX3BhZ2UoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLAogewogCXUxNiBpOwogCi0JZm9yIChpID0gMDsgaSAmbHQ7IGxpc3QtJmd0O3RvdGFsX251bV9zZWNyZXRzOyBpJiM0MzsmIzQzOykgewomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbGlzdC0mZ3Q7bnVtX3NlY3Jfc3RvcmVkOyBpJiM0MzsmIzQzOykgewogCQlpZiAobWVtY21wKHNlY3JldF9pZCwgbGlzdC0mZ3Q7c2VjcmV0c1tpXS5pZCwgVVZfU0VDUkVUX0lEX0xFTikgPT0gMCkgewogCQkJKnNlY3JldCA9IGxpc3QtJmd0O3NlY3JldHNbaV0uaGRyOwogCQkJcmV0dXJuIDA7CkBAIC03ODEsMTEgJiM0Mzs3ODEsMTQgQEAgaW50IHV2X2ZpbmRfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSwKIAkJICAgc3RydWN0IHV2X3NlY3JldF9saXN0ICpsaXN0LAogCQkgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbV9oZHIgKnNlY3JldCkKIHsKLQl1MTYgc3RhcnRfaWR4ID0gMDsKJiM0MzsJdTE2IHN0YXJ0X2lkeDsKIAl1MTYgbGlzdF9yYzsKIAlpbnQgcmV0OwogCiYjNDM7CWxpc3QtJmd0O25leHRfc2VjcmV0X2lkeCA9IDA7CiYjNDM7CiAJZG8gewomIzQzOwkJc3RhcnRfaWR4ID0gbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4OwogCQl1dl9saXN0X3NlY3JldHMobGlzdCwgc3RhcnRfaWR4LCAmYW1wO2xpc3RfcmMsIE5VTEwpOwogCQlpZiAobGlzdF9yYyAhPSBVVkNfUkNfRVhFQ1VURUQgJmFtcDsmYW1wOyBsaXN0X3JjICE9IFVWQ19SQ19NT1JFX0RBVEEpIHsKIAkJCWlmIChsaXN0X3JjID09IFVWQ19SQ19JTlZfQ01EKQpAQCAtNzk2LDcgJiM0Mzs3OTksNiBAQCBpbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLAogCQlyZXQgPSBmaW5kX3NlY3JldF9pbl9wYWdlKHNlY3JldF9pZCwgbGlzdCwgc2VjcmV0KTsKIAkJaWYgKHJldCA9PSAwKQogCQkJcmV0dXJuIHJldDsKLQkJc3RhcnRfaWR4ID0gbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4OwogCX0gd2hpbGUgKGxpc3RfcmMgPT0gVVZDX1JDX01PUkVfREFUQSAmYW1wOyZhbXA7IHN0YXJ0X2lkeCAmbHQ7IGxpc3QtJmd0O25leHRfc2VjcmV0X2lkeCk7CiAKIAlyZXR1cm4gLUVOT0VOVDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNzIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUGF0Y2ggdG8gYGFyY2gvczM5MC9rZXJuZWwvdXYuY2AqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBhcmNoL3MzOTAva2VybmVsL3V2LmNgLCBhbmQgaXQgYXBwZWFycyB0byBiZSBmb2N1c2VkIG9uIHNvbWUgbW9kaWZpY2F0aW9ucyByZWxhdGVkIHRvIHNlY3JldCBoYW5kbGluZyB3aXRoaW4gdGhhdCBhcmNoaXRlY3R1cmUuIFNwZWNpZmljYWxseSwgSSBzZWUgY2hhbmdlcyB3aXRoaW4gdGhlIGBmaW5kX3NlY3JldF9pbl9wYWdlYCBhbmQgYHV2X2ZpbmRfc2VjcmV0YCBmdW5jdGlvbnMuCgpGaXJzdCwgdGhlIGxvb3AgYm91bmQgaW4gYGZpbmRfc2VjcmV0X2luX3BhZ2VgIGhhcyBiZWVuIGFkanVzdGVkLiBJdCB1c2VkIHRvIGl0ZXJhdGUgdXAgdG8gYGxpc3QtJmd0O3RvdGFsX251bV9zZWNyZXRzYCwgYnV0IG5vdyBpdCBzZWVtcyB0byBzdG9wIGF0IGBsaXN0LSZndDtudW1fc2Vjcl9zdG9yZWRgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nOyBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRob3NlIHR3byBmaWVsZHMgd2l0aGluIHRoZSBgc3RydWN0IHV2X3NlY3JldF9saXN0YCBzdHJ1Y3R1cmUgdG8gZ3Jhc3AgdGhlIHNpZ25pZmljYW5jZSBvZiB0aGlzIGNoYW5nZS4gSXMgdGhpcyBhYm91dCBvcHRpbWl6YXRpb24sIG9yIGlzIHRoZXJlIGEgZnVuY3Rpb25hbCByZWFzb24/IFBlcmhhcHMgYG51bV9zZWNyX3N0b3JlZGAgcmVwcmVzZW50cyB0aGUgdmFsaWQgZW50cmllcywgd2hpbGUgYHRvdGFsX251bV9zZWNyZXRzYCBpcyBhIGJ1ZmZlciBzaXplPwoKVGhlbiwgaW4gYHV2X2ZpbmRfc2VjcmV0YCwgSSBub3RlIGEgY2hhbmdlIGluIGhvdyBgbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4YCBhbmQgYHN0YXJ0X2lkeGAgYXJlIGhhbmRsZWQuIFByZXZpb3VzbHksIGBzdGFydF9pZHhgIHdhcyBpbml0aWFsaXplZCB0byAwIGFuZCBhZGp1c3RlZCBhZnRlciB0aGUgbG9vcC4gTm93LCB0aGUgcGF0Y2ggc2V0cyBgbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4YCB0byAwICpiZWZvcmUqIHRoZSBsb29wLCBhbmQgd2l0aGluIHRoZSBsb29wLCBgc3RhcnRfaWR4YCBpcyBzZXQgdG8gYGxpc3QtJmd0O25leHRfc2VjcmV0X2lkeGAuIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIG9yIGEgc2hpZnQgaW4gaG93IHRoZSBzZWFyY2ggcmVzdW1lcyBhY3Jvc3MgY2FsbHMsIHJhdGhlciB0aGFuIHN0YXJ0aW5nIGZyb20gdGhlIGJlZ2lubmluZyBlYWNoIHRpbWUuIExldCBtZSBzZWUuLi4gSSBzdXNwZWN0IHRoZSBjb2RlIGlzIHVzaW5nIGBuZXh0X3NlY3JldF9pZHhgIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGN1cnJlbnQgc2VhcmNoIHBvc2l0aW9uLCBzbyBpdCBjYW4gYmUgcmVzdW1lZCBsYXRlci4KClRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhpcywgSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSByZWxldmFudCBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgYGxpc3RgIGlzIGEgYHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqYCwgYW5kIEkgc2VlIHRoYXQgYHV2X2xpc3Rfc2VjcmV0c2AgaXMgY2FsbGVkIHdpdGggdGhpcyBgbGlzdGAsIGFsb25nIHdpdGggYHN0YXJ0X2lkeGAsIGEgcmV0dXJuIGNvZGUgYCZhbXA7bGlzdF9yY2AsIGFuZCBgTlVMTGAuIFRoaXMgZnVuY3Rpb24gc2VlbXMgdG8gYmUgaW50aW1hdGVseSBpbnZvbHZlZC4gVGhlIGBmaW5kX3NlY3JldF9pbl9wYWdlYCBmdW5jdGlvbiB0aGVuIGFwcGVhcnMgdG8gYmUgc2VhcmNoaW5nIHRoZSBgbGlzdC0mZ3Q7c2VjcmV0c2AgZm9yIGEgc3BlY2lmaWMgYHNlY3JldF9pZGAuIFRoaXMgaXMgbXkgY2x1ZSBhYm91dCB0aGUgd2F5IHRoZSBkYXRhIHN0cnVjdHVyZXMgYXJlIGRlc2lnbmVkIGFuZCBmdW5jdGlvbiB3aXRoIGVhY2ggb3RoZXIuCgpPa2F5LCB0aW1lIHRvIGNyYWNrIG9wZW4gYGFyY2gvczM5MC9rZXJuZWwvdXYuY2AgYW5kIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgdXZfbGlzdF9zZWNyZXRzYC4gTGV0JiMzOTtzIHNlZSBob3cgdGhlc2UgcGllY2VzIGZpdCB0b2dldGhlciBhbmQgd2hhdCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMgcmVhbGx5IGFyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXZfbGlzdF9zZWNyZXRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2tlcm5lbC91di5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rZXJuZWwvdXYuYz03ODA9aW50IHV2X2ZpbmRfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzkxLVx0XHRzdGFydF9pZHggPSBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeDtcbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo3OTI6XHRcdHV2X2xpc3Rfc2VjcmV0cyhsaXN0LCBzdGFydF9pZHgsIFx1MDAyNmxpc3RfcmMsIE5VTEwpO1xuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc5My1cdFx0aWYgKGxpc3RfcmMgIT0gVVZDX1JDX0VYRUNVVEVEIFx1MDAyNlx1MDAyNiBsaXN0X3JjICE9IFVWQ19SQ19NT1JFX0RBVEEpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM3MgoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIGB1dl9saXN0X3NlY3JldHNgKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIFRoZSBmaXJzdCBvcmRlciBvZiBidXNpbmVzcyBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgcHJlY2lzZWx5IHdoYXQgYHV2X2xpc3Rfc2VjcmV0c2AgKmlzKi4gSSBuZWVkIHRoZSBkZWZpbml0aXZlIGRlZmluaXRpb24uIEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3MgcGFydCBvZiB0aGUgYnJvYWRlciBVbHRyYXZpb2xldCBmcmFtZXdvcmssIHNvIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGRvY3VtZW50YXRpb24gb3Igc291cmNlIGNvZGUgaWYgdGhhdCYjMzk7cyBhdmFpbGFibGUuIFRoZSBuYW1lIGl0c2VsZiBzdWdnZXN0cyBpdCYjMzk7cyBhIGZ1bmN0aW9uIG9yIG1ldGhvZCByZWxhdGVkIHRvIGxpc3Rpbmcgc2VjcmV0cyDigJMgY291bGQgYmUgY3JlZGVudGlhbHMsIEFQSSBrZXlzLCBwcml2YXRlIGRhdGEsIGFueXRoaW5nIHNlbnNpdGl2ZSwgcmVhbGx5LiBNeSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFyZTogV2hhdCYjMzk7cyB0aGUgY29udGV4dD8gV2hhdCBzZWNyZXRzIGFyZSB3ZSB0YWxraW5nIGFib3V0PyBXaGVyZSBhcmUgdGhlc2Ugc2VjcmV0cyBzdG9yZWQ/IERvZXMgdGhpcyBmdW5jdGlvbiBzdXBwb3J0IGFueSBmaWx0ZXJpbmcgb3Igc2VhcmNoIGNyaXRlcmlhPyBJcyBpdCBhIHJlYWQtb25seSBvcGVyYXRpb24sIG9yIGRvZXMgaXQgYWxzbyBoYXZlIHRoZSBjYXBhY2l0eSB0byBtb2RpZnkgdGhlIHNlY3JldHMgaW4gc29tZSBtYW5uZXI/IEkgbmVlZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHB1cnBvc2UsIGlucHV0cywgb3V0cHV0cywgYW5kIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIGJlZm9yZSBJIGNhbiBhc3Nlc3MgaXRzIGltcGxpY2F0aW9ucy4gVWx0aW1hdGVseSwgYSBwcm9wZXIgdW5kZXJzdGFuZGluZyBvZiBpdCYjMzk7cyBkZWZpbml0aW9uIGlzIGNydWNpYWwgZm9yIGRldGVybWluaW5nIGhvdyBpdCBmaXRzIGludG8gdGhlIGdyZWF0ZXIgc3lzdGVtIGFuZCBpdHMgc2VjdXJpdHkgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1dl9saXN0X3NlY3JldHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg9NDczPXN0YXRpYyBpbmxpbmUgaW50IHV2X2NtZF9ub2RhdGEodTY0IGhhbmRsZSwgdTE2IGNtZCwgdTE2ICpyYywgdTE2ICpycmMpXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNDg5LS8qKlxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6NDkwOiAqIHV2X2xpc3Rfc2VjcmV0cygpIC0gRG8gYSBMaXN0IFNlY3JldHMgVVZDLlxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNDkxLSAqXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNTExLSAqL1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6NTEyOnN0YXRpYyBpbmxpbmUgaW50IHV2X2xpc3Rfc2VjcmV0cyhzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmJ1ZiwgdTE2IHN0YXJ0X2lkeCxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTUxMy1cdFx0XHRcdCAgdTE2ICpyYywgdTE2ICpycmMpXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC91di5jPTc4MD1pbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03OTEtXHRcdHN0YXJ0X2lkeCA9IGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4O1xuYXJjaC9zMzkwL2tlcm5lbC91di5jOjc5MjpcdFx0dXZfbGlzdF9zZWNyZXRzKGxpc3QsIHN0YXJ0X2lkeCwgXHUwMDI2bGlzdF9yYywgTlVMTCk7XG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzkzLVx0XHRpZiAobGlzdF9yYyAhPSBVVkNfUkNfRVhFQ1VURUQgXHUwMDI2XHUwMDI2IGxpc3RfcmMgIT0gVVZDX1JDX01PUkVfREFUQSkge1xuLS1cbmRyaXZlcnMvczM5MC9jaGFyL3V2ZGV2aWNlLmM9MzA3PXN0YXRpYyBpbnQgdXZpb19nZXRfbGlzdCh2b2lkICp6cGFnZSwgc3RydWN0IHV2aW9faW9jdGxfY2IgKnV2X2lvY3RsKVxuLS1cbmRyaXZlcnMvczM5MC9jaGFyL3V2ZGV2aWNlLmMtMzE2LVx0ZG8ge1xuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYzozMTc6XHRcdHV2X2xpc3Rfc2VjcmV0cyhsaXN0LCBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeCwgXHUwMDI2dXZfaW9jdGwtXHUwMDNldXZfcmMsXG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jLTMxOC1cdFx0XHRcdFx1MDAyNnV2X2lvY3RsLVx1MDAzZXV2X3JyYyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyMTUKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipEaXZpbmcgaW50byB0aGUgUzM5MCBVViBBcmNoaXRlY3R1cmUqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGB1dl9saXN0X3NlY3JldHNgIGZ1bmN0aW9uLCBhbmQgbXkgaW1tZWRpYXRlIHRhcmdldCBpcyB0aGUgYGFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oYCBoZWFkZXIgZmlsZS4gSSBrbm93IHRoaXMgaXMgd2hlcmUgdGhlIGxvdy1sZXZlbCBkZXRhaWxzIG9mIHRoZSBVViAoVW5pdmVyc2FsIFZpcnR1YWxpemF0aW9uKSBhcmNoaXRlY3R1cmUgb24gUzM5MCBhcmUgZ29pbmcgdG8gYmUgZGVmaW5lZC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzLCBmdW5jdGlvbiBwcm90b3R5cGVzLCBhbmQgcG90ZW50aWFsbHkgc29tZSBpbmxpbmUgYXNzZW1ibHkgcmVsYXRlZCB0byBob3cgc2VjcmV0cyBhcmUgbWFuYWdlZCB3aXRoaW4gdGhhdCBzcGVjaWZpYyBlbnZpcm9ubWVudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0mIzM5O3Mgc2VjdXJpdHkgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkIGluIHRoaXMgcGFydGljdWxhciBjb250ZXh0LiBUaGlzIGZpbGUgaXMgcHJvYmFibHkgdGhlIGtleSB0byB1bmNvdmVyaW5nIHRoZSBtZWNoYW5pY3Mgb2Ygc2VjcmV0IGhhbmRsaW5nIGF0IGEgZnVuZGFtZW50YWwgbGV2ZWwuIEkmIzM5O20gaG9waW5nIGl0JiMzOTtzIHdlbGwtZG9jdW1lbnRlZC4uLiBidXQgSSYjMzk7bSBwcmVwYXJlZCBmb3IgYSBkZWVwIGRpdmUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ5MDpcdCAqIHV2X2xpc3Rfc2VjcmV0cygpIC0gRG8gYSBMaXN0IFNlY3JldHMgVVZDLlxuIDQ5MTpcdCAqXG4gNDkyOlx0ICogQGJ1ZjogQnVmZmVyIHRvIHdyaXRlIGxpc3QgaW50bzsgc2l6ZSBvZiBvbmUgcGFnZS5cbiA0OTM6XHQgKiBAc3RhcnRfaWR4OiBUaGUgc21hbGxlc3QgaW5kZXggdGhhdCBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIGxpc3QuXG4gNDk0Olx0ICpcdFx0Rm9yIHRoZSBmaXN0IGludm9jYXRpb24gdXNlIDAuXG4gNDk1Olx0ICogQHJjOiBQb2ludGVyIHRvIHN0b3JlIHRoZSByZXR1cm4gY29kZSBvciBOVUxMLlxuIDQ5NjpcdCAqIEBycmM6IFBvaW50ZXIgdG8gc3RvcmUgdGhlIHJldHVybiByZWFzb24gY29kZSBvciBOVUxMLlxuIDQ5NzpcdCAqXG4gNDk4Olx0ICogVGhpcyBmdW5jdGlvbiBjYWxscyB0aGUgTGlzdCBTZWNyZXRzIFVWQy4gVGhlIHJlc3VsdCBpcyB3cml0dGVuIGludG8gYGJ1ZmAsXG4gNDk5Olx0ICogdGhhdCBuZWVkcyB0byBiZSBhdCBsZWFzdCBvbmUgcGFnZSBvZiB3cml0YWJsZSBtZW1vcnkuXG4gNTAwOlx0ICogYGJ1ZmAgY29uc2lzdHMgb2Y6XG4gNTAxOlx0ICogKiAlc3RydWN0IHV2X3NlY3JldF9saXN0X2hkclxuIDUwMjpcdCAqICogJXN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtIChtdWx0aXBsZSlcbiA1MDM6XHQgKlxuIDUwNDpcdCAqIEZvciBgc3RhcnRfaWR4YCB1c2UgXzBfIGZvciB0aGUgZmlyc3QgY2FsbC4gSWYgdGhlcmUgYXJlIG1vcmUgc2VjcmV0cyBhdmFpbGFibGVcbiA1MDU6XHQgKiBidXQgY291bGQgbm90IGZpdCBpbnRvIHRoZSBwYWdlIHRoZW4gYHJjYCBpcyBgVVZDX1JDX01PUkVfREFUQWAuXG4gNTA2Olx0ICogSW4gdGhpcyBjYXNlIHVzZSBgdXZfc2VjcmV0X2xpc3RfaGRyLm5leHRfc2VjcmV0X2lkeGAgZm9yIGBzdGFydF9pZHhgLlxuIDUwNzpcdCAqXG4gNTA4Olx0ICogQ29udGV4dDogbWlnaHQgc2xlZXAuXG4gNTA5Olx0ICpcbiA1MTA6XHQgKiBSZXR1cm46IFRoZSBVVkMgY29uZGl0aW9uIGNvZGUuXG4gNTExOlx0ICovXG4gNTEyOlx0c3RhdGljIGlubGluZSBpbnQgdXZfbGlzdF9zZWNyZXRzKHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqYnVmLCB1MTYgc3RhcnRfaWR4LFxuIDUxMzpcdFx0XHRcdFx0ICB1MTYgKnJjLCB1MTYgKnJyYylcbiA1MTQ6XHR7XG4gNTE1Olx0XHRzdHJ1Y3QgdXZfY2JfbGlzdF9zZWNyZXRzIHV2Y2IgPSB7XG4gNTE2Olx0XHRcdC5oZWFkZXIubGVuID0gc2l6ZW9mKHV2Y2IpLFxuIDUxNzpcdFx0XHQuaGVhZGVyLmNtZCA9IFVWQ19DTURfTElTVF9TRUNSRVRTLFxuIDUxODpcdFx0XHQuc3RhcnRfaWR4ID0gc3RhcnRfaWR4LFxuIDUxOTpcdFx0XHQubGlzdF9hZGRyID0gKHU2NClidWYsXG4gNTIwOlx0XHR9O1xuIDUyMTpcdFx0aW50IGNjID0gdXZfY2FsbF9zY2hlZCgwLCAodTY0KVx1MDAyNnV2Y2IpO1xuIDUyMjpcdFxuIDUyMzpcdFx0aWYgKHJjKVxuIDUyNDpcdFx0XHQqcmMgPSB1dmNiLmhlYWRlci5yYztcbiA1MjU6XHRcdGlmIChycmMpXG4gNTI2Olx0XHRcdCpycmMgPSB1dmNiLmhlYWRlci5ycmM7XG4gNTI3Olx0XG4gNTI4Olx0XHRyZXR1cm4gY2M7XG4gNTI5Olx0fVxuIDUzMDpcdFxuIDUzMTpcdHN0cnVjdCB1dl9pbmZvIHtcbiA1MzI6XHRcdHVuc2lnbmVkIGxvbmcgaW5zdF9jYWxsc19saXN0WzRdO1xuIDUzMzpcdFx0dW5zaWduZWQgbG9uZyB1dl9iYXNlX3N0b3JfbGVuO1xuIDUzNDpcdFx0dW5zaWduZWQgbG9uZyBndWVzdF9iYXNlX3N0b3JfbGVuO1xuIDUzNTpcdFx0dW5zaWduZWQgbG9uZyBndWVzdF92aXJ0X2Jhc2Vfc3Rvcl9sZW47XG4gNTM2Olx0XHR1bnNpZ25lZCBsb25nIGd1ZXN0X3ZpcnRfdmFyX3N0b3JfbGVuO1xuIDUzNzpcdFx0dW5zaWduZWQgbG9uZyBndWVzdF9jcHVfc3Rvcl9sZW47XG4gNTM4Olx0XHR1bnNpZ25lZCBsb25nIG1heF9zZWNfc3Rvcl9hZGRyO1xuIDUzOTpcdFx0dW5zaWduZWQgaW50IG1heF9udW1fc2VjX2NvbmY7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMjkKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNlY3JldHMgTGlzdGluZyBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgdXZfbGlzdF9zZWNyZXRzYCBmdW5jdGlvbiwgYW5kIGl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQgb24gdGhlIHN1cmZhY2UuIEl0JiMzOTtzIGVzc2VudGlhbGx5IGNhbGxpbmcgYSBoeXBlcnZpc29yIGNhbGwsIGEgVVZDLCB0byBmZXRjaCBhIGxpc3Qgb2Ygc2VjcmV0cy4gVGhlIFVWQywgb2YgY291cnNlLCBpcyB0aGUgbG93LWxldmVsIGludGVyZmFjZSB0aGF0IGRvZXMgdGhlIGhlYXZ5IGxpZnRpbmcuIFRoZSByZXN1bHRzIG9mIHRoYXQgY2FsbCBhcmUgdGhlbiB3cml0dGVuIGludG8gdGhpcyBgYnVmYC4gTm93LCB0aGlzIGBidWZgIHNlZW1zIGludGVyZXN0aW5nLCBpdCYjMzk7cyBhbGxvY2F0ZWQgYXMgYSBwYWdlIG9mIG1lbW9yeSwgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIHBvdGVudGlhbCBzaXplIGNvbnNpZGVyYXRpb25zLiBBbmQgaXQmIzM5O3MgYWxzbyB0eXBlIGBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RgLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoYXQgc3RydWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZm9ybWF0IG9mIHRoYXQgZGF0YS4gSSB3b25kZXIgd2hhdCBmaWVsZHMgYXJlIGluY2x1ZGVkLCBob3cgdGhlIGxpc3QgaXMgb3JnYW5pemVkLCBhbmQgd2hhdCBjb25zaWRlcmF0aW9ucyB3ZXJlIG1hZGUgZm9yIHRoZSB2YXJpb3VzIHNpemVzIGFuZCBzZWNyZXQgcHJvcGVydGllcy4gVGltZSB0byBkaXZlIGludG8gdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCB1dl9zZWNyZXRfbGlzdGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCB1dl9zZWNyZXRfbGlzdCAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg9NDExPXN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtIHtcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC00MjMtICovXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaDo0MjQ6c3RydWN0IHV2X3NlY3JldF9saXN0IHtcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTQyNS1cdHUxNiBudW1fc2Vjcl9zdG9yZWQ7XG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg9NDczPXN0YXRpYyBpbmxpbmUgaW50IHV2X2NtZF9ub2RhdGEodTY0IGhhbmRsZSwgdTE2IGNtZCwgdTE2ICpyYywgdTE2ICpycmMpXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNTExLSAqL1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6NTEyOnN0YXRpYyBpbmxpbmUgaW50IHV2X2xpc3Rfc2VjcmV0cyhzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmJ1ZiwgdTE2IHN0YXJ0X2lkeCxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTUxMy1cdFx0XHRcdCAgdTE2ICpyYywgdTE2ICpycmMpXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg9NjE4PWludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaDo2MTk6XHRcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqbGlzdCxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTYyMC1cdFx0ICAgc3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW1faGRyICpzZWNyZXQpO1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYz03NTc9c3RhdGljIGludCBmaW5kX3NlY3JldF9pbl9wYWdlKGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo3NTg6XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqbGlzdCxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03NTktXHRcdFx0ICAgICAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtX2hkciAqc2VjcmV0KVxuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYz03ODA9aW50IHV2X2ZpbmRfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo3ODE6XHRcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqbGlzdCxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03ODItXHRcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtX2hkciAqc2VjcmV0KVxuLS1cbmRyaXZlcnMvczM5MC9jaGFyL3V2ZGV2aWNlLmM9MzA3PXN0YXRpYyBpbnQgdXZpb19nZXRfbGlzdCh2b2lkICp6cGFnZSwgc3RydWN0IHV2aW9faW9jdGxfY2IgKnV2X2lvY3RsKVxuLS1cbmRyaXZlcnMvczM5MC9jaGFyL3V2ZGV2aWNlLmMtMzEwLVx0dTggX191c2VyICp1c2VyX2J1ZiA9ICh1OCBfX3VzZXIgKil1dl9pb2N0bC1cdTAwM2Vhcmd1bWVudF9hZGRyO1xuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYzozMTE6XHRzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QgPSB6cGFnZTtcbmRyaXZlcnMvczM5MC9jaGFyL3V2ZGV2aWNlLmMtMzEyLVx0dTE2IG51bV9zZWNyZXRzX3N0b3JlZCA9IDA7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9MjA9TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O3MzOTAgcHJvdGVjdGVkIGtleSBVViBoYW5kbGVyXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yNC0gKi9cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjI1OnN0YXRpYyBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKnV2X2xpc3Q7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yNi1zdGF0aWMgREVGSU5FX01VVEVYKHV2X2xpc3RfbXV0ZXgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDkzCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOgoKKipEaXZpbmcgaW50byB0aGUgUzM5MCBVViBTZWNyZXQgTGlzdCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gaXQuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYHN0cnVjdCB1dl9zZWNyZXRfbGlzdGAuIEl0JiMzOTtzIGRlZmluZWQgd2l0aGluIGBhcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaGAuIEdpdmVuIG15IGJhY2tncm91bmQgd2l0aCBzMzkwIGFyY2hpdGVjdHVyZSBhbmQgdGhlIFVWIChVbHRyYVZpb2xldCkgcGxhdGZvcm0sIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgc3RydWN0dXJlIHRvIGhvbGQgZGV0YWlscyByZWxldmFudCB0byBzZWN1cmUgbWVtb3J5IGFjY2VzcyBvciBjb25maWRlbnRpYWwgZGF0YSBtYW5hZ2VtZW50IHdpdGhpbiB0aGF0IHNwZWNpZmljIGVudmlyb25tZW50LiBJIGFudGljaXBhdGUgdGhpcyB3aWxsIGJlIGEgY3JpdGljYWwgc3RydWN0dXJlIGZvciBhbnkgY29kZSBkZWFsaW5nIHdpdGggc2Vuc2l0aXZlIGluZm9ybWF0aW9uIG9yIHBlcmhhcHMgaW52b2x2ZWQgaW4gZXN0YWJsaXNoaW5nIHNlY3VyZSBleGVjdXRpb24gY29udGV4dHMuIEkmIzM5O20ga2VlbiB0byBzZWUgaWYgaXQgdXRpbGl6ZXMgYW55IHVuaXF1ZSBzMzkwLXNwZWNpZmljIG1lbW9yeSBwcm90ZWN0aW9uIG1lY2hhbmlzbXMuIFRpbWUgdG8gY2hlY2sgaXQgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDExLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MTE6XHRzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbSB7XG4gNDEyOlx0XHRzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbV9oZHIgaGRyO1xuIDQxMzpcdFx0dTY0IHJlc2VydmVyZDA4O1xuIDQxNDpcdFx0dTggaWRbVVZfU0VDUkVUX0lEX0xFTl07XG4gNDE1Olx0fSBfX3BhY2tlZCBfX2FsaWduZWQoOCk7XG4gNDE2Olx0XG4gNDE3Olx0LyoqXG4gNDE4Olx0ICogdXZfc2VjcmV0X2xpc3QgLSBVViBzZWNyZXQtbWV0YWRhdGEgbGlzdC5cbiA0MTk6XHQgKiBAbnVtX3NlY3Jfc3RvcmVkOiBOdW1iZXIgb2Ygc2VjcmV0cyBzdG9yZWQgaW4gdGhpcyBsaXN0LlxuIDQyMDpcdCAqIEB0b3RhbF9udW1fc2VjcmV0czogTnVtYmVyIG9mIHNlY3JldHMgc3RvcmVkIGluIHRoZSBVViBmb3IgdGhpcyBndWVzdC5cbiA0MjE6XHQgKiBAbmV4dF9zZWNyZXRfaWR4OiBwb3NpdGl2ZSBudW1iZXIgaWYgdGhlcmUgYXJlIG1vcmUgc2VjcmV0cyBhdmFpbGFibGUgb3IgemVyby5cbiA0MjI6XHQgKiBAc2VjcmV0czogVXAgdG8gODUgVVYtc2VjcmV0IG1ldGFkYXRhIGVudHJpZXMuXG4gNDIzOlx0ICovXG4gNDI0Olx0c3RydWN0IHV2X3NlY3JldF9saXN0IHtcbiA0MjU6XHRcdHUxNiBudW1fc2Vjcl9zdG9yZWQ7XG4gNDI2Olx0XHR1MTYgdG90YWxfbnVtX3NlY3JldHM7XG4gNDI3Olx0XHR1MTYgbmV4dF9zZWNyZXRfaWR4O1xuIDQyODpcdFx0dTE2IHJlc2VydmVkXzA2O1xuIDQyOTpcdFx0dTY0IHJlc2VydmVkXzA4O1xuIDQzMDpcdFx0c3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW0gc2VjcmV0c1s4NV07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwODgKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxMzczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQnVnIEZpeGVzKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIGlzc3VlIGluIGBmaW5kX3NlY3JldF9pbl9wYWdlYC4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzIHVzaW5nIGB0b3RhbF9udW1fc2VjcmV0c2AgaW5zdGVhZCBvZiBgbnVtX3NlY3Jfc3RvcmVkYCBpbiB0aGUgbG9vcCBjb25kaXRpb24uIE5vdywgYHRvdGFsX251bV9zZWNyZXRzYCByZXByZXNlbnRzIHRoZSB0b3RhbCBzZWNyZXRzLCB3aGljaCBjb3VsZCBiZSBtb3JlIHRoYW4gdGhlIDg1LWVsZW1lbnQgYXJyYXkgYGxpc3QtJmd0O3NlY3JldHNgIGNhbiBhY3R1YWxseSBob2xkIGZvciB0aGUgY3VycmVudCBwYWdlLiBJZiBgdG90YWxfbnVtX3NlY3JldHNgIGV4Y2VlZHMgODUsIHRoaXMgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIHdoZW4gaXRlcmF0aW5nIHRocm91Z2ggYGxpc3QtJmd0O3NlY3JldHNgLiBLQVNBTiB3b3VsZCBkZWZpbml0ZWx5IGNhdGNoIHRoYXQsIHdoaWNoIGlzIGdvb2QuCgpOZXh0LCBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBjaGFuZ2UgaW4gYHV2X2ZpbmRfc2VjcmV0YC4gVGhlIG9yaWdpbmFsIGxvb3AgY29uZGl0aW9uIHdhcyBmdW5kYW1lbnRhbGx5IGZsYXdlZC4gSXQgd2FzIHRha2luZyBgc3RhcnRfaWR4YCBhbmQgc2V0dGluZyBpdCB0byBgbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4YCBpbW1lZGlhdGVseSBiZWZvcmUgY29tcGFyaW5nIHRoZW0gaW4gdGhlIGxvb3AgY29uZGl0aW9uLiBUaGF0IG1ha2VzIHRoZSBjb25kaXRpb24gYHN0YXJ0X2lkeCAmbHQ7IGxpc3QtJmd0O25leHRfc2VjcmV0X2lkeGAgZWZmZWN0aXZlbHkgYHggJmx0OyB4YCwgd2hpY2ggaXMgYWx3YXlzIGZhbHNlLCByaWdodD8gU28gdGhlIGxvb3Agd2FzIGd1YXJhbnRlZWQgdG8gZXhlY3V0ZSBvbmx5IG9uY2UuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGxvZ2ljIGVycm9yLCB2ZXJ5IGVhc2lseSBtaXNzZWQuIFRoZSBmaXggaW5pdGlhbGl6ZXMgYGxpc3QtJmd0O25leHRfc2VjcmV0X2lkeGAgdG8gYDBgIGFuZCB0aGVuIHVzZXMgdGhlIGluY3JlbWVudGVkIHZhbHVlIGluIHRoZSBsb29wIGNvbmRpdGlvbiwgc28gdGhlIGxvb3AgZXhlY3V0ZXMgY29ycmVjdGx5LgoKVGhlIGNyaXRpY2FsIHRoaW5nIEkmIzM5O20gYXNzZXNzaW5nIGlzIGlmIHRoaXMgaXMgcmVsYXRlZCB0byBLTVNBTiYjMzk7cyBkb21haW4gb2YgdW5pbml0aWFsaXplZCByZWFkcy4gTmVpdGhlciBvZiB0aGVzZSBmaXhlcyAqZGlyZWN0bHkqIGRlYWxzIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBmaXJzdCBpcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQg4oCTIEtBU0FOIGRvZXMgdGhhdC4gVGhlIHNlY29uZCBpcyBhIGxvZ2ljIGVycm9yIHRoYXQgYnJlYWtzIHRoZSBsb29wIC0gdGhhdCBoYXMgdG8gYmUgZml4ZWQuIEl04oCZcyBhbiBpbnRlcmVzdGluZyBidWcsIGJ1dCBpdCBkb2VzIG5vdCBzZWVtIEtNU0FOIHNwZWNpZmljLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHdoZXJlIGB1dl9maW5kX3NlY3JldGAgaXMgY2FsbGVkIHRvIHJ1bGUgb3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXZfZmluZF9zZWNyZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg9NjEzPXN0YXRpYyBpbmxpbmUgaW50IHV2X3JlbW92ZV9zaGFyZWQodW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTYxNy1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oOjYxODppbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNjE5LVx0XHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QsXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC91di5jPTc1Nz1zdGF0aWMgaW50IGZpbmRfc2VjcmV0X2luX3BhZ2UoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03NzItLyoqXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6NzczOiAqIHV2X2ZpbmRfc2VjcmV0KCkgLSBzZWFyY2ggc2VjcmV0IG1ldGFkYXRhIGZvciBhIGdpdmVuIHNlY3JldCBpZC5cbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03NzQtICogQHNlY3JldF9pZDogc2VhcmNoIHBhdHRlcm4uXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc3OS0gKi9cbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo3ODA6aW50IHV2X2ZpbmRfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03ODEtXHRcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqbGlzdCxcbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtODA1LX1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo4MDY6RVhQT1JUX1NZTUJPTF9HUEwodXZfZmluZF9zZWNyZXQpO1xuYXJjaC9zMzkwL2tlcm5lbC91di5jLTgwNy1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0yMD1NT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7czM5MCBwcm90ZWN0ZWQga2V5IFVWIGhhbmRsZXJcJiMzNDspO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTIyLS8qXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoyMzogKiBPbmUgcHJlLWFsbG9jYXRlZCB1dl9zZWNyZXRfbGlzdCBmb3IgdXNlIHdpdGggdXZfZmluZF9zZWNyZXQoKVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjQtICovXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9OTM9c3RhdGljIGludCBnZXRfc2VjcmV0X21ldGFkYXRhKGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy05OS1cdG1lbXNldCh1dl9saXN0LCAwLCBzaXplb2YoKnV2X2xpc3QpKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjEwMDpcdHJjID0gdXZfZmluZF9zZWNyZXQoc2VjcmV0X2lkLCB1dl9saXN0LCBzZWNyZXQpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMTAxLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnV2X2xpc3RfbXV0ZXgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTc2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBPdXQtb2YtQm91bmRzIFJlYWQgaW4gYHMzOTAvY3J5cHRvL3BrZXlfdXYuY2AqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuY2AsIGFuZCBJIHNlZSB0aGF0IGB1dl9saXN0YCBnZXRzIHByZS1hbGxvY2F0ZWQgYW5kIHplcm9lZCBiZWZvcmUgdGhlIGB1dl9maW5kX3NlY3JldGAgZnVuY3Rpb24gaXMgY2FsbGVkLiBUaGlzIG1lYW5zIHRoZSBzdHJ1Y3R1cmUgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgcmlnaHQgZnJvbSB0aGUgc3RhcnQuIFRoYXQmIzM5O3MgZ29vZCwgcHJlZGljdGFibGUgYmVoYXZpb3IuIE5vdywgdGhlIHBvdGVudGlhbCBpc3N1ZSBhcmlzZXMgd2l0aGluIGBmaW5kX3NlY3JldF9pbl9wYWdlYCwgc3BlY2lmaWNhbGx5IHdoZW4gaXQgcmVhZHMgZnJvbSBgbGlzdC0mZ3Q7c2VjcmV0c1tpXWAuIElmIHRoaXMgYGlgIGluZGV4IGV4Y2VlZHMgdGhlIGFsbG9jYXRlZCBib3VuZGFyaWVzLCBpdCBsb29rcyBsaWtlIHdlIGNvdWxkIGhhdmUgYW4gb3V0LW9mLWJvdW5kcyByZWFkLCBhbmQgdGhhdCYjMzk7cyBuZXZlciBnb29kLgoKSSYjMzk7bSB0aGlua2luZywgdGhpcyBgbGlzdGAgdmFyaWFibGUsIGl0JiMzOTtzIHByb2JhYmx5IGFsbG9jYXRlZCBhcyBhIHBhZ2UsIHByb2JhYmx5IGEgc2luZ2xlIHBhZ2UuIElmIHdlIGdvIHBhc3QgaW5kZXggODUsIHdlJiMzOTtyZSBsaWtlbHkgZ29pbmcgdG8gcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIGBsaXN0LSZndDtzZWNyZXRzYCBhcnJheS4gSSBuZWVkIHRvIGJlIHN1cmUgdGhvdWdoLiBMZXQgbWUgY2hlY2sgdGhlIHNpemUgb2YgYHN0cnVjdCB1dl9zZWNyZXRfbGlzdGAuLi4gQWgsIHllcywgaXQmIzM5O3MgZGVmaW5lZCBsaWtlIHRoaXM6CmBgYGMKc3RydWN0IHV2X3NlY3JldF9saXN0IHsKCXUxNiBudW1fc2Vjcl9zdG9yZWQ7Cgl1MTYgdG90YWxfbnVtX3NlY3JldHM7Cgl1MTYgbmV4dF9zZWNyZXRfaWR4OwoJdTE2IHJlc2VydmVkXzA2OwoJdTY0IHJlc2VydmVkXzA4OwoJc3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW0gc2VjcmV0c1s4NV07Cn07CmBgYApPa2F5LCBzbyBpdCBoYXMgdGhhdCBhcnJheSBvZiBgc2VjcmV0c1s4NV1gLiBBbmQgdGhlbiBgc3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW1gIGlzIGRlZmluZWQgYXM6CmBgYGMKc3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW0gewoJc3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW1faGRyIGhkcjsKCXU2NCByZXNlcnZlcmQwODsKCXU4IGlkW1VWX1NFQ1JFVF9JRF9MRU5dOwp9IF9fcGFja2VkIF9fYWxpZ25lZCg4KTsKYGBgClNvIEkgZ3Vlc3MgSSBuZWVkIHRvIGNoZWNrIHRoZSBleGFjdCBzaXplIG9mIGBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbV9oZHJgIGFuZCBgVVZfU0VDUkVUX0lEX0xFTmAgdG8gbmFpbCBkb3duIHRoZSBzaXplIGFuZCBjYWxjdWxhdGUgdGhlIGJvdW5kcy4gSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIGRpZyBpbnRvIHRob3NlIGRlZmluaXRpb25zIHRvIHVuZGVyc3RhbmQgdGhlIG1lbW9yeSBsYXlvdXQgcHJlY2lzZWx5LiBXZSBoYXZlIHRoZSBwb3RlbnRpYWwgZm9yIGEgYnVmZmVyIG92ZXJmbG93IGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtX2hkciAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg9MzczPWVudW0gdXZfc2VjcmV0X3R5cGVzIHtcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC0zOTgtICovXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaDozOTk6c3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW1faGRyIHtcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTQwMC1cdHUxNiBpbmRleDtcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaD00MTE9c3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW0ge1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6NDEyOlx0c3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW1faGRyIGhkcjtcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTQxMy1cdHU2NCByZXNlcnZlcmQwODtcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaD02MTg9aW50IHV2X2ZpbmRfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTYxOS1cdFx0ICAgc3RydWN0IHV2X3NlY3JldF9saXN0ICpsaXN0LFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6NjIwOlx0XHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbV9oZHIgKnNlY3JldCk7XG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC02MjEtaW50IHV2X3JldHJpZXZlX3NlY3JldCh1MTYgc2VjcmV0X2lkeCwgdTggKmJ1Ziwgc2l6ZV90IGJ1Zl9zaXplKTtcbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmM9NzU3PXN0YXRpYyBpbnQgZmluZF9zZWNyZXRfaW5fcGFnZShjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzU4LVx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QsXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6NzU5Olx0XHRcdCAgICAgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbV9oZHIgKnNlY3JldClcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03NjAte1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYz03ODA9aW50IHV2X2ZpbmRfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03ODEtXHRcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqbGlzdCxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo3ODI6XHRcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtX2hkciAqc2VjcmV0KVxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc4My17XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9OTM9c3RhdGljIGludCBnZXRfc2VjcmV0X21ldGFkYXRhKGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjk0Olx0XHRcdCAgICAgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbV9oZHIgKnNlY3JldClcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTk1LXtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0xMDY9c3RhdGljIGludCByZXRyaWV2ZV9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTEwOC17XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoxMDk6XHRzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbV9oZHIgc2VjcmV0X21ldGFfZGF0YTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTExMC1cdGludCByYztcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0yMzM9c3RhdGljIGludCB1dl92ZXJpZnlrZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yMzktXHRzdHJ1Y3QgdXZzZWNyZXR0b2tlbiAqdCA9IChzdHJ1Y3QgdXZzZWNyZXR0b2tlbiAqKWtleTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjI0MDpcdHN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtX2hkciBzZWNyZXRfbWV0YV9kYXRhO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjQxLVx0dTMyIHBrZXlzaXplLCBwa2V5dHlwZSwgYml0c2l6ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0NzYKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgdXZfc2VjcmV0X2xpc3RfaXRlbV9oZHJgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXNzZWN0IHRoaXMgYHN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtX2hkcmAuIEkmIzM5O20gaW1tZWRpYXRlbHkgY3VyaW91cyBhYm91dCBpdHMgc3RydWN0dXJlIOKAkyB3aGF0JiMzOTtzIHRoZSB1bmRlcmx5aW5nIHB1cnBvc2Ugb2YgdGhpcyBoZWFkZXIgd2l0aGluIGxpYnV2JiMzOTtzIHNlY3JldCBsaXN0IGltcGxlbWVudGF0aW9uPyBJcyBpdCBhIHNpbmdsZSBub2RlLCBvciBhIG1vcmUgY29tcGxleCBtZXRhZGF0YSBzdHJ1Y3R1cmUgZm9yIGEgbGlua2VkIGxpc3Q/IE15IGltbWVkaWF0ZSBxdWVzdGlvbnMgcmV2b2x2ZSBhcm91bmQgbWVtb3J5IG1hbmFnZW1lbnQ6IGFyZSB3ZSBkZWFsaW5nIHdpdGggZW1iZWRkZWQgZGF0YSwgb3IgcG9pbnRlcnMgdG8gZXh0ZXJuYWwgYmxvY2tzPyBBcmUgdGhlcmUgaW1wbGljYXRpb25zIGZvciBhdG9taWNpdHkgYW5kIHRocmVhZCBzYWZldHkgaGVyZSwgcGFydGljdWxhcmx5IGlmIHRoaXMgZGF0YSBzdHJ1Y3R1cmUgaXMgYWNjZXNzZWQgY29uY3VycmVudGx5PyBJcyB0aGVyZSBhbiBpbmhlcmVudCBvcmRlcmluZyB0byB0aGUgc2VjcmV0IGl0ZW1zLCBvciBpcyB0aGlzIGp1c3QgYW4gdW5vcmRlcmVkIGNvbGxlY3Rpb24/IEFyZSB0aGVyZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnM/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIGxvY2tpbmcsIHBhcnRpY3VsYXJseSBpbiBtdWx0aS10aHJlYWRlZCBlbnZpcm9ubWVudHMgd2hlcmUgc2VjcmV0cyBtaWdodCBiZSBhY2Nlc3NlZCBvciB1cGRhdGVkPyBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZGVzaWduIHRyYWRlb2ZmcyB0aGV5IG1hZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOTksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM5OTpcdHN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtX2hkciB7XG4gNDAwOlx0XHR1MTYgaW5kZXg7XG4gNDAxOlx0XHR1MTYgdHlwZTtcbiA0MDI6XHRcdHUzMiBsZW5ndGg7XG4gNDAzOlx0fSBfX3BhY2tlZCBfX2FsaWduZWQoOCk7XG4gNDA0Olx0XG4gNDA1Olx0I2RlZmluZSBVVl9TRUNSRVRfSURfTEVOIDMyXG4gNDA2Olx0LyoqXG4gNDA3Olx0ICogdXZfc2VjcmV0X2xpc3RfaXRlbSAtIFVWIHNlY3JldCBlbnRyeS5cbiA0MDg6XHQgKiBAaGRyOiBUaGUgbWV0YWRhdGEgb2YgdGhpcyBzZWNyZXQuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODgwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBPdXQtb2YtQm91bmRzIFJlYWQgaW4gYHV2X3NlY3JldF9saXN0YCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgZm9jdXNlZCBvbiBtZW1vcnkgbGF5b3V0LiBJJiMzOTttIHNlZWluZyB0aGF0IGBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbV9oZHJgIGlzIGEgbW9kZXN0IDggYnl0ZXMsIHdoaWNoIGlzIGdvb2QuIFRoZW4gYHN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtYCBiYWxsb29ucyB0byA0OCBieXRlcyAoOCBmb3IgdGhlIGhlYWRlciwgOCBmb3Igc29tZXRoaW5nIGVsc2UsIGFuZCBhIDMyLWJ5dGUgSUQsIHByZXN1bWFibHkpLiBOb3csIHRoZSBjcnVjaWFsIHBhcnQ6IGBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RgIGl0c2VsZi4gVGhlIGNhbGN1bGF0aW9uIGxvb2tzIGxpa2UgdGhpczogMiAmIzQzOyAyICYjNDM7IDIgJiM0MzsgMiAmIzQzOyA4ICYjNDM7ICg4NSAqIDQ4KSA9IDQwOTYgYnl0ZXMgdG90YWwuIEhtbSwgdGhhdCYjMzk7cyBleGFjdGx5IG9uZSBwYWdlLiBUaGF0JiMzOTtzIGEgcmVkIGZsYWcgaW4gaXRzZWxmLgoKTm93LCB0aGF0IGJyaW5ncyBtZSB0byB0aGUgcG90ZW50aWFsIGJ1ZyBpbiBgZmluZF9zZWNyZXRfaW5fcGFnZWA6CgpgYGBjCglmb3IgKGkgPSAwOyBpICZsdDsgbGlzdC0mZ3Q7dG90YWxfbnVtX3NlY3JldHM7IGkmIzQzOyYjNDM7KSB7CgkJaWYgKG1lbWNtcChzZWNyZXRfaWQsIGxpc3QtJmd0O3NlY3JldHNbaV0uaWQsIFVWX1NFQ1JFVF9JRF9MRU4pID09IDApIHsKCQkJKnNlY3JldCA9IGxpc3QtJmd0O3NlY3JldHNbaV0uaGRyOwoJCQlyZXR1cm4gMDsKCQl9Cgl9CmBgYAoKVGhlIGxvb3AgaXRlcmF0ZXMgdXAgdG8gYHRvdGFsX251bV9zZWNyZXRzYC4gSWYgYHRvdGFsX251bV9zZWNyZXRzYCBleGNlZWRzIDg1LCB0aGVuIGBsaXN0LSZndDtzZWNyZXRzW2ldYCBnb2VzIG91dC1vZi1ib3VuZHMsIHNpbmNlIHdlIG9ubHkgaGF2ZSBzcGFjZSBmb3IgODUgYHV2X3NlY3JldF9saXN0X2l0ZW1gcywgcG90ZW50aWFsbHkgd3JpdGluZyBhdCBhIG1lbW9yeSBhZGRyZXNzIHRoYXQmIzM5O3Mgb3V0c2lkZSBvZiB0aGUgYWxsb2NhdGVkIHBhZ2UuIFRoaXMgaXMgYSBjbGFzc2ljIG91dC1vZi1ib3VuZHMgcmVhZCwgYW5kIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIHNob3VsZCBuYWlsIGl0IGJlY2F1c2UgaXQmIzM5O3MgcmVhZGluZyBwYXN0IHRoZSBwYWdlIGJvdW5kYXJ5LgoKVGhlIG5leHQgcXVlc3Rpb24gaXMsIGhvdyBpcyB0aGUgbWVtb3J5IGZvciB0aGUgYGxpc3RgIGFsbG9jYXRlZD8gSXMgaXQgYGttYWxsb2NgPyBgZ2V0X2ZyZWVfcGFnZWA/IFRoYXQmIzM5O3MgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgb3ZlcmZsb3cuIEdvaW5nIGJhY2sgdG8gdGhlIGRyaXZlciBjb2RlLCBJIHNlZSB0aGF0IHRoZSBgdXZfbGlzdGAgaXMgcHJlLWFsbG9jYXRlZC4gTGV0JiMzOTtzIGRpZyBkZWVwZXIgdG8gc2VlIGV4YWN0bHkgaG93IGFuZCB3aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXZfbGlzdCA9JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9Mjg0PXN0YXRpYyBpbnQgX19pbml0IHBrZXlfdXZfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI5My1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjI5NDpcdHV2X2xpc3QgPSBrbWFsbG9jX29iaigqdXZfbGlzdCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yOTUtXHRpZiAoIXV2X2xpc3QpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODY1CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4KCioqRGVjb25zdHJ1Y3RpbmcgdGhpcyBNZW1vcnkgQWxsb2NhdGlvbioqCgpIbW0sIGBrbWFsbG9jX29iaigqdXZfbGlzdClgLi4uIHRoYXQgc3ludGF4IHRocm93cyBhIGZsYWcuIGBrbWFsbG9jX29iamAgaXMgZGVmaW5pdGVseSBub3QgYSBzdGFuZGFyZCBrZXJuZWwgYWxsb2NhdG9yLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0aGF0IGl0JiMzOTtzIGEgbWFjcm8gb3IgYSBjdXN0b20gd3JhcHBlciBkZWZpbmVkIHNvbWV3aGVyZSBzcGVjaWZpYyB0byB0aGlzIGNvZGViYXNlLiBJdCYjMzk7cyBvZnRlbiB0aGF0IHRoZXNlIHR5cGVzIG9mIGNvbnN0cnVjdHMgYXJlIHVzZWQgdG8gaGFuZGxlIG9iamVjdC1zcGVjaWZpYyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcG90ZW50aWFsbHkgcHJvdmlkZSBhZGRpdGlvbmFsIGNvbnRleHQgb3IgZGVidWdnaW5nIGluZm9ybWF0aW9uLiBCdXQgbGV0JiMzOTtzIHZlcmlmeSB0aGF0LgoKTXkgbmV4dCBtb3ZlIGlzIHRvIGZhbGwgYmFjayB0byB0aGUgdHJpZWQtYW5kLXRydWUgc3RhbmRhcmQga2VybmVsIGFsbG9jYXRpb246IGBrbWFsbG9jKHNpemVvZigqdXZfbGlzdCksIEdGUF9LRVJORUwpYC4gIEl0JiMzOTtzIG11Y2ggbW9yZSBsaWtlbHkgdGhpcyBpcyB3aGF0IHRoZXkgKm1lYW50KiBhbmQgdGhlIGNvZGUgaXMgdXNpbmcgdGhlIHJpZ2h0IHNpemUgYW5kIGFsbG9jYXRpb24gZmxhZ3MuIFRpbWUgdG8gY2hlY2sgdGhlIGFjdHVhbCBjb2RlIG9yIHJlbGV2YW50IGhlYWRlciBmaWxlcyB0byBjb25maXJtIHRoaXMgYXNzdW1wdGlvbiBhbmQgZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IG1lbW9yeSBhbGxvY2F0aW9uIGlzIGhhbmRsZWQgd2l0aGluIHRoaXMgc3BlY2lmaWMgY29udGV4dC4gVGhhdCYjMzk7cyB0aGUgb25seSB3YXkgdG8gYmUgY29tcGxldGVseSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjg0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyODQ6XHRzdGF0aWMgaW50IF9faW5pdCBwa2V5X3V2X2luaXQodm9pZClcbiAyODU6XHR7XG4gMjg2Olx0XHRpbnQgcmM7XG4gMjg3Olx0XG4gMjg4Olx0XHRpZiAoIWlzX3Byb3RfdmlydF9ndWVzdCgpKVxuIDI4OTpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbiAyOTA6XHRcbiAyOTE6XHRcdGlmICghdGVzdF9iaXRfaW52KEJJVF9VVkNfQ01EX1JFVFJfU0VDUkVULCB1dl9pbmZvLmluc3RfY2FsbHNfbGlzdCkpXG4gMjkyOlx0XHRcdHJldHVybiAtRU5PREVWO1xuIDI5MzpcdFxuIDI5NDpcdFx0dXZfbGlzdCA9IGttYWxsb2Nfb2JqKCp1dl9saXN0KTtcbiAyOTU6XHRcdGlmICghdXZfbGlzdClcbiAyOTY6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMjk3Olx0XG4gMjk4Olx0XHRyYyA9IHBrZXlfaGFuZGxlcl9yZWdpc3RlcihcdTAwMjZ1dl9oYW5kbGVyKTtcbiAyOTk6XHRcdGlmIChyYylcbiAzMDA6XHRcdFx0a2ZyZWUodXZfbGlzdCk7XG4gMzAxOlx0XG4gMzAyOlx0XHRyZXR1cm4gcmM7XG4gMzAzOlx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ0MQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgVW5mYW1pbGlhciBDb2RlKioKClJpZ2h0LCBsZXQgbWUgc2VlLi4uIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBrbWFsbG9jX29iamAgdGhpbmcgYW5kIGl0JiMzOTtzIG5vdCBpbW1lZGlhdGVseSBqdW1waW5nIG91dCBhdCBtZSBhcyBzdGFuZGFyZCBrZXJuZWwgY29kZS4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIHRoZSBjb250ZXh0LCBpcyB0aGF0IGl0JiMzOTtzIGxpa2VseSBhIG1hY3JvIHNwZWNpZmljIHRvIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSwgb3IgbWF5YmUgZGVmaW5lZCBpbiBzb21lIGxvY2FsLCBwcm9qZWN0LXNwZWNpZmljIGhlYWRlciBmaWxlLiBPa2F5LCBob2xkIG9uLiBKdXN0IGNvbmZpcm1pbmcgbXkgaW5pdGlhbCBpbXByZXNzaW9uLi4uIFllcCwgYGttYWxsb2Nfb2JqYCBpc24mIzM5O3QgYSBzdGFuZGFyZCwgdW5pdmVyc2FsbHkgZGVmaW5lZCBrZXJuZWwgZnVuY3Rpb24gb3IgbWFjcm8uIFNvLCB0aW1lIHRvIHRyYWNrIGRvd24gaXRzIGRlZmluaXRpb24uIExldCYjMzk7cyBmaW5kIG91dCB3aGVyZSB0aGlzIHRoaW5nIGlzIGFjdHVhbGx5IGRlY2xhcmVkISBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0JiMzOTtzIGRvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrbWFsbG9jX29iaiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTU0OTcgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdD0yMDM9bm9uLVxcIGBgTlVMTGBgLCBsb2NrbGVzc2x5IGFjY2Vzc2luZyB0aGUgYGAtXHUwMDNlYWBgIGFuZCBgYC1cdTAwM2ViYGAgZmllbGRzLlxuLS1cbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdC0yMDgtICAgICAgIDIge1xuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0OjIwOTogICAgICAgMyAgIHAgPSBrbWFsbG9jX29iaigqcCk7XG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3QtMjEwLSAgICAgICA0ICAgaWYgKCFwKVxuLS1cbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdD0yMjU9dGhlaXIgcmlnaHRzIHRvIHJlb3JkZXIgdGhpcyBjb2RlIGFzIGZvbGxvd3M6XG4tLVxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0LTIzMC0gICAgICAgMiB7XG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3Q6MjMxOiAgICAgICAzICAgcCA9IGttYWxsb2Nfb2JqKCpwKTtcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdC0yMzItICAgICAgIDQgICBpZiAoIXApXG4tLVxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0PTI2MT1zaG93cyBhbiBleGFtcGxlIG9mIGluc2VydGlvbjpcbi0tXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3QtMjY2LSAgICAgICAyIHtcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdDoyNjc6ICAgICAgIDMgICBwID0ga21hbGxvY19vYmooKnApO1xuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0LTI2OC0gICAgICAgNCAgIGlmICghcClcbi0tXG5Eb2N1bWVudGF0aW9uL1JDVS9saXN0UkNVLnJzdD0yNjc9VGhlIFJDVSB2ZXJzaW9uIG9mIGF1ZGl0X3VwZF9ydWxlKCkgaXMgYXMgZm9sbG93czo6XG4tLVxuRG9jdW1lbnRhdGlvbi9SQ1UvbGlzdFJDVS5yc3QtMjc4LVx0XHRcdGlmICghYXVkaXRfY29tcGFyZV9ydWxlKHJ1bGUsIFx1MDAyNmUtXHUwMDNlcnVsZSkpIHtcbkRvY3VtZW50YXRpb24vUkNVL2xpc3RSQ1UucnN0OjI3OTpcdFx0XHRcdG5lID0ga21hbGxvY19vYmooKmVudHJ5LCBHRlBfQVRPTUlDKTtcbkRvY3VtZW50YXRpb24vUkNVL2xpc3RSQ1UucnN0LTI4MC1cdFx0XHRcdGlmIChuZSA9PSBOVUxMKVxuLS1cbkRvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS5yc3Q9NDQxPXVzZXMgb2YgUkNVIG1heSBiZSBmb3VuZCBpbiBsaXN0UkNVLnJzdCBhbmQgTk1JLVJDVS5yc3QuXG4tLVxuRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnJzdC00NzAtXG5Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UucnN0OjQ3MTpcdFx0bmV3X2ZwID0ga21hbGxvY19vYmooKm5ld19mcCk7XG5Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UucnN0LTQ3Mi1cdFx0c3Bpbl9sb2NrKFx1MDAyNmZvb19tdXRleCk7XG4tLVxuRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnJzdD01NTM9VGhlIGZvb191cGRhdGVfYSgpIGZ1bmN0aW9uIG1pZ2h0IHRoZW4gYmUgd3JpdHRlbiBhcyBmb2xsb3dzOjpcbi0tXG5Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UucnN0LTU3Mi1cbkRvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS5yc3Q6NTczOlx0XHRuZXdfZnAgPSBrbWFsbG9jX29iaigqbmV3X2ZwKTtcbkRvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS5yc3QtNTc0LVx0XHRzcGluX2xvY2soXHUwMDI2Zm9vX211dGV4KTtcbi0tXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2tyZWYucnN0PTM5PWtyZWZfaW5pdCBhcyBzbzo6XG4tLVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9rcmVmLnJzdC00Mi1cbkRvY3VtZW50YXRpb24vY29yZS1hcGkva3JlZi5yc3Q6NDM6ICAgICBkYXRhID0ga21hbGxvY19vYmooKmRhdGEpO1xuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9rcmVmLnJzdC00NC0gICAgIGlmICghZGF0YSlcbi0tXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2tyZWYucnN0PTgxPXRocmVhZCB0byBwcm9jZXNzOjpcbi0tXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2tyZWYucnN0LTEwMi1cdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaztcbkRvY3VtZW50YXRpb24vY29yZS1hcGkva3JlZi5yc3Q6MTAzOlx0ZGF0YSA9IGttYWxsb2Nfb2JqKCpkYXRhKTtcbkRvY3VtZW50YXRpb24vY29yZS1hcGkva3JlZi5yc3QtMTA0LVx0aWYgKCFkYXRhKVxuLS1cbkRvY3VtZW50YXRpb24va2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3Q9MzgzPXRvIHByb3RlY3QgdGhlIGNhY2hlIGFuZCBhbGwgdGhlIG9iamVjdHMgd2l0aGluIGl0LiBIZXJlJiMzOTtzIHRoZSBjb2RlOjpcbi0tXG5Eb2N1bWVudGF0aW9uL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0LTQ0NC1cbkRvY3VtZW50YXRpb24va2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3Q6NDQ1OiAgICAgICAgICAgIGlmICgob2JqID0ga21hbGxvY19vYmooKm9iaikpID09IE5VTEwpXG5Eb2N1bWVudGF0aW9uL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0LTQ0Ni0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNO1xuLS1cbkRvY3VtZW50YXRpb24va2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3Q9NDk5PXdoaWNoIGFyZSB0YWtlbiBhd2F5LCBhbmQgdGhlIGBgJiM0MztgYCBhcmUgbGluZXMgd2hpY2ggYXJlIGFkZGVkLlxuLS1cbkRvY3VtZW50YXRpb24va2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3QtNTE5LVxuRG9jdW1lbnRhdGlvbi9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdDo1MjA6ICAgICAgICAgICAgIGlmICgob2JqID0ga21hbGxvY19vYmooKm9iaikpID09IE5VTEwpXG5Eb2N1bWVudGF0aW9uL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0LTUyMS0gICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTtcbi0tXG5Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbG9ja3R5cGVzLnJzdD00OTg9d29ya3MgcGVyZmVjdGx5Ojpcbi0tXG5Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbG9ja3R5cGVzLnJzdC01MDAtICByYXdfc3Bpbl9sb2NrKFx1MDAyNmxvY2spO1xuRG9jdW1lbnRhdGlvbi9sb2NraW5nL2xvY2t0eXBlcy5yc3Q6NTAxOiAgcCA9IGttYWxsb2Nfb2JqKCpwLCBHRlBfQVRPTUlDKTtcbkRvY3VtZW50YXRpb24vbG9ja2luZy9sb2NrdHlwZXMucnN0LTUwMi1cbi0tXG5Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbG9ja3R5cGVzLnJzdD01MDc9cHJlZW1wdGlvbiBvbiBQUkVFTVBUX1JUIGtlcm5lbHM6OlxuLS1cbkRvY3VtZW50YXRpb24vbG9ja2luZy9sb2NrdHlwZXMucnN0LTUwOS0gIHNwaW5fbG9jayhcdTAwMjZsb2NrKTtcbkRvY3VtZW50YXRpb24vbG9ja2luZy9sb2NrdHlwZXMucnN0OjUxMDogIHAgPSBrbWFsbG9jX29iaigqcCwgR0ZQX0FUT01JQyk7XG5Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbG9ja3R5cGVzLnJzdC01MTEtXG4tLVxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9OTM4PVRoZSBrZXJuZWwgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBnZW5lcmFsIHB1cnBvc2UgbWVtb3J5IGFsbG9jYXRvcnM6XG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo5Mzk6a21hbGxvYygpLCBremFsbG9jKCksIGttYWxsb2Nfb2JqcygpLCBremFsbG9jX29ianMoKSwgdm1hbGxvYygpLCBhbmRcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk0MC12emFsbG9jKCkuICBQbGVhc2UgcmVmZXIgdG8gdGhlIEFQSSBkb2N1bWVudGF0aW9uIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uXG4tLVxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9OTQ0PVRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgcGFzc2luZyBhIHNpemUgb2YgYSBzdHJ1Y3QgaXMgdGhlIGZvbGxvd2luZzpcbi0tXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NDctXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo5NDg6XHRwID0ga21hbGxvY19vYmooKnAsIC4uLik7XG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NDktXG4tLVxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9OTU4PVRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgYWxsb2NhdGluZyBhbiBhcnJheSBpcyB0aGUgZm9sbG93aW5nOlxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk2MS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0Ojk2MjpcdHAgPSBrbWFsbG9jX29ianMoKnAsIG4sIC4uLik7XG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NjMtXG4tLVxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0PTM4Nj1tYXkgaGVscCB3aXRoIGFsaWdubWVudCwgd3JhcC1hcm91bmQsIG9yIGFkZGl0aW9uYWwgaGFyZGVuaW5nLiBUaGVcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdDozODc6a21hbGxvY19vYmooKS1mYW1pbHkgb2YgbWFjcm9zIHByb3ZpZGUgdGhpcyBpbnRyb3NwZWN0aW9uLCB3aGljaCBjYW4gYmVcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC0zODgtdXNlZCBmb3IgdGhlIGNvbW1vbiBjb2RlIHBhdHRlcm5zIGZvciBzaW5nbGUsIGFycmF5LCBhbmQgZmxleGlibGUgb2JqZWN0XG4tLVxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0PTM5OD1iZWNvbWUsIHJlc3BlY3RpdmVseTo6XG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtMzk5LVxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0OjQwMDpcdHB0ciA9IGttYWxsb2Nfb2JqKCpwdHIgWywgZ2ZwXSApO1xuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0LTQwMS1cdHB0ciA9IGt6YWxsb2Nfb2JqKCpwdHIgWywgZ2ZwXSApO1xuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0OjQwMjpcdHB0ciA9IGttYWxsb2Nfb2JqcygqcHRyLCBjb3VudCBbLCBnZnBdICk7XG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtNDAzLVx0cHRyID0ga3phbGxvY19vYmpzKCpwdHIsIGNvdW50IFssIGdmcF0gKTtcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDQtXHRwdHIgPSBrbWFsbG9jX2ZsZXgoKnB0ciwgZmxleF9tZW1iZXIsIGNvdW50IFssIGdmcF0gKTtcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdDo0MDU6XHRfX2F1dG9fdHlwZSBwdHIgPSBrbWFsbG9jX29iaihzdHJ1Y3QgZm9vIFssIGdmcF0gKTtcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDYtXG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTE3MzQ9Y2FsbGJhY2s6OlxuLS1cbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC0xNzM5LSAgICAgICAgICAuLi4uXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q6MTc0MDogICAgICAgICAgZGF0YSA9IGttYWxsb2Nfb2JqKCpkYXRhKTtcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC0xNzQxLSAgICAgICAgICBzdWJzdHJlYW0tXHUwMDNlcnVudGltZS1cdTAwM2Vwcml2YXRlX2RhdGEgPSBkYXRhO1xuLS1cbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdD0zMzAyPWRlc3RydWN0b3IgZnVuY3Rpb24gaXMgc2V0IGluIHRoZSBgYHByaXZhdGVfZnJlZWBgIGZpZWxkOjpcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC0zMzAzLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0OjMzMDQ6ICBzdHJ1Y3QgbXlkYXRhICpwID0ga21hbGxvY19vYmooKnApO1xuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTMzMDUtICBody1cdTAwM2Vwcml2YXRlX2RhdGEgPSBwO1xuLS1cbkRvY3VtZW50YXRpb24vc3BpL3NwaS1zdW1tYXJ5LnJzdD0yNDI9QW5kIFNPQy1zcGVjaWZpYyB1dGlsaXR5IGNvZGUgbWlnaHQgbG9vayBzb21ldGhpbmcgbGlrZTo6XG4tLVxuRG9jdW1lbnRhdGlvbi9zcGkvc3BpLXN1bW1hcnkucnN0LTI1MS1cbkRvY3VtZW50YXRpb24vc3BpL3NwaS1zdW1tYXJ5LnJzdDoyNTI6XHRcdHBkYXRhMiA9IGttYWxsb2Nfb2JqKCpwZGF0YTIpO1xuRG9jdW1lbnRhdGlvbi9zcGkvc3BpLXN1bW1hcnkucnN0LTI1My1cdFx0KnBkYXRhMiA9IHBkYXRhO1xuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0PTQwMz1lIHR1dHRpIGdsaSBvZ2dldHRpIGNoZSBjb250aWVuZS4gRWNjbyBpbCBjb2RpY2U6OlxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0LTQ2NC1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0OjQ2NTogICAgICAgICAgICBpZiAoKG9iaiA9IGttYWxsb2Nfb2JqKCpvYmopKSA9PSBOVUxMKVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQva2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3QtNDY2LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07XG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQva2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3Q9NTE5PXNvbm8gcXVlbGxlIHJpbW9zc2UsIG1lbnRyZSBxdWVsbGUgYGAmIzQzO2BgIHNvbm8gcXVlbGxlIGFnZ2l1bnRlLlxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0LTUzOS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0OjU0MDogICAgICAgICAgICAgaWYgKChvYmogPSBrbWFsbG9jX29iaigqb2JqKSkgPT0gTlVMTClcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0LTU0MS0gICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTtcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9sb2NraW5nL2xvY2t0eXBlcy5yc3Q9NDg4PW1lbW9yaWEuIFN1IHVuIGtlcm5lbCBub24tUFJFRU1QVF9SVCBpbCBzZWd1ZW50ZSBjb2RpY2UgZnVuemlvbmEgcGVyZmV0dGFtZW50ZTo6XG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvbG9ja2luZy9sb2NrdHlwZXMucnN0LTQ5MC0gIHJhd19zcGluX2xvY2soXHUwMDI2bG9jayk7XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9sb2NraW5nL2xvY2t0eXBlcy5yc3Q6NDkxOiAgcCA9IGttYWxsb2Nfb2JqKCpwLCBHRlBfQVRPTUlDKTtcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2xvY2tpbmcvbG9ja3R5cGVzLnJzdC00OTItXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvbG9ja2luZy9sb2NrdHlwZXMucnN0PTQ5Nz1QUkVFTVBUX1JUOjpcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9sb2NraW5nL2xvY2t0eXBlcy5yc3QtNDk5LSAgc3Bpbl9sb2NrKFx1MDAyNmxvY2spO1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvbG9ja2luZy9sb2NrdHlwZXMucnN0OjUwMDogIHAgPSBrbWFsbG9jX29iaigqcCwgR0ZQX0FUT01JQyk7XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9sb2NraW5nL2xvY2t0eXBlcy5yc3QtNTAxLVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdD05NDI9SWwgbW9kbyBwcmVmZXJpdG8gcGVyIHBhc3NhcmUgbGEgZGltZW5zaW9uZSBkaSB1bmEgc3RydXR0dXJhIMOoIGlsIHNlZ3VlbnRlOlxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NDUtXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6OTQ2Olx0cCA9IGttYWxsb2Nfb2JqKCpwLCAuLi4pO1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk0Ny1cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9zcF9TUC9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9OTU0PUxhIGZvcm1hIHByZWZlcmlkYSBwYXJhIHBhc2FyIGVsIHRhbWHDsW8gZGUgdW5hIGVzdHJ1Y3R1cmEgZXMgbGEgc2lndWllbnRlOlxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3NwX1NQL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NTctXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9zcF9TUC9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6OTU4Olx0cCA9IGttYWxsb2Nfb2JqKCpwLCAuLi4pO1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvc3BfU1AvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk1OS1cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9rcmVmLnJzdD00Nj1rcmVm5Y+v5Lul5Ye6546w5Zyo5pWw5o2u57uT5p6E5L2T5Lit55qE5Lu75L2V5Zyw5pa544CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkva3JlZi5yc3QtNTQtXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9rcmVmLnJzdDo1NTogICAgIGRhdGEgPSBrbWFsbG9jX29iaigqZGF0YSk7XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9rcmVmLnJzdC01Ni0gICAgIGlmICghZGF0YSlcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9rcmVmLnJzdD02Mj1LcmVm6KeE5YiZXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkva3JlZi5yc3QtMTA4LVx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrO1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkva3JlZi5yc3Q6MTA5Olx0ZGF0YSA9IGttYWxsb2Nfb2JqKCpkYXRhKTtcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL2tyZWYucnN0LTExMC1cdGlmICghZGF0YSlcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9ODEwPURvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL21lbW9yeS1hbGxvY2F0aW9uLnJzdCDjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtODE1LVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0OjgxNjpcdHAgPSBrbWFsbG9jX29iaigqcCwgLi4uKTtcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC04MTctXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTgyND1Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9tZW1vcnktYWxsb2NhdGlvbi5yc3Qg44CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTgyOS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo4MzA6XHRwID0ga21hbGxvY19vYmooKnAsIC4uLik7XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtODMxLVxuLS1cbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmM9ODU3PW1hcnZlbF9hZ3Bfc2V0dXAoYWxwaGFfYWdwX2luZm8gKmFncClcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jLTg2My1cbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmM6ODY0Olx0YXBlciA9IGttYWxsb2Nfb2JqKCphcGVyKTtcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmMtODY1LVx0aWYgKGFwZXIgPT0gTlVMTCkgcmV0dXJuIC1FTk9NRU07XG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYz0xMDE5PW1hcnZlbF9hZ3BfaW5mbyh2b2lkKVxuLS1cbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmMtMTA2MS1cdCAqL1xuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYzoxMDYyOlx0YWdwID0ga21hbGxvY19vYmooKmFncCk7XG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jLTEwNjMtXHRpZiAoIWFncClcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX3RpdGFuLmM9NTkwPXRpdGFuX2FncF9zZXR1cChhbHBoYV9hZ3BfaW5mbyAqYWdwKVxuLS1cbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfdGl0YW4uYy01OTYtXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX3RpdGFuLmM6NTk3Olx0YXBlciA9IGttYWxsb2Nfb2JqKHN0cnVjdCB0aXRhbl9hZ3BfYXBlcnR1cmUpO1xuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV90aXRhbi5jLTU5OC1cdGlmIChhcGVyID09IE5VTEwpXG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV90aXRhbi5jPTczMT10aXRhbl9hZ3BfaW5mbyh2b2lkKVxuLS1cbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfdGl0YW4uYy03NjItXHQgKi9cbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfdGl0YW4uYzo3NjM6XHRhZ3AgPSBrbWFsbG9jX29iaigqYWdwKTtcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfdGl0YW4uYy03NjQtXHRpZiAoIWFncClcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9tb2R1bGUuYz0yOT1wcm9jZXNzX3JlbG9jX2Zvcl9nb3QoRWxmNjRfUmVsYSAqcmVsYSxcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9tb2R1bGUuYy00OC1cbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jOjQ5Olx0ZyA9IGttYWxsb2Nfb2JqKCpnKTtcbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jLTUwLVx0Zy1cdTAwM2VuZXh0ID0gY2hhaW5zW3Jfc3ltXS5uZXh0O1xuLS1cbmFyY2gvYWxwaGEva2VybmVsL3BjaS5jPTIxMT1zdGF0aWMgdm9pZCBwZGV2X3NhdmVfc3JtX2NvbmZpZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuLS1cbmFyY2gvYWxwaGEva2VybmVsL3BjaS5jLTIyMy1cbmFyY2gvYWxwaGEva2VybmVsL3BjaS5jOjIyNDpcdHRtcCA9IGttYWxsb2Nfb2JqKCp0bXApO1xuYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmMtMjI1LVx0aWYgKCF0bXApIHtcbi0tXG5hcmNoL2FyYy9rZXJuZWwvdW53aW5kLmM9MzU5PXZvaWQgKnVud2luZF9hZGRfdGFibGUoc3RydWN0IG1vZHVsZSAqbW9kdWxlLCBjb25zdCB2b2lkICp0YWJsZV9zdGFydCxcbi0tXG5hcmNoL2FyYy9rZXJuZWwvdW53aW5kLmMtMzY4LVxuYXJjaC9hcmMva2VybmVsL3Vud2luZC5jOjM2OTpcdHRhYmxlID0ga21hbGxvY19vYmooKnRhYmxlKTtcbmFyY2gvYXJjL2tlcm5lbC91bndpbmQuYy0zNzAtXHRpZiAoIXRhYmxlKVxuLS1cbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYz0yNzQ9c3RhdGljIGludCBsb2NvbW9fc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSlcbi0tXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmMtMjc5LVxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jOjI4MDpcdHNhdmUgPSBrbWFsbG9jX29iaihzdHJ1Y3QgbG9jb21vX3NhdmVfZGF0YSk7XG5hcmNoL2FybS9jb21tb24vbG9jb21vLmMtMjgxLVx0aWYgKCFzYXZlKVxuLS1cbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYz05NjQ9c3RhdGljIGludCBzYTExMTFfc3VzcGVuZF9ub2lycShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jLTk3MS1cbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYzo5NzI6XHRzYXZlID0ga21hbGxvY19vYmooc3RydWN0IHNhMTExMV9zYXZlX2RhdGEpO1xuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jLTk3My1cdGlmICghc2F2ZSlcbi0tXG5hcmNoL2FybS9rZXJuZWwvdW53aW5kLmM9NTcyPXN0cnVjdCB1bndpbmRfdGFibGUgKnVud2luZF90YWJsZV9hZGQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplLFxuLS1cbmFyY2gvYXJtL2tlcm5lbC91bndpbmQuYy01NzYtXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuYXJjaC9hcm0va2VybmVsL3Vud2luZC5jOjU3NzpcdHN0cnVjdCB1bndpbmRfdGFibGUgKnRhYiA9IGttYWxsb2Nfb2JqKCp0YWIpO1xuYXJjaC9hcm0va2VybmVsL3Vud2luZC5jLTU3OC1cbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtaW9tbXUuYz01Mz1zdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluICpfZ2V0X3B3cmRtKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtaW9tbXUuYy0xMDEtXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtaW9tbXUuYzoxMDI6XHRlbnRyeSA9IGttYWxsb2Nfb2JqKCplbnRyeSk7XG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtaW9tbXUuYy0xMDMtXHRpZiAoZW50cnkpIHtcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzR4eC5jPTQwNj1zdGF0aWMgaW50IF9faW5pdCBwd3JkbXNfc2V0dXAoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdm9pZCAqdW51c2VkKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmMtNDEyLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYzo0MTM6XHRwd3JzdCA9IGttYWxsb2Nfb2JqKHN0cnVjdCBwb3dlcl9zdGF0ZSwgR0ZQX0FUT01JQyk7XG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzR4eC5jLTQxNC1cdGlmICghcHdyc3QpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTQ0eHguYz0xMTM9c3RhdGljIGludCBfX2luaXQgcHdyZG1zX3NldHVwKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHZvaWQgKnVudXNlZClcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtNDR4eC5jLTEzNC1cbmFyY2gvYXJtL21hY2gtb21hcDIvcG00NHh4LmM6MTM1Olx0cHdyc3QgPSBrbWFsbG9jX29iaihzdHJ1Y3QgcG93ZXJfc3RhdGUsIEdGUF9BVE9NSUMpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTQ0eHguYy0xMzYtXHRpZiAoIXB3cnN0KVxuLS1cbmFyY2gvYXJtL21tL3BnZC5jLTE5LSNpZmRlZiBDT05GSUdfQVJNX0xQQUVcbmFyY2gvYXJtL21tL3BnZC5jOjIwOiNkZWZpbmUgX3BnZF9hbGxvYyhtbSlcdFx0a21hbGxvY19vYmpzKHBnZF90LCBQVFJTX1BFUl9QR0QsIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKVxuYXJjaC9hcm0vbW0vcGdkLmMtMjEtI2RlZmluZSBfcGdkX2ZyZWUobW0sIHBnZClcdGtmcmVlKHBnZClcbi0tXG5hcmNoL2FybS9wcm9iZXMva3Byb2Jlcy90ZXN0LWNvcmUuYz03NjQ9c3RhdGljIGludCBjb3ZlcmFnZV9zdGFydChjb25zdCB1bmlvbiBkZWNvZGVfaXRlbSAqdGFibGUpXG5hcmNoL2FybS9wcm9iZXMva3Byb2Jlcy90ZXN0LWNvcmUuYy03NjUte1xuYXJjaC9hcm0vcHJvYmVzL2twcm9iZXMvdGVzdC1jb3JlLmM6NzY2Olx0Y292ZXJhZ2UuYmFzZSA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgY292ZXJhZ2VfZW50cnksXG5hcmNoL2FybS9wcm9iZXMva3Byb2Jlcy90ZXN0LWNvcmUuYy03NjctXHRcdFx0XHQgICAgIE1BWF9DT1ZFUkFHRV9FTlRSSUVTKTtcbi0tXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jPTc3ND12b2lkIGt2bV9ob3N0X3BtdV9pbml0KHN0cnVjdCBhcm1fcG11ICpwbXUpXG4tLVxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYy03ODYtXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jOjc4NzpcdGVudHJ5ID0ga21hbGxvY19vYmooKmVudHJ5KTtcbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMtNzg4LVx0aWYgKCFlbnRyeSlcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtZGVidWcuYz0xMDI9c3RhdGljIHZvaWQgKnZnaWNfZGVidWdfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzLCBsb2ZmX3QgKnBvcylcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtZGVidWcuYy0xMDYtXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtZGVidWcuYzoxMDc6XHRpdGVyID0ga21hbGxvY19vYmooKml0ZXIpO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWRlYnVnLmMtMTA4LVx0aWYgKCFpdGVyKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1kZWJ1Zy5jPTM2ND1zdGF0aWMgdm9pZCAqdmdpY19pdHNfZGVidWdfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzLCBsb2ZmX3QgKnBvcylcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtZGVidWcuYy0zNzctXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtZGVidWcuYzozNzg6XHRpdGVyID0ga21hbGxvY19vYmooKml0ZXIpO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWRlYnVnLmMtMzc5LVx0aWYgKCFpdGVyKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM9NzQzPXZvaWQgX19pbml0IHZnaWNfc2V0X2t2bV9pbmZvKGNvbnN0IHN0cnVjdCBnaWNfa3ZtX2luZm8gKmluZm8pXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy03NDUtXHRCVUdfT04oZ2ljX2t2bV9pbmZvICE9IE5VTEwpO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYzo3NDY6XHRnaWNfa3ZtX2luZm8gPSBrbWFsbG9jX29iaigqZ2ljX2t2bV9pbmZvKTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMtNzQ3LVx0aWYgKGdpY19rdm1faW5mbylcbi0tXG5hcmNoL202OGsvZW11L25mYmxvY2suYz05Nz1zdGF0aWMgaW50IF9faW5pdCBuZmhkX2luaXRfb25lKGludCBpZCwgdTMyIGJsb2NrcywgdTMyIGJzaXplKVxuLS1cbmFyY2gvbTY4ay9lbXUvbmZibG9jay5jLTExNC1cbmFyY2gvbTY4ay9lbXUvbmZibG9jay5jOjExNTpcdGRldiA9IGttYWxsb2Nfb2JqKHN0cnVjdCBuZmhkX2RldmljZSk7XG5hcmNoL202OGsvZW11L25mYmxvY2suYy0xMTYtXHRpZiAoIWRldilcbi0tXG5hcmNoL202OGsvbW0va21hcC5jPTEwOD1zdGF0aWMgc3RydWN0IHZtX3N0cnVjdCAqZ2V0X2lvX2FyZWEodW5zaWduZWQgbG9uZyBzaXplKVxuLS1cbmFyY2gvbTY4ay9tbS9rbWFwLmMtMTEyLVxuYXJjaC9tNjhrL21tL2ttYXAuYzoxMTM6XHRhcmVhID0ga21hbGxvY19vYmooKmFyZWEpO1xuYXJjaC9tNjhrL21tL2ttYXAuYy0xMTQtXHRpZiAoIWFyZWEpXG4tLVxuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmM9MjUzPXUzMiBhdTF4eHhfZGJkbWFfY2hhbl9hbGxvYyh1MzIgc3JjaWQsIHUzMiBkZXN0aWQsXG4tLVxuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmMtMzEyLVx0XHRcdCAqL1xuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmM6MzEzOlx0XHRcdGN0cCA9IGttYWxsb2Nfb2JqKGNoYW5fdGFiX3QsIEdGUF9BVE9NSUMpO1xuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmMtMzE0LVx0XHRcdGNoYW5fdGFiX3B0cltpXSA9IGN0cDtcbi0tXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYz0zOTE9dTMyIGF1MXh4eF9kYmRtYV9yaW5nX2FsbG9jKHUzMiBjaGFuaWQsIGludCBlbnRyaWVzKVxuLS1cbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jLTQxNC1cdCAqL1xuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmM6NDE1Olx0ZGVzY19iYXNlID0gKHUzMikga21hbGxvY19vYmpzKGF1MXhfZGRtYV9kZXNjX3QsIGVudHJpZXMsXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYy00MTYtXHRcdFx0XHQgICAgICAgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xuLS1cbmFyY2gvbWlwcy9rZXJuZWwvbW9kdWxlLmM9NTk9c3RhdGljIGludCBhcHBseV9yX21pcHNfaGkxNihzdHJ1Y3QgbW9kdWxlICptZSwgdTMyICpsb2NhdGlvbiwgRWxmX0FkZHIgdixcbi0tXG5hcmNoL21pcHMva2VybmVsL21vZHVsZS5jLTc0LVx0ICovXG5hcmNoL21pcHMva2VybmVsL21vZHVsZS5jOjc1Olx0biA9IGttYWxsb2Nfb2JqKCpuKTtcbmFyY2gvbWlwcy9rZXJuZWwvbW9kdWxlLmMtNzYtXHRpZiAoIW4pXG4tLVxuYXJjaC9taXBzL2tlcm5lbC92cGUuYz0zMTE9c3RhdGljIGludCBhcHBseV9yX21pcHNfaGkxNihzdHJ1Y3QgbW9kdWxlICptZSwgdWludDMyX3QgKmxvY2F0aW9uLFxuLS1cbmFyY2gvbWlwcy9rZXJuZWwvdnBlLmMtMzIwLVx0ICovXG5hcmNoL21pcHMva2VybmVsL3ZwZS5jOjMyMTpcdG4gPSBrbWFsbG9jX29iaigqbik7XG5hcmNoL21pcHMva2VybmVsL3ZwZS5jLTMyMi1cdGlmICghbilcbi0tXG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmM9MTg4PXBhdF9xdWVyeV9tb2R1bGUodWxvbmcgcGNlbGxfbG9jLCB1bG9uZyBtb2RfaW5kZXgpXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jLTE5NS1cbmFyY2gvcGFyaXNjL2tlcm5lbC9pbnZlbnRvcnkuYzoxOTY6XHRwYV9wZGNfY2VsbCA9IGttYWxsb2Nfb2JqKCpwYV9wZGNfY2VsbCk7XG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmMtMTk3LVx0aWYgKCFwYV9wZGNfY2VsbClcbi0tXG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmM9NTMyPWFkZF9zeXN0ZW1fbWFwX2FkZHJlc3NlcyhzdHJ1Y3QgcGFyaXNjX2RldmljZSAqZGV2LCBpbnQgbnVtX2FkZHJzLCBcbi0tXG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmMtNTM4LVxuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jOjUzOTpcdGRldi1cdTAwM2VhZGRyID0ga21hbGxvY19vYmpzKCpkZXYtXHUwMDNlYWRkciwgbnVtX2FkZHJzKTtcbmFyY2gvcGFyaXNjL2tlcm5lbC9pbnZlbnRvcnkuYy01NDAtXHRpZighZGV2LVx1MDAzZWFkZHIpIHtcbi0tXG5hcmNoL3BhcmlzYy9rZXJuZWwvcHJvY2Vzc29yLmM9ODE9c3RhdGljIGludCBfX2luaXQgcHJvY2Vzc29yX3Byb2JlKHN0cnVjdCBwYXJpc2NfZGV2aWNlICpkZXYpXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3Nvci5jLTExMi1cbmFyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzb3IuYzoxMTM6XHRcdHBhX3BkY19jZWxsID0ga21hbGxvY19vYmooKnBhX3BkY19jZWxsKTtcbmFyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzb3IuYy0xMTQtXHRcdGlmICghcGFfcGRjX2NlbGwpXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jPTE0OT11bndpbmRfdGFibGVfYWRkKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgYmFzZV9hZGRyLCBcbi0tXG5hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmMtMTU5LVxuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jOjE2MDpcdHRhYmxlID0ga21hbGxvY19vYmooc3RydWN0IHVud2luZF90YWJsZSwgR0ZQX1VTRVIpO1xuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jLTE2MS1cdGlmICh0YWJsZSA9PSBOVUxMKVxuLS1cbmFyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYz00MDY9dm9pZCB1bndpbmRfZnJhbWVfaW5pdF9mcm9tX2Jsb2NrZWRfdGFzayhzdHJ1Y3QgdW53aW5kX2ZyYW1lX2luZm8gKmluZm8sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdClcbi0tXG5hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmMtNDEwLVxuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jOjQxMTpcdHIyID0ga21hbGxvY19vYmooc3RydWN0IHB0X3JlZ3MsIEdGUF9BVE9NSUMpO1xuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jLTQxMi1cdGlmICghcjIpXG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9udnJhbV82NC5jPTk4ND1pbnQgX19pbml0IG52cmFtX3NjYW5fcGFydGl0aW9ucyh2b2lkKVxuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvbnZyYW1fNjQuYy0xMDMyLVx0XHR9XG5hcmNoL3Bvd2VycGMva2VybmVsL252cmFtXzY0LmM6MTAzMzpcdFx0dG1wX3BhcnQgPSBrbWFsbG9jX29iaigqdG1wX3BhcnQpO1xuYXJjaC9wb3dlcnBjL2tlcm5lbC9udnJhbV82NC5jLTEwMzQtXHRcdGVyciA9IC1FTk9NRU07XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jPTczMT1pbnQga3ZtX3ZjcHVfaW9jdGxfY29uZmlnX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jLTc3NC1cdFx0ICAgIGNmZy1cdTAwM2VhcnJheSAvIFBBR0VfU0laRTtcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYzo3NzU6XHRwYWdlcyA9IGttYWxsb2Nfb2JqcygqcGFnZXMsIG51bV9wYWdlcyk7XG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmMtNzc2LVx0aWYgKCFwYWdlcylcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmM9ODk4PWludCBrdm1wcGNfZTUwMF90bGJfaW5pdChzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYy05MTQtXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmM6OTE1Olx0dmNwdV9lNTAwLVx1MDAzZWd0bGJfYXJjaCA9IGttYWxsb2Nfb2JqcygqdmNwdV9lNTAwLVx1MDAzZWd0bGJfYXJjaCxcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYy05MTYtXHRcdFx0XHRcdCAgICBLVk1fRTUwMF9UTEIwX1NJWkUgJiM0MzsgS1ZNX0U1MDBfVExCMV9TSVpFKTtcbi0tXG5hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmM9NDU9c3RhdGljIGludCBncm93KHJoX2luZm9fdCAqIGluZm8sIGludCBtYXhfYmxvY2tzKVxuLS1cbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYy01Ni1cbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYzo1NzpcdGJsb2NrID0ga21hbGxvY19vYmpzKHJoX2Jsb2NrX3QsIG1heF9ibG9ja3MsIEdGUF9BVE9NSUMpO1xuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jLTU4LVx0aWYgKGJsb2NrID09IE5VTEwpXG4tLVxuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jPTI1Mz1yaF9pbmZvX3QgKnJoX2NyZWF0ZSh1bnNpZ25lZCBpbnQgYWxpZ25tZW50KVxuLS1cbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYy0yNjAtXG5hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmM6MjYxOlx0aW5mbyA9IGttYWxsb2Nfb2JqKCppbmZvLCBHRlBfQVRPTUlDKTtcbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYy0yNjItXHRpZiAoaW5mbyA9PSBOVUxMKVxuLS1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9tbXVfY29udGV4dC5jPTk1PXN0YXRpYyBpbnQgaGFzaF9faW5pdF9uZXdfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvbW11X2NvbnRleHQuYy05OC1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9tbXVfY29udGV4dC5jOjk5Olx0bW0tXHUwMDNlY29udGV4dC5oYXNoX2NvbnRleHQgPSBrbWFsbG9jX29iaihzdHJ1Y3QgaGFzaF9tbV9jb250ZXh0KTtcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9tbXVfY29udGV4dC5jLTEwMC1cdGlmICghbW0tXHUwMDNlY29udGV4dC5oYXNoX2NvbnRleHQpXG4tLVxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L21tdV9jb250ZXh0LmMtMTI1LVx0XHRpZiAoY3VycmVudC1cdTAwM2VtbS1cdTAwM2Vjb250ZXh0Lmhhc2hfY29udGV4dC1cdTAwM2VzcHQpIHtcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9tbXVfY29udGV4dC5jOjEyNjpcdFx0XHRtbS1cdTAwM2Vjb250ZXh0Lmhhc2hfY29udGV4dC1cdTAwM2VzcHQgPSBrbWFsbG9jX29iaihzdHJ1Y3Qgc3VicGFnZV9wcm90X3RhYmxlKTtcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9tbXVfY29udGV4dC5jLTEyNy1cdFx0XHRpZiAoIW1tLVx1MDAzZWNvbnRleHQuaGFzaF9jb250ZXh0LVx1MDAzZXNwdCkge1xuLS1cbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYz02MjM9c3RhdGljIGludCBldmVudF91bmlxX2FkZChzdHJ1Y3QgcmJfcm9vdCAqcm9vdCwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5sLFxuLS1cbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy02NTAtXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmM6NjUxOlx0ZGF0YSA9IGttYWxsb2Nfb2JqKCpkYXRhKTtcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy02NTItXHRpZiAoIWRhdGEpXG4tLVxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jPTc1NT1zdGF0aWMgaW50IGNyZWF0ZV9ldmVudHNfZnJvbV9jYXRhbG9nKHN0cnVjdCBhdHRyaWJ1dGUgKioqZXZlbnRzXyxcbi0tXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtOTA4LVxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jOjkwOTpcdGV2ZW50cyA9IGttYWxsb2Nfb2JqcygqZXZlbnRzLCBhdHRyX21heCAmIzQzOyAxKTtcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MTAtXHRpZiAoIWV2ZW50cykge1xuLS1cbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MTQtXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmM6OTE1Olx0ZXZlbnRfZGVzY3MgPSBrbWFsbG9jX29ianMoKmV2ZW50X2Rlc2NzLCBldmVudF9pZHggJiM0MzsgMSk7XG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtOTE2LVx0aWYgKCFldmVudF9kZXNjcykge1xuLS1cbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MjAtXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmM6OTIxOlx0ZXZlbnRfbG9uZ19kZXNjcyA9IGttYWxsb2Nfb2JqcygqZXZlbnRfbG9uZ19kZXNjcywgZXZlbnRfaWR4ICYjNDM7IDEpO1xuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jLTkyMi1cdGlmICghZXZlbnRfbG9uZ19kZXNjcykge1xuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2hzdGFfbXNpLmM9MTIyPXN0YXRpYyBpbnQgaHN0YV9tc2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9oc3RhX21zaS5jLTE1My1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2hzdGFfbXNpLmM6MTU0Olx0cHBjNHh4X2hzdGFfbXNpLmlycV9tYXAgPSBrbWFsbG9jX29ianMoaW50LCBpcnFfY291bnQpO1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvaHN0YV9tc2kuYy0xNTUtXHRpZiAoIXBwYzR4eF9oc3RhX21zaS5pcnFfbWFwKSB7XG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYz00ND1zdGF0aWMgaW50IHNwdWZzX2F0dHJfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jLTQ5LVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYzo1MDpcdGF0dHIgPSBrbWFsbG9jX29iaigqYXR0cik7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jLTUxLVx0aWYgKCFhdHRyKVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9kbHBhci5jPTYyOD12b2lkIHF1ZXVlX2hvdHBsdWdfZXZlbnQoc3RydWN0IHBzZXJpZXNfaHBfZXJyb3Jsb2cgKmhwX2VycmxvZylcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZGxwYXIuYy02MzYtXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZGxwYXIuYzo2Mzc6XHR3b3JrID0ga21hbGxvY19vYmooc3RydWN0IHBzZXJpZXNfaHBfd29yaywgR0ZQX0FUT01JQyk7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZGxwYXIuYy02MzgtXHRpZiAod29yaykge1xuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odmNzZXJ2ZXIuYz0xMTk9aW50IGh2Y3NfZ2V0X3BhcnRuZXJfaW5mbyh1aW50MzJfdCB1bml0X2FkZHJlc3MsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2h2Y3NlcnZlci5jLTE2Mi1cdFx0ICogaHZjc19mcmVlX3BhcnRuZXJfaW5mbygpLiAqL1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2h2Y3NlcnZlci5jOjE2MzpcdFx0bmV4dF9wYXJ0bmVyX2luZm8gPSBrbWFsbG9jX29iaihzdHJ1Y3QgaHZjc19wYXJ0bmVyX2luZm8sXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZjc2VydmVyLmMtMTY0LVx0XHRcdFx0XHRcdEdGUF9BVE9NSUMpO1xuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyY2ZnLmM9MTQ0PXN0YXRpYyB2b2lkIHNob3dfZ3BjaV9kYXRhKHN0cnVjdCBzZXFfZmlsZSAqbSlcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbHBhcmNmZy5jLTE0OS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyY2ZnLmM6MTUwOlx0YnVmID0ga21hbGxvY19vYmooKmJ1Zik7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbHBhcmNmZy5jLTE1MS1cdGlmIChidWYgPT0gTlVMTClcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbXNpLmM9NDM1PXN0YXRpYyBpbnQgcHNlcmllc19tc2lfb3BzX3ByZXBhcmUoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwgc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9tc2kuYy00NDMtXHRzdHJ1Y3QgcHNlcmllc19tc2lfZGV2aWNlICpwc2VyaWVzX2RldiBfX2ZyZWUoa2ZyZWUpXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbXNpLmM6NDQ0Olx0XHQ9IGttYWxsb2Nfb2JqKCpwc2VyaWVzX2Rldik7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbXNpLmMtNDQ1LVx0aWYgKCFwc2VyaWVzX2Rldilcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpLmM9MTIwPXN0YXRpYyBpbnQgcHNlcmllc19wY2lfc3Jpb3ZfZW5hYmxlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1MTYgbnVtX3Zmcylcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpLmMtMTQzLVx0cGRuID0gcGNpX2dldF9wZG4ocGRldik7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpLmM6MTQ0Olx0cGRuLVx1MDAzZXBlX251bV9tYXAgPSBrbWFsbG9jX29ianMoKnBkbi1cdTAwM2VwZV9udW1fbWFwLCBudW1fdmZzKTtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wY2kuYy0xNDUtXHRpZiAoIXBkbi1cdTAwM2VwZV9udW1fbWFwKVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92YXMuYz0xMDc2PXN0YXRpYyBpbnQgX19pbml0IHBzZXJpZXNfdmFzX2luaXQodm9pZClcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvdmFzLmMtMTA4OS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92YXMuYzoxMDkwOlx0aHZfY2FwcyA9IGttYWxsb2Nfb2JqKCpodl9jYXBzKTtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92YXMuYy0xMDkxLVx0aWYgKCFodl9jYXBzKVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92aW8uYz03MDU9c3RhdGljIGludCB2aW9fY21vX2J1c19wcm9iZShzdHJ1Y3QgdmlvX2RldiAqdmlvZGV2KVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92aW8uYy03NDctXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvdmlvLmM6NzQ4Olx0XHRkZXZfZW50ID0ga21hbGxvY19vYmooc3RydWN0IHZpb19jbW9fZGV2X2VudHJ5KTtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92aW8uYy03NDktXHRcdGlmICghZGV2X2VudClcbi0tXG5hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9sYmMuYz0zNTI9c3RhdGljIGludCBmc2xfbGJjX3N5c2NvcmVfc3VzcGVuZCh2b2lkICpkYXRhKVxuLS1cbmFyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX2xiYy5jLTM2NC1cbmFyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX2xiYy5jOjM2NTpcdGN0cmwtXHUwMDNlc2F2ZWRfcmVncyA9IGttYWxsb2Nfb2JqKHN0cnVjdCBmc2xfbGJjX3JlZ3MpO1xuYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfbGJjLmMtMzY2LVx0aWYgKCFjdHJsLVx1MDAzZXNhdmVkX3JlZ3MpXG4tLVxuYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmM9MTU0OT12b2lkIF9faW5pdCBtcGljX2luaXQoc3RydWN0IG1waWMgKm1waWMpXG4tLVxuYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMtMTY0MS1cdC8qIGFsbG9jYXRlIG1lbW9yeSB0byBzYXZlIG1waWMgc3RhdGUgKi9cbmFyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jOjE2NDI6XHRtcGljLVx1MDAzZXNhdmVfZGF0YSA9IGttYWxsb2Nfb2JqcygqbXBpYy1cdTAwM2VzYXZlX2RhdGEsIG1waWMtXHUwMDNlbnVtX3NvdXJjZXMpO1xuYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMtMTY0My1cdEJVR19PTihtcGljLVx1MDAzZXNhdmVfZGF0YSA9PSBOVUxMKTtcbi0tXG5hcmNoL3Bvd2VycGMvc3lzZGV2L29mX3J0Yy5jPTIzPXZvaWQgX19pbml0IG9mX2luc3RhbnRpYXRlX3J0Yyh2b2lkKVxuLS1cbmFyY2gvcG93ZXJwYy9zeXNkZXYvb2ZfcnRjLmMtMzUtXG5hcmNoL3Bvd2VycGMvc3lzZGV2L29mX3J0Yy5jOjM2Olx0XHRcdHJlcyA9IGttYWxsb2Nfb2JqKCpyZXMpO1xuYXJjaC9wb3dlcnBjL3N5c2Rldi9vZl9ydGMuYy0zNy1cdFx0XHRpZiAoIXJlcykge1xuLS1cbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jPTY1ND1zdGF0aWMgaW50IGFkZF9yZWxvY2F0aW9uX3RvX2FjY3VtdWxhdGUoc3RydWN0IG1vZHVsZSAqbWUsIGludCB0eXBlLFxuLS1cbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jLTY2NS1cbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jOjY2NjpcdGVudHJ5ID0ga21hbGxvY19vYmooKmVudHJ5KTtcbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jLTY2Ny1cbi0tXG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUuYy02OTktXHRpZiAoIWZvdW5kKSB7XG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUuYzo3MDA6XHRcdHJlbF9oZWFkID0ga21hbGxvY19vYmooKnJlbF9oZWFkKTtcbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jLTcwMS1cbi0tXG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUuYy03MTEtXHRcdFx0YnVja2V0ID1cbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jOjcxMjpcdFx0XHRcdGttYWxsb2Nfb2JqKHN0cnVjdCB1c2VkX2J1Y2tldCk7XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQwMTAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtlcm5lbCBNZW1vcnkgQWxsb2NhdGlvbiBhbmQgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgbmV3IGBrbWFsbG9jX29iamAgbWFjcm8gaW4gdGhlIGtlcm5lbCDigJMgc2VlbXMgbGlrZSBpdCYjMzk7cyBtZWFudCB0byBjbGVhbiB1cCBjb2RlIGJ5IHJlcGxhY2luZyB0aGUgbW9yZSB2ZXJib3NlIGBrbWFsbG9jKHNpemVvZigqcHRyKSwgLi4uKWAuIE15IGluaXRpYWwgdGhvdWdodCB3YXMsIGhtbSwgaXQmIzM5O3MgYGttYWxsb2Nfb2JqKCp1dl9saXN0KWAsIG9yIG1heWJl4oCmIG5vLCB3YWl0LCBpdCYjMzk7cyBkZWZpbml0ZWx5IGBrbWFsbG9jX29iaigqcHRyKWAuIEkgbmVlZCB0byByZW1lbWJlciB0aGF0LiBBaCwgcmlnaHQsIHNvIGB1dl9saXN0ID0ga21hbGxvY19vYmooKnV2X2xpc3QpO2AgaXMgcmVhbGx5IGp1c3QgYSBzaG9ydGhhbmQgZm9yIHNvbWV0aGluZyBsaWtlIGB1dl9saXN0ID0ga21hbGxvYyhzaXplb2YoKnV2X2xpc3QpLCBHRlBfS0VSTkVMKTtgLgoKTm93LCB0aGUgaW1wb3J0YW50IHRoaW5nIGhlcmUgaXMgdGhhdCBga21hbGxvY2AgKmRvZXNuJiMzOTt0KiB6ZXJvIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LiBUaGF0JiMzOTtzIGBremFsbG9jYCYjMzk7cyBqb2IuIFRoaXMgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50IGluIGp1c3QgYSBiaXQuCgpPa2F5LCBsZXQmIzM5O3MgbG9vayBhdCBgZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmNgLiBTcGVjaWZpY2FsbHksIGF0IHRoZSBgZ2V0X3NlY3JldF9tZXRhZGF0YWAgZnVuY3Rpb24uIEhlcmUsIEkgc2VlIHRoYXQgYHV2X2xpc3RgIGlzIHplcm9lZCAqYmVmb3JlKiBjYWxsaW5nIGB1dl9maW5kX3NlY3JldGAgd2l0aCBgbWVtc2V0KHV2X2xpc3QsIDAsIHNpemVvZigqdXZfbGlzdCkpO2AuIFRoaXMgbWVhbnMgdGhhdCBgdXZfbGlzdGAgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHdlIGV2ZW4gZ2V0IHRvIHRoYXQgZnVuY3Rpb24hCgpIbW0sIHRoYXQgYWxsIHNlZW1zIGNvcnJlY3QuIE5vdywgSSBoYXZlIHRvIHdvbmRlciBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBgdXZpb19nZXRfbGlzdGAgaW4gYGRyaXZlcnMvczM5MC9jaGFyL3V2ZGV2aWNlLmNgLiBUaGF0JiMzOTtzIHRoZSBuZXh0IHBsYWNlIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzA3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMDc6XHRzdGF0aWMgaW50IHV2aW9fZ2V0X2xpc3Qodm9pZCAqenBhZ2UsIHN0cnVjdCB1dmlvX2lvY3RsX2NiICp1dl9pb2N0bClcbiAzMDg6XHR7XG4gMzA5Olx0XHRjb25zdCBzaXplX3QgZGF0YV9vZmYgPSBvZmZzZXRvZihzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QsIHNlY3JldHMpO1xuIDMxMDpcdFx0dTggX191c2VyICp1c2VyX2J1ZiA9ICh1OCBfX3VzZXIgKil1dl9pb2N0bC1cdTAwM2Vhcmd1bWVudF9hZGRyO1xuIDMxMTpcdFx0c3RydWN0IHV2X3NlY3JldF9saXN0ICpsaXN0ID0genBhZ2U7XG4gMzEyOlx0XHR1MTYgbnVtX3NlY3JldHNfc3RvcmVkID0gMDtcbiAzMTM6XHRcdHNpemVfdCB1c2VyX29mZiA9IGRhdGFfb2ZmO1xuIDMxNDpcdFx0c2l6ZV90IGNvcHlfbGVuO1xuIDMxNTpcdFxuIDMxNjpcdFx0ZG8ge1xuIDMxNzpcdFx0XHR1dl9saXN0X3NlY3JldHMobGlzdCwgbGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHgsIFx1MDAyNnV2X2lvY3RsLVx1MDAzZXV2X3JjLFxuIDMxODpcdFx0XHRcdFx0XHUwMDI2dXZfaW9jdGwtXHUwMDNldXZfcnJjKTtcbiAzMTk6XHRcdFx0aWYgKHV2X2lvY3RsLVx1MDAzZXV2X3JjICE9IFVWQ19SQ19FWEVDVVRFRCBcdTAwMjZcdTAwMjZcbiAzMjA6XHRcdFx0ICAgIHV2X2lvY3RsLVx1MDAzZXV2X3JjICE9IFVWQ19SQ19NT1JFX0RBVEEpXG4gMzIxOlx0XHRcdFx0YnJlYWs7XG4gMzIyOlx0XG4gMzIzOlx0XHRcdGNvcHlfbGVuID0gc2l6ZW9mKGxpc3QtXHUwMDNlc2VjcmV0c1swXSkgKiBsaXN0LVx1MDAzZW51bV9zZWNyX3N0b3JlZDtcbiAzMjQ6XHRcdFx0aWYgKGNvcHlfdG9fdXNlcih1c2VyX2J1ZiAmIzQzOyB1c2VyX29mZiwgbGlzdC1cdTAwM2VzZWNyZXRzLCBjb3B5X2xlbikpXG4gMzI1Olx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gMzI2Olx0XG4gMzI3Olx0XHRcdHVzZXJfb2ZmICYjNDM7PSBjb3B5X2xlbjtcbiAzMjg6XHRcdFx0bnVtX3NlY3JldHNfc3RvcmVkICYjNDM7PSBsaXN0LVx1MDAzZW51bV9zZWNyX3N0b3JlZDtcbiAzMjk6XHRcdH0gd2hpbGUgKHV2X2lvY3RsLVx1MDAzZXV2X3JjID09IFVWQ19SQ19NT1JFX0RBVEEgXHUwMDI2XHUwMDI2XG4gMzMwOlx0XHRcdCB1c2VyX29mZiAmIzQzOyBzaXplb2YoKmxpc3QpIFx1MDAzYz0gdXZfaW9jdGwtXHUwMDNlYXJndW1lbnRfbGVuKTtcbiAzMzE6XHRcbiAzMzI6XHRcdGxpc3QtXHUwMDNlbnVtX3NlY3Jfc3RvcmVkID0gbnVtX3NlY3JldHNfc3RvcmVkO1xuIDMzMzpcdFx0aWYgKGNvcHlfdG9fdXNlcih1c2VyX2J1ZiwgbGlzdCwgZGF0YV9vZmYpKVxuIDMzNDpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiAzMzU6XHRcdHJldHVybiAwO1xuIDMzNjpcdH1cbiAzMzc6XHRcbiAzMzg6XHQvKipcbiAzMzk6XHQgKiB1dmlvX2xpc3Rfc2VjcmV0cygpIC0gUGVyZm9ybSBhIExpc3QgU2VjcmV0IFVWQ1xuIDM0MDpcdCAqXG4gMzQxOlx0ICogQHV2X2lvY3RsOiBpb2N0bCBjb250cm9sIGJsb2NrXG4gMzQyOlx0ICpcbiAzNDM6XHQgKiB1dmlvX2xpc3Rfc2VjcmV0cygpIHBlcmZvcm1zIHRoZSBMaXN0IFNlY3JldCBVbHRyYXZpc29yIENhbGwuIEl0IHZlcmlmaWVzXG4gMzQ0Olx0ICogdGhhdCB0aGUgZ2l2ZW4gdXNlcnNwYWNlIGFyZ3VtZW50IGFkZHJlc3MgaXMgdmFsaWQgYW5kIGl0cyBzaXplIGlzIHNhbmUuXG4gMzQ1Olx0ICogRXZlcnkgb3RoZXIgY2hlY2sgaXMgbWFkZSBieSB0aGUgVWx0cmF2aXNvciAoVVYpIGFuZCB3b24mIzM5O3QgcmVzdWx0IGluIGFcbiAzNDY6XHQgKiBuZWdhdGl2ZSByZXR1cm4gdmFsdWUuIEl0IGJ1aWxkcyB0aGUgcmVxdWVzdCwgcGVyZm9ybXMgdGhlIFVWLWNhbGwsIGFuZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTQ5NQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIHRoZSBNZW1vcnkgQWxsb2NhdGlvbiBhbmQgVXNhZ2UgaW4gYHV2aW9fZ2V0X2xpc3RgKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGB1dmlvX2dldF9saXN0YCBmdW5jdGlvbi4gSSBzZWUgdGhhdCBgenBhZ2VgIGlzIGJlaW5nIHBhc3NlZCBpbiBhcyBhIGBsaXN0YC4gTm93LCBgenBhZ2VgLCBmcm9tIHdoYXQgSSByZWNhbGwgb2YgdGhlIGNvZGViYXNlLCBpcyBhIGNodW5rIG9mIG1lbW9yeSwgYSBwYWdlIHNwZWNpZmljYWxseS4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiBJcyB0aGlzIG1lbW9yeSBndWFyYW50ZWVkIHRvIGJlIGluaXRpYWxpemVkLCBvciBpcyBpdCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkLCBob2xkaW5nIGdhcmJhZ2UgZGF0YT8gVGhpcyBpcyBjcnVjaWFsIGZvciBhdm9pZGluZyB1bmV4cGVjdGVkIGJlaGF2aW9yIGRvd24gdGhlIGxpbmUsIHBvdGVudGlhbGx5IHNlY3VyaXR5IGlzc3Vlcywgb3Igc2ltcGx5IGRhdGEgY29ycnVwdGlvbiBpZiB0aGUgY29kZSByZWxpZXMgb24gYSB6ZXJvZWQgcGFnZS4gSSByZWFsbHkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYHpwYWdlYCBpcyBwcm9wZXJseSBjbGVhcmVkLiBUaGUgYmVzdCB0aGluZyB0byBkbyBpcyB0cmFjayBkb3duIHdoZXJlIGB1dmlvX2dldF9saXN0YCBpcyBjYWxsZWQgZnJvbS4gVGhhdCBjYWxsIHNpdGUgd2lsbCBnaXZlIG1vcmUgY29udGV4dCBvbiBob3cgdGhlIGB6cGFnZWAgaXMgbWFuYWdlZCBhbmQgYWxsb2NhdGVkLCBob3BlZnVsbHkgYW5zd2VyaW5nIHRoaXMgYWxsIGltcG9ydGFudCBxdWVzdGlvbiBvbiBpbml0aWFsIHN0YXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1dmlvX2dldF9saXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jPTI2OT1zdGF0aWMgaW50IHV2aW9fYWRkX3NlY3JldChzdHJ1Y3QgdXZpb19pb2N0bF9jYiAqdXZfaW9jdGwpXG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYy0zMDYtICovXG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jOjMwNzpzdGF0aWMgaW50IHV2aW9fZ2V0X2xpc3Qodm9pZCAqenBhZ2UsIHN0cnVjdCB1dmlvX2lvY3RsX2NiICp1dl9pb2N0bClcbmRyaXZlcnMvczM5MC9jaGFyL3V2ZGV2aWNlLmMtMzA4LXtcbi0tXG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jPTM2NT1zdGF0aWMgaW50IHV2aW9fbGlzdF9zZWNyZXRzKHN0cnVjdCB1dmlvX2lvY3RsX2NiICp1dl9pb2N0bClcbi0tXG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jLTM3Ny1cbmRyaXZlcnMvczM5MC9jaGFyL3V2ZGV2aWNlLmM6Mzc4Olx0cmMgPSB1dmlvX2dldF9saXN0KHpwYWdlLCB1dl9pb2N0bCk7XG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jLTM3OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYwNTMKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZDoKCioqRGl2aW5nIGludG8gdGhlIGB1dmlvX2xpc3Rfc2VjcmV0c2AgQ29tbWFuZCoqCgpBbHJpZ2h0LCBgdXZpb19saXN0X3NlY3JldHNgLiBMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzLCAmIzM0O1JpZ2h0LCBJIGtub3cgdGhpcyBvbmUuJiMzNDsgVGhhdCBjb21tYW5kIGlzIGxpa2VseSBwYXJ0IG9mIHRoZSBgdXZpb2AgdXRpbGl0eSwgd2hhdGV2ZXIgc3lzdGVtIGl0IG1pZ2h0IGJlIHBhcnQgb2YuIFRoZSAmIzM5O2xpc3QmIzM5OyBwYXJ0IGlzIHByZXR0eSBzZWxmLWV4cGxhbmF0b3J5IOKAkyB3ZSYjMzk7cmUgZW51bWVyYXRpbmcgc29tZXRoaW5nLiBBbmQgJiMzOTtzZWNyZXRzJiMzOTvigKYgd2VsbCwgdGhhdCBjb3VsZCBtZWFuIGEgcmFuZ2Ugb2YgdGhpbmdzLCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQuCgpNeSBleHBlcnRpc2UgaW1tZWRpYXRlbHkga2lja3MgaW4gdG8gaGVscCBtZSBjYXRlZ29yaXplIG15IHRoaW5raW5nOgoKKiAgICoqUG90ZW50aWFsIENvbnRleHQ6KiogSSBuZWVkIHRvIGltbWVkaWF0ZWx5IGNvbnNpZGVyIHRoZSBzeXN0ZW0gdGhpcyBpcyBwYXJ0IG9mLiBJcyBpdCBhIGNsb3VkIGVudmlyb25tZW50PyBBIGRldmVsb3BtZW50IGZyYW1ld29yaz8gSXMgaXQgcmVsYXRlZCB0byBjb250YWluZXJpemF0aW9uIG9yIEt1YmVybmV0ZXM/IFVuZGVyc3RhbmRpbmcgdGhlIGVudmlyb25tZW50IGluZm9ybXMgdGhlICp0eXBlKiBvZiBzZWNyZXRzIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IChBUEkga2V5cywgcGFzc3dvcmRzLCBjZXJ0aWZpY2F0ZXMsIGV0Yy4pIGFuZCB3aGVyZSB0aGV5IGFyZSBzdG9yZWQsIGJlY2F1c2UgdGhlIGB1dmlvYCBmdW5jdGlvbmFsaXR5IGRpY3RhdGVzIGhvdyB3ZSBpbnRlcmFjdCB3aXRoIHRob3NlIGl0ZW1zLgoqICAgKipTZWN1cml0eSBJbXBsaWNhdGlvbnM6KiogTGlzdGluZyBzZWNyZXRzIGlzIGluaGVyZW50bHkgc2Vuc2l0aXZlLiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IHBlcm1pc3Npb25zIGFuZCBhY2Nlc3MgY29udHJvbHMuIEkmIzM5O2QgZXhwZWN0IHRoaXMgY29tbWFuZCB0byByZXF1aXJlIGF1dGhlbnRpY2F0aW9uIGFuZCBhdXRob3JpemF0aW9uLiBJdCYjMzk7cyBjcnVjaWFsIHRoaXMgdG9vbCBpcyBjb25maWd1cmVkIHRvIG9ubHkgcmV2ZWFsIHNlY3JldHMgdG8gdGhlIHJpZ2h0IHVzZXJzIGFuZCBwcm9jZXNzZXMuCiogICAqKkRhdGEgRm9ybWF0ICZhbXA7IE91dHB1dDoqKiBXaGF0IHdpbGwgdGhlIG91dHB1dCBsb29rIGxpa2U/IFdpbGwgaXQgYmUgYSBzaW1wbGUgbGlzdCBvZiBuYW1lcywgb3IgbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiAoZGVzY3JpcHRpb25zLCBhc3NvY2lhdGVkIGFwcGxpY2F0aW9ucywgdXNhZ2UgZGF0YSwgZXRjLik/IEkmIzM5O2xsIHByb2JhYmx5IGJlIGxvb2tpbmcgZm9yIGZvcm1hdHRpbmcgb3B0aW9ucyBsaWtlIEpTT04sIFlBTUwsIG9yIGEgc3RydWN0dXJlZCB0YWJsZSBmb3IgZWFzeSBwYXJzaW5nIGFuZCBhdXRvbWF0aW9uLiBXaGF0IGZsYWdzIGFyZSBzdXBwb3J0ZWQgdG8gdGFpbG9yIHRoaXMgb3V0cHV0PwoqICAgKipFcnJvciBIYW5kbGluZzoqKiBXaGF0IGhhcHBlbnMgaWYgSSBkb24mIzM5O3QgaGF2ZSB0aGUgcHJvcGVyIHBlcm1pc3Npb25zPyBPciBpZiB0aGVyZSYjMzk7cyBhbiBlcnJvciByZXRyaWV2aW5nIHRoZSBzZWNyZXRzPyBHb29kIGxvZ2dpbmcgYW5kIGVycm9yIG1lc3NhZ2VzIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHRvb2wmIzM5O3MgYmVoYXZpb3IgYW5kIHRyb3VibGVzaG9vdGluZyBhbnkgaXNzdWVzLgoqICAgKipVc2UgQ2FzZXM6KiogV2hhdCBhcmUgdGhlIHR5cGljYWwgcmVhc29ucyBmb3IgbGlzdGluZyBzZWNyZXRzPyBEZWJ1Z2dpbmcgYW4gYXBwbGljYXRpb24/IEF1ZGl0aW5nIHNlY3VyaXR5IGNvbmZpZ3VyYXRpb25zPyBBdXRvbWF0aW5nIHNlY3JldCByb3RhdGlvbj8gVGhlIHVzZSBjYXNlIHdpbGwgaW5mb3JtIGhvdyBJIGFwcHJvYWNoIHRoaXMgY29tbWFuZC4KKiAgICoqQXNzdW1lZCBLbm93bGVkZ2U6KiogSXQmIzM5O3MgbGlrZWx5IEkgYWxyZWFkeSB1bmRlcnN0YW5kIGhvdyB0byBtYW5hZ2Ugc2VjcmV0cyB3aXRoaW4gdGhpcyBlY29zeXN0ZW0uIElmIGl0JiMzOTtzIGEgZGVkaWNhdGVkIHNlY3JldHMgbWFuYWdlciwgSSBsaWtlbHkga25vdyB0aGUga2V5IGNvbmNlcHRzIG9mIHRoZSB0ZWNobm9sb2d5LgoKU28sIG92ZXJhbGwsIG15IG1pbmQgaXMgaW1tZWRpYXRlbHkgZm9ybXVsYXRpbmcgcXVlc3Rpb25zIGFuZCBoeXBvdGhlc2VzLiBJJiMzOTttIHJlYWR5IHRvIGRpZyBpbnRvIHRoZSBkb2N1bWVudGF0aW9uLCBvciB0cnkgdGhlIGNvbW1hbmQgZGlyZWN0bHkgdG8gc2VlIHdoYXQgaW5mb3JtYXRpb24gaXQgcmV2ZWFscy4gSXQgYWxsIGNvbWVzIGRvd24gdG8gdGhlIGNvbnRleHQgSSBrbm93IGFuZCBob3cgbXVjaCBjb250cm9sIEkgaGF2ZSBvdmVyIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jaGFyL3V2ZGV2aWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM2NTpcdHN0YXRpYyBpbnQgdXZpb19saXN0X3NlY3JldHMoc3RydWN0IHV2aW9faW9jdGxfY2IgKnV2X2lvY3RsKVxuIDM2NjpcdHtcbiAzNjc6XHRcdHZvaWQgKnpwYWdlO1xuIDM2ODpcdFx0aW50IHJjO1xuIDM2OTpcdFxuIDM3MDpcdFx0aWYgKHV2X2lvY3RsLVx1MDAzZWFyZ3VtZW50X2xlbiA9PSAwIHx8XG4gMzcxOlx0XHQgICAgdXZfaW9jdGwtXHUwMDNlYXJndW1lbnRfbGVuICUgVVZJT19MSVNUX1NFQ1JFVFNfTEVOICE9IDApXG4gMzcyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDM3MzpcdFxuIDM3NDpcdFx0enBhZ2UgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTtcbiAzNzU6XHRcdGlmICghenBhZ2UpXG4gMzc2Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDM3NzpcdFxuIDM3ODpcdFx0cmMgPSB1dmlvX2dldF9saXN0KHpwYWdlLCB1dl9pb2N0bCk7XG4gMzc5Olx0XG4gMzgwOlx0XHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpenBhZ2UpO1xuIDM4MTpcdFx0cmV0dXJuIHJjO1xuIDM4MjpcdH1cbiAzODM6XHRcbiAzODQ6XHQvKipcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY5MzIKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxNjIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBDb2RlIGFuZCBWdWxuZXJhYmlsaXRpZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIGB6cGFnZWAgaXMgZXhwbGljaXRseSB6ZXJvZWQgd2l0aCBgZ2V0X3plcm9lZF9wYWdlYC4gR29vZCwgdGhhdCBlbGltaW5hdGVzIGEgd2hvbGUgY2xhc3Mgb2YgcG90ZW50aWFsIHByb2JsZW1zIHJpZ2h0IG9mZiB0aGUgYmF0LiBUaGVuIEkgc3RhcnRlZCB0byB0aGluaywgJiMzNDtXaGF0IGFib3V0IGB1dl9saXN0X3NlY3JldHNgPyBDb3VsZCBpdCBiZSB3cml0aW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSBzb21ld2hlcmU/JiMzNDsgQnV0LCBgdXZfbGlzdF9zZWNyZXRzYCBpcyBhIGh5cGVydmlzb3IgY2FsbCwgc28gdGhlIGh5cGVydmlzb3IgaXMgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIGl0IHdyaXRlcyBpbml0aWFsaXplZCBkYXRhLiBFdmVuIGlmIGl0IGRvZXNuJiMzOTt0LCB0aGF0JiMzOTtzIG5vdCBhIGtlcm5lbC1zcGFjZSBidWcuCgpCdXQsIHdoZW4gSSBleGFtaW5lIGB1dl9saXN0X3NlY3JldHNgIGNhbGxlZCBpbiBgdXZpb19nZXRfbGlzdGAsIEkgc2VlIHRoYXQgaXQgdXNlcyBgbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4YCBhcyBgc3RhcnRfaWR4YC4gSW4gdGhlIGZpcnN0IGl0ZXJhdGlvbiwgYGxpc3QtJmd0O25leHRfc2VjcmV0X2lkeGAgaXMgemVybywgYmVjYXVzZSB0aGUgcGFnZSBgenBhZ2VgIGlzIHplcm9lZCwgYW5kIGl0IGlzIHplcm8taW5pdGlhbGl6ZWQuIEFmdGVyIHRoZSBjYWxsIHRvIGB1dl9saXN0X3NlY3JldHNgLCBpdCB1cGRhdGVzIGBsaXN0LSZndDtuZXh0X3NlY3JldF9pZHhgIGlmIHRoZXJlJiMzOTtzIG1vcmUgZGF0YS4gVGhlbiBgY29weV90b191c2VyYCBjb3BpZXMgYGxpc3QtJmd0O3NlY3JldHNgIHRvIHVzZXIgc3BhY2UuIEl0IGNvcGllcyBleGFjdGx5IGBsaXN0LSZndDtudW1fc2Vjcl9zdG9yZWRgIGl0ZW1zLiBUaGUgemVyb2luZyBvZiB0aGUgcGFnZSBtZWFucyBhbnl0aGluZyAqbm90KiB3cml0dGVuIHdpbGwgYmUgemVyby4gU2luY2UgdGhlIGh5cGVydmlzb3IgaXMgKnN1cHBvc2VkKiB0byB3cml0ZSB0aG9zZSBlbGVtZW50cywgYW55IHVud3JpdHRlbiBlbGVtZW50cyBhcmUgemVyby4gU28gSSBhbSBjb25maWRlbnQsIGF0IHRoaXMgcG9pbnQsIHRoYXQgdGhlcmUmIzM5O3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhayB0byB1c2VyIHNwYWNlIGhlcmUuCgpOb3csIGxldCYjMzk7cyByZS1leGFtaW5lIHRoZSBwYXRjaCBpdHNlbGYuCgpgYGBjCiAJdTE2IGk7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgbGlzdC0mZ3Q7dG90YWxfbnVtX3NlY3JldHM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBsaXN0LSZndDtudW1fc2Vjcl9zdG9yZWQ7IGkmIzQzOyYjNDM7KSB7CiAJCWlmIChtZW1jbXAoc2VjcmV0X2lkLCBsaXN0LSZndDtzZWNyZXRzW2ldLmlkLCBVVl9TRUNSRVRfSURfTEVOKSA9PSAwKSB7CiAJCQkqc2VjcmV0ID0gbGlzdC0mZ3Q7c2VjcmV0c1tpXS5oZHI7CiAJCQlyZXR1cm4gMDsKYGBgCgpBaCwgdGhpcyBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0eS4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzIHVzaW5nIGBsaXN0LSZndDt0b3RhbF9udW1fc2VjcmV0c2AgdG8gaXRlcmF0ZSB0aHJvdWdoIGBsaXN0LSZndDtzZWNyZXRzYC4gVGhlIGBsaXN0LSZndDtzZWNyZXRzYCBhcnJheSBoYXMgYSBmaXhlZCBzaXplIG9mIDg1IGVsZW1lbnRzLiBJZiBgdG90YWxfbnVtX3NlY3JldHNgIGV4Y2VlZHMgODUsIHRoaXMgbG9vcCB3b3VsZCBiZSByZWFkaW5nIHBhc3QgdGhlIGVuZCBvZiB0aGUgYXJyYXksIGFuZCB0aGVyZWZvcmUgdGhlIGVuZCBvZiB0aGUgYGxpc3RgIHN0cnVjdHVyZSwgY2F1c2luZyBhbiBvdXQtb2YtYm91bmRzIHJlYWQuIFRoaXMgaXMgYSBjbGVhciBjYXNlIGZvciBLQVNBTiB0byBjYXRjaC4KClRoZSBzZWNvbmQgcGFydDoKCmBgYGMKLQl1MTYgc3RhcnRfaWR4ID0gMDsKJiM0MzsJdTE2IHN0YXJ0X2lkeDsKIAl1MTYgbGlzdF9yYzsKIAlpbnQgcmV0OwogCiYjNDM7CWxpc3QtJmd0O25leHRfc2VjcmV0X2lkeCA9IDA7CiYjNDM7CiAJZG8gewomIzQzOwkJc3RhcnRfaWR4ID0gbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4OwogCQl1dl9saXN0X3NlY3JldHMobGlzdCwgc3RhcnRfaWR4LCAmYW1wO2xpc3RfcmMsIE5VTEwpOwogCQlpZiAobGlzdF9yYyAhPSBVVkNfUkNfRVhFQ1VURUQgJmFtcDsmYW1wOyBsaXN0X3JjICE9IFVWQ19SQ19NT1JFX0RBVEEpIHsKIAkJCWlmIChsaXN0X3JjID09IFVWQ19SQ19JTlZfQ01EKQpAQCAtNzk2LDcgJiM0Mzs3OTksNiBAQCBpbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLAogCQlyZXQgPSBmaW5kX3NlY3JldF9pbl9wYWdlKHNlY3JldF9pZCwgbGlzdCwgc2VjcmV0KTsKIAkJaWYgKHJldCA9PSAwKQogCQkJcmV0dXJuIHJldDsKLQkJc3RhcnRfaWR4ID0gbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4OwogCX0gd2hpbGUgKGxpc3RfcmMgPT0gVVZDX1JDX01PUkVfREFUQSAmYW1wOyZhbXA7IHN0YXJ0X2lkeCAmbHQ7IGxpc3QtJmd0O25leHRfc2VjcmV0X2lkeCk7CmBgYAoKT2theSwgdGhlIG9yaWdpbmFsIGNvZGUgaGFkIGEgbG9naWMgYnVnLiBgc3RhcnRfaWR4YCB3YXMgaW5pdGlhbGl6ZWQgdG8gMCBhbmQgYHV2X2xpc3Rfc2VjcmV0c2Agd2FzIGNhbGxlZC4gVGhlbiwgYHN0YXJ0X2lkeGAgd2FzIGFzc2lnbmVkIHRoZSB2YWx1ZSBvZiBgbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4YC4gVGhlbiB0aGUgYHdoaWxlYCBsb29wIGNvbmRpdGlvbiBjaGVja2VkIGlmIGBzdGFydF9pZHggJmx0OyBsaXN0LSZndDtuZXh0X3NlY3JldF9pZHhgLiBCdXQgc2luY2UgYHN0YXJ0X2lkeGAgd2FzIGp1c3QgYXNzaWduZWQgdGhlIHZhbHVlIG9mIGBsaXN0LSZndDtuZXh0X3NlY3JldF9pZHhgLCB0aGlzIGNvbmRpdGlvbiB3b3VsZCAqYWx3YXlzKiBiZSBmYWxzZSBpbiB0aGUgZmlyc3QgaXRlcmF0aW9uLiBTbyB0aGUgbG9vcCB3b3VsZCB0ZXJtaW5hdGUgYWZ0ZXIgb25seSB0aGUgZmlyc3QgaXRlcmF0aW9uLCBldmVuIGlmIHRoZXJlIHdhcyBtb3JlIGRhdGEgKGBVVkNfUkNfTU9SRV9EQVRBYCkuIFRoZSBmaXggZW5zdXJlcyB0aGUgbG9vcCBjb250aW51ZXMgdG8gaXRlcmF0ZS4KCklzIHRoZXJlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGhlcmU/IExldCYjMzk7cyBjaGVjay4gSW4gdGhlIG9yaWdpbmFsIGNvZGUsIGBsaXN0LSZndDtuZXh0X3NlY3JldF9pZHhgIGlzIHJlYWQgYXQgdGhlIGVuZCBvZgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3V2X2ZpbmRfc2VjcmV0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oPTYxMz1zdGF0aWMgaW5saW5lIGludCB1dl9yZW1vdmVfc2hhcmVkKHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC02MTctXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaDo2MTg6aW50IHV2X2ZpbmRfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTYxOS1cdFx0ICAgc3RydWN0IHV2X3NlY3JldF9saXN0ICpsaXN0LFxuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYz03NTc9c3RhdGljIGludCBmaW5kX3NlY3JldF9pbl9wYWdlKGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzcyLS8qKlxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjc3MzogKiB1dl9maW5kX3NlY3JldCgpIC0gc2VhcmNoIHNlY3JldCBtZXRhZGF0YSBmb3IgYSBnaXZlbiBzZWNyZXQgaWQuXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzc0LSAqIEBzZWNyZXRfaWQ6IHNlYXJjaCBwYXR0ZXJuLlxuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03NzktICovXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6NzgwOmludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzgxLVx0XHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QsXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTgwNS19XG5hcmNoL3MzOTAva2VybmVsL3V2LmM6ODA2OkVYUE9SVF9TWU1CT0xfR1BMKHV2X2ZpbmRfc2VjcmV0KTtcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy04MDctXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9MjA9TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O3MzOTAgcHJvdGVjdGVkIGtleSBVViBoYW5kbGVyXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yMi0vKlxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6MjM6ICogT25lIHByZS1hbGxvY2F0ZWQgdXZfc2VjcmV0X2xpc3QgZm9yIHVzZSB3aXRoIHV2X2ZpbmRfc2VjcmV0KClcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI0LSAqL1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTkzPXN0YXRpYyBpbnQgZ2V0X3NlY3JldF9tZXRhZGF0YShjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtOTktXHRtZW1zZXQodXZfbGlzdCwgMCwgc2l6ZW9mKCp1dl9saXN0KSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoxMDA6XHRyYyA9IHV2X2ZpbmRfc2VjcmV0KHNlY3JldF9pZCwgdXZfbGlzdCwgc2VjcmV0KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTEwMS1cdG11dGV4X3VubG9jayhcdTAwMjZ1dl9saXN0X211dGV4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAyOTcKCQkJCQkJCW91dHB1dDogMzI4CgkJCQkJCQl0aG91Z2h0czogMzc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFNlY3VyaXR5IEZpeCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCB0aGlzIHBhdGNoIGlzIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIHZ1bG5lcmFiaWxpdHkgbGllcyB3aXRoaW4gYGRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jYCwgc3BlY2lmaWNhbGx5IGluIGhvdyB0aGUgYHV2X2ZpbmRfc2VjcmV0YCBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgYHV2X2xpc3RgIHN0cnVjdHVyZS4gSSYjMzk7bSBub3RpbmcgdGhhdCB0aGUgY29kZSBpcyBvbmx5IGNhbGxlZCBmcm9tIGBnZXRfc2VjcmV0X21ldGFkYXRhYC4gTW9zdCBpbXBvcnRhbnRseSwgdGhlIGB1dl9saXN0YCBpcyBleHBsaWNpdGx5IHplcm9lZCBvdXQgYmVmb3JlIGJlaW5nIHVzZWQuIFRoYXQmIzM5O3Mga2V5LgoKU28sIHRoZSBmaXJzdCBjaGFuZ2UgaW4gdGhlIGBmaW5kX3NlY3JldF9pbl9wYWdlYCBmdW5jdGlvbiBhZGRyZXNzZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkLiBUaGUgb3JpZ2luYWwgbG9vcCBpbmNvcnJlY3RseSB1c2VkIGBsaXN0LSZndDt0b3RhbF9udW1fc2VjcmV0c2AgdG8gaXRlcmF0ZSwgd2hpY2ggY291bGQgZXhjZWVkIHRoZSBib3VuZHMgb2YgdGhlIGBsaXN0LSZndDtzZWNyZXRzYCBhcnJheSAobGltaXRlZCB0byA4NSBlbGVtZW50cykuIFRoaXMgbWVhbnMgYSBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSB0cmlnZ2VyZWQsIHdoaWNoIGlzIGdyZWF0IGJlY2F1c2UgaXQgbWVhbnMgdGhhdCBwcm9ibGVtIGlzIGVhc3kgdG8gZGV0ZWN0LgoKVGhlIHNlY29uZCBjaGFuZ2UgaW4gYHV2X2ZpbmRfc2VjcmV0YCBmaXhlcyBhIGxvZ2ljIGJ1Zy4gVGhlIGluaXRpYWwgbG9vcCBjb25kaXRpb24gdXNlZCBgc3RhcnRfaWR4ICZsdDsgbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4YC4gSG93ZXZlciwgYHN0YXJ0X2lkeGAgd2FzIGFzc2lnbmVkIGBsaXN0LSZndDtuZXh0X3NlY3JldF9pZHhgIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgY2hlY2ssIHNvIHRoZSBsb29wIHdhcyBuZXZlciBleGVjdXRlZC4gVGhlIGNvcnJlY3RlZCB2ZXJzaW9uIGNvcnJlY3RseSBpbml0aWFsaXplcyBhbmQgdXBkYXRlcyBgc3RhcnRfaWR4YCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsb29wLgoKQmVjYXVzZSB0aGUgc3RydWN0dXJlIHBhc3NlZCB0byBgdXZfZmluZF9zZWNyZXRgIGlzIGluaXRpYWxpemVkIHRvIHplcm8gYmVmb3JlIHVzZSwgdGhlcmUgYXJlbiYjMzk7dCBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MsIGFuZCBzbyBgTmVlZHNLTVNBTmAgaXMgZmFsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyB0d28gaXNzdWVzOlxuMS4gQW4gb3V0LW9mLWJvdW5kcyByZWFkIGluIGBmaW5kX3NlY3JldF9pbl9wYWdlKClgLiBUaGUgbG9vcCBwcmV2aW91c2x5IHVzZWQgYGxpc3QtXHUwMDNldG90YWxfbnVtX3NlY3JldHNgIGluc3RlYWQgb2YgYGxpc3QtXHUwMDNlbnVtX3NlY3Jfc3RvcmVkYC4gU2luY2UgYGxpc3QtXHUwMDNlc2VjcmV0c2AgaXMgYSBmaXhlZC1zaXplIGFycmF5IG9mIDg1IGVsZW1lbnRzLCBpZiBgdG90YWxfbnVtX3NlY3JldHNgIGV4Y2VlZHMgODUsIHRoZSBsb29wIHJlYWRzIHBhc3QgdGhlIGVuZCBvZiB0aGUgYGxpc3RgIHN0cnVjdHVyZSAod2hpY2ggaXMgZXhhY3RseSBvbmUgcGFnZSBpbiBzaXplKS4gVGhpcyBpcyBhIGNsYXNzaWMgb3V0LW9mLWJvdW5kcyByZWFkIHRoYXQgaXMgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4uXG4yLiBBIGxvZ2ljIGJ1ZyBpbiBgdXZfZmluZF9zZWNyZXQoKWAgd2hlcmUgdGhlIGxvb3AgY29uZGl0aW9uIGBzdGFydF9pZHggXHUwMDNjIGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4YCB3YXMgYWx3YXlzIGZhbHNlIGJlY2F1c2UgYHN0YXJ0X2lkeGAgd2FzIGFzc2lnbmVkIGBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeGAgaW1tZWRpYXRlbHkgcHJpb3IgdG8gdGhlIGNoZWNrLiBUaGUgZml4IGNvcnJlY3RseSBpbml0aWFsaXplcyBhbmQgdXBkYXRlcyBgc3RhcnRfaWR4YCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsb29wLlxuXG5UaGUgYGxpc3RgIHN0cnVjdHVyZSBwYXNzZWQgdG8gYHV2X2ZpbmRfc2VjcmV0KClgIGlzIGZ1bGx5IHplcm9lZCBiZWZvcmUgdXNlICh2aWEgYG1lbXNldCh1dl9saXN0LCAwLCBzaXplb2YoKnV2X2xpc3QpKWAgaW4gYGdldF9zZWNyZXRfbWV0YWRhdGEoKWApLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMsIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UgaW50cm9kdWNlZCBvciBmaXhlZCBieSB0aGlzIHBhdGNoLiBTdGFuZGFyZCBLQVNBTiBpcyBwZXJmZWN0bHkgc3VpdGVkIHRvIGNhdGNoIHRoZSBvdXQtb2YtYm91bmRzIHJlYWQsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyB0d28gaXNzdWVzOlxuMS4gQW4gb3V0LW9mLWJvdW5kcyByZWFkIGluIGBmaW5kX3NlY3JldF9pbl9wYWdlKClgLiBUaGUgbG9vcCBwcmV2aW91c2x5IHVzZWQgYGxpc3QtXHUwMDNldG90YWxfbnVtX3NlY3JldHNgIGluc3RlYWQgb2YgYGxpc3QtXHUwMDNlbnVtX3NlY3Jfc3RvcmVkYC4gU2luY2UgYGxpc3QtXHUwMDNlc2VjcmV0c2AgaXMgYSBmaXhlZC1zaXplIGFycmF5IG9mIDg1IGVsZW1lbnRzLCBpZiBgdG90YWxfbnVtX3NlY3JldHNgIGV4Y2VlZHMgODUsIHRoZSBsb29wIHJlYWRzIHBhc3QgdGhlIGVuZCBvZiB0aGUgYGxpc3RgIHN0cnVjdHVyZSAod2hpY2ggaXMgZXhhY3RseSBvbmUgcGFnZSBpbiBzaXplKS4gVGhpcyBpcyBhIGNsYXNzaWMgb3V0LW9mLWJvdW5kcyByZWFkIHRoYXQgaXMgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4uXG4yLiBBIGxvZ2ljIGJ1ZyBpbiBgdXZfZmluZF9zZWNyZXQoKWAgd2hlcmUgdGhlIGxvb3AgY29uZGl0aW9uIGBzdGFydF9pZHggXHUwMDNjIGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4YCB3YXMgYWx3YXlzIGZhbHNlIGJlY2F1c2UgYHN0YXJ0X2lkeGAgd2FzIGFzc2lnbmVkIGBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeGAgaW1tZWRpYXRlbHkgcHJpb3IgdG8gdGhlIGNoZWNrLiBUaGUgZml4IGNvcnJlY3RseSBpbml0aWFsaXplcyBhbmQgdXBkYXRlcyBgc3RhcnRfaWR4YCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsb29wLlxuXG5UaGUgYGxpc3RgIHN0cnVjdHVyZSBwYXNzZWQgdG8gYHV2X2ZpbmRfc2VjcmV0KClgIGlzIGZ1bGx5IHplcm9lZCBiZWZvcmUgdXNlICh2aWEgYG1lbXNldCh1dl9saXN0LCAwLCBzaXplb2YoKnV2X2xpc3QpKWAgaW4gYGdldF9zZWNyZXRfbWV0YWRhdGEoKWApLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMsIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UgaW50cm9kdWNlZCBvciBmaXhlZCBieSB0aGlzIHBhdGNoLiBTdGFuZGFyZCBLQVNBTiBpcyBwZXJmZWN0bHkgc3VpdGVkIHRvIGNhdGNoIHRoZSBvdXQtb2YtYm91bmRzIHJlYWQsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTI6MTUuMjE3OTgyMzQ1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIwODUzMDgyMjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBLRVlcIixcbiAgICBcIlBLRVlfVVZcIixcbiAgICBcIlMzOTBfVVZfVUFQSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInV2X2ZpbmRfc2VjcmV0XCIsXG4gICAgXCJwa2V5X2hhbmRsZXJfdmVyaWZ5X2tleVwiLFxuICAgIFwicGtleV9oYW5kbGVyX2tleV90b19wcm90a2V5XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgdHdvIGlzc3VlczpcXG4xLiBBbiBvdXQtb2YtYm91bmRzIHJlYWQgaW4gYGZpbmRfc2VjcmV0X2luX3BhZ2UoKWAuIFRoZSBsb29wIHByZXZpb3VzbHkgdXNlZCBgbGlzdC1cXHUwMDNldG90YWxfbnVtX3NlY3JldHNgIGluc3RlYWQgb2YgYGxpc3QtXFx1MDAzZW51bV9zZWNyX3N0b3JlZGAuIFNpbmNlIGBsaXN0LVxcdTAwM2VzZWNyZXRzYCBpcyBhIGZpeGVkLXNpemUgYXJyYXkgb2YgODUgZWxlbWVudHMsIGlmIGB0b3RhbF9udW1fc2VjcmV0c2AgZXhjZWVkcyA4NSwgdGhlIGxvb3AgcmVhZHMgcGFzdCB0aGUgZW5kIG9mIHRoZSBgbGlzdGAgc3RydWN0dXJlICh3aGljaCBpcyBleGFjdGx5IG9uZSBwYWdlIGluIHNpemUpLiBUaGlzIGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHJlYWQgdGhhdCBpcyByZWxpYWJseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTi5cXG4yLiBBIGxvZ2ljIGJ1ZyBpbiBgdXZfZmluZF9zZWNyZXQoKWAgd2hlcmUgdGhlIGxvb3AgY29uZGl0aW9uIGBzdGFydF9pZHggXFx1MDAzYyBsaXN0LVxcdTAwM2VuZXh0X3NlY3JldF9pZHhgIHdhcyBhbHdheXMgZmFsc2UgYmVjYXVzZSBgc3RhcnRfaWR4YCB3YXMgYXNzaWduZWQgYGxpc3QtXFx1MDAzZW5leHRfc2VjcmV0X2lkeGAgaW1tZWRpYXRlbHkgcHJpb3IgdG8gdGhlIGNoZWNrLiBUaGUgZml4IGNvcnJlY3RseSBpbml0aWFsaXplcyBhbmQgdXBkYXRlcyBgc3RhcnRfaWR4YCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsb29wLlxcblxcblRoZSBgbGlzdGAgc3RydWN0dXJlIHBhc3NlZCB0byBgdXZfZmluZF9zZWNyZXQoKWAgaXMgZnVsbHkgemVyb2VkIGJlZm9yZSB1c2UgKHZpYSBgbWVtc2V0KHV2X2xpc3QsIDAsIHNpemVvZigqdXZfbGlzdCkpYCBpbiBgZ2V0X3NlY3JldF9tZXRhZGF0YSgpYCkuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcywgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZSBpbnRyb2R1Y2VkIG9yIGZpeGVkIGJ5IHRoaXMgcGF0Y2guIFN0YW5kYXJkIEtBU0FOIGlzIHBlcmZlY3RseSBzdWl0ZWQgdG8gY2F0Y2ggdGhlIG91dC1vZi1ib3VuZHMgcmVhZCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGB1dl9maW5kX3NlY3JldGAgd2hlcmUgYHN0YXJ0X2lkeGAgd2FzIGluY29ycmVjdGx5IHVwZGF0ZWQgYW5kIGBmaW5kX3NlY3JldF9pbl9wYWdlYCB1c2VkIHRoZSB3cm9uZyBsaW1pdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBzMzkweCB1bHRyYXZpc29yIHNlY3JldCBoYW5kbGluZyBjb2RlLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGAvZGV2L3BrZXlgIGlvY3Rscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTI6MTUuMjE3OTg3MzQ1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODgyMTk0NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1NjdlZmFjODcyZTJjMzNjYTg5NzA4NDQyMDM4ZmI2MTdhZGFjMmZiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDEyIDE4OjEyOjE0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdXYuYyBiL2FyY2gvczM5MC9rZXJuZWwvdXYuY1xcbmluZGV4IGEyODRmOThkOTcxNjguLmU3MGFjYWQwOWNkNWYgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC91di5jXFxuKysrIGIvYXJjaC9zMzkwL2tlcm5lbC91di5jXFxuQEAgLTc2MCw3ICs3NjAsNyBAQCBzdGF0aWMgaW50IGZpbmRfc2VjcmV0X2luX3BhZ2UoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxcbiB7XFxuIFxcdHUxNiBpO1xcbiBcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGxpc3QtXFx1MDAzZXRvdGFsX251bV9zZWNyZXRzOyBpKyspIHtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGxpc3QtXFx1MDAzZW51bV9zZWNyX3N0b3JlZDsgaSsrKSB7XFxuIFxcdFxcdGlmIChtZW1jbXAoc2VjcmV0X2lkLCBsaXN0LVxcdTAwM2VzZWNyZXRzW2ldLmlkLCBVVl9TRUNSRVRfSURfTEVOKSA9PSAwKSB7XFxuIFxcdFxcdFxcdCpzZWNyZXQgPSBsaXN0LVxcdTAwM2VzZWNyZXRzW2ldLmhkcjtcXG4gXFx0XFx0XFx0cmV0dXJuIDA7XFxuQEAgLTc4MSwxMSArNzgxLDE0IEBAIGludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXFxuIFxcdFxcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqbGlzdCxcXG4gXFx0XFx0ICAgc3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW1faGRyICpzZWNyZXQpXFxuIHtcXG4tXFx0dTE2IHN0YXJ0X2lkeCA9IDA7XFxuK1xcdHUxNiBzdGFydF9pZHg7XFxuIFxcdHUxNiBsaXN0X3JjO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4rXFx0bGlzdC1cXHUwMDNlbmV4dF9zZWNyZXRfaWR4ID0gMDtcXG4rXFxuIFxcdGRvIHtcXG4rXFx0XFx0c3RhcnRfaWR4ID0gbGlzdC1cXHUwMDNlbmV4dF9zZWNyZXRfaWR4O1xcbiBcXHRcXHR1dl9saXN0X3NlY3JldHMobGlzdCwgc3RhcnRfaWR4LCBcXHUwMDI2bGlzdF9yYywgTlVMTCk7XFxuIFxcdFxcdGlmIChsaXN0X3JjICE9IFVWQ19SQ19FWEVDVVRFRCBcXHUwMDI2XFx1MDAyNiBsaXN0X3JjICE9IFVWQ19SQ19NT1JFX0RBVEEpIHtcXG4gXFx0XFx0XFx0aWYgKGxpc3RfcmMgPT0gVVZDX1JDX0lOVl9DTUQpXFxuQEAgLTc5Niw3ICs3OTksNiBAQCBpbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxcbiBcXHRcXHRyZXQgPSBmaW5kX3NlY3JldF9pbl9wYWdlKHNlY3JldF9pZCwgbGlzdCwgc2VjcmV0KTtcXG4gXFx0XFx0aWYgKHJldCA9PSAwKVxcbiBcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbi1cXHRcXHRzdGFydF9pZHggPSBsaXN0LVxcdTAwM2VuZXh0X3NlY3JldF9pZHg7XFxuIFxcdH0gd2hpbGUgKGxpc3RfcmMgPT0gVVZDX1JDX01PUkVfREFUQSBcXHUwMDI2XFx1MDAyNiBzdGFydF9pZHggXFx1MDAzYyBsaXN0LVxcdTAwM2VuZXh0X3NlY3JldF9pZHgpO1xcbiBcXG4gXFx0cmV0dXJuIC1FTk9FTlQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjEyOjE1LjYwNzExNDI3NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg3NDk0NzE5OTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBLRVlcIixcbiAgICBcIlBLRVlfVVZcIixcbiAgICBcIlMzOTBfVVZfVUFQSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInV2X2ZpbmRfc2VjcmV0XCIsXG4gICAgXCJwa2V5X2hhbmRsZXJfdmVyaWZ5X2tleVwiLFxuICAgIFwicGtleV9oYW5kbGVyX2tleV90b19wcm90a2V5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYHV2X2ZpbmRfc2VjcmV0YCB3aGVyZSBgc3RhcnRfaWR4YCB3YXMgaW5jb3JyZWN0bHkgdXBkYXRlZCBhbmQgYGZpbmRfc2VjcmV0X2luX3BhZ2VgIHVzZWQgdGhlIHdyb25nIGxpbWl0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHMzOTB4IHVsdHJhdmlzb3Igc2VjcmV0IGhhbmRsaW5nIGNvZGUsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgYC9kZXYvcGtleWAgaW9jdGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1NjdlZmFjODcyZTJjMzNjYTg5NzA4NDQyMDM4ZmI2MTdhZGFjMmZiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMTg6MTI6MTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3V2LmMgYi9hcmNoL3MzOTAva2VybmVsL3V2LmNcbmluZGV4IGEyODRmOThkOTcxNjguLmU3MGFjYWQwOWNkNWYgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva2VybmVsL3V2LmNcbisrKyBiL2FyY2gvczM5MC9rZXJuZWwvdXYuY1xuQEAgLTc2MCw3ICs3NjAsNyBAQCBzdGF0aWMgaW50IGZpbmRfc2VjcmV0X2luX3BhZ2UoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuIHtcbiBcdHUxNiBpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbGlzdC1cdTAwM2V0b3RhbF9udW1fc2VjcmV0czsgaSsrKSB7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBsaXN0LVx1MDAzZW51bV9zZWNyX3N0b3JlZDsgaSsrKSB7XG4gXHRcdGlmIChtZW1jbXAoc2VjcmV0X2lkLCBsaXN0LVx1MDAzZXNlY3JldHNbaV0uaWQsIFVWX1NFQ1JFVF9JRF9MRU4pID09IDApIHtcbiBcdFx0XHQqc2VjcmV0ID0gbGlzdC1cdTAwM2VzZWNyZXRzW2ldLmhkcjtcbiBcdFx0XHRyZXR1cm4gMDtcbkBAIC03ODEsMTEgKzc4MSwxNCBAQCBpbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuIFx0XHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QsXG4gXHRcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtX2hkciAqc2VjcmV0KVxuIHtcbi1cdHUxNiBzdGFydF9pZHggPSAwO1xuK1x0dTE2IHN0YXJ0X2lkeDtcbiBcdHUxNiBsaXN0X3JjO1xuIFx0aW50IHJldDtcbiBcbitcdGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4ID0gMDtcbitcbiBcdGRvIHtcbitcdFx0c3RhcnRfaWR4ID0gbGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHg7XG4gXHRcdHV2X2xpc3Rfc2VjcmV0cyhsaXN0LCBzdGFydF9pZHgsIFx1MDAyNmxpc3RfcmMsIE5VTEwpO1xuIFx0XHRpZiAobGlzdF9yYyAhPSBVVkNfUkNfRVhFQ1VURUQgXHUwMDI2XHUwMDI2IGxpc3RfcmMgIT0gVVZDX1JDX01PUkVfREFUQSkge1xuIFx0XHRcdGlmIChsaXN0X3JjID09IFVWQ19SQ19JTlZfQ01EKVxuQEAgLTc5Niw3ICs3OTksNiBAQCBpbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuIFx0XHRyZXQgPSBmaW5kX3NlY3JldF9pbl9wYWdlKHNlY3JldF9pZCwgbGlzdCwgc2VjcmV0KTtcbiBcdFx0aWYgKHJldCA9PSAwKVxuIFx0XHRcdHJldHVybiByZXQ7XG4tXHRcdHN0YXJ0X2lkeCA9IGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4O1xuIFx0fSB3aGlsZSAobGlzdF9yYyA9PSBVVkNfUkNfTU9SRV9EQVRBIFx1MDAyNlx1MDAyNiBzdGFydF9pZHggXHUwMDNjIGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4KTtcbiBcbiBcdHJldHVybiAtRU5PRU5UO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTI6MTUuNjA3MTE2MzU0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTgzNzAxODQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaCB0byBzMzkwIEFyY2hpdGVjdHVyZSBDb2RlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0J3MgYmVlbiBhcHBsaWVkIHRvIGBhcmNoL3MzOTAva2VybmVsL3V2LmNgLiBJdCBsb29rcyBsaWtlIGl0J3MgbWFraW5nIGEgZmV3IGNoYW5nZXMgdG8gYGZpbmRfc2VjcmV0X2luX3BhZ2VgIGFuZCBgdXZfZmluZF9zZWNyZXRgLiBTcGVjaWZpY2FsbHksIGluIGBmaW5kX3NlY3JldF9pbl9wYWdlYCwgdGhlIGxvb3AgY29uZGl0aW9uIGhhcyBiZWVuIGFsdGVyZWQ7IGl0IG5vdyB1c2VzIGBsaXN0LVx1MDAzZW51bV9zZWNyX3N0b3JlZGAgaW5zdGVhZCBvZiBgbGlzdC1cdTAwM2V0b3RhbF9udW1fc2VjcmV0c2AsIHdoaWNoIGlzIHNvbWV0aGluZyB0byBub3RlLiBBbmQgd2l0aGluIGB1dl9maW5kX3NlY3JldGAsIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgdXBkYXRlIG9mIGBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeGAgaGF2ZSBiZWVuIG1vdmVkICppbnNpZGUqIHRoZSBsb29wLiBUaGlzIGNvdWxkIGhhdmUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLCBkZXBlbmRpbmcgb24gdGhlIHN0cnVjdHVyZSBhbmQgdXNlIGNhc2UuXG5cbk5vdywgbGV0J3Mgc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICp1c2VkKi4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIGluIGBhcmNoL3MzOTAva2VybmVsL3V2LmNgIGZvciBjYWxscyB0byBgdXZfZmluZF9zZWNyZXRgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgaXMgdGhpcyBldmVuICpyZWFjaGFibGUqIGluIGEgdHlwaWNhbCBmdXp6aW5nIGVudmlyb25tZW50IGxpa2UgR0NFIG9yIFFFTVU/IFMzOTAgYXJjaGl0ZWN0dXJlLCBJIHNlZW0gdG8gcmVjYWxsLCBpcyBub3QgYWx3YXlzIHRoZSB0YXJnZXQsIGFuZCBzeXprYWxsZXIncyB0eXBpY2FsIHNldHVwcy4gQWgsIHdhaXQsIHllcywgc3l6a2FsbGVyICpkb2VzKiBzdXBwb3J0IHMzOTB4LiBTbyB3ZSBuZWVkIHRvIGNvbnNpZGVyIHRoaXMuIFRoZSBwcm9tcHQgZG9lcyBzYXkgdG8gc2tpcCBhbnkgY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gQnV0IHdhaXQsIHNpbmNlIHMzOTB4IGlzIHN1cHBvcnRlZCwgbGV0J3MgZ28gYmFjayB0byBsb29raW5nIGF0IHRoZSB1c2Ugb2YgYHV2X2ZpbmRfc2VjcmV0YCBpbiB0aGUgY29kZSwgYW5kIGhvdyB0aGF0IGNvdWxkIGJlIHJlYWNoYWJsZSB2aWEgc3l6a2FsbGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzc1LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTI6MjEuNDQ0MTM4Nzg0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjgyOTIzMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXZfZmluZF9zZWNyZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg9NjEzPXN0YXRpYyBpbmxpbmUgaW50IHV2X3JlbW92ZV9zaGFyZWQodW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNjE3LVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oOjYxODppbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTYxOS1cXHRcXHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QsXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmM9NzU3PXN0YXRpYyBpbnQgZmluZF9zZWNyZXRfaW5fcGFnZShjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzcyLS8qKlxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo3NzM6ICogdXZfZmluZF9zZWNyZXQoKSAtIHNlYXJjaCBzZWNyZXQgbWV0YWRhdGEgZm9yIGEgZ2l2ZW4gc2VjcmV0IGlkLlxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03NzQtICogQHNlY3JldF9pZDogc2VhcmNoIHBhdHRlcm4uXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzc5LSAqL1xcbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo3ODA6aW50IHV2X2ZpbmRfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzgxLVxcdFxcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqbGlzdCxcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy04MDUtfVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo4MDY6RVhQT1JUX1NZTUJPTF9HUEwodXZfZmluZF9zZWNyZXQpO1xcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy04MDctXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0yMD1NT0RVTEVfREVTQ1JJUFRJT04oXFxcInMzOTAgcHJvdGVjdGVkIGtleSBVViBoYW5kbGVyXFxcIik7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yMi0vKlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjIzOiAqIE9uZSBwcmUtYWxsb2NhdGVkIHV2X3NlY3JldF9saXN0IGZvciB1c2Ugd2l0aCB1dl9maW5kX3NlY3JldCgpXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjQtICovXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz05Mz1zdGF0aWMgaW50IGdldF9zZWNyZXRfbWV0YWRhdGEoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtOTktXFx0bWVtc2V0KHV2X2xpc3QsIDAsIHNpemVvZigqdXZfbGlzdCkpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjEwMDpcXHRyYyA9IHV2X2ZpbmRfc2VjcmV0KHNlY3JldF9pZCwgdXZfbGlzdCwgc2VjcmV0KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0xMDEtXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ1dl9saXN0X211dGV4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTI6MjMuMjEyNDM2NjYyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE2MDY2NjEzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBzMzkwIENyeXB0byBLZXkgSGFuZGxpbmcqKlxuXG5SaWdodCwgYHV2X2ZpbmRfc2VjcmV0YOKApiB0aGF0IGZ1bmN0aW9uIG5hbWUgaW1tZWRpYXRlbHkgcmluZ3MgYSBiZWxsLiBJdCdzIHVzZWQgd2l0aGluIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSdzIGNyeXB0b2dyYXBoaWMga2V5IGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgaW4gYGRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgYHBrZXlfdXYuY2AgYWN0dWFsbHkgKmlzKi4gSXMgdGhpcyByZWxhdGVkIHRvIFVzZXIgVmVyaWZpY2F0aW9uLCBLZXkgc3RvcmFnZSBhbmQgYWNjZXNzIG9yIG1heWJlIHNvbWUgb3RoZXIgaGFyZHdhcmUgc3VwcG9ydCBmb3IgY3J5cHRvPyBJdCdzIGJlZW4gYSB3aGlsZSBzaW5jZSBJIGxhc3QgbG9va2VkIGNsb3NlbHkgYXQgdGhlIHMzOTAga2V5IGluZnJhc3RydWN0dXJlLiBMZXQncyBzZWUgd2hhdCB0aGF0IGZpbGUgY29udGFpbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NTgsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODoxMjoyNi4zNzMxMDQ4NTdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzNzAwMTgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZXRfc2VjcmV0X21ldGFkYXRhXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9rZXJuZWwvdXYuYz04MDY9RVhQT1JUX1NZTUJPTF9HUEwodXZfZmluZF9zZWNyZXQpO1xcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTgxMi0gKiBAYnVmX3NpemU6IFNpemUgb2YgdGhlIGJ1ZmZlci4gVGhlIGNvcnJlY3QgYnVmZmVyIHNpemUgaXMgcmVwb3J0ZWQgYXMgcGFydCBvZlxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo4MTM6ICogdGhlIHJlc3VsdCBmcm9tIGB1dl9nZXRfc2VjcmV0X21ldGFkYXRhYC5cXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtODE0LSAqXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz04Mz1zdGF0aWMgYm9vbCBpc191dl9rZXl0eXBlKGVudW0gcGtleV9rZXlfdHlwZSBrZXl0eXBlKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtOTItXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6OTM6c3RhdGljIGludCBnZXRfc2VjcmV0X21ldGFkYXRhKGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy05NC1cXHRcXHRcXHQgICAgICAgc3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW1faGRyICpzZWNyZXQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0xMDY9c3RhdGljIGludCByZXRyaWV2ZV9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMTExLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjExMjpcXHRyYyA9IGdldF9zZWNyZXRfbWV0YWRhdGEoc2VjcmV0X2lkLCBcXHUwMDI2c2VjcmV0X21ldGFfZGF0YSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMTEzLVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTIzMz1zdGF0aWMgaW50IHV2X3ZlcmlmeWtleShjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjQ3LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjI0ODpcXHRyYyA9IGdldF9zZWNyZXRfbWV0YWRhdGEodC1cXHUwMDNlc2VjcmV0X2lkLCBcXHUwMDI2c2VjcmV0X21ldGFfZGF0YSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjQ5LVxcdGlmIChyYylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTI6MjguMjEwMTEyNzI4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY0NzA1Nzk0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIGBwa2V5X3V2LmNgIENvZGUqKlxuXG5Pa2F5LCBsZXQncyBnZXQgaW50byB0aGlzIGBwa2V5X3V2LmNgIGZpbGUuIFJpZ2h0LCBpdCdzIGEgXCJwcm90ZWN0ZWQga2V5IFVWIGhhbmRsZXIuXCIgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgaW50ZXJmYWNpbmcgd2l0aCBwcm90ZWN0ZWQga2V5cy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiQ2FuIEkgZXZlbiAqcmVhY2gqIHRoaXMgdGhpbmc/XCIgSSBoYXZlIHRvIHJlbWVtYmVyIGhvdyBgcGtleWAgZnVuY3Rpb25hbGl0eSBpcyBleHBvc2VkLiBJcyBpdCBhY2Nlc3NpYmxlIHRocm91Z2ggYC9kZXYvcGtleWAsIG9yIHNvbWUgcmVsYXRlZCBgaW9jdGxgIGNhbGxzIHdpdGhpbiB0aGUgczM5MCBhcmNoaXRlY3R1cmU/IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgZW50cnkgcG9pbnRzIGFuZCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGlzIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuY2AgY29kZSBpcyBpbnZva2VkLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBsYXJnZXIgYHBrZXlgIHN1YnN5c3RlbSB0byBnYWluIHNvbWUgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDUwNywiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjEyOjMxLjg1NzE3MzA1MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTkzNTYzNDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInV2X3ZlcmlmeWtleVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0xOTA9c3RhdGljIGludCB1dl9rZXkycHJvdGtleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICpfYXBxbnMgX19hbHdheXNfdW51c2VkLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjMyLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjIzMzpzdGF0aWMgaW50IHV2X3ZlcmlmeWtleShjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTIzNC1cXHRcXHRcXHR1MTYgKl9jYXJkIF9fYWx3YXlzX3VudXNlZCxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTI3Mj1zdGF0aWMgc3RydWN0IHBrZXlfaGFuZGxlciB1dl9oYW5kbGVyID0ge1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjc3LVxcdC5rZXlfdG9fcHJvdGtleVxcdFxcdCA9IHV2X2tleTJwcm90a2V5LFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjI3ODpcXHQudmVyaWZ5X2tleVxcdFxcdCA9IHV2X3ZlcmlmeWtleSxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yNzktfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTI6MzMuNDUwNzQyNzE4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA2OTAxNjYwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYHBrZXlfaGFuZGxlcmAgaXMgYmVpbmcgdXRpbGl6ZWQgd2l0aGluIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSdzIGNyeXB0b2dyYXBoaWMga2V5IG1hbmFnZW1lbnQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIG91dCB0aGUgcmVsZXZhbnQgZHJpdmVyIGNvZGUsIHNwZWNpZmljYWxseSBzb21ldGhpbmcgbGlrZSBgZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jYC4gVGhpcyBzZWVtcyB0aGUgbW9zdCBsaWtlbHkgcGxhY2UgdG8gZmluZCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gSSdtIGhvcGluZyB0byBxdWlja2x5IGdyYXNwIGhvdyB0aGUgYHBrZXlfaGFuZGxlcmAgc3RydWN0dXJlIGlzIGVtcGxveWVkIHdpdGhpbiB0aGF0IGNvbnRleHQuIEknbSBhaW1pbmcgZm9yIGEgbWVudGFsIG1vZGVsIG9mIGl0cyByb2xlIGluIHRoZSBrZXkgbWFuYWdlbWVudCBwcm9jZXNzLiBJJ20gdGhpbmtpbmcgYSBkZWVwIGRpdmUgaW50byB0aGUgY29kZSB3aWxsIHJldmVhbCB0aGUgbmVjZXNzYXJ5IHVzYWdlIHBhdHRlcm5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDQzLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTI6MzYuNTE5NzYyNDQyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjIzOTE3MjYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBrZXlfaGFuZGxlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9MjU9c3RhdGljIGludCBrZXkycHJvdGtleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucywgc2l6ZV90IG5yX2FwcW5zLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTMyLVxcdC8qIHRyeSB0aGUgZGlyZWN0IHdheSAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzozMzpcXHRyYyA9IHBrZXlfaGFuZGxlcl9rZXlfdG9fcHJvdGtleShhcHFucywgbnJfYXBxbnMsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTM0LVxcdFxcdFxcdFxcdFxcdCBrZXksIGtleWxlbixcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0zOS1cXHRpZiAocmMgPT0gLUVOT0RFVikge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzo0MDpcXHRcXHRyYyA9IHBrZXlfaGFuZGxlcl9zbG93cGF0aF9rZXlfdG9fcHJvdGtleShhcHFucywgbnJfYXBxbnMsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTQxLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAga2V5LCBrZXlsZW4sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9NTU9aW50IHBrZXlfa2V5MnByb3RrZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy02Mi1cXHRpZiAocmMgPT0gLUVOT0RFVikge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzo2MzpcXHRcXHRwa2V5X2hhbmRsZXJfcmVxdWVzdF9tb2R1bGVzKCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTY0LVxcdFxcdHJjID0ga2V5MnByb3RrZXkoTlVMTCwgMCwga2V5LCBrZXlsZW4sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9OTI9c3RhdGljIGludCBwa2V5X2lvY3RsX2dlbnNlY2soc3RydWN0IHBrZXlfZ2Vuc2VjayBfX3VzZXIgKnVncylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0xMDQtXFx0a2V5YnVmbGVuID0gc2l6ZW9mKGtncy5zZWNrZXkuc2Vja2V5KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6MTA1OlxcdHJjID0gcGtleV9oYW5kbGVyX2dlbl9rZXkoXFx1MDAyNmFwcW4sIDEsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTEwNi1cXHRcXHRcXHRcXHQgIGtncy5rZXl0eXBlLCBQS0VZX1RZUEVfQ0NBX0RBVEEsIDAsIDAsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9MTE2PXN0YXRpYyBpbnQgcGtleV9pb2N0bF9jbHIyc2VjayhzdHJ1Y3QgcGtleV9jbHIyc2VjayBfX3VzZXIgKnVjcylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0xMjgtXFx0a2V5YnVmbGVuID0gc2l6ZW9mKGtjcy5zZWNrZXkuc2Vja2V5KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6MTI5OlxcdHJjID0gcGtleV9oYW5kbGVyX2Nscl90b19rZXkoXFx1MDAyNmFwcW4sIDEsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTEzMC1cXHRcXHRcXHRcXHQgICAgIGtjcy5rZXl0eXBlLCBQS0VZX1RZUEVfQ0NBX0RBVEEsIDAsIDAsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9MTQyPXN0YXRpYyBpbnQgcGtleV9pb2N0bF9zZWMycHJvdGsoc3RydWN0IHBrZXlfc2VjMnByb3RrIF9fdXNlciAqdXNwKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTE1My1cXHRrc3AucHJvdGtleS5sZW4gPSBzaXplb2Yoa3NwLnByb3RrZXkucHJvdGtleSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjE1NDpcXHRyYyA9IHBrZXlfaGFuZGxlcl9rZXlfdG9fcHJvdGtleShcXHUwMDI2YXBxbiwgMSxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMTU1LVxcdFxcdFxcdFxcdFxcdCBrc3Auc2Vja2V5LnNlY2tleSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz0yMTU9c3RhdGljIGludCBwa2V5X2lvY3RsX2ZpbmRjYXJkKHN0cnVjdCBwa2V5X2ZpbmRjYXJkIF9fdXNlciAqdWZjKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTIyOS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6MjMwOlxcdHJjID0gcGtleV9oYW5kbGVyX2FwcW5zX2Zvcl9rZXkoa2ZjLnNlY2tleS5zZWNrZXksXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTIzMS1cXHRcXHRcXHRcXHRcXHRzaXplb2Yoa2ZjLnNlY2tleS5zZWNrZXkpLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTIzNC1cXHRpZiAocmMgPT0gLUVOT0RFVilcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6MjM1OlxcdFxcdHJjID0gcGtleV9oYW5kbGVyX2FwcW5zX2Zvcl9rZXkoa2ZjLnNlY2tleS5zZWNrZXksXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTIzNi1cXHRcXHRcXHRcXHRcXHRcXHRzaXplb2Yoa2ZjLnNlY2tleS5zZWNrZXkpLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTI1Mz1zdGF0aWMgaW50IHBrZXlfaW9jdGxfc2tleTJwa2V5KHN0cnVjdCBwa2V5X3NrZXkycGtleSBfX3VzZXIgKnVzcClcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0yNjEtXFx0a3NwLnByb3RrZXkubGVuID0gc2l6ZW9mKGtzcC5wcm90a2V5LnByb3RrZXkpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzoyNjI6XFx0cmMgPSBwa2V5X2hhbmRsZXJfa2V5X3RvX3Byb3RrZXkoTlVMTCwgMCxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMjYzLVxcdFxcdFxcdFxcdFxcdCBrc3Auc2Vja2V5LnNlY2tleSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz0yNzY9c3RhdGljIGludCBwa2V5X2lvY3RsX3ZlcmlmeWtleShzdHJ1Y3QgcGtleV92ZXJpZnlrZXkgX191c2VyICp1dmspXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMjg2LVxcdGt2ay5kb21haW4gPSAweEZGRkY7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjI4NzpcXHRyYyA9IHBrZXlfaGFuZGxlcl92ZXJpZnlfa2V5KGt2ay5zZWNrZXkuc2Vja2V5LFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0yODgtXFx0XFx0XFx0XFx0ICAgICBzaXplb2Yoa3ZrLnNlY2tleS5zZWNrZXkpLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTMwNT1zdGF0aWMgaW50IHBrZXlfaW9jdGxfZ2VucHJvdGsoc3RydWN0IHBrZXlfZ2VucHJvdGsgX191c2VyICp1Z3ApXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMzEzLVxcdGtncC5wcm90a2V5LmxlbiA9IHNpemVvZihrZ3AucHJvdGtleS5wcm90a2V5KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6MzE0OlxcdHJjID0gcGtleV9oYW5kbGVyX2dlbl9rZXkoTlVMTCwgMCwga2dwLmtleXR5cGUsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTMxNS1cXHRcXHRcXHRcXHQgIFBLRVlfVFlQRV9QUk9US0VZLCAwLCAwLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTMyNj1zdGF0aWMgaW50IHBrZXlfaW9jdGxfdmVyaWZ5cHJvdGsoc3RydWN0IHBrZXlfdmVyaWZ5cHJvdGsgX191c2VyICp1dnApXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMzU1LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzozNTY6XFx0cmMgPSBwa2V5X2hhbmRsZXJfdmVyaWZ5X2tleSh0bXBidWYsIHNpemVvZigqdCksXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTM1Ny1cXHRcXHRcXHRcXHQgICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIDApO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTM5MD1zdGF0aWMgaW50IHBrZXlfaW9jdGxfZ2Vuc2VjazIoc3RydWN0IHBrZXlfZ2Vuc2VjazIgX191c2VyICp1Z3MpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNDE0LVxcdH1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6NDE1OlxcdHJjID0gcGtleV9oYW5kbGVyX2dlbl9rZXkoYXBxbnMsIGtncy5hcHFuX2VudHJpZXMsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTQxNi1cXHRcXHRcXHRcXHQgIHUsIGtncy50eXBlLCBrZ3Muc2l6ZSwga2dzLmtleWdlbmZsYWdzLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTQ0Mj1zdGF0aWMgaW50IHBrZXlfaW9jdGxfY2xyMnNlY2syKHN0cnVjdCBwa2V5X2NscjJzZWNrMiBfX3VzZXIgKnVjcylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy00NzAtXFx0fVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzo0NzE6XFx0cmMgPSBwa2V5X2hhbmRsZXJfY2xyX3RvX2tleShhcHFucywga2NzLmFwcW5fZW50cmllcyxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNDcyLVxcdFxcdFxcdFxcdCAgICAgdSwga2NzLnR5cGUsIGtjcy5zaXplLCBrY3Mua2V5Z2VuZmxhZ3MsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9NTAzPXN0YXRpYyBpbnQgcGtleV9pb2N0bF92ZXJpZnlrZXkyKHN0cnVjdCBwa2V5X3ZlcmlmeWtleTIgX191c2VyICp1dmspXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNTE0LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzo1MTU6XFx0cmMgPSBwa2V5X2hhbmRsZXJfdmVyaWZ5X2tleShra2V5LCBrdmsua2V5bGVuLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy01MTYtXFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2a3ZrLmNhcmRuciwgXFx1MDAyNmt2ay5kb21haW4sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9NTU4PXN0YXRpYyBpbnQgcGtleV9pb2N0bF9hcHFuczRrKHN0cnVjdCBwa2V5X2FwcW5zNGtleSBfX3VzZXIgKnVhaylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy01NzgtXFx0fVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzo1Nzk6XFx0cmMgPSBwa2V5X2hhbmRsZXJfYXBxbnNfZm9yX2tleShra2V5LCBrYWsua2V5bGVuLCBrYWsuZmxhZ3MsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTU4MC1cXHRcXHRcXHRcXHRcXHRhcHFucywgXFx1MDAyNm5yX2FwcW5zLCAwKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz02MDg9c3RhdGljIGludCBwa2V5X2lvY3RsX2FwcW5zNGt0KHN0cnVjdCBwa2V5X2FwcW5zNGtleXR5cGUgX191c2VyICp1YXQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNjIyLVxcdH1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6NjIzOlxcdHJjID0gcGtleV9oYW5kbGVyX2FwcW5zX2Zvcl9rZXl0eXBlKGthdC50eXBlLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy02MjQtXFx0XFx0XFx0XFx0XFx0ICAgIGthdC5jdXJfbWt2cCwga2F0LmFsdF9ta3ZwLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYz0zND1zdGF0aWMgTElTVF9IRUFEKGhhbmRsZXJfbGlzdCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjM2OmludCBwa2V5X2hhbmRsZXJfcmVnaXN0ZXIoc3RydWN0IHBrZXlfaGFuZGxlciAqaGFuZGxlcilcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTM3LXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjM4OlxcdGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmg7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zOS1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtNzgtfVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6Nzk6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfcmVnaXN0ZXIpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtODAtXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzo4MTppbnQgcGtleV9oYW5kbGVyX3VucmVnaXN0ZXIoc3RydWN0IHBrZXlfaGFuZGxlciAqaGFuZGxlcilcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTgyLXtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtOTMtfVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6OTQ6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfdW5yZWdpc3Rlcik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy05NS1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtOTktXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxMDA6Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqcGtleV9oYW5kbGVyX2dldF9rZXliYXNlZChjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuKVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTAxLXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjEwMjpcXHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTAzLVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xMTctfVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTE4OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX2dldF9rZXliYXNlZCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xMTktXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxMjA6Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqcGtleV9oYW5kbGVyX2dldF9rZXl0eXBlYmFzZWQoZW51bSBwa2V5X2tleV90eXBlIGt0KVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTIxLXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjEyMjpcXHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTIzLVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xMzctfVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTM4OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX2dldF9rZXl0eXBlYmFzZWQpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTM5LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTQwOnZvaWQgcGtleV9oYW5kbGVyX3B1dChjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoYW5kbGVyKVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTQxLXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjE0MjpcXHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTQzLVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xNTUtfVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTU2OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX3B1dCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xNTctXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxNTg6aW50IHBrZXlfaGFuZGxlcl9rZXlfdG9fcHJvdGtleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucywgc2l6ZV90IG5yX2FwcW5zLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTU5LVxcdFxcdFxcdFxcdGNvbnN0IHU4ICprZXksIHUzMiBrZXlsZW4sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE2Mi17XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxNjM6XFx0Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqaDtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE2NC1cXHRpbnQgcmMgPSAtRU5PREVWO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTY1LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTY2OlxcdGggPSBwa2V5X2hhbmRsZXJfZ2V0X2tleWJhc2VkKGtleSwga2V5bGVuKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE2Ny1cXHRpZiAoaCBcXHUwMDI2XFx1MDAyNiBoLVxcdTAwM2VrZXlfdG9fcHJvdGtleSkge1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xNzEtXFx0fVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTcyOlxcdHBrZXlfaGFuZGxlcl9wdXQoaCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xNzMtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE3NS19XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxNzY6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfa2V5X3RvX3Byb3RrZXkpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTc3LVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xODMtICovXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxODQ6aW50IHBrZXlfaGFuZGxlcl9zbG93cGF0aF9rZXlfdG9fcHJvdGtleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucyxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE4NS1cXHRcXHRcXHRcXHRcXHQgc2l6ZV90IG5yX2FwcW5zLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xODkte1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTkwOlxcdGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmgsICpodG1wWzEwXTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE5MS1cXHRpbnQgaSwgbiA9IDAsIHJjID0gLUVOT0RFVjtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjE1LX1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjIxNjpFWFBPUlRfU1lNQk9MKHBrZXlfaGFuZGxlcl9zbG93cGF0aF9rZXlfdG9fcHJvdGtleSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yMTctXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyMTg6aW50IHBrZXlfaGFuZGxlcl9nZW5fa2V5KGNvbnN0IHN0cnVjdCBwa2V5X2FwcW4gKmFwcW5zLCBzaXplX3QgbnJfYXBxbnMsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yMTktXFx0XFx0XFx0IHUzMiBrZXl0eXBlLCB1MzIga2V5c3VidHlwZSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjIyLXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjIyMzpcXHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjI0LVxcdGludCByYyA9IC1FTk9ERVY7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yMjUtXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyMjY6XFx0aCA9IHBrZXlfaGFuZGxlcl9nZXRfa2V5dHlwZWJhc2VkKGtleXN1YnR5cGUpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjI3LVxcdGlmIChoIFxcdTAwMjZcXHUwMDI2IGgtXFx1MDAzZWdlbl9rZXkpIHtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjMxLVxcdH1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjIzMjpcXHRwa2V5X2hhbmRsZXJfcHV0KGgpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjMzLVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yMzUtfVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjM2OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX2dlbl9rZXkpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjM3LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjM4OmludCBwa2V5X2hhbmRsZXJfY2xyX3RvX2tleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucywgc2l6ZV90IG5yX2FwcW5zLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjM5LVxcdFxcdFxcdCAgICB1MzIga2V5dHlwZSwgdTMyIGtleXN1YnR5cGUsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI0NC17XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyNDU6XFx0Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqaDtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI0Ni1cXHRpbnQgcmMgPSAtRU5PREVWO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjQ3LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjQ4OlxcdGggPSBwa2V5X2hhbmRsZXJfZ2V0X2tleXR5cGViYXNlZChrZXlzdWJ0eXBlKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI0OS1cXHRpZiAoaCBcXHUwMDI2XFx1MDAyNiBoLVxcdTAwM2VjbHJfdG9fa2V5KSB7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI1My1cXHR9XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyNTQ6XFx0cGtleV9oYW5kbGVyX3B1dChoKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI1NS1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjU3LX1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI1ODpFWFBPUlRfU1lNQk9MKHBrZXlfaGFuZGxlcl9jbHJfdG9fa2V5KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI1OS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI2MDppbnQgcGtleV9oYW5kbGVyX3ZlcmlmeV9rZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI2MS1cXHRcXHRcXHQgICAgdTE2ICpjYXJkLCB1MTYgKmRvbSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjY0LXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI2NTpcXHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjY2LVxcdGludCByYyA9IC1FTk9ERVY7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNjctXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyNjg6XFx0aCA9IHBrZXlfaGFuZGxlcl9nZXRfa2V5YmFzZWQoa2V5LCBrZXlsZW4pO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjY5LVxcdGlmIChoIFxcdTAwMjZcXHUwMDI2IGgtXFx1MDAzZXZlcmlmeV9rZXkpIHtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjcyLVxcdH1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI3MzpcXHRwa2V5X2hhbmRsZXJfcHV0KGgpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjc0LVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNzYtfVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6Mjc3OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX3ZlcmlmeV9rZXkpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjc4LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6Mjc5OmludCBwa2V5X2hhbmRsZXJfYXBxbnNfZm9yX2tleShjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuLCB1MzIgZmxhZ3MsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yODAtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBwa2V5X2FwcW4gKmFwcW5zLCBzaXplX3QgKm5yX2FwcW5zLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yODIte1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjgzOlxcdGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmg7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yODQtXFx0aW50IHJjID0gLUVOT0RFVjtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI4NS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI4NjpcXHRoID0gcGtleV9oYW5kbGVyX2dldF9rZXliYXNlZChrZXksIGtleWxlbik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yODctXFx0aWYgKGggXFx1MDAyNlxcdTAwMjYgaC1cXHUwMDNlYXBxbnNfZm9yX2tleSlcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjg5LVxcdFxcdFxcdFxcdCAgICAgIHhmbGFncyk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyOTA6XFx0cGtleV9oYW5kbGVyX3B1dChoKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI5MS1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjkzLX1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI5NDpFWFBPUlRfU1lNQk9MKHBrZXlfaGFuZGxlcl9hcHFuc19mb3Jfa2V5KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI5NS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI5NjppbnQgcGtleV9oYW5kbGVyX2FwcW5zX2Zvcl9rZXl0eXBlKGVudW0gcGtleV9rZXlfdHlwZSBrZXlzdWJ0eXBlLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjk3LVxcdFxcdFxcdFxcdCAgIHU4IGN1cl9ta3ZwWzMyXSwgdTggYWx0X21rdnBbMzJdLCB1MzIgZmxhZ3MsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMwMC17XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzozMDE6XFx0Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqaDtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMwMi1cXHRpbnQgcmMgPSAtRU5PREVWO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzAzLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzA0OlxcdGggPSBwa2V5X2hhbmRsZXJfZ2V0X2tleXR5cGViYXNlZChrZXlzdWJ0eXBlKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMwNS1cXHRpZiAoaCBcXHUwMDI2XFx1MDAyNiBoLVxcdTAwM2VhcHFuc19mb3Jfa2V5dHlwZSkge1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zMDktXFx0fVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzEwOlxcdHBrZXlfaGFuZGxlcl9wdXQoaCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zMTEtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMxMy19XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzozMTQ6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfYXBxbnNfZm9yX2tleXR5cGUpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzE1LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzE2OnZvaWQgcGtleV9oYW5kbGVyX3JlcXVlc3RfbW9kdWxlcyh2b2lkKVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzE3LXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMxOC0jaWZkZWYgQ09ORklHX01PRFVMRVNcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjMxOTpcXHRzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHBrZXlfaGFuZGxlcl9tb2R1bGVzW10gPSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zMjAtI2lmIElTX01PRFVMRShDT05GSUdfUEtFWV9DQ0EpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMzNC1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjMzNTpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShwa2V5X2hhbmRsZXJfbW9kdWxlcyk7IGkrKykge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzM2OlxcdFxcdGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmg7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zMzctXFx0XFx0Ym9vbCBmb3VuZCA9IGZhbHNlO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNDEtXFx0XFx0XFx0aWYgKGgtXFx1MDAzZW1vZHVsZSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzQyOlxcdFxcdFxcdCAgICAhc3RyY21wKGgtXFx1MDAzZW1vZHVsZS1cXHUwMDNlbmFtZSwgcGtleV9oYW5kbGVyX21vZHVsZXNbaV0pKSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNDMtXFx0XFx0XFx0XFx0Zm91bmQgPSB0cnVlO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNDgtXFx0XFx0aWYgKCFmb3VuZCkge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzQ5OlxcdFxcdFxcdHByX2RlYnVnKFxcXCJyZXF1ZXN0X21vZHVsZSglcylcXFxcblxcXCIsIHBrZXlfaGFuZGxlcl9tb2R1bGVzW2ldKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjM1MDpcXHRcXHRcXHRyZXF1ZXN0X21vZHVsZShwa2V5X2hhbmRsZXJfbW9kdWxlc1tpXSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNTEtXFx0XFx0fVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNTQtfVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzU1OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX3JlcXVlc3RfbW9kdWxlcyk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNTYtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oPTE0NT1leHRlcm4gY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqcGtleV9hdHRyX2dyb3Vwc1tdO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0xNTAtXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoxNTE6c3RydWN0IHBrZXlfaGFuZGxlciB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0xNTItXFx0c3RydWN0IG1vZHVsZSAqbW9kdWxlO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0xOTItXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoxOTM6aW50IHBrZXlfaGFuZGxlcl9yZWdpc3RlcihzdHJ1Y3QgcGtleV9oYW5kbGVyICpoYW5kbGVyKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oOjE5NDppbnQgcGtleV9oYW5kbGVyX3VucmVnaXN0ZXIoc3RydWN0IHBrZXlfaGFuZGxlciAqaGFuZGxlcik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0xOTUtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTE5OS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oOjIwMDpjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpwa2V5X2hhbmRsZXJfZ2V0X2tleWJhc2VkKGNvbnN0IHU4ICprZXksIHUzMiBrZXlsZW4pO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg6MjAxOmNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKnBrZXlfaGFuZGxlcl9nZXRfa2V5dHlwZWJhc2VkKGVudW0gcGtleV9rZXlfdHlwZSBrdCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoyMDI6dm9pZCBwa2V5X2hhbmRsZXJfcHV0KGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmhhbmRsZXIpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjAzLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg6MjA0OmludCBwa2V5X2hhbmRsZXJfa2V5X3RvX3Byb3RrZXkoY29uc3Qgc3RydWN0IHBrZXlfYXBxbiAqYXBxbnMsIHNpemVfdCBucl9hcHFucyxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIwNS1cXHRcXHRcXHRcXHRjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMDctXFx0XFx0XFx0XFx0dTMyIHhmbGFncyk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoyMDg6aW50IHBrZXlfaGFuZGxlcl9zbG93cGF0aF9rZXlfdG9fcHJvdGtleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucyxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIwOS1cXHRcXHRcXHRcXHRcXHQgc2l6ZV90IG5yX2FwcW5zLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMTItXFx0XFx0XFx0XFx0XFx0IHUzMiAqcHJvdGtleXR5cGUsIHUzMiB4ZmxhZ3MpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg6MjEzOmludCBwa2V5X2hhbmRsZXJfZ2VuX2tleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucywgc2l6ZV90IG5yX2FwcW5zLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjE0LVxcdFxcdFxcdCB1MzIga2V5dHlwZSwgdTMyIGtleXN1YnR5cGUsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIxNi1cXHRcXHRcXHQgdTggKmtleWJ1ZiwgdTMyICprZXlidWZsZW4sIHUzMiAqa2V5aW5mbywgdTMyIHhmbGFncyk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoyMTc6aW50IHBrZXlfaGFuZGxlcl9jbHJfdG9fa2V5KGNvbnN0IHN0cnVjdCBwa2V5X2FwcW4gKmFwcW5zLCBzaXplX3QgbnJfYXBxbnMsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMTgtXFx0XFx0XFx0ICAgIHUzMiBrZXl0eXBlLCB1MzIga2V5c3VidHlwZSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjIyLVxcdFxcdFxcdCAgICB1MzIgeGZsYWdzKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oOjIyMzppbnQgcGtleV9oYW5kbGVyX3ZlcmlmeV9rZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIyNC1cXHRcXHRcXHQgICAgdTE2ICpjYXJkLCB1MTYgKmRvbSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjI2LVxcdFxcdFxcdCAgICB1MzIgeGZsYWdzKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oOjIyNzppbnQgcGtleV9oYW5kbGVyX2FwcW5zX2Zvcl9rZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbiwgdTMyIGZsYWdzLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjI4LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgcGtleV9hcHFuICphcHFucywgc2l6ZV90ICpucl9hcHFucyxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIyOS1cXHRcXHRcXHQgICAgICAgdTMyIHhmbGFncyk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoyMzA6aW50IHBrZXlfaGFuZGxlcl9hcHFuc19mb3Jfa2V5dHlwZShlbnVtIHBrZXlfa2V5X3R5cGUga3R5cGUsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMzEtXFx0XFx0XFx0XFx0ICAgdTggY3VyX21rdnBbMzJdLCB1OCBhbHRfbWt2cFszMl0sIHUzMiBmbGFncyxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjM3LSAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg6MjM4OnZvaWQgcGtleV9oYW5kbGVyX3JlcXVlc3RfbW9kdWxlcyh2b2lkKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIzOS1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYz01NTc9c3RhdGljIGludCBjY2Ffc2xvd3BhdGhfa2V5MnByb3RrZXkoY29uc3Qgc3RydWN0IHBrZXlfYXBxbiAqYXBxbnMsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfY2NhLmMtNTk1LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYzo1OTY6c3RhdGljIHN0cnVjdCBwa2V5X2hhbmRsZXIgY2NhX2hhbmRsZXIgPSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2NjYS5jLTU5Ny1cXHQubW9kdWxlXFx0XFx0XFx0ID0gVEhJU19NT0RVTEUsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfY2NhLmM9NjEzPXN0YXRpYyBpbnQgX19pbml0IHBrZXlfY2NhX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYy02MTUtXFx0LyogcmVnaXN0ZXIgdGhpcyBtb2R1bGUgYXMgcGtleSBoYW5kbGVyIGZvciBhbGwgdGhlIGNjYSBzdHVmZiAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYzo2MTY6XFx0cmV0dXJuIHBrZXlfaGFuZGxlcl9yZWdpc3RlcihcXHUwMDI2Y2NhX2hhbmRsZXIpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYy02MTctfVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2NjYS5jPTYyMj1zdGF0aWMgdm9pZCBfX2V4aXQgcGtleV9jY2FfZXhpdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2NjYS5jLTYyNC1cXHQvKiB1bnJlZ2lzdGVyIHRoaXMgbW9kdWxlIGFzIHBrZXkgaGFuZGxlciAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYzo2MjU6XFx0cGtleV9oYW5kbGVyX3VucmVnaXN0ZXIoXFx1MDAyNmNjYV9oYW5kbGVyKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfY2NhLmMtNjI2LX1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmM9NTA0PXN0YXRpYyBpbnQgZXAxMV9zbG93cGF0aF9rZXkycHJvdGtleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucyxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmMtNTQyLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmM6NTQzOnN0YXRpYyBzdHJ1Y3QgcGtleV9oYW5kbGVyIGVwMTFfaGFuZGxlciA9IHtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jLTU0NC1cXHQubW9kdWxlXFx0XFx0XFx0ID0gVEhJU19NT0RVTEUsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jPTU2MD1zdGF0aWMgaW50IF9faW5pdCBwa2V5X2VwMTFfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2VwMTEuYy01NjItXFx0LyogcmVnaXN0ZXIgdGhpcyBtb2R1bGUgYXMgcGtleSBoYW5kbGVyIGZvciBhbGwgdGhlIGVwMTEgc3R1ZmYgKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jOjU2MzpcXHRyZXR1cm4gcGtleV9oYW5kbGVyX3JlZ2lzdGVyKFxcdTAwMjZlcDExX2hhbmRsZXIpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmMtNTY0LX1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmM9NTY5PXN0YXRpYyB2b2lkIF9fZXhpdCBwa2V5X2VwMTFfZXhpdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2VwMTEuYy01NzEtXFx0LyogdW5yZWdpc3RlciB0aGlzIG1vZHVsZSBhcyBwa2V5IGhhbmRsZXIgKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jOjU3MjpcXHRwa2V5X2hhbmRsZXJfdW5yZWdpc3RlcihcXHUwMDI2ZXAxMV9oYW5kbGVyKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jLTU3My19XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfcGNrbW8uYz00MzU9c3RhdGljIGludCBwa2V5X3Bja21vX3ZlcmlmeWtleShjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3Bja21vLmMtNDQyLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jOjQ0MzpzdGF0aWMgc3RydWN0IHBrZXlfaGFuZGxlciBwY2ttb19oYW5kbGVyID0ge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jLTQ0NC1cXHQubW9kdWxlXFx0XFx0ICAgICAgPSBUSElTX01PRFVMRSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jPTQ1Nj1zdGF0aWMgaW50IF9faW5pdCBwa2V5X3Bja21vX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jLTQ2OS1cXHQvKiByZWdpc3RlciB0aGlzIG1vZHVsZSBhcyBwa2V5IGhhbmRsZXIgZm9yIGFsbCB0aGUgcGNrbW8gc3R1ZmYgKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfcGNrbW8uYzo0NzA6XFx0cmV0dXJuIHBrZXlfaGFuZGxlcl9yZWdpc3RlcihcXHUwMDI2cGNrbW9faGFuZGxlcik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3Bja21vLmMtNDcxLX1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jPTQ3Nj1zdGF0aWMgdm9pZCBfX2V4aXQgcGtleV9wY2ttb19leGl0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfcGNrbW8uYy00NzgtXFx0LyogdW5yZWdpc3RlciB0aGlzIG1vZHVsZSBhcyBwa2V5IGhhbmRsZXIgKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfcGNrbW8uYzo0Nzk6XFx0cGtleV9oYW5kbGVyX3VucmVnaXN0ZXIoXFx1MDAyNnBja21vX2hhbmRsZXIpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jLTQ4MC19XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0xNy0vKlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjE4OiAqIFdyYXBwZXIgYXJvdW5kIHBrZXlfaGFuZGxlcl9nZW5fa2V5KCkgd2hpY2ggZGVhbHMgd2l0aCB0aGVcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0xOS0gKiBFTk9ERVYgcmV0dXJuIGNvZGUgYW5kIHRoZW4gdHJpZXMgdG8gZW5mb3JjZSBhIHBrZXkgaGFuZGxlclxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMjEtICovXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6MjI6c3RhdGljIGludCBzeXNfcGtleV9oYW5kbGVyX2dlbl9rZXkodTMyIGtleXR5cGUsIHUzMiBrZXlzdWJ0eXBlLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTIzLVxcdFxcdFxcdFxcdCAgICB1MzIga2V5Yml0c2l6ZSwgdTMyIGZsYWdzLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMjctXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6Mjg6XFx0cmMgPSBwa2V5X2hhbmRsZXJfZ2VuX2tleShOVUxMLCAwLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTI5LVxcdFxcdFxcdFxcdCAga2V5dHlwZSwga2V5c3VidHlwZSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTMyLVxcdGlmIChyYyA9PSAtRU5PREVWKSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6MzM6XFx0XFx0cGtleV9oYW5kbGVyX3JlcXVlc3RfbW9kdWxlcygpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjM0OlxcdFxcdHJjID0gcGtleV9oYW5kbGVyX2dlbl9rZXkoTlVMTCwgMCxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0zNS1cXHRcXHRcXHRcXHRcXHQgIGtleXR5cGUsIGtleXN1YnR5cGUsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYz00OT1zdGF0aWMgc3NpemVfdCBwa2V5X3Byb3RrZXlfYWVzX2F0dHJfcmVhZCh1MzIga2V5dHlwZSwgYm9vbCBpc194dHMsIGNoYXIgKmJ1ZixcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTY3LVxcdHByb3RrZXkubGVuID0gc2l6ZW9mKHByb3RrZXkucHJvdGtleSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6Njg6XFx0cmMgPSBzeXNfcGtleV9oYW5kbGVyX2dlbl9rZXkoa2V5dHlwZSwgUEtFWV9UWVBFX1BST1RLRVksIDAsIDAsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtNjktXFx0XFx0XFx0XFx0ICAgICAgcHJvdGtleS5wcm90a2V5LCBcXHUwMDI2cHJvdGtleS5sZW4sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy04MS1cXHRcXHRwcm90a2V5LmxlbiA9IHNpemVvZihwcm90a2V5LnByb3RrZXkpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjgyOlxcdFxcdHJjID0gc3lzX3BrZXlfaGFuZGxlcl9nZW5fa2V5KGtleXR5cGUsIFBLRVlfVFlQRV9QUk9US0VZLCAwLCAwLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTgzLVxcdFxcdFxcdFxcdFxcdCAgICAgIHByb3RrZXkucHJvdGtleSwgXFx1MDAyNnByb3RrZXkubGVuLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM9MTA2PXN0YXRpYyBzc2l6ZV90IHBrZXlfcHJvdGtleV9hZXNfeHRzX2F0dHJfcmVhZCh1MzIga2V5dHlwZSwgY2hhciAqYnVmLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMTMxLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjEzMjpcXHRyYyA9IHN5c19wa2V5X2hhbmRsZXJfZ2VuX2tleShrZXl0eXBlLCBQS0VZX1RZUEVfUFJPVEtFWSwgMCwgMCxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0xMzMtXFx0XFx0XFx0XFx0ICAgICAgdC1cXHUwMDNlcHJvdGtleSwgXFx1MDAyNnByb3RsZW4sIFxcdTAwMjZwcm90dHlwZSk7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYz0xNDg9c3RhdGljIHNzaXplX3QgcGtleV9wcm90a2V5X2htYWNfYXR0cl9yZWFkKHUzMiBrZXl0eXBlLCBjaGFyICpidWYsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0xNzMtXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6MTc0OlxcdHJjID0gc3lzX3BrZXlfaGFuZGxlcl9nZW5fa2V5KGtleXR5cGUsIFBLRVlfVFlQRV9QUk9US0VZLCAwLCAwLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTE3NS1cXHRcXHRcXHRcXHQgICAgICB0LVxcdTAwM2Vwcm90a2V5LCBcXHUwMDI2cHJvdGxlbiwgXFx1MDAyNnByb3R0eXBlKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jPTMwOD1zdGF0aWMgc3NpemVfdCBwa2V5X2NjYWRhdGFfYWVzX2F0dHJfcmVhZCh1MzIga2V5dHlwZSwgYm9vbCBpc194dHMsIGNoYXIgKmJ1ZixcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTMyMS1cXHRidWZsZW4gPSBzaXplb2Yoc2Vja2V5LVxcdTAwM2VzZWNrZXkpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjMyMjpcXHRyYyA9IHN5c19wa2V5X2hhbmRsZXJfZ2VuX2tleShrZXl0eXBlLCBQS0VZX1RZUEVfQ0NBX0RBVEEsIDAsIDAsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMzIzLVxcdFxcdFxcdFxcdCAgICAgIHNlY2tleS1cXHUwMDNlc2Vja2V5LCBcXHUwMDI2YnVmbGVuLCBOVUxMKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTMyOS1cXHRcXHRidWZsZW4gPSBzaXplb2Yoc2Vja2V5LVxcdTAwM2VzZWNrZXkpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjMzMDpcXHRcXHRyYyA9IHN5c19wa2V5X2hhbmRsZXJfZ2VuX2tleShrZXl0eXBlLCBQS0VZX1RZUEVfQ0NBX0RBVEEsIDAsIDAsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMzMxLVxcdFxcdFxcdFxcdFxcdCAgICAgIHNlY2tleS1cXHUwMDNlc2Vja2V5LCBcXHUwMDI2YnVmbGVuLCBOVUxMKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jPTQxOT1zdGF0aWMgc3NpemVfdCBwa2V5X2NjYWNpcGhlcl9hZXNfYXR0cl9yZWFkKGVudW0gcGtleV9rZXlfc2l6ZSBrZXliaXRzLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtNDMzLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjQzNDpcXHRyYyA9IHN5c19wa2V5X2hhbmRsZXJfZ2VuX2tleShwa2V5X2Flc19iaXRzaXplX3RvX2tleXR5cGUoa2V5Yml0cyksXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtNDM1LVxcdFxcdFxcdFxcdCAgICAgIFBLRVlfVFlQRV9DQ0FfQ0lQSEVSLCBrZXliaXRzLCAwLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtNDQyLVxcdFxcdGJ1ZiArPSBDQ0FDSVBIRVJUT0tFTlNJWkU7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6NDQzOlxcdFxcdHJjID0gc3lzX3BrZXlfaGFuZGxlcl9nZW5fa2V5KFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTQ0NC1cXHRcXHRcXHRwa2V5X2Flc19iaXRzaXplX3RvX2tleXR5cGUoa2V5Yml0cyksXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYz01MzQ9c3RhdGljIHNzaXplX3QgcGtleV9lcDExX2Flc19hdHRyX3JlYWQoZW51bSBwa2V5X2tleV9zaXplIGtleWJpdHMsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy01NDgtXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6NTQ5OlxcdHJjID0gc3lzX3BrZXlfaGFuZGxlcl9nZW5fa2V5KHBrZXlfYWVzX2JpdHNpemVfdG9fa2V5dHlwZShrZXliaXRzKSxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy01NTAtXFx0XFx0XFx0XFx0ICAgICAgUEtFWV9UWVBFX0VQMTFfQUVTLCBrZXliaXRzLCAwLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtNTU3LVxcdFxcdGJ1ZiArPSBNQVhFUDExQUVTS0VZQkxPQlNJWkU7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6NTU4OlxcdFxcdHJjID0gc3lzX3BrZXlfaGFuZGxlcl9nZW5fa2V5KFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTU1OS1cXHRcXHRcXHRwa2V5X2Flc19iaXRzaXplX3RvX2tleXR5cGUoa2V5Yml0cyksXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0yMzM9c3RhdGljIGludCB1dl92ZXJpZnlrZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI3MS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoyNzI6c3RhdGljIHN0cnVjdCBwa2V5X2hhbmRsZXIgdXZfaGFuZGxlciA9IHtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yNzMtXFx0Lm1vZHVsZVxcdFxcdFxcdCA9IFRISVNfTU9EVUxFLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9Mjg0PXN0YXRpYyBpbnQgX19pbml0IHBrZXlfdXZfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjk3LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjI5ODpcXHRyYyA9IHBrZXlfaGFuZGxlcl9yZWdpc3RlcihcXHUwMDI2dXZfaGFuZGxlcik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjk5LVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTMwOD1zdGF0aWMgdm9pZCBfX2V4aXQgcGtleV91dl9leGl0KHZvaWQpXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMzA5LXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzozMTA6XFx0cGtleV9oYW5kbGVyX3VucmVnaXN0ZXIoXFx1MDAyNnV2X2hhbmRsZXIpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTMxMS1cXHRtdXRleF9sb2NrKFxcdTAwMjZ1dl9saXN0X211dGV4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTI6MzguMTQzNzM1Nzc1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1MDAzOTM3MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhY2hpbmcgYHV2X2ZpbmRfc2VjcmV0YCBmcm9tIFVzZXJzcGFjZSB2aWEgYC9kZXYvcGtleWAgaW9jdGxzKipcblxuT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdHJhY2luZyB0aGUgcGF0aCB0byBgdXZfZmluZF9zZWNyZXRgLiBJdCdzIGNhbGxlZCBmcm9tIGBnZXRfc2VjcmV0X21ldGFkYXRhYCwgd2hpY2ggaXMgaXRzZWxmIGNhbGxlZCBmcm9tIHR3byBwbGFjZXM6IGByZXRyaWV2ZV9zZWNyZXRgIGFuZCBgdXZfdmVyaWZ5a2V5YC4gSSBrbm93IHRoYXQgYHV2X3ZlcmlmeWtleWAgaXMgcmVnaXN0ZXJlZCBhcyBgLnZlcmlmeV9rZXlgIHdpdGhpbiBgdXZfaGFuZGxlcmAsIHdoaWNoIGlzIGluaXRpYWxpemVkIGR1cmluZyBgcGtleV91dl9pbml0YC4gQW5kIGBwa2V5X3V2X2luaXRgIGlzIHRoZSBtb2R1bGUgaW5pdCBmdW5jdGlvbiBmb3IgYHBrZXlfdXZgLlxuXG5TbywgYHV2X3ZlcmlmeWtleWAgaXMgdWx0aW1hdGVseSBjYWxsZWQgYnkgYHBrZXlfaGFuZGxlcl92ZXJpZnlfa2V5YC4gVGhhdCwgaW4gdHVybiwgaXMgdHJpZ2dlcmVkIGJ5IGBwa2V5X2lvY3RsX3ZlcmlmeWtleWAsIGBwa2V5X2lvY3RsX3ZlcmlmeWtleTJgLCBhbmQgYHBrZXlfaW9jdGxfdmVyaWZ5cHJvdGtgLiBBaGEhIFRob3NlIGFyZSBpb2N0bHMgb24gYC9kZXYvcGtleWAuIFRoYXQncyB0aGUgbGluay4gKipZZXMsIHRoaXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCB0aG9zZSBgL2Rldi9wa2V5YCBpb2N0bHMuKipcblxuTm93IHRoZSBjcml0aWNhbCBxdWVzdGlvbjogY2FuIHRoaXMgYmUgcmVhY2hlZCBpbiBRRU1VPyBJIGtub3cgdGhlIHMzOTB4IGFyY2hpdGVjdHVyZSBnZXRzIGF0dGVudGlvbiBmcm9tIHN5emthbGxlci4gVGhhdCdzIGEgZ29vZCBzaWduLiBBbmQsIGxvb2tpbmcgYXQgdGhlIGNvZGUsIEkgc2VlIHRoYXQgYHV2X2ZpbmRfc2VjcmV0YCBpcyBsb2NhdGVkIGluIGBhcmNoL3MzOTAva2VybmVsL3V2LmNgLiBUaGVyZWZvcmUsIHRoZSBhcmNoaXRlY3R1cmUgdGhhdCB1c2VzIHRoaXMgaXMgczM5MHguXG5cbkxldCdzIHF1aWNrbHkgY2hlY2sgd2hldGhlciBgQ09ORklHX1BLRVlfVVZgIGlzIHJlcXVpcmVkIGluIHRoZSBjb25maWd1cmF0aW9uLiBUaGF0J2xsIGJlIGEga2V5IHBhcnQgb2YgZGV0ZXJtaW5pbmcgdGhlIG92ZXJhbGwgZXhwb3N1cmUgdG8gZXhwbG9pdGF0aW9uIGluIHRoZSB2YXJpb3VzIGJ1aWxkIHNldHVwcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3MDcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTI6NDMuNjQ0MTMyNDc5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjIwNzA2NjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQS0VZX1VWXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvY3J5cHRvL0tjb25maWc9MTM3PWNvbmZpZyBQS0VZX1BDS01PXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTE1Ny1cXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnOjE1ODpjb25maWcgUEtFWV9VVlxcbmRyaXZlcnMvY3J5cHRvL0tjb25maWctMTU5LVxcdHRyaXN0YXRlIFxcXCJQS0VZIFVWIHN1cHBvcnQgaGFuZGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTI6NDUuMjY0ODQ2OTkyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MTIxODIzNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIEtjb25maWcgT3B0aW9ucyBmb3IgUEtFWV9VVioqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgS2NvbmZpZyBkZWZpbml0aW9uIGZvciBgUEtFWV9VVmAuIE15IGluc3RpbmN0IHNheXMgaXQnbGwgYmUgaW4gZWl0aGVyIHRoZSBzMzkwIGNyeXB0byBkcml2ZXJzIG9yIHRoZSBnZW5lcmljIGNyeXB0byBzZWN0aW9uLiBHaXZlbiBpdHMgbGlrZWx5IGZ1bmN0aW9uLCB0aGUgczM5MCBwYXRoIG1pZ2h0IGJlIGEgYmV0dGVyIGJldCBzaW5jZSBpdCdzIHByb2JhYmx5IHJlbGF0ZWQgdG8gaGFyZHdhcmUtc3BlY2lmaWMga2V5IG1hbmFnZW1lbnQuIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgYGRyaXZlcnMvczM5MC9jcnlwdG8vS2NvbmZpZ2AgZmlyc3QuIElmIGl0J3Mgbm90IHRoZXJlLCBJJ2xsIG1vdmUgb24gYW5kIGltbWVkaWF0ZWx5IGxvb2sgaW4gYGRyaXZlcnMvY3J5cHRvL0tjb25maWdgLiBUaGF0J3MgdGhlIGxvZ2ljYWwgcHJvZ3Jlc3Npb24uIEZpbmRpbmcgdGhlIGV4YWN0IGxvY2F0aW9uIGFuZCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgYFBLRVlfVVZgIGlzIGtleSBmb3Igd2hhdGV2ZXIgSSdtIHRyb3VibGVzaG9vdGluZyBvciBjb25maWd1cmluZy4gTGV0J3Mgc2VlIHdoYXQgd2UgZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc0MTAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODoxMjo0OS4wNzcwMzIxOVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM1NTAxMjYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQS0VZX1VWXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTI6NDkuMTIwNTkyNjA1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MTMzOTU2MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHVuZm9sZGVkOlxuXG4qKkRlYnVnZ2luZyBLY29uZmlnIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gY2hhc2luZyBkb3duIHRoaXMgYFBLRVlfUENLTU9gIGNvbmZpZ3VyYXRpb24gaXNzdWUuIEl0IGxvb2tzIGxpa2UgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gaXMgcG9pbnRpbmcgbWUgdG8gYGRyaXZlcnMvY3J5cHRvL0tjb25maWdgLCB3aGljaCBzZWVtcyBsb2dpY2FsLiBXYWl0IGEgbWludXRl4oCmIHRoZSBvdXRwdXQgaW5kaWNhdGVzIGBkcml2ZXJzL2NyeXB0by9LY29uZmlnPTEzNz1jb25maWcgUEtFWV9QQ0tNT2AsIGNvbmZpcm1pbmcgdGhhdCBsb2NhdGlvbiBpcyByZWxldmFudC4gQnV0IHNvbWV0aGluZyBmZWVscyBvZmYuIERpZG4ndCBJIGp1c3QgdHJ5IHRvIGxvb2sgaW50byBgZHJpdmVycy9zMzkwL2NyeXB0by9LY29uZmlnYD8gQW5kIHRoYXQgKmRpZG4ndCogZXhpc3QsIHJpZ2h0PyBPa2F5LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gbG9va2luZyBpbiB0aGUgcmlnaHQgcGxhY2UsIHNvIG5vdyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgbG9jYXRpb24gb3IganVzdCB2ZXJpZnkgaXQncyB0aGUgY29ycmVjdCBLY29uZmlnIGZpbGUuIExldCdzIHJldmlzaXQgYm90aCB0aG9zZSBLY29uZmlnIGxvY2F0aW9ucy4gR290dGEgbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXhlZCBzb21ldGhpbmcgdXAsIGdpdmVuIHRoYXQgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBvbmUgc2VlbXMgYWJzZW50LiBUaGlzIGZlZWxzIGxpa2UgaXQgbWlnaHQgYmUgYSBzdWJ0bGUgYnV0IGNyaXRpY2FsIGRpZmZlcmVuY2UgaW4gaG93IHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkL2NvbmZpZ3VyZWQgYmFzZWQgb24gdGhlIGFyY2hpdGVjdHVyZSwgd2hpY2ggaXMgaW1wb3J0YW50IHRvIGtlZXAgaW4gbWluZC4gSSBob3BlIEkgY2FuIHJlc29sdmUgdGhpcyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTc2ODEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODoxMjo1NC4wMzM5OTA3NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9jcnlwdG8vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNTA6XFx0XFx0ICBpcyBlc3BlY2lhbGx5IHVzZWQgZHVyaW5nIHNlbGYgdGVzdCBvZiBwcm90ZWN0ZWQga2V5IGNpcGhlcnMgbGlrZVxcbiAxNTE6XFx0XFx0ICBQQUVTIGJ1dCB0aGUgQ0NBIGFuZCBFUDExIGhhbmRsZXIgcHJvdmlkZSBhbHRlcm5hdGUgd2F5cyB0b1xcbiAxNTI6XFx0XFx0ICBnZW5lcmF0ZSBwcm90ZWN0ZWQga2V5cyBmcm9tIGNsZWFyIGtleSB2YWx1ZXMuXFxuIDE1MzpcXHRcXG4gMTU0OlxcdFxcdCAgSWYgeW91IGhhdmUgc2VsZWN0ZWQgdGhlIFBLRVkgb3B0aW9uIHRoZW4geW91IHNob3VsZCBhbHNvIGVuYWJsZVxcbiAxNTU6XFx0XFx0ICB0aGlzIG9wdGlvbiB1bmxlc3MgeW91IGFyZSBzdXJlIHlvdSBuZXZlciBuZWVkIHRvIGRlcml2ZSBwcm90ZWN0ZWRcXG4gMTU2OlxcdFxcdCAga2V5cyBmcm9tIGNsZWFyIGtleSB2YWx1ZXMgZGlyZWN0bHkgdmlhIFBDS01PLlxcbiAxNTc6XFx0XFxuIDE1ODpcXHRjb25maWcgUEtFWV9VVlxcbiAxNTk6XFx0XFx0dHJpc3RhdGUgXFxcIlBLRVkgVVYgc3VwcG9ydCBoYW5kbGVyXFxcIlxcbiAxNjA6XFx0XFx0ZGVwZW5kcyBvbiBQS0VZXFxuIDE2MTpcXHRcXHRkZXBlbmRzIG9uIFMzOTBfVVZfVUFQSVxcbiAxNjI6XFx0XFx0aGVscFxcbiAxNjM6XFx0XFx0ICBUaGlzIGlzIHRoZSBQS0VZIFVsdHJhdmlzb3Igc3VwcG9ydCBoYW5kbGVyIGZvciBkZXJpdmluZyBwcm90ZWN0ZWRcXG4gMTY0OlxcdFxcdCAga2V5cyBmcm9tIHNlY3JldHMgc3RvcmVkIHdpdGhpbiB0aGUgVWx0cmF2aXNvciAoVVYpLlxcbiAxNjU6XFx0XFxuIDE2NjpcXHRcXHQgIFRoaXMgbW9kdWxlIHdvcmtzIHRvZ2V0aGVyIHdpdGggdGhlIFVWIGRldmljZSBhbmQgc3VwcG9ydHMgdGhlXFxuIDE2NzpcXHRcXHQgIHJldHJpZXZhbCBvZiBwcm90ZWN0ZWQga2V5cyBmcm9tIHNlY3JldHMgc3RvcmVkIHdpdGhpbiB0aGVcXG4gMTY4OlxcdFxcdCAgVVYgZmlybXdhcmUgbGF5ZXIuIFRoaXMgc2VydmljZSBpcyBvbmx5IGF2YWlsYWJsZSB3aXRoaW5cXG4gMTY5OlxcdFxcdCAgYSBwcm90ZWN0ZWQgZXhlY3V0aW9uIGd1ZXN0IGFuZCB0aHVzIHRoaXMgbW9kdWxlIHdpbGwgZmFpbCB1cG9uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjEyOjU0LjAzNDA5NzEyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzMTkzODYwMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqU2VjdXJlIEV4ZWN1dGlvbiBhbmQgU3l6a2FsbGVyIG9uIHMzOTB4KipcblxuT2theSwgc28gSSBzZWUgdGhpcyBtZXNzYWdlOiBcIlRoaXMgc2VydmljZSBpcyBvbmx5IGF2YWlsYWJsZSB3aXRoaW4gYSBwcm90ZWN0ZWQgZXhlY3V0aW9uIGd1ZXN0LFwiIHdoaWNoIGltbWVkaWF0ZWx5IHJhaXNlcyBhIHF1ZXN0aW9uOiBkb2VzIFFFTVUsIHRoZSB2aXJ0dWFsIG1hY2hpbmUgSSdtIHByb2JhYmx5IGRlYWxpbmcgd2l0aCBoZXJlLCBhY3R1YWxseSBzdXBwb3J0IHNlY3VyZSBleGVjdXRpb24/IEl0IHNvdW5kcyBsaWtlIGEgc2VjdXJlIGV4ZWN1dGlvbiBndWVzdCwgb3IgU2VjdXJlIEV4ZWN1dGlvbiwgaXMgYSBwcmVyZXF1aXNpdGUuXG5cbkdvb2QsIGl0IHNlZW1zIFFFTVUgKmRvZXMqIHN1cHBvcnQgczM5MHggU2VjdXJlIEV4ZWN1dGlvbiwgc3BlY2lmaWNhbGx5IHVzaW5nICdwcm90dmlydCcuIFRoYXQncyBhIHBvaW50IGluIHRoZSByaWdodCBkaXJlY3Rpb24uIEJ1dCBob2xkIG9uLCB0aGUgcmVhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHN5emthbGxlciBpcyAqY29uZmlndXJlZCogdG8gcnVuIHMzOTB4IGluIHRoaXMgU2VjdXJlIEV4ZWN1dGlvbiBtb2RlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHN5emthbGxlcidzIHNldHVwIGlzIGNvbXBhdGlibGUuXG5cbkxldCdzIHJlLWV4YW1pbmUgdGhlIHByb21wdCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBoaW50cywgaXQgc3RhdGVzIHRoYXQgXCJDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmVcIi4gU2luY2UgUUVNVSAqY2FuKiBzdXBwb3J0IHMzOTB4IFNlY3VyZSBFeGVjdXRpb24sIHRoYXQgY29kZSBwYXRoIGlzIGluZGVlZCBwb3NzaWJsZSB0byByZWFjaC5cblxuT2theSwgc2luY2UgUUVNVSAqc3VwcG9ydHMqIHMzOTB4IFNlY3VyZSBFeGVjdXRpb24gYW5kIHRoZSBcIkNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHNcIiBsaW5lIGNhbiBiZSBjb25zaWRlcmVkIGFzIHRoZSBjYXZlYXQsIGl0ICppcyogcG9zc2libGUgdG8gcmVhY2guIExldCdzIHNlZSBpZiB0aGVyZSBpcyBhbnkgZXZpZGVuY2Ugb2YgdGhlIGFiaWxpdHkgdG8gY2FsbCBgdXZfZmluZF9zZWNyZXRgIGluIGBhcmNoL3MzOTAva2VybmVsL3V2LmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODM3OCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjEzOjAwLjM1MzQ4NjQ0OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3MzOTAva2VybmVsL3V2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzcwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzcwOlxcdH1cXG4gNzcxOlxcdFxcbiA3NzI6XFx0LyoqXFxuIDc3MzpcXHQgKiB1dl9maW5kX3NlY3JldCgpIC0gc2VhcmNoIHNlY3JldCBtZXRhZGF0YSBmb3IgYSBnaXZlbiBzZWNyZXQgaWQuXFxuIDc3NDpcXHQgKiBAc2VjcmV0X2lkOiBzZWFyY2ggcGF0dGVybi5cXG4gNzc1OlxcdCAqIEBsaXN0OiBlcGhlbWVyYWwgYnVmZmVyIHNwYWNlXFxuIDc3NjpcXHQgKiBAc2VjcmV0OiBvdXRwdXQgZGF0YSwgY29udGFpbmluZyB0aGUgc2VjcmV0J3MgbWV0YWRhdGEuXFxuIDc3NzpcXHQgKlxcbiA3Nzg6XFx0ICogQ29udGV4dDogbWlnaHQgc2xlZXAuXFxuIDc3OTpcXHQgKi9cXG4gNzgwOlxcdGludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXFxuIDc4MTpcXHRcXHRcXHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QsXFxuIDc4MjpcXHRcXHRcXHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbV9oZHIgKnNlY3JldClcXG4gNzgzOlxcdHtcXG4gNzg0OlxcdFxcdHUxNiBzdGFydF9pZHg7XFxuIDc4NTpcXHRcXHR1MTYgbGlzdF9yYztcXG4gNzg2OlxcdFxcdGludCByZXQ7XFxuIDc4NzpcXHRcXG4gNzg4OlxcdFxcdGxpc3QtXFx1MDAzZW5leHRfc2VjcmV0X2lkeCA9IDA7XFxuIDc4OTpcXHRcXG4gNzkwOlxcdFxcdGRvIHtcXG4gNzkxOlxcdFxcdFxcdHN0YXJ0X2lkeCA9IGxpc3QtXFx1MDAzZW5leHRfc2VjcmV0X2lkeDtcXG4gNzkyOlxcdFxcdFxcdHV2X2xpc3Rfc2VjcmV0cyhsaXN0LCBzdGFydF9pZHgsIFxcdTAwMjZsaXN0X3JjLCBOVUxMKTtcXG4gNzkzOlxcdFxcdFxcdGlmIChsaXN0X3JjICE9IFVWQ19SQ19FWEVDVVRFRCBcXHUwMDI2XFx1MDAyNiBsaXN0X3JjICE9IFVWQ19SQ19NT1JFX0RBVEEpIHtcXG4gNzk0OlxcdFxcdFxcdFxcdGlmIChsaXN0X3JjID09IFVWQ19SQ19JTlZfQ01EKVxcbiA3OTU6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIDc5NjpcXHRcXHRcXHRcXHRlbHNlXFxuIDc5NzpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTztcXG4gNzk4OlxcdFxcdFxcdH1cXG4gNzk5OlxcdFxcdFxcdHJldCA9IGZpbmRfc2VjcmV0X2luX3BhZ2Uoc2VjcmV0X2lkLCBsaXN0LCBzZWNyZXQpO1xcbiA4MDA6XFx0XFx0XFx0aWYgKHJldCA9PSAwKVxcbiA4MDE6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gODAyOlxcdFxcdH0gd2hpbGUgKGxpc3RfcmMgPT0gVVZDX1JDX01PUkVfREFUQSBcXHUwMDI2XFx1MDAyNiBzdGFydF9pZHggXFx1MDAzYyBsaXN0LVxcdTAwM2VuZXh0X3NlY3JldF9pZHgpO1xcbiA4MDM6XFx0XFxuIDgwNDpcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4gODA1OlxcdH1cXG4gODA2OlxcdEVYUE9SVF9TWU1CT0xfR1BMKHV2X2ZpbmRfc2VjcmV0KTtcXG4gODA3OlxcdFxcbiA4MDg6XFx0LyoqXFxuIDgwOTpcXHQgKiB1dl9yZXRyaWV2ZV9zZWNyZXQoKSAtIGdldCB0aGUgc2VjcmV0IHZhbHVlIGZvciB0aGUgc2VjcmV0IGluZGV4LlxcbiA4MTA6XFx0ICogQHNlY3JldF9pZHg6IFNlY3JldCBpbmRleCBmb3Igd2hpY2ggdGhlIHNlY3JldCBzaG91bGQgYmUgcmV0cmlldmVkLlxcbiA4MTE6XFx0ICogQGJ1ZjogQnVmZmVyIHRvIHN0b3JlIHJldHJpZXZlZCBzZWNyZXQuXFxuIDgxMjpcXHQgKiBAYnVmX3NpemU6IFNpemUgb2YgdGhlIGJ1ZmZlci4gVGhlIGNvcnJlY3QgYnVmZmVyIHNpemUgaXMgcmVwb3J0ZWQgYXMgcGFydCBvZlxcbiA4MTM6XFx0ICogdGhlIHJlc3VsdCBmcm9tIGB1dl9nZXRfc2VjcmV0X21ldGFkYXRhYC5cXG4gODE0OlxcdCAqXFxuIDgxNTpcXHQgKiBDYWxscyB0aGUgUmV0cmlldmUgU2VjcmV0IFVWQyBhbmQgdHJhbnNsYXRlcyB0aGUgVVYgcmV0dXJuIGNvZGUgaW50byBhbiBlcnJuby5cXG4gODE2OlxcdCAqXFxuIDgxNzpcXHQgKiBDb250ZXh0OiBtaWdodCBzbGVlcC5cXG4gODE4OlxcdCAqXFxuIDgxOTpcXHQgKiBSZXR1cm46XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjEzOjAwLjM1MzU3ODQ1OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDIwMjM4MDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IFVWIFNlY3JldCBTZWFyY2ggRml4KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgdGlnaHRlbmluZyB1cCB0aGUgc2VjcmV0IHNlYXJjaGluZyBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgYHV2X2ZpbmRfc2VjcmV0YCBhbmQgYGZpbmRfc2VjcmV0X2luX3BhZ2VgIGZ1bmN0aW9ucy4gSXQgbG9va3MgbGlrZSB3ZSdyZSBmaXhpbmcgYSBidWcgcmVsYXRlZCB0byBob3cgYHN0YXJ0X2lkeGAgaXMgYmVpbmcgaGFuZGxlZCwgYW5kIHRoZXJlJ3MgYSBwcm9ibGVtIHdpdGggYGZpbmRfc2VjcmV0X2luX3BhZ2VgIHVzaW5nIGBsaXN0LVx1MDAzZXRvdGFsX251bV9zZWNyZXRzYCB3aGVuIGl0IHNob3VsZCBoYXZlIGJlZW4gdXNpbmcgYGxpc3QtXHUwMDNlbnVtX3NlY3Jfc3RvcmVkYC4gQSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZSwgd2hpY2ggaXMgZ29vZCDigJMgaXQgbWVhbnMgd2UncmUgYWRkcmVzc2luZyBhIGtub3duIGlzc3VlLlxuXG5UaGUgaW50ZXJlc3RpbmcgYml0IGlzIHdoZXJlIHRoaXMgY29kZSByZXNpZGVzIOKAkyBpdCdzIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBgL2Rldi9wa2V5YCBpb2N0bHMgc3BlY2lmaWNhbGx5IG9uIHMzOTB4IHN5c3RlbXMuIFRoaXMgdGllcyBpdCB0byB0aGUgaGFyZHdhcmUga2V5IHN1cHBvcnQsIHNvIHdlIG5lZWQgdG8gYmUgZXh0cmEgY2FyZWZ1bCB0byBub3QgYnJlYWsgYW55dGhpbmcuIFRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgbmVlZGVkIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHkgYXJlIGBQS0VZX1VWYCwgYFMzOTBfVVZfVUFQSWAsIGFuZCBgUEtFWWAuIFdlJ3JlIGdvaW5nIHRvIG5lZWQgdG8gdmVyaWZ5IGhvdyBgUEtFWWAgaXMgY29uZmlndXJlZCBpbiBvdXIgZW52aXJvbm1lbnQuIEknbGwgdGFrZSBhIGxvb2sgYXQgdGhlIGBQS0VZYCBjb25maWd1cmF0aW9uIHJpZ2h0IGF3YXkgdG8gYXNzZXNzIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NzIxLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTM6MDQuNzczODE4NjI1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDU4ODEzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUEtFWVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2NyeXB0by9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvY3J5cHRvL0tjb25maWc9Njc9Y29uZmlnIFpDUllQVFxcbi0tXFxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZy03Ny1cXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnOjc4OmNvbmZpZyBQS0VZXFxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZy03OS1cXHR0cmlzdGF0ZSBcXFwiS2VybmVsIEFQSSBmb3IgcHJvdGVjdGVkIGtleSBoYW5kbGluZ1xcXCJcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL0tjb25maWctMTA0LVxcbmRyaXZlcnMvY3J5cHRvL0tjb25maWc6MTA1OmNvbmZpZyBQS0VZX0NDQVxcbmRyaXZlcnMvY3J5cHRvL0tjb25maWctMTA2LVxcdHRyaXN0YXRlIFxcXCJQS0VZIENDQSBzdXBwb3J0IGhhbmRsZXJcXFwiXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTEyMC1cXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnOjEyMTpjb25maWcgUEtFWV9FUDExXFxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZy0xMjItXFx0dHJpc3RhdGUgXFxcIlBLRVkgRVAxMSBzdXBwb3J0IGhhbmRsZXJcXFwiXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTEzNi1cXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnOjEzNzpjb25maWcgUEtFWV9QQ0tNT1xcbmRyaXZlcnMvY3J5cHRvL0tjb25maWctMTM4LVxcdHRyaXN0YXRlIFxcXCJQS0VZIFBDS01PIHN1cHBvcnQgaGFuZGxlclxcXCJcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL0tjb25maWctMTU3LVxcbmRyaXZlcnMvY3J5cHRvL0tjb25maWc6MTU4OmNvbmZpZyBQS0VZX1VWXFxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZy0xNTktXFx0dHJpc3RhdGUgXFxcIlBLRVkgVVYgc3VwcG9ydCBoYW5kbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODoxMzowNC44MTg0MTUwNFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzk2ODIyMDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGVwZW5kZW5jaWVzIGFuZCBLZXkgQ29uc2lkZXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCByaWdodCBvZmYgdGhlIGJhdCwgSSBrbm93IEknbSBkZWFsaW5nIHdpdGggYFBLRVlgIGFuZCBgUEtFWV9VVmAuIFRoYXQncyB0aGUgY29yZSBvZiB0aGUgcHJvYmxlbS4gQnV0LCBob2xkIG9uIGEgc2Vjb25kLiBJIGhhdmUgYSBodW5jaC4uLiBkb2Vzbid0IGBQS0VZYCBvZnRlbiBoYXZlIGEgdGlnaHQgbGluayB3aXRoIGBaQ1JZUFRgPyBJJ2QgYmV0dGVyIGRvdWJsZS1jaGVjayB0aG9zZSBkZXBlbmRlbmNpZXMgYmVmb3JlIEkgbW92ZSBhbnkgZnVydGhlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgc2NvcGUgaGVyZSwgYW5kIHRoYXQgc3RhcnRzIHdpdGgga25vd2luZyBob3cgYFBLRVlgIHJlbGllcyBvbiBvdGhlciBtb2R1bGVzIG9yIGNvbXBvbmVudHMuIExldCdzIGRpZyBpbnRvIGBQS0VZYCdzIGRlcGVuZGVuY2llcyBhbmQgY29uZmlybSBteSBpbml0aWFsIHRob3VnaHQuIFRoYXQgZGVwZW5kZW5jeSBjaGVjayBpcyBlc3NlbnRpYWwgdG8gYnVpbGRpbmcgYSByZWxpYWJsZSBzb2x1dGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA0NDMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODoxMzowOC42MTUyMzk3NzlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9jcnlwdG8vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA3OCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA3ODpcXHRjb25maWcgUEtFWVxcbiAgNzk6XFx0XFx0dHJpc3RhdGUgXFxcIktlcm5lbCBBUEkgZm9yIHByb3RlY3RlZCBrZXkgaGFuZGxpbmdcXFwiXFxuICA4MDpcXHRcXHRkZXBlbmRzIG9uIFMzOTBcXG4gIDgxOlxcdFxcdGhlbHBcXG4gIDgyOlxcdFxcdCAgV2l0aCB0aGlzIG9wdGlvbiBlbmFibGVkIHRoZSBwa2V5IGtlcm5lbCBtb2R1bGVzIHByb3ZpZGUgYW4gQVBJXFxuICA4MzpcXHRcXHQgIGZvciBjcmVhdGlvbiBhbmQgaGFuZGxpbmcgb2YgcHJvdGVjdGVkIGtleXMuIE90aGVyIHBhcnRzIG9mIHRoZVxcbiAgODQ6XFx0XFx0ICBrZXJuZWwgb3IgdXNlcnNwYWNlIGFwcGxpY2F0aW9ucyBtYXkgdXNlIHRoZXNlIGZ1bmN0aW9ucy5cXG4gIDg1OlxcdFxcbiAgODY6XFx0XFx0ICBUaGUgcHJvdGVjdGVkIGtleSBzdXBwb3J0IGlzIGRpc3RyaWJ1dGVkIGludG86XFxuICA4NzpcXHRcXHQgIC0gQSBwa2V5IGJhc2UgYW5kIEFQSSBrZXJuZWwgbW9kdWxlIChwa2V5LmtvKSB3aGljaCBvZmZlcnMgdGhlXFxuICA4ODpcXHRcXHQgICAgaW5mcmFzdHJ1Y3R1cmUgZm9yIHRoZSBwa2V5IGhhbmRsZXIga2VybmVsIG1vZHVsZXMsIHRoZSBpb2N0bFxcbiAgODk6XFx0XFx0ICAgIGFuZCB0aGUgc3lzZnMgQVBJIGFuZCB0aGUgaW4ta2VybmVsIEFQSSB0byB0aGUgY3J5cHRvIGNpcGhlclxcbiAgOTA6XFx0XFx0ICAgIGltcGxlbWVudGF0aW9ucyB1c2luZyBwcm90ZWN0ZWQga2V5LlxcbiAgOTE6XFx0XFx0ICAtIEEgcGtleSBwY2ttbyBrZXJuZWwgbW9kdWxlIChwa2V5LXBja21vLmtvKSB3aGljaCBpcyBhdXRvbWF0aWNhbGx5XFxuICA5MjpcXHRcXHQgICAgbG9hZGVkIHdoZW4gcGNrbW8gc3VwcG9ydCAodGhhdCBpcyBnZW5lcmF0aW9uIG9mIHByb3RlY3RlZCBrZXlzXFxuICA5MzpcXHRcXHQgICAgZnJvbSBjbGVhciBrZXkgdmFsdWVzKSBpcyBhdmFpbGFibGUuXFxuICA5NDpcXHRcXHQgIC0gQSBwa2V5IENDQSBrZXJuZWwgbW9kdWxlIChwa2V5LWNjYS5rbykgd2hpY2ggaXMgYXV0b21hdGljYWxseVxcbiAgOTU6XFx0XFx0ICAgIGxvYWRlZCB3aGVuIGEgQ0VYIGNyeXB0byBjYXJkIGlzIGF2YWlsYWJsZS5cXG4gIDk2OlxcdFxcdCAgLSBBIHBrZXkgRVAxMSBrZXJuZWwgbW9kdWxlIChwa2V5LWVwMTEua28pIHdoaWNoIGlzIGF1dG9tYXRpY2FsbHlcXG4gIDk3OlxcdFxcdCAgICBsb2FkZWQgd2hlbiBhIENFWCBjcnlwdG8gY2FyZCBpcyBhdmFpbGFibGUuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjEzOjA4LjYxNTMyNTcxOVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjM5NTYxMDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhlc2UgZGVwZW5kZW5jaWVzLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duIGltbWVkaWF0ZSB0aG91Z2h0cyBhcyBhbiBleHBlcnQ6XG5cbioqRGVwZW5kZW5jeSBEZWVwIERpdmUqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgYFBLRVlgICphYnNvbHV0ZWx5KiBsZWFucyBvbiBgUzM5MGAg4oCTIHRoYXQncyB0aGUgYmFzZSByZXF1aXJlbWVudC4gVGhlbiwgdGhpbmdzIGdldCBhIGJpdCBtb3JlIGludHJpY2F0ZSB3aXRoIGBQS0VZX1VWYC4gSXQncyBwdWxsaW5nIGluIGJvdGggYFBLRVlgIGFuZCBgUzM5MF9VVl9VQVBJYC4gSXQgbG9va3MgbGlrZSBzb21lIGtpbmQgb2YgVXNlci1Nb2RlIFZhcmlhbnQuIFNvLCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBzaG91bGQgcmVhbGx5IGRpZyBpbnRvIHRoZSBkZXRhaWxzIG9mIGBTMzkwX1VWX1VBUElgIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLiBVbmRlcnN0YW5kaW5nIHRoYXQgb25lIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGludGVycGxheSBvZiB0aGVzZSBvdGhlciBjb21wb25lbnRzLiBUaW1lIHRvIGludmVzdGlnYXRlIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTAzOCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTM6MTEuODU0ODg5NTM2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjU1MDkzNjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTMzkwX1VWX1VBUElcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zMzkwL2NoYXIvS2NvbmZpZz03NT1jb25maWcgSE1DX0RSVlxcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvS2NvbmZpZy04Ny1cXG5kcml2ZXJzL3MzOTAvY2hhci9LY29uZmlnOjg4OmNvbmZpZyBTMzkwX1VWX1VBUElcXG5kcml2ZXJzL3MzOTAvY2hhci9LY29uZmlnLTg5LVxcdGRlZl90cmlzdGF0ZSBtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjEzOjEzLjUwOTk4NzE5NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjA2MTU1NTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgUzM5MCBVViBVQVBJIENvbmZpZ3VyYXRpb24gT3B0aW9uKipcblxuT2theSwgc28gYFMzOTBfVVZfVUFQSWAgaXMgZGVmaW5lZCB3aXRoaW4gYGRyaXZlcnMvczM5MC9jaGFyL0tjb25maWdgLiBUaW1lIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLCBmaWd1cmUgb3V0IHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgb3IgZmVhdHVyZXMgaGluZ2Ugb24gdGhpcyBvbmUuIFdoYXQgb3RoZXIgb3B0aW9ucyBkb2VzIHRoaXMgZW5hYmxlIG9yIGRpc2FibGU/IFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBhIGRlZXBlciBkaXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTM4NSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjEzOjE2LjcxNjE0NDk5NVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3MzOTAvY2hhci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg4LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDg4OlxcdGNvbmZpZyBTMzkwX1VWX1VBUElcXG4gIDg5OlxcdFxcdGRlZl90cmlzdGF0ZSBtXFxuICA5MDpcXHRcXHRwcm9tcHQgXFxcIlVsdHJhdmlzb3IgdXNlcnNwYWNlIEFQSVxcXCJcXG4gIDkxOlxcdFxcdGRlcGVuZHMgb24gUzM5MFxcbiAgOTI6XFx0XFx0aGVscFxcbiAgOTM6XFx0XFx0ICBTZWxlY3RpbmcgZXhwb3NlcyBwYXJ0cyBvZiB0aGUgVVYgaW50ZXJmYWNlIHRvIHVzZXJzcGFjZVxcbiAgOTQ6XFx0XFx0ICBieSBwcm92aWRpbmcgYSBtaXNjIGNoYXJhY3RlciBkZXZpY2UgYXQgL2Rldi91di5cXG4gIDk1OlxcdFxcdCAgVXNpbmcgSU9DVExzIG9uZSBjYW4gaW50ZXJhY3Qgd2l0aCB0aGUgVVYuXFxuICA5NjpcXHRcXHQgIFRoZSBkZXZpY2UgaXMgb25seSBhdmFpbGFibGUgaWYgdGhlIFVsdHJhdmlzb3JcXG4gIDk3OlxcdFxcdCAgRmFjaWxpdHkgKDE1OCkgaXMgcHJlc2VudC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTM6MTYuNzE2MjEyMzM1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwNDExMzE5MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFMzOTBfVVZfVUFQSSBDb25maWd1cmF0aW9uIGFuZCBLZXkgVmVyaWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBTMzkwX1VWX1VBUElgIHNpdHVhdGlvbiwgYW5kIGl0IGxvb2tzIGxpa2UgaXQncyBpbmhlcmVudGx5IHRpZWQgdG8gdGhlIGBTMzkwYCBhcmNoaXRlY3R1cmUsIHdoaWNoIG1ha2VzIHNlbnNlLiBUbyBnZXQgdGhpcyBmdW5jdGlvbmFsaXR5IGVuYWJsZWQsIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBgUEtFWWAsIGBQS0VZX1VWYCwgYW5kIG9mIGNvdXJzZSBgUzM5MF9VVl9VQVBJYCBhcmUgYWxsIGNvcnJlY3RseSBjb25maWd1cmVkLiBJIHNob3VsZCBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlIGZvbGxvd2luZyBrZXkgZnVuY3Rpb25zOiBgdXZfZmluZF9zZWNyZXRgLCBgdXZfdmVyaWZ5a2V5YCwgYW5kIGBnZXRfc2VjcmV0X21ldGFkYXRhYC5cblxuQWhhLCBob2xkIG9uIGEgc2Vjb25kLi4uIGlzIGB1dl92ZXJpZnlrZXlgICpzdGF0aWMqIGluIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuY2A/IFRoYXQgY291bGQgaGF2ZSBpbXBsaWNhdGlvbnMgZm9yIGl0cyBhY2Nlc3NpYmlsaXR5IG9yIGhvdyBpdCdzIGJlaW5nIHVzZWQuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBpcyBpbmRlZWQgdGhlIGNhc2UuIExldCBtZSBkb3VibGUtY2hlY2sgdGhhdCBgdXZfdmVyaWZ5a2V5YCBpcywgaW4gZmFjdCwgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQncyBhIGNydWNpYWwgZGV0YWlsIHRoYXQgd2lsbCBpbmZsdWVuY2UgbXkgZnVydGhlciBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTcwOSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjEzOjIxLjc1NzM0Njk4NloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0NjM1NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXZfdmVyaWZ5a2V5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTE5MD1zdGF0aWMgaW50IHV2X2tleTJwcm90a2V5KGNvbnN0IHN0cnVjdCBwa2V5X2FwcW4gKl9hcHFucyBfX2Fsd2F5c191bnVzZWQsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yMzItXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6MjMzOnN0YXRpYyBpbnQgdXZfdmVyaWZ5a2V5KGNvbnN0IHU4ICprZXksIHUzMiBrZXlsZW4sXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjM0LVxcdFxcdFxcdHUxNiAqX2NhcmQgX19hbHdheXNfdW51c2VkLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9MjcyPXN0YXRpYyBzdHJ1Y3QgcGtleV9oYW5kbGVyIHV2X2hhbmRsZXIgPSB7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yNzctXFx0LmtleV90b19wcm90a2V5XFx0XFx0ID0gdXZfa2V5MnByb3RrZXksXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6Mjc4OlxcdC52ZXJpZnlfa2V5XFx0XFx0ID0gdXZfdmVyaWZ5a2V5LFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI3OS19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODoxMzoyMS44MDI4MTk1MTJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ3ODEwNzcxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyBLZXkgVmVyaWZpY2F0aW9uIGluIHRoZSBzMzkwIENyeXB0byBEcml2ZXIqKlxuXG5SaWdodCwgc28gSSdtIGZvY3VzaW5nIG9uIGtleSB2ZXJpZmljYXRpb24gd2l0aGluIHRoZSBzMzkwIGNyeXB0byBkcml2ZXIuIEZpcnN0IG9ic2VydmF0aW9uOiB0aGUgYHV2X3ZlcmlmeWtleWAgZnVuY3Rpb24gaXMgaW5kZWVkIHN0YXRpYywgY29uZmlybWluZyB0aGF0IGl0cyBzY29wZSBpcyBsaW1pdGVkIHRvIGl0cyBjb21waWxhdGlvbiB1bml0LiBOb3csIHRoZSBuZXh0IGVsZW1lbnQgdG8gY29uc2lkZXIgaXMgdGhhdCB0aGUgYHV2X2ZpbmRfc2VjcmV0YCBmdW5jdGlvbiBpcyBleHBvcnRlZCwgaW5kaWNhdGluZyBpdHMgdmlzaWJpbGl0eSBhbmQgcG90ZW50aWFsIHVzZSBvdXRzaWRlIG9mIGl0cyBpbW1lZGlhdGUgZGVmaW5pbmcgbW9kdWxlLlxuXG5NeSBwcmltYXJ5IGludGVyZXN0IGxpZXMgaW4gdGhlIGlvY3RsLWJhc2VkIHZlcmlmaWNhdGlvbiBtZXRob2RzIHVzZWQuIFNvLCBJIG5lZWQgdG8gdGhvcm91Z2hseSBleGFtaW5lIGBwa2V5X2lvY3RsX3ZlcmlmeWtleWAsIGBwa2V5X2lvY3RsX3ZlcmlmeWtleTJgLCBhbmQgYHBrZXlfaW9jdGxfdmVyaWZ5cHJvdGtgLiBUaGVzZSBsaWtlbHkgaGFuZGxlIHRoZSBjb3JlIGtleSB2ZXJpZmljYXRpb24gbG9naWMgdGhyb3VnaCB0aGUgaW9jdGwgaW50ZXJmYWNlLCBhbmQgdGhleSBhcmUgbG9jYXRlZCB3aXRoaW4gdGhlIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmNgIGZpbGUuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGVzZSBmdW5jdGlvbnMgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBpbnRlcmFjdCB3aXRoIGB1dl92ZXJpZnlrZXlgIGFuZCBgdXZfZmluZF9zZWNyZXRgIGlmIGF0IGFsbCwgdG8gZGV0ZXJtaW5lIHRoZSBvdmVyYWxsIGtleSB2ZXJpZmljYXRpb24gYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjM3MywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjEzOjI2LjI4MDkzMDM4MVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAxNzk4MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGtleV9pb2N0bF92ZXJpZnlrZXlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz0yNTM9c3RhdGljIGludCBwa2V5X2lvY3RsX3NrZXkycGtleShzdHJ1Y3QgcGtleV9za2V5MnBrZXkgX191c2VyICp1c3ApXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMjc1LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzoyNzY6c3RhdGljIGludCBwa2V5X2lvY3RsX3ZlcmlmeWtleShzdHJ1Y3QgcGtleV92ZXJpZnlrZXkgX191c2VyICp1dmspXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTI3Ny17XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9NDQyPXN0YXRpYyBpbnQgcGtleV9pb2N0bF9jbHIyc2VjazIoc3RydWN0IHBrZXlfY2xyMnNlY2syIF9fdXNlciAqdWNzKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTUwMi1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6NTAzOnN0YXRpYyBpbnQgcGtleV9pb2N0bF92ZXJpZnlrZXkyKHN0cnVjdCBwa2V5X3ZlcmlmeWtleTIgX191c2VyICp1dmspXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTUwNC17XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9NzAzPXN0YXRpYyBsb25nIHBrZXlfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNzI3LVxcdGNhc2UgUEtFWV9WRVJJRllLRVk6XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjcyODpcXHRcXHRyYyA9IHBrZXlfaW9jdGxfdmVyaWZ5a2V5KChzdHJ1Y3QgcGtleV92ZXJpZnlrZXkgX191c2VyICopYXJnKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNzI5LVxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTc0NS1cXHRjYXNlIFBLRVlfVkVSSUZZS0VZMjpcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6NzQ2OlxcdFxcdHJjID0gcGtleV9pb2N0bF92ZXJpZnlrZXkyKChzdHJ1Y3QgcGtleV92ZXJpZnlrZXkyIF9fdXNlciAqKWFyZyk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTc0Ny1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTM6MjYuMzMxMTE0OTU2WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MzQ5MjY5OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQS2V5IERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gdGhpcyBQS2V5IGRyaXZlciwgc3BlY2lmaWNhbGx5IHRvIHVuZGVyc3RhbmQgaG93IGtleSB2ZXJpZmljYXRpb24gd29ya3MuIEZyb20gd2hhdCBJIHNlZSwgYHBrZXlfaW9jdGxfdmVyaWZ5a2V5YCBhbmQgYHBrZXlfaW9jdGxfdmVyaWZ5a2V5MmAgYXJlIGRlZmluZWQgYXMgc3RhdGljLCBzbyB0aGV5J3JlIHByb2JhYmx5IG5vdCB0aGUgbWFpbiBlbnRyeSBwb2ludHMgSSBuZWVkIHRvIGZvY3VzIG9uLiBNeSBhdHRlbnRpb24gbmVlZHMgdG8gc2hpZnQgdG8gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBuYW1lbHkgYHV2X2ZpbmRfc2VjcmV0YCBhbmQgYHBrZXlfdW5sb2NrZWRfaW9jdGxgLiBIb2xkIG9uLCBgcGtleV91bmxvY2tlZF9pb2N0bGAuLi4gdGhhdCdzIHRoZSBpb2N0bCBoYW5kbGVyIGZvciBgL2Rldi9wa2V5YCwgaXNuJ3QgaXQ/IEJpbmdvLiBUaGF0J3MgdGhlIGtleS4gTm93LCB0byB0cmFjZSB0aGUgcGF0aCwgSSBuZWVkIHRvIHNlZSB3aGF0J3MgYWN0dWFsbHkgKmRvaW5nKiB0aGUgdmVyaWZpY2F0aW9uLiBJJ2xsIGNoZWNrIGBwa2V5X2hhbmRsZXJfdmVyaWZ5X2tleWAgaW4gYGRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmNgLiBUaGF0IHNob3VsZCBiZSB0aGUgdmVyaWZpY2F0aW9uIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzIyOCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODoxMzozMS4wNjYwNDQwOThaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODYxNDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBrZXlfaGFuZGxlcl92ZXJpZnlfa2V5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYz0yNTg9RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfY2xyX3RvX2tleSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNTktXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyNjA6aW50IHBrZXlfaGFuZGxlcl92ZXJpZnlfa2V5KGNvbnN0IHU4ICprZXksIHUzMiBrZXlsZW4sXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNjEtXFx0XFx0XFx0ICAgIHUxNiAqY2FyZCwgdTE2ICpkb20sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI3Ni19XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyNzc6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfdmVyaWZ5X2tleSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNzgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjEzOjMxLjExMDkxMTEzNFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzM1Mzg2MDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgS2V5IEhhbmRsaW5nIFdvcmtmbG93KipcblxuQWxyaWdodCwgc28gYHBrZXlfaGFuZGxlcl92ZXJpZnlfa2V5YCBpcyBhY3R1YWxseSBleHBvcnRlZCwgd2hpY2ggaXMgYSBrZXkgb2JzZXJ2YXRpb24uIE5vdyB0aGF0IEkga25vdyAqdGhhdCosIGxldCdzIHNlZSBob3cgdGhhdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZS4gTXkgbmV4dCBtb3ZlIGlzIHRvIHplcm8gaW4gb24gYHBrZXlfaGFuZGxlcl9rZXlfdG9fcHJvdGtleWAuIFVuZGVyc3RhbmRpbmcgaG93IHRoZSBrZXkgcmVwcmVzZW50YXRpb24gdHJhbnNsYXRlcyB0byBhIHByb3RlY3RlZCBrZXkgaXMgY3J1Y2lhbCBmb3IgZmlndXJpbmcgb3V0IHRoZSBzZWN1cml0eSBpbXBsaWNhdGlvbnMgaGVyZS4gSSBuZWVkIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cgYW5kIHVuZGVyc3RhbmQgaWYgdGhpcyB0cmFuc2xhdGlvbiBpbnRyb2R1Y2VzIGFueSB2dWxuZXJhYmlsaXRpZXMgb3Igd2Vha25lc3NlcyBpbiB0aGUgb3ZlcmFsbCBrZXkgbWFuYWdlbWVudCBwcm9jZXNzLiBUaGlzIGlzIHdoZXJlIHRoZSBkZXZpbCBpcyBpbiB0aGUgZGV0YWlscy4gSSBzdXNwZWN0IHRoYXQgdGhlIHBvdGVudGlhbCBzZWN1cml0eSBmbGF3LCBtYXkgbGllIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNzg1LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTM6MzQuNDQ2MzAwMDZaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NjIxMzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBrZXlfaGFuZGxlcl9rZXlfdG9fcHJvdGtleVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM9MTU2PUVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX3B1dCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xNTctXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxNTg6aW50IHBrZXlfaGFuZGxlcl9rZXlfdG9fcHJvdGtleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucywgc2l6ZV90IG5yX2FwcW5zLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTU5LVxcdFxcdFxcdFxcdGNvbnN0IHU4ICprZXksIHUzMiBrZXlsZW4sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE3NS19XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxNzY6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfa2V5X3RvX3Byb3RrZXkpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTc3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODoxMzozNC40OTM5MzEyNjZaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODUzMjg1MzA0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgU2VjcmV0IEhhbmRsaW5nIFBhdGNoKipcblxuT2theSwgc28gYHBrZXlfaGFuZGxlcl9rZXlfdG9fcHJvdGtleWAgaXMgYWxzbyBleHBvcnRlZCwgdGhhdCdzIGdvb2QgdG8gbm90ZS4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSBjZW50ZXJlZCBhcm91bmQgYHV2X2ZpbmRfc2VjcmV0YCwgd2hpY2ggaXMgdGhlIGZ1bmN0aW9uIHRoYXQgZ290IG1vZGlmaWVkLCBhbG9uZyB3aXRoIHRoZSBzdGF0aWMgZnVuY3Rpb24gYGZpbmRfc2VjcmV0X2luX3BhZ2VgLiBTbywgYHV2X2ZpbmRfc2VjcmV0YCBpcyBkZWZpbml0ZWx5IHRoZSBwcmltYXJ5IHN5bWJvbCB0byBmb2N1cyBvbiwgYnV0IEknbGwga2VlcCBgcGtleV9oYW5kbGVyX3ZlcmlmeV9rZXlgIGFuZCBgcGtleV9oYW5kbGVyX2tleV90b19wcm90a2V5YCBpbiBtaW5kIGFzIHBvdGVudGlhbGx5IHJlbGF0ZWQuIEkndmUgY29uZmlybWVkIHRoYXQgdGhlc2UgYXJlIHRoZSBvbmx5IGZ1bmN0aW9ucyB0b3VjaGVkIGJ5IHRoaXMgcGF0Y2gsIHdoaWNoIHJlaW5mb3JjZXMgbXkgaW5pdGlhbCBodW5jaC5cblxuSGVyZSdzIG15IHN1bW1hcnkgb2YgdGhlIHNpdHVhdGlvbjogdGhpcyBpcyB3b3J0aCBmdXp6aW5nLiBUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYHV2X2ZpbmRfc2VjcmV0YCDigJMgYSBjcml0aWNhbCBvbmUsIGFjdHVhbGx5LCB3aGVyZSBgc3RhcnRfaWR4YCB3YXMgYmVpbmcgdXBkYXRlZCBpbmNvcnJlY3RseSwgYW5kIGBmaW5kX3NlY3JldF9pbl9wYWdlYCB3YXMgdXNpbmcgdGhlIHdyb25nIGxpbWl0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHMzOTB4IHVsdHJhdmlzb3Igc2VjcmV0IGhhbmRsaW5nIGNvZGUsIGFuZCBpdCdzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIHRoZSBgL2Rldi9wa2V5YCBpb2N0bHMuXG5cblRoZSBwcmltYXJ5IGZvY3VzIHN5bWJvbHMgSSBzaG91bGQga2VlcCBpbiBtaW5kIGFyZSBgdXZfZmluZF9zZWNyZXRgLCBhcyB3ZWxsIGFzIGBwa2V5X2hhbmRsZXJfdmVyaWZ5X2tleWAgYW5kIGBwa2V5X2hhbmRsZXJfa2V5X3RvX3Byb3RrZXlgLlxuXG5UaGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgdG8gZW5hYmxlIGZvciB0aGlzIGZ1enppbmcgYXJlIGBQS0VZYCwgYFBLRVlfVVZgLCBhbmQgYFMzOTBfVVZfVUFQSWAuIExldCBtZSBkb3VibGUtY2hlY2suLi4geWVwLCBgUEtFWV9VVmAgaXMgdHJpc3RhdGUuIFNvIHRoYXQncyBjb3JyZWN0LlxuXG5MZXQncyBxdWlja2x5IGNoZWNrIHRoZSBkZXBlbmRlbmNpZXM6IGBQS0VZYCBkZXBlbmRzIG9uIGBTMzkwYCwgYFBLRVlfVVZgIGRlcGVuZHMgb24gYFBLRVlgIGFuZCBgUzM5MF9VVl9VQVBJYCwgYW5kIGBTMzkwX1VWX1VBUElgIGRlcGVuZHMgb24gYFMzOTBgLiBUaGVzZSB0aHJlZSBjb25maWd1cmF0aW9ucyBzZWVtIHN1ZmZpY2llbnQgdG8gZW5hYmxlIHRoZSByZWxldmFudCBmdW5jdGlvbmFsaXR5LCBzbyB0aGF0IGNoZWNrcyBvdXQuIEFscmlnaHQsIHRoaXMgbG9va3MgbGlrZSBhIGdvb2QgcGF0aCB0byB0YWtlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDI0MywiT3V0cHV0VG9rZW5zIjoxNTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTM6NDMuMDI2Nzg3MzY3WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzUwNDQwOTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBLRVlcIixcbiAgICBcIlBLRVlfVVZcIixcbiAgICBcIlMzOTBfVVZfVUFQSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInV2X2ZpbmRfc2VjcmV0XCIsXG4gICAgXCJwa2V5X2hhbmRsZXJfdmVyaWZ5X2tleVwiLFxuICAgIFwicGtleV9oYW5kbGVyX2tleV90b19wcm90a2V5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYHV2X2ZpbmRfc2VjcmV0YCB3aGVyZSBgc3RhcnRfaWR4YCB3YXMgaW5jb3JyZWN0bHkgdXBkYXRlZCBhbmQgYGZpbmRfc2VjcmV0X2luX3BhZ2VgIHVzZWQgdGhlIHdyb25nIGxpbWl0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHMzOTB4IHVsdHJhdmlzb3Igc2VjcmV0IGhhbmRsaW5nIGNvZGUsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgYC9kZXYvcGtleWAgaW9jdGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBLRVlcIixcbiAgICBcIlBLRVlfVVZcIixcbiAgICBcIlMzOTBfVVZfVUFQSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInV2X2ZpbmRfc2VjcmV0XCIsXG4gICAgXCJwa2V5X2hhbmRsZXJfdmVyaWZ5X2tleVwiLFxuICAgIFwicGtleV9oYW5kbGVyX2tleV90b19wcm90a2V5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYHV2X2ZpbmRfc2VjcmV0YCB3aGVyZSBgc3RhcnRfaWR4YCB3YXMgaW5jb3JyZWN0bHkgdXBkYXRlZCBhbmQgYGZpbmRfc2VjcmV0X2luX3BhZ2VgIHVzZWQgdGhlIHdyb25nIGxpbWl0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHMzOTB4IHVsdHJhdmlzb3Igc2VjcmV0IGhhbmRsaW5nIGNvZGUsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgYC9kZXYvcGtleWAgaW9jdGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODoxMzo0My4xMDE4Mzc2NVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMyOTY5MjEyMDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTM6NDMuMTAyMzYyMTFaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTMyOTY4NjgzODk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgdHdvIGlzc3VlczpcXG4xLiBBbiBvdXQtb2YtYm91bmRzIHJlYWQgaW4gYGZpbmRfc2VjcmV0X2luX3BhZ2UoKWAuIFRoZSBsb29wIHByZXZpb3VzbHkgdXNlZCBgbGlzdC1cXHUwMDNldG90YWxfbnVtX3NlY3JldHNgIGluc3RlYWQgb2YgYGxpc3QtXFx1MDAzZW51bV9zZWNyX3N0b3JlZGAuIFNpbmNlIGBsaXN0LVxcdTAwM2VzZWNyZXRzYCBpcyBhIGZpeGVkLXNpemUgYXJyYXkgb2YgODUgZWxlbWVudHMsIGlmIGB0b3RhbF9udW1fc2VjcmV0c2AgZXhjZWVkcyA4NSwgdGhlIGxvb3AgcmVhZHMgcGFzdCB0aGUgZW5kIG9mIHRoZSBgbGlzdGAgc3RydWN0dXJlICh3aGljaCBpcyBleGFjdGx5IG9uZSBwYWdlIGluIHNpemUpLiBUaGlzIGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHJlYWQgdGhhdCBpcyByZWxpYWJseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTi5cXG4yLiBBIGxvZ2ljIGJ1ZyBpbiBgdXZfZmluZF9zZWNyZXQoKWAgd2hlcmUgdGhlIGxvb3AgY29uZGl0aW9uIGBzdGFydF9pZHggXFx1MDAzYyBsaXN0LVxcdTAwM2VuZXh0X3NlY3JldF9pZHhgIHdhcyBhbHdheXMgZmFsc2UgYmVjYXVzZSBgc3RhcnRfaWR4YCB3YXMgYXNzaWduZWQgYGxpc3QtXFx1MDAzZW5leHRfc2VjcmV0X2lkeGAgaW1tZWRpYXRlbHkgcHJpb3IgdG8gdGhlIGNoZWNrLiBUaGUgZml4IGNvcnJlY3RseSBpbml0aWFsaXplcyBhbmQgdXBkYXRlcyBgc3RhcnRfaWR4YCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsb29wLlxcblxcblRoZSBgbGlzdGAgc3RydWN0dXJlIHBhc3NlZCB0byBgdXZfZmluZF9zZWNyZXQoKWAgaXMgZnVsbHkgemVyb2VkIGJlZm9yZSB1c2UgKHZpYSBgbWVtc2V0KHV2X2xpc3QsIDAsIHNpemVvZigqdXZfbGlzdCkpYCBpbiBgZ2V0X3NlY3JldF9tZXRhZGF0YSgpYCkuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcywgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZSBpbnRyb2R1Y2VkIG9yIGZpeGVkIGJ5IHRoaXMgcGF0Y2guIFN0YW5kYXJkIEtBU0FOIGlzIHBlcmZlY3RseSBzdWl0ZWQgdG8gY2F0Y2ggdGhlIG91dC1vZi1ib3VuZHMgcmVhZCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDU2N2VmYWM4NzJlMmMzM2NhODk3MDg0NDIwMzhmYjYxN2FkYWMyZmJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxODoxMjoxNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdXYuYyBiL2FyY2gvczM5MC9rZXJuZWwvdXYuY1xuaW5kZXggYTI4NGY5OGQ5NzE2OC4uZTcwYWNhZDA5Y2Q1ZiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rZXJuZWwvdXYuY1xuKysrIGIvYXJjaC9zMzkwL2tlcm5lbC91di5jXG5AQCAtNzYwLDcgKzc2MCw3IEBAIHN0YXRpYyBpbnQgZmluZF9zZWNyZXRfaW5fcGFnZShjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG4ge1xuIFx0dTE2IGk7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBsaXN0LVx1MDAzZXRvdGFsX251bV9zZWNyZXRzOyBpKyspIHtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGxpc3QtXHUwMDNlbnVtX3NlY3Jfc3RvcmVkOyBpKyspIHtcbiBcdFx0aWYgKG1lbWNtcChzZWNyZXRfaWQsIGxpc3QtXHUwMDNlc2VjcmV0c1tpXS5pZCwgVVZfU0VDUkVUX0lEX0xFTikgPT0gMCkge1xuIFx0XHRcdCpzZWNyZXQgPSBsaXN0LVx1MDAzZXNlY3JldHNbaV0uaGRyO1xuIFx0XHRcdHJldHVybiAwO1xuQEAgLTc4MSwxMSArNzgxLDE0IEBAIGludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG4gXHRcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqbGlzdCxcbiBcdFx0ICAgc3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW1faGRyICpzZWNyZXQpXG4ge1xuLVx0dTE2IHN0YXJ0X2lkeCA9IDA7XG4rXHR1MTYgc3RhcnRfaWR4O1xuIFx0dTE2IGxpc3RfcmM7XG4gXHRpbnQgcmV0O1xuIFxuK1x0bGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHggPSAwO1xuK1xuIFx0ZG8ge1xuK1x0XHRzdGFydF9pZHggPSBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeDtcbiBcdFx0dXZfbGlzdF9zZWNyZXRzKGxpc3QsIHN0YXJ0X2lkeCwgXHUwMDI2bGlzdF9yYywgTlVMTCk7XG4gXHRcdGlmIChsaXN0X3JjICE9IFVWQ19SQ19FWEVDVVRFRCBcdTAwMjZcdTAwMjYgbGlzdF9yYyAhPSBVVkNfUkNfTU9SRV9EQVRBKSB7XG4gXHRcdFx0aWYgKGxpc3RfcmMgPT0gVVZDX1JDX0lOVl9DTUQpXG5AQCAtNzk2LDcgKzc5OSw2IEBAIGludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG4gXHRcdHJldCA9IGZpbmRfc2VjcmV0X2luX3BhZ2Uoc2VjcmV0X2lkLCBsaXN0LCBzZWNyZXQpO1xuIFx0XHRpZiAocmV0ID09IDApXG4gXHRcdFx0cmV0dXJuIHJldDtcbi1cdFx0c3RhcnRfaWR4ID0gbGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHg7XG4gXHR9IHdoaWxlIChsaXN0X3JjID09IFVWQ19SQ19NT1JFX0RBVEEgXHUwMDI2XHUwMDI2IHN0YXJ0X2lkeCBcdTAwM2MgbGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHgpO1xuIFxuIFx0cmV0dXJuIC1FTk9FTlQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODoxMzo0My4xMDIzNjI5WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyNjg4MTk5OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2ggdG8gYGFyY2gvczM5MC9rZXJuZWwvdXYuY2AqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgYXJjaC9zMzkwL2tlcm5lbC91di5jYCwgYW5kIGl0IGFwcGVhcnMgdG8gYmUgZm9jdXNlZCBvbiBzb21lIG1vZGlmaWNhdGlvbnMgcmVsYXRlZCB0byBzZWNyZXQgaGFuZGxpbmcgd2l0aGluIHRoYXQgYXJjaGl0ZWN0dXJlLiBTcGVjaWZpY2FsbHksIEkgc2VlIGNoYW5nZXMgd2l0aGluIHRoZSBgZmluZF9zZWNyZXRfaW5fcGFnZWAgYW5kIGB1dl9maW5kX3NlY3JldGAgZnVuY3Rpb25zLlxuXG5GaXJzdCwgdGhlIGxvb3AgYm91bmQgaW4gYGZpbmRfc2VjcmV0X2luX3BhZ2VgIGhhcyBiZWVuIGFkanVzdGVkLiBJdCB1c2VkIHRvIGl0ZXJhdGUgdXAgdG8gYGxpc3QtXHUwMDNldG90YWxfbnVtX3NlY3JldHNgLCBidXQgbm93IGl0IHNlZW1zIHRvIHN0b3AgYXQgYGxpc3QtXHUwMDNlbnVtX3NlY3Jfc3RvcmVkYC4gVGhhdCdzIGludGVyZXN0aW5nOyBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhvc2UgdHdvIGZpZWxkcyB3aXRoaW4gdGhlIGBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RgIHN0cnVjdHVyZSB0byBncmFzcCB0aGUgc2lnbmlmaWNhbmNlIG9mIHRoaXMgY2hhbmdlLiBJcyB0aGlzIGFib3V0IG9wdGltaXphdGlvbiwgb3IgaXMgdGhlcmUgYSBmdW5jdGlvbmFsIHJlYXNvbj8gUGVyaGFwcyBgbnVtX3NlY3Jfc3RvcmVkYCByZXByZXNlbnRzIHRoZSB2YWxpZCBlbnRyaWVzLCB3aGlsZSBgdG90YWxfbnVtX3NlY3JldHNgIGlzIGEgYnVmZmVyIHNpemU/XG5cblRoZW4sIGluIGB1dl9maW5kX3NlY3JldGAsIEkgbm90ZSBhIGNoYW5nZSBpbiBob3cgYGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4YCBhbmQgYHN0YXJ0X2lkeGAgYXJlIGhhbmRsZWQuIFByZXZpb3VzbHksIGBzdGFydF9pZHhgIHdhcyBpbml0aWFsaXplZCB0byAwIGFuZCBhZGp1c3RlZCBhZnRlciB0aGUgbG9vcC4gTm93LCB0aGUgcGF0Y2ggc2V0cyBgbGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHhgIHRvIDAgKmJlZm9yZSogdGhlIGxvb3AsIGFuZCB3aXRoaW4gdGhlIGxvb3AsIGBzdGFydF9pZHhgIGlzIHNldCB0byBgbGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHhgLiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIG9wdGltaXphdGlvbiBvciBhIHNoaWZ0IGluIGhvdyB0aGUgc2VhcmNoIHJlc3VtZXMgYWNyb3NzIGNhbGxzLCByYXRoZXIgdGhhbiBzdGFydGluZyBmcm9tIHRoZSBiZWdpbm5pbmcgZWFjaCB0aW1lLiBMZXQgbWUgc2VlLi4uIEkgc3VzcGVjdCB0aGUgY29kZSBpcyB1c2luZyBgbmV4dF9zZWNyZXRfaWR4YCB0byBrZWVwIHRyYWNrIG9mIHRoZSBjdXJyZW50IHNlYXJjaCBwb3NpdGlvbiwgc28gaXQgY2FuIGJlIHJlc3VtZWQgbGF0ZXIuXG5cblRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhpcywgSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSByZWxldmFudCBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgYGxpc3RgIGlzIGEgYHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqYCwgYW5kIEkgc2VlIHRoYXQgYHV2X2xpc3Rfc2VjcmV0c2AgaXMgY2FsbGVkIHdpdGggdGhpcyBgbGlzdGAsIGFsb25nIHdpdGggYHN0YXJ0X2lkeGAsIGEgcmV0dXJuIGNvZGUgYFx1MDAyNmxpc3RfcmNgLCBhbmQgYE5VTExgLiBUaGlzIGZ1bmN0aW9uIHNlZW1zIHRvIGJlIGludGltYXRlbHkgaW52b2x2ZWQuIFRoZSBgZmluZF9zZWNyZXRfaW5fcGFnZWAgZnVuY3Rpb24gdGhlbiBhcHBlYXJzIHRvIGJlIHNlYXJjaGluZyB0aGUgYGxpc3QtXHUwMDNlc2VjcmV0c2AgZm9yIGEgc3BlY2lmaWMgYHNlY3JldF9pZGAuIFRoaXMgaXMgbXkgY2x1ZSBhYm91dCB0aGUgd2F5IHRoZSBkYXRhIHN0cnVjdHVyZXMgYXJlIGRlc2lnbmVkIGFuZCBmdW5jdGlvbiB3aXRoIGVhY2ggb3RoZXIuXG5cbk9rYXksIHRpbWUgdG8gY3JhY2sgb3BlbiBgYXJjaC9zMzkwL2tlcm5lbC91di5jYCBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IGB1dl9saXN0X3NlY3JldHNgLiBMZXQncyBzZWUgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIgYW5kIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzIHJlYWxseSBhcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNzIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODoxMzo0OS4zNzExODYzOTVaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1Njg2MzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInV2X2xpc3Rfc2VjcmV0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAva2VybmVsL3V2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2tlcm5lbC91di5jPTc4MD1pbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc5MS1cXHRcXHRzdGFydF9pZHggPSBsaXN0LVxcdTAwM2VuZXh0X3NlY3JldF9pZHg7XFxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjc5MjpcXHRcXHR1dl9saXN0X3NlY3JldHMobGlzdCwgc3RhcnRfaWR4LCBcXHUwMDI2bGlzdF9yYywgTlVMTCk7XFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc5My1cXHRcXHRpZiAobGlzdF9yYyAhPSBVVkNfUkNfRVhFQ1VURUQgXFx1MDAyNlxcdTAwMjYgbGlzdF9yYyAhPSBVVkNfUkNfTU9SRV9EQVRBKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjEzOjQ5LjQxNjg3Njk3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NjIwMzIwOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSdyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBgdXZfbGlzdF9zZWNyZXRzYCoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gVGhlIGZpcnN0IG9yZGVyIG9mIGJ1c2luZXNzIGhlcmUgaXMgdG8gdW5kZXJzdGFuZCBwcmVjaXNlbHkgd2hhdCBgdXZfbGlzdF9zZWNyZXRzYCAqaXMqLiBJIG5lZWQgdGhlIGRlZmluaXRpdmUgZGVmaW5pdGlvbi4gSSdtIGFzc3VtaW5nIGl0J3MgcGFydCBvZiB0aGUgYnJvYWRlciBVbHRyYXZpb2xldCBmcmFtZXdvcmssIHNvIEknbGwgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiBvciBzb3VyY2UgY29kZSBpZiB0aGF0J3MgYXZhaWxhYmxlLiBUaGUgbmFtZSBpdHNlbGYgc3VnZ2VzdHMgaXQncyBhIGZ1bmN0aW9uIG9yIG1ldGhvZCByZWxhdGVkIHRvIGxpc3Rpbmcgc2VjcmV0cyDigJMgY291bGQgYmUgY3JlZGVudGlhbHMsIEFQSSBrZXlzLCBwcml2YXRlIGRhdGEsIGFueXRoaW5nIHNlbnNpdGl2ZSwgcmVhbGx5LiBNeSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFyZTogV2hhdCdzIHRoZSBjb250ZXh0PyBXaGF0IHNlY3JldHMgYXJlIHdlIHRhbGtpbmcgYWJvdXQ/IFdoZXJlIGFyZSB0aGVzZSBzZWNyZXRzIHN0b3JlZD8gRG9lcyB0aGlzIGZ1bmN0aW9uIHN1cHBvcnQgYW55IGZpbHRlcmluZyBvciBzZWFyY2ggY3JpdGVyaWE/IElzIGl0IGEgcmVhZC1vbmx5IG9wZXJhdGlvbiwgb3IgZG9lcyBpdCBhbHNvIGhhdmUgdGhlIGNhcGFjaXR5IHRvIG1vZGlmeSB0aGUgc2VjcmV0cyBpbiBzb21lIG1hbm5lcj8gSSBuZWVkIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgcHVycG9zZSwgaW5wdXRzLCBvdXRwdXRzLCBhbmQgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgYmVmb3JlIEkgY2FuIGFzc2VzcyBpdHMgaW1wbGljYXRpb25zLiBVbHRpbWF0ZWx5LCBhIHByb3BlciB1bmRlcnN0YW5kaW5nIG9mIGl0J3MgZGVmaW5pdGlvbiBpcyBjcnVjaWFsIGZvciBkZXRlcm1pbmluZyBob3cgaXQgZml0cyBpbnRvIHRoZSBncmVhdGVyIHN5c3RlbSBhbmQgaXRzIHNlY3VyaXR5IGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM3MiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjEzOjUyLjk3ODkxMjEyM1oiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzNTY4NTI0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1dl9saXN0X3NlY3JldHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oPTQ3Mz1zdGF0aWMgaW5saW5lIGludCB1dl9jbWRfbm9kYXRhKHU2NCBoYW5kbGUsIHUxNiBjbWQsIHUxNiAqcmMsIHUxNiAqcnJjKVxcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNDg5LS8qKlxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oOjQ5MDogKiB1dl9saXN0X3NlY3JldHMoKSAtIERvIGEgTGlzdCBTZWNyZXRzIFVWQy5cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC00OTEtICpcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTUxMS0gKi9cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaDo1MTI6c3RhdGljIGlubGluZSBpbnQgdXZfbGlzdF9zZWNyZXRzKHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqYnVmLCB1MTYgc3RhcnRfaWR4LFxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTUxMy1cXHRcXHRcXHRcXHQgIHUxNiAqcmMsIHUxNiAqcnJjKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jPTc4MD1pbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc5MS1cXHRcXHRzdGFydF9pZHggPSBsaXN0LVxcdTAwM2VuZXh0X3NlY3JldF9pZHg7XFxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjc5MjpcXHRcXHR1dl9saXN0X3NlY3JldHMobGlzdCwgc3RhcnRfaWR4LCBcXHUwMDI2bGlzdF9yYywgTlVMTCk7XFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc5My1cXHRcXHRpZiAobGlzdF9yYyAhPSBVVkNfUkNfRVhFQ1VURUQgXFx1MDAyNlxcdTAwMjYgbGlzdF9yYyAhPSBVVkNfUkNfTU9SRV9EQVRBKSB7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jPTMwNz1zdGF0aWMgaW50IHV2aW9fZ2V0X2xpc3Qodm9pZCAqenBhZ2UsIHN0cnVjdCB1dmlvX2lvY3RsX2NiICp1dl9pb2N0bClcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL3V2ZGV2aWNlLmMtMzE2LVxcdGRvIHtcXG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jOjMxNzpcXHRcXHR1dl9saXN0X3NlY3JldHMobGlzdCwgbGlzdC1cXHUwMDNlbmV4dF9zZWNyZXRfaWR4LCBcXHUwMDI2dXZfaW9jdGwtXFx1MDAzZXV2X3JjLFxcbmRyaXZlcnMvczM5MC9jaGFyL3V2ZGV2aWNlLmMtMzE4LVxcdFxcdFxcdFxcdFxcdTAwMjZ1dl9pb2N0bC1cXHUwMDNldXZfcnJjKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTM6NTQuNjE0NjA1NDA1WiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMjgzMzM4MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTMzkwIFVWIEFyY2hpdGVjdHVyZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZm9jdXNpbmcgb24gdGhlIGB1dl9saXN0X3NlY3JldHNgIGZ1bmN0aW9uLCBhbmQgbXkgaW1tZWRpYXRlIHRhcmdldCBpcyB0aGUgYGFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oYCBoZWFkZXIgZmlsZS4gSSBrbm93IHRoaXMgaXMgd2hlcmUgdGhlIGxvdy1sZXZlbCBkZXRhaWxzIG9mIHRoZSBVViAoVW5pdmVyc2FsIFZpcnR1YWxpemF0aW9uKSBhcmNoaXRlY3R1cmUgb24gUzM5MCBhcmUgZ29pbmcgdG8gYmUgZGVmaW5lZC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBkYXRhIHN0cnVjdHVyZXMsIGZ1bmN0aW9uIHByb3RvdHlwZXMsIGFuZCBwb3RlbnRpYWxseSBzb21lIGlubGluZSBhc3NlbWJseSByZWxhdGVkIHRvIGhvdyBzZWNyZXRzIGFyZSBtYW5hZ2VkIHdpdGhpbiB0aGF0IHNwZWNpZmljIGVudmlyb25tZW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSdzIHNlY3VyaXR5IGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZCBpbiB0aGlzIHBhcnRpY3VsYXIgY29udGV4dC4gVGhpcyBmaWxlIGlzIHByb2JhYmx5IHRoZSBrZXkgdG8gdW5jb3ZlcmluZyB0aGUgbWVjaGFuaWNzIG9mIHNlY3JldCBoYW5kbGluZyBhdCBhIGZ1bmRhbWVudGFsIGxldmVsLiBJJ20gaG9waW5nIGl0J3Mgd2VsbC1kb2N1bWVudGVkLi4uIGJ1dCBJJ20gcHJlcGFyZWQgZm9yIGEgZGVlcCBkaXZlIVxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjE1LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTM6NTcuOTQyOTQyMTcyWiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4MTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ5MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ5MDpcXHQgKiB1dl9saXN0X3NlY3JldHMoKSAtIERvIGEgTGlzdCBTZWNyZXRzIFVWQy5cXG4gNDkxOlxcdCAqXFxuIDQ5MjpcXHQgKiBAYnVmOiBCdWZmZXIgdG8gd3JpdGUgbGlzdCBpbnRvOyBzaXplIG9mIG9uZSBwYWdlLlxcbiA0OTM6XFx0ICogQHN0YXJ0X2lkeDogVGhlIHNtYWxsZXN0IGluZGV4IHRoYXQgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBsaXN0LlxcbiA0OTQ6XFx0ICpcXHRcXHRGb3IgdGhlIGZpc3QgaW52b2NhdGlvbiB1c2UgMC5cXG4gNDk1OlxcdCAqIEByYzogUG9pbnRlciB0byBzdG9yZSB0aGUgcmV0dXJuIGNvZGUgb3IgTlVMTC5cXG4gNDk2OlxcdCAqIEBycmM6IFBvaW50ZXIgdG8gc3RvcmUgdGhlIHJldHVybiByZWFzb24gY29kZSBvciBOVUxMLlxcbiA0OTc6XFx0ICpcXG4gNDk4OlxcdCAqIFRoaXMgZnVuY3Rpb24gY2FsbHMgdGhlIExpc3QgU2VjcmV0cyBVVkMuIFRoZSByZXN1bHQgaXMgd3JpdHRlbiBpbnRvIGBidWZgLFxcbiA0OTk6XFx0ICogdGhhdCBuZWVkcyB0byBiZSBhdCBsZWFzdCBvbmUgcGFnZSBvZiB3cml0YWJsZSBtZW1vcnkuXFxuIDUwMDpcXHQgKiBgYnVmYCBjb25zaXN0cyBvZjpcXG4gNTAxOlxcdCAqICogJXN0cnVjdCB1dl9zZWNyZXRfbGlzdF9oZHJcXG4gNTAyOlxcdCAqICogJXN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtIChtdWx0aXBsZSlcXG4gNTAzOlxcdCAqXFxuIDUwNDpcXHQgKiBGb3IgYHN0YXJ0X2lkeGAgdXNlIF8wXyBmb3IgdGhlIGZpcnN0IGNhbGwuIElmIHRoZXJlIGFyZSBtb3JlIHNlY3JldHMgYXZhaWxhYmxlXFxuIDUwNTpcXHQgKiBidXQgY291bGQgbm90IGZpdCBpbnRvIHRoZSBwYWdlIHRoZW4gYHJjYCBpcyBgVVZDX1JDX01PUkVfREFUQWAuXFxuIDUwNjpcXHQgKiBJbiB0aGlzIGNhc2UgdXNlIGB1dl9zZWNyZXRfbGlzdF9oZHIubmV4dF9zZWNyZXRfaWR4YCBmb3IgYHN0YXJ0X2lkeGAuXFxuIDUwNzpcXHQgKlxcbiA1MDg6XFx0ICogQ29udGV4dDogbWlnaHQgc2xlZXAuXFxuIDUwOTpcXHQgKlxcbiA1MTA6XFx0ICogUmV0dXJuOiBUaGUgVVZDIGNvbmRpdGlvbiBjb2RlLlxcbiA1MTE6XFx0ICovXFxuIDUxMjpcXHRzdGF0aWMgaW5saW5lIGludCB1dl9saXN0X3NlY3JldHMoc3RydWN0IHV2X3NlY3JldF9saXN0ICpidWYsIHUxNiBzdGFydF9pZHgsXFxuIDUxMzpcXHRcXHRcXHRcXHRcXHQgIHUxNiAqcmMsIHUxNiAqcnJjKVxcbiA1MTQ6XFx0e1xcbiA1MTU6XFx0XFx0c3RydWN0IHV2X2NiX2xpc3Rfc2VjcmV0cyB1dmNiID0ge1xcbiA1MTY6XFx0XFx0XFx0LmhlYWRlci5sZW4gPSBzaXplb2YodXZjYiksXFxuIDUxNzpcXHRcXHRcXHQuaGVhZGVyLmNtZCA9IFVWQ19DTURfTElTVF9TRUNSRVRTLFxcbiA1MTg6XFx0XFx0XFx0LnN0YXJ0X2lkeCA9IHN0YXJ0X2lkeCxcXG4gNTE5OlxcdFxcdFxcdC5saXN0X2FkZHIgPSAodTY0KWJ1ZixcXG4gNTIwOlxcdFxcdH07XFxuIDUyMTpcXHRcXHRpbnQgY2MgPSB1dl9jYWxsX3NjaGVkKDAsICh1NjQpXFx1MDAyNnV2Y2IpO1xcbiA1MjI6XFx0XFxuIDUyMzpcXHRcXHRpZiAocmMpXFxuIDUyNDpcXHRcXHRcXHQqcmMgPSB1dmNiLmhlYWRlci5yYztcXG4gNTI1OlxcdFxcdGlmIChycmMpXFxuIDUyNjpcXHRcXHRcXHQqcnJjID0gdXZjYi5oZWFkZXIucnJjO1xcbiA1Mjc6XFx0XFxuIDUyODpcXHRcXHRyZXR1cm4gY2M7XFxuIDUyOTpcXHR9XFxuIDUzMDpcXHRcXG4gNTMxOlxcdHN0cnVjdCB1dl9pbmZvIHtcXG4gNTMyOlxcdFxcdHVuc2lnbmVkIGxvbmcgaW5zdF9jYWxsc19saXN0WzRdO1xcbiA1MzM6XFx0XFx0dW5zaWduZWQgbG9uZyB1dl9iYXNlX3N0b3JfbGVuO1xcbiA1MzQ6XFx0XFx0dW5zaWduZWQgbG9uZyBndWVzdF9iYXNlX3N0b3JfbGVuO1xcbiA1MzU6XFx0XFx0dW5zaWduZWQgbG9uZyBndWVzdF92aXJ0X2Jhc2Vfc3Rvcl9sZW47XFxuIDUzNjpcXHRcXHR1bnNpZ25lZCBsb25nIGd1ZXN0X3ZpcnRfdmFyX3N0b3JfbGVuO1xcbiA1Mzc6XFx0XFx0dW5zaWduZWQgbG9uZyBndWVzdF9jcHVfc3Rvcl9sZW47XFxuIDUzODpcXHRcXHR1bnNpZ25lZCBsb25nIG1heF9zZWNfc3Rvcl9hZGRyO1xcbiA1Mzk6XFx0XFx0dW5zaWduZWQgaW50IG1heF9udW1fc2VjX2NvbmY7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjEzOjU3Ljk0MzA0MTQ1MloiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjM5MzQyNjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU2VjcmV0cyBMaXN0aW5nIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgdXZfbGlzdF9zZWNyZXRzYCBmdW5jdGlvbiwgYW5kIGl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQgb24gdGhlIHN1cmZhY2UuIEl0J3MgZXNzZW50aWFsbHkgY2FsbGluZyBhIGh5cGVydmlzb3IgY2FsbCwgYSBVVkMsIHRvIGZldGNoIGEgbGlzdCBvZiBzZWNyZXRzLiBUaGUgVVZDLCBvZiBjb3Vyc2UsIGlzIHRoZSBsb3ctbGV2ZWwgaW50ZXJmYWNlIHRoYXQgZG9lcyB0aGUgaGVhdnkgbGlmdGluZy4gVGhlIHJlc3VsdHMgb2YgdGhhdCBjYWxsIGFyZSB0aGVuIHdyaXR0ZW4gaW50byB0aGlzIGBidWZgLiBOb3csIHRoaXMgYGJ1ZmAgc2VlbXMgaW50ZXJlc3RpbmcsIGl0J3MgYWxsb2NhdGVkIGFzIGEgcGFnZSBvZiBtZW1vcnksIHdoaWNoIG1ha2VzIHNlbnNlIGZvciBwb3RlbnRpYWwgc2l6ZSBjb25zaWRlcmF0aW9ucy4gQW5kIGl0J3MgYWxzbyB0eXBlIGBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RgLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoYXQgc3RydWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZm9ybWF0IG9mIHRoYXQgZGF0YS4gSSB3b25kZXIgd2hhdCBmaWVsZHMgYXJlIGluY2x1ZGVkLCBob3cgdGhlIGxpc3QgaXMgb3JnYW5pemVkLCBhbmQgd2hhdCBjb25zaWRlcmF0aW9ucyB3ZXJlIG1hZGUgZm9yIHRoZSB2YXJpb3VzIHNpemVzIGFuZCBzZWNyZXQgcHJvcGVydGllcy4gVGltZSB0byBkaXZlIGludG8gdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCB1dl9zZWNyZXRfbGlzdGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMjksIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjE0OjAyLjU4MjM4NzY3NVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3MzUwNDQ3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaD00MTE9c3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW0ge1xcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNDIzLSAqL1xcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oOjQyNDpzdHJ1Y3QgdXZfc2VjcmV0X2xpc3Qge1xcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTQyNS1cXHR1MTYgbnVtX3NlY3Jfc3RvcmVkO1xcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg9NDczPXN0YXRpYyBpbmxpbmUgaW50IHV2X2NtZF9ub2RhdGEodTY0IGhhbmRsZSwgdTE2IGNtZCwgdTE2ICpyYywgdTE2ICpycmMpXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC01MTEtICovXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6NTEyOnN0YXRpYyBpbmxpbmUgaW50IHV2X2xpc3Rfc2VjcmV0cyhzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmJ1ZiwgdTE2IHN0YXJ0X2lkeCxcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC01MTMtXFx0XFx0XFx0XFx0ICB1MTYgKnJjLCB1MTYgKnJyYylcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oPTYxOD1pbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oOjYxOTpcXHRcXHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QsXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNjIwLVxcdFxcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtX2hkciAqc2VjcmV0KTtcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYz03NTc9c3RhdGljIGludCBmaW5kX3NlY3JldF9pbl9wYWdlKGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6NzU4OlxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QsXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc1OS1cXHRcXHRcXHQgICAgICAgc3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW1faGRyICpzZWNyZXQpXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmM9NzgwPWludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjc4MTpcXHRcXHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QsXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc4Mi1cXHRcXHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbV9oZHIgKnNlY3JldClcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL3V2ZGV2aWNlLmM9MzA3PXN0YXRpYyBpbnQgdXZpb19nZXRfbGlzdCh2b2lkICp6cGFnZSwgc3RydWN0IHV2aW9faW9jdGxfY2IgKnV2X2lvY3RsKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYy0zMTAtXFx0dTggX191c2VyICp1c2VyX2J1ZiA9ICh1OCBfX3VzZXIgKil1dl9pb2N0bC1cXHUwMDNlYXJndW1lbnRfYWRkcjtcXG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jOjMxMTpcXHRzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QgPSB6cGFnZTtcXG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jLTMxMi1cXHR1MTYgbnVtX3NlY3JldHNfc3RvcmVkID0gMDtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTIwPU1PRFVMRV9ERVNDUklQVElPTihcXFwiczM5MCBwcm90ZWN0ZWQga2V5IFVWIGhhbmRsZXJcXFwiKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI0LSAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjI1OnN0YXRpYyBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKnV2X2xpc3Q7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjYtc3RhdGljIERFRklORV9NVVRFWCh1dl9saXN0X211dGV4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTQ6MDQuMjU1OTE2NTUyWiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MjkyNzk2ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqRGl2aW5nIGludG8gdGhlIFMzOTAgVVYgU2VjcmV0IExpc3QqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBpdC4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgc3RydWN0IHV2X3NlY3JldF9saXN0YC4gSXQncyBkZWZpbmVkIHdpdGhpbiBgYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmhgLiBHaXZlbiBteSBiYWNrZ3JvdW5kIHdpdGggczM5MCBhcmNoaXRlY3R1cmUgYW5kIHRoZSBVViAoVWx0cmFWaW9sZXQpIHBsYXRmb3JtLCBJJ20gZXhwZWN0aW5nIHRoaXMgc3RydWN0dXJlIHRvIGhvbGQgZGV0YWlscyByZWxldmFudCB0byBzZWN1cmUgbWVtb3J5IGFjY2VzcyBvciBjb25maWRlbnRpYWwgZGF0YSBtYW5hZ2VtZW50IHdpdGhpbiB0aGF0IHNwZWNpZmljIGVudmlyb25tZW50LiBJIGFudGljaXBhdGUgdGhpcyB3aWxsIGJlIGEgY3JpdGljYWwgc3RydWN0dXJlIGZvciBhbnkgY29kZSBkZWFsaW5nIHdpdGggc2Vuc2l0aXZlIGluZm9ybWF0aW9uIG9yIHBlcmhhcHMgaW52b2x2ZWQgaW4gZXN0YWJsaXNoaW5nIHNlY3VyZSBleGVjdXRpb24gY29udGV4dHMuIEknbSBrZWVuIHRvIHNlZSBpZiBpdCB1dGlsaXplcyBhbnkgdW5pcXVlIHMzOTAtc3BlY2lmaWMgbWVtb3J5IHByb3RlY3Rpb24gbWVjaGFuaXNtcy4gVGltZSB0byBjaGVjayBpdCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0OTMsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODoxNDowNy44ODUxOTg2MjlaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmhcIixcbiAgXCJGaXJzdExpbmVcIjogNDExLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDExOlxcdHN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtIHtcXG4gNDEyOlxcdFxcdHN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtX2hkciBoZHI7XFxuIDQxMzpcXHRcXHR1NjQgcmVzZXJ2ZXJkMDg7XFxuIDQxNDpcXHRcXHR1OCBpZFtVVl9TRUNSRVRfSURfTEVOXTtcXG4gNDE1OlxcdH0gX19wYWNrZWQgX19hbGlnbmVkKDgpO1xcbiA0MTY6XFx0XFxuIDQxNzpcXHQvKipcXG4gNDE4OlxcdCAqIHV2X3NlY3JldF9saXN0IC0gVVYgc2VjcmV0LW1ldGFkYXRhIGxpc3QuXFxuIDQxOTpcXHQgKiBAbnVtX3NlY3Jfc3RvcmVkOiBOdW1iZXIgb2Ygc2VjcmV0cyBzdG9yZWQgaW4gdGhpcyBsaXN0LlxcbiA0MjA6XFx0ICogQHRvdGFsX251bV9zZWNyZXRzOiBOdW1iZXIgb2Ygc2VjcmV0cyBzdG9yZWQgaW4gdGhlIFVWIGZvciB0aGlzIGd1ZXN0LlxcbiA0MjE6XFx0ICogQG5leHRfc2VjcmV0X2lkeDogcG9zaXRpdmUgbnVtYmVyIGlmIHRoZXJlIGFyZSBtb3JlIHNlY3JldHMgYXZhaWxhYmxlIG9yIHplcm8uXFxuIDQyMjpcXHQgKiBAc2VjcmV0czogVXAgdG8gODUgVVYtc2VjcmV0IG1ldGFkYXRhIGVudHJpZXMuXFxuIDQyMzpcXHQgKi9cXG4gNDI0OlxcdHN0cnVjdCB1dl9zZWNyZXRfbGlzdCB7XFxuIDQyNTpcXHRcXHR1MTYgbnVtX3NlY3Jfc3RvcmVkO1xcbiA0MjY6XFx0XFx0dTE2IHRvdGFsX251bV9zZWNyZXRzO1xcbiA0Mjc6XFx0XFx0dTE2IG5leHRfc2VjcmV0X2lkeDtcXG4gNDI4OlxcdFxcdHUxNiByZXNlcnZlZF8wNjtcXG4gNDI5OlxcdFxcdHU2NCByZXNlcnZlZF8wODtcXG4gNDMwOlxcdFxcdHN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtIHNlY3JldHNbODVdO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODoxNDowNy44ODUyOTQzMjlaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ3NTA2MjQyNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCdWcgRml4ZXMqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSwgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBpc3N1ZSBpbiBgZmluZF9zZWNyZXRfaW5fcGFnZWAuIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyB1c2luZyBgdG90YWxfbnVtX3NlY3JldHNgIGluc3RlYWQgb2YgYG51bV9zZWNyX3N0b3JlZGAgaW4gdGhlIGxvb3AgY29uZGl0aW9uLiBOb3csIGB0b3RhbF9udW1fc2VjcmV0c2AgcmVwcmVzZW50cyB0aGUgdG90YWwgc2VjcmV0cywgd2hpY2ggY291bGQgYmUgbW9yZSB0aGFuIHRoZSA4NS1lbGVtZW50IGFycmF5IGBsaXN0LVx1MDAzZXNlY3JldHNgIGNhbiBhY3R1YWxseSBob2xkIGZvciB0aGUgY3VycmVudCBwYWdlLiBJZiBgdG90YWxfbnVtX3NlY3JldHNgIGV4Y2VlZHMgODUsIHRoaXMgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIHdoZW4gaXRlcmF0aW5nIHRocm91Z2ggYGxpc3QtXHUwMDNlc2VjcmV0c2AuIEtBU0FOIHdvdWxkIGRlZmluaXRlbHkgY2F0Y2ggdGhhdCwgd2hpY2ggaXMgZ29vZC5cblxuTmV4dCwgSSdtIGZvY3VzaW5nIG9uIHRoZSBjaGFuZ2UgaW4gYHV2X2ZpbmRfc2VjcmV0YC4gVGhlIG9yaWdpbmFsIGxvb3AgY29uZGl0aW9uIHdhcyBmdW5kYW1lbnRhbGx5IGZsYXdlZC4gSXQgd2FzIHRha2luZyBgc3RhcnRfaWR4YCBhbmQgc2V0dGluZyBpdCB0byBgbGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHhgIGltbWVkaWF0ZWx5IGJlZm9yZSBjb21wYXJpbmcgdGhlbSBpbiB0aGUgbG9vcCBjb25kaXRpb24uIFRoYXQgbWFrZXMgdGhlIGNvbmRpdGlvbiBgc3RhcnRfaWR4IFx1MDAzYyBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeGAgZWZmZWN0aXZlbHkgYHggXHUwMDNjIHhgLCB3aGljaCBpcyBhbHdheXMgZmFsc2UsIHJpZ2h0PyBTbyB0aGUgbG9vcCB3YXMgZ3VhcmFudGVlZCB0byBleGVjdXRlIG9ubHkgb25jZS4gVGhhdCdzIGEgY2xhc3NpYyBsb2dpYyBlcnJvciwgdmVyeSBlYXNpbHkgbWlzc2VkLiBUaGUgZml4IGluaXRpYWxpemVzIGBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeGAgdG8gYDBgIGFuZCB0aGVuIHVzZXMgdGhlIGluY3JlbWVudGVkIHZhbHVlIGluIHRoZSBsb29wIGNvbmRpdGlvbiwgc28gdGhlIGxvb3AgZXhlY3V0ZXMgY29ycmVjdGx5LlxuXG5UaGUgY3JpdGljYWwgdGhpbmcgSSdtIGFzc2Vzc2luZyBpcyBpZiB0aGlzIGlzIHJlbGF0ZWQgdG8gS01TQU4ncyBkb21haW4gb2YgdW5pbml0aWFsaXplZCByZWFkcy4gTmVpdGhlciBvZiB0aGVzZSBmaXhlcyAqZGlyZWN0bHkqIGRlYWxzIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBmaXJzdCBpcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQg4oCTIEtBU0FOIGRvZXMgdGhhdC4gVGhlIHNlY29uZCBpcyBhIGxvZ2ljIGVycm9yIHRoYXQgYnJlYWtzIHRoZSBsb29wIC0gdGhhdCBoYXMgdG8gYmUgZml4ZWQuIEl04oCZcyBhbiBpbnRlcmVzdGluZyBidWcsIGJ1dCBpdCBkb2VzIG5vdCBzZWVtIEtNU0FOIHNwZWNpZmljLiBJJ2xsIG5lZWQgdG8gY2hlY2sgd2hlcmUgYHV2X2ZpbmRfc2VjcmV0YCBpcyBjYWxsZWQgdG8gcnVsZSBvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDg4LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM3MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjE0OjIyLjYzNTkyMTM5MVoiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzMTExMDI4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1dl9maW5kX3NlY3JldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg9NjEzPXN0YXRpYyBpbmxpbmUgaW50IHV2X3JlbW92ZV9zaGFyZWQodW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNjE3LVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oOjYxODppbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTYxOS1cXHRcXHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QsXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmM9NzU3PXN0YXRpYyBpbnQgZmluZF9zZWNyZXRfaW5fcGFnZShjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzcyLS8qKlxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo3NzM6ICogdXZfZmluZF9zZWNyZXQoKSAtIHNlYXJjaCBzZWNyZXQgbWV0YWRhdGEgZm9yIGEgZ2l2ZW4gc2VjcmV0IGlkLlxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03NzQtICogQHNlY3JldF9pZDogc2VhcmNoIHBhdHRlcm4uXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzc5LSAqL1xcbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo3ODA6aW50IHV2X2ZpbmRfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzgxLVxcdFxcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqbGlzdCxcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy04MDUtfVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo4MDY6RVhQT1JUX1NZTUJPTF9HUEwodXZfZmluZF9zZWNyZXQpO1xcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy04MDctXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0yMD1NT0RVTEVfREVTQ1JJUFRJT04oXFxcInMzOTAgcHJvdGVjdGVkIGtleSBVViBoYW5kbGVyXFxcIik7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yMi0vKlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjIzOiAqIE9uZSBwcmUtYWxsb2NhdGVkIHV2X3NlY3JldF9saXN0IGZvciB1c2Ugd2l0aCB1dl9maW5kX3NlY3JldCgpXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjQtICovXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz05Mz1zdGF0aWMgaW50IGdldF9zZWNyZXRfbWV0YWRhdGEoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtOTktXFx0bWVtc2V0KHV2X2xpc3QsIDAsIHNpemVvZigqdXZfbGlzdCkpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjEwMDpcXHRyYyA9IHV2X2ZpbmRfc2VjcmV0KHNlY3JldF9pZCwgdXZfbGlzdCwgc2VjcmV0KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0xMDEtXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ1dl9saXN0X211dGV4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTQ6MjQuMjY3MDM2MDkzWiIsIlNlcSI6NTEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3OTY1MzIzNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIE91dC1vZi1Cb3VuZHMgUmVhZCBpbiBgczM5MC9jcnlwdG8vcGtleV91di5jYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuY2AsIGFuZCBJIHNlZSB0aGF0IGB1dl9saXN0YCBnZXRzIHByZS1hbGxvY2F0ZWQgYW5kIHplcm9lZCBiZWZvcmUgdGhlIGB1dl9maW5kX3NlY3JldGAgZnVuY3Rpb24gaXMgY2FsbGVkLiBUaGlzIG1lYW5zIHRoZSBzdHJ1Y3R1cmUgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgcmlnaHQgZnJvbSB0aGUgc3RhcnQuIFRoYXQncyBnb29kLCBwcmVkaWN0YWJsZSBiZWhhdmlvci4gTm93LCB0aGUgcG90ZW50aWFsIGlzc3VlIGFyaXNlcyB3aXRoaW4gYGZpbmRfc2VjcmV0X2luX3BhZ2VgLCBzcGVjaWZpY2FsbHkgd2hlbiBpdCByZWFkcyBmcm9tIGBsaXN0LVx1MDAzZXNlY3JldHNbaV1gLiBJZiB0aGlzIGBpYCBpbmRleCBleGNlZWRzIHRoZSBhbGxvY2F0ZWQgYm91bmRhcmllcywgaXQgbG9va3MgbGlrZSB3ZSBjb3VsZCBoYXZlIGFuIG91dC1vZi1ib3VuZHMgcmVhZCwgYW5kIHRoYXQncyBuZXZlciBnb29kLlxuXG5JJ20gdGhpbmtpbmcsIHRoaXMgYGxpc3RgIHZhcmlhYmxlLCBpdCdzIHByb2JhYmx5IGFsbG9jYXRlZCBhcyBhIHBhZ2UsIHByb2JhYmx5IGEgc2luZ2xlIHBhZ2UuIElmIHdlIGdvIHBhc3QgaW5kZXggODUsIHdlJ3JlIGxpa2VseSBnb2luZyB0byByZWFkIHBhc3QgdGhlIGVuZCBvZiB0aGUgYGxpc3QtXHUwMDNlc2VjcmV0c2AgYXJyYXkuIEkgbmVlZCB0byBiZSBzdXJlIHRob3VnaC4gTGV0IG1lIGNoZWNrIHRoZSBzaXplIG9mIGBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RgLi4uIEFoLCB5ZXMsIGl0J3MgZGVmaW5lZCBsaWtlIHRoaXM6XG5gYGBjXG5zdHJ1Y3QgdXZfc2VjcmV0X2xpc3Qge1xuXHR1MTYgbnVtX3NlY3Jfc3RvcmVkO1xuXHR1MTYgdG90YWxfbnVtX3NlY3JldHM7XG5cdHUxNiBuZXh0X3NlY3JldF9pZHg7XG5cdHUxNiByZXNlcnZlZF8wNjtcblx0dTY0IHJlc2VydmVkXzA4O1xuXHRzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbSBzZWNyZXRzWzg1XTtcbn07XG5gYGBcbk9rYXksIHNvIGl0IGhhcyB0aGF0IGFycmF5IG9mIGBzZWNyZXRzWzg1XWAuIEFuZCB0aGVuIGBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbWAgaXMgZGVmaW5lZCBhczpcbmBgYGNcbnN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtIHtcblx0c3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW1faGRyIGhkcjtcblx0dTY0IHJlc2VydmVyZDA4O1xuXHR1OCBpZFtVVl9TRUNSRVRfSURfTEVOXTtcbn0gX19wYWNrZWQgX19hbGlnbmVkKDgpO1xuYGBgXG5TbyBJIGd1ZXNzIEkgbmVlZCB0byBjaGVjayB0aGUgZXhhY3Qgc2l6ZSBvZiBgc3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW1faGRyYCBhbmQgYFVWX1NFQ1JFVF9JRF9MRU5gIHRvIG5haWwgZG93biB0aGUgc2l6ZSBhbmQgY2FsY3VsYXRlIHRoZSBib3VuZHMuIEknbSBnb2luZyB0byBoYXZlIHRvIGRpZyBpbnRvIHRob3NlIGRlZmluaXRpb25zIHRvIHVuZGVyc3RhbmQgdGhlIG1lbW9yeSBsYXlvdXQgcHJlY2lzZWx5LiBXZSBoYXZlIHRoZSBwb3RlbnRpYWwgZm9yIGEgYnVmZmVyIG92ZXJmbG93IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1NzYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTQ6MzEuMDYzNTcxNTczWiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjY2MjAxMjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtX2hkciBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oPTM3Mz1lbnVtIHV2X3NlY3JldF90eXBlcyB7XFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC0zOTgtICovXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6Mzk5OnN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtX2hkciB7XFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNDAwLVxcdHUxNiBpbmRleDtcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oPTQxMT1zdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbSB7XFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6NDEyOlxcdHN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtX2hkciBoZHI7XFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNDEzLVxcdHU2NCByZXNlcnZlcmQwODtcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oPTYxOD1pbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTYxOS1cXHRcXHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QsXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6NjIwOlxcdFxcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtX2hkciAqc2VjcmV0KTtcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC02MjEtaW50IHV2X3JldHJpZXZlX3NlY3JldCh1MTYgc2VjcmV0X2lkeCwgdTggKmJ1Ziwgc2l6ZV90IGJ1Zl9zaXplKTtcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYz03NTc9c3RhdGljIGludCBmaW5kX3NlY3JldF9pbl9wYWdlKGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzU4LVxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QsXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjc1OTpcXHRcXHRcXHQgICAgICAgc3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW1faGRyICpzZWNyZXQpXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc2MC17XFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmM9NzgwPWludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc4MS1cXHRcXHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QsXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjc4MjpcXHRcXHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbV9oZHIgKnNlY3JldClcXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzgzLXtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTkzPXN0YXRpYyBpbnQgZ2V0X3NlY3JldF9tZXRhZGF0YShjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6OTQ6XFx0XFx0XFx0ICAgICAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtX2hkciAqc2VjcmV0KVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTk1LXtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTEwNj1zdGF0aWMgaW50IHJldHJpZXZlX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0xMDgte1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjEwOTpcXHRzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbV9oZHIgc2VjcmV0X21ldGFfZGF0YTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0xMTAtXFx0aW50IHJjO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9MjMzPXN0YXRpYyBpbnQgdXZfdmVyaWZ5a2V5KGNvbnN0IHU4ICprZXksIHUzMiBrZXlsZW4sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yMzktXFx0c3RydWN0IHV2c2VjcmV0dG9rZW4gKnQgPSAoc3RydWN0IHV2c2VjcmV0dG9rZW4gKilrZXk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6MjQwOlxcdHN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtX2hkciBzZWNyZXRfbWV0YV9kYXRhO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI0MS1cXHR1MzIgcGtleXNpemUsIHBrZXl0eXBlLCBiaXRzaXplO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODoxNDozMi43Mjk3ODQxNzJaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMyMzQyODI0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYHV2X3NlY3JldF9saXN0X2l0ZW1faGRyYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpc3NlY3QgdGhpcyBgc3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW1faGRyYC4gSSdtIGltbWVkaWF0ZWx5IGN1cmlvdXMgYWJvdXQgaXRzIHN0cnVjdHVyZSDigJMgd2hhdCdzIHRoZSB1bmRlcmx5aW5nIHB1cnBvc2Ugb2YgdGhpcyBoZWFkZXIgd2l0aGluIGxpYnV2J3Mgc2VjcmV0IGxpc3QgaW1wbGVtZW50YXRpb24/IElzIGl0IGEgc2luZ2xlIG5vZGUsIG9yIGEgbW9yZSBjb21wbGV4IG1ldGFkYXRhIHN0cnVjdHVyZSBmb3IgYSBsaW5rZWQgbGlzdD8gTXkgaW1tZWRpYXRlIHF1ZXN0aW9ucyByZXZvbHZlIGFyb3VuZCBtZW1vcnkgbWFuYWdlbWVudDogYXJlIHdlIGRlYWxpbmcgd2l0aCBlbWJlZGRlZCBkYXRhLCBvciBwb2ludGVycyB0byBleHRlcm5hbCBibG9ja3M/IEFyZSB0aGVyZSBpbXBsaWNhdGlvbnMgZm9yIGF0b21pY2l0eSBhbmQgdGhyZWFkIHNhZmV0eSBoZXJlLCBwYXJ0aWN1bGFybHkgaWYgdGhpcyBkYXRhIHN0cnVjdHVyZSBpcyBhY2Nlc3NlZCBjb25jdXJyZW50bHk/IElzIHRoZXJlIGFuIGluaGVyZW50IG9yZGVyaW5nIHRvIHRoZSBzZWNyZXQgaXRlbXMsIG9yIGlzIHRoaXMganVzdCBhbiB1bm9yZGVyZWQgY29sbGVjdGlvbj8gQXJlIHRoZXJlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBmb3IgbG9ja2luZywgcGFydGljdWxhcmx5IGluIG11bHRpLXRocmVhZGVkIGVudmlyb25tZW50cyB3aGVyZSBzZWNyZXRzIG1pZ2h0IGJlIGFjY2Vzc2VkIG9yIHVwZGF0ZWQ/IEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBkZXNpZ24gdHJhZGVvZmZzIHRoZXkgbWFkZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0NzYsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODoxNDozNy4wNTMyMTUxNzdaIiwiU2VxIjo1NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODkyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmhcIixcbiAgXCJGaXJzdExpbmVcIjogMzk5LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzk5OlxcdHN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtX2hkciB7XFxuIDQwMDpcXHRcXHR1MTYgaW5kZXg7XFxuIDQwMTpcXHRcXHR1MTYgdHlwZTtcXG4gNDAyOlxcdFxcdHUzMiBsZW5ndGg7XFxuIDQwMzpcXHR9IF9fcGFja2VkIF9fYWxpZ25lZCg4KTtcXG4gNDA0OlxcdFxcbiA0MDU6XFx0I2RlZmluZSBVVl9TRUNSRVRfSURfTEVOIDMyXFxuIDQwNjpcXHQvKipcXG4gNDA3OlxcdCAqIHV2X3NlY3JldF9saXN0X2l0ZW0gLSBVViBzZWNyZXQgZW50cnkuXFxuIDQwODpcXHQgKiBAaGRyOiBUaGUgbWV0YWRhdGEgb2YgdGhpcyBzZWNyZXQuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjE0OjM3LjA1MzMwNjI0N1oiLCJTZXEiOjU1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODAxMDY4OTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBPdXQtb2YtQm91bmRzIFJlYWQgaW4gYHV2X3NlY3JldF9saXN0YCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGZvY3VzZWQgb24gbWVtb3J5IGxheW91dC4gSSdtIHNlZWluZyB0aGF0IGBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbV9oZHJgIGlzIGEgbW9kZXN0IDggYnl0ZXMsIHdoaWNoIGlzIGdvb2QuIFRoZW4gYHN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtYCBiYWxsb29ucyB0byA0OCBieXRlcyAoOCBmb3IgdGhlIGhlYWRlciwgOCBmb3Igc29tZXRoaW5nIGVsc2UsIGFuZCBhIDMyLWJ5dGUgSUQsIHByZXN1bWFibHkpLiBOb3csIHRoZSBjcnVjaWFsIHBhcnQ6IGBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RgIGl0c2VsZi4gVGhlIGNhbGN1bGF0aW9uIGxvb2tzIGxpa2UgdGhpczogMiArIDIgKyAyICsgMiArIDggKyAoODUgKiA0OCkgPSA0MDk2IGJ5dGVzIHRvdGFsLiBIbW0sIHRoYXQncyBleGFjdGx5IG9uZSBwYWdlLiBUaGF0J3MgYSByZWQgZmxhZyBpbiBpdHNlbGYuXG5cbk5vdywgdGhhdCBicmluZ3MgbWUgdG8gdGhlIHBvdGVudGlhbCBidWcgaW4gYGZpbmRfc2VjcmV0X2luX3BhZ2VgOlxuXG5gYGBjXG5cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGxpc3QtXHUwMDNldG90YWxfbnVtX3NlY3JldHM7IGkrKykge1xuXHRcdGlmIChtZW1jbXAoc2VjcmV0X2lkLCBsaXN0LVx1MDAzZXNlY3JldHNbaV0uaWQsIFVWX1NFQ1JFVF9JRF9MRU4pID09IDApIHtcblx0XHRcdCpzZWNyZXQgPSBsaXN0LVx1MDAzZXNlY3JldHNbaV0uaGRyO1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXHR9XG5gYGBcblxuVGhlIGxvb3AgaXRlcmF0ZXMgdXAgdG8gYHRvdGFsX251bV9zZWNyZXRzYC4gSWYgYHRvdGFsX251bV9zZWNyZXRzYCBleGNlZWRzIDg1LCB0aGVuIGBsaXN0LVx1MDAzZXNlY3JldHNbaV1gIGdvZXMgb3V0LW9mLWJvdW5kcywgc2luY2Ugd2Ugb25seSBoYXZlIHNwYWNlIGZvciA4NSBgdXZfc2VjcmV0X2xpc3RfaXRlbWBzLCBwb3RlbnRpYWxseSB3cml0aW5nIGF0IGEgbWVtb3J5IGFkZHJlc3MgdGhhdCdzIG91dHNpZGUgb2YgdGhlIGFsbG9jYXRlZCBwYWdlLiBUaGlzIGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHJlYWQsIGFuZCBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBzaG91bGQgbmFpbCBpdCBiZWNhdXNlIGl0J3MgcmVhZGluZyBwYXN0IHRoZSBwYWdlIGJvdW5kYXJ5LlxuXG5UaGUgbmV4dCBxdWVzdGlvbiBpcywgaG93IGlzIHRoZSBtZW1vcnkgZm9yIHRoZSBgbGlzdGAgYWxsb2NhdGVkPyBJcyBpdCBga21hbGxvY2A/IGBnZXRfZnJlZV9wYWdlYD8gVGhhdCdzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIG92ZXJmbG93LiBHb2luZyBiYWNrIHRvIHRoZSBkcml2ZXIgY29kZSwgSSBzZWUgdGhhdCB0aGUgYHV2X2xpc3RgIGlzIHByZS1hbGxvY2F0ZWQuIExldCdzIGRpZyBkZWVwZXIgdG8gc2VlIGV4YWN0bHkgaG93IGFuZCB3aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4ODAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODoxNDo0NC44NTQzNzc4NzRaIiwiU2VxIjo1NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NDI4MTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInV2X2xpc3QgPVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0yODQ9c3RhdGljIGludCBfX2luaXQgcGtleV91dl9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yOTMtXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6Mjk0OlxcdHV2X2xpc3QgPSBrbWFsbG9jX29iaigqdXZfbGlzdCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjk1LVxcdGlmICghdXZfbGlzdClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTQ6NDQuOTAyODEwNjc5WiIsIlNlcSI6NTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNDUzODIwNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLlxuXG4qKkRlY29uc3RydWN0aW5nIHRoaXMgTWVtb3J5IEFsbG9jYXRpb24qKlxuXG5IbW0sIGBrbWFsbG9jX29iaigqdXZfbGlzdClgLi4uIHRoYXQgc3ludGF4IHRocm93cyBhIGZsYWcuIGBrbWFsbG9jX29iamAgaXMgZGVmaW5pdGVseSBub3QgYSBzdGFuZGFyZCBrZXJuZWwgYWxsb2NhdG9yLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0aGF0IGl0J3MgYSBtYWNybyBvciBhIGN1c3RvbSB3cmFwcGVyIGRlZmluZWQgc29tZXdoZXJlIHNwZWNpZmljIHRvIHRoaXMgY29kZWJhc2UuIEl0J3Mgb2Z0ZW4gdGhhdCB0aGVzZSB0eXBlcyBvZiBjb25zdHJ1Y3RzIGFyZSB1c2VkIHRvIGhhbmRsZSBvYmplY3Qtc3BlY2lmaWMgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBvdGVudGlhbGx5IHByb3ZpZGUgYWRkaXRpb25hbCBjb250ZXh0IG9yIGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4gQnV0IGxldCdzIHZlcmlmeSB0aGF0LlxuXG5NeSBuZXh0IG1vdmUgaXMgdG8gZmFsbCBiYWNrIHRvIHRoZSB0cmllZC1hbmQtdHJ1ZSBzdGFuZGFyZCBrZXJuZWwgYWxsb2NhdGlvbjogYGttYWxsb2Moc2l6ZW9mKCp1dl9saXN0KSwgR0ZQX0tFUk5FTClgLiAgSXQncyBtdWNoIG1vcmUgbGlrZWx5IHRoaXMgaXMgd2hhdCB0aGV5ICptZWFudCogYW5kIHRoZSBjb2RlIGlzIHVzaW5nIHRoZSByaWdodCBzaXplIGFuZCBhbGxvY2F0aW9uIGZsYWdzLiBUaW1lIHRvIGNoZWNrIHRoZSBhY3R1YWwgY29kZSBvciByZWxldmFudCBoZWFkZXIgZmlsZXMgdG8gY29uZmlybSB0aGlzIGFzc3VtcHRpb24gYW5kIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBtZW1vcnkgYWxsb2NhdGlvbiBpcyBoYW5kbGVkIHdpdGhpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQuIFRoYXQncyB0aGUgb25seSB3YXkgdG8gYmUgY29tcGxldGVseSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg2NSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjE0OjQ5LjI0ODE5NTM1MloiLCJTZXEiOjU4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODQsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyODQ6XFx0c3RhdGljIGludCBfX2luaXQgcGtleV91dl9pbml0KHZvaWQpXFxuIDI4NTpcXHR7XFxuIDI4NjpcXHRcXHRpbnQgcmM7XFxuIDI4NzpcXHRcXG4gMjg4OlxcdFxcdGlmICghaXNfcHJvdF92aXJ0X2d1ZXN0KCkpXFxuIDI4OTpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gMjkwOlxcdFxcbiAyOTE6XFx0XFx0aWYgKCF0ZXN0X2JpdF9pbnYoQklUX1VWQ19DTURfUkVUUl9TRUNSRVQsIHV2X2luZm8uaW5zdF9jYWxsc19saXN0KSlcXG4gMjkyOlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiAyOTM6XFx0XFxuIDI5NDpcXHRcXHR1dl9saXN0ID0ga21hbGxvY19vYmooKnV2X2xpc3QpO1xcbiAyOTU6XFx0XFx0aWYgKCF1dl9saXN0KVxcbiAyOTY6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDI5NzpcXHRcXG4gMjk4OlxcdFxcdHJjID0gcGtleV9oYW5kbGVyX3JlZ2lzdGVyKFxcdTAwMjZ1dl9oYW5kbGVyKTtcXG4gMjk5OlxcdFxcdGlmIChyYylcXG4gMzAwOlxcdFxcdFxcdGtmcmVlKHV2X2xpc3QpO1xcbiAzMDE6XFx0XFxuIDMwMjpcXHRcXHRyZXR1cm4gcmM7XFxuIDMwMzpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjE0OjQ5LjI0ODI3ODU1MloiLCJTZXEiOjU5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTEwMjExMDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIFVuZmFtaWxpYXIgQ29kZSoqXG5cblJpZ2h0LCBsZXQgbWUgc2VlLi4uIEknbSBsb29raW5nIGF0IHRoaXMgYGttYWxsb2Nfb2JqYCB0aGluZyBhbmQgaXQncyBub3QgaW1tZWRpYXRlbHkganVtcGluZyBvdXQgYXQgbWUgYXMgc3RhbmRhcmQga2VybmVsIGNvZGUuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiB0aGUgY29udGV4dCwgaXMgdGhhdCBpdCdzIGxpa2VseSBhIG1hY3JvIHNwZWNpZmljIHRvIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSwgb3IgbWF5YmUgZGVmaW5lZCBpbiBzb21lIGxvY2FsLCBwcm9qZWN0LXNwZWNpZmljIGhlYWRlciBmaWxlLiBPa2F5LCBob2xkIG9uLiBKdXN0IGNvbmZpcm1pbmcgbXkgaW5pdGlhbCBpbXByZXNzaW9uLi4uIFllcCwgYGttYWxsb2Nfb2JqYCBpc24ndCBhIHN0YW5kYXJkLCB1bml2ZXJzYWxseSBkZWZpbmVkIGtlcm5lbCBmdW5jdGlvbiBvciBtYWNyby4gU28sIHRpbWUgdG8gdHJhY2sgZG93biBpdHMgZGVmaW5pdGlvbi4gTGV0J3MgZmluZCBvdXQgd2hlcmUgdGhpcyB0aGluZyBpcyBhY3R1YWxseSBkZWNsYXJlZCEgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBpdCdzIGRvaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ0MSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTQ6NTMuMzU4NDkzMTk5WiIsIlNlcSI6NjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzEyNzEyMjczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImttYWxsb2Nfb2JqXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDE1NDk3IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3Q9MjAzPW5vbi1cXFxcIGBgTlVMTGBgLCBsb2NrbGVzc2x5IGFjY2Vzc2luZyB0aGUgYGAtXFx1MDAzZWFgYCBhbmQgYGAtXFx1MDAzZWJgYCBmaWVsZHMuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3QtMjA4LSAgICAgICAyIHtcXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3Q6MjA5OiAgICAgICAzICAgcCA9IGttYWxsb2Nfb2JqKCpwKTtcXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3QtMjEwLSAgICAgICA0ICAgaWYgKCFwKVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0PTIyNT10aGVpciByaWdodHMgdG8gcmVvcmRlciB0aGlzIGNvZGUgYXMgZm9sbG93czpcXG4tLVxcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdC0yMzAtICAgICAgIDIge1xcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdDoyMzE6ICAgICAgIDMgICBwID0ga21hbGxvY19vYmooKnApO1xcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdC0yMzItICAgICAgIDQgICBpZiAoIXApXFxuLS1cXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3Q9MjYxPXNob3dzIGFuIGV4YW1wbGUgb2YgaW5zZXJ0aW9uOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0LTI2Ni0gICAgICAgMiB7XFxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0OjI2NzogICAgICAgMyAgIHAgPSBrbWFsbG9jX29iaigqcCk7XFxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0LTI2OC0gICAgICAgNCAgIGlmICghcClcXG4tLVxcbkRvY3VtZW50YXRpb24vUkNVL2xpc3RSQ1UucnN0PTI2Nz1UaGUgUkNVIHZlcnNpb24gb2YgYXVkaXRfdXBkX3J1bGUoKSBpcyBhcyBmb2xsb3dzOjpcXG4tLVxcbkRvY3VtZW50YXRpb24vUkNVL2xpc3RSQ1UucnN0LTI3OC1cXHRcXHRcXHRpZiAoIWF1ZGl0X2NvbXBhcmVfcnVsZShydWxlLCBcXHUwMDI2ZS1cXHUwMDNlcnVsZSkpIHtcXG5Eb2N1bWVudGF0aW9uL1JDVS9saXN0UkNVLnJzdDoyNzk6XFx0XFx0XFx0XFx0bmUgPSBrbWFsbG9jX29iaigqZW50cnksIEdGUF9BVE9NSUMpO1xcbkRvY3VtZW50YXRpb24vUkNVL2xpc3RSQ1UucnN0LTI4MC1cXHRcXHRcXHRcXHRpZiAobmUgPT0gTlVMTClcXG4tLVxcbkRvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS5yc3Q9NDQxPXVzZXMgb2YgUkNVIG1heSBiZSBmb3VuZCBpbiBsaXN0UkNVLnJzdCBhbmQgTk1JLVJDVS5yc3QuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UucnN0LTQ3MC1cXG5Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UucnN0OjQ3MTpcXHRcXHRuZXdfZnAgPSBrbWFsbG9jX29iaigqbmV3X2ZwKTtcXG5Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UucnN0LTQ3Mi1cXHRcXHRzcGluX2xvY2soXFx1MDAyNmZvb19tdXRleCk7XFxuLS1cXG5Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UucnN0PTU1Mz1UaGUgZm9vX3VwZGF0ZV9hKCkgZnVuY3Rpb24gbWlnaHQgdGhlbiBiZSB3cml0dGVuIGFzIGZvbGxvd3M6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnJzdC01NzItXFxuRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnJzdDo1NzM6XFx0XFx0bmV3X2ZwID0ga21hbGxvY19vYmooKm5ld19mcCk7XFxuRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnJzdC01NzQtXFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZmb29fbXV0ZXgpO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9rcmVmLnJzdD0zOT1rcmVmX2luaXQgYXMgc286Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9rcmVmLnJzdC00Mi1cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2tyZWYucnN0OjQzOiAgICAgZGF0YSA9IGttYWxsb2Nfb2JqKCpkYXRhKTtcXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2tyZWYucnN0LTQ0LSAgICAgaWYgKCFkYXRhKVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9rcmVmLnJzdD04MT10aHJlYWQgdG8gcHJvY2Vzczo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2tyZWYucnN0LTEwMi1cXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9rcmVmLnJzdDoxMDM6XFx0ZGF0YSA9IGttYWxsb2Nfb2JqKCpkYXRhKTtcXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2tyZWYucnN0LTEwNC1cXHRpZiAoIWRhdGEpXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0PTM4Mz10byBwcm90ZWN0IHRoZSBjYWNoZSBhbmQgYWxsIHRoZSBvYmplY3RzIHdpdGhpbiBpdC4gSGVyZSdzIHRoZSBjb2RlOjpcXG4tLVxcbkRvY3VtZW50YXRpb24va2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3QtNDQ0LVxcbkRvY3VtZW50YXRpb24va2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3Q6NDQ1OiAgICAgICAgICAgIGlmICgob2JqID0ga21hbGxvY19vYmooKm9iaikpID09IE5VTEwpXFxuRG9jdW1lbnRhdGlvbi9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdC00NDYtICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTtcXG4tLVxcbkRvY3VtZW50YXRpb24va2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3Q9NDk5PXdoaWNoIGFyZSB0YWtlbiBhd2F5LCBhbmQgdGhlIGBgK2BgIGFyZSBsaW5lcyB3aGljaCBhcmUgYWRkZWQuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0LTUxOS1cXG5Eb2N1bWVudGF0aW9uL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0OjUyMDogICAgICAgICAgICAgaWYgKChvYmogPSBrbWFsbG9jX29iaigqb2JqKSkgPT0gTlVMTClcXG5Eb2N1bWVudGF0aW9uL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0LTUyMS0gICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTtcXG4tLVxcbkRvY3VtZW50YXRpb24vbG9ja2luZy9sb2NrdHlwZXMucnN0PTQ5OD13b3JrcyBwZXJmZWN0bHk6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9sb2NraW5nL2xvY2t0eXBlcy5yc3QtNTAwLSAgcmF3X3NwaW5fbG9jayhcXHUwMDI2bG9jayk7XFxuRG9jdW1lbnRhdGlvbi9sb2NraW5nL2xvY2t0eXBlcy5yc3Q6NTAxOiAgcCA9IGttYWxsb2Nfb2JqKCpwLCBHRlBfQVRPTUlDKTtcXG5Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbG9ja3R5cGVzLnJzdC01MDItXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbG9ja3R5cGVzLnJzdD01MDc9cHJlZW1wdGlvbiBvbiBQUkVFTVBUX1JUIGtlcm5lbHM6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9sb2NraW5nL2xvY2t0eXBlcy5yc3QtNTA5LSAgc3Bpbl9sb2NrKFxcdTAwMjZsb2NrKTtcXG5Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbG9ja3R5cGVzLnJzdDo1MTA6ICBwID0ga21hbGxvY19vYmooKnAsIEdGUF9BVE9NSUMpO1xcbkRvY3VtZW50YXRpb24vbG9ja2luZy9sb2NrdHlwZXMucnN0LTUxMS1cXG4tLVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTkzOD1UaGUga2VybmVsIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgZ2VuZXJhbCBwdXJwb3NlIG1lbW9yeSBhbGxvY2F0b3JzOlxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0OjkzOTprbWFsbG9jKCksIGt6YWxsb2MoKSwga21hbGxvY19vYmpzKCksIGt6YWxsb2Nfb2JqcygpLCB2bWFsbG9jKCksIGFuZFxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk0MC12emFsbG9jKCkuICBQbGVhc2UgcmVmZXIgdG8gdGhlIEFQSSBkb2N1bWVudGF0aW9uIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdD05NDQ9VGhlIHByZWZlcnJlZCBmb3JtIGZvciBwYXNzaW5nIGEgc2l6ZSBvZiBhIHN0cnVjdCBpcyB0aGUgZm9sbG93aW5nOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTQ3LVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0Ojk0ODpcXHRwID0ga21hbGxvY19vYmooKnAsIC4uLik7XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTQ5LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9OTU4PVRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgYWxsb2NhdGluZyBhbiBhcnJheSBpcyB0aGUgZm9sbG93aW5nOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTYxLVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0Ojk2MjpcXHRwID0ga21hbGxvY19vYmpzKCpwLCBuLCAuLi4pO1xcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk2My1cXG4tLVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdD0zODY9bWF5IGhlbHAgd2l0aCBhbGlnbm1lbnQsIHdyYXAtYXJvdW5kLCBvciBhZGRpdGlvbmFsIGhhcmRlbmluZy4gVGhlXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0OjM4NzprbWFsbG9jX29iaigpLWZhbWlseSBvZiBtYWNyb3MgcHJvdmlkZSB0aGlzIGludHJvc3BlY3Rpb24sIHdoaWNoIGNhbiBiZVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC0zODgtdXNlZCBmb3IgdGhlIGNvbW1vbiBjb2RlIHBhdHRlcm5zIGZvciBzaW5nbGUsIGFycmF5LCBhbmQgZmxleGlibGUgb2JqZWN0XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3Q9Mzk4PWJlY29tZSwgcmVzcGVjdGl2ZWx5OjpcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtMzk5LVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdDo0MDA6XFx0cHRyID0ga21hbGxvY19vYmooKnB0ciBbLCBnZnBdICk7XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0LTQwMS1cXHRwdHIgPSBremFsbG9jX29iaigqcHRyIFssIGdmcF0gKTtcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3Q6NDAyOlxcdHB0ciA9IGttYWxsb2Nfb2JqcygqcHRyLCBjb3VudCBbLCBnZnBdICk7XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0LTQwMy1cXHRwdHIgPSBremFsbG9jX29ianMoKnB0ciwgY291bnQgWywgZ2ZwXSApO1xcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDQtXFx0cHRyID0ga21hbGxvY19mbGV4KCpwdHIsIGZsZXhfbWVtYmVyLCBjb3VudCBbLCBnZnBdICk7XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0OjQwNTpcXHRfX2F1dG9fdHlwZSBwdHIgPSBrbWFsbG9jX29iaihzdHJ1Y3QgZm9vIFssIGdmcF0gKTtcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtNDA2LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTE3MzQ9Y2FsbGJhY2s6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTE3MzktICAgICAgICAgIC4uLi5cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q6MTc0MDogICAgICAgICAgZGF0YSA9IGttYWxsb2Nfb2JqKCpkYXRhKTtcXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMTc0MS0gICAgICAgICAgc3Vic3RyZWFtLVxcdTAwM2VydW50aW1lLVxcdTAwM2Vwcml2YXRlX2RhdGEgPSBkYXRhO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTMzMDI9ZGVzdHJ1Y3RvciBmdW5jdGlvbiBpcyBzZXQgaW4gdGhlIGBgcHJpdmF0ZV9mcmVlYGAgZmllbGQ6OlxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC0zMzAzLVxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdDozMzA0OiAgc3RydWN0IG15ZGF0YSAqcCA9IGttYWxsb2Nfb2JqKCpwKTtcXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMzMwNS0gIGh3LVxcdTAwM2Vwcml2YXRlX2RhdGEgPSBwO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9zcGkvc3BpLXN1bW1hcnkucnN0PTI0Mj1BbmQgU09DLXNwZWNpZmljIHV0aWxpdHkgY29kZSBtaWdodCBsb29rIHNvbWV0aGluZyBsaWtlOjpcXG4tLVxcbkRvY3VtZW50YXRpb24vc3BpL3NwaS1zdW1tYXJ5LnJzdC0yNTEtXFxuRG9jdW1lbnRhdGlvbi9zcGkvc3BpLXN1bW1hcnkucnN0OjI1MjpcXHRcXHRwZGF0YTIgPSBrbWFsbG9jX29iaigqcGRhdGEyKTtcXG5Eb2N1bWVudGF0aW9uL3NwaS9zcGktc3VtbWFyeS5yc3QtMjUzLVxcdFxcdCpwZGF0YTIgPSBwZGF0YTtcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0PTQwMz1lIHR1dHRpIGdsaSBvZ2dldHRpIGNoZSBjb250aWVuZS4gRWNjbyBpbCBjb2RpY2U6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQva2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3QtNDY0LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0OjQ2NTogICAgICAgICAgICBpZiAoKG9iaiA9IGttYWxsb2Nfb2JqKCpvYmopKSA9PSBOVUxMKVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0LTQ2Ni0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQva2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3Q9NTE5PXNvbm8gcXVlbGxlIHJpbW9zc2UsIG1lbnRyZSBxdWVsbGUgYGArYGAgc29ubyBxdWVsbGUgYWdnaXVudGUuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdC01MzktXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQva2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3Q6NTQwOiAgICAgICAgICAgICBpZiAoKG9iaiA9IGttYWxsb2Nfb2JqKCpvYmopKSA9PSBOVUxMKVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0LTU0MS0gICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTtcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2xvY2tpbmcvbG9ja3R5cGVzLnJzdD00ODg9bWVtb3JpYS4gU3UgdW4ga2VybmVsIG5vbi1QUkVFTVBUX1JUIGlsIHNlZ3VlbnRlIGNvZGljZSBmdW56aW9uYSBwZXJmZXR0YW1lbnRlOjpcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2xvY2tpbmcvbG9ja3R5cGVzLnJzdC00OTAtICByYXdfc3Bpbl9sb2NrKFxcdTAwMjZsb2NrKTtcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9sb2NraW5nL2xvY2t0eXBlcy5yc3Q6NDkxOiAgcCA9IGttYWxsb2Nfb2JqKCpwLCBHRlBfQVRPTUlDKTtcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9sb2NraW5nL2xvY2t0eXBlcy5yc3QtNDkyLVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvbG9ja2luZy9sb2NrdHlwZXMucnN0PTQ5Nz1QUkVFTVBUX1JUOjpcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2xvY2tpbmcvbG9ja3R5cGVzLnJzdC00OTktICBzcGluX2xvY2soXFx1MDAyNmxvY2spO1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2xvY2tpbmcvbG9ja3R5cGVzLnJzdDo1MDA6ICBwID0ga21hbGxvY19vYmooKnAsIEdGUF9BVE9NSUMpO1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2xvY2tpbmcvbG9ja3R5cGVzLnJzdC01MDEtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9OTQyPUlsIG1vZG8gcHJlZmVyaXRvIHBlciBwYXNzYXJlIGxhIGRpbWVuc2lvbmUgZGkgdW5hIHN0cnV0dHVyYSDDqCBpbCBzZWd1ZW50ZTpcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NDUtXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0Ojk0NjpcXHRwID0ga21hbGxvY19vYmooKnAsIC4uLik7XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk0Ny1cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3NwX1NQL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdD05NTQ9TGEgZm9ybWEgcHJlZmVyaWRhIHBhcmEgcGFzYXIgZWwgdGFtYcOxbyBkZSB1bmEgZXN0cnVjdHVyYSBlcyBsYSBzaWd1aWVudGU6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9zcF9TUC9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTU3LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3NwX1NQL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo5NTg6XFx0cCA9IGttYWxsb2Nfb2JqKCpwLCAuLi4pO1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3NwX1NQL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NTktXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9rcmVmLnJzdD00Nj1rcmVm5Y+v5Lul5Ye6546w5Zyo5pWw5o2u57uT5p6E5L2T5Lit55qE5Lu75L2V5Zyw5pa544CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9rcmVmLnJzdC01NC1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9rcmVmLnJzdDo1NTogICAgIGRhdGEgPSBrbWFsbG9jX29iaigqZGF0YSk7XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkva3JlZi5yc3QtNTYtICAgICBpZiAoIWRhdGEpXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9rcmVmLnJzdD02Mj1LcmVm6KeE5YiZXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9rcmVmLnJzdC0xMDgtXFx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrO1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL2tyZWYucnN0OjEwOTpcXHRkYXRhID0ga21hbGxvY19vYmooKmRhdGEpO1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL2tyZWYucnN0LTExMC1cXHRpZiAoIWRhdGEpXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9ODEwPURvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL21lbW9yeS1hbGxvY2F0aW9uLnJzdCDjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC04MTUtXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0OjgxNjpcXHRwID0ga21hbGxvY19vYmooKnAsIC4uLik7XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTgxNy1cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdD04MjQ9RG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkvbWVtb3J5LWFsbG9jYXRpb24ucnN0IOOAglxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTgyOS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6ODMwOlxcdHAgPSBrbWFsbG9jX29iaigqcCwgLi4uKTtcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtODMxLVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYz04NTc9bWFydmVsX2FncF9zZXR1cChhbHBoYV9hZ3BfaW5mbyAqYWdwKVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYy04NjMtXFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYzo4NjQ6XFx0YXBlciA9IGttYWxsb2Nfb2JqKCphcGVyKTtcXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jLTg2NS1cXHRpZiAoYXBlciA9PSBOVUxMKSByZXR1cm4gLUVOT01FTTtcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmM9MTAxOT1tYXJ2ZWxfYWdwX2luZm8odm9pZClcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmMtMTA2MS1cXHQgKi9cXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jOjEwNjI6XFx0YWdwID0ga21hbGxvY19vYmooKmFncCk7XFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYy0xMDYzLVxcdGlmICghYWdwKVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV90aXRhbi5jPTU5MD10aXRhbl9hZ3Bfc2V0dXAoYWxwaGFfYWdwX2luZm8gKmFncClcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfdGl0YW4uYy01OTYtXFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV90aXRhbi5jOjU5NzpcXHRhcGVyID0ga21hbGxvY19vYmooc3RydWN0IHRpdGFuX2FncF9hcGVydHVyZSk7XFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV90aXRhbi5jLTU5OC1cXHRpZiAoYXBlciA9PSBOVUxMKVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV90aXRhbi5jPTczMT10aXRhbl9hZ3BfaW5mbyh2b2lkKVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV90aXRhbi5jLTc2Mi1cXHQgKi9cXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX3RpdGFuLmM6NzYzOlxcdGFncCA9IGttYWxsb2Nfb2JqKCphZ3ApO1xcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfdGl0YW4uYy03NjQtXFx0aWYgKCFhZ3ApXFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9tb2R1bGUuYz0yOT1wcm9jZXNzX3JlbG9jX2Zvcl9nb3QoRWxmNjRfUmVsYSAqcmVsYSxcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jLTQ4LVxcbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jOjQ5OlxcdGcgPSBrbWFsbG9jX29iaigqZyk7XFxuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmMtNTAtXFx0Zy1cXHUwMDNlbmV4dCA9IGNoYWluc1tyX3N5bV0ubmV4dDtcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL3BjaS5jPTIxMT1zdGF0aWMgdm9pZCBwZGV2X3NhdmVfc3JtX2NvbmZpZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmMtMjIzLVxcbmFyY2gvYWxwaGEva2VybmVsL3BjaS5jOjIyNDpcXHR0bXAgPSBrbWFsbG9jX29iaigqdG1wKTtcXG5hcmNoL2FscGhhL2tlcm5lbC9wY2kuYy0yMjUtXFx0aWYgKCF0bXApIHtcXG4tLVxcbmFyY2gvYXJjL2tlcm5lbC91bndpbmQuYz0zNTk9dm9pZCAqdW53aW5kX2FkZF90YWJsZShzdHJ1Y3QgbW9kdWxlICptb2R1bGUsIGNvbnN0IHZvaWQgKnRhYmxlX3N0YXJ0LFxcbi0tXFxuYXJjaC9hcmMva2VybmVsL3Vud2luZC5jLTM2OC1cXG5hcmNoL2FyYy9rZXJuZWwvdW53aW5kLmM6MzY5OlxcdHRhYmxlID0ga21hbGxvY19vYmooKnRhYmxlKTtcXG5hcmNoL2FyYy9rZXJuZWwvdW53aW5kLmMtMzcwLVxcdGlmICghdGFibGUpXFxuLS1cXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmM9Mjc0PXN0YXRpYyBpbnQgbG9jb21vX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpXFxuLS1cXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmMtMjc5LVxcbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYzoyODA6XFx0c2F2ZSA9IGttYWxsb2Nfb2JqKHN0cnVjdCBsb2NvbW9fc2F2ZV9kYXRhKTtcXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmMtMjgxLVxcdGlmICghc2F2ZSlcXG4tLVxcbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYz05NjQ9c3RhdGljIGludCBzYTExMTFfc3VzcGVuZF9ub2lycShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5hcmNoL2FybS9jb21tb24vc2ExMTExLmMtOTcxLVxcbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYzo5NzI6XFx0c2F2ZSA9IGttYWxsb2Nfb2JqKHN0cnVjdCBzYTExMTFfc2F2ZV9kYXRhKTtcXG5hcmNoL2FybS9jb21tb24vc2ExMTExLmMtOTczLVxcdGlmICghc2F2ZSlcXG4tLVxcbmFyY2gvYXJtL2tlcm5lbC91bndpbmQuYz01NzI9c3RydWN0IHVud2luZF90YWJsZSAqdW53aW5kX3RhYmxlX2FkZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUsXFxuLS1cXG5hcmNoL2FybS9rZXJuZWwvdW53aW5kLmMtNTc2LVxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuYXJjaC9hcm0va2VybmVsL3Vud2luZC5jOjU3NzpcXHRzdHJ1Y3QgdW53aW5kX3RhYmxlICp0YWIgPSBrbWFsbG9jX29iaigqdGFiKTtcXG5hcmNoL2FybS9rZXJuZWwvdW53aW5kLmMtNTc4LVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwLWlvbW11LmM9NTM9c3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiAqX2dldF9wd3JkbShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtaW9tbXUuYy0xMDEtXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwLWlvbW11LmM6MTAyOlxcdGVudHJ5ID0ga21hbGxvY19vYmooKmVudHJ5KTtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtaW9tbXUuYy0xMDMtXFx0aWYgKGVudHJ5KSB7XFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzR4eC5jPTQwNj1zdGF0aWMgaW50IF9faW5pdCBwd3JkbXNfc2V0dXAoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdm9pZCAqdW51c2VkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYy00MTItXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYzo0MTM6XFx0cHdyc3QgPSBrbWFsbG9jX29iaihzdHJ1Y3QgcG93ZXJfc3RhdGUsIEdGUF9BVE9NSUMpO1xcbmFyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmMtNDE0LVxcdGlmICghcHdyc3QpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtNDR4eC5jPTExMz1zdGF0aWMgaW50IF9faW5pdCBwd3JkbXNfc2V0dXAoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdm9pZCAqdW51c2VkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTQ0eHguYy0xMzQtXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTQ0eHguYzoxMzU6XFx0cHdyc3QgPSBrbWFsbG9jX29iaihzdHJ1Y3QgcG93ZXJfc3RhdGUsIEdGUF9BVE9NSUMpO1xcbmFyY2gvYXJtL21hY2gtb21hcDIvcG00NHh4LmMtMTM2LVxcdGlmICghcHdyc3QpXFxuLS1cXG5hcmNoL2FybS9tbS9wZ2QuYy0xOS0jaWZkZWYgQ09ORklHX0FSTV9MUEFFXFxuYXJjaC9hcm0vbW0vcGdkLmM6MjA6I2RlZmluZSBfcGdkX2FsbG9jKG1tKVxcdFxcdGttYWxsb2Nfb2JqcyhwZ2RfdCwgUFRSU19QRVJfUEdELCBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTylcXG5hcmNoL2FybS9tbS9wZ2QuYy0yMS0jZGVmaW5lIF9wZ2RfZnJlZShtbSwgcGdkKVxcdGtmcmVlKHBnZClcXG4tLVxcbmFyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL3Rlc3QtY29yZS5jPTc2ND1zdGF0aWMgaW50IGNvdmVyYWdlX3N0YXJ0KGNvbnN0IHVuaW9uIGRlY29kZV9pdGVtICp0YWJsZSlcXG5hcmNoL2FybS9wcm9iZXMva3Byb2Jlcy90ZXN0LWNvcmUuYy03NjUte1xcbmFyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL3Rlc3QtY29yZS5jOjc2NjpcXHRjb3ZlcmFnZS5iYXNlID0ga21hbGxvY19vYmpzKHN0cnVjdCBjb3ZlcmFnZV9lbnRyeSxcXG5hcmNoL2FybS9wcm9iZXMva3Byb2Jlcy90ZXN0LWNvcmUuYy03NjctXFx0XFx0XFx0XFx0ICAgICBNQVhfQ09WRVJBR0VfRU5UUklFUyk7XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jPTc3ND12b2lkIGt2bV9ob3N0X3BtdV9pbml0KHN0cnVjdCBhcm1fcG11ICpwbXUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jLTc4Ni1cXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jOjc4NzpcXHRlbnRyeSA9IGttYWxsb2Nfb2JqKCplbnRyeSk7XFxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYy03ODgtXFx0aWYgKCFlbnRyeSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1kZWJ1Zy5jPTEwMj1zdGF0aWMgdm9pZCAqdmdpY19kZWJ1Z19zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGxvZmZfdCAqcG9zKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWRlYnVnLmMtMTA2LVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1kZWJ1Zy5jOjEwNzpcXHRpdGVyID0ga21hbGxvY19vYmooKml0ZXIpO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1kZWJ1Zy5jLTEwOC1cXHRpZiAoIWl0ZXIpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtZGVidWcuYz0zNjQ9c3RhdGljIHZvaWQgKnZnaWNfaXRzX2RlYnVnX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqcywgbG9mZl90ICpwb3MpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtZGVidWcuYy0zNzctXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWRlYnVnLmM6Mzc4OlxcdGl0ZXIgPSBrbWFsbG9jX29iaigqaXRlcik7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWRlYnVnLmMtMzc5LVxcdGlmICghaXRlcilcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM9NzQzPXZvaWQgX19pbml0IHZnaWNfc2V0X2t2bV9pbmZvKGNvbnN0IHN0cnVjdCBnaWNfa3ZtX2luZm8gKmluZm8pXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jLTc0NS1cXHRCVUdfT04oZ2ljX2t2bV9pbmZvICE9IE5VTEwpO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM6NzQ2OlxcdGdpY19rdm1faW5mbyA9IGttYWxsb2Nfb2JqKCpnaWNfa3ZtX2luZm8pO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMtNzQ3LVxcdGlmIChnaWNfa3ZtX2luZm8pXFxuLS1cXG5hcmNoL202OGsvZW11L25mYmxvY2suYz05Nz1zdGF0aWMgaW50IF9faW5pdCBuZmhkX2luaXRfb25lKGludCBpZCwgdTMyIGJsb2NrcywgdTMyIGJzaXplKVxcbi0tXFxuYXJjaC9tNjhrL2VtdS9uZmJsb2NrLmMtMTE0LVxcbmFyY2gvbTY4ay9lbXUvbmZibG9jay5jOjExNTpcXHRkZXYgPSBrbWFsbG9jX29iaihzdHJ1Y3QgbmZoZF9kZXZpY2UpO1xcbmFyY2gvbTY4ay9lbXUvbmZibG9jay5jLTExNi1cXHRpZiAoIWRldilcXG4tLVxcbmFyY2gvbTY4ay9tbS9rbWFwLmM9MTA4PXN0YXRpYyBzdHJ1Y3Qgdm1fc3RydWN0ICpnZXRfaW9fYXJlYSh1bnNpZ25lZCBsb25nIHNpemUpXFxuLS1cXG5hcmNoL202OGsvbW0va21hcC5jLTExMi1cXG5hcmNoL202OGsvbW0va21hcC5jOjExMzpcXHRhcmVhID0ga21hbGxvY19vYmooKmFyZWEpO1xcbmFyY2gvbTY4ay9tbS9rbWFwLmMtMTE0LVxcdGlmICghYXJlYSlcXG4tLVxcbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jPTI1Mz11MzIgYXUxeHh4X2RiZG1hX2NoYW5fYWxsb2ModTMyIHNyY2lkLCB1MzIgZGVzdGlkLFxcbi0tXFxuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmMtMzEyLVxcdFxcdFxcdCAqL1xcbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jOjMxMzpcXHRcXHRcXHRjdHAgPSBrbWFsbG9jX29iaihjaGFuX3RhYl90LCBHRlBfQVRPTUlDKTtcXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYy0zMTQtXFx0XFx0XFx0Y2hhbl90YWJfcHRyW2ldID0gY3RwO1xcbi0tXFxuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmM9MzkxPXUzMiBhdTF4eHhfZGJkbWFfcmluZ19hbGxvYyh1MzIgY2hhbmlkLCBpbnQgZW50cmllcylcXG4tLVxcbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jLTQxNC1cXHQgKi9cXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYzo0MTU6XFx0ZGVzY19iYXNlID0gKHUzMikga21hbGxvY19vYmpzKGF1MXhfZGRtYV9kZXNjX3QsIGVudHJpZXMsXFxuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmMtNDE2LVxcdFxcdFxcdFxcdCAgICAgICBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7XFxuLS1cXG5hcmNoL21pcHMva2VybmVsL21vZHVsZS5jPTU5PXN0YXRpYyBpbnQgYXBwbHlfcl9taXBzX2hpMTYoc3RydWN0IG1vZHVsZSAqbWUsIHUzMiAqbG9jYXRpb24sIEVsZl9BZGRyIHYsXFxuLS1cXG5hcmNoL21pcHMva2VybmVsL21vZHVsZS5jLTc0LVxcdCAqL1xcbmFyY2gvbWlwcy9rZXJuZWwvbW9kdWxlLmM6NzU6XFx0biA9IGttYWxsb2Nfb2JqKCpuKTtcXG5hcmNoL21pcHMva2VybmVsL21vZHVsZS5jLTc2LVxcdGlmICghbilcXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvdnBlLmM9MzExPXN0YXRpYyBpbnQgYXBwbHlfcl9taXBzX2hpMTYoc3RydWN0IG1vZHVsZSAqbWUsIHVpbnQzMl90ICpsb2NhdGlvbixcXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvdnBlLmMtMzIwLVxcdCAqL1xcbmFyY2gvbWlwcy9rZXJuZWwvdnBlLmM6MzIxOlxcdG4gPSBrbWFsbG9jX29iaigqbik7XFxuYXJjaC9taXBzL2tlcm5lbC92cGUuYy0zMjItXFx0aWYgKCFuKVxcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jPTE4OD1wYXRfcXVlcnlfbW9kdWxlKHVsb25nIHBjZWxsX2xvYywgdWxvbmcgbW9kX2luZGV4KVxcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jLTE5NS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmM6MTk2OlxcdHBhX3BkY19jZWxsID0ga21hbGxvY19vYmooKnBhX3BkY19jZWxsKTtcXG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmMtMTk3LVxcdGlmICghcGFfcGRjX2NlbGwpXFxuLS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmM9NTMyPWFkZF9zeXN0ZW1fbWFwX2FkZHJlc3NlcyhzdHJ1Y3QgcGFyaXNjX2RldmljZSAqZGV2LCBpbnQgbnVtX2FkZHJzLCBcXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9pbnZlbnRvcnkuYy01MzgtXFxuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jOjUzOTpcXHRkZXYtXFx1MDAzZWFkZHIgPSBrbWFsbG9jX29ianMoKmRldi1cXHUwMDNlYWRkciwgbnVtX2FkZHJzKTtcXG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmMtNTQwLVxcdGlmKCFkZXYtXFx1MDAzZWFkZHIpIHtcXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzb3IuYz04MT1zdGF0aWMgaW50IF9faW5pdCBwcm9jZXNzb3JfcHJvYmUoc3RydWN0IHBhcmlzY19kZXZpY2UgKmRldilcXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzb3IuYy0xMTItXFxuYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3Nvci5jOjExMzpcXHRcXHRwYV9wZGNfY2VsbCA9IGttYWxsb2Nfb2JqKCpwYV9wZGNfY2VsbCk7XFxuYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3Nvci5jLTExNC1cXHRcXHRpZiAoIXBhX3BkY19jZWxsKVxcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jPTE0OT11bndpbmRfdGFibGVfYWRkKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgYmFzZV9hZGRyLCBcXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYy0xNTktXFxuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jOjE2MDpcXHR0YWJsZSA9IGttYWxsb2Nfb2JqKHN0cnVjdCB1bndpbmRfdGFibGUsIEdGUF9VU0VSKTtcXG5hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmMtMTYxLVxcdGlmICh0YWJsZSA9PSBOVUxMKVxcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jPTQwNj12b2lkIHVud2luZF9mcmFtZV9pbml0X2Zyb21fYmxvY2tlZF90YXNrKHN0cnVjdCB1bndpbmRfZnJhbWVfaW5mbyAqaW5mbywgc3RydWN0IHRhc2tfc3RydWN0ICp0KVxcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jLTQxMC1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmM6NDExOlxcdHIyID0ga21hbGxvY19vYmooc3RydWN0IHB0X3JlZ3MsIEdGUF9BVE9NSUMpO1xcbmFyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYy00MTItXFx0aWYgKCFyMilcXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvbnZyYW1fNjQuYz05ODQ9aW50IF9faW5pdCBudnJhbV9zY2FuX3BhcnRpdGlvbnModm9pZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvbnZyYW1fNjQuYy0xMDMyLVxcdFxcdH1cXG5hcmNoL3Bvd2VycGMva2VybmVsL252cmFtXzY0LmM6MTAzMzpcXHRcXHR0bXBfcGFydCA9IGttYWxsb2Nfb2JqKCp0bXBfcGFydCk7XFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9udnJhbV82NC5jLTEwMzQtXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYz03MzE9aW50IGt2bV92Y3B1X2lvY3RsX2NvbmZpZ190bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jLTc3NC1cXHRcXHQgICAgY2ZnLVxcdTAwM2VhcnJheSAvIFBBR0VfU0laRTtcXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmM6Nzc1OlxcdHBhZ2VzID0ga21hbGxvY19vYmpzKCpwYWdlcywgbnVtX3BhZ2VzKTtcXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmMtNzc2LVxcdGlmICghcGFnZXMpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmM9ODk4PWludCBrdm1wcGNfZTUwMF90bGJfaW5pdChzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jLTkxNC1cXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmM6OTE1OlxcdHZjcHVfZTUwMC1cXHUwMDNlZ3RsYl9hcmNoID0ga21hbGxvY19vYmpzKCp2Y3B1X2U1MDAtXFx1MDAzZWd0bGJfYXJjaCxcXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmMtOTE2LVxcdFxcdFxcdFxcdFxcdCAgICBLVk1fRTUwMF9UTEIwX1NJWkUgKyBLVk1fRTUwMF9UTEIxX1NJWkUpO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jPTQ1PXN0YXRpYyBpbnQgZ3JvdyhyaF9pbmZvX3QgKiBpbmZvLCBpbnQgbWF4X2Jsb2NrcylcXG4tLVxcbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYy01Ni1cXG5hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmM6NTc6XFx0YmxvY2sgPSBrbWFsbG9jX29ianMocmhfYmxvY2tfdCwgbWF4X2Jsb2NrcywgR0ZQX0FUT01JQyk7XFxuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jLTU4LVxcdGlmIChibG9jayA9PSBOVUxMKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jPTI1Mz1yaF9pbmZvX3QgKnJoX2NyZWF0ZSh1bnNpZ25lZCBpbnQgYWxpZ25tZW50KVxcbi0tXFxuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jLTI2MC1cXG5hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmM6MjYxOlxcdGluZm8gPSBrbWFsbG9jX29iaigqaW5mbywgR0ZQX0FUT01JQyk7XFxuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jLTI2Mi1cXHRpZiAoaW5mbyA9PSBOVUxMKVxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L21tdV9jb250ZXh0LmM9OTU9c3RhdGljIGludCBoYXNoX19pbml0X25ld19jb250ZXh0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L21tdV9jb250ZXh0LmMtOTgtXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L21tdV9jb250ZXh0LmM6OTk6XFx0bW0tXFx1MDAzZWNvbnRleHQuaGFzaF9jb250ZXh0ID0ga21hbGxvY19vYmooc3RydWN0IGhhc2hfbW1fY29udGV4dCk7XFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L21tdV9jb250ZXh0LmMtMTAwLVxcdGlmICghbW0tXFx1MDAzZWNvbnRleHQuaGFzaF9jb250ZXh0KVxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L21tdV9jb250ZXh0LmMtMTI1LVxcdFxcdGlmIChjdXJyZW50LVxcdTAwM2VtbS1cXHUwMDNlY29udGV4dC5oYXNoX2NvbnRleHQtXFx1MDAzZXNwdCkge1xcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9tbXVfY29udGV4dC5jOjEyNjpcXHRcXHRcXHRtbS1cXHUwMDNlY29udGV4dC5oYXNoX2NvbnRleHQtXFx1MDAzZXNwdCA9IGttYWxsb2Nfb2JqKHN0cnVjdCBzdWJwYWdlX3Byb3RfdGFibGUpO1xcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9tbXVfY29udGV4dC5jLTEyNy1cXHRcXHRcXHRpZiAoIW1tLVxcdTAwM2Vjb250ZXh0Lmhhc2hfY29udGV4dC1cXHUwMDNlc3B0KSB7XFxuLS1cXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmM9NjIzPXN0YXRpYyBpbnQgZXZlbnRfdW5pcV9hZGQoc3RydWN0IHJiX3Jvb3QgKnJvb3QsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBubCxcXG4tLVxcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy02NTAtXFxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jOjY1MTpcXHRkYXRhID0ga21hbGxvY19vYmooKmRhdGEpO1xcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy02NTItXFx0aWYgKCFkYXRhKVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jPTc1NT1zdGF0aWMgaW50IGNyZWF0ZV9ldmVudHNfZnJvbV9jYXRhbG9nKHN0cnVjdCBhdHRyaWJ1dGUgKioqZXZlbnRzXyxcXG4tLVxcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MDgtXFxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jOjkwOTpcXHRldmVudHMgPSBrbWFsbG9jX29ianMoKmV2ZW50cywgYXR0cl9tYXggKyAxKTtcXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtOTEwLVxcdGlmICghZXZlbnRzKSB7XFxuLS1cXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtOTE0LVxcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYzo5MTU6XFx0ZXZlbnRfZGVzY3MgPSBrbWFsbG9jX29ianMoKmV2ZW50X2Rlc2NzLCBldmVudF9pZHggKyAxKTtcXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtOTE2LVxcdGlmICghZXZlbnRfZGVzY3MpIHtcXG4tLVxcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MjAtXFxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jOjkyMTpcXHRldmVudF9sb25nX2Rlc2NzID0ga21hbGxvY19vYmpzKCpldmVudF9sb25nX2Rlc2NzLCBldmVudF9pZHggKyAxKTtcXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtOTIyLVxcdGlmICghZXZlbnRfbG9uZ19kZXNjcykge1xcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvaHN0YV9tc2kuYz0xMjI9c3RhdGljIGludCBoc3RhX21zaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvaHN0YV9tc2kuYy0xNTMtXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvaHN0YV9tc2kuYzoxNTQ6XFx0cHBjNHh4X2hzdGFfbXNpLmlycV9tYXAgPSBrbWFsbG9jX29ianMoaW50LCBpcnFfY291bnQpO1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2hzdGFfbXNpLmMtMTU1LVxcdGlmICghcHBjNHh4X2hzdGFfbXNpLmlycV9tYXApIHtcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmM9NDQ9c3RhdGljIGludCBzcHVmc19hdHRyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jLTQ5LVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmM6NTA6XFx0YXR0ciA9IGttYWxsb2Nfb2JqKCphdHRyKTtcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jLTUxLVxcdGlmICghYXR0cilcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9kbHBhci5jPTYyOD12b2lkIHF1ZXVlX2hvdHBsdWdfZXZlbnQoc3RydWN0IHBzZXJpZXNfaHBfZXJyb3Jsb2cgKmhwX2VycmxvZylcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9kbHBhci5jLTYzNi1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZGxwYXIuYzo2Mzc6XFx0d29yayA9IGttYWxsb2Nfb2JqKHN0cnVjdCBwc2VyaWVzX2hwX3dvcmssIEdGUF9BVE9NSUMpO1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9kbHBhci5jLTYzOC1cXHRpZiAod29yaykge1xcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2h2Y3NlcnZlci5jPTExOT1pbnQgaHZjc19nZXRfcGFydG5lcl9pbmZvKHVpbnQzMl90IHVuaXRfYWRkcmVzcywgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCxcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odmNzZXJ2ZXIuYy0xNjItXFx0XFx0ICogaHZjc19mcmVlX3BhcnRuZXJfaW5mbygpLiAqL1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odmNzZXJ2ZXIuYzoxNjM6XFx0XFx0bmV4dF9wYXJ0bmVyX2luZm8gPSBrbWFsbG9jX29iaihzdHJ1Y3QgaHZjc19wYXJ0bmVyX2luZm8sXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2h2Y3NlcnZlci5jLTE2NC1cXHRcXHRcXHRcXHRcXHRcXHRHRlBfQVRPTUlDKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyY2ZnLmM9MTQ0PXN0YXRpYyB2b2lkIHNob3dfZ3BjaV9kYXRhKHN0cnVjdCBzZXFfZmlsZSAqbSlcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyY2ZnLmMtMTQ5LVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyY2ZnLmM6MTUwOlxcdGJ1ZiA9IGttYWxsb2Nfb2JqKCpidWYpO1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyY2ZnLmMtMTUxLVxcdGlmIChidWYgPT0gTlVMTClcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9tc2kuYz00MzU9c3RhdGljIGludCBwc2VyaWVzX21zaV9vcHNfcHJlcGFyZShzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLCBzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbXNpLmMtNDQzLVxcdHN0cnVjdCBwc2VyaWVzX21zaV9kZXZpY2UgKnBzZXJpZXNfZGV2IF9fZnJlZShrZnJlZSlcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbXNpLmM6NDQ0OlxcdFxcdD0ga21hbGxvY19vYmooKnBzZXJpZXNfZGV2KTtcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbXNpLmMtNDQ1LVxcdGlmICghcHNlcmllc19kZXYpXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpLmM9MTIwPXN0YXRpYyBpbnQgcHNlcmllc19wY2lfc3Jpb3ZfZW5hYmxlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1MTYgbnVtX3ZmcylcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wY2kuYy0xNDMtXFx0cGRuID0gcGNpX2dldF9wZG4ocGRldik7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaS5jOjE0NDpcXHRwZG4tXFx1MDAzZXBlX251bV9tYXAgPSBrbWFsbG9jX29ianMoKnBkbi1cXHUwMDNlcGVfbnVtX21hcCwgbnVtX3Zmcyk7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaS5jLTE0NS1cXHRpZiAoIXBkbi1cXHUwMDNlcGVfbnVtX21hcClcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92YXMuYz0xMDc2PXN0YXRpYyBpbnQgX19pbml0IHBzZXJpZXNfdmFzX2luaXQodm9pZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92YXMuYy0xMDg5LVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92YXMuYzoxMDkwOlxcdGh2X2NhcHMgPSBrbWFsbG9jX29iaigqaHZfY2Fwcyk7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Zhcy5jLTEwOTEtXFx0aWYgKCFodl9jYXBzKVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Zpby5jPTcwNT1zdGF0aWMgaW50IHZpb19jbW9fYnVzX3Byb2JlKHN0cnVjdCB2aW9fZGV2ICp2aW9kZXYpXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvdmlvLmMtNzQ3LVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92aW8uYzo3NDg6XFx0XFx0ZGV2X2VudCA9IGttYWxsb2Nfb2JqKHN0cnVjdCB2aW9fY21vX2Rldl9lbnRyeSk7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Zpby5jLTc0OS1cXHRcXHRpZiAoIWRldl9lbnQpXFxuLS1cXG5hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9sYmMuYz0zNTI9c3RhdGljIGludCBmc2xfbGJjX3N5c2NvcmVfc3VzcGVuZCh2b2lkICpkYXRhKVxcbi0tXFxuYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfbGJjLmMtMzY0LVxcbmFyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX2xiYy5jOjM2NTpcXHRjdHJsLVxcdTAwM2VzYXZlZF9yZWdzID0ga21hbGxvY19vYmooc3RydWN0IGZzbF9sYmNfcmVncyk7XFxuYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfbGJjLmMtMzY2LVxcdGlmICghY3RybC1cXHUwMDNlc2F2ZWRfcmVncylcXG4tLVxcbmFyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jPTE1NDk9dm9pZCBfX2luaXQgbXBpY19pbml0KHN0cnVjdCBtcGljICptcGljKVxcbi0tXFxuYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMtMTY0MS1cXHQvKiBhbGxvY2F0ZSBtZW1vcnkgdG8gc2F2ZSBtcGljIHN0YXRlICovXFxuYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmM6MTY0MjpcXHRtcGljLVxcdTAwM2VzYXZlX2RhdGEgPSBrbWFsbG9jX29ianMoKm1waWMtXFx1MDAzZXNhdmVfZGF0YSwgbXBpYy1cXHUwMDNlbnVtX3NvdXJjZXMpO1xcbmFyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jLTE2NDMtXFx0QlVHX09OKG1waWMtXFx1MDAzZXNhdmVfZGF0YSA9PSBOVUxMKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9zeXNkZXYvb2ZfcnRjLmM9MjM9dm9pZCBfX2luaXQgb2ZfaW5zdGFudGlhdGVfcnRjKHZvaWQpXFxuLS1cXG5hcmNoL3Bvd2VycGMvc3lzZGV2L29mX3J0Yy5jLTM1LVxcbmFyY2gvcG93ZXJwYy9zeXNkZXYvb2ZfcnRjLmM6MzY6XFx0XFx0XFx0cmVzID0ga21hbGxvY19vYmooKnJlcyk7XFxuYXJjaC9wb3dlcnBjL3N5c2Rldi9vZl9ydGMuYy0zNy1cXHRcXHRcXHRpZiAoIXJlcykge1xcbi0tXFxuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLmM9NjU0PXN0YXRpYyBpbnQgYWRkX3JlbG9jYXRpb25fdG9fYWNjdW11bGF0ZShzdHJ1Y3QgbW9kdWxlICptZSwgaW50IHR5cGUsXFxuLS1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUuYy02NjUtXFxuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLmM6NjY2OlxcdGVudHJ5ID0ga21hbGxvY19vYmooKmVudHJ5KTtcXG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUuYy02NjctXFxuLS1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUuYy02OTktXFx0aWYgKCFmb3VuZCkge1xcbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jOjcwMDpcXHRcXHRyZWxfaGVhZCA9IGttYWxsb2Nfb2JqKCpyZWxfaGVhZCk7XFxuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLmMtNzAxLVxcbi0tXFxuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLmMtNzExLVxcdFxcdFxcdGJ1Y2tldCA9XFxuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLmM6NzEyOlxcdFxcdFxcdFxcdGttYWxsb2Nfb2JqKHN0cnVjdCB1c2VkX2J1Y2tldCk7XFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjE0OjU1LjA3MTIxMTY1MloiLCJTZXEiOjYxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjcxNTU5NjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLZXJuZWwgTWVtb3J5IEFsbG9jYXRpb24gYW5kIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBuZXcgYGttYWxsb2Nfb2JqYCBtYWNybyBpbiB0aGUga2VybmVsIOKAkyBzZWVtcyBsaWtlIGl0J3MgbWVhbnQgdG8gY2xlYW4gdXAgY29kZSBieSByZXBsYWNpbmcgdGhlIG1vcmUgdmVyYm9zZSBga21hbGxvYyhzaXplb2YoKnB0ciksIC4uLilgLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzLCBobW0sIGl0J3MgYGttYWxsb2Nfb2JqKCp1dl9saXN0KWAsIG9yIG1heWJl4oCmIG5vLCB3YWl0LCBpdCdzIGRlZmluaXRlbHkgYGttYWxsb2Nfb2JqKCpwdHIpYC4gSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQuIEFoLCByaWdodCwgc28gYHV2X2xpc3QgPSBrbWFsbG9jX29iaigqdXZfbGlzdCk7YCBpcyByZWFsbHkganVzdCBhIHNob3J0aGFuZCBmb3Igc29tZXRoaW5nIGxpa2UgYHV2X2xpc3QgPSBrbWFsbG9jKHNpemVvZigqdXZfbGlzdCksIEdGUF9LRVJORUwpO2AuXG5cbk5vdywgdGhlIGltcG9ydGFudCB0aGluZyBoZXJlIGlzIHRoYXQgYGttYWxsb2NgICpkb2Vzbid0KiB6ZXJvIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LiBUaGF0J3MgYGt6YWxsb2NgJ3Mgam9iLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGltcG9ydGFudCBpbiBqdXN0IGEgYml0LlxuXG5Pa2F5LCBsZXQncyBsb29rIGF0IGBkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuY2AuIFNwZWNpZmljYWxseSwgYXQgdGhlIGBnZXRfc2VjcmV0X21ldGFkYXRhYCBmdW5jdGlvbi4gSGVyZSwgSSBzZWUgdGhhdCBgdXZfbGlzdGAgaXMgemVyb2VkICpiZWZvcmUqIGNhbGxpbmcgYHV2X2ZpbmRfc2VjcmV0YCB3aXRoIGBtZW1zZXQodXZfbGlzdCwgMCwgc2l6ZW9mKCp1dl9saXN0KSk7YC4gVGhpcyBtZWFucyB0aGF0IGB1dl9saXN0YCBpcyBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgd2UgZXZlbiBnZXQgdG8gdGhhdCBmdW5jdGlvbiFcblxuSG1tLCB0aGF0IGFsbCBzZWVtcyBjb3JyZWN0LiBOb3csIEkgaGF2ZSB0byB3b25kZXIgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3IgYHV2aW9fZ2V0X2xpc3RgIGluIGBkcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jYC4gVGhhdCdzIHRoZSBuZXh0IHBsYWNlIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQwMTAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTU6MDIuMzQyNzc0NzE0WiIsIlNlcSI6NjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwNyxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMwNzpcXHRzdGF0aWMgaW50IHV2aW9fZ2V0X2xpc3Qodm9pZCAqenBhZ2UsIHN0cnVjdCB1dmlvX2lvY3RsX2NiICp1dl9pb2N0bClcXG4gMzA4OlxcdHtcXG4gMzA5OlxcdFxcdGNvbnN0IHNpemVfdCBkYXRhX29mZiA9IG9mZnNldG9mKHN0cnVjdCB1dl9zZWNyZXRfbGlzdCwgc2VjcmV0cyk7XFxuIDMxMDpcXHRcXHR1OCBfX3VzZXIgKnVzZXJfYnVmID0gKHU4IF9fdXNlciAqKXV2X2lvY3RsLVxcdTAwM2Vhcmd1bWVudF9hZGRyO1xcbiAzMTE6XFx0XFx0c3RydWN0IHV2X3NlY3JldF9saXN0ICpsaXN0ID0genBhZ2U7XFxuIDMxMjpcXHRcXHR1MTYgbnVtX3NlY3JldHNfc3RvcmVkID0gMDtcXG4gMzEzOlxcdFxcdHNpemVfdCB1c2VyX29mZiA9IGRhdGFfb2ZmO1xcbiAzMTQ6XFx0XFx0c2l6ZV90IGNvcHlfbGVuO1xcbiAzMTU6XFx0XFxuIDMxNjpcXHRcXHRkbyB7XFxuIDMxNzpcXHRcXHRcXHR1dl9saXN0X3NlY3JldHMobGlzdCwgbGlzdC1cXHUwMDNlbmV4dF9zZWNyZXRfaWR4LCBcXHUwMDI2dXZfaW9jdGwtXFx1MDAzZXV2X3JjLFxcbiAzMTg6XFx0XFx0XFx0XFx0XFx0XFx1MDAyNnV2X2lvY3RsLVxcdTAwM2V1dl9ycmMpO1xcbiAzMTk6XFx0XFx0XFx0aWYgKHV2X2lvY3RsLVxcdTAwM2V1dl9yYyAhPSBVVkNfUkNfRVhFQ1VURUQgXFx1MDAyNlxcdTAwMjZcXG4gMzIwOlxcdFxcdFxcdCAgICB1dl9pb2N0bC1cXHUwMDNldXZfcmMgIT0gVVZDX1JDX01PUkVfREFUQSlcXG4gMzIxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAzMjI6XFx0XFxuIDMyMzpcXHRcXHRcXHRjb3B5X2xlbiA9IHNpemVvZihsaXN0LVxcdTAwM2VzZWNyZXRzWzBdKSAqIGxpc3QtXFx1MDAzZW51bV9zZWNyX3N0b3JlZDtcXG4gMzI0OlxcdFxcdFxcdGlmIChjb3B5X3RvX3VzZXIodXNlcl9idWYgKyB1c2VyX29mZiwgbGlzdC1cXHUwMDNlc2VjcmV0cywgY29weV9sZW4pKVxcbiAzMjU6XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDMyNjpcXHRcXG4gMzI3OlxcdFxcdFxcdHVzZXJfb2ZmICs9IGNvcHlfbGVuO1xcbiAzMjg6XFx0XFx0XFx0bnVtX3NlY3JldHNfc3RvcmVkICs9IGxpc3QtXFx1MDAzZW51bV9zZWNyX3N0b3JlZDtcXG4gMzI5OlxcdFxcdH0gd2hpbGUgKHV2X2lvY3RsLVxcdTAwM2V1dl9yYyA9PSBVVkNfUkNfTU9SRV9EQVRBIFxcdTAwMjZcXHUwMDI2XFxuIDMzMDpcXHRcXHRcXHQgdXNlcl9vZmYgKyBzaXplb2YoKmxpc3QpIFxcdTAwM2M9IHV2X2lvY3RsLVxcdTAwM2Vhcmd1bWVudF9sZW4pO1xcbiAzMzE6XFx0XFxuIDMzMjpcXHRcXHRsaXN0LVxcdTAwM2VudW1fc2Vjcl9zdG9yZWQgPSBudW1fc2VjcmV0c19zdG9yZWQ7XFxuIDMzMzpcXHRcXHRpZiAoY29weV90b191c2VyKHVzZXJfYnVmLCBsaXN0LCBkYXRhX29mZikpXFxuIDMzNDpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gMzM1OlxcdFxcdHJldHVybiAwO1xcbiAzMzY6XFx0fVxcbiAzMzc6XFx0XFxuIDMzODpcXHQvKipcXG4gMzM5OlxcdCAqIHV2aW9fbGlzdF9zZWNyZXRzKCkgLSBQZXJmb3JtIGEgTGlzdCBTZWNyZXQgVVZDXFxuIDM0MDpcXHQgKlxcbiAzNDE6XFx0ICogQHV2X2lvY3RsOiBpb2N0bCBjb250cm9sIGJsb2NrXFxuIDM0MjpcXHQgKlxcbiAzNDM6XFx0ICogdXZpb19saXN0X3NlY3JldHMoKSBwZXJmb3JtcyB0aGUgTGlzdCBTZWNyZXQgVWx0cmF2aXNvciBDYWxsLiBJdCB2ZXJpZmllc1xcbiAzNDQ6XFx0ICogdGhhdCB0aGUgZ2l2ZW4gdXNlcnNwYWNlIGFyZ3VtZW50IGFkZHJlc3MgaXMgdmFsaWQgYW5kIGl0cyBzaXplIGlzIHNhbmUuXFxuIDM0NTpcXHQgKiBFdmVyeSBvdGhlciBjaGVjayBpcyBtYWRlIGJ5IHRoZSBVbHRyYXZpc29yIChVVikgYW5kIHdvbid0IHJlc3VsdCBpbiBhXFxuIDM0NjpcXHQgKiBuZWdhdGl2ZSByZXR1cm4gdmFsdWUuIEl0IGJ1aWxkcyB0aGUgcmVxdWVzdCwgcGVyZm9ybXMgdGhlIFVWLWNhbGwsIGFuZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODoxNTowMi4zNDI5MTE2NzRaIiwiU2VxIjo2MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA3NTk5ODE3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgdGhlIE1lbW9yeSBBbGxvY2F0aW9uIGFuZCBVc2FnZSBpbiBgdXZpb19nZXRfbGlzdGAqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGB1dmlvX2dldF9saXN0YCBmdW5jdGlvbi4gSSBzZWUgdGhhdCBgenBhZ2VgIGlzIGJlaW5nIHBhc3NlZCBpbiBhcyBhIGBsaXN0YC4gTm93LCBgenBhZ2VgLCBmcm9tIHdoYXQgSSByZWNhbGwgb2YgdGhlIGNvZGViYXNlLCBpcyBhIGNodW5rIG9mIG1lbW9yeSwgYSBwYWdlIHNwZWNpZmljYWxseS4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiBJcyB0aGlzIG1lbW9yeSBndWFyYW50ZWVkIHRvIGJlIGluaXRpYWxpemVkLCBvciBpcyBpdCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkLCBob2xkaW5nIGdhcmJhZ2UgZGF0YT8gVGhpcyBpcyBjcnVjaWFsIGZvciBhdm9pZGluZyB1bmV4cGVjdGVkIGJlaGF2aW9yIGRvd24gdGhlIGxpbmUsIHBvdGVudGlhbGx5IHNlY3VyaXR5IGlzc3Vlcywgb3Igc2ltcGx5IGRhdGEgY29ycnVwdGlvbiBpZiB0aGUgY29kZSByZWxpZXMgb24gYSB6ZXJvZWQgcGFnZS4gSSByZWFsbHkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYHpwYWdlYCBpcyBwcm9wZXJseSBjbGVhcmVkLiBUaGUgYmVzdCB0aGluZyB0byBkbyBpcyB0cmFjayBkb3duIHdoZXJlIGB1dmlvX2dldF9saXN0YCBpcyBjYWxsZWQgZnJvbS4gVGhhdCBjYWxsIHNpdGUgd2lsbCBnaXZlIG1vcmUgY29udGV4dCBvbiBob3cgdGhlIGB6cGFnZWAgaXMgbWFuYWdlZCBhbmQgYWxsb2NhdGVkLCBob3BlZnVsbHkgYW5zd2VyaW5nIHRoaXMgYWxsIGltcG9ydGFudCBxdWVzdGlvbiBvbiBpbml0aWFsIHN0YXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTQ5NSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTU6MDYuNDE4OTEyMTM0WiIsIlNlcSI6NjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTU3MTYxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1dmlvX2dldF9saXN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvczM5MC9jaGFyL3V2ZGV2aWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYz0yNjk9c3RhdGljIGludCB1dmlvX2FkZF9zZWNyZXQoc3RydWN0IHV2aW9faW9jdGxfY2IgKnV2X2lvY3RsKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYy0zMDYtICovXFxuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYzozMDc6c3RhdGljIGludCB1dmlvX2dldF9saXN0KHZvaWQgKnpwYWdlLCBzdHJ1Y3QgdXZpb19pb2N0bF9jYiAqdXZfaW9jdGwpXFxuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYy0zMDgte1xcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYz0zNjU9c3RhdGljIGludCB1dmlvX2xpc3Rfc2VjcmV0cyhzdHJ1Y3QgdXZpb19pb2N0bF9jYiAqdXZfaW9jdGwpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jLTM3Ny1cXG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jOjM3ODpcXHRyYyA9IHV2aW9fZ2V0X2xpc3QoenBhZ2UsIHV2X2lvY3RsKTtcXG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jLTM3OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTU6MDYuNDY0NDkxMzhaIiwiU2VxIjo2NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTEyNzA4MzMwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQ6XG5cbioqRGl2aW5nIGludG8gdGhlIGB1dmlvX2xpc3Rfc2VjcmV0c2AgQ29tbWFuZCoqXG5cbkFscmlnaHQsIGB1dmlvX2xpc3Rfc2VjcmV0c2AuIExldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCByZWFjdGlvbiBpcywgXCJSaWdodCwgSSBrbm93IHRoaXMgb25lLlwiIFRoYXQgY29tbWFuZCBpcyBsaWtlbHkgcGFydCBvZiB0aGUgYHV2aW9gIHV0aWxpdHksIHdoYXRldmVyIHN5c3RlbSBpdCBtaWdodCBiZSBwYXJ0IG9mLiBUaGUgJ2xpc3QnIHBhcnQgaXMgcHJldHR5IHNlbGYtZXhwbGFuYXRvcnkg4oCTIHdlJ3JlIGVudW1lcmF0aW5nIHNvbWV0aGluZy4gQW5kICdzZWNyZXRzJ+KApiB3ZWxsLCB0aGF0IGNvdWxkIG1lYW4gYSByYW5nZSBvZiB0aGluZ3MsIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dC5cblxuTXkgZXhwZXJ0aXNlIGltbWVkaWF0ZWx5IGtpY2tzIGluIHRvIGhlbHAgbWUgY2F0ZWdvcml6ZSBteSB0aGlua2luZzpcblxuKiAgICoqUG90ZW50aWFsIENvbnRleHQ6KiogSSBuZWVkIHRvIGltbWVkaWF0ZWx5IGNvbnNpZGVyIHRoZSBzeXN0ZW0gdGhpcyBpcyBwYXJ0IG9mLiBJcyBpdCBhIGNsb3VkIGVudmlyb25tZW50PyBBIGRldmVsb3BtZW50IGZyYW1ld29yaz8gSXMgaXQgcmVsYXRlZCB0byBjb250YWluZXJpemF0aW9uIG9yIEt1YmVybmV0ZXM/IFVuZGVyc3RhbmRpbmcgdGhlIGVudmlyb25tZW50IGluZm9ybXMgdGhlICp0eXBlKiBvZiBzZWNyZXRzIHdlJ3JlIHRhbGtpbmcgYWJvdXQgKEFQSSBrZXlzLCBwYXNzd29yZHMsIGNlcnRpZmljYXRlcywgZXRjLikgYW5kIHdoZXJlIHRoZXkgYXJlIHN0b3JlZCwgYmVjYXVzZSB0aGUgYHV2aW9gIGZ1bmN0aW9uYWxpdHkgZGljdGF0ZXMgaG93IHdlIGludGVyYWN0IHdpdGggdGhvc2UgaXRlbXMuXG4qICAgKipTZWN1cml0eSBJbXBsaWNhdGlvbnM6KiogTGlzdGluZyBzZWNyZXRzIGlzIGluaGVyZW50bHkgc2Vuc2l0aXZlLiBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgcGVybWlzc2lvbnMgYW5kIGFjY2VzcyBjb250cm9scy4gSSdkIGV4cGVjdCB0aGlzIGNvbW1hbmQgdG8gcmVxdWlyZSBhdXRoZW50aWNhdGlvbiBhbmQgYXV0aG9yaXphdGlvbi4gSXQncyBjcnVjaWFsIHRoaXMgdG9vbCBpcyBjb25maWd1cmVkIHRvIG9ubHkgcmV2ZWFsIHNlY3JldHMgdG8gdGhlIHJpZ2h0IHVzZXJzIGFuZCBwcm9jZXNzZXMuXG4qICAgKipEYXRhIEZvcm1hdCBcdTAwMjYgT3V0cHV0OioqIFdoYXQgd2lsbCB0aGUgb3V0cHV0IGxvb2sgbGlrZT8gV2lsbCBpdCBiZSBhIHNpbXBsZSBsaXN0IG9mIG5hbWVzLCBvciBtb3JlIGRldGFpbGVkIGluZm9ybWF0aW9uIChkZXNjcmlwdGlvbnMsIGFzc29jaWF0ZWQgYXBwbGljYXRpb25zLCB1c2FnZSBkYXRhLCBldGMuKT8gSSdsbCBwcm9iYWJseSBiZSBsb29raW5nIGZvciBmb3JtYXR0aW5nIG9wdGlvbnMgbGlrZSBKU09OLCBZQU1MLCBvciBhIHN0cnVjdHVyZWQgdGFibGUgZm9yIGVhc3kgcGFyc2luZyBhbmQgYXV0b21hdGlvbi4gV2hhdCBmbGFncyBhcmUgc3VwcG9ydGVkIHRvIHRhaWxvciB0aGlzIG91dHB1dD9cbiogICAqKkVycm9yIEhhbmRsaW5nOioqIFdoYXQgaGFwcGVucyBpZiBJIGRvbid0IGhhdmUgdGhlIHByb3BlciBwZXJtaXNzaW9ucz8gT3IgaWYgdGhlcmUncyBhbiBlcnJvciByZXRyaWV2aW5nIHRoZSBzZWNyZXRzPyBHb29kIGxvZ2dpbmcgYW5kIGVycm9yIG1lc3NhZ2VzIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHRvb2wncyBiZWhhdmlvciBhbmQgdHJvdWJsZXNob290aW5nIGFueSBpc3N1ZXMuXG4qICAgKipVc2UgQ2FzZXM6KiogV2hhdCBhcmUgdGhlIHR5cGljYWwgcmVhc29ucyBmb3IgbGlzdGluZyBzZWNyZXRzPyBEZWJ1Z2dpbmcgYW4gYXBwbGljYXRpb24/IEF1ZGl0aW5nIHNlY3VyaXR5IGNvbmZpZ3VyYXRpb25zPyBBdXRvbWF0aW5nIHNlY3JldCByb3RhdGlvbj8gVGhlIHVzZSBjYXNlIHdpbGwgaW5mb3JtIGhvdyBJIGFwcHJvYWNoIHRoaXMgY29tbWFuZC5cbiogICAqKkFzc3VtZWQgS25vd2xlZGdlOioqIEl0J3MgbGlrZWx5IEkgYWxyZWFkeSB1bmRlcnN0YW5kIGhvdyB0byBtYW5hZ2Ugc2VjcmV0cyB3aXRoaW4gdGhpcyBlY29zeXN0ZW0uIElmIGl0J3MgYSBkZWRpY2F0ZWQgc2VjcmV0cyBtYW5hZ2VyLCBJIGxpa2VseSBrbm93IHRoZSBrZXkgY29uY2VwdHMgb2YgdGhlIHRlY2hub2xvZ3kuXG5cblNvLCBvdmVyYWxsLCBteSBtaW5kIGlzIGltbWVkaWF0ZWx5IGZvcm11bGF0aW5nIHF1ZXN0aW9ucyBhbmQgaHlwb3RoZXNlcy4gSSdtIHJlYWR5IHRvIGRpZyBpbnRvIHRoZSBkb2N1bWVudGF0aW9uLCBvciB0cnkgdGhlIGNvbW1hbmQgZGlyZWN0bHkgdG8gc2VlIHdoYXQgaW5mb3JtYXRpb24gaXQgcmV2ZWFscy4gSXQgYWxsIGNvbWVzIGRvd24gdG8gdGhlIGNvbnRleHQgSSBrbm93IGFuZCBob3cgbXVjaCBjb250cm9sIEkgaGF2ZSBvdmVyIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjA1MywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjE1OjExLjU5MTU3NzU3MloiLCJTZXEiOjY2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Nzg1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM2NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM2NTpcXHRzdGF0aWMgaW50IHV2aW9fbGlzdF9zZWNyZXRzKHN0cnVjdCB1dmlvX2lvY3RsX2NiICp1dl9pb2N0bClcXG4gMzY2OlxcdHtcXG4gMzY3OlxcdFxcdHZvaWQgKnpwYWdlO1xcbiAzNjg6XFx0XFx0aW50IHJjO1xcbiAzNjk6XFx0XFxuIDM3MDpcXHRcXHRpZiAodXZfaW9jdGwtXFx1MDAzZWFyZ3VtZW50X2xlbiA9PSAwIHx8XFxuIDM3MTpcXHRcXHQgICAgdXZfaW9jdGwtXFx1MDAzZWFyZ3VtZW50X2xlbiAlIFVWSU9fTElTVF9TRUNSRVRTX0xFTiAhPSAwKVxcbiAzNzI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDM3MzpcXHRcXG4gMzc0OlxcdFxcdHpwYWdlID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7XFxuIDM3NTpcXHRcXHRpZiAoIXpwYWdlKVxcbiAzNzY6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDM3NzpcXHRcXG4gMzc4OlxcdFxcdHJjID0gdXZpb19nZXRfbGlzdCh6cGFnZSwgdXZfaW9jdGwpO1xcbiAzNzk6XFx0XFxuIDM4MDpcXHRcXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpenBhZ2UpO1xcbiAzODE6XFx0XFx0cmV0dXJuIHJjO1xcbiAzODI6XFx0fVxcbiAzODM6XFx0XFxuIDM4NDpcXHQvKipcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTU6MTEuNTkxNjU2NTUyWiIsIlNlcSI6NjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxODMzMzUxMjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBDb2RlIGFuZCBWdWxuZXJhYmlsaXRpZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSBgenBhZ2VgIGlzIGV4cGxpY2l0bHkgemVyb2VkIHdpdGggYGdldF96ZXJvZWRfcGFnZWAuIEdvb2QsIHRoYXQgZWxpbWluYXRlcyBhIHdob2xlIGNsYXNzIG9mIHBvdGVudGlhbCBwcm9ibGVtcyByaWdodCBvZmYgdGhlIGJhdC4gVGhlbiBJIHN0YXJ0ZWQgdG8gdGhpbmssIFwiV2hhdCBhYm91dCBgdXZfbGlzdF9zZWNyZXRzYD8gQ291bGQgaXQgYmUgd3JpdGluZyB1bmluaXRpYWxpemVkIGRhdGEgc29tZXdoZXJlP1wiIEJ1dCwgYHV2X2xpc3Rfc2VjcmV0c2AgaXMgYSBoeXBlcnZpc29yIGNhbGwsIHNvIHRoZSBoeXBlcnZpc29yIGlzIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyBpdCB3cml0ZXMgaW5pdGlhbGl6ZWQgZGF0YS4gRXZlbiBpZiBpdCBkb2Vzbid0LCB0aGF0J3Mgbm90IGEga2VybmVsLXNwYWNlIGJ1Zy5cblxuQnV0LCB3aGVuIEkgZXhhbWluZSBgdXZfbGlzdF9zZWNyZXRzYCBjYWxsZWQgaW4gYHV2aW9fZ2V0X2xpc3RgLCBJIHNlZSB0aGF0IGl0IHVzZXMgYGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4YCBhcyBgc3RhcnRfaWR4YC4gSW4gdGhlIGZpcnN0IGl0ZXJhdGlvbiwgYGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4YCBpcyB6ZXJvLCBiZWNhdXNlIHRoZSBwYWdlIGB6cGFnZWAgaXMgemVyb2VkLCBhbmQgaXQgaXMgemVyby1pbml0aWFsaXplZC4gQWZ0ZXIgdGhlIGNhbGwgdG8gYHV2X2xpc3Rfc2VjcmV0c2AsIGl0IHVwZGF0ZXMgYGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4YCBpZiB0aGVyZSdzIG1vcmUgZGF0YS4gVGhlbiBgY29weV90b191c2VyYCBjb3BpZXMgYGxpc3QtXHUwMDNlc2VjcmV0c2AgdG8gdXNlciBzcGFjZS4gSXQgY29waWVzIGV4YWN0bHkgYGxpc3QtXHUwMDNlbnVtX3NlY3Jfc3RvcmVkYCBpdGVtcy4gVGhlIHplcm9pbmcgb2YgdGhlIHBhZ2UgbWVhbnMgYW55dGhpbmcgKm5vdCogd3JpdHRlbiB3aWxsIGJlIHplcm8uIFNpbmNlIHRoZSBoeXBlcnZpc29yIGlzICpzdXBwb3NlZCogdG8gd3JpdGUgdGhvc2UgZWxlbWVudHMsIGFueSB1bndyaXR0ZW4gZWxlbWVudHMgYXJlIHplcm8uIFNvIEkgYW0gY29uZmlkZW50LCBhdCB0aGlzIHBvaW50LCB0aGF0IHRoZXJlJ3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhayB0byB1c2VyIHNwYWNlIGhlcmUuXG5cbk5vdywgbGV0J3MgcmUtZXhhbWluZSB0aGUgcGF0Y2ggaXRzZWxmLlxuXG5gYGBjXG4gXHR1MTYgaTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGxpc3QtXHUwMDNldG90YWxfbnVtX3NlY3JldHM7IGkrKykge1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbGlzdC1cdTAwM2VudW1fc2Vjcl9zdG9yZWQ7IGkrKykge1xuIFx0XHRpZiAobWVtY21wKHNlY3JldF9pZCwgbGlzdC1cdTAwM2VzZWNyZXRzW2ldLmlkLCBVVl9TRUNSRVRfSURfTEVOKSA9PSAwKSB7XG4gXHRcdFx0KnNlY3JldCA9IGxpc3QtXHUwMDNlc2VjcmV0c1tpXS5oZHI7XG4gXHRcdFx0cmV0dXJuIDA7XG5gYGBcblxuQWgsIHRoaXMgZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIHZ1bG5lcmFiaWxpdHkuIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyB1c2luZyBgbGlzdC1cdTAwM2V0b3RhbF9udW1fc2VjcmV0c2AgdG8gaXRlcmF0ZSB0aHJvdWdoIGBsaXN0LVx1MDAzZXNlY3JldHNgLiBUaGUgYGxpc3QtXHUwMDNlc2VjcmV0c2AgYXJyYXkgaGFzIGEgZml4ZWQgc2l6ZSBvZiA4NSBlbGVtZW50cy4gSWYgYHRvdGFsX251bV9zZWNyZXRzYCBleGNlZWRzIDg1LCB0aGlzIGxvb3Agd291bGQgYmUgcmVhZGluZyBwYXN0IHRoZSBlbmQgb2YgdGhlIGFycmF5LCBhbmQgdGhlcmVmb3JlIHRoZSBlbmQgb2YgdGhlIGBsaXN0YCBzdHJ1Y3R1cmUsIGNhdXNpbmcgYW4gb3V0LW9mLWJvdW5kcyByZWFkLiBUaGlzIGlzIGEgY2xlYXIgY2FzZSBmb3IgS0FTQU4gdG8gY2F0Y2guXG5cblRoZSBzZWNvbmQgcGFydDpcblxuYGBgY1xuLVx0dTE2IHN0YXJ0X2lkeCA9IDA7XG4rXHR1MTYgc3RhcnRfaWR4O1xuIFx0dTE2IGxpc3RfcmM7XG4gXHRpbnQgcmV0O1xuIFxuK1x0bGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHggPSAwO1xuK1xuIFx0ZG8ge1xuK1x0XHRzdGFydF9pZHggPSBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeDtcbiBcdFx0dXZfbGlzdF9zZWNyZXRzKGxpc3QsIHN0YXJ0X2lkeCwgXHUwMDI2bGlzdF9yYywgTlVMTCk7XG4gXHRcdGlmIChsaXN0X3JjICE9IFVWQ19SQ19FWEVDVVRFRCBcdTAwMjZcdTAwMjYgbGlzdF9yYyAhPSBVVkNfUkNfTU9SRV9EQVRBKSB7XG4gXHRcdFx0aWYgKGxpc3RfcmMgPT0gVVZDX1JDX0lOVl9DTUQpXG5AQCAtNzk2LDcgKzc5OSw2IEBAIGludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG4gXHRcdHJldCA9IGZpbmRfc2VjcmV0X2luX3BhZ2Uoc2VjcmV0X2lkLCBsaXN0LCBzZWNyZXQpO1xuIFx0XHRpZiAocmV0ID09IDApXG4gXHRcdFx0cmV0dXJuIHJldDtcbi1cdFx0c3RhcnRfaWR4ID0gbGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHg7XG4gXHR9IHdoaWxlIChsaXN0X3JjID09IFVWQ19SQ19NT1JFX0RBVEEgXHUwMDI2XHUwMDI2IHN0YXJ0X2lkeCBcdTAwM2MgbGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHgpO1xuYGBgXG5cbk9rYXksIHRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhIGxvZ2ljIGJ1Zy4gYHN0YXJ0X2lkeGAgd2FzIGluaXRpYWxpemVkIHRvIDAgYW5kIGB1dl9saXN0X3NlY3JldHNgIHdhcyBjYWxsZWQuIFRoZW4sIGBzdGFydF9pZHhgIHdhcyBhc3NpZ25lZCB0aGUgdmFsdWUgb2YgYGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4YC4gVGhlbiB0aGUgYHdoaWxlYCBsb29wIGNvbmRpdGlvbiBjaGVja2VkIGlmIGBzdGFydF9pZHggXHUwMDNjIGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4YC4gQnV0IHNpbmNlIGBzdGFydF9pZHhgIHdhcyBqdXN0IGFzc2lnbmVkIHRoZSB2YWx1ZSBvZiBgbGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHhgLCB0aGlzIGNvbmRpdGlvbiB3b3VsZCAqYWx3YXlzKiBiZSBmYWxzZSBpbiB0aGUgZmlyc3QgaXRlcmF0aW9uLiBTbyB0aGUgbG9vcCB3b3VsZCB0ZXJtaW5hdGUgYWZ0ZXIgb25seSB0aGUgZmlyc3QgaXRlcmF0aW9uLCBldmVuIGlmIHRoZXJlIHdhcyBtb3JlIGRhdGEgKGBVVkNfUkNfTU9SRV9EQVRBYCkuIFRoZSBmaXggZW5zdXJlcyB0aGUgbG9vcCBjb250aW51ZXMgdG8gaXRlcmF0ZS5cblxuSXMgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgaGVyZT8gTGV0J3MgY2hlY2suIEluIHRoZSBvcmlnaW5hbCBjb2RlLCBgbGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHhgIGlzIHJlYWQgYXQgdGhlIGVuZCBvZlxuXG4iLCJJbnB1dFRva2VucyI6MjY5MzIsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTU6NDMuNDI1MDEwMDQ2WiIsIlNlcSI6NjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjMyMjI3NjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInV2X2ZpbmRfc2VjcmV0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaD02MTM9c3RhdGljIGlubGluZSBpbnQgdXZfcmVtb3ZlX3NoYXJlZCh1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC02MTctXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6NjE4OmludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNjE5LVxcdFxcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqbGlzdCxcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYz03NTc9c3RhdGljIGludCBmaW5kX3NlY3JldF9pbl9wYWdlKGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03NzItLyoqXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjc3MzogKiB1dl9maW5kX3NlY3JldCgpIC0gc2VhcmNoIHNlY3JldCBtZXRhZGF0YSBmb3IgYSBnaXZlbiBzZWNyZXQgaWQuXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc3NC0gKiBAc2VjcmV0X2lkOiBzZWFyY2ggcGF0dGVybi5cXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03NzktICovXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjc4MDppbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03ODEtXFx0XFx0ICAgc3RydWN0IHV2X3NlY3JldF9saXN0ICpsaXN0LFxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTgwNS19XFxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjgwNjpFWFBPUlRfU1lNQk9MX0dQTCh1dl9maW5kX3NlY3JldCk7XFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTgwNy1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTIwPU1PRFVMRV9ERVNDUklQVElPTihcXFwiczM5MCBwcm90ZWN0ZWQga2V5IFVWIGhhbmRsZXJcXFwiKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTIyLS8qXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6MjM6ICogT25lIHByZS1hbGxvY2F0ZWQgdXZfc2VjcmV0X2xpc3QgZm9yIHVzZSB3aXRoIHV2X2ZpbmRfc2VjcmV0KClcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yNC0gKi9cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTkzPXN0YXRpYyBpbnQgZ2V0X3NlY3JldF9tZXRhZGF0YShjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy05OS1cXHRtZW1zZXQodXZfbGlzdCwgMCwgc2l6ZW9mKCp1dl9saXN0KSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6MTAwOlxcdHJjID0gdXZfZmluZF9zZWNyZXQoc2VjcmV0X2lkLCB1dl9saXN0LCBzZWNyZXQpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTEwMS1cXHRtdXRleF91bmxvY2soXFx1MDAyNnV2X2xpc3RfbXV0ZXgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODoxNTo0NS4wNTcyNDQzNjhaIiwiU2VxIjo2OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEwMTM3ODI5NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgU2VjdXJpdHkgRml4KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCB0aGlzIHBhdGNoIGlzIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIHZ1bG5lcmFiaWxpdHkgbGllcyB3aXRoaW4gYGRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jYCwgc3BlY2lmaWNhbGx5IGluIGhvdyB0aGUgYHV2X2ZpbmRfc2VjcmV0YCBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgYHV2X2xpc3RgIHN0cnVjdHVyZS4gSSdtIG5vdGluZyB0aGF0IHRoZSBjb2RlIGlzIG9ubHkgY2FsbGVkIGZyb20gYGdldF9zZWNyZXRfbWV0YWRhdGFgLiBNb3N0IGltcG9ydGFudGx5LCB0aGUgYHV2X2xpc3RgIGlzIGV4cGxpY2l0bHkgemVyb2VkIG91dCBiZWZvcmUgYmVpbmcgdXNlZC4gVGhhdCdzIGtleS5cblxuU28sIHRoZSBmaXJzdCBjaGFuZ2UgaW4gdGhlIGBmaW5kX3NlY3JldF9pbl9wYWdlYCBmdW5jdGlvbiBhZGRyZXNzZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkLiBUaGUgb3JpZ2luYWwgbG9vcCBpbmNvcnJlY3RseSB1c2VkIGBsaXN0LVx1MDAzZXRvdGFsX251bV9zZWNyZXRzYCB0byBpdGVyYXRlLCB3aGljaCBjb3VsZCBleGNlZWQgdGhlIGJvdW5kcyBvZiB0aGUgYGxpc3QtXHUwMDNlc2VjcmV0c2AgYXJyYXkgKGxpbWl0ZWQgdG8gODUgZWxlbWVudHMpLiBUaGlzIG1lYW5zIGEgS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNhbml0aXplcikgdHJpZ2dlcmVkLCB3aGljaCBpcyBncmVhdCBiZWNhdXNlIGl0IG1lYW5zIHRoYXQgcHJvYmxlbSBpcyBlYXN5IHRvIGRldGVjdC5cblxuVGhlIHNlY29uZCBjaGFuZ2UgaW4gYHV2X2ZpbmRfc2VjcmV0YCBmaXhlcyBhIGxvZ2ljIGJ1Zy4gVGhlIGluaXRpYWwgbG9vcCBjb25kaXRpb24gdXNlZCBgc3RhcnRfaWR4IFx1MDAzYyBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeGAuIEhvd2V2ZXIsIGBzdGFydF9pZHhgIHdhcyBhc3NpZ25lZCBgbGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHhgIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgY2hlY2ssIHNvIHRoZSBsb29wIHdhcyBuZXZlciBleGVjdXRlZC4gVGhlIGNvcnJlY3RlZCB2ZXJzaW9uIGNvcnJlY3RseSBpbml0aWFsaXplcyBhbmQgdXBkYXRlcyBgc3RhcnRfaWR4YCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsb29wLlxuXG5CZWNhdXNlIHRoZSBzdHJ1Y3R1cmUgcGFzc2VkIHRvIGB1dl9maW5kX3NlY3JldGAgaXMgaW5pdGlhbGl6ZWQgdG8gemVybyBiZWZvcmUgdXNlLCB0aGVyZSBhcmVuJ3QgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBhbmQgc28gYE5lZWRzS01TQU5gIGlzIGZhbHNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDI5NywiT3V0cHV0VG9rZW5zIjozMjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTU6NTYuMDcxMDI5NzQ0WiIsIlNlcSI6NzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgdHdvIGlzc3VlczpcXG4xLiBBbiBvdXQtb2YtYm91bmRzIHJlYWQgaW4gYGZpbmRfc2VjcmV0X2luX3BhZ2UoKWAuIFRoZSBsb29wIHByZXZpb3VzbHkgdXNlZCBgbGlzdC1cXHUwMDNldG90YWxfbnVtX3NlY3JldHNgIGluc3RlYWQgb2YgYGxpc3QtXFx1MDAzZW51bV9zZWNyX3N0b3JlZGAuIFNpbmNlIGBsaXN0LVxcdTAwM2VzZWNyZXRzYCBpcyBhIGZpeGVkLXNpemUgYXJyYXkgb2YgODUgZWxlbWVudHMsIGlmIGB0b3RhbF9udW1fc2VjcmV0c2AgZXhjZWVkcyA4NSwgdGhlIGxvb3AgcmVhZHMgcGFzdCB0aGUgZW5kIG9mIHRoZSBgbGlzdGAgc3RydWN0dXJlICh3aGljaCBpcyBleGFjdGx5IG9uZSBwYWdlIGluIHNpemUpLiBUaGlzIGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHJlYWQgdGhhdCBpcyByZWxpYWJseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTi5cXG4yLiBBIGxvZ2ljIGJ1ZyBpbiBgdXZfZmluZF9zZWNyZXQoKWAgd2hlcmUgdGhlIGxvb3AgY29uZGl0aW9uIGBzdGFydF9pZHggXFx1MDAzYyBsaXN0LVxcdTAwM2VuZXh0X3NlY3JldF9pZHhgIHdhcyBhbHdheXMgZmFsc2UgYmVjYXVzZSBgc3RhcnRfaWR4YCB3YXMgYXNzaWduZWQgYGxpc3QtXFx1MDAzZW5leHRfc2VjcmV0X2lkeGAgaW1tZWRpYXRlbHkgcHJpb3IgdG8gdGhlIGNoZWNrLiBUaGUgZml4IGNvcnJlY3RseSBpbml0aWFsaXplcyBhbmQgdXBkYXRlcyBgc3RhcnRfaWR4YCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsb29wLlxcblxcblRoZSBgbGlzdGAgc3RydWN0dXJlIHBhc3NlZCB0byBgdXZfZmluZF9zZWNyZXQoKWAgaXMgZnVsbHkgemVyb2VkIGJlZm9yZSB1c2UgKHZpYSBgbWVtc2V0KHV2X2xpc3QsIDAsIHNpemVvZigqdXZfbGlzdCkpYCBpbiBgZ2V0X3NlY3JldF9tZXRhZGF0YSgpYCkuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcywgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZSBpbnRyb2R1Y2VkIG9yIGZpeGVkIGJ5IHRoaXMgcGF0Y2guIFN0YW5kYXJkIEtBU0FOIGlzIHBlcmZlY3RseSBzdWl0ZWQgdG8gY2F0Y2ggdGhlIG91dC1vZi1ib3VuZHMgcmVhZCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyB0d28gaXNzdWVzOlxcbjEuIEFuIG91dC1vZi1ib3VuZHMgcmVhZCBpbiBgZmluZF9zZWNyZXRfaW5fcGFnZSgpYC4gVGhlIGxvb3AgcHJldmlvdXNseSB1c2VkIGBsaXN0LVxcdTAwM2V0b3RhbF9udW1fc2VjcmV0c2AgaW5zdGVhZCBvZiBgbGlzdC1cXHUwMDNlbnVtX3NlY3Jfc3RvcmVkYC4gU2luY2UgYGxpc3QtXFx1MDAzZXNlY3JldHNgIGlzIGEgZml4ZWQtc2l6ZSBhcnJheSBvZiA4NSBlbGVtZW50cywgaWYgYHRvdGFsX251bV9zZWNyZXRzYCBleGNlZWRzIDg1LCB0aGUgbG9vcCByZWFkcyBwYXN0IHRoZSBlbmQgb2YgdGhlIGBsaXN0YCBzdHJ1Y3R1cmUgKHdoaWNoIGlzIGV4YWN0bHkgb25lIHBhZ2UgaW4gc2l6ZSkuIFRoaXMgaXMgYSBjbGFzc2ljIG91dC1vZi1ib3VuZHMgcmVhZCB0aGF0IGlzIHJlbGlhYmx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOLlxcbjIuIEEgbG9naWMgYnVnIGluIGB1dl9maW5kX3NlY3JldCgpYCB3aGVyZSB0aGUgbG9vcCBjb25kaXRpb24gYHN0YXJ0X2lkeCBcXHUwMDNjIGxpc3QtXFx1MDAzZW5leHRfc2VjcmV0X2lkeGAgd2FzIGFsd2F5cyBmYWxzZSBiZWNhdXNlIGBzdGFydF9pZHhgIHdhcyBhc3NpZ25lZCBgbGlzdC1cXHUwMDNlbmV4dF9zZWNyZXRfaWR4YCBpbW1lZGlhdGVseSBwcmlvciB0byB0aGUgY2hlY2suIFRoZSBmaXggY29ycmVjdGx5IGluaXRpYWxpemVzIGFuZCB1cGRhdGVzIGBzdGFydF9pZHhgIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxvb3AuXFxuXFxuVGhlIGBsaXN0YCBzdHJ1Y3R1cmUgcGFzc2VkIHRvIGB1dl9maW5kX3NlY3JldCgpYCBpcyBmdWxseSB6ZXJvZWQgYmVmb3JlIHVzZSAodmlhIGBtZW1zZXQodXZfbGlzdCwgMCwgc2l6ZW9mKCp1dl9saXN0KSlgIGluIGBnZXRfc2VjcmV0X21ldGFkYXRhKClgKS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlIGludHJvZHVjZWQgb3IgZml4ZWQgYnkgdGhpcyBwYXRjaC4gU3RhbmRhcmQgS0FTQU4gaXMgcGVyZmVjdGx5IHN1aXRlZCB0byBjYXRjaCB0aGUgb3V0LW9mLWJvdW5kcyByZWFkLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvbrmk[1] Phase: Succeeded StartedAt: 2026-08-12 18:16:07 +0000 UTC FinishedAt: 2026-08-12 18:16:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbrmk[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-12 18:16:07 +0000 UTC FinishedAt: 2026-08-12 18:16:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbrmk[2] Phase: Succeeded StartedAt: 2026-08-12 18:16:07 +0000 UTC FinishedAt: 2026-08-12 18:59:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbrmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret","pkey_handler_verify_key","pkey_handler_key_to_protkey"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"e85da8b1-fa9e-4bfa-99ff-54384e1568b8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-12 18:16:07 +0000 UTC FinishedAt: 2026-08-12 18:59:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret","pkey_handler_verify_key","pkey_handler_key_to_protkey"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"e85da8b1-fa9e-4bfa-99ff-54384e1568b8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowvbrmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret","pkey_handler_verify_key","pkey_handler_key_to_protkey"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"e85da8b1-fa9e-4bfa-99ff-54384e1568b8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-12 18:16:07 +0000 UTC FinishedAt: 2026-08-12 18:16:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbrmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret","pkey_handler_verify_key","pkey_handler_key_to_protkey"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"e85da8b1-fa9e-4bfa-99ff-54384e1568b8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-12 18:16:07 +0000 UTC FinishedAt: 2026-08-12 18:16:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowvbrmk/series-workflowvbrmk-convert-artifact-985540985/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvbrmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret","pkey_handler_verify_key","pkey_handler_key_to_protkey"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"e85da8b1-fa9e-4bfa-99ff-54384e1568b8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-12 18:16:17 +0000 UTC FinishedAt: 2026-08-12 18:32:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbrmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret","pkey_handler_verify_key","pkey_handler_key_to_protkey"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"e85da8b1-fa9e-4bfa-99ff-54384e1568b8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-12 18:16:17 +0000 UTC FinishedAt: 2026-08-12 18:32:34 +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:*161b86d0-9666-4022-a2a7-549865a0046e,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-workflowvbrmk/series-workflowvbrmk-convert-artifact-985540985/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": "c211521a-592b-4ea4-b4b3-a25b50a67ef7", "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-workflowvbrmk/series-workflowvbrmk-build-action-3637953175/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvbrmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret","pkey_handler_verify_key","pkey_handler_key_to_protkey"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"e85da8b1-fa9e-4bfa-99ff-54384e1568b8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-12 18:16:17 +0000 UTC FinishedAt: 2026-08-12 18:32:24 +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:*161b86d0-9666-4022-a2a7-549865a0046e,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-workflowvbrmk/series-workflowvbrmk-convert-artifact-985540985/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": "c211521a-592b-4ea4-b4b3-a25b50a67ef7", "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-workflowvbrmk/series-workflowvbrmk-build-action-3637953175/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvbrmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret","pkey_handler_verify_key","pkey_handler_key_to_protkey"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"e85da8b1-fa9e-4bfa-99ff-54384e1568b8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-12 18:32:34 +0000 UTC FinishedAt: 2026-08-12 18:32:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbrmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret","pkey_handler_verify_key","pkey_handler_key_to_protkey"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"e85da8b1-fa9e-4bfa-99ff-54384e1568b8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-12 18:32:34 +0000 UTC FinishedAt: 2026-08-12 18:32:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbrmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret","pkey_handler_verify_key","pkey_handler_key_to_protkey"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"e85da8b1-fa9e-4bfa-99ff-54384e1568b8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-12 18:32:34 +0000 UTC FinishedAt: 2026-08-12 18:32:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbrmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret","pkey_handler_verify_key","pkey_handler_key_to_protkey"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"e85da8b1-fa9e-4bfa-99ff-54384e1568b8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-12 18:32:34 +0000 UTC FinishedAt: 2026-08-12 18:32:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"e85da8b1-fa9e-4bfa-99ff-54384e1568b8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowvbrmk/series-workflowvbrmk-convert-artifact-3088359500/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvbrmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret","pkey_handler_verify_key","pkey_handler_key_to_protkey"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"e85da8b1-fa9e-4bfa-99ff-54384e1568b8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-12 18:32:45 +0000 UTC FinishedAt: 2026-08-12 18:34:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbrmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret","pkey_handler_verify_key","pkey_handler_key_to_protkey"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"e85da8b1-fa9e-4bfa-99ff-54384e1568b8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-12 18:32:45 +0000 UTC FinishedAt: 2026-08-12 18:34:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c211521a-592b-4ea4-b4b3-a25b50a67ef7,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-workflowvbrmk/series-workflowvbrmk-build-action-3637953175/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-workflowvbrmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret","pkey_handler_verify_key","pkey_handler_key_to_protkey"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"e85da8b1-fa9e-4bfa-99ff-54384e1568b8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-12 18:34:52 +0000 UTC FinishedAt: 2026-08-12 18:34:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbrmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret","pkey_handler_verify_key","pkey_handler_key_to_protkey"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"e85da8b1-fa9e-4bfa-99ff-54384e1568b8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-12 18:34:52 +0000 UTC FinishedAt: 2026-08-12 18:34:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbrmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret","pkey_handler_verify_key","pkey_handler_key_to_protkey"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"e85da8b1-fa9e-4bfa-99ff-54384e1568b8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-12 18:34:52 +0000 UTC FinishedAt: 2026-08-12 18:54:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbrmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret","pkey_handler_verify_key","pkey_handler_key_to_protkey"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"e85da8b1-fa9e-4bfa-99ff-54384e1568b8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-12 18:34:52 +0000 UTC FinishedAt: 2026-08-12 18:54:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*161b86d0-9666-4022-a2a7-549865a0046e,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-workflowvbrmk/series-workflowvbrmk-convert-artifact-3088359500/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": "f12f1bdd-5a27-46ce-a0ab-c1d435fa03f0", "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-workflowvbrmk/series-workflowvbrmk-build-action-2590961256/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvbrmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret","pkey_handler_verify_key","pkey_handler_key_to_protkey"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"e85da8b1-fa9e-4bfa-99ff-54384e1568b8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-12 18:34:52 +0000 UTC FinishedAt: 2026-08-12 18:54:35 +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:*161b86d0-9666-4022-a2a7-549865a0046e,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-workflowvbrmk/series-workflowvbrmk-convert-artifact-3088359500/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": "f12f1bdd-5a27-46ce-a0ab-c1d435fa03f0", "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-workflowvbrmk/series-workflowvbrmk-build-action-2590961256/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvbrmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret","pkey_handler_verify_key","pkey_handler_key_to_protkey"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"e85da8b1-fa9e-4bfa-99ff-54384e1568b8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-12 18:54:58 +0000 UTC FinishedAt: 2026-08-12 18:54:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbrmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret","pkey_handler_verify_key","pkey_handler_key_to_protkey"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"e85da8b1-fa9e-4bfa-99ff-54384e1568b8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-12 18:54:58 +0000 UTC FinishedAt: 2026-08-12 18:54:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbrmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret","pkey_handler_verify_key","pkey_handler_key_to_protkey"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"e85da8b1-fa9e-4bfa-99ff-54384e1568b8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-12 18:54:58 +0000 UTC FinishedAt: 2026-08-12 18:57:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbrmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret","pkey_handler_verify_key","pkey_handler_key_to_protkey"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"e85da8b1-fa9e-4bfa-99ff-54384e1568b8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-12 18:54:58 +0000 UTC FinishedAt: 2026-08-12 18:56:54 +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:*f12f1bdd-5a27-46ce-a0ab-c1d435fa03f0,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-workflowvbrmk/series-workflowvbrmk-build-action-2590961256/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-workflowvbrmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret","pkey_handler_verify_key","pkey_handler_key_to_protkey"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"e85da8b1-fa9e-4bfa-99ff-54384e1568b8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-12 18:57:04 +0000 UTC FinishedAt: 2026-08-12 18:59:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbrmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret","pkey_handler_verify_key","pkey_handler_key_to_protkey"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"e85da8b1-fa9e-4bfa-99ff-54384e1568b8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-12 18:57:04 +0000 UTC FinishedAt: 2026-08-12 18:59:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret","pkey_handler_verify_key","pkey_handler_key_to_protkey"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*c211521a-592b-4ea4-b4b3-a25b50a67ef7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f12f1bdd-5a27-46ce-a0ab-c1d435fa03f0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvbrmk/series-workflowvbrmk-build-action-3637953175/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvbrmk/series-workflowvbrmk-build-action-2590961256/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowvbrmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret","pkey_handler_verify_key","pkey_handler_key_to_protkey"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"e85da8b1-fa9e-4bfa-99ff-54384e1568b8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-12 18:57:04 +0000 UTC FinishedAt: 2026-08-12 18:57:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbrmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret","pkey_handler_verify_key","pkey_handler_key_to_protkey"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"e85da8b1-fa9e-4bfa-99ff-54384e1568b8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-12 18:57:04 +0000 UTC FinishedAt: 2026-08-12 18:57:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret","pkey_handler_verify_key","pkey_handler_key_to_protkey"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvbrmk/series-workflowvbrmk-convert-artifact-22661045/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvbrmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret","pkey_handler_verify_key","pkey_handler_key_to_protkey"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"e85da8b1-fa9e-4bfa-99ff-54384e1568b8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-12 18:57:04 +0000 UTC FinishedAt: 2026-08-12 18:57:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbrmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret","pkey_handler_verify_key","pkey_handler_key_to_protkey"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"e85da8b1-fa9e-4bfa-99ff-54384e1568b8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-12 18:57:04 +0000 UTC FinishedAt: 2026-08-12 18:57:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbrmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret","pkey_handler_verify_key","pkey_handler_key_to_protkey"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"e85da8b1-fa9e-4bfa-99ff-54384e1568b8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-12 18:57:04 +0000 UTC FinishedAt: 2026-08-12 18:57:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbrmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret","pkey_handler_verify_key","pkey_handler_key_to_protkey"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"e85da8b1-fa9e-4bfa-99ff-54384e1568b8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-12 18:57:14 +0000 UTC FinishedAt: 2026-08-12 18:59:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvbrmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret","pkey_handler_verify_key","pkey_handler_key_to_protkey"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY","PKEY_UV","S390_UV_UAPI"],"series_id":"e85da8b1-fa9e-4bfa-99ff-54384e1568b8","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-12 18:57:14 +0000 UTC FinishedAt: 2026-08-12 18:59:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c211521a-592b-4ea4-b4b3-a25b50a67ef7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f12f1bdd-5a27-46ce-a0ab-c1d435fa03f0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvbrmk/series-workflowvbrmk-build-action-3637953175/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvbrmk/series-workflowvbrmk-build-action-2590961256/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvbrmk/series-workflowvbrmk-convert-artifact-22661045/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}