Name: series-workflow6vsf8 Phase: Succeeded StartedAt: 2026-09-08 17:35:27 +0000 UTC FinishedAt: 2026-09-08 21:41:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6vsf8[0] Phase: Succeeded StartedAt: 2026-09-08 17:35:27 +0000 UTC FinishedAt: 2026-09-08 17:58:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6vsf8[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 17:35:27 +0000 UTC FinishedAt: 2026-09-08 17:58:54 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e0554c6276da957b6e72849520c70a97404cd1ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETDEVSIM", "XFRM_OFFLOAD", "INET_ESP_OFFLOAD", "DEBUG_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e0554c6276da957b6e72849520c70a97404cd1ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETDEVSIM", "XFRM_OFFLOAD", "INET_ESP_OFFLOAD", "DEBUG_FS" ], "series_id": "8f5cb4b7-30a7-4856-b6ec-7aa7cde1fd79" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nsim_dbg_netdev_ops_read", "nsim_ipsec_parse_proto_keys", "nsim_ipsec_add_sa" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVERFVlNJTSYjMzQ7LAogICAgJiMzNDtYRlJNX09GRkxPQUQmIzM0OywKICAgICYjMzQ7SU5FVF9FU1BfT0ZGTE9BRCYjMzQ7LAogICAgJiMzNDtERUJVR19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25zaW1fZGJnX25ldGRldl9vcHNfcmVhZCYjMzQ7LAogICAgJiMzNDtuc2ltX2lwc2VjX3BhcnNlX3Byb3RvX2tleXMmIzM0OywKICAgICYjMzQ7bnNpbV9pcHNlY19hZGRfc2EmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBlbmRpYW5uZXNzIGhhbmRsaW5nIG9mIElQc2VjIGtleXMgYW5kIHNhbHQgdmFsdWVzIGluIG5ldGRldnNpbSBieSBjaGFuZ2luZyB0aGUgdHlwZSBhbm5vdGF0aW9ucyBmcm9tIHUzMiB0byBfX2JlMzIgYW5kIGNvbnZlcnRpbmcgdGhlbSB3aXRoIGJlMzJfdG9fY3B1KCkgd2hlbiBmb3JtYXR0aW5nIGRlYnVnZnMgb3V0cHV0LiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3QgcGFkZGluZyBjaGFuZ2VzLCBjb3BpZXMgb2YgcmF3IGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZSwgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGFyZSBpbnRyb2R1Y2VkLiBBbGwgYnVmZmVycyBhbmQgc3RydWN0dXJlcyBpbiBuZXRkZXZzaW0gSVBzZWMgY29kZSByZW1haW4gcHJvcGVybHkgaW5pdGlhbGl6ZWQgdmlhIG1lbXNldC9remFsbG9jLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29ycmVjdHMgZW5kaWFubmVzcyBoYW5kbGluZyBvZiBJUHNlYyBrZXlzIGFuZCBzYWx0IGluIHRoZSBuZXRkZXZzaW0gc2ltdWxhdGVkIGRldmljZSBkcml2ZXIsIG1vZGlmeWluZyBuc2ltX3NhIGZpZWxkIHR5cGVzIHRvIF9fYmUzMiwgYWRqdXN0aW5nIGtleS9zYWx0IHBhcnNpbmcgaW4gbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzLCBhbmQgYnl0ZS1zd2FwcGluZyB2YWx1ZXMgZm9yIGRlYnVnZnMgb3V0cHV0IGluIG5zaW1fZGJnX25ldGRldl9vcHNfcmVhZC4gTmV0ZGV2c2ltIGlzIGEgc29mdHdhcmUtc2ltdWxhdGVkIGRldmljZSBkcml2ZXIgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbmV0bGluayAoWEZSTSBzdGF0ZSBvcGVyYXRpb25zKSBhbmQgZGVidWdmcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzo1NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDRjNTM1YTFlODhkMWRhYzFhNTRjYTU3NzcyMGRmYTI4M2JhM2UxMjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDE3OjU3OjIyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmNcbmluZGV4IDM2YTFiZTQ5MjNkNjEuLjU3MjI4MzdiY2RhMzYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmNcbkBAIC01MCwxMSAmIzQzOzUwLDExIEBAIHN0YXRpYyBzc2l6ZV90IG5zaW1fZGJnX25ldGRldl9vcHNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCxcbiBcdFx0cCAmIzQzOz0gc2NucHJpbnRmKHAsIGJ1ZnNpemUgLSAocCAtIGJ1ZiksXG4gXHRcdFx0ICAgICAgIFwmIzM0O3NhWyVpXSAgICBzcGk9MHglMDh4IHByb3RvPTB4JXggc2FsdD0weCUwOHggY3J5cHQ9JWRcXG5cJiMzNDssXG4gXHRcdFx0ICAgICAgIGksIGJlMzJfdG9fY3B1KHNhcC1cdTAwM2V4cy1cdTAwM2VpZC5zcGkpLFxuLVx0XHRcdCAgICAgICBzYXAtXHUwMDNleHMtXHUwMDNlaWQucHJvdG8sIHNhcC1cdTAwM2VzYWx0LCBzYXAtXHUwMDNlY3J5cHQpO1xuJiM0MztcdFx0XHQgICAgICAgc2FwLVx1MDAzZXhzLVx1MDAzZWlkLnByb3RvLCBiZTMyX3RvX2NwdShzYXAtXHUwMDNlc2FsdCksIHNhcC1cdTAwM2VjcnlwdCk7XG4gXHRcdHAgJiM0Mzs9IHNjbnByaW50ZihwLCBidWZzaXplIC0gKHAgLSBidWYpLFxuIFx0XHRcdCAgICAgICBcJiMzNDtzYVslaV0gICAga2V5PTB4JTA4eCAlMDh4ICUwOHggJTA4eFxcblwmIzM0Oyxcbi1cdFx0XHQgICAgICAgaSwgc2FwLVx1MDAzZWtleVswXSwgc2FwLVx1MDAzZWtleVsxXSxcbi1cdFx0XHQgICAgICAgc2FwLVx1MDAzZWtleVsyXSwgc2FwLVx1MDAzZWtleVszXSk7XG4mIzQzO1x0XHRcdCAgICAgICBpLCBiZTMyX3RvX2NwdShzYXAtXHUwMDNla2V5WzBdKSwgYmUzMl90b19jcHUoc2FwLVx1MDAzZWtleVsxXSksXG4mIzQzO1x0XHRcdCAgICAgICBiZTMyX3RvX2NwdShzYXAtXHUwMDNla2V5WzJdKSwgYmUzMl90b19jcHUoc2FwLVx1MDAzZWtleVszXSkpO1xuIFx0fVxuIFxuIFx0bGVuID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmZmVyLCBjb3VudCwgcHBvcywgYnVmLCBwIC0gYnVmKTtcbkBAIC04Nyw3ICYjNDM7ODcsNyBAQCBzdGF0aWMgaW50IG5zaW1faXBzZWNfZmluZF9lbXB0eV9pZHgoc3RydWN0IG5zaW1faXBzZWMgKmlwc2VjKVxuIFxuIHN0YXRpYyBpbnQgbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IHhmcm1fc3RhdGUgKnhzLFxuLVx0XHRcdFx0ICAgICAgIHUzMiAqbXlrZXksIHUzMiAqbXlzYWx0KVxuJiM0MztcdFx0XHRcdCAgICAgICBfX2JlMzIgKm15a2V5LCBfX2JlMzIgKm15c2FsdClcbiB7XG4gXHRjb25zdCBjaGFyIGFlc19nY21fbmFtZVtdID0gXCYjMzQ7cmZjNDEwNihnY20oYWVzKSlcJiMzNDs7XG4gXHR1bnNpZ25lZCBjaGFyICprZXlfZGF0YTtcbkBAIC0xMTcsNyAmIzQzOzExNyw3IEBAIHN0YXRpYyBpbnQgbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXG4gXHQvKiAxNjAgYWNjb3VudHMgZm9yIDE2IGJ5dGUga2V5IGFuZCA0IGJ5dGUgc2FsdCAqL1xuIFx0aWYgKGtleV9sZW4gXHUwMDNlIE5TSU1fSVBTRUNfQVVUSF9CSVRTKSB7XG4tXHRcdCpteXNhbHQgPSAoKHUzMiAqKWtleV9kYXRhKVs0XTtcbiYjNDM7XHRcdCpteXNhbHQgPSAoKF9fYmUzMiAqKWtleV9kYXRhKVs0XTtcbiBcdH0gZWxzZSBpZiAoa2V5X2xlbiA9PSBOU0lNX0lQU0VDX0FVVEhfQklUUykge1xuIFx0XHQqbXlzYWx0ID0gMDtcbiBcdH0gZWxzZSB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oXG5pbmRleCA1NWFlYzQxMjM3YjliLi5hODJhNjg1Mzg0ZTZkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmhcbkBAIC00Miw4ICYjNDM7NDIsOCBAQFxuIHN0cnVjdCBuc2ltX3NhIHtcbiBcdHN0cnVjdCB4ZnJtX3N0YXRlICp4cztcbiBcdF9fYmUzMiBpcGFkZHJbNF07XG4tXHR1MzIga2V5WzRdO1xuLVx0dTMyIHNhbHQ7XG4mIzQzO1x0X19iZTMyIGtleVs0XTtcbiYjNDM7XHRfX2JlMzIgc2FsdDtcbiBcdGJvb2wgdXNlZDtcbiBcdGJvb2wgY3J5cHQ7XG4gXHRib29sIHJ4O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnNoXG5pbmRleCBhY2UzYTk5MDIzZWQwLi40ODQzZDQ3NDUzOGY0IDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5zaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5zaFxuQEAgLTkzMiwxMSAmIzQzOzkzMiwxMSBAQCBrY2lfdGVzdF9pcHNlY19vZmZsb2FkKClcbiBcdHJ1bl9jbWQgZGlmZiAkc3lzZnNmIC0gXHUwMDNjXHUwMDNjIEVPRlxuIFNBIGNvdW50PTIgdHg9M1xuIHNhWzBdIHR4IGlwYWRkcj0kZHN0aXBcbi1zYVswXSAgICBzcGk9MHgwMDAwMDAwOSBwcm90bz0weDMyIHNhbHQ9MHg2MTYyNjM2NCBjcnlwdD0xXG4tc2FbMF0gICAga2V5PTB4MzQzMzMyMzEgMzgzNzM2MzUgMzIzMTMwMzkgMzYzNTM0MzNcbiYjNDM7c2FbMF0gICAgc3BpPTB4MDAwMDAwMDkgcHJvdG89MHgzMiBzYWx0PTB4NjQ2MzYyNjEgY3J5cHQ9MVxuJiM0MztzYVswXSAgICBrZXk9MHgzMTMyMzMzNCAzNTM2MzczOCAzOTMwMzEzMiAzMzM0MzUzNlxuIHNhWzFdIHJ4IGlwYWRkcj0kc3JjaXBcbi1zYVsxXSAgICBzcGk9MHgwMDAwMDAwOSBwcm90bz0weDMyIHNhbHQ9MHg2MTYyNjM2NCBjcnlwdD0xXG4tc2FbMV0gICAga2V5PTB4MzQzMzMyMzEgMzgzNzM2MzUgMzIzMTMwMzkgMzYzNTM0MzNcbiYjNDM7c2FbMV0gICAgc3BpPTB4MDAwMDAwMDkgcHJvdG89MHgzMiBzYWx0PTB4NjQ2MzYyNjEgY3J5cHQ9MVxuJiM0MztzYVsxXSAgICBrZXk9MHgzMTMyMzMzNCAzNTM2MzczOCAzOTMwMzEzMiAzMzM0MzUzNlxuIEVPRlxuIFx0aWYgWyAkPyAtbmUgMCBdIDsgdGhlblxuIFx0XHRlbmRfdGVzdCBcJiMzNDtGQUlMOiBpcHNlY19vZmZsb2FkIGluY29ycmVjdCBkcml2ZXIgZGF0YVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjU3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVERFVlNJTSYjMzQ7LAogICAgJiMzNDtYRlJNX09GRkxPQUQmIzM0OywKICAgICYjMzQ7SU5FVF9FU1BfT0ZGTE9BRCYjMzQ7LAogICAgJiMzNDtERUJVR19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25zaW1fZGJnX25ldGRldl9vcHNfcmVhZCYjMzQ7LAogICAgJiMzNDtuc2ltX2lwc2VjX3BhcnNlX3Byb3RvX2tleXMmIzM0OywKICAgICYjMzQ7bnNpbV9pcHNlY19hZGRfc2EmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29ycmVjdHMgZW5kaWFubmVzcyBoYW5kbGluZyBvZiBJUHNlYyBrZXlzIGFuZCBzYWx0IGluIHRoZSBuZXRkZXZzaW0gc2ltdWxhdGVkIGRldmljZSBkcml2ZXIsIG1vZGlmeWluZyBuc2ltX3NhIGZpZWxkIHR5cGVzIHRvIF9fYmUzMiwgYWRqdXN0aW5nIGtleS9zYWx0IHBhcnNpbmcgaW4gbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzLCBhbmQgYnl0ZS1zd2FwcGluZyB2YWx1ZXMgZm9yIGRlYnVnZnMgb3V0cHV0IGluIG5zaW1fZGJnX25ldGRldl9vcHNfcmVhZC4gTmV0ZGV2c2ltIGlzIGEgc29mdHdhcmUtc2ltdWxhdGVkIGRldmljZSBkcml2ZXIgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbmV0bGluayAoWEZSTSBzdGF0ZSBvcGVyYXRpb25zKSBhbmQgZGVidWdmcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDRjNTM1YTFlODhkMWRhYzFhNTRjYTU3NzcyMGRmYTI4M2JhM2UxMjgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDE3OjU3OjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYwppbmRleCAzNmExYmU0OTIzZDYxLi41NzIyODM3YmNkYTM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYwpAQCAtNTAsMTEgJiM0Mzs1MCwxMSBAQCBzdGF0aWMgc3NpemVfdCBuc2ltX2RiZ19uZXRkZXZfb3BzX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsCiAJCXAgJiM0Mzs9IHNjbnByaW50ZihwLCBidWZzaXplIC0gKHAgLSBidWYpLAogCQkJICAgICAgICYjMzQ7c2FbJWldICAgIHNwaT0weCUwOHggcHJvdG89MHgleCBzYWx0PTB4JTA4eCBjcnlwdD0lZFxuJiMzNDssCiAJCQkgICAgICAgaSwgYmUzMl90b19jcHUoc2FwLSZndDt4cy0mZ3Q7aWQuc3BpKSwKLQkJCSAgICAgICBzYXAtJmd0O3hzLSZndDtpZC5wcm90bywgc2FwLSZndDtzYWx0LCBzYXAtJmd0O2NyeXB0KTsKJiM0MzsJCQkgICAgICAgc2FwLSZndDt4cy0mZ3Q7aWQucHJvdG8sIGJlMzJfdG9fY3B1KHNhcC0mZ3Q7c2FsdCksIHNhcC0mZ3Q7Y3J5cHQpOwogCQlwICYjNDM7PSBzY25wcmludGYocCwgYnVmc2l6ZSAtIChwIC0gYnVmKSwKIAkJCSAgICAgICAmIzM0O3NhWyVpXSAgICBrZXk9MHglMDh4ICUwOHggJTA4eCAlMDh4XG4mIzM0OywKLQkJCSAgICAgICBpLCBzYXAtJmd0O2tleVswXSwgc2FwLSZndDtrZXlbMV0sCi0JCQkgICAgICAgc2FwLSZndDtrZXlbMl0sIHNhcC0mZ3Q7a2V5WzNdKTsKJiM0MzsJCQkgICAgICAgaSwgYmUzMl90b19jcHUoc2FwLSZndDtrZXlbMF0pLCBiZTMyX3RvX2NwdShzYXAtJmd0O2tleVsxXSksCiYjNDM7CQkJICAgICAgIGJlMzJfdG9fY3B1KHNhcC0mZ3Q7a2V5WzJdKSwgYmUzMl90b19jcHUoc2FwLSZndDtrZXlbM10pKTsKIAl9CiAKIAlsZW4gPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcihidWZmZXIsIGNvdW50LCBwcG9zLCBidWYsIHAgLSBidWYpOwpAQCAtODcsNyAmIzQzOzg3LDcgQEAgc3RhdGljIGludCBuc2ltX2lwc2VjX2ZpbmRfZW1wdHlfaWR4KHN0cnVjdCBuc2ltX2lwc2VjICppcHNlYykKIAogc3RhdGljIGludCBuc2ltX2lwc2VjX3BhcnNlX3Byb3RvX2tleXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgICAgICAgc3RydWN0IHhmcm1fc3RhdGUgKnhzLAotCQkJCSAgICAgICB1MzIgKm15a2V5LCB1MzIgKm15c2FsdCkKJiM0MzsJCQkJICAgICAgIF9fYmUzMiAqbXlrZXksIF9fYmUzMiAqbXlzYWx0KQogewogCWNvbnN0IGNoYXIgYWVzX2djbV9uYW1lW10gPSAmIzM0O3JmYzQxMDYoZ2NtKGFlcykpJiMzNDs7CiAJdW5zaWduZWQgY2hhciAqa2V5X2RhdGE7CkBAIC0xMTcsNyAmIzQzOzExNyw3IEBAIHN0YXRpYyBpbnQgbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAKIAkvKiAxNjAgYWNjb3VudHMgZm9yIDE2IGJ5dGUga2V5IGFuZCA0IGJ5dGUgc2FsdCAqLwogCWlmIChrZXlfbGVuICZndDsgTlNJTV9JUFNFQ19BVVRIX0JJVFMpIHsKLQkJKm15c2FsdCA9ICgodTMyICopa2V5X2RhdGEpWzRdOwomIzQzOwkJKm15c2FsdCA9ICgoX19iZTMyICopa2V5X2RhdGEpWzRdOwogCX0gZWxzZSBpZiAoa2V5X2xlbiA9PSBOU0lNX0lQU0VDX0FVVEhfQklUUykgewogCQkqbXlzYWx0ID0gMDsKIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oCmluZGV4IDU1YWVjNDEyMzdiOWIuLmE4MmE2ODUzODRlNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgKQEAgLTQyLDggJiM0Mzs0Miw4IEBACiBzdHJ1Y3QgbnNpbV9zYSB7CiAJc3RydWN0IHhmcm1fc3RhdGUgKnhzOwogCV9fYmUzMiBpcGFkZHJbNF07Ci0JdTMyIGtleVs0XTsKLQl1MzIgc2FsdDsKJiM0MzsJX19iZTMyIGtleVs0XTsKJiM0MzsJX19iZTMyIHNhbHQ7CiAJYm9vbCB1c2VkOwogCWJvb2wgY3J5cHQ7CiAJYm9vbCByeDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnNoCmluZGV4IGFjZTNhOTkwMjNlZDAuLjQ4NDNkNDc0NTM4ZjQgMTAwNzU1Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsuc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5zaApAQCAtOTMyLDExICYjNDM7OTMyLDExIEBAIGtjaV90ZXN0X2lwc2VjX29mZmxvYWQoKQogCXJ1bl9jbWQgZGlmZiAkc3lzZnNmIC0gJmx0OyZsdDsgRU9GCiBTQSBjb3VudD0yIHR4PTMKIHNhWzBdIHR4IGlwYWRkcj0kZHN0aXAKLXNhWzBdICAgIHNwaT0weDAwMDAwMDA5IHByb3RvPTB4MzIgc2FsdD0weDYxNjI2MzY0IGNyeXB0PTEKLXNhWzBdICAgIGtleT0weDM0MzMzMjMxIDM4MzczNjM1IDMyMzEzMDM5IDM2MzUzNDMzCiYjNDM7c2FbMF0gICAgc3BpPTB4MDAwMDAwMDkgcHJvdG89MHgzMiBzYWx0PTB4NjQ2MzYyNjEgY3J5cHQ9MQomIzQzO3NhWzBdICAgIGtleT0weDMxMzIzMzM0IDM1MzYzNzM4IDM5MzAzMTMyIDMzMzQzNTM2CiBzYVsxXSByeCBpcGFkZHI9JHNyY2lwCi1zYVsxXSAgICBzcGk9MHgwMDAwMDAwOSBwcm90bz0weDMyIHNhbHQ9MHg2MTYyNjM2NCBjcnlwdD0xCi1zYVsxXSAgICBrZXk9MHgzNDMzMzIzMSAzODM3MzYzNSAzMjMxMzAzOSAzNjM1MzQzMwomIzQzO3NhWzFdICAgIHNwaT0weDAwMDAwMDA5IHByb3RvPTB4MzIgc2FsdD0weDY0NjM2MjYxIGNyeXB0PTEKJiM0MztzYVsxXSAgICBrZXk9MHgzMTMyMzMzNCAzNTM2MzczOCAzOTMwMzEzMiAzMzM0MzUzNgogRU9GCiAJaWYgWyAkPyAtbmUgMCBdIDsgdGhlbgogCQllbmRfdGVzdCAmIzM0O0ZBSUw6IGlwc2VjX29mZmxvYWQgaW5jb3JyZWN0IGRyaXZlciBkYXRhJiMzNDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE3MAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDEwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldHdvcmsgRGV2aWNlIFNpbXVsYXRvciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBmb2N1c2VkIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzLiBJIHNlZSBtb2RpZmljYXRpb25zIGFjcm9zcyB0aGUgYG5ldGRldnNpbWAgZGlyZWN0b3J5LCBzcGVjaWZpY2FsbHkgYGlwc2VjLmNgIGFuZCBgbmV0ZGV2c2ltLmhgLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBteSBhdHRlbnRpb24uIElQc2VjIHdpdGhpbiBhIHNpbXVsYXRlZCBuZXR3b3JrIGVudmlyb25tZW50Li4uIHRoYXQgY291bGQgYmUgaW50ZXJlc3RpbmcuIEkmIzM5O20gYWxzbyBub3RpbmcgdGhlIGluY2x1c2lvbiBvZiBhIGNoYW5nZSBpbiB0aGUgYHJ0bmV0bGluay5zaGAgc2VsZnRlc3Qgc2NyaXB0LiBUaGlzIHN1Z2dlc3RzIHRlc3RpbmcgaXMgYSBrZXkgY29tcG9uZW50LCBob3BlZnVsbHksIHRvIHZhbGlkYXRlIHRoZXNlIGNoYW5nZXMuCgpNeSBmaXJzdCBzdGVwIGlzIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGFjdHVhbGx5IGJlaW5nICpjaGFuZ2VkKi4gSSYjMzk7bGwgcmVhY2ggZm9yIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBleGFtaW5lIGBuZXRkZXZzaW1gIGFuZCBgaXBzZWMuY2AgbW9yZSBjbG9zZWx5LCB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiB0aGUgbW9kaWZpY2F0aW9ucy4gVGhpcyBpbml0aWFsIGFuYWx5c2lzIHdpbGwgZGljdGF0ZSB0aGUgbmV4dCBzdGVwcywgYnV0IEkgd2FudCB0byBnZXQgYSBoaWdoLWxldmVsIHZpZXcgb2YgdGhlc2UgY2hhbmdlcyBmaXJzdCwgYW5kIHRyeSB0byBhbnRpY2lwYXRlIGFueSBrbm9jay1vbiBlZmZlY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25zaW1fZGJnX25ldGRldl9vcHNfcmVhZHxuc2ltX2lwc2VjJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jLTExLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmM6MTI6c3RhdGljIHNzaXplX3QgbnNpbV9kYmdfbmV0ZGV2X29wc19yZWFkKHN0cnVjdCBmaWxlICpmaWxwLFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtMTMtXHRcdFx0XHRcdGNoYXIgX191c2VyICpidWZmZXIsXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtMTYtXHRzdHJ1Y3QgbmV0ZGV2c2ltICpucyA9IGZpbHAtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmM6MTc6XHRzdHJ1Y3QgbnNpbV9pcHNlYyAqaXBzZWMgPSBcdTAwMjZucy1cdTAwM2VpcHNlYztcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jLTE4LVx0c2l6ZV90IGJ1ZnNpemU7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmM9NjY9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaXBzZWNfZGJnX2ZvcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtNjgtXHQub3BlbiA9IHNpbXBsZV9vcGVuLFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmM6Njk6XHQucmVhZCA9IG5zaW1fZGJnX25ldGRldl9vcHNfcmVhZCxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jLTcwLX07XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy03MS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jOjcyOnN0YXRpYyBpbnQgbnNpbV9pcHNlY19maW5kX2VtcHR5X2lkeChzdHJ1Y3QgbnNpbV9pcHNlYyAqaXBzZWMpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy03My17XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtODctXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYzo4ODpzdGF0aWMgaW50IG5zaW1faXBzZWNfcGFyc2VfcHJvdG9fa2V5cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtODktXHRcdFx0XHQgICAgICAgc3RydWN0IHhmcm1fc3RhdGUgKnhzLFxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jLTEzMS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jOjEzMjpzdGF0aWMgaW50IG5zaW1faXBzZWNfYWRkX3NhKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy0xMzMtXHRcdFx0ICAgICBzdHJ1Y3QgeGZybV9zdGF0ZSAqeHMsXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtMTM1LXtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jOjEzNjpcdHN0cnVjdCBuc2ltX2lwc2VjICppcHNlYztcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jLTEzNy1cdHN0cnVjdCBuZXRkZXZzaW0gKm5zO1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jLTE2MC1cdC8qIGZpbmQgdGhlIGZpcnN0IHVudXNlZCBpbmRleCAqL1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmM6MTYxOlx0cmV0ID0gbnNpbV9pcHNlY19maW5kX2VtcHR5X2lkeChpcHNlYyk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy0xNjItXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtMTc1LVx0LyogZ2V0IHRoZSBrZXkgYW5kIHNhbHQgKi9cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jOjE3NjpcdHJldCA9IG5zaW1faXBzZWNfcGFyc2VfcHJvdG9fa2V5cyhkZXYsIHhzLCBzYS5rZXksIFx1MDAyNnNhLnNhbHQpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtMTc3LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jLTIwMS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jOjIwMjpzdGF0aWMgdm9pZCBuc2ltX2lwc2VjX2RlbF9zYShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeHMpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy0yMDMte1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtMjA0LVx0c3RydWN0IG5ldGRldnNpbSAqbnMgPSBuZXRkZXZfcHJpdihkZXYpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmM6MjA1Olx0c3RydWN0IG5zaW1faXBzZWMgKmlwc2VjID0gXHUwMDI2bnMtXHUwMDNlaXBzZWM7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy0yMDYtXHR1MTYgc2FfaWR4O1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jPTIxOT1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1kZXZfb3BzIG5zaW1feGZybWRldl9vcHMgPSB7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYzoyMjA6XHQueGRvX2Rldl9zdGF0ZV9hZGRcdD0gbnNpbV9pcHNlY19hZGRfc2EsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYzoyMjE6XHQueGRvX2Rldl9zdGF0ZV9kZWxldGVcdD0gbnNpbV9pcHNlY19kZWxfc2EsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy0yMjItfTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jLTIyMy1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jOjIyNDpib29sIG5zaW1faXBzZWNfdHgoc3RydWN0IG5ldGRldnNpbSAqbnMsIHN0cnVjdCBza19idWZmICpza2IpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy0yMjUte1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtMjI2LVx0c3RydWN0IHNlY19wYXRoICpzcCA9IHNrYl9zZWNfcGF0aChza2IpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmM6MjI3Olx0c3RydWN0IG5zaW1faXBzZWMgKmlwc2VjID0gXHUwMDI2bnMtXHUwMDNlaXBzZWM7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy0yMjgtXHRzdHJ1Y3QgeGZybV9zdGF0ZSAqeHM7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtMjcwLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmM6MjcxOnZvaWQgbnNpbV9pcHNlY19pbml0KHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtMjcyLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy0yODctXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYzoyODg6dm9pZCBuc2ltX2lwc2VjX3RlYXJkb3duKHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtMjg5LXtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jOjI5MDpcdHN0cnVjdCBuc2ltX2lwc2VjICppcHNlYyA9IFx1MDAyNm5zLVx1MDAzZWlwc2VjO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtMjkxLVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYz0xMjM9c3RhdGljIG5ldGRldl90eF90IG5zaW1fc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0xMzUtXHRyY3VfcmVhZF9sb2NrKCk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6MTM2Olx0aWYgKCFuc2ltX2lwc2VjX3R4KG5zLCBza2IpKVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTEzNy1cdFx0Z290byBvdXRfZHJvcF9hbnk7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jPTEwNDA9c3RhdGljIGludCBuc2ltX2luaXRfbmV0ZGV2c2ltKHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0xMDY5LVx0bnNpbV9tYWNzZWNfaW5pdChucyk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6MTA3MDpcdG5zaW1faXBzZWNfaW5pdChucyk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtMTA3MS1cbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtMTA5Ny1lcnJfaXBzZWNfdGVhcmRvd246XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6MTA5ODpcdG5zaW1faXBzZWNfdGVhcmRvd24obnMpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTEwOTktXHRuc2ltX21hY3NlY190ZWFyZG93bihucyk7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jPTExNzU9dm9pZCBuc2ltX2Rlc3Ryb3koc3RydWN0IG5ldGRldnNpbSAqbnMpXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTEyMDAtXHRcdG5zaW1fbWFjc2VjX3RlYXJkb3duKG5zKTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYzoxMjAxOlx0XHRuc2ltX2lwc2VjX3RlYXJkb3duKG5zKTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0xMjAyLVx0XHRuc2ltX2JwZl91bmluaXQobnMpO1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD00Mj1zdHJ1Y3QgbnNpbV9zYSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTUxLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjUyOnN0cnVjdCBuc2ltX2lwc2VjIHtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC01My1cdHN0cnVjdCBuc2ltX3NhIHNhW05TSU1fSVBTRUNfTUFYX1NBX0NPVU5UXTtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg9MTA3PXN0cnVjdCBuZXRkZXZzaW0ge1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC0xNDEtXHRib29sIGJwZl9tYXBfYWNjZXB0O1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjE0MjpcdHN0cnVjdCBuc2ltX2lwc2VjIGlwc2VjO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTE0My1cdHN0cnVjdCBuc2ltX21hY3NlYyBtYWNzZWM7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oPTQxND1zdGF0aWMgaW5saW5lIGJvb2wgbnNpbV9kZXZfcG9ydF9pc192ZihzdHJ1Y3QgbnNpbV9kZXZfcG9ydCAqbnNpbV9kZXZfcG9ydClcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtNDE4LSNpZiBJU19FTkFCTEVEKENPTkZJR19YRlJNX09GRkxPQUQpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg6NDE5OnZvaWQgbnNpbV9pcHNlY19pbml0KHN0cnVjdCBuZXRkZXZzaW0gKm5zKTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDo0MjA6dm9pZCBuc2ltX2lwc2VjX3RlYXJkb3duKHN0cnVjdCBuZXRkZXZzaW0gKm5zKTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDo0MjE6Ym9vbCBuc2ltX2lwc2VjX3R4KHN0cnVjdCBuZXRkZXZzaW0gKm5zLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC00MjItI2Vsc2VcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDo0MjM6c3RhdGljIGlubGluZSB2b2lkIG5zaW1faXBzZWNfaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucylcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC00MjQte1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC00MjYtXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg6NDI3OnN0YXRpYyBpbmxpbmUgdm9pZCBuc2ltX2lwc2VjX3RlYXJkb3duKHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQyOC17XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQzMC1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDo0MzE6c3RhdGljIGlubGluZSBib29sIG5zaW1faXBzZWNfdHgoc3RydWN0IG5ldGRldnNpbSAqbnMsIHN0cnVjdCBza19idWZmICpza2IpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtNDMyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTY0CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBOZXRkZXZTaW0gQ29uZmlndXJhdGlvbiBmb3IgSVBTZWMgT2ZmbG9hZCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSB3aXRoIGBkcml2ZXJzL25ldC9uZXRkZXZzaW0vS2NvbmZpZ2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBLY29uZmlnIG9wdGlvbnMgbmVjZXNzYXJ5IHRvIGVuYWJsZSBuZXRkZXZzaW0gd2l0aCBJUFNlYyBvZmZsb2FkIGNhcGFiaWxpdGllcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyByZXF1aXJlZCBmb3IgdGhhdCBmdW5jdGlvbmFsaXR5IHRvIGJlIGNvbmZpZ3VyZWQuIEFyZSB0aGVyZSBzcGVjaWZpYyBkZXBlbmRlbmNpZXM/IEFyZSB0aGVyZSBoaWRkZW4gb3B0aW9ucyB0aGF0IEkmIzM5O20gbWlzc2luZz8gSSB3YW50IHRvIG1ha2Ugc3VyZSBJJiMzOTttIGVuYWJsaW5nIGV2ZXJ5dGhpbmcgdGhhdOKAmXMgbmVlZGVkIHRvIGV4cG9zZSBhbmQgdXRpbGl6ZSB0aGF0IGZ1bmN0aW9uYWxpdHkuIEkmIzM5O2xsIG5lZWQgdG8gcG9yZSBvdmVyIHRoZSBkZWZpbml0aW9ucyBpbiB0aGF0IGZpbGUgY2xvc2VseSwgbG9va2luZyBmb3IgaW50ZXJhY3Rpb25zIGFuZCBwb3RlbnRpYWwgY29uZmxpY3RzLiBJ4oCZbGwgYmUgb24gdGhlIGxvb2tvdXQgZm9yIGFueSBzdWJ0bGUgY2x1ZXMgYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb24gb2YgSVBTZWMgb2ZmbG9hZCB3aXRoaW4gdGhlIE5ldERldlNpbSBlbnZpcm9ubWVudC4gVGhpcyB3aWxsIGFsbG93IG1lIHRvIGVuc3VyZSBteSBidWlsZHMgd2lsbCBoYXZlIHRoaXMgY2FwYWJpbGl0eS4gSSBob3BlIGl0IGlzIGFsbCBzZWxmLWV2aWRlbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkVUREVWU0lNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz02MDI9c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2h5cGVydi9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnLTYwMy1cbmRyaXZlcnMvbmV0L0tjb25maWc6NjA0OmNvbmZpZyBORVRERVZTSU1cbmRyaXZlcnMvbmV0L0tjb25maWctNjA1LVx0dHJpc3RhdGUgXCYjMzQ7U2ltdWxhdGVkIG5ldHdvcmtpbmcgZGV2aWNlXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvTWFrZWZpbGU9ODY9b2JqLSQoQ09ORklHX1VTQjRfTkVUKSAmIzQzOz0gdGh1bmRlcmJvbHQvXG5kcml2ZXJzL25ldC9NYWtlZmlsZTo4NzpvYmotJChDT05GSUdfTkVUREVWU0lNKSAmIzQzOz0gbmV0ZGV2c2ltL1xuZHJpdmVycy9uZXQvTWFrZWZpbGUtODgtb2JqLSQoQ09ORklHX05FVF9GQUlMT1ZFUikgJiM0Mzs9IG5ldF9mYWlsb3Zlci5vXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL01ha2VmaWxlLTItXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vTWFrZWZpbGU6MzpvYmotJChDT05GSUdfTkVUREVWU0lNKSAmIzQzOz0gbmV0ZGV2c2ltLm9cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZS00LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2NDYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gTmV0d29yayBEcml2ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIG5ldHdvcmsgZHJpdmVyIHNpdHVhdGlvbiBiZXR0ZXIuIExldCYjMzk7cyBzZWUuLi4gdGhlIGBLY29uZmlnYCBmaWxlIGluIHRoZSBgZHJpdmVycy9uZXRgIGRpcmVjdG9yeSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDYwNCwgc2VlbXMgbGlrZSBhIGxpa2VseSBwbGFjZSB0byBzdGFydC4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHlvdSBmaW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIG5ldHdvcmsgZGV2aWNlcywgcmlnaHQ/IEl0JiMzOTtsbCBsaWtlbHkgdGVsbCBtZSB0aGUgZGVwZW5kZW5jaWVzLCB0aGUgYnVpbGQgZmxhZ3MsIGFuZCBhbGwgdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzIEkgbmVlZCB0byBrbm93IHRvIHRydWx5IHVuZGVyc3RhbmQgaXRzIGlubmVyIHdvcmtpbmdzLiBUaGVuLCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgcGFydGljdWxhciBkcml2ZXIgZ2V0cyBidWlsdCBpbnRvIHRoZSBrZXJuZWwsIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGBNYWtlZmlsZWAgbG9jYXRlZCBpbiBgZHJpdmVycy9uZXQvbmV0ZGV2c2ltYC4gVGhhdCYjMzk7bGwgZ2l2ZSBtZSB0aGUgYnVpbGQgcnVsZXMsIG9iamVjdCBmaWxlIGRlcGVuZGVuY2llcywgYW5kIGhvdyBpdCBhbGwgZ2V0cyBsaW5rZWQgdG9nZXRoZXIuIFRoYXQgc2hvdWxkIG9mZmVyIHRoZSBtb3N0IGNvbXBsZXRlIGNvbnRleHQgZm9yIG15IGN1cnJlbnQgbmVlZHMuIFRpbWUgdG8gZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjAwOlx0XG4gNjAxOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3RodW5kZXJib2x0L0tjb25maWdcJiMzNDtcbiA2MDI6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvaHlwZXJ2L0tjb25maWdcJiMzNDtcbiA2MDM6XHRcbiA2MDQ6XHRjb25maWcgTkVUREVWU0lNXG4gNjA1Olx0XHR0cmlzdGF0ZSBcJiMzNDtTaW11bGF0ZWQgbmV0d29ya2luZyBkZXZpY2VcJiMzNDtcbiA2MDY6XHRcdGRlcGVuZHMgb24gREVCVUdfRlNcbiA2MDc6XHRcdGRlcGVuZHMgb24gSU5FVFxuIDYwODpcdFx0ZGVwZW5kcyBvbiBQU0FNUExFIHx8IFBTQU1QTEU9blxuIDYwOTpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19NT0NLIHx8IFBUUF8xNTg4X0NMT0NLX01PQ0s9blxuIDYxMDpcdFx0c2VsZWN0IE5FVF9ERVZMSU5LXG4gNjExOlx0XHRzZWxlY3QgUEFHRV9QT09MXG4gNjEyOlx0XHRzZWxlY3QgTkVUX1NIQVBFUlxuIDYxMzpcdFx0aGVscFxuIDYxNDpcdFx0ICBUaGlzIGRyaXZlciBpcyBhIGRldmVsb3BlciB0ZXN0aW5nIHRvb2wgYW5kIHNvZnR3YXJlIG1vZGVsIHRoYXQgY2FuXG4gNjE1Olx0XHQgIGJlIHVzZWQgdG8gdGVzdCB2YXJpb3VzIGNvbnRyb2wgcGF0aCBuZXR3b3JraW5nIEFQSXMsIGVzcGVjaWFsbHlcbiA2MTY6XHRcdCAgSFctb2ZmbG9hZCByZWxhdGVkLlxuIDYxNzpcdFxuIDYxODpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gNjE5Olx0XHQgIHdpbGwgYmUgY2FsbGVkIG5ldGRldnNpbS5cbiA2MjA6XHRcbiA2MjE6XHRjb25maWcgTkVUX0ZBSUxPVkVSXG4gNjIyOlx0XHR0cmlzdGF0ZSBcJiMzNDtGYWlsb3ZlciBkcml2ZXJcJiMzNDtcbiA2MjM6XHRcdHNlbGVjdCBGQUlMT1ZFUlxuIDYyNDpcdFx0aGVscFxuIDYyNTpcdFx0ICBUaGlzIHByb3ZpZGVzIGFuIGF1dG9tYXRlZCBmYWlsb3ZlciBtZWNoYW5pc20gdmlhIEFQSXMgdG8gY3JlYXRlXG4gNjI2Olx0XHQgIGFuZCBkZXN0cm95IGEgZmFpbG92ZXIgbWFzdGVyIG5ldGRldiBhbmQgbWFuYWdlcyBhIHByaW1hcnkgYW5kXG4gNjI3Olx0XHQgIHN0YW5kYnkgc2xhdmUgbmV0ZGV2cyB0aGF0IGdldCByZWdpc3RlcmVkIHZpYSB0aGUgZ2VuZXJpYyBmYWlsb3ZlclxuIDYyODpcdFx0ICBpbmZyYXN0cnVjdHVyZS4gVGhpcyBjYW4gYmUgdXNlZCBieSBwYXJhdmlydHVhbCBkcml2ZXJzIHRvIGVuYWJsZVxuIDYyOTpcdFx0ICBhbiBhbHRlcm5hdGUgbG93IGxhdGVuY3kgZGF0YXBhdGguIEl0IGFsc28gZW5hYmxlcyBsaXZlIG1pZ3JhdGlvbiBvZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNzUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBJUHNlYyBPYmplY3QgQ29tcGlsYXRpb24qKgoKQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgYGlwc2VjLm9gIGlzIGJlaW5nIGJ1aWx0IHdpdGhpbiB0aGUgYG5ldGRldnNpbWAgZnJhbWV3b3JrLiBNeSBmaXJzdCBzdG9wLCBhcyBhbHdheXMgaW4gdGhlc2Ugc2l0dWF0aW9ucywgaXMgdGhlIGBNYWtlZmlsZWAuIFNwZWNpZmljYWxseSwgYGRyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZWAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIG1hZ2ljIHNob3VsZCBiZSBoYXBwZW5pbmcg4oCTIHRoZSBydWxlcywgdGhlIGRlcGVuZGVuY2llcywgdGhlIGZsYWdzLi4uIEl0JiMzOTtzIGFsbCB0aGVyZSwgaG9wZWZ1bGx5IGxhaWQgb3V0IGluIGEgY2xlYW4gYW5kIGxvZ2ljYWwgd2F5LiBJIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCB0YXJnZXRzIGFuZCBzb3VyY2UgZmlsZSBkZXBlbmRlbmNpZXMsIGFueSBzcGVjaWZpYyBjb21waWxlciBmbGFncyBiZWluZyBlbXBsb3llZCBmb3IgSVBzZWMgd2l0aGluIHRoaXMgc2ltdWxhdGVkIG5ldHdvcmsgZGV2aWNlIGNvbnRleHQsIGFuZCBwb3NzaWJseSBhbnkgbGlua2VyIGludHJpY2FjaWVzIGlmIGl0JiMzOTtzIGxpbmtpbmcgYWdhaW5zdCBleHRlcm5hbCBsaWJyYXJpZXMuIExldCYjMzk7cyBzZWUgaWYgdGhlIGFwcHJvYWNoIGlzIHN0cmFpZ2h0Zm9yd2FyZCwgb3IgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgdHJpY2tzIHVzZWQgdG8gaW50ZWdyYXRlIHRoZSBJUHNlYyBjb2RlIGVmZmVjdGl2ZWx5IGludG8gdGhlIHNpbXVsYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdFxuICAgMzpcdG9iai0kKENPTkZJR19ORVRERVZTSU0pICYjNDM7PSBuZXRkZXZzaW0ub1xuICAgNDpcdFxuICAgNTpcdG5ldGRldnNpbS1vYmpzIDo9IFxcXG4gICA2Olx0XHRuZXRkZXYubyBkZXYubyBldGh0b29sLm8gZmliLm8gYnVzLm8gaGVhbHRoLm8gaHdzdGF0cy5vIHVkcF90dW5uZWxzLm8gdGMub1xuICAgNzpcdFxuICAgODpcdGlmZXEgKCQoQ09ORklHX0JQRl9TWVNDQUxMKSx5KVxuICAgOTpcdG5ldGRldnNpbS1vYmpzICYjNDM7PSBcXFxuICAxMDpcdFx0YnBmLm9cbiAgMTE6XHRlbmRpZlxuICAxMjpcdFxuICAxMzpcdGlmbmVxICgkKENPTkZJR19YRlJNX09GRkxPQUQpLClcbiAgMTQ6XHRuZXRkZXZzaW0tb2JqcyAmIzQzOz0gaXBzZWMub1xuICAxNTpcdGVuZGlmXG4gIDE2Olx0XG4gIDE3Olx0aWZuZXEgKCQoQ09ORklHX1BTQU1QTEUpLClcbiAgMTg6XHRuZXRkZXZzaW0tb2JqcyAmIzQzOz0gcHNhbXBsZS5vXG4gIDE5Olx0ZW5kaWZcbiAgMjA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg4OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIERlZXAgaW50byBgaXBzZWMuY2AqKgoKT2theSwgdGltZSB0byByZWFsbHkgZGlnIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBvZiB0aGUgcmVjZW50IGNoYW5nZXMgdG8gYGlwc2VjLmNgLiBJJiMzOTttIGdvaW5nIHRvIG1ldGljdWxvdXNseSBnbyB0aHJvdWdoIHRoZSBjb2RlLCBsaW5lIGJ5IGxpbmUgaWYgbmVjZXNzYXJ5LiBJIHdhbnQgdG8gc2VlIHByZWNpc2VseSAqd2hhdCogd2FzIG1vZGlmaWVkLCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgKmhvdyogdGhlc2UgY2hhbmdlcyBpbXBhY3QgdGhlIGV4ZWN1dGlvbiBmbG93LiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSByaXBwbGUgZWZmZWN0cyDigJMgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGFjdHMsIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgb3Igc3VidGxlIGJlaGF2aW9yYWwgc2hpZnRzLiBJJiMzOTtsbCBiZSB0cmFjaW5nIHRoZSBleGVjdXRpb24gcGF0aCwgbWVudGFsbHkgc2ltdWxhdGluZyBzY2VuYXJpb3MsIGFuZCBjb21wYXJpbmcgdGhlIHVwZGF0ZWQgbG9naWMgYWdhaW5zdCBteSBleGlzdGluZyBtZW50YWwgbW9kZWwgb2YgdGhlIElQU2VjIHN0YWNrLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgY3Vyc29yeSBnbGFuY2U7IEkgbmVlZCB0byBkZXZlbG9wIGEgcm9jay1zb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSB1cGRhdGVkIGludGVyYWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0LyogQ29weXJpZ2h0KGMpIDIwMTggT3JhY2xlIGFuZC9vciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKi9cbiAgIDM6XHRcbiAgIDQ6XHQjaW5jbHVkZSBcdTAwM2NjcnlwdG8vYWVhZC5oXHUwMDNlXG4gICA1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvZGVidWdmcy5oXHUwMDNlXG4gICA2Olx0I2luY2x1ZGUgXHUwMDNjbmV0L3hmcm0uaFx1MDAzZVxuICAgNzpcdFxuICAgODpcdCNpbmNsdWRlIFwmIzM0O25ldGRldnNpbS5oXCYjMzQ7XG4gICA5Olx0XG4gIDEwOlx0I2RlZmluZSBOU0lNX0lQU0VDX0FVVEhfQklUU1x0MTI4XG4gIDExOlx0XG4gIDEyOlx0c3RhdGljIHNzaXplX3QgbnNpbV9kYmdfbmV0ZGV2X29wc19yZWFkKHN0cnVjdCBmaWxlICpmaWxwLFxuICAxMzpcdFx0XHRcdFx0XHRjaGFyIF9fdXNlciAqYnVmZmVyLFxuICAxNDpcdFx0XHRcdFx0XHRzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbiAgMTU6XHR7XG4gIDE2Olx0XHRzdHJ1Y3QgbmV0ZGV2c2ltICpucyA9IGZpbHAtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuICAxNzpcdFx0c3RydWN0IG5zaW1faXBzZWMgKmlwc2VjID0gXHUwMDI2bnMtXHUwMDNlaXBzZWM7XG4gIDE4Olx0XHRzaXplX3QgYnVmc2l6ZTtcbiAgMTk6XHRcdGNoYXIgKmJ1ZiwgKnA7XG4gIDIwOlx0XHRpbnQgbGVuO1xuICAyMTpcdFx0aW50IGk7XG4gIDIyOlx0XG4gIDIzOlx0XHQvKiB0aGUgYnVmZmVyIG5lZWRlZCBpc1xuICAyNDpcdFx0ICogKG51bSBTQXMgKiAzIGxpbmVzIGVhY2ggKiB+NjAgYnl0ZXMgcGVyIGxpbmUpICYjNDM7IG9uZSBtb3JlIGxpbmVcbiAgMjU6XHRcdCAqL1xuICAyNjpcdFx0YnVmc2l6ZSA9IChpcHNlYy1cdTAwM2Vjb3VudCAqIDQgKiA2MCkgJiM0MzsgNjA7XG4gIDI3Olx0XHRidWYgPSBremFsbG9jKGJ1ZnNpemUsIEdGUF9LRVJORUwpO1xuICAyODpcdFx0aWYgKCFidWYpXG4gIDI5Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuICAzMDpcdFxuICAzMTpcdFx0cCA9IGJ1ZjtcbiAgMzI6XHRcdHAgJiM0Mzs9IHNjbnByaW50ZihwLCBidWZzaXplIC0gKHAgLSBidWYpLFxuICAzMzpcdFx0XHQgICAgICAgXCYjMzQ7U0EgY291bnQ9JXUgdHg9JXVcXG5cJiMzNDssXG4gIDM0Olx0XHRcdCAgICAgICBpcHNlYy1cdTAwM2Vjb3VudCwgaXBzZWMtXHUwMDNldHgpO1xuICAzNTpcdFxuICAzNjpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlNJTV9JUFNFQ19NQVhfU0FfQ09VTlQ7IGkmIzQzOyYjNDM7KSB7XG4gIDM3Olx0XHRcdHN0cnVjdCBuc2ltX3NhICpzYXAgPSBcdTAwMjZpcHNlYy1cdTAwM2VzYVtpXTtcbiAgMzg6XHRcbiAgMzk6XHRcdFx0aWYgKCFzYXAtXHUwMDNldXNlZClcbiAgNDA6XHRcdFx0XHRjb250aW51ZTtcbiAgNDE6XHRcbiAgNDI6XHRcdFx0aWYgKHNhcC1cdTAwM2V4cy1cdTAwM2Vwcm9wcy5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gIDQzOlx0XHRcdFx0cCAmIzQzOz0gc2NucHJpbnRmKHAsIGJ1ZnNpemUgLSAocCAtIGJ1ZiksXG4gIDQ0Olx0XHRcdFx0XHQgICAgICAgXCYjMzQ7c2FbJWldICVjeCBpcGFkZHI9JXBJNmNcXG5cJiMzNDssXG4gIDQ1Olx0XHRcdFx0XHQgICAgICAgaSwgKHNhcC1cdTAwM2VyeCA/ICYjMzk7ciYjMzk7IDogJiMzOTt0JiMzOTspLCBcdTAwMjZzYXAtXHUwMDNlaXBhZGRyKTtcbiAgNDY6XHRcdFx0ZWxzZVxuICA0NzpcdFx0XHRcdHAgJiM0Mzs9IHNjbnByaW50ZihwLCBidWZzaXplIC0gKHAgLSBidWYpLFxuICA0ODpcdFx0XHRcdFx0ICAgICAgIFwmIzM0O3NhWyVpXSAlY3ggaXBhZGRyPSVwSTRcXG5cJiMzNDssXG4gIDQ5Olx0XHRcdFx0XHQgICAgICAgaSwgKHNhcC1cdTAwM2VyeCA/ICYjMzk7ciYjMzk7IDogJiMzOTt0JiMzOTspLCBcdTAwMjZzYXAtXHUwMDNlaXBhZGRyWzNdKTtcbiAgNTA6XHRcdFx0cCAmIzQzOz0gc2NucHJpbnRmKHAsIGJ1ZnNpemUgLSAocCAtIGJ1ZiksXG4gIDUxOlx0XHRcdFx0ICAgICAgIFwmIzM0O3NhWyVpXSAgICBzcGk9MHglMDh4IHByb3RvPTB4JXggc2FsdD0weCUwOHggY3J5cHQ9JWRcXG5cJiMzNDssXG4gIDUyOlx0XHRcdFx0ICAgICAgIGksIGJlMzJfdG9fY3B1KHNhcC1cdTAwM2V4cy1cdTAwM2VpZC5zcGkpLFxuICA1MzpcdFx0XHRcdCAgICAgICBzYXAtXHUwMDNleHMtXHUwMDNlaWQucHJvdG8sIGJlMzJfdG9fY3B1KHNhcC1cdTAwM2VzYWx0KSwgc2FwLVx1MDAzZWNyeXB0KTtcbiAgNTQ6XHRcdFx0cCAmIzQzOz0gc2NucHJpbnRmKHAsIGJ1ZnNpemUgLSAocCAtIGJ1ZiksXG4gIDU1Olx0XHRcdFx0ICAgICAgIFwmIzM0O3NhWyVpXSAgICBrZXk9MHglMDh4ICUwOHggJTA4eCAlMDh4XFxuXCYjMzQ7LFxuICA1NjpcdFx0XHRcdCAgICAgICBpLCBiZTMyX3RvX2NwdShzYXAtXHUwMDNla2V5WzBdKSwgYmUzMl90b19jcHUoc2FwLVx1MDAzZWtleVsxXSksXG4gIDU3Olx0XHRcdFx0ICAgICAgIGJlMzJfdG9fY3B1KHNhcC1cdTAwM2VrZXlbMl0pLCBiZTMyX3RvX2NwdShzYXAtXHUwMDNla2V5WzNdKSk7XG4gIDU4Olx0XHR9XG4gIDU5Olx0XG4gIDYwOlx0XHRsZW4gPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcihidWZmZXIsIGNvdW50LCBwcG9zLCBidWYsIHAgLSBidWYpO1xuICA2MTpcdFxuICA2MjpcdFx0a2ZyZWUoYnVmKTtcbiAgNjM6XHRcdHJldHVybiBsZW47XG4gIDY0Olx0fVxuICA2NTpcdFxuICA2NjpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlwc2VjX2RiZ19mb3BzID0ge1xuICA2NzpcdFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXG4gIDY4Olx0XHQub3BlbiA9IHNpbXBsZV9vcGVuLFxuICA2OTpcdFx0LnJlYWQgPSBuc2ltX2RiZ19uZXRkZXZfb3BzX3JlYWQsXG4gIDcwOlx0fTtcbiAgNzE6XHRcbiAgNzI6XHRzdGF0aWMgaW50IG5zaW1faXBzZWNfZmluZF9lbXB0eV9pZHgoc3RydWN0IG5zaW1faXBzZWMgKmlwc2VjKVxuICA3MzpcdHtcbiAgNzQ6XHRcdHUzMiBpO1xuICA3NTpcdFxuICA3NjpcdFx0aWYgKGlwc2VjLVx1MDAzZWNvdW50ID09IE5TSU1fSVBTRUNfTUFYX1NBX0NPVU5UKVxuICA3NzpcdFx0XHRyZXR1cm4gLUVOT1NQQztcbiAgNzg6XHRcbiAgNzk6XHRcdC8qIHNlYXJjaCBzYSB0YWJsZSAqL1xuICA4MDpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlNJTV9JUFNFQ19NQVhfU0FfQ09VTlQ7IGkmIzQzOyYjNDM7KSB7XG4gIDgxOlx0XHRcdGlmICghaXBzZWMtXHUwMDNlc2FbaV0udXNlZClcbiAgODI6XHRcdFx0XHRyZXR1cm4gaTtcbiAgODM6XHRcdH1cbiAgODQ6XHRcbiAgODU6XHRcdHJldHVybiAtRU5PU1BDO1xuICA4NjpcdH1cbiAgODc6XHRcbiAgODg6XHRzdGF0aWMgaW50IG5zaW1faXBzZWNfcGFyc2VfcHJvdG9fa2V5cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuICA4OTpcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCB4ZnJtX3N0YXRlICp4cyxcbiAgOTA6XHRcdFx0XHRcdCAgICAgICBfX2JlMzIgKm15a2V5LCBfX2JlMzIgKm15c2FsdClcbiAgOTE6XHR7XG4gIDkyOlx0XHRjb25zdCBjaGFyIGFlc19nY21fbmFtZVtdID0gXCYjMzQ7cmZjNDEwNihnY20oYWVzKSlcJiMzNDs7XG4gIDkzOlx0XHR1bnNpZ25lZCBjaGFyICprZXlfZGF0YTtcbiAgOTQ6XHRcdGNoYXIgKmFsZ19uYW1lID0gTlVMTDtcbiAgOTU6XHRcdGludCBrZXlfbGVuO1xuICA5NjpcdFxuICA5NzpcdFx0aWYgKCF4cy1cdTAwM2VhZWFkKSB7XG4gIDk4Olx0XHRcdG5ldGRldl9lcnIoZGV2LCBcJiMzNDtVbnN1cHBvcnRlZCBJUHNlYyBhbGdvcml0aG1cXG5cJiMzNDspO1xuICA5OTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAxMDA6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3MDEKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSB3ZSBnby4uLgoKKipEaXZpbmcgaW50byBgZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmNgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcyBgaXBzZWMuY2AgZmlsZSB3aXRoaW4gdGhlIGBuZXRkZXZzaW1gIGRpcmVjdG9yeS4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGlzIHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIGhhbmRsZSBvbiBob3cgdGhlIHNpbXVsYXRlZCBJUHNlYyBmdW5jdGlvbmFsaXR5IGlzIGltcGxlbWVudGVkIHdpdGhpbiB0aGUgbmV0ZGV2c2ltIGVudmlyb25tZW50LiBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyB0aGUgZW5jYXBzdWxhdGlvbiBhbmQgZGVjYXBzdWxhdGlvbiwgZXNwZWNpYWxseSBnaXZlbiB0aGUgc3ludGhldGljIG5hdHVyZSBvZiB0aGlzIHZpcnR1YWwgbmV0d29yayBpbnRlcmZhY2UuIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IHRoZXkmIzM5O3JlIG1pbWlja2luZyB0aGUgSVBzZWMgU0EgbmVnb3RpYXRpb24gYW5kIGtleSBtYW5hZ2VtZW50IHdpdGhvdXQgcmVseWluZyBvbiBoYXJkd2FyZSBvZmZsb2FkIG9yIHNwZWNpZmljIGNyeXB0byBhY2NlbGVyYXRvcnMsIHRoYXQgd291bGQgYmUgdXNlbGVzcyBpbiB0aGlzIGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVk4oCUc3BlY2lmaWNhbGx5LCB0aGUgc2ltdWxhdGVkIFNlY3VyaXR5IEFzc29jaWF0aW9ucyAoU0FzKSBhbmQgaG93IHRoZXkmIzM5O3JlIHJlcHJlc2VudGVkLiBBcmUgdGhleSB1c2luZyBhIHNpbXBsaWZpZWQgbW9kZWwsIG9yIGEgbW9yZSBmYWl0aGZ1bCAodGhvdWdoIGFic3RyYWN0ZWQpIHJlcHJlc2VudGF0aW9uIG9mIElLRS9JUHNlYyBwcm90b2NvbHM/IEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGhvdyB0aGV5IGFyZSBoYW5kbGluZyBhbnkgc3RhdGUgdHJhbnNpdGlvbnMsIGFuZCBob3cgdGhlIHNpbXVsYXRpb24gaGFuZGxlcyBkaWZmZXJlbnQgcGFja2V0IGZsb3dzLCBhbmQgaG93IGl0IGRlYWxzIHdpdGggdGhlIHBvdGVudGlhbCBmb3IgZnJhZ21lbnRhdGlvbiBvciByZWFzc2VtYmx5IHdpdGhpbiB0aGUgc2ltdWxhdGVkIElQc2VjIHR1bm5lbC4gRXNzZW50aWFsbHksIEkgbmVlZCB0byBzZWUgaWYgaXQgcHJvdmlkZXMgYW4gYWNjdXJhdGUsIG9yIGF0IGxlYXN0IGEgdXNhYmxlLCBhYnN0cmFjdGlvbiBvZiBJUHNlYywgZm9yIHRlc3QgcHVycG9zZXMsIHdpdGhpbiB0aGlzIG5ldHdvcmsgc2ltdWxhdGlvbiBlbnZpcm9ubWVudC4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDE6XHRcbiAxMDI6XHRcdGlmICh4cy1cdTAwM2VhZWFkLVx1MDAzZWFsZ19pY3ZfbGVuICE9IE5TSU1fSVBTRUNfQVVUSF9CSVRTKSB7XG4gMTAzOlx0XHRcdG5ldGRldl9lcnIoZGV2LCBcJiMzNDtJUHNlYyBvZmZsb2FkIHJlcXVpcmVzICVkIGJpdCBhdXRoZW50aWNhdGlvblxcblwmIzM0OyxcbiAxMDQ6XHRcdFx0XHQgICBOU0lNX0lQU0VDX0FVVEhfQklUUyk7XG4gMTA1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDEwNjpcdFx0fVxuIDEwNzpcdFxuIDEwODpcdFx0a2V5X2RhdGEgPSBcdTAwMjZ4cy1cdTAwM2VhZWFkLVx1MDAzZWFsZ19rZXlbMF07XG4gMTA5Olx0XHRrZXlfbGVuID0geHMtXHUwMDNlYWVhZC1cdTAwM2VhbGdfa2V5X2xlbjtcbiAxMTA6XHRcdGFsZ19uYW1lID0geHMtXHUwMDNlYWVhZC1cdTAwM2VhbGdfbmFtZTtcbiAxMTE6XHRcbiAxMTI6XHRcdGlmIChzdHJjbXAoYWxnX25hbWUsIGFlc19nY21fbmFtZSkpIHtcbiAxMTM6XHRcdFx0bmV0ZGV2X2VycihkZXYsIFwmIzM0O1Vuc3VwcG9ydGVkIElQc2VjIGFsZ29yaXRobSAtIHBsZWFzZSB1c2UgJXNcXG5cJiMzNDssXG4gMTE0Olx0XHRcdFx0ICAgYWVzX2djbV9uYW1lKTtcbiAxMTU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMTE2Olx0XHR9XG4gMTE3Olx0XG4gMTE4Olx0XHQvKiAxNjAgYWNjb3VudHMgZm9yIDE2IGJ5dGUga2V5IGFuZCA0IGJ5dGUgc2FsdCAqL1xuIDExOTpcdFx0aWYgKGtleV9sZW4gXHUwMDNlIE5TSU1fSVBTRUNfQVVUSF9CSVRTKSB7XG4gMTIwOlx0XHRcdCpteXNhbHQgPSAoKF9fYmUzMiAqKWtleV9kYXRhKVs0XTtcbiAxMjE6XHRcdH0gZWxzZSBpZiAoa2V5X2xlbiA9PSBOU0lNX0lQU0VDX0FVVEhfQklUUykge1xuIDEyMjpcdFx0XHQqbXlzYWx0ID0gMDtcbiAxMjM6XHRcdH0gZWxzZSB7XG4gMTI0Olx0XHRcdG5ldGRldl9lcnIoZGV2LCBcJiMzNDtJUHNlYyBodyBvZmZsb2FkIG9ubHkgc3VwcG9ydHMgMTI4IGJpdCBrZXlzIHdpdGggb3B0aW9uYWwgMzIgYml0IHNhbHRcXG5cJiMzNDspO1xuIDEyNTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAxMjY6XHRcdH1cbiAxMjc6XHRcdG1lbWNweShteWtleSwga2V5X2RhdGEsIDE2KTtcbiAxMjg6XHRcbiAxMjk6XHRcdHJldHVybiAwO1xuIDEzMDpcdH1cbiAxMzE6XHRcbiAxMzI6XHRzdGF0aWMgaW50IG5zaW1faXBzZWNfYWRkX3NhKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gMTMzOlx0XHRcdFx0ICAgICBzdHJ1Y3QgeGZybV9zdGF0ZSAqeHMsXG4gMTM0Olx0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gMTM1Olx0e1xuIDEzNjpcdFx0c3RydWN0IG5zaW1faXBzZWMgKmlwc2VjO1xuIDEzNzpcdFx0c3RydWN0IG5ldGRldnNpbSAqbnM7XG4gMTM4Olx0XHRzdHJ1Y3QgbnNpbV9zYSBzYTtcbiAxMzk6XHRcdHUxNiBzYV9pZHg7XG4gMTQwOlx0XHRpbnQgcmV0O1xuIDE0MTpcdFxuIDE0MjpcdFx0bnMgPSBuZXRkZXZfcHJpdihkZXYpO1xuIDE0MzpcdFx0aXBzZWMgPSBcdTAwMjZucy1cdTAwM2VpcHNlYztcbiAxNDQ6XHRcbiAxNDU6XHRcdGlmICh4cy1cdTAwM2VpZC5wcm90byAhPSBJUFBST1RPX0VTUCBcdTAwMjZcdTAwMjYgeHMtXHUwMDNlaWQucHJvdG8gIT0gSVBQUk9UT19BSCkge1xuIDE0NjpcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtVbnN1cHBvcnRlZCBwcm90b2NvbCBmb3IgaXBzZWMgb2ZmbG9hZFwmIzM0Oyk7XG4gMTQ3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDE0ODpcdFx0fVxuIDE0OTpcdFxuIDE1MDpcdFx0aWYgKHhzLVx1MDAzZWNhbGcpIHtcbiAxNTE6XHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7Q29tcHJlc3Npb24gb2ZmbG9hZCBub3Qgc3VwcG9ydGVkXCYjMzQ7KTtcbiAxNTI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMTUzOlx0XHR9XG4gMTU0Olx0XG4gMTU1Olx0XHRpZiAoeHMtXHUwMDNleHNvLnR5cGUgIT0gWEZSTV9ERVZfT0ZGTE9BRF9DUllQVE8pIHtcbiAxNTY6XHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7VW5zdXBwb3J0ZWQgaXBzZWMgb2ZmbG9hZCB0eXBlXCYjMzQ7KTtcbiAxNTc6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMTU4Olx0XHR9XG4gMTU5Olx0XG4gMTYwOlx0XHQvKiBmaW5kIHRoZSBmaXJzdCB1bnVzZWQgaW5kZXggKi9cbiAxNjE6XHRcdHJldCA9IG5zaW1faXBzZWNfZmluZF9lbXB0eV9pZHgoaXBzZWMpO1xuIDE2MjpcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuIDE2MzpcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtObyBzcGFjZSBmb3IgU0EgaW4gUnggdGFibGUhXCYjMzQ7KTtcbiAxNjQ6XHRcdFx0cmV0dXJuIHJldDtcbiAxNjU6XHRcdH1cbiAxNjY6XHRcdHNhX2lkeCA9ICh1MTYpcmV0O1xuIDE2NzpcdFxuIDE2ODpcdFx0bWVtc2V0KFx1MDAyNnNhLCAwLCBzaXplb2Yoc2EpKTtcbiAxNjk6XHRcdHNhLnVzZWQgPSB0cnVlO1xuIDE3MDpcdFx0c2EueHMgPSB4cztcbiAxNzE6XHRcbiAxNzI6XHRcdGlmIChzYS54cy1cdTAwM2VpZC5wcm90byBcdTAwMjYgSVBQUk9UT19FU1ApXG4gMTczOlx0XHRcdHNhLmNyeXB0ID0geHMtXHUwMDNlZWFsZyB8fCB4cy1cdTAwM2VhZWFkO1xuIDE3NDpcdFxuIDE3NTpcdFx0LyogZ2V0IHRoZSBrZXkgYW5kIHNhbHQgKi9cbiAxNzY6XHRcdHJldCA9IG5zaW1faXBzZWNfcGFyc2VfcHJvdG9fa2V5cyhkZXYsIHhzLCBzYS5rZXksIFx1MDAyNnNhLnNhbHQpO1xuIDE3NzpcdFx0aWYgKHJldCkge1xuIDE3ODpcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtGYWlsZWQgdG8gZ2V0IGtleSBkYXRhIGZvciBTQSB0YWJsZVwmIzM0Oyk7XG4gMTc5Olx0XHRcdHJldHVybiByZXQ7XG4gMTgwOlx0XHR9XG4gMTgxOlx0XG4gMTgyOlx0XHRpZiAoeHMtXHUwMDNleHNvLmRpciA9PSBYRlJNX0RFVl9PRkZMT0FEX0lOKVxuIDE4MzpcdFx0XHRzYS5yeCA9IHRydWU7XG4gMTg0Olx0XG4gMTg1Olx0XHRpZiAoeHMtXHUwMDNlcHJvcHMuZmFtaWx5ID09IEFGX0lORVQ2KVxuIDE4NjpcdFx0XHRtZW1jcHkoc2EuaXBhZGRyLCBcdTAwMjZ4cy1cdTAwM2VpZC5kYWRkci5hNiwgMTYpO1xuIDE4NzpcdFx0ZWxzZVxuIDE4ODpcdFx0XHRtZW1jcHkoXHUwMDI2c2EuaXBhZGRyWzNdLCBcdTAwMjZ4cy1cdTAwM2VpZC5kYWRkci5hNCwgNCk7XG4gMTg5Olx0XG4gMTkwOlx0XHQvKiB0aGUgcHJlcGFyYXRpb25zIHdvcmtlZCwgc28gc2F2ZSB0aGUgaW5mbyAqL1xuIDE5MTpcdFx0bWVtY3B5KFx1MDAyNmlwc2VjLVx1MDAzZXNhW3NhX2lkeF0sIFx1MDAyNnNhLCBzaXplb2Yoc2EpKTtcbiAxOTI6XHRcbiAxOTM6XHRcdC8qIHRoZSBYRlJNIHN0YWNrIGRvZXNuJiMzOTt0IGxpa2Ugb2ZmbG9hZF9oYW5kbGUgPT0gMCxcbiAxOTQ6XHRcdCAqIHNvIGFkZCBhIGJpdGZsYWcgaW4gY2FzZSBvdXIgYXJyYXkgaW5kZXggaXMgMFxuIDE5NTpcdFx0ICovXG4gMTk2Olx0XHR4cy1cdTAwM2V4c28ub2ZmbG9hZF9oYW5kbGUgPSBzYV9pZHggfCBOU0lNX0lQU0VDX1ZBTElEO1xuIDE5NzpcdFx0aXBzZWMtXHUwMDNlY291bnQmIzQzOyYjNDM7O1xuIDE5ODpcdFxuIDE5OTpcdFx0cmV0dXJuIDA7XG4gMjAwOlx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjY0OQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDc2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOZXRkZXZzaW0gSVBzZWMgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCB0aGlzIHBhdGNoIGhhcyBjaGFuZ2VkLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGEgc2VyaWVzIG9mIG1vZGlmaWNhdGlvbnMgcHJpbWFyaWx5IGZvY3VzZWQgb24gdGhlIGBuZXRkZXZzaW1gJiMzOTtzIElQc2VjIGltcGxlbWVudGF0aW9uLgoKMS4gICoqRW5kaWFubmVzcyBNYXR0ZXJzOioqIFRoZSBpbml0aWFsIGNoYW5nZXMgYXJlIHN0cmFpZ2h0Zm9yd2FyZDogaXQmIzM5O3MgdXBkYXRpbmcgYHUzMiBrZXlbNF1gIGFuZCBgdTMyIHNhbHRgIHRvIHVzZSBiaWctZW5kaWFuIHJlcHJlc2VudGF0aW9ucyAoYF9fYmUzMiBrZXlbNF1gLCBgX19iZTMyIHNhbHRgKSBpbiBgbnNpbV9zYWAuIEl0IGFsc28gdXBkYXRlcyB0aGUgcGFyYW1ldGVyIHR5cGVzIGluIHRoZSBgbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzKClgIGZ1bmN0aW9uIHRvIHJlZmxlY3QgdGhpcyBlbmRpYW4gY2hhbmdlLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBuZXR3b3JrIHByb3RvY29scyB3aGVyZSBieXRlIG9yZGVyIGlzIHBhcmFtb3VudCBmb3IgZGF0YSBpbnRlcnByZXRhdGlvbi4gQWxzbywgdGhlIHBhdGNoIGNvbnZlcnRzIHRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiB3aXRoIGAoKF9fYmUzMiAqKWtleV9kYXRhKVs0XWAuCjIuICAqKkRlYnVnIE91dHB1dCBDb3JyZWN0bmVzczoqKiBJdCYjMzk7cyB0cmFuc2xhdGluZyB0aGUgaW50ZXJuYWwgYmlnLWVuZGlhbiByZXByZXNlbnRhdGlvbiB0byB0aGUgQ1BVJiMzOTtzIG5hdGl2ZSBieXRlIG9yZGVyIChgYmUzMl90b19jcHUoKWApIHdoZW4gcHJpbnRpbmcgdGhlIHNhbHQgYW5kIGtleSB2YWx1ZXMgaW4gYG5zaW1fZGJnX25ldGRldl9vcHNfcmVhZCgpYC4gVGhpcyBlbnN1cmVzIHRoZSBkZWJ1ZyBvdXRwdXQgaXMgaHVtYW4tcmVhZGFibGUgYW5kIGRvZXNuJiMzOTt0IGNvbmZ1c2UgdGhpbmdzLgozLiAgKipTZWxmdGVzdCBBZGp1c3RtZW50czoqKiBUaGUgZmluYWwgY2hhbmdlIGlzIGFuIHVwZGF0ZSB0byB0aGUgZXhwZWN0ZWQgb3V0cHV0IGZvcm1hdCBpbiB0aGUgYHJ0bmV0bGluay5zaGAgc2VsZi10ZXN0cyB0byBhY2NvbW1vZGF0ZSB0aGUgdXBkYXRlZCBkZWJ1ZyBvdXRwdXQgZm9ybWF0LiBUaGlzIGNvbmZpcm1zIHRoZSBpbXBhY3Qgb2YgdGhlIGVuZGlhbm5lc3MgY2hhbmdlIHByb3BhZ2F0ZXMgY29ycmVjdGx5LgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgbWVyaXRzIGZ1enppbmcuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhlcmUmIzM5O3MgZW5vdWdoIHBvdGVudGlhbCBmb3IgaW50cm9kdWNpbmcgYnVncyB0aGF0IGNvdWxkIGJlIGRpc2NvdmVyZWQgdGhyb3VnaCBmdXp6aW5nLgoKTXkgcHJpbWFyeSB0aG91Z2h0IGlzIHRoZSByZWFjaGFiaWxpdHkgcXVlc3Rpb24uIENhbiBJIGV2ZW4gZXhlcmNpc2UgdGhpcyBjb2RlPyBZZXMsIGBuZXRkZXZzaW1gIGlzIHBlcmZlY3QgZm9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgYW5kIEdDRSwgbWFraW5nIGl0IGlkZWFsIGZvciBmdXp6aW5nIGJlY2F1c2UgaXQmIzM5O3MgY29tcGxldGVseSB2aXJ0dWFsIGFuZCBhY2Nlc3NpYmxlLiBTeXprYWxsZXImIzM5O3MgZXh0ZW5zaXZlIHVzZSBpcyBhbm90aGVyIGdyZWF0IGluZGljYXRvci4KCklzIHRoZSBYRlJNIG9mZmxvYWQgcGF0aCByZWFjaGFibGU/IFllcywgYW5kIGl0JiMzOTtzIHJlYWNoYWJsZSB0aHJvdWdoIHhmcm0gbmV0bGluayAvIGlwc2VjIG9mZmxvYWQgbWVzc2FnZXMgKGBYRlJNX01TR19ORVdTQWAsIGB4ZG9fZGV2X3N0YXRlX2FkZGAgdmlhIGBuc2ltX3hmcm1kZXZfb3BzYCAvIGBuc2ltX2lwc2VjX2FkZF9zYWApLCBhbmQgYnkgcmVhZGluZyBkZWJ1Z2ZzIGBuc2ltX2RiZ19uZXRkZXZfb3BzX3JlYWRgLiBUaGlzIGlzIGEgc29saWQgY29ubmVjdGlvbiBhbmQgYSB2ZXJ5IGltcG9ydGFudCBhc3BlY3Qgb2YgdGhlIHdob2xlIHNldHVwLgoKKipXb3J0aEZ1enppbmcgQW5hbHlzaXM6KioKCiogICAqKlJlYWNoYWJpbGl0eToqKiBUaGUgY29kZSBpcyBjb21wbGV0ZWx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBlbnZpcm9ubWVudHMuIFRoaXMgaXMgYSBwcmltYXJ5IHBvc2l0aXZlIGNyaXRlcmlvbi4KKiAgICoqTkZDSS9SZWZhY3RvcmluZzoqKiBJIG5lZWQgdG8gYmUgc2tlcHRpY2FsIG9mIGFueSAmIzM0O25vIGZ1bmN0aW9uYWwgY2hhbmdlJiMzNDsgb3IgJiMzNDtyZWZhY3RvcmluZyYjMzQ7IGNsYWltcy4KKiAgICoqTmVnYXRpdmUgQ3JpdGVyaWE6KioKICAgICogICBObyBub24ta2VybmVsIGNoYW5nZXMuCiAgICAqICAgTm8gc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLCBhcyBpdCYjMzk7cyBzb2Z0d2FyZS1iYXNlZC4KICAgICogICBObyB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMuCiogICAqKlBvc2l0aXZlIENyaXRlcmlhOioqCiAgICAqICAgUmVhY2hhYmxlIGRyaXZlcnMgYW5kIHByb3RvY29scyAoTmV0bGluaywgZGVidWdmcywgZXRjLikuCiAgICAqICAgUmVzdHJ1Y3R1cmluZyBvZiBkYXRhIHN0cnVjdHVyZXMgKHRoZSBlbmRpYW4gY2hhbmdlIGlzIHNpZ25pZmljYW50KS4KCioqQ29uY2x1c2lvbjoqKiBJIHdvdWxkIHNheSB0aGlzIHBhdGNoICpkZWZpbml0ZWx5KiBqdXN0aWZpZXMgZnV6emluZyAoYFdvcnRoRnV6emluZyA9IHRydWVgKS4gVGhlIGNoYW5nZXMgdG91Y2ggY29yZSBrZXJuZWwgY29kZSAoYGRyaXZlcnMvbmV0YCksIGFmZmVjdCBkYXRhIHN0cnVjdHVyZXMgcmVsYXRlZCB0byBuZXR3b3JrIHByb3RvY29scyAoSVBzZWMsIFhGUk0pLCBhbmQgdGhlIHBhdGggaXMgcmVhZGlseSBhY2Nlc3NpYmxlLiBJIHNob3VsZCBpbnZlc3RpZ2F0ZSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIChERUJVR1xfRlMsIElORVQsIFhGUk1cX09GRkxPQUQsIGV0Yy4pIHRvIGNvbmZpcm0gYW55IGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIGFuZCBwb3RlbnRpYWwgbGltaXRhdGlvbnMgb2YgdGhlIG1vZHVsZS4gR2l2ZW4gdGhhdCB0aGUgWEZSTV9PRkZMT0FEIEtjb25maWcgb3B0aW9uIGlzIGEgZGVwZW5kZW5jeSBhbmQgYG5ldGRldnNpbS1vYmpzICYjNDM7PSBpcHNlYy5vYCB1c2VzIGl0IGluIHRoZSBNYWtlZmlsZSwgdGhhdCBpcyBhbiBvYnZpb3VzIGVudHJ5IHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWEZSTV9PRkZMT0FEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWc9NT1jb25maWcgWEZSTVxuLS1cbm5ldC94ZnJtL0tjb25maWctMTAtXG5uZXQveGZybS9LY29uZmlnOjExOmNvbmZpZyBYRlJNX09GRkxPQURcbm5ldC94ZnJtL0tjb25maWctMTItXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzIyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIFhGUk0gQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgemVybyBpbiBvbiBgbmV0L3hmcm0vS2NvbmZpZ2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBuYXZpZ2F0ZSBzdHJhaWdodCB0byBsaW5lIDExLiBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgZm9yIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24sIHBlcmhhcHMgcmVsYXRlZCB0byBhIHJlY2VudCBidWcgcmVwb3J0IG9yIGVuaGFuY2VtZW50IHJlcXVlc3QuIExpbmUgMTEgaXMgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIHNldHRpbmdzIGZvciB0aGUgWEZSTSBzdWJzeXN0ZW0gYXJlIGRlZmluZWQsIG9yIGEgbWFqb3IgZGVwZW5kZW5jeSBpcyBlc3RhYmxpc2hlZC4gSSBuZWVkIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGNvbnRleHQgc3Vycm91bmRpbmcgdGhhdCBsaW5lIHRvIHNlZSBob3cgaXQgYWZmZWN0cyB0aGUgc3BlY2lmaWMgZmVhdHVyZSBvciBpc3N1ZSBJJiMzOTttIHdvcmtpbmcgd2l0aC4gVGltZSB0byBzZWUgd2hhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBYRlJNIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0Y29uZmlnIFhGUk1cbiAgIDY6XHRcdGJvb2xcbiAgIDc6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgODpcdFx0c2VsZWN0IEdST19DRUxMU1xuICAgOTpcdFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXG4gIDEwOlx0XG4gIDExOlx0Y29uZmlnIFhGUk1fT0ZGTE9BRFxuICAxMjpcdFx0Ym9vbFxuICAxMzpcdFxuICAxNDpcdGNvbmZpZyBYRlJNX0FMR09cbiAgMTU6XHRcdHRyaXN0YXRlXG4gIDE2Olx0XHRzZWxlY3QgWEZSTVxuICAxNzpcdFx0c2VsZWN0IENSWVBUT1xuICAxODpcdFx0c2VsZWN0IENSWVBUT19BRUFEXG4gIDE5Olx0XHRzZWxlY3QgQ1JZUFRPX0hBU0hcbiAgMjA6XHRcdHNlbGVjdCBDUllQVE9fU0tDSVBIRVJcbiAgMjE6XHRcbiAgMjI6XHRpZiBJTkVUXG4gIDIzOlx0Y29uZmlnIFhGUk1fVVNFUlxuICAyNDpcdFx0dHJpc3RhdGUgXCYjMzQ7VHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVwmIzM0O1xuICAyNTpcdFx0c2VsZWN0IFhGUk1fQUxHT1xuICAyNjpcdFx0aGVscFxuICAyNzpcdFx0ICBTdXBwb3J0IGZvciBUcmFuc2Zvcm1hdGlvbihYRlJNKSB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXG4gIDI4Olx0XHQgIGxpa2UgSVBzZWMgdXNlZCBieSBuYXRpdmUgTGludXggdG9vbHMuXG4gIDI5Olx0XG4gIDMwOlx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODM5CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyBgWEZSTV9PRkZMT0FEYCBTZWxlY3Rpb24qKgoKQWxyaWdodCwgc28gdGhlIGNvZGUgaGFzIGxhbmRlZCBvbiBgWEZSTV9PRkZMT0FEYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgKndobyogaXMgY2hvb3NpbmcgdGhpcz8gV2hhdCYjMzk7cyBkcml2aW5nIHRoaXMgc2VsZWN0aW9uPyYjMzQ7IEkmIzM5O20gaW1tZWRpYXRlbHkgdHJ5aW5nIHRvIHRyYWNlIGJhY2sgdGhlIGRlY2lzaW9uIHBhdGguIElzIGl0IGEgZGVmYXVsdCBjb25maWd1cmF0aW9uLCBhIHNwZWNpZmljIHVzZXIgc2V0dGluZywgb3Igc29tZXRoaW5nIGRldGVybWluZWQgZHluYW1pY2FsbHkgYmFzZWQgb24gdGhlIHN5c3RlbSYjMzk7cyBjYXBhYmlsaXRpZXM/IEtub3dpbmcgdGhlIHNvdXJjZSBpcyBjcnVjaWFsLgoKSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgdmFyaW91cyBrZXJuZWwgbW9kdWxlcywgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgbmV0d29yayBpbnRlcmZhY2Ugc2V0dGluZ3MgdGhhdCBjb3VsZCBpbmZsdWVuY2UgdGhpcyBjaG9pY2UuIElzIGl0IHRoZSBoYXJkd2FyZSBpdHNlbGYgc2lnbmFsaW5nIG9mZmxvYWQgY2FwYWJpbGl0aWVzPyBJcyB0aGVyZSBhIHBvbGljeSBzZXR0aW5nIGNvbmZpZ3VyZWQgaW4gdGhlIFhGUk0gc3Vic3lzdGVtIHRoYXQgaXMgZGlyZWN0aW5nIHRoZSB1c2Ugb2YgYW4gb2ZmbG9hZCBlbmdpbmU/IE9yIGhhcyBzb21lIGFwcGxpY2F0aW9uIHJlcXVlc3RlZCBpdCB0aHJvdWdoIHNvbWUgc3BlY2lmaWMgc29ja2V0IG9wdGlvbiBvciBpbnRlcmZhY2U/CgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gV2hhdCYjMzk7cyB0aGUgdGFyZ2V0IHNjZW5hcmlvPyBJcyB0aGlzIGZvciBhIHNwZWNpZmljIFZQTiB0dW5uZWwgc2V0dXAsIGEgYnVsayBkYXRhIHRyYW5zZmVyLCBvciBzb21lIG90aGVyIG5ldHdvcmstaW50ZW5zaXZlIGFwcGxpY2F0aW9uPyBUaGUgY29udGV4dCB3aWxsIHJldmVhbCB0aGUgcmVsZXZhbnQgZGVjaXNpb24gZmFjdG9ycy4gVGhlIHNwZWNpZmljIG5ldHdvcmsgdHJhZmZpYyBwYXR0ZXJucyB3b3VsZCBwcm92aWRlIGltcG9ydGFudCBjb250ZXh0LgoKTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIHRoZSBjb25kaXRpb25hbCBsb2dpYyBmb3IgdGhpcyBjaG9pY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSBpdCYjMzk7cyBiZWVuIHRyaWdnZXJlZC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgZmxhZ3MsIHBhcmFtZXRlcnMsIGFuZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCBhcmUgbGVhZGluZyB0byB0aGlzIHBhcnRpY3VsYXIgY29kZSBwYXRoLiBJIHdhbnQgdG8gaWRlbnRpZnkgYW55IHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgb3IgY29uc3RyYWludHMgdGhhdCBjb21lIGFsb25nIHdpdGggZW5hYmxpbmcgb2ZmbG9hZC4gRmluYWxseSBJIHdpbGwgZW5zdXJlIHRoaXMgY29kZSB3b24mIzM5O3QgY2F1c2UgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uIG9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gSXQgbmVlZHMgdG8gYmUgdGhlIHJpZ2h0IGNob2ljZSBmb3IgdGhlIHNpdHVhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IFhGUk1fT0ZGTE9BRCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTM2OT1jb25maWcgSU5FVF9FU1BfT0ZGTE9BRFxuLS1cbm5ldC9pcHY0L0tjb25maWctMzcxLVx0ZGVwZW5kcyBvbiBJTkVUX0VTUFxubmV0L2lwdjQvS2NvbmZpZzozNzI6XHRzZWxlY3QgWEZSTV9PRkZMT0FEXG5uZXQvaXB2NC9LY29uZmlnLTM3My1cdGRlZmF1bHQgblxuLS1cbm5ldC9pcHY2L0tjb25maWc9Nzc9Y29uZmlnIElORVQ2X0VTUF9PRkZMT0FEXG4tLVxubmV0L2lwdjYvS2NvbmZpZy03OS1cdGRlcGVuZHMgb24gSU5FVDZfRVNQXG5uZXQvaXB2Ni9LY29uZmlnOjgwOlx0c2VsZWN0IFhGUk1fT0ZGTE9BRFxubmV0L2lwdjYvS2NvbmZpZy04MS1cdGRlZmF1bHQgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTM4OQoJCQkJCQkJb3V0cHV0OiAyMDYKCQkJCQkJCXRob3VnaHRzOiA2ODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoIGZvciBOZXRkZXZzaW0gSVBzZWMgT2ZmbG9hZCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCB0aGUgbmV0ZGV2c2ltIGRyaXZlciwgc3BlY2lmaWNhbGx5IGl0cyBJUHNlYyBvZmZsb2FkIGZ1bmN0aW9uYWxpdHkuIEZpcnN0LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBkZXBlbmRlbmNpZXMuIGBYRlJNX09GRkxPQURgIGlzIHRoZSBjb3JlIGhlcmUsIGVuYWJsZWQgYnkgZWl0aGVyIGBJTkVUX0VTUF9PRkZMT0FEYCBvciBgSU5FVDZfRVNQX09GRkxPQURgLiAgQW5kIGBORVRERVZTSU1gIHJlcXVpcmVzIGBERUJVR19GU2AgYW5kIGBJTkVUYC4gYElORVRfRVNQX09GRkxPQURgIGFsc28gbmVlZHMgYElORVRfRVNQYC4gIGBYRlJNX09GRkxPQURgIGlzIGl0cyBvd24gY29uZmlnIG9wdGlvbiBhcyB3ZWxsLCBpbmRlcGVuZGVudCBvZiB0aG9zZS4gTGV0JiMzOTtzIG1ha2UgYSBub3RlIG9mIHRoZSBjb25maWdzIGludm9sdmVkOiBgTkVUREVWU0lNYCwgYFhGUk1fT0ZGTE9BRGAsIGBJTkVUX0VTUF9PRkZMT0FEYCwgYW5kIGBERUJVR19GU2AuCgpOZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzICphY3R1YWxseSogYmVpbmcgbW9kaWZpZWQuIExvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IHNlZW1zIHRoZSBwYXRjaCBpcyB0b3VjaGluZyB0aGVzZSBmdW5jdGlvbnM6IGBuc2ltX2RiZ19uZXRkZXZfb3BzX3JlYWRgLCBgbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzYCwgYG5zaW1faXBzZWNfYWRkX3NhYCwgYW5kIGBuc2ltX2lwc2VjX3R4YC4gTm93LCBsZXQmIzM5O3Mgc2VlIGlmIHRob3NlIGFyZSB0aGUgKm9ubHkqIGZ1bmN0aW9ucyBpbiBgZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmNgLiBBbHJpZ2h0LCBsb29rcyBsaWtlIHRoZXJlIGFyZSBvdGhlciBmdW5jdGlvbnMgdGhlcmUsIGJ1dCB0aGVzZSBhcmUgdGhlIG9uZXMgYmVpbmcgZGlyZWN0bHkgY2hhbmdlZC4gYG5zaW1faXBzZWNfYWRkX3NhYCBjYWxscyBgbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzYCBhbmQgc2V0cyB1cCBgbnNpbV9zYWAsIGdvdCBpdC4KCkFyZSBhbnkgb2YgdGhlc2UgZnVuY3Rpb25zIHdpZGVseSB1c2VkPyBObywgdGhleSBzZWVtIHNwZWNpZmljIHRvIHRoZSBuZXRkZXZzaW0gSVBzZWMgb2ZmbG9hZCBwYXRoLgoKQWxyaWdodCwgbm93IGxldCYjMzk7cyB0aGluayB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMuIFRoaXMgcGF0Y2ggZml4ZXMgZW5kaWFubmVzcyBpc3N1ZXMgaW4gdGhlIGhhbmRsaW5nIG9mIElQc2VjIGtleXMgYW5kIHNhbHQgd2l0aGluIG5ldGRldnNpbS4gSXQgdXBkYXRlcyB0aGUgU0EgZGF0YSB0eXBlcyB0byBgX19iZTMyYCwgY29ycmVjdC4gYG5zaW1faXBzZWNfcGFyc2VfcHJvdG9fa2V5cygpYCBpcyBmaXhlZC4gSXQgYWxzbyBjbGVhbnMgdXAgdGhlIHZhbHVlIGNvbnZlcnNpb25zIGluIGBuc2ltX2RiZ19uZXRkZXZfb3BzX3JlYWRgLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHRocm91Z2ggWEZSTSBuZXRsaW5rIGFuZCBkZWJ1Z2ZzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFNvIHllcywgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIEl0JiMzOTtzIGluIGEgcGF0aCB0aGF0JiMzOTtzIHVzZWQsIGJ1dCBub3QgbmVjZXNzYXJpbHkgYSAmIzM0O2NvcmUmIzM0OyBuZXR3b3JraW5nIGNvbXBvbmVudC4KCk9rYXksIGxldCYjMzk7cyBzdW1tYXJpemU6Ci0gICBgV29ydGhGdXp6aW5nYDogVHJ1ZS4KLSAgIGBSZWFzb25pbmdgOiBUaGUgcGF0Y2ggYWRkcmVzc2VzIGVuZGlhbm5lc3MgaXNzdWVzIGluIG5ldGRldnNpbSYjMzk7cyBJUHNlYyBrZXkgYW5kIHNhbHQgaGFuZGxpbmcuICBUaGUgcGF0Y2ggdXBkYXRlcyBTQSBkYXRhIHR5cGVzIHRvIGBfX2JlMzJgLCBmaXhpbmcgYG5zaW1faXBzZWNfcGFyc2VfcHJvdG9fa2V5cygpYCBhbmQgY2xlYW5pbmcgdXAgdmFsdWUgY29udmVyc2lvbnMgaW4gYG5zaW1fZGJnX25ldGRldl9vcHNfcmVhZCgpYC4gIFRoaXMgY29kZSBpcyB1c2VkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhY2Nlc3NpYmxlIHZpYSBYRlJNIG5ldGxpbmsgYW5kIGRlYnVnZnMuCi0gICBgRW5hYmxlQ29uZmlnc2A6IGBORVRERVZTSU1gLCBgWEZSTV9PRkZMT0FEYCwgYElORVRfRVNQX09GRkxPQURgLCBgREVCVUdfRlNgCi0gICBgRm9jdXNTeW1ib2xzYDogYG5zaW1fZGJnX25ldGRldl9vcHNfcmVhZGAsIGBuc2ltX2lwc2VjX3BhcnNlX3Byb3RvX2tleXNgLCBgbnNpbV9pcHNlY19hZGRfc2FgCgpGaW5hbGx5LCBsZXQmIzM5O3MgZG91YmxlIGNoZWNrIHRoYXQgbXkgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzIGFyZSBpbiB0aGUgY29ycmVjdCBmb3JtYXQuLi4geWVwLCBsaXN0IG9mIHN0cmluZ3MsIGxpc3Qgb2Ygc3RyaW5ncywgc3RyaW5nLCBib29sZWFuLiBHb29kIHRvIGdvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUREVWU0lNJiMzNDssCiAgICAmIzM0O1hGUk1fT0ZGTE9BRCYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUF9PRkZMT0FEJiMzNDssCiAgICAmIzM0O0RFQlVHX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bnNpbV9kYmdfbmV0ZGV2X29wc19yZWFkJiMzNDssCiAgICAmIzM0O25zaW1faXBzZWNfcGFyc2VfcHJvdG9fa2V5cyYjMzQ7LAogICAgJiMzNDtuc2ltX2lwc2VjX2FkZF9zYSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb3JyZWN0cyBlbmRpYW5uZXNzIGhhbmRsaW5nIG9mIElQc2VjIGtleXMgYW5kIHNhbHQgaW4gdGhlIG5ldGRldnNpbSBzaW11bGF0ZWQgZGV2aWNlIGRyaXZlciwgbW9kaWZ5aW5nIG5zaW1fc2EgZmllbGQgdHlwZXMgdG8gX19iZTMyLCBhZGp1c3Rpbmcga2V5L3NhbHQgcGFyc2luZyBpbiBuc2ltX2lwc2VjX3BhcnNlX3Byb3RvX2tleXMsIGFuZCBieXRlLXN3YXBwaW5nIHZhbHVlcyBmb3IgZGVidWdmcyBvdXRwdXQgaW4gbnNpbV9kYmdfbmV0ZGV2X29wc19yZWFkLiBOZXRkZXZzaW0gaXMgYSBzb2Z0d2FyZS1zaW11bGF0ZWQgZGV2aWNlIGRyaXZlciByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBuZXRsaW5rIChYRlJNIHN0YXRlIG9wZXJhdGlvbnMpIGFuZCBkZWJ1Z2ZzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRERVZTSU0mIzM0OywKICAgICYjMzQ7WEZSTV9PRkZMT0FEJiMzNDssCiAgICAmIzM0O0lORVRfRVNQX09GRkxPQUQmIzM0OywKICAgICYjMzQ7REVCVUdfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuc2ltX2RiZ19uZXRkZXZfb3BzX3JlYWQmIzM0OywKICAgICYjMzQ7bnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzJiMzNDssCiAgICAmIzM0O25zaW1faXBzZWNfYWRkX3NhJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvcnJlY3RzIGVuZGlhbm5lc3MgaGFuZGxpbmcgb2YgSVBzZWMga2V5cyBhbmQgc2FsdCBpbiB0aGUgbmV0ZGV2c2ltIHNpbXVsYXRlZCBkZXZpY2UgZHJpdmVyLCBtb2RpZnlpbmcgbnNpbV9zYSBmaWVsZCB0eXBlcyB0byBfX2JlMzIsIGFkanVzdGluZyBrZXkvc2FsdCBwYXJzaW5nIGluIG5zaW1faXBzZWNfcGFyc2VfcHJvdG9fa2V5cywgYW5kIGJ5dGUtc3dhcHBpbmcgdmFsdWVzIGZvciBkZWJ1Z2ZzIG91dHB1dCBpbiBuc2ltX2RiZ19uZXRkZXZfb3BzX3JlYWQuIE5ldGRldnNpbSBpcyBhIHNvZnR3YXJlLXNpbXVsYXRlZCBkZXZpY2UgZHJpdmVyIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIG5ldGxpbmsgKFhGUk0gc3RhdGUgb3BlcmF0aW9ucykgYW5kIGRlYnVnZnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjU4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6NTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBlbmRpYW5uZXNzIGhhbmRsaW5nIG9mIElQc2VjIGtleXMgYW5kIHNhbHQgdmFsdWVzIGluIG5ldGRldnNpbSBieSBjaGFuZ2luZyB0aGUgdHlwZSBhbm5vdGF0aW9ucyBmcm9tIHUzMiB0byBfX2JlMzIgYW5kIGNvbnZlcnRpbmcgdGhlbSB3aXRoIGJlMzJfdG9fY3B1KCkgd2hlbiBmb3JtYXR0aW5nIGRlYnVnZnMgb3V0cHV0LiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3QgcGFkZGluZyBjaGFuZ2VzLCBjb3BpZXMgb2YgcmF3IGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZSwgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGFyZSBpbnRyb2R1Y2VkLiBBbGwgYnVmZmVycyBhbmQgc3RydWN0dXJlcyBpbiBuZXRkZXZzaW0gSVBzZWMgY29kZSByZW1haW4gcHJvcGVybHkgaW5pdGlhbGl6ZWQgdmlhIG1lbXNldC9remFsbG9jLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDRjNTM1YTFlODhkMWRhYzFhNTRjYTU3NzcyMGRmYTI4M2JhM2UxMjgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDE3OjU3OjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYwppbmRleCAzNmExYmU0OTIzZDYxLi41NzIyODM3YmNkYTM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYwpAQCAtNTAsMTEgJiM0Mzs1MCwxMSBAQCBzdGF0aWMgc3NpemVfdCBuc2ltX2RiZ19uZXRkZXZfb3BzX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsCiAJCXAgJiM0Mzs9IHNjbnByaW50ZihwLCBidWZzaXplIC0gKHAgLSBidWYpLAogCQkJICAgICAgICYjMzQ7c2FbJWldICAgIHNwaT0weCUwOHggcHJvdG89MHgleCBzYWx0PTB4JTA4eCBjcnlwdD0lZFxuJiMzNDssCiAJCQkgICAgICAgaSwgYmUzMl90b19jcHUoc2FwLSZndDt4cy0mZ3Q7aWQuc3BpKSwKLQkJCSAgICAgICBzYXAtJmd0O3hzLSZndDtpZC5wcm90bywgc2FwLSZndDtzYWx0LCBzYXAtJmd0O2NyeXB0KTsKJiM0MzsJCQkgICAgICAgc2FwLSZndDt4cy0mZ3Q7aWQucHJvdG8sIGJlMzJfdG9fY3B1KHNhcC0mZ3Q7c2FsdCksIHNhcC0mZ3Q7Y3J5cHQpOwogCQlwICYjNDM7PSBzY25wcmludGYocCwgYnVmc2l6ZSAtIChwIC0gYnVmKSwKIAkJCSAgICAgICAmIzM0O3NhWyVpXSAgICBrZXk9MHglMDh4ICUwOHggJTA4eCAlMDh4XG4mIzM0OywKLQkJCSAgICAgICBpLCBzYXAtJmd0O2tleVswXSwgc2FwLSZndDtrZXlbMV0sCi0JCQkgICAgICAgc2FwLSZndDtrZXlbMl0sIHNhcC0mZ3Q7a2V5WzNdKTsKJiM0MzsJCQkgICAgICAgaSwgYmUzMl90b19jcHUoc2FwLSZndDtrZXlbMF0pLCBiZTMyX3RvX2NwdShzYXAtJmd0O2tleVsxXSksCiYjNDM7CQkJICAgICAgIGJlMzJfdG9fY3B1KHNhcC0mZ3Q7a2V5WzJdKSwgYmUzMl90b19jcHUoc2FwLSZndDtrZXlbM10pKTsKIAl9CiAKIAlsZW4gPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcihidWZmZXIsIGNvdW50LCBwcG9zLCBidWYsIHAgLSBidWYpOwpAQCAtODcsNyAmIzQzOzg3LDcgQEAgc3RhdGljIGludCBuc2ltX2lwc2VjX2ZpbmRfZW1wdHlfaWR4KHN0cnVjdCBuc2ltX2lwc2VjICppcHNlYykKIAogc3RhdGljIGludCBuc2ltX2lwc2VjX3BhcnNlX3Byb3RvX2tleXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgICAgICAgc3RydWN0IHhmcm1fc3RhdGUgKnhzLAotCQkJCSAgICAgICB1MzIgKm15a2V5LCB1MzIgKm15c2FsdCkKJiM0MzsJCQkJICAgICAgIF9fYmUzMiAqbXlrZXksIF9fYmUzMiAqbXlzYWx0KQogewogCWNvbnN0IGNoYXIgYWVzX2djbV9uYW1lW10gPSAmIzM0O3JmYzQxMDYoZ2NtKGFlcykpJiMzNDs7CiAJdW5zaWduZWQgY2hhciAqa2V5X2RhdGE7CkBAIC0xMTcsNyAmIzQzOzExNyw3IEBAIHN0YXRpYyBpbnQgbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAKIAkvKiAxNjAgYWNjb3VudHMgZm9yIDE2IGJ5dGUga2V5IGFuZCA0IGJ5dGUgc2FsdCAqLwogCWlmIChrZXlfbGVuICZndDsgTlNJTV9JUFNFQ19BVVRIX0JJVFMpIHsKLQkJKm15c2FsdCA9ICgodTMyICopa2V5X2RhdGEpWzRdOwomIzQzOwkJKm15c2FsdCA9ICgoX19iZTMyICopa2V5X2RhdGEpWzRdOwogCX0gZWxzZSBpZiAoa2V5X2xlbiA9PSBOU0lNX0lQU0VDX0FVVEhfQklUUykgewogCQkqbXlzYWx0ID0gMDsKIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oCmluZGV4IDU1YWVjNDEyMzdiOWIuLmE4MmE2ODUzODRlNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgKQEAgLTQyLDggJiM0Mzs0Miw4IEBACiBzdHJ1Y3QgbnNpbV9zYSB7CiAJc3RydWN0IHhmcm1fc3RhdGUgKnhzOwogCV9fYmUzMiBpcGFkZHJbNF07Ci0JdTMyIGtleVs0XTsKLQl1MzIgc2FsdDsKJiM0MzsJX19iZTMyIGtleVs0XTsKJiM0MzsJX19iZTMyIHNhbHQ7CiAJYm9vbCB1c2VkOwogCWJvb2wgY3J5cHQ7CiAJYm9vbCByeDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnNoCmluZGV4IGFjZTNhOTkwMjNlZDAuLjQ4NDNkNDc0NTM4ZjQgMTAwNzU1Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsuc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5zaApAQCAtOTMyLDExICYjNDM7OTMyLDExIEBAIGtjaV90ZXN0X2lwc2VjX29mZmxvYWQoKQogCXJ1bl9jbWQgZGlmZiAkc3lzZnNmIC0gJmx0OyZsdDsgRU9GCiBTQSBjb3VudD0yIHR4PTMKIHNhWzBdIHR4IGlwYWRkcj0kZHN0aXAKLXNhWzBdICAgIHNwaT0weDAwMDAwMDA5IHByb3RvPTB4MzIgc2FsdD0weDYxNjI2MzY0IGNyeXB0PTEKLXNhWzBdICAgIGtleT0weDM0MzMzMjMxIDM4MzczNjM1IDMyMzEzMDM5IDM2MzUzNDMzCiYjNDM7c2FbMF0gICAgc3BpPTB4MDAwMDAwMDkgcHJvdG89MHgzMiBzYWx0PTB4NjQ2MzYyNjEgY3J5cHQ9MQomIzQzO3NhWzBdICAgIGtleT0weDMxMzIzMzM0IDM1MzYzNzM4IDM5MzAzMTMyIDMzMzQzNTM2CiBzYVsxXSByeCBpcGFkZHI9JHNyY2lwCi1zYVsxXSAgICBzcGk9MHgwMDAwMDAwOSBwcm90bz0weDMyIHNhbHQ9MHg2MTYyNjM2NCBjcnlwdD0xCi1zYVsxXSAgICBrZXk9MHgzNDMzMzIzMSAzODM3MzYzNSAzMjMxMzAzOSAzNjM1MzQzMwomIzQzO3NhWzFdICAgIHNwaT0weDAwMDAwMDA5IHByb3RvPTB4MzIgc2FsdD0weDY0NjM2MjYxIGNyeXB0PTEKJiM0MztzYVsxXSAgICBrZXk9MHgzMTMyMzMzNCAzNTM2MzczOCAzOTMwMzEzMiAzMzM0MzUzNgogRU9GCiAJaWYgWyAkPyAtbmUgMCBdIDsgdGhlbgogCQllbmRfdGVzdCAmIzM0O0ZBSUw6IGlwc2VjX29mZmxvYWQgaW5jb3JyZWN0IGRyaXZlciBkYXRhJiMzNDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzODIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBzZWUgaWYgd2UgbmVlZCB0byBicmluZyBpbiBLTVNBTi4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggaXMgYWN0dWFsbHkgY2hhbmdpbmcuIEkgc2VlIGl0JiMzOTtzIHRvdWNoaW5nIGBkcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuY2AgYW5kIGBkcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmhgLCBhbG9uZyB3aXRoIGEgc2VsZnRlc3Qgc2NyaXB0LiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4KCkxvb2tpbmcgYXQgYGRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jYCwgSSBub3RpY2UgbW9kaWZpY2F0aW9ucyBpbiB0aGUgYG5zaW1fZGJnX25ldGRldl9vcHNfcmVhZGAgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgdGhleSBhcmUgY2hhbmdpbmcgdGhlIHdheSBgc2FwLSZndDtzYWx0YCBhbmQgYHNhcC0mZ3Q7a2V5Wy4uLl1gIGFyZSBwcmludGVkLCBub3cgdXNpbmcgYGJlMzJfdG9fY3B1KC4uLilgLiBTZWVtcyBsaWtlIGFuIGVuZGlhbm5lc3MgY29udmVyc2lvbiB1cGRhdGUsIHdoaWNoICpjb3VsZCogaW5kaWNhdGUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBuZXR3b3JrLXJlbGF0ZWQgZGF0YSwgb3IgYXQgbGVhc3QgZGF0YSB0aGF0JiMzOTtzIGV4cGVjdGVkIHRvIGJlIGVuZGlhbi1zZW5zaXRpdmUuIE1ha2VzIHNlbnNlIGZvciBuZXR3b3JrIHNpbXVsYXRpb24uCgpUaGVuLCB0aGVyZSYjMzk7cyB0aGUgYG5zaW1faXBzZWNfcGFyc2VfcHJvdG9fa2V5c2AgZnVuY3Rpb24uIEkgc2VlIHRoZSBwcm90b3R5cGUgZm9yIGBteWtleWAgYW5kIGBteXNhbHRgIGlzIGJlaW5nIGNoYW5nZWQgdG8gYF9fYmUzMiAqYCwgYW5kIHRoZSBjYXN0IGAoKHUzMiAqKWtleV9kYXRhKVs0XWAgaXMgbm93IGAoKF9fYmUzMiAqKWtleV9kYXRhKVs0XWAuIEFnYWluLCB0aGlzIHJlaW5mb3JjZXMgdGhlIGVuZGlhbm5lc3MgdXBkYXRlLCBidXQgYWxzbyBzdWdnZXN0cyB0aGUgdW5kZXJseWluZyBkYXRhLCB0aGUgYGtleV9kYXRhYCwgbWlnaHQgYmUgY2hhbmdpbmcgdHlwZXMuIEkgaGF2ZSB0byBzZWUgaG93IGl0IGlzIHVzZWQuCgpJbiBgZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oYCwgSSBzZWUgdGhlIGBzdHJ1Y3QgbnNpbV9zYWAgZmllbGRzIGBrZXlgIGFuZCBgc2FsdGAgYXJlIGJlaW5nIHVwZGF0ZWQgZnJvbSBgdTMyYCB0byBgX19iZTMyYC4gU28sIHRoaXMgaXMgd2hlcmUgdGhlICphY3R1YWwqIHR5cGUgY2hhbmdlIGlzIGhhcHBlbmluZywgYW5kIGl0JiMzOTtzIGJlaW5nIHByb3BhZ2F0ZWQgdGhyb3VnaG91dC4gTm93IEkgZ2V0IGl0OiBlbmRpYW5uZXNzIGlzIGJlaW5nIGJha2VkIGludG8gdGhlIGRhdGEgdHlwZXMgdGhlbXNlbHZlcy4gVGhpcyBzaG91bGQgcmVkdWNlIHRoZSBuZWVkIGZvciBjYXN0aW5nLCBhbmQgZW5zdXJlIHRoYXQgdGhlIHJpZ2h0IGRhdGEgaXMgaW4gdGhlIHJpZ2h0IGJ5dGUgb3JkZXIgYXQgZXZlcnkgc3RhZ2Ugb2YgcHJvY2Vzc2luZy4KCkZpbmFsbHksIHRoZSBzZWxmdGVzdCBzY3JpcHQgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsuc2hgIGhhcyBhbiB1cGRhdGUgZm9yIGVuZGlhbm5lc3MgaW4gdGhlIG91dHB1dCBmb3IgZGVidWdmcy9zeXNmcyBkdW1wcy4gQ2xlYXJseSwgdGhleSBhcmUgdXBkYXRpbmcgdGhlIGVuZGlhbm5lc3Mgb2YgdGhlIG91dHB1dC4gVGhhdCYjMzk7cyBnb29kIHRlc3RpbmcuCgpOb3csIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBkcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuY2AsIGZvY3VzaW5nIHNwZWNpZmljYWxseSBhcm91bmQgYG5zaW1faXBzZWNfcGFyc2VfcHJvdG9fa2V5c2AgYW5kIGl0cyBjYWxsZXJzLiBHb3R0YSBtYWtlIHN1cmUgdGhpcyBjaGFuZ2UgaXMgc2FmZS4gSSBuZWVkIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cgdG8gZW5zdXJlIG5vdGhpbmcgaXMgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBhZnRlciB0aGVzZSBjaGFuZ2VzLiBFbmRpYW5uZXNzIGlzIGEgY29tbW9uIHNvdXJjZSBvZiBidWdzIGlmIG5vdCBoYW5kbGVkIHByb3Blcmx5LCBzbyBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBkZXZlbG9wZXJzIGhhdmUgaGFuZGxlZCBhbGwgdGhlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQvKiBDb3B5cmlnaHQoYykgMjAxOCBPcmFjbGUgYW5kL29yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAqL1xuICAgMzpcdFxuICAgNDpcdCNpbmNsdWRlIFx1MDAzY2NyeXB0by9hZWFkLmhcdTAwM2VcbiAgIDU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWJ1Z2ZzLmhcdTAwM2VcbiAgIDY6XHQjaW5jbHVkZSBcdTAwM2NuZXQveGZybS5oXHUwMDNlXG4gICA3Olx0XG4gICA4Olx0I2luY2x1ZGUgXCYjMzQ7bmV0ZGV2c2ltLmhcJiMzNDtcbiAgIDk6XHRcbiAgMTA6XHQjZGVmaW5lIE5TSU1fSVBTRUNfQVVUSF9CSVRTXHQxMjhcbiAgMTE6XHRcbiAgMTI6XHRzdGF0aWMgc3NpemVfdCBuc2ltX2RiZ19uZXRkZXZfb3BzX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsXG4gIDEzOlx0XHRcdFx0XHRcdGNoYXIgX191c2VyICpidWZmZXIsXG4gIDE0Olx0XHRcdFx0XHRcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxuICAxNTpcdHtcbiAgMTY6XHRcdHN0cnVjdCBuZXRkZXZzaW0gKm5zID0gZmlscC1cdTAwM2Vwcml2YXRlX2RhdGE7XG4gIDE3Olx0XHRzdHJ1Y3QgbnNpbV9pcHNlYyAqaXBzZWMgPSBcdTAwMjZucy1cdTAwM2VpcHNlYztcbiAgMTg6XHRcdHNpemVfdCBidWZzaXplO1xuICAxOTpcdFx0Y2hhciAqYnVmLCAqcDtcbiAgMjA6XHRcdGludCBsZW47XG4gIDIxOlx0XHRpbnQgaTtcbiAgMjI6XHRcbiAgMjM6XHRcdC8qIHRoZSBidWZmZXIgbmVlZGVkIGlzXG4gIDI0Olx0XHQgKiAobnVtIFNBcyAqIDMgbGluZXMgZWFjaCAqIH42MCBieXRlcyBwZXIgbGluZSkgJiM0Mzsgb25lIG1vcmUgbGluZVxuICAyNTpcdFx0ICovXG4gIDI2Olx0XHRidWZzaXplID0gKGlwc2VjLVx1MDAzZWNvdW50ICogNCAqIDYwKSAmIzQzOyA2MDtcbiAgMjc6XHRcdGJ1ZiA9IGt6YWxsb2MoYnVmc2l6ZSwgR0ZQX0tFUk5FTCk7XG4gIDI4Olx0XHRpZiAoIWJ1ZilcbiAgMjk6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gIDMwOlx0XG4gIDMxOlx0XHRwID0gYnVmO1xuICAzMjpcdFx0cCAmIzQzOz0gc2NucHJpbnRmKHAsIGJ1ZnNpemUgLSAocCAtIGJ1ZiksXG4gIDMzOlx0XHRcdCAgICAgICBcJiMzNDtTQSBjb3VudD0ldSB0eD0ldVxcblwmIzM0OyxcbiAgMzQ6XHRcdFx0ICAgICAgIGlwc2VjLVx1MDAzZWNvdW50LCBpcHNlYy1cdTAwM2V0eCk7XG4gIDM1Olx0XG4gIDM2Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOU0lNX0lQU0VDX01BWF9TQV9DT1VOVDsgaSYjNDM7JiM0MzspIHtcbiAgMzc6XHRcdFx0c3RydWN0IG5zaW1fc2EgKnNhcCA9IFx1MDAyNmlwc2VjLVx1MDAzZXNhW2ldO1xuICAzODpcdFxuICAzOTpcdFx0XHRpZiAoIXNhcC1cdTAwM2V1c2VkKVxuICA0MDpcdFx0XHRcdGNvbnRpbnVlO1xuICA0MTpcdFxuICA0MjpcdFx0XHRpZiAoc2FwLVx1MDAzZXhzLVx1MDAzZXByb3BzLmZhbWlseSA9PSBBRl9JTkVUNilcbiAgNDM6XHRcdFx0XHRwICYjNDM7PSBzY25wcmludGYocCwgYnVmc2l6ZSAtIChwIC0gYnVmKSxcbiAgNDQ6XHRcdFx0XHRcdCAgICAgICBcJiMzNDtzYVslaV0gJWN4IGlwYWRkcj0lcEk2Y1xcblwmIzM0OyxcbiAgNDU6XHRcdFx0XHRcdCAgICAgICBpLCAoc2FwLVx1MDAzZXJ4ID8gJiMzOTtyJiMzOTsgOiAmIzM5O3QmIzM5OyksIFx1MDAyNnNhcC1cdTAwM2VpcGFkZHIpO1xuICA0NjpcdFx0XHRlbHNlXG4gIDQ3Olx0XHRcdFx0cCAmIzQzOz0gc2NucHJpbnRmKHAsIGJ1ZnNpemUgLSAocCAtIGJ1ZiksXG4gIDQ4Olx0XHRcdFx0XHQgICAgICAgXCYjMzQ7c2FbJWldICVjeCBpcGFkZHI9JXBJNFxcblwmIzM0OyxcbiAgNDk6XHRcdFx0XHRcdCAgICAgICBpLCAoc2FwLVx1MDAzZXJ4ID8gJiMzOTtyJiMzOTsgOiAmIzM5O3QmIzM5OyksIFx1MDAyNnNhcC1cdTAwM2VpcGFkZHJbM10pO1xuICA1MDpcdFx0XHRwICYjNDM7PSBzY25wcmludGYocCwgYnVmc2l6ZSAtIChwIC0gYnVmKSxcbiAgNTE6XHRcdFx0XHQgICAgICAgXCYjMzQ7c2FbJWldICAgIHNwaT0weCUwOHggcHJvdG89MHgleCBzYWx0PTB4JTA4eCBjcnlwdD0lZFxcblwmIzM0OyxcbiAgNTI6XHRcdFx0XHQgICAgICAgaSwgYmUzMl90b19jcHUoc2FwLVx1MDAzZXhzLVx1MDAzZWlkLnNwaSksXG4gIDUzOlx0XHRcdFx0ICAgICAgIHNhcC1cdTAwM2V4cy1cdTAwM2VpZC5wcm90bywgYmUzMl90b19jcHUoc2FwLVx1MDAzZXNhbHQpLCBzYXAtXHUwMDNlY3J5cHQpO1xuICA1NDpcdFx0XHRwICYjNDM7PSBzY25wcmludGYocCwgYnVmc2l6ZSAtIChwIC0gYnVmKSxcbiAgNTU6XHRcdFx0XHQgICAgICAgXCYjMzQ7c2FbJWldICAgIGtleT0weCUwOHggJTA4eCAlMDh4ICUwOHhcXG5cJiMzNDssXG4gIDU2Olx0XHRcdFx0ICAgICAgIGksIGJlMzJfdG9fY3B1KHNhcC1cdTAwM2VrZXlbMF0pLCBiZTMyX3RvX2NwdShzYXAtXHUwMDNla2V5WzFdKSxcbiAgNTc6XHRcdFx0XHQgICAgICAgYmUzMl90b19jcHUoc2FwLVx1MDAzZWtleVsyXSksIGJlMzJfdG9fY3B1KHNhcC1cdTAwM2VrZXlbM10pKTtcbiAgNTg6XHRcdH1cbiAgNTk6XHRcbiAgNjA6XHRcdGxlbiA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZmZlciwgY291bnQsIHBwb3MsIGJ1ZiwgcCAtIGJ1Zik7XG4gIDYxOlx0XG4gIDYyOlx0XHRrZnJlZShidWYpO1xuICA2MzpcdFx0cmV0dXJuIGxlbjtcbiAgNjQ6XHR9XG4gIDY1Olx0XG4gIDY2Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaXBzZWNfZGJnX2ZvcHMgPSB7XG4gIDY3Olx0XHQub3duZXIgPSBUSElTX01PRFVMRSxcbiAgNjg6XHRcdC5vcGVuID0gc2ltcGxlX29wZW4sXG4gIDY5Olx0XHQucmVhZCA9IG5zaW1fZGJnX25ldGRldl9vcHNfcmVhZCxcbiAgNzA6XHR9O1xuICA3MTpcdFxuICA3MjpcdHN0YXRpYyBpbnQgbnNpbV9pcHNlY19maW5kX2VtcHR5X2lkeChzdHJ1Y3QgbnNpbV9pcHNlYyAqaXBzZWMpXG4gIDczOlx0e1xuICA3NDpcdFx0dTMyIGk7XG4gIDc1Olx0XG4gIDc2Olx0XHRpZiAoaXBzZWMtXHUwMDNlY291bnQgPT0gTlNJTV9JUFNFQ19NQVhfU0FfQ09VTlQpXG4gIDc3Olx0XHRcdHJldHVybiAtRU5PU1BDO1xuICA3ODpcdFxuICA3OTpcdFx0Lyogc2VhcmNoIHNhIHRhYmxlICovXG4gIDgwOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOU0lNX0lQU0VDX01BWF9TQV9DT1VOVDsgaSYjNDM7JiM0MzspIHtcbiAgODE6XHRcdFx0aWYgKCFpcHNlYy1cdTAwM2VzYVtpXS51c2VkKVxuICA4MjpcdFx0XHRcdHJldHVybiBpO1xuICA4MzpcdFx0fVxuICA4NDpcdFxuICA4NTpcdFx0cmV0dXJuIC1FTk9TUEM7XG4gIDg2Olx0fVxuICA4NzpcdFxuICA4ODpcdHN0YXRpYyBpbnQgbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gIDg5Olx0XHRcdFx0XHQgICAgICAgc3RydWN0IHhmcm1fc3RhdGUgKnhzLFxuICA5MDpcdFx0XHRcdFx0ICAgICAgIF9fYmUzMiAqbXlrZXksIF9fYmUzMiAqbXlzYWx0KVxuICA5MTpcdHtcbiAgOTI6XHRcdGNvbnN0IGNoYXIgYWVzX2djbV9uYW1lW10gPSBcJiMzNDtyZmM0MTA2KGdjbShhZXMpKVwmIzM0OztcbiAgOTM6XHRcdHVuc2lnbmVkIGNoYXIgKmtleV9kYXRhO1xuICA5NDpcdFx0Y2hhciAqYWxnX25hbWUgPSBOVUxMO1xuICA5NTpcdFx0aW50IGtleV9sZW47XG4gIDk2Olx0XG4gIDk3Olx0XHRpZiAoIXhzLVx1MDAzZWFlYWQpIHtcbiAgOTg6XHRcdFx0bmV0ZGV2X2VycihkZXYsIFwmIzM0O1Vuc3VwcG9ydGVkIElQc2VjIGFsZ29yaXRobVxcblwmIzM0Oyk7XG4gIDk5Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDEwMDpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTIyCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUgd2UgZ28uIEhlcmUgYXJlIG15IHRob3VnaHRzIG9uIGV4YW1pbmluZyB0aGF0IGZ1bmN0aW9uIGFuZCBpdHMgdXNlIHdpdGhpbiB0aGUgbmV0ZGV2c2ltIElQc2VjIGRyaXZlci4KCioqRGl2aW5nIERlZXAgaW50byBgbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzYCoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGUgSVBzZWMgZnVuY3Rpb25hbGl0eSBpcyBpbXBsZW1lbnRlZCB3aXRoaW4gdGhlIG5ldGRldnNpbSBkcml2ZXIuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byBgbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzYC4gVG8gcmVhbGx5IHVuZGVyc3RhbmQgaXRzIHJvbGUgYW5kIHBvdGVudGlhbCBpbXBhY3QsIEkmIzM5O2xsIHRyYWNlIHRocm91Z2ggdGhlIHJlc3Qgb2YgdGhhdCBmdW5jdGlvbiwgc2VlaW5nIHByZWNpc2VseSBob3cgaXQgaGFuZGxlcyBrZXkgcGFyc2luZyBhbmQgd2hhdCBjb25maWd1cmF0aW9ucyBpdCYjMzk7cyByZXNwb25zaWJsZSBmb3IuCgpPZiBjb3Vyc2UsIHRoZSBmdW5jdGlvbiBpdHNlbGYgaXMgb25seSBwYXJ0IG9mIHRoZSBzdG9yeS4gSSYjMzk7bGwgbmVlZCB0byBmb2xsb3cgdGhlIGNhbGxpbmcgY2hhaW4uIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGlzIGlzIGNhbGxlZCBmcm9tLCBieSB3aGF0IGFuZCB3aHkuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHRzIHdpbGwgcmVhbGx5IGhlbHAgdW5kZXJzdGFuZCBpdHMgcHVycG9zZSBhbmQgYmVoYXZpb3IgaW4gdGhlIGxhcmdlciBzY29wZSBvZiB0aGUgSVBzZWMgZHJpdmVyIGluIGBkcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuY2AuIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQsIHRvIHVuZGVyc3RhbmQgaG93IGtleSBtYXRlcmlhbCBpcyBwcm9jZXNzZWQgYW5kIGhvdyBpdCBhZmZlY3RzIHRoZSBvdmVyYWxsIElQc2VjIHNpbXVsYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDE6XHRcbiAxMDI6XHRcdGlmICh4cy1cdTAwM2VhZWFkLVx1MDAzZWFsZ19pY3ZfbGVuICE9IE5TSU1fSVBTRUNfQVVUSF9CSVRTKSB7XG4gMTAzOlx0XHRcdG5ldGRldl9lcnIoZGV2LCBcJiMzNDtJUHNlYyBvZmZsb2FkIHJlcXVpcmVzICVkIGJpdCBhdXRoZW50aWNhdGlvblxcblwmIzM0OyxcbiAxMDQ6XHRcdFx0XHQgICBOU0lNX0lQU0VDX0FVVEhfQklUUyk7XG4gMTA1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDEwNjpcdFx0fVxuIDEwNzpcdFxuIDEwODpcdFx0a2V5X2RhdGEgPSBcdTAwMjZ4cy1cdTAwM2VhZWFkLVx1MDAzZWFsZ19rZXlbMF07XG4gMTA5Olx0XHRrZXlfbGVuID0geHMtXHUwMDNlYWVhZC1cdTAwM2VhbGdfa2V5X2xlbjtcbiAxMTA6XHRcdGFsZ19uYW1lID0geHMtXHUwMDNlYWVhZC1cdTAwM2VhbGdfbmFtZTtcbiAxMTE6XHRcbiAxMTI6XHRcdGlmIChzdHJjbXAoYWxnX25hbWUsIGFlc19nY21fbmFtZSkpIHtcbiAxMTM6XHRcdFx0bmV0ZGV2X2VycihkZXYsIFwmIzM0O1Vuc3VwcG9ydGVkIElQc2VjIGFsZ29yaXRobSAtIHBsZWFzZSB1c2UgJXNcXG5cJiMzNDssXG4gMTE0Olx0XHRcdFx0ICAgYWVzX2djbV9uYW1lKTtcbiAxMTU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMTE2Olx0XHR9XG4gMTE3Olx0XG4gMTE4Olx0XHQvKiAxNjAgYWNjb3VudHMgZm9yIDE2IGJ5dGUga2V5IGFuZCA0IGJ5dGUgc2FsdCAqL1xuIDExOTpcdFx0aWYgKGtleV9sZW4gXHUwMDNlIE5TSU1fSVBTRUNfQVVUSF9CSVRTKSB7XG4gMTIwOlx0XHRcdCpteXNhbHQgPSAoKF9fYmUzMiAqKWtleV9kYXRhKVs0XTtcbiAxMjE6XHRcdH0gZWxzZSBpZiAoa2V5X2xlbiA9PSBOU0lNX0lQU0VDX0FVVEhfQklUUykge1xuIDEyMjpcdFx0XHQqbXlzYWx0ID0gMDtcbiAxMjM6XHRcdH0gZWxzZSB7XG4gMTI0Olx0XHRcdG5ldGRldl9lcnIoZGV2LCBcJiMzNDtJUHNlYyBodyBvZmZsb2FkIG9ubHkgc3VwcG9ydHMgMTI4IGJpdCBrZXlzIHdpdGggb3B0aW9uYWwgMzIgYml0IHNhbHRcXG5cJiMzNDspO1xuIDEyNTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAxMjY6XHRcdH1cbiAxMjc6XHRcdG1lbWNweShteWtleSwga2V5X2RhdGEsIDE2KTtcbiAxMjg6XHRcbiAxMjk6XHRcdHJldHVybiAwO1xuIDEzMDpcdH1cbiAxMzE6XHRcbiAxMzI6XHRzdGF0aWMgaW50IG5zaW1faXBzZWNfYWRkX3NhKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gMTMzOlx0XHRcdFx0ICAgICBzdHJ1Y3QgeGZybV9zdGF0ZSAqeHMsXG4gMTM0Olx0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gMTM1Olx0e1xuIDEzNjpcdFx0c3RydWN0IG5zaW1faXBzZWMgKmlwc2VjO1xuIDEzNzpcdFx0c3RydWN0IG5ldGRldnNpbSAqbnM7XG4gMTM4Olx0XHRzdHJ1Y3QgbnNpbV9zYSBzYTtcbiAxMzk6XHRcdHUxNiBzYV9pZHg7XG4gMTQwOlx0XHRpbnQgcmV0O1xuIDE0MTpcdFxuIDE0MjpcdFx0bnMgPSBuZXRkZXZfcHJpdihkZXYpO1xuIDE0MzpcdFx0aXBzZWMgPSBcdTAwMjZucy1cdTAwM2VpcHNlYztcbiAxNDQ6XHRcbiAxNDU6XHRcdGlmICh4cy1cdTAwM2VpZC5wcm90byAhPSBJUFBST1RPX0VTUCBcdTAwMjZcdTAwMjYgeHMtXHUwMDNlaWQucHJvdG8gIT0gSVBQUk9UT19BSCkge1xuIDE0NjpcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtVbnN1cHBvcnRlZCBwcm90b2NvbCBmb3IgaXBzZWMgb2ZmbG9hZFwmIzM0Oyk7XG4gMTQ3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDE0ODpcdFx0fVxuIDE0OTpcdFxuIDE1MDpcdFx0aWYgKHhzLVx1MDAzZWNhbGcpIHtcbiAxNTE6XHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7Q29tcHJlc3Npb24gb2ZmbG9hZCBub3Qgc3VwcG9ydGVkXCYjMzQ7KTtcbiAxNTI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMTUzOlx0XHR9XG4gMTU0Olx0XG4gMTU1Olx0XHRpZiAoeHMtXHUwMDNleHNvLnR5cGUgIT0gWEZSTV9ERVZfT0ZGTE9BRF9DUllQVE8pIHtcbiAxNTY6XHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7VW5zdXBwb3J0ZWQgaXBzZWMgb2ZmbG9hZCB0eXBlXCYjMzQ7KTtcbiAxNTc6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMTU4Olx0XHR9XG4gMTU5Olx0XG4gMTYwOlx0XHQvKiBmaW5kIHRoZSBmaXJzdCB1bnVzZWQgaW5kZXggKi9cbiAxNjE6XHRcdHJldCA9IG5zaW1faXBzZWNfZmluZF9lbXB0eV9pZHgoaXBzZWMpO1xuIDE2MjpcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuIDE2MzpcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtObyBzcGFjZSBmb3IgU0EgaW4gUnggdGFibGUhXCYjMzQ7KTtcbiAxNjQ6XHRcdFx0cmV0dXJuIHJldDtcbiAxNjU6XHRcdH1cbiAxNjY6XHRcdHNhX2lkeCA9ICh1MTYpcmV0O1xuIDE2NzpcdFxuIDE2ODpcdFx0bWVtc2V0KFx1MDAyNnNhLCAwLCBzaXplb2Yoc2EpKTtcbiAxNjk6XHRcdHNhLnVzZWQgPSB0cnVlO1xuIDE3MDpcdFx0c2EueHMgPSB4cztcbiAxNzE6XHRcbiAxNzI6XHRcdGlmIChzYS54cy1cdTAwM2VpZC5wcm90byBcdTAwMjYgSVBQUk9UT19FU1ApXG4gMTczOlx0XHRcdHNhLmNyeXB0ID0geHMtXHUwMDNlZWFsZyB8fCB4cy1cdTAwM2VhZWFkO1xuIDE3NDpcdFxuIDE3NTpcdFx0LyogZ2V0IHRoZSBrZXkgYW5kIHNhbHQgKi9cbiAxNzY6XHRcdHJldCA9IG5zaW1faXBzZWNfcGFyc2VfcHJvdG9fa2V5cyhkZXYsIHhzLCBzYS5rZXksIFx1MDAyNnNhLnNhbHQpO1xuIDE3NzpcdFx0aWYgKHJldCkge1xuIDE3ODpcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtGYWlsZWQgdG8gZ2V0IGtleSBkYXRhIGZvciBTQSB0YWJsZVwmIzM0Oyk7XG4gMTc5Olx0XHRcdHJldHVybiByZXQ7XG4gMTgwOlx0XHR9XG4gMTgxOlx0XG4gMTgyOlx0XHRpZiAoeHMtXHUwMDNleHNvLmRpciA9PSBYRlJNX0RFVl9PRkZMT0FEX0lOKVxuIDE4MzpcdFx0XHRzYS5yeCA9IHRydWU7XG4gMTg0Olx0XG4gMTg1Olx0XHRpZiAoeHMtXHUwMDNlcHJvcHMuZmFtaWx5ID09IEFGX0lORVQ2KVxuIDE4NjpcdFx0XHRtZW1jcHkoc2EuaXBhZGRyLCBcdTAwMjZ4cy1cdTAwM2VpZC5kYWRkci5hNiwgMTYpO1xuIDE4NzpcdFx0ZWxzZVxuIDE4ODpcdFx0XHRtZW1jcHkoXHUwMDI2c2EuaXBhZGRyWzNdLCBcdTAwMjZ4cy1cdTAwM2VpZC5kYWRkci5hNCwgNCk7XG4gMTg5Olx0XG4gMTkwOlx0XHQvKiB0aGUgcHJlcGFyYXRpb25zIHdvcmtlZCwgc28gc2F2ZSB0aGUgaW5mbyAqL1xuIDE5MTpcdFx0bWVtY3B5KFx1MDAyNmlwc2VjLVx1MDAzZXNhW3NhX2lkeF0sIFx1MDAyNnNhLCBzaXplb2Yoc2EpKTtcbiAxOTI6XHRcbiAxOTM6XHRcdC8qIHRoZSBYRlJNIHN0YWNrIGRvZXNuJiMzOTt0IGxpa2Ugb2ZmbG9hZF9oYW5kbGUgPT0gMCxcbiAxOTQ6XHRcdCAqIHNvIGFkZCBhIGJpdGZsYWcgaW4gY2FzZSBvdXIgYXJyYXkgaW5kZXggaXMgMFxuIDE5NTpcdFx0ICovXG4gMTk2Olx0XHR4cy1cdTAwM2V4c28ub2ZmbG9hZF9oYW5kbGUgPSBzYV9pZHggfCBOU0lNX0lQU0VDX1ZBTElEO1xuIDE5NzpcdFx0aXBzZWMtXHUwMDNlY291bnQmIzQzOyYjNDM7O1xuIDE5ODpcdFxuIDE5OTpcdFx0cmV0dXJuIDA7XG4gMjAwOlx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODI5CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMzA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBuc2ltX2lwc2VjX2FkZF9zYWAgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBgc3RydWN0IG5zaW1fc2Egc2FgIGlzIG1ldGljdWxvdXNseSBpbml0aWFsaXplZCB1c2luZyBgbWVtc2V0YC4gVGhpcyBpcyBjcnVjaWFsIOKAkyBhIGNsZWFuIHNsYXRlIGlzIHRoZSBmb3VuZGF0aW9uLiBgbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzYCB0aGVuIGV4dHJhY3RzIHRoZSBgc2Eua2V5YCBhbmQgYHNhLnNhbHRgLCBlbnN1cmluZyB0aGV5IGFyZSBpbnRlcnByZXRlZCBhcyBiaWctZW5kaWFuIDMyLWJpdCB2YWx1ZXMgdXNpbmcgYF9fYmUzMmAuIEV4Y2VsbGVudCwgZW5kaWFubmVzcyBjb25zaWRlcmF0aW9ucyBhcmUgYmVpbmcgaGFuZGxlZCB1cGZyb250LiBBbmQsIGNvbmZpcm1lZCBieSBgbnNpbV9kYmdfbmV0ZGV2X29wc19yZWFkYCwgdGhlIGRlYnVnIG91dHB1dCBjb3JyZWN0bHkgY29udmVydHMgdGhlIGVuZGlhbm5lc3Mgd2hlbiBwcmludGluZywgdXNpbmcgYGJlMzJfdG9fY3B1YCBzbyB0aGF0IHRoZSBoZXggdmFsdWVzIG1hdGNoIHRoZSBkZWJ1Z2dlZCBlbnZpcm9ubWVudC4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogYXJlIHRoZXJlIGFueSBsaW5nZXJpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IE5vLCBJIGRvbiYjMzk7dCBzZWUgYW55LiBUaGUgYHNhYCBzdHJ1Y3Qgc3RhcnRzIHplcm9lZC4gVGhlIGtleXMgYW5kIHNhbHQgYXJlIGhhbmRsZWQgc2FmZWx5IHdpdGggYG1lbWNweWAgYW5kIGRpcmVjdCBhc3NpZ25tZW50LiBUaGUgZGVidWcgYnVmZmVyIHVzZXMgYGt6YWxsb2NgLCBzbyBpdCBpcyB6ZXJvZWQgbWVtb3J5LCB3aGljaCBpcyBhIGdvb2QgcHJhY3RpY2UgdG8gYXZvaWQgbGVha2luZyBwb3RlbnRpYWxseSBzZW5zaXRpdmUgaW5mb3JtYXRpb24uIFRoZSB0eXBlIGNoYW5nZXMgZnJvbSBgdTMyYCB0byBgX19iZTMyYCBhbmQgc3BhcnNlIGFubm90YXRpb25zIHNlZW0gdG8gaGF2ZSBiZWVuIHVzZWQgdG8gaGVscCBlbmZvcmNlIGVuZGlhbm5lc3MgY29ycmVjdG5lc3MuIEFuZCB0aGUgcHJpbnQgZm9ybWF0IGNvbnZlcnRzIHRoZSBlbmRpYW5uZXNzIHdoZW4gZGlzcGxheWluZy4KCkkmIzM5O20gc2F0aXNmaWVkIHRoYXQgdGhpcyBzcGVjaWZpYyBjaGFuZ2UgZG9lc24mIzM5O3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gSG93ZXZlciwganVzdCB0byBiZSB0aG9yb3VnaCwgSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBjb2RlYmFzZSBmb3Igb3RoZXIgdXNlcyBvZiBga2V5YCwgYHNhbHRgLCBvciB0aGUgYHN0cnVjdCBuc2ltX3NhYCB3aXRoaW4gYG5ldGRldnNpbWAuIFRoYXQmIzM5O3MgdGhlIG5leHQgc3RlcCwganVzdCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuc2ltX3NhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jPTEyPXN0YXRpYyBzc2l6ZV90IG5zaW1fZGJnX25ldGRldl9vcHNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCxcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy0zNi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5TSU1fSVBTRUNfTUFYX1NBX0NPVU5UOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmM6Mzc6XHRcdHN0cnVjdCBuc2ltX3NhICpzYXAgPSBcdTAwMjZpcHNlYy1cdTAwM2VzYVtpXTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jLTM4LVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jPTEzMj1zdGF0aWMgaW50IG5zaW1faXBzZWNfYWRkX3NhKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtMTM3LVx0c3RydWN0IG5ldGRldnNpbSAqbnM7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYzoxMzg6XHRzdHJ1Y3QgbnNpbV9zYSBzYTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jLTEzOS1cdHUxNiBzYV9pZHg7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmM9MjAyPXN0YXRpYyB2b2lkIG5zaW1faXBzZWNfZGVsX3NhKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCB4ZnJtX3N0YXRlICp4cylcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy0yMTQtXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYzoyMTU6XHRtZW1zZXQoXHUwMDI2aXBzZWMtXHUwMDNlc2Fbc2FfaWR4XSwgMCwgc2l6ZW9mKHN0cnVjdCBuc2ltX3NhKSk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy0yMTYtXHRpcHNlYy1cdTAwM2Vjb3VudC0tO1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jPTIyND1ib29sIG5zaW1faXBzZWNfdHgoc3RydWN0IG5ldGRldnNpbSAqbnMsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtMjI4LVx0c3RydWN0IHhmcm1fc3RhdGUgKnhzO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmM6MjI5Olx0c3RydWN0IG5zaW1fc2EgKnRzYTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jLTIzMC1cdHUzMiBzYV9pZHg7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQxLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjQyOnN0cnVjdCBuc2ltX3NhIHtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC00My1cdHN0cnVjdCB4ZnJtX3N0YXRlICp4cztcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg9NTI9c3RydWN0IG5zaW1faXBzZWMge1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjUzOlx0c3RydWN0IG5zaW1fc2Egc2FbTlNJTV9JUFNFQ19NQVhfU0FfQ09VTlRdO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTU0LVx0c3RydWN0IGRlbnRyeSAqcGZpbGU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxOTQKCQkJCQkJCW91dHB1dDogMTQzCgkJCQkJCQl0aG91Z2h0czogMTA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIElQc2VjIFBhdGNoKioKCk9rYXksIHRoaXMgaXMgcHJldHR5IGNsZWFuLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCB0aGlzIHBhdGNoIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGZpeCBmb3IgaG93IHRoZSBuZXRkZXZzaW0gZHJpdmVyIGhhbmRsZXMgdGhlIGVuZGlhbm5lc3Mgb2YgSVBzZWMga2V5cyBhbmQgc2FsdC4gVGhleSYjMzk7cmUgY29ycmVjdGx5IHVwZGF0aW5nIHRoZSBkYXRhIHR5cGVzIGZyb20gdGhlIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIGB1MzJgIHRvIHRoZSBuZXR3b3JrLWJ5dGUtb3JkZXItYXdhcmUgYF9fYmUzMmAsIHdoaWNoIGlzIGNydWNpYWwgZm9yIGNyb3NzLXN5c3RlbSBjb21wYXRpYmlsaXR5LCBhbmQgYWRkaW5nIHRoZSBuZWNlc3NhcnkgYGJlMzJfdG9fY3B1KClgIGNhbGxzIHdoZW4gY29udmVydGluZyB0aGUgdmFsdWVzIGZvciBkZWJ1Z2ZzIG91dHB1dC4gVGhpcyBlbnN1cmVzIGNvcnJlY3QgcmVwcmVzZW50YXRpb24gYWNyb3NzIGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzLgoKSSYjMzk7dmUgY2hlY2tlZCwgYW5kIEkgZG9uJiMzOTt0IHNlZSBhbnl0aGluZyBoZXJlIHRoYXQgaW50cm9kdWNlcyBuZXcgcmlza3M6IG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcywgbm8gZG9kZ3kgYWxsb2NhdGlvbnMsIGFuZCBjZXJ0YWlubHkgbm8gb2J2aW91cyBpbmZvcm1hdGlvbiBsZWFrcywgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEkgd2FzIGhvcGluZyBmb3IuIEl0JiMzOTtzIGEgdGFyZ2V0ZWQgYW5kIGZvY3VzZWQgZml4LgoKR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlIGFuZCBpdHMgaW1wbGljYXRpb25zIGZvciBjb25zaXN0ZW50IElQc2VjIGtleSByZXByZXNlbnRhdGlvbiwgdGhlIHJpc2sgc2VlbXMgbWluaW1hbC4gVGhlcmVmb3JlLCBJJiMzOTtsbCByZWNvbW1lbmQgcnVubmluZyB0aGUgYHNldC1yZXN1bHRzYCB0b29sIHdpdGggYE5lZWRzS01TQU49ZmFsc2VgIGFuZCBwcm92aWRlIGEgZGV0YWlsZWQgZXhwbGFuYXRpb24gb2YgdGhlIGZpeGVzIG1hZGUgdG8gYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGVuZGlhbm5lc3MgaGFuZGxpbmcgb2YgSVBzZWMga2V5cyBhbmQgc2FsdCB2YWx1ZXMgaW4gbmV0ZGV2c2ltIGJ5IGNoYW5naW5nIHRoZSB0eXBlIGFubm90YXRpb25zIGZyb20gdTMyIHRvIF9fYmUzMiBhbmQgY29udmVydGluZyB0aGVtIHdpdGggYmUzMl90b19jcHUoKSB3aGVuIGZvcm1hdHRpbmcgZGVidWdmcyBvdXRwdXQuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdCBwYWRkaW5nIGNoYW5nZXMsIGNvcGllcyBvZiByYXcga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYXJlIGludHJvZHVjZWQuIEFsbCBidWZmZXJzIGFuZCBzdHJ1Y3R1cmVzIGluIG5ldGRldnNpbSBJUHNlYyBjb2RlIHJlbWFpbiBwcm9wZXJseSBpbml0aWFsaXplZCB2aWEgbWVtc2V0L2t6YWxsb2MuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgZW5kaWFubmVzcyBoYW5kbGluZyBvZiBJUHNlYyBrZXlzIGFuZCBzYWx0IHZhbHVlcyBpbiBuZXRkZXZzaW0gYnkgY2hhbmdpbmcgdGhlIHR5cGUgYW5ub3RhdGlvbnMgZnJvbSB1MzIgdG8gX19iZTMyIGFuZCBjb252ZXJ0aW5nIHRoZW0gd2l0aCBiZTMyX3RvX2NwdSgpIHdoZW4gZm9ybWF0dGluZyBkZWJ1Z2ZzIG91dHB1dC4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0IHBhZGRpbmcgY2hhbmdlcywgY29waWVzIG9mIHJhdyBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2UsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBhcmUgaW50cm9kdWNlZC4gQWxsIGJ1ZmZlcnMgYW5kIHN0cnVjdHVyZXMgaW4gbmV0ZGV2c2ltIElQc2VjIGNvZGUgcmVtYWluIHByb3Blcmx5IGluaXRpYWxpemVkIHZpYSBtZW1zZXQva3phbGxvYy4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjU3OjIzLjcyMjc5Nzk2M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MTQwMzc3Mzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVERFVlNJTVwiLFxuICAgIFwiWEZSTV9PRkZMT0FEXCIsXG4gICAgXCJJTkVUX0VTUF9PRkZMT0FEXCIsXG4gICAgXCJERUJVR19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5zaW1fZGJnX25ldGRldl9vcHNfcmVhZFwiLFxuICAgIFwibnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzXCIsXG4gICAgXCJuc2ltX2lwc2VjX2FkZF9zYVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgZW5kaWFubmVzcyBoYW5kbGluZyBvZiBJUHNlYyBrZXlzIGFuZCBzYWx0IHZhbHVlcyBpbiBuZXRkZXZzaW0gYnkgY2hhbmdpbmcgdGhlIHR5cGUgYW5ub3RhdGlvbnMgZnJvbSB1MzIgdG8gX19iZTMyIGFuZCBjb252ZXJ0aW5nIHRoZW0gd2l0aCBiZTMyX3RvX2NwdSgpIHdoZW4gZm9ybWF0dGluZyBkZWJ1Z2ZzIG91dHB1dC4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0IHBhZGRpbmcgY2hhbmdlcywgY29waWVzIG9mIHJhdyBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2UsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBhcmUgaW50cm9kdWNlZC4gQWxsIGJ1ZmZlcnMgYW5kIHN0cnVjdHVyZXMgaW4gbmV0ZGV2c2ltIElQc2VjIGNvZGUgcmVtYWluIHByb3Blcmx5IGluaXRpYWxpemVkIHZpYSBtZW1zZXQva3phbGxvYy4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29ycmVjdHMgZW5kaWFubmVzcyBoYW5kbGluZyBvZiBJUHNlYyBrZXlzIGFuZCBzYWx0IGluIHRoZSBuZXRkZXZzaW0gc2ltdWxhdGVkIGRldmljZSBkcml2ZXIsIG1vZGlmeWluZyBuc2ltX3NhIGZpZWxkIHR5cGVzIHRvIF9fYmUzMiwgYWRqdXN0aW5nIGtleS9zYWx0IHBhcnNpbmcgaW4gbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzLCBhbmQgYnl0ZS1zd2FwcGluZyB2YWx1ZXMgZm9yIGRlYnVnZnMgb3V0cHV0IGluIG5zaW1fZGJnX25ldGRldl9vcHNfcmVhZC4gTmV0ZGV2c2ltIGlzIGEgc29mdHdhcmUtc2ltdWxhdGVkIGRldmljZSBkcml2ZXIgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbmV0bGluayAoWEZSTSBzdGF0ZSBvcGVyYXRpb25zKSBhbmQgZGVidWdmcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6NTc6MjMuNzIyODAyOTUzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDYzMjkyMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0YzUzNWExZTg4ZDFkYWMxYTU0Y2E1Nzc3MjBkZmEyODNiYTNlMTI4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDggMTc6NTc6MjIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuY1xcbmluZGV4IDM2YTFiZTQ5MjNkNjEuLjU3MjI4MzdiY2RhMzYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmNcXG4rKysgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuY1xcbkBAIC01MCwxMSArNTAsMTEgQEAgc3RhdGljIHNzaXplX3QgbnNpbV9kYmdfbmV0ZGV2X29wc19yZWFkKHN0cnVjdCBmaWxlICpmaWxwLFxcbiBcXHRcXHRwICs9IHNjbnByaW50ZihwLCBidWZzaXplIC0gKHAgLSBidWYpLFxcbiBcXHRcXHRcXHQgICAgICAgXFxcInNhWyVpXSAgICBzcGk9MHglMDh4IHByb3RvPTB4JXggc2FsdD0weCUwOHggY3J5cHQ9JWRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdCAgICAgICBpLCBiZTMyX3RvX2NwdShzYXAtXFx1MDAzZXhzLVxcdTAwM2VpZC5zcGkpLFxcbi1cXHRcXHRcXHQgICAgICAgc2FwLVxcdTAwM2V4cy1cXHUwMDNlaWQucHJvdG8sIHNhcC1cXHUwMDNlc2FsdCwgc2FwLVxcdTAwM2VjcnlwdCk7XFxuK1xcdFxcdFxcdCAgICAgICBzYXAtXFx1MDAzZXhzLVxcdTAwM2VpZC5wcm90bywgYmUzMl90b19jcHUoc2FwLVxcdTAwM2VzYWx0KSwgc2FwLVxcdTAwM2VjcnlwdCk7XFxuIFxcdFxcdHAgKz0gc2NucHJpbnRmKHAsIGJ1ZnNpemUgLSAocCAtIGJ1ZiksXFxuIFxcdFxcdFxcdCAgICAgICBcXFwic2FbJWldICAgIGtleT0weCUwOHggJTA4eCAlMDh4ICUwOHhcXFxcblxcXCIsXFxuLVxcdFxcdFxcdCAgICAgICBpLCBzYXAtXFx1MDAzZWtleVswXSwgc2FwLVxcdTAwM2VrZXlbMV0sXFxuLVxcdFxcdFxcdCAgICAgICBzYXAtXFx1MDAzZWtleVsyXSwgc2FwLVxcdTAwM2VrZXlbM10pO1xcbitcXHRcXHRcXHQgICAgICAgaSwgYmUzMl90b19jcHUoc2FwLVxcdTAwM2VrZXlbMF0pLCBiZTMyX3RvX2NwdShzYXAtXFx1MDAzZWtleVsxXSksXFxuK1xcdFxcdFxcdCAgICAgICBiZTMyX3RvX2NwdShzYXAtXFx1MDAzZWtleVsyXSksIGJlMzJfdG9fY3B1KHNhcC1cXHUwMDNla2V5WzNdKSk7XFxuIFxcdH1cXG4gXFxuIFxcdGxlbiA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZmZlciwgY291bnQsIHBwb3MsIGJ1ZiwgcCAtIGJ1Zik7XFxuQEAgLTg3LDcgKzg3LDcgQEAgc3RhdGljIGludCBuc2ltX2lwc2VjX2ZpbmRfZW1wdHlfaWR4KHN0cnVjdCBuc2ltX2lwc2VjICppcHNlYylcXG4gXFxuIHN0YXRpYyBpbnQgbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgeGZybV9zdGF0ZSAqeHMsXFxuLVxcdFxcdFxcdFxcdCAgICAgICB1MzIgKm15a2V5LCB1MzIgKm15c2FsdClcXG4rXFx0XFx0XFx0XFx0ICAgICAgIF9fYmUzMiAqbXlrZXksIF9fYmUzMiAqbXlzYWx0KVxcbiB7XFxuIFxcdGNvbnN0IGNoYXIgYWVzX2djbV9uYW1lW10gPSBcXFwicmZjNDEwNihnY20oYWVzKSlcXFwiO1xcbiBcXHR1bnNpZ25lZCBjaGFyICprZXlfZGF0YTtcXG5AQCAtMTE3LDcgKzExNyw3IEBAIHN0YXRpYyBpbnQgbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcbiBcXHQvKiAxNjAgYWNjb3VudHMgZm9yIDE2IGJ5dGUga2V5IGFuZCA0IGJ5dGUgc2FsdCAqL1xcbiBcXHRpZiAoa2V5X2xlbiBcXHUwMDNlIE5TSU1fSVBTRUNfQVVUSF9CSVRTKSB7XFxuLVxcdFxcdCpteXNhbHQgPSAoKHUzMiAqKWtleV9kYXRhKVs0XTtcXG4rXFx0XFx0Km15c2FsdCA9ICgoX19iZTMyICopa2V5X2RhdGEpWzRdO1xcbiBcXHR9IGVsc2UgaWYgKGtleV9sZW4gPT0gTlNJTV9JUFNFQ19BVVRIX0JJVFMpIHtcXG4gXFx0XFx0Km15c2FsdCA9IDA7XFxuIFxcdH0gZWxzZSB7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaCBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaFxcbmluZGV4IDU1YWVjNDEyMzdiOWIuLmE4MmE2ODUzODRlNmQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oXFxuKysrIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oXFxuQEAgLTQyLDggKzQyLDggQEBcXG4gc3RydWN0IG5zaW1fc2Ege1xcbiBcXHRzdHJ1Y3QgeGZybV9zdGF0ZSAqeHM7XFxuIFxcdF9fYmUzMiBpcGFkZHJbNF07XFxuLVxcdHUzMiBrZXlbNF07XFxuLVxcdHUzMiBzYWx0O1xcbitcXHRfX2JlMzIga2V5WzRdO1xcbitcXHRfX2JlMzIgc2FsdDtcXG4gXFx0Ym9vbCB1c2VkO1xcbiBcXHRib29sIGNyeXB0O1xcbiBcXHRib29sIHJ4O1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5zaFxcbmluZGV4IGFjZTNhOTkwMjNlZDAuLjQ4NDNkNDc0NTM4ZjQgMTAwNzU1XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5zaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsuc2hcXG5AQCAtOTMyLDExICs5MzIsMTEgQEAga2NpX3Rlc3RfaXBzZWNfb2ZmbG9hZCgpXFxuIFxcdHJ1bl9jbWQgZGlmZiAkc3lzZnNmIC0gXFx1MDAzY1xcdTAwM2MgRU9GXFxuIFNBIGNvdW50PTIgdHg9M1xcbiBzYVswXSB0eCBpcGFkZHI9JGRzdGlwXFxuLXNhWzBdICAgIHNwaT0weDAwMDAwMDA5IHByb3RvPTB4MzIgc2FsdD0weDYxNjI2MzY0IGNyeXB0PTFcXG4tc2FbMF0gICAga2V5PTB4MzQzMzMyMzEgMzgzNzM2MzUgMzIzMTMwMzkgMzYzNTM0MzNcXG4rc2FbMF0gICAgc3BpPTB4MDAwMDAwMDkgcHJvdG89MHgzMiBzYWx0PTB4NjQ2MzYyNjEgY3J5cHQ9MVxcbitzYVswXSAgICBrZXk9MHgzMTMyMzMzNCAzNTM2MzczOCAzOTMwMzEzMiAzMzM0MzUzNlxcbiBzYVsxXSByeCBpcGFkZHI9JHNyY2lwXFxuLXNhWzFdICAgIHNwaT0weDAwMDAwMDA5IHByb3RvPTB4MzIgc2FsdD0weDYxNjI2MzY0IGNyeXB0PTFcXG4tc2FbMV0gICAga2V5PTB4MzQzMzMyMzEgMzgzNzM2MzUgMzIzMTMwMzkgMzYzNTM0MzNcXG4rc2FbMV0gICAgc3BpPTB4MDAwMDAwMDkgcHJvdG89MHgzMiBzYWx0PTB4NjQ2MzYyNjEgY3J5cHQ9MVxcbitzYVsxXSAgICBrZXk9MHgzMTMyMzMzNCAzNTM2MzczOCAzOTMwMzEzMiAzMzM0MzUzNlxcbiBFT0ZcXG4gXFx0aWYgWyAkPyAtbmUgMCBdIDsgdGhlblxcbiBcXHRcXHRlbmRfdGVzdCBcXFwiRkFJTDogaXBzZWNfb2ZmbG9hZCBpbmNvcnJlY3QgZHJpdmVyIGRhdGFcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjU3OjI0LjM2OTg2NTUyM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzkwMzIyNDkwNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUREVWU0lNXCIsXG4gICAgXCJYRlJNX09GRkxPQURcIixcbiAgICBcIklORVRfRVNQX09GRkxPQURcIixcbiAgICBcIkRFQlVHX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnNpbV9kYmdfbmV0ZGV2X29wc19yZWFkXCIsXG4gICAgXCJuc2ltX2lwc2VjX3BhcnNlX3Byb3RvX2tleXNcIixcbiAgICBcIm5zaW1faXBzZWNfYWRkX3NhXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29ycmVjdHMgZW5kaWFubmVzcyBoYW5kbGluZyBvZiBJUHNlYyBrZXlzIGFuZCBzYWx0IGluIHRoZSBuZXRkZXZzaW0gc2ltdWxhdGVkIGRldmljZSBkcml2ZXIsIG1vZGlmeWluZyBuc2ltX3NhIGZpZWxkIHR5cGVzIHRvIF9fYmUzMiwgYWRqdXN0aW5nIGtleS9zYWx0IHBhcnNpbmcgaW4gbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzLCBhbmQgYnl0ZS1zd2FwcGluZyB2YWx1ZXMgZm9yIGRlYnVnZnMgb3V0cHV0IGluIG5zaW1fZGJnX25ldGRldl9vcHNfcmVhZC4gTmV0ZGV2c2ltIGlzIGEgc29mdHdhcmUtc2ltdWxhdGVkIGRldmljZSBkcml2ZXIgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbmV0bGluayAoWEZSTSBzdGF0ZSBvcGVyYXRpb25zKSBhbmQgZGVidWdmcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0YzUzNWExZTg4ZDFkYWMxYTU0Y2E1Nzc3MjBkZmEyODNiYTNlMTI4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAxNzo1NzoyMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmNcbmluZGV4IDM2YTFiZTQ5MjNkNjEuLjU3MjI4MzdiY2RhMzYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuY1xuKysrIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmNcbkBAIC01MCwxMSArNTAsMTEgQEAgc3RhdGljIHNzaXplX3QgbnNpbV9kYmdfbmV0ZGV2X29wc19yZWFkKHN0cnVjdCBmaWxlICpmaWxwLFxuIFx0XHRwICs9IHNjbnByaW50ZihwLCBidWZzaXplIC0gKHAgLSBidWYpLFxuIFx0XHRcdCAgICAgICBcInNhWyVpXSAgICBzcGk9MHglMDh4IHByb3RvPTB4JXggc2FsdD0weCUwOHggY3J5cHQ9JWRcXG5cIixcbiBcdFx0XHQgICAgICAgaSwgYmUzMl90b19jcHUoc2FwLVx1MDAzZXhzLVx1MDAzZWlkLnNwaSksXG4tXHRcdFx0ICAgICAgIHNhcC1cdTAwM2V4cy1cdTAwM2VpZC5wcm90bywgc2FwLVx1MDAzZXNhbHQsIHNhcC1cdTAwM2VjcnlwdCk7XG4rXHRcdFx0ICAgICAgIHNhcC1cdTAwM2V4cy1cdTAwM2VpZC5wcm90bywgYmUzMl90b19jcHUoc2FwLVx1MDAzZXNhbHQpLCBzYXAtXHUwMDNlY3J5cHQpO1xuIFx0XHRwICs9IHNjbnByaW50ZihwLCBidWZzaXplIC0gKHAgLSBidWYpLFxuIFx0XHRcdCAgICAgICBcInNhWyVpXSAgICBrZXk9MHglMDh4ICUwOHggJTA4eCAlMDh4XFxuXCIsXG4tXHRcdFx0ICAgICAgIGksIHNhcC1cdTAwM2VrZXlbMF0sIHNhcC1cdTAwM2VrZXlbMV0sXG4tXHRcdFx0ICAgICAgIHNhcC1cdTAwM2VrZXlbMl0sIHNhcC1cdTAwM2VrZXlbM10pO1xuK1x0XHRcdCAgICAgICBpLCBiZTMyX3RvX2NwdShzYXAtXHUwMDNla2V5WzBdKSwgYmUzMl90b19jcHUoc2FwLVx1MDAzZWtleVsxXSksXG4rXHRcdFx0ICAgICAgIGJlMzJfdG9fY3B1KHNhcC1cdTAwM2VrZXlbMl0pLCBiZTMyX3RvX2NwdShzYXAtXHUwMDNla2V5WzNdKSk7XG4gXHR9XG4gXG4gXHRsZW4gPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcihidWZmZXIsIGNvdW50LCBwcG9zLCBidWYsIHAgLSBidWYpO1xuQEAgLTg3LDcgKzg3LDcgQEAgc3RhdGljIGludCBuc2ltX2lwc2VjX2ZpbmRfZW1wdHlfaWR4KHN0cnVjdCBuc2ltX2lwc2VjICppcHNlYylcbiBcbiBzdGF0aWMgaW50IG5zaW1faXBzZWNfcGFyc2VfcHJvdG9fa2V5cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCB4ZnJtX3N0YXRlICp4cyxcbi1cdFx0XHRcdCAgICAgICB1MzIgKm15a2V5LCB1MzIgKm15c2FsdClcbitcdFx0XHRcdCAgICAgICBfX2JlMzIgKm15a2V5LCBfX2JlMzIgKm15c2FsdClcbiB7XG4gXHRjb25zdCBjaGFyIGFlc19nY21fbmFtZVtdID0gXCJyZmM0MTA2KGdjbShhZXMpKVwiO1xuIFx0dW5zaWduZWQgY2hhciAqa2V5X2RhdGE7XG5AQCAtMTE3LDcgKzExNyw3IEBAIHN0YXRpYyBpbnQgbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXG4gXHQvKiAxNjAgYWNjb3VudHMgZm9yIDE2IGJ5dGUga2V5IGFuZCA0IGJ5dGUgc2FsdCAqL1xuIFx0aWYgKGtleV9sZW4gXHUwMDNlIE5TSU1fSVBTRUNfQVVUSF9CSVRTKSB7XG4tXHRcdCpteXNhbHQgPSAoKHUzMiAqKWtleV9kYXRhKVs0XTtcbitcdFx0Km15c2FsdCA9ICgoX19iZTMyICopa2V5X2RhdGEpWzRdO1xuIFx0fSBlbHNlIGlmIChrZXlfbGVuID09IE5TSU1fSVBTRUNfQVVUSF9CSVRTKSB7XG4gXHRcdCpteXNhbHQgPSAwO1xuIFx0fSBlbHNlIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmggYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmhcbmluZGV4IDU1YWVjNDEyMzdiOWIuLmE4MmE2ODUzODRlNmQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmhcbisrKyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaFxuQEAgLTQyLDggKzQyLDggQEBcbiBzdHJ1Y3QgbnNpbV9zYSB7XG4gXHRzdHJ1Y3QgeGZybV9zdGF0ZSAqeHM7XG4gXHRfX2JlMzIgaXBhZGRyWzRdO1xuLVx0dTMyIGtleVs0XTtcbi1cdHUzMiBzYWx0O1xuK1x0X19iZTMyIGtleVs0XTtcbitcdF9fYmUzMiBzYWx0O1xuIFx0Ym9vbCB1c2VkO1xuIFx0Ym9vbCBjcnlwdDtcbiBcdGJvb2wgcng7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsuc2hcbmluZGV4IGFjZTNhOTkwMjNlZDAuLjQ4NDNkNDc0NTM4ZjQgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnNoXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnNoXG5AQCAtOTMyLDExICs5MzIsMTEgQEAga2NpX3Rlc3RfaXBzZWNfb2ZmbG9hZCgpXG4gXHRydW5fY21kIGRpZmYgJHN5c2ZzZiAtIFx1MDAzY1x1MDAzYyBFT0ZcbiBTQSBjb3VudD0yIHR4PTNcbiBzYVswXSB0eCBpcGFkZHI9JGRzdGlwXG4tc2FbMF0gICAgc3BpPTB4MDAwMDAwMDkgcHJvdG89MHgzMiBzYWx0PTB4NjE2MjYzNjQgY3J5cHQ9MVxuLXNhWzBdICAgIGtleT0weDM0MzMzMjMxIDM4MzczNjM1IDMyMzEzMDM5IDM2MzUzNDMzXG4rc2FbMF0gICAgc3BpPTB4MDAwMDAwMDkgcHJvdG89MHgzMiBzYWx0PTB4NjQ2MzYyNjEgY3J5cHQ9MVxuK3NhWzBdICAgIGtleT0weDMxMzIzMzM0IDM1MzYzNzM4IDM5MzAzMTMyIDMzMzQzNTM2XG4gc2FbMV0gcnggaXBhZGRyPSRzcmNpcFxuLXNhWzFdICAgIHNwaT0weDAwMDAwMDA5IHByb3RvPTB4MzIgc2FsdD0weDYxNjI2MzY0IGNyeXB0PTFcbi1zYVsxXSAgICBrZXk9MHgzNDMzMzIzMSAzODM3MzYzNSAzMjMxMzAzOSAzNjM1MzQzM1xuK3NhWzFdICAgIHNwaT0weDAwMDAwMDA5IHByb3RvPTB4MzIgc2FsdD0weDY0NjM2MjYxIGNyeXB0PTFcbitzYVsxXSAgICBrZXk9MHgzMTMyMzMzNCAzNTM2MzczOCAzOTMwMzEzMiAzMzM0MzUzNlxuIEVPRlxuIFx0aWYgWyAkPyAtbmUgMCBdIDsgdGhlblxuIFx0XHRlbmRfdGVzdCBcIkZBSUw6IGlwc2VjX29mZmxvYWQgaW5jb3JyZWN0IGRyaXZlciBkYXRhXCJcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjU3OjI0LjM2OTg2NzI4M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU5NzY1NjQ1NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXR3b3JrIERldmljZSBTaW11bGF0b3IgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGZvY3VzZWQgb24gdW5kZXJzdGFuZGluZyB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMuIEkgc2VlIG1vZGlmaWNhdGlvbnMgYWNyb3NzIHRoZSBgbmV0ZGV2c2ltYCBkaXJlY3RvcnksIHNwZWNpZmljYWxseSBgaXBzZWMuY2AgYW5kIGBuZXRkZXZzaW0uaGAsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIG15IGF0dGVudGlvbi4gSVBzZWMgd2l0aGluIGEgc2ltdWxhdGVkIG5ldHdvcmsgZW52aXJvbm1lbnQuLi4gdGhhdCBjb3VsZCBiZSBpbnRlcmVzdGluZy4gSSdtIGFsc28gbm90aW5nIHRoZSBpbmNsdXNpb24gb2YgYSBjaGFuZ2UgaW4gdGhlIGBydG5ldGxpbmsuc2hgIHNlbGZ0ZXN0IHNjcmlwdC4gVGhpcyBzdWdnZXN0cyB0ZXN0aW5nIGlzIGEga2V5IGNvbXBvbmVudCwgaG9wZWZ1bGx5LCB0byB2YWxpZGF0ZSB0aGVzZSBjaGFuZ2VzLlxuXG5NeSBmaXJzdCBzdGVwIGlzIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0J3MgYWN0dWFsbHkgYmVpbmcgKmNoYW5nZWQqLiBJJ2xsIHJlYWNoIGZvciBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZXhhbWluZSBgbmV0ZGV2c2ltYCBhbmQgYGlwc2VjLmNgIG1vcmUgY2xvc2VseSwgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgdGhlIG1vZGlmaWNhdGlvbnMuIFRoaXMgaW5pdGlhbCBhbmFseXNpcyB3aWxsIGRpY3RhdGUgdGhlIG5leHQgc3RlcHMsIGJ1dCBJIHdhbnQgdG8gZ2V0IGEgaGlnaC1sZXZlbCB2aWV3IG9mIHRoZXNlIGNoYW5nZXMgZmlyc3QsIGFuZCB0cnkgdG8gYW50aWNpcGF0ZSBhbnkga25vY2stb24gZWZmZWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE3MCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjU3OjMwLjM0NjQzMzc4OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTI3MTI5MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnNpbV9kYmdfbmV0ZGV2X29wc19yZWFkfG5zaW1faXBzZWNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0ZGV2c2ltXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jLTExLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jOjEyOnN0YXRpYyBzc2l6ZV90IG5zaW1fZGJnX25ldGRldl9vcHNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCxcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy0xMy1cXHRcXHRcXHRcXHRcXHRjaGFyIF9fdXNlciAqYnVmZmVyLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtMTYtXFx0c3RydWN0IG5ldGRldnNpbSAqbnMgPSBmaWxwLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmM6MTc6XFx0c3RydWN0IG5zaW1faXBzZWMgKmlwc2VjID0gXFx1MDAyNm5zLVxcdTAwM2VpcHNlYztcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy0xOC1cXHRzaXplX3QgYnVmc2l6ZTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jPTY2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlwc2VjX2RiZ19mb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtNjgtXFx0Lm9wZW4gPSBzaW1wbGVfb3BlbixcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYzo2OTpcXHQucmVhZCA9IG5zaW1fZGJnX25ldGRldl9vcHNfcmVhZCxcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy03MC19O1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jLTcxLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jOjcyOnN0YXRpYyBpbnQgbnNpbV9pcHNlY19maW5kX2VtcHR5X2lkeChzdHJ1Y3QgbnNpbV9pcHNlYyAqaXBzZWMpXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtNzMte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtODctXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmM6ODg6c3RhdGljIGludCBuc2ltX2lwc2VjX3BhcnNlX3Byb3RvX2tleXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy04OS1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHhmcm1fc3RhdGUgKnhzLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtMTMxLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jOjEzMjpzdGF0aWMgaW50IG5zaW1faXBzZWNfYWRkX3NhKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtMTMzLVxcdFxcdFxcdCAgICAgc3RydWN0IHhmcm1fc3RhdGUgKnhzLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtMTM1LXtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYzoxMzY6XFx0c3RydWN0IG5zaW1faXBzZWMgKmlwc2VjO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jLTEzNy1cXHRzdHJ1Y3QgbmV0ZGV2c2ltICpucztcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jLTE2MC1cXHQvKiBmaW5kIHRoZSBmaXJzdCB1bnVzZWQgaW5kZXggKi9cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYzoxNjE6XFx0cmV0ID0gbnNpbV9pcHNlY19maW5kX2VtcHR5X2lkeChpcHNlYyk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtMTYyLVxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy0xNzUtXFx0LyogZ2V0IHRoZSBrZXkgYW5kIHNhbHQgKi9cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYzoxNzY6XFx0cmV0ID0gbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzKGRldiwgeHMsIHNhLmtleSwgXFx1MDAyNnNhLnNhbHQpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jLTE3Ny1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy0yMDEtXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmM6MjAyOnN0YXRpYyB2b2lkIG5zaW1faXBzZWNfZGVsX3NhKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCB4ZnJtX3N0YXRlICp4cylcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy0yMDMte1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jLTIwNC1cXHRzdHJ1Y3QgbmV0ZGV2c2ltICpucyA9IG5ldGRldl9wcml2KGRldik7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmM6MjA1OlxcdHN0cnVjdCBuc2ltX2lwc2VjICppcHNlYyA9IFxcdTAwMjZucy1cXHUwMDNlaXBzZWM7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtMjA2LVxcdHUxNiBzYV9pZHg7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYz0yMTk9c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtZGV2X29wcyBuc2ltX3hmcm1kZXZfb3BzID0ge1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jOjIyMDpcXHQueGRvX2Rldl9zdGF0ZV9hZGRcXHQ9IG5zaW1faXBzZWNfYWRkX3NhLFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jOjIyMTpcXHQueGRvX2Rldl9zdGF0ZV9kZWxldGVcXHQ9IG5zaW1faXBzZWNfZGVsX3NhLFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jLTIyMi19O1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jLTIyMy1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYzoyMjQ6Ym9vbCBuc2ltX2lwc2VjX3R4KHN0cnVjdCBuZXRkZXZzaW0gKm5zLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jLTIyNS17XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtMjI2LVxcdHN0cnVjdCBzZWNfcGF0aCAqc3AgPSBza2Jfc2VjX3BhdGgoc2tiKTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYzoyMjc6XFx0c3RydWN0IG5zaW1faXBzZWMgKmlwc2VjID0gXFx1MDAyNm5zLVxcdTAwM2VpcHNlYztcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy0yMjgtXFx0c3RydWN0IHhmcm1fc3RhdGUgKnhzO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtMjcwLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jOjI3MTp2b2lkIG5zaW1faXBzZWNfaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucylcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy0yNzIte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtMjg3LVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jOjI4ODp2b2lkIG5zaW1faXBzZWNfdGVhcmRvd24oc3RydWN0IG5ldGRldnNpbSAqbnMpXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtMjg5LXtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYzoyOTA6XFx0c3RydWN0IG5zaW1faXBzZWMgKmlwc2VjID0gXFx1MDAyNm5zLVxcdTAwM2VpcHNlYztcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy0yOTEtXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM9MTIzPXN0YXRpYyBuZXRkZXZfdHhfdCBuc2ltX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0xMzUtXFx0cmN1X3JlYWRfbG9jaygpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYzoxMzY6XFx0aWYgKCFuc2ltX2lwc2VjX3R4KG5zLCBza2IpKVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0xMzctXFx0XFx0Z290byBvdXRfZHJvcF9hbnk7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM9MTA0MD1zdGF0aWMgaW50IG5zaW1faW5pdF9uZXRkZXZzaW0oc3RydWN0IG5ldGRldnNpbSAqbnMpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtMTA2OS1cXHRuc2ltX21hY3NlY19pbml0KG5zKTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6MTA3MDpcXHRuc2ltX2lwc2VjX2luaXQobnMpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0xMDcxLVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTEwOTctZXJyX2lwc2VjX3RlYXJkb3duOlxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYzoxMDk4OlxcdG5zaW1faXBzZWNfdGVhcmRvd24obnMpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0xMDk5LVxcdG5zaW1fbWFjc2VjX3RlYXJkb3duKG5zKTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYz0xMTc1PXZvaWQgbnNpbV9kZXN0cm95KHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTEyMDAtXFx0XFx0bnNpbV9tYWNzZWNfdGVhcmRvd24obnMpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYzoxMjAxOlxcdFxcdG5zaW1faXBzZWNfdGVhcmRvd24obnMpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0xMjAyLVxcdFxcdG5zaW1fYnBmX3VuaW5pdChucyk7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg9NDI9c3RydWN0IG5zaW1fc2Ege1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTUxLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDo1MjpzdHJ1Y3QgbnNpbV9pcHNlYyB7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTUzLVxcdHN0cnVjdCBuc2ltX3NhIHNhW05TSU1fSVBTRUNfTUFYX1NBX0NPVU5UXTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD0xMDc9c3RydWN0IG5ldGRldnNpbSB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMTQxLVxcdGJvb2wgYnBmX21hcF9hY2NlcHQ7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjE0MjpcXHRzdHJ1Y3QgbnNpbV9pcHNlYyBpcHNlYztcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMTQzLVxcdHN0cnVjdCBuc2ltX21hY3NlYyBtYWNzZWM7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg9NDE0PXN0YXRpYyBpbmxpbmUgYm9vbCBuc2ltX2Rldl9wb3J0X2lzX3ZmKHN0cnVjdCBuc2ltX2Rldl9wb3J0ICpuc2ltX2Rldl9wb3J0KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQxOC0jaWYgSVNfRU5BQkxFRChDT05GSUdfWEZSTV9PRkZMT0FEKVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDo0MTk6dm9pZCBuc2ltX2lwc2VjX2luaXQoc3RydWN0IG5ldGRldnNpbSAqbnMpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDo0MjA6dm9pZCBuc2ltX2lwc2VjX3RlYXJkb3duKHN0cnVjdCBuZXRkZXZzaW0gKm5zKTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg6NDIxOmJvb2wgbnNpbV9pcHNlY190eChzdHJ1Y3QgbmV0ZGV2c2ltICpucywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQyMi0jZWxzZVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDo0MjM6c3RhdGljIGlubGluZSB2b2lkIG5zaW1faXBzZWNfaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucylcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtNDI0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC00MjYtXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjQyNzpzdGF0aWMgaW5saW5lIHZvaWQgbnNpbV9pcHNlY190ZWFyZG93bihzdHJ1Y3QgbmV0ZGV2c2ltICpucylcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtNDI4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC00MzAtXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjQzMTpzdGF0aWMgaW5saW5lIGJvb2wgbnNpbV9pcHNlY190eChzdHJ1Y3QgbmV0ZGV2c2ltICpucywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtNDMyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6NTc6MzAuNDU5MTUzMjY4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg0MjEzMzM5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBOZXRkZXZTaW0gQ29uZmlndXJhdGlvbiBmb3IgSVBTZWMgT2ZmbG9hZCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IHdpdGggYGRyaXZlcnMvbmV0L25ldGRldnNpbS9LY29uZmlnYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IEtjb25maWcgb3B0aW9ucyBuZWNlc3NhcnkgdG8gZW5hYmxlIG5ldGRldnNpbSB3aXRoIElQU2VjIG9mZmxvYWQgY2FwYWJpbGl0aWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgcmVxdWlyZWQgZm9yIHRoYXQgZnVuY3Rpb25hbGl0eSB0byBiZSBjb25maWd1cmVkLiBBcmUgdGhlcmUgc3BlY2lmaWMgZGVwZW5kZW5jaWVzPyBBcmUgdGhlcmUgaGlkZGVuIG9wdGlvbnMgdGhhdCBJJ20gbWlzc2luZz8gSSB3YW50IHRvIG1ha2Ugc3VyZSBJJ20gZW5hYmxpbmcgZXZlcnl0aGluZyB0aGF04oCZcyBuZWVkZWQgdG8gZXhwb3NlIGFuZCB1dGlsaXplIHRoYXQgZnVuY3Rpb25hbGl0eS4gSSdsbCBuZWVkIHRvIHBvcmUgb3ZlciB0aGUgZGVmaW5pdGlvbnMgaW4gdGhhdCBmaWxlIGNsb3NlbHksIGxvb2tpbmcgZm9yIGludGVyYWN0aW9ucyBhbmQgcG90ZW50aWFsIGNvbmZsaWN0cy4gSeKAmWxsIGJlIG9uIHRoZSBsb29rb3V0IGZvciBhbnkgc3VidGxlIGNsdWVzIGFib3V0IHRoZSBjb25maWd1cmF0aW9uIG9mIElQU2VjIG9mZmxvYWQgd2l0aGluIHRoZSBOZXREZXZTaW0gZW52aXJvbm1lbnQuIFRoaXMgd2lsbCBhbGxvdyBtZSB0byBlbnN1cmUgbXkgYnVpbGRzIHdpbGwgaGF2ZSB0aGlzIGNhcGFiaWxpdHkuIEkgaG9wZSBpdCBpcyBhbGwgc2VsZi1ldmlkZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTY0LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6NTc6MzMuMzAxMjg5OTgzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDM0NzkyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJORVRERVZTSU1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz02MDI9c291cmNlIFxcXCJkcml2ZXJzL25ldC9oeXBlcnYvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL25ldC9LY29uZmlnLTYwMy1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjYwNDpjb25maWcgTkVUREVWU0lNXFxuZHJpdmVycy9uZXQvS2NvbmZpZy02MDUtXFx0dHJpc3RhdGUgXFxcIlNpbXVsYXRlZCBuZXR3b3JraW5nIGRldmljZVxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L01ha2VmaWxlPTg2PW9iai0kKENPTkZJR19VU0I0X05FVCkgKz0gdGh1bmRlcmJvbHQvXFxuZHJpdmVycy9uZXQvTWFrZWZpbGU6ODc6b2JqLSQoQ09ORklHX05FVERFVlNJTSkgKz0gbmV0ZGV2c2ltL1xcbmRyaXZlcnMvbmV0L01ha2VmaWxlLTg4LW9iai0kKENPTkZJR19ORVRfRkFJTE9WRVIpICs9IG5ldF9mYWlsb3Zlci5vXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vTWFrZWZpbGUtMi1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vTWFrZWZpbGU6MzpvYmotJChDT05GSUdfTkVUREVWU0lNKSArPSBuZXRkZXZzaW0ub1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZS00LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzo1NzozMy40NzE2NDMzNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2MDkwMzAzMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIE5ldHdvcmsgRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIG5ldHdvcmsgZHJpdmVyIHNpdHVhdGlvbiBiZXR0ZXIuIExldCdzIHNlZS4uLiB0aGUgYEtjb25maWdgIGZpbGUgaW4gdGhlIGBkcml2ZXJzL25ldGAgZGlyZWN0b3J5LCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNjA0LCBzZWVtcyBsaWtlIGEgbGlrZWx5IHBsYWNlIHRvIHN0YXJ0LiBUaGF0J3MgdXN1YWxseSB3aGVyZSB5b3UgZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBuZXR3b3JrIGRldmljZXMsIHJpZ2h0PyBJdCdsbCBsaWtlbHkgdGVsbCBtZSB0aGUgZGVwZW5kZW5jaWVzLCB0aGUgYnVpbGQgZmxhZ3MsIGFuZCBhbGwgdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzIEkgbmVlZCB0byBrbm93IHRvIHRydWx5IHVuZGVyc3RhbmQgaXRzIGlubmVyIHdvcmtpbmdzLiBUaGVuLCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgcGFydGljdWxhciBkcml2ZXIgZ2V0cyBidWlsdCBpbnRvIHRoZSBrZXJuZWwsIEknbGwgbmVlZCB0byBjaGVjayB0aGUgYE1ha2VmaWxlYCBsb2NhdGVkIGluIGBkcml2ZXJzL25ldC9uZXRkZXZzaW1gLiBUaGF0J2xsIGdpdmUgbWUgdGhlIGJ1aWxkIHJ1bGVzLCBvYmplY3QgZmlsZSBkZXBlbmRlbmNpZXMsIGFuZCBob3cgaXQgYWxsIGdldHMgbGlua2VkIHRvZ2V0aGVyLiBUaGF0IHNob3VsZCBvZmZlciB0aGUgbW9zdCBjb21wbGV0ZSBjb250ZXh0IGZvciBteSBjdXJyZW50IG5lZWRzLiBUaW1lIHRvIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY0NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjU3OjM2LjA4MDY3Njk3OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwMDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNjAwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjAwOlxcdFxcbiA2MDE6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC90aHVuZGVyYm9sdC9LY29uZmlnXFxcIlxcbiA2MDI6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC9oeXBlcnYvS2NvbmZpZ1xcXCJcXG4gNjAzOlxcdFxcbiA2MDQ6XFx0Y29uZmlnIE5FVERFVlNJTVxcbiA2MDU6XFx0XFx0dHJpc3RhdGUgXFxcIlNpbXVsYXRlZCBuZXR3b3JraW5nIGRldmljZVxcXCJcXG4gNjA2OlxcdFxcdGRlcGVuZHMgb24gREVCVUdfRlNcXG4gNjA3OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiA2MDg6XFx0XFx0ZGVwZW5kcyBvbiBQU0FNUExFIHx8IFBTQU1QTEU9blxcbiA2MDk6XFx0XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19NT0NLIHx8IFBUUF8xNTg4X0NMT0NLX01PQ0s9blxcbiA2MTA6XFx0XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuIDYxMTpcXHRcXHRzZWxlY3QgUEFHRV9QT09MXFxuIDYxMjpcXHRcXHRzZWxlY3QgTkVUX1NIQVBFUlxcbiA2MTM6XFx0XFx0aGVscFxcbiA2MTQ6XFx0XFx0ICBUaGlzIGRyaXZlciBpcyBhIGRldmVsb3BlciB0ZXN0aW5nIHRvb2wgYW5kIHNvZnR3YXJlIG1vZGVsIHRoYXQgY2FuXFxuIDYxNTpcXHRcXHQgIGJlIHVzZWQgdG8gdGVzdCB2YXJpb3VzIGNvbnRyb2wgcGF0aCBuZXR3b3JraW5nIEFQSXMsIGVzcGVjaWFsbHlcXG4gNjE2OlxcdFxcdCAgSFctb2ZmbG9hZCByZWxhdGVkLlxcbiA2MTc6XFx0XFxuIDYxODpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gNjE5OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgbmV0ZGV2c2ltLlxcbiA2MjA6XFx0XFxuIDYyMTpcXHRjb25maWcgTkVUX0ZBSUxPVkVSXFxuIDYyMjpcXHRcXHR0cmlzdGF0ZSBcXFwiRmFpbG92ZXIgZHJpdmVyXFxcIlxcbiA2MjM6XFx0XFx0c2VsZWN0IEZBSUxPVkVSXFxuIDYyNDpcXHRcXHRoZWxwXFxuIDYyNTpcXHRcXHQgIFRoaXMgcHJvdmlkZXMgYW4gYXV0b21hdGVkIGZhaWxvdmVyIG1lY2hhbmlzbSB2aWEgQVBJcyB0byBjcmVhdGVcXG4gNjI2OlxcdFxcdCAgYW5kIGRlc3Ryb3kgYSBmYWlsb3ZlciBtYXN0ZXIgbmV0ZGV2IGFuZCBtYW5hZ2VzIGEgcHJpbWFyeSBhbmRcXG4gNjI3OlxcdFxcdCAgc3RhbmRieSBzbGF2ZSBuZXRkZXZzIHRoYXQgZ2V0IHJlZ2lzdGVyZWQgdmlhIHRoZSBnZW5lcmljIGZhaWxvdmVyXFxuIDYyODpcXHRcXHQgIGluZnJhc3RydWN0dXJlLiBUaGlzIGNhbiBiZSB1c2VkIGJ5IHBhcmF2aXJ0dWFsIGRyaXZlcnMgdG8gZW5hYmxlXFxuIDYyOTpcXHRcXHQgIGFuIGFsdGVybmF0ZSBsb3cgbGF0ZW5jeSBkYXRhcGF0aC4gSXQgYWxzbyBlbmFibGVzIGxpdmUgbWlncmF0aW9uIG9mXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjU3OjM2LjA4MDc2ODU1OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2MDg1Mzk4OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIElQc2VjIE9iamVjdCBDb21waWxhdGlvbioqXG5cbkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGBpcHNlYy5vYCBpcyBiZWluZyBidWlsdCB3aXRoaW4gdGhlIGBuZXRkZXZzaW1gIGZyYW1ld29yay4gTXkgZmlyc3Qgc3RvcCwgYXMgYWx3YXlzIGluIHRoZXNlIHNpdHVhdGlvbnMsIGlzIHRoZSBgTWFrZWZpbGVgLiBTcGVjaWZpY2FsbHksIGBkcml2ZXJzL25ldC9uZXRkZXZzaW0vTWFrZWZpbGVgLiBUaGF0J3Mgd2hlcmUgdGhlIG1hZ2ljIHNob3VsZCBiZSBoYXBwZW5pbmcg4oCTIHRoZSBydWxlcywgdGhlIGRlcGVuZGVuY2llcywgdGhlIGZsYWdzLi4uIEl0J3MgYWxsIHRoZXJlLCBob3BlZnVsbHkgbGFpZCBvdXQgaW4gYSBjbGVhbiBhbmQgbG9naWNhbCB3YXkuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIHJlbGV2YW50IHRhcmdldHMgYW5kIHNvdXJjZSBmaWxlIGRlcGVuZGVuY2llcywgYW55IHNwZWNpZmljIGNvbXBpbGVyIGZsYWdzIGJlaW5nIGVtcGxveWVkIGZvciBJUHNlYyB3aXRoaW4gdGhpcyBzaW11bGF0ZWQgbmV0d29yayBkZXZpY2UgY29udGV4dCwgYW5kIHBvc3NpYmx5IGFueSBsaW5rZXIgaW50cmljYWNpZXMgaWYgaXQncyBsaW5raW5nIGFnYWluc3QgZXh0ZXJuYWwgbGlicmFyaWVzLiBMZXQncyBzZWUgaWYgdGhlIGFwcHJvYWNoIGlzIHN0cmFpZ2h0Zm9yd2FyZCwgb3IgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgdHJpY2tzIHVzZWQgdG8gaW50ZWdyYXRlIHRoZSBJUHNlYyBjb2RlIGVmZmVjdGl2ZWx5IGludG8gdGhlIHNpbXVsYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzNzUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjU3OjM4LjY4OTMxMzE2OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9uZXRkZXZzaW0vTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRcXG4gICAzOlxcdG9iai0kKENPTkZJR19ORVRERVZTSU0pICs9IG5ldGRldnNpbS5vXFxuICAgNDpcXHRcXG4gICA1OlxcdG5ldGRldnNpbS1vYmpzIDo9IFxcXFxcXG4gICA2OlxcdFxcdG5ldGRldi5vIGRldi5vIGV0aHRvb2wubyBmaWIubyBidXMubyBoZWFsdGgubyBod3N0YXRzLm8gdWRwX3R1bm5lbHMubyB0Yy5vXFxuICAgNzpcXHRcXG4gICA4OlxcdGlmZXEgKCQoQ09ORklHX0JQRl9TWVNDQUxMKSx5KVxcbiAgIDk6XFx0bmV0ZGV2c2ltLW9ianMgKz0gXFxcXFxcbiAgMTA6XFx0XFx0YnBmLm9cXG4gIDExOlxcdGVuZGlmXFxuICAxMjpcXHRcXG4gIDEzOlxcdGlmbmVxICgkKENPTkZJR19YRlJNX09GRkxPQUQpLClcXG4gIDE0OlxcdG5ldGRldnNpbS1vYmpzICs9IGlwc2VjLm9cXG4gIDE1OlxcdGVuZGlmXFxuICAxNjpcXHRcXG4gIDE3OlxcdGlmbmVxICgkKENPTkZJR19QU0FNUExFKSwpXFxuICAxODpcXHRuZXRkZXZzaW0tb2JqcyArPSBwc2FtcGxlLm9cXG4gIDE5OlxcdGVuZGlmXFxuICAyMDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6NTc6MzguNjg5MzgyODg5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4NzkxMDAyNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIERlZXAgaW50byBgaXBzZWMuY2AqKlxuXG5Pa2F5LCB0aW1lIHRvIHJlYWxseSBkaWcgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIHRoZSByZWNlbnQgY2hhbmdlcyB0byBgaXBzZWMuY2AuIEknbSBnb2luZyB0byBtZXRpY3Vsb3VzbHkgZ28gdGhyb3VnaCB0aGUgY29kZSwgbGluZSBieSBsaW5lIGlmIG5lY2Vzc2FyeS4gSSB3YW50IHRvIHNlZSBwcmVjaXNlbHkgKndoYXQqIHdhcyBtb2RpZmllZCwgYW5kIG1vcmUgaW1wb3J0YW50bHksICpob3cqIHRoZXNlIGNoYW5nZXMgaW1wYWN0IHRoZSBleGVjdXRpb24gZmxvdy4gSSdtIGxvb2tpbmcgZm9yIHRoZSByaXBwbGUgZWZmZWN0cyDigJMgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGFjdHMsIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgb3Igc3VidGxlIGJlaGF2aW9yYWwgc2hpZnRzLiBJJ2xsIGJlIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoLCBtZW50YWxseSBzaW11bGF0aW5nIHNjZW5hcmlvcywgYW5kIGNvbXBhcmluZyB0aGUgdXBkYXRlZCBsb2dpYyBhZ2FpbnN0IG15IGV4aXN0aW5nIG1lbnRhbCBtb2RlbCBvZiB0aGUgSVBTZWMgc3RhY2suIFRoaXMgaXNuJ3QganVzdCBhIGN1cnNvcnkgZ2xhbmNlOyBJIG5lZWQgdG8gZGV2ZWxvcCBhIHJvY2stc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgdXBkYXRlZCBpbnRlcmFjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg4OSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6NTc6NDAuNTY4NDg1NzZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE4MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdC8qIENvcHlyaWdodChjKSAyMDE4IE9yYWNsZSBhbmQvb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuICovXFxuICAgMzpcXHRcXG4gICA0OlxcdCNpbmNsdWRlIFxcdTAwM2NjcnlwdG8vYWVhZC5oXFx1MDAzZVxcbiAgIDU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RlYnVnZnMuaFxcdTAwM2VcXG4gICA2OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQveGZybS5oXFx1MDAzZVxcbiAgIDc6XFx0XFxuICAgODpcXHQjaW5jbHVkZSBcXFwibmV0ZGV2c2ltLmhcXFwiXFxuICAgOTpcXHRcXG4gIDEwOlxcdCNkZWZpbmUgTlNJTV9JUFNFQ19BVVRIX0JJVFNcXHQxMjhcXG4gIDExOlxcdFxcbiAgMTI6XFx0c3RhdGljIHNzaXplX3QgbnNpbV9kYmdfbmV0ZGV2X29wc19yZWFkKHN0cnVjdCBmaWxlICpmaWxwLFxcbiAgMTM6XFx0XFx0XFx0XFx0XFx0XFx0Y2hhciBfX3VzZXIgKmJ1ZmZlcixcXG4gIDE0OlxcdFxcdFxcdFxcdFxcdFxcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxcbiAgMTU6XFx0e1xcbiAgMTY6XFx0XFx0c3RydWN0IG5ldGRldnNpbSAqbnMgPSBmaWxwLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuICAxNzpcXHRcXHRzdHJ1Y3QgbnNpbV9pcHNlYyAqaXBzZWMgPSBcXHUwMDI2bnMtXFx1MDAzZWlwc2VjO1xcbiAgMTg6XFx0XFx0c2l6ZV90IGJ1ZnNpemU7XFxuICAxOTpcXHRcXHRjaGFyICpidWYsICpwO1xcbiAgMjA6XFx0XFx0aW50IGxlbjtcXG4gIDIxOlxcdFxcdGludCBpO1xcbiAgMjI6XFx0XFxuICAyMzpcXHRcXHQvKiB0aGUgYnVmZmVyIG5lZWRlZCBpc1xcbiAgMjQ6XFx0XFx0ICogKG51bSBTQXMgKiAzIGxpbmVzIGVhY2ggKiB+NjAgYnl0ZXMgcGVyIGxpbmUpICsgb25lIG1vcmUgbGluZVxcbiAgMjU6XFx0XFx0ICovXFxuICAyNjpcXHRcXHRidWZzaXplID0gKGlwc2VjLVxcdTAwM2Vjb3VudCAqIDQgKiA2MCkgKyA2MDtcXG4gIDI3OlxcdFxcdGJ1ZiA9IGt6YWxsb2MoYnVmc2l6ZSwgR0ZQX0tFUk5FTCk7XFxuICAyODpcXHRcXHRpZiAoIWJ1ZilcXG4gIDI5OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAgMzA6XFx0XFxuICAzMTpcXHRcXHRwID0gYnVmO1xcbiAgMzI6XFx0XFx0cCArPSBzY25wcmludGYocCwgYnVmc2l6ZSAtIChwIC0gYnVmKSxcXG4gIDMzOlxcdFxcdFxcdCAgICAgICBcXFwiU0EgY291bnQ9JXUgdHg9JXVcXFxcblxcXCIsXFxuICAzNDpcXHRcXHRcXHQgICAgICAgaXBzZWMtXFx1MDAzZWNvdW50LCBpcHNlYy1cXHUwMDNldHgpO1xcbiAgMzU6XFx0XFxuICAzNjpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTlNJTV9JUFNFQ19NQVhfU0FfQ09VTlQ7IGkrKykge1xcbiAgMzc6XFx0XFx0XFx0c3RydWN0IG5zaW1fc2EgKnNhcCA9IFxcdTAwMjZpcHNlYy1cXHUwMDNlc2FbaV07XFxuICAzODpcXHRcXG4gIDM5OlxcdFxcdFxcdGlmICghc2FwLVxcdTAwM2V1c2VkKVxcbiAgNDA6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuICA0MTpcXHRcXG4gIDQyOlxcdFxcdFxcdGlmIChzYXAtXFx1MDAzZXhzLVxcdTAwM2Vwcm9wcy5mYW1pbHkgPT0gQUZfSU5FVDYpXFxuICA0MzpcXHRcXHRcXHRcXHRwICs9IHNjbnByaW50ZihwLCBidWZzaXplIC0gKHAgLSBidWYpLFxcbiAgNDQ6XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJzYVslaV0gJWN4IGlwYWRkcj0lcEk2Y1xcXFxuXFxcIixcXG4gIDQ1OlxcdFxcdFxcdFxcdFxcdCAgICAgICBpLCAoc2FwLVxcdTAwM2VyeCA/ICdyJyA6ICd0JyksIFxcdTAwMjZzYXAtXFx1MDAzZWlwYWRkcik7XFxuICA0NjpcXHRcXHRcXHRlbHNlXFxuICA0NzpcXHRcXHRcXHRcXHRwICs9IHNjbnByaW50ZihwLCBidWZzaXplIC0gKHAgLSBidWYpLFxcbiAgNDg6XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJzYVslaV0gJWN4IGlwYWRkcj0lcEk0XFxcXG5cXFwiLFxcbiAgNDk6XFx0XFx0XFx0XFx0XFx0ICAgICAgIGksIChzYXAtXFx1MDAzZXJ4ID8gJ3InIDogJ3QnKSwgXFx1MDAyNnNhcC1cXHUwMDNlaXBhZGRyWzNdKTtcXG4gIDUwOlxcdFxcdFxcdHAgKz0gc2NucHJpbnRmKHAsIGJ1ZnNpemUgLSAocCAtIGJ1ZiksXFxuICA1MTpcXHRcXHRcXHRcXHQgICAgICAgXFxcInNhWyVpXSAgICBzcGk9MHglMDh4IHByb3RvPTB4JXggc2FsdD0weCUwOHggY3J5cHQ9JWRcXFxcblxcXCIsXFxuICA1MjpcXHRcXHRcXHRcXHQgICAgICAgaSwgYmUzMl90b19jcHUoc2FwLVxcdTAwM2V4cy1cXHUwMDNlaWQuc3BpKSxcXG4gIDUzOlxcdFxcdFxcdFxcdCAgICAgICBzYXAtXFx1MDAzZXhzLVxcdTAwM2VpZC5wcm90bywgYmUzMl90b19jcHUoc2FwLVxcdTAwM2VzYWx0KSwgc2FwLVxcdTAwM2VjcnlwdCk7XFxuICA1NDpcXHRcXHRcXHRwICs9IHNjbnByaW50ZihwLCBidWZzaXplIC0gKHAgLSBidWYpLFxcbiAgNTU6XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJzYVslaV0gICAga2V5PTB4JTA4eCAlMDh4ICUwOHggJTA4eFxcXFxuXFxcIixcXG4gIDU2OlxcdFxcdFxcdFxcdCAgICAgICBpLCBiZTMyX3RvX2NwdShzYXAtXFx1MDAzZWtleVswXSksIGJlMzJfdG9fY3B1KHNhcC1cXHUwMDNla2V5WzFdKSxcXG4gIDU3OlxcdFxcdFxcdFxcdCAgICAgICBiZTMyX3RvX2NwdShzYXAtXFx1MDAzZWtleVsyXSksIGJlMzJfdG9fY3B1KHNhcC1cXHUwMDNla2V5WzNdKSk7XFxuICA1ODpcXHRcXHR9XFxuICA1OTpcXHRcXG4gIDYwOlxcdFxcdGxlbiA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZmZlciwgY291bnQsIHBwb3MsIGJ1ZiwgcCAtIGJ1Zik7XFxuICA2MTpcXHRcXG4gIDYyOlxcdFxcdGtmcmVlKGJ1Zik7XFxuICA2MzpcXHRcXHRyZXR1cm4gbGVuO1xcbiAgNjQ6XFx0fVxcbiAgNjU6XFx0XFxuICA2NjpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpcHNlY19kYmdfZm9wcyA9IHtcXG4gIDY3OlxcdFxcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbiAgNjg6XFx0XFx0Lm9wZW4gPSBzaW1wbGVfb3BlbixcXG4gIDY5OlxcdFxcdC5yZWFkID0gbnNpbV9kYmdfbmV0ZGV2X29wc19yZWFkLFxcbiAgNzA6XFx0fTtcXG4gIDcxOlxcdFxcbiAgNzI6XFx0c3RhdGljIGludCBuc2ltX2lwc2VjX2ZpbmRfZW1wdHlfaWR4KHN0cnVjdCBuc2ltX2lwc2VjICppcHNlYylcXG4gIDczOlxcdHtcXG4gIDc0OlxcdFxcdHUzMiBpO1xcbiAgNzU6XFx0XFxuICA3NjpcXHRcXHRpZiAoaXBzZWMtXFx1MDAzZWNvdW50ID09IE5TSU1fSVBTRUNfTUFYX1NBX0NPVU5UKVxcbiAgNzc6XFx0XFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuICA3ODpcXHRcXG4gIDc5OlxcdFxcdC8qIHNlYXJjaCBzYSB0YWJsZSAqL1xcbiAgODA6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5TSU1fSVBTRUNfTUFYX1NBX0NPVU5UOyBpKyspIHtcXG4gIDgxOlxcdFxcdFxcdGlmICghaXBzZWMtXFx1MDAzZXNhW2ldLnVzZWQpXFxuICA4MjpcXHRcXHRcXHRcXHRyZXR1cm4gaTtcXG4gIDgzOlxcdFxcdH1cXG4gIDg0OlxcdFxcbiAgODU6XFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuICA4NjpcXHR9XFxuICA4NzpcXHRcXG4gIDg4OlxcdHN0YXRpYyBpbnQgbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuICA4OTpcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHhmcm1fc3RhdGUgKnhzLFxcbiAgOTA6XFx0XFx0XFx0XFx0XFx0ICAgICAgIF9fYmUzMiAqbXlrZXksIF9fYmUzMiAqbXlzYWx0KVxcbiAgOTE6XFx0e1xcbiAgOTI6XFx0XFx0Y29uc3QgY2hhciBhZXNfZ2NtX25hbWVbXSA9IFxcXCJyZmM0MTA2KGdjbShhZXMpKVxcXCI7XFxuICA5MzpcXHRcXHR1bnNpZ25lZCBjaGFyICprZXlfZGF0YTtcXG4gIDk0OlxcdFxcdGNoYXIgKmFsZ19uYW1lID0gTlVMTDtcXG4gIDk1OlxcdFxcdGludCBrZXlfbGVuO1xcbiAgOTY6XFx0XFxuICA5NzpcXHRcXHRpZiAoIXhzLVxcdTAwM2VhZWFkKSB7XFxuICA5ODpcXHRcXHRcXHRuZXRkZXZfZXJyKGRldiwgXFxcIlVuc3VwcG9ydGVkIElQc2VjIGFsZ29yaXRobVxcXFxuXFxcIik7XFxuICA5OTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMTAwOlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6NTc6NDAuNTY4NTc5MTJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI2NTI4MjUwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSB3ZSBnby4uLlxuXG4qKkRpdmluZyBpbnRvIGBkcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuY2AqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgYGlwc2VjLmNgIGZpbGUgd2l0aGluIHRoZSBgbmV0ZGV2c2ltYCBkaXJlY3RvcnkuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciBoYW5kbGUgb24gaG93IHRoZSBzaW11bGF0ZWQgSVBzZWMgZnVuY3Rpb25hbGl0eSBpcyBpbXBsZW1lbnRlZCB3aXRoaW4gdGhlIG5ldGRldnNpbSBlbnZpcm9ubWVudC4gSSdtIGhvcGluZyB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGV5J3JlIGhhbmRsaW5nIHRoZSBlbmNhcHN1bGF0aW9uIGFuZCBkZWNhcHN1bGF0aW9uLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBzeW50aGV0aWMgbmF0dXJlIG9mIHRoaXMgdmlydHVhbCBuZXR3b3JrIGludGVyZmFjZS4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyB0aGV5J3JlIG1pbWlja2luZyB0aGUgSVBzZWMgU0EgbmVnb3RpYXRpb24gYW5kIGtleSBtYW5hZ2VtZW50IHdpdGhvdXQgcmVseWluZyBvbiBoYXJkd2FyZSBvZmZsb2FkIG9yIHNwZWNpZmljIGNyeXB0byBhY2NlbGVyYXRvcnMsIHRoYXQgd291bGQgYmUgdXNlbGVzcyBpbiB0aGlzIGNvbnRleHQuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWTigJRzcGVjaWZpY2FsbHksIHRoZSBzaW11bGF0ZWQgU2VjdXJpdHkgQXNzb2NpYXRpb25zIChTQXMpIGFuZCBob3cgdGhleSdyZSByZXByZXNlbnRlZC4gQXJlIHRoZXkgdXNpbmcgYSBzaW1wbGlmaWVkIG1vZGVsLCBvciBhIG1vcmUgZmFpdGhmdWwgKHRob3VnaCBhYnN0cmFjdGVkKSByZXByZXNlbnRhdGlvbiBvZiBJS0UvSVBzZWMgcHJvdG9jb2xzPyBJJ2xsIGJlIGxvb2tpbmcgZm9yIGhvdyB0aGV5IGFyZSBoYW5kbGluZyBhbnkgc3RhdGUgdHJhbnNpdGlvbnMsIGFuZCBob3cgdGhlIHNpbXVsYXRpb24gaGFuZGxlcyBkaWZmZXJlbnQgcGFja2V0IGZsb3dzLCBhbmQgaG93IGl0IGRlYWxzIHdpdGggdGhlIHBvdGVudGlhbCBmb3IgZnJhZ21lbnRhdGlvbiBvciByZWFzc2VtYmx5IHdpdGhpbiB0aGUgc2ltdWxhdGVkIElQc2VjIHR1bm5lbC4gRXNzZW50aWFsbHksIEkgbmVlZCB0byBzZWUgaWYgaXQgcHJvdmlkZXMgYW4gYWNjdXJhdGUsIG9yIGF0IGxlYXN0IGEgdXNhYmxlLCBhYnN0cmFjdGlvbiBvZiBJUHNlYywgZm9yIHRlc3QgcHVycG9zZXMsIHdpdGhpbiB0aGlzIG5ldHdvcmsgc2ltdWxhdGlvbiBlbnZpcm9ubWVudC4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3MDEsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjU3OjQyLjgzMzg2NjIzNloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAxOlxcdFxcbiAxMDI6XFx0XFx0aWYgKHhzLVxcdTAwM2VhZWFkLVxcdTAwM2VhbGdfaWN2X2xlbiAhPSBOU0lNX0lQU0VDX0FVVEhfQklUUykge1xcbiAxMDM6XFx0XFx0XFx0bmV0ZGV2X2VycihkZXYsIFxcXCJJUHNlYyBvZmZsb2FkIHJlcXVpcmVzICVkIGJpdCBhdXRoZW50aWNhdGlvblxcXFxuXFxcIixcXG4gMTA0OlxcdFxcdFxcdFxcdCAgIE5TSU1fSVBTRUNfQVVUSF9CSVRTKTtcXG4gMTA1OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAxMDY6XFx0XFx0fVxcbiAxMDc6XFx0XFxuIDEwODpcXHRcXHRrZXlfZGF0YSA9IFxcdTAwMjZ4cy1cXHUwMDNlYWVhZC1cXHUwMDNlYWxnX2tleVswXTtcXG4gMTA5OlxcdFxcdGtleV9sZW4gPSB4cy1cXHUwMDNlYWVhZC1cXHUwMDNlYWxnX2tleV9sZW47XFxuIDExMDpcXHRcXHRhbGdfbmFtZSA9IHhzLVxcdTAwM2VhZWFkLVxcdTAwM2VhbGdfbmFtZTtcXG4gMTExOlxcdFxcbiAxMTI6XFx0XFx0aWYgKHN0cmNtcChhbGdfbmFtZSwgYWVzX2djbV9uYW1lKSkge1xcbiAxMTM6XFx0XFx0XFx0bmV0ZGV2X2VycihkZXYsIFxcXCJVbnN1cHBvcnRlZCBJUHNlYyBhbGdvcml0aG0gLSBwbGVhc2UgdXNlICVzXFxcXG5cXFwiLFxcbiAxMTQ6XFx0XFx0XFx0XFx0ICAgYWVzX2djbV9uYW1lKTtcXG4gMTE1OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAxMTY6XFx0XFx0fVxcbiAxMTc6XFx0XFxuIDExODpcXHRcXHQvKiAxNjAgYWNjb3VudHMgZm9yIDE2IGJ5dGUga2V5IGFuZCA0IGJ5dGUgc2FsdCAqL1xcbiAxMTk6XFx0XFx0aWYgKGtleV9sZW4gXFx1MDAzZSBOU0lNX0lQU0VDX0FVVEhfQklUUykge1xcbiAxMjA6XFx0XFx0XFx0Km15c2FsdCA9ICgoX19iZTMyICopa2V5X2RhdGEpWzRdO1xcbiAxMjE6XFx0XFx0fSBlbHNlIGlmIChrZXlfbGVuID09IE5TSU1fSVBTRUNfQVVUSF9CSVRTKSB7XFxuIDEyMjpcXHRcXHRcXHQqbXlzYWx0ID0gMDtcXG4gMTIzOlxcdFxcdH0gZWxzZSB7XFxuIDEyNDpcXHRcXHRcXHRuZXRkZXZfZXJyKGRldiwgXFxcIklQc2VjIGh3IG9mZmxvYWQgb25seSBzdXBwb3J0cyAxMjggYml0IGtleXMgd2l0aCBvcHRpb25hbCAzMiBiaXQgc2FsdFxcXFxuXFxcIik7XFxuIDEyNTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMTI2OlxcdFxcdH1cXG4gMTI3OlxcdFxcdG1lbWNweShteWtleSwga2V5X2RhdGEsIDE2KTtcXG4gMTI4OlxcdFxcbiAxMjk6XFx0XFx0cmV0dXJuIDA7XFxuIDEzMDpcXHR9XFxuIDEzMTpcXHRcXG4gMTMyOlxcdHN0YXRpYyBpbnQgbnNpbV9pcHNlY19hZGRfc2Eoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gMTMzOlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHhmcm1fc3RhdGUgKnhzLFxcbiAxMzQ6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDEzNTpcXHR7XFxuIDEzNjpcXHRcXHRzdHJ1Y3QgbnNpbV9pcHNlYyAqaXBzZWM7XFxuIDEzNzpcXHRcXHRzdHJ1Y3QgbmV0ZGV2c2ltICpucztcXG4gMTM4OlxcdFxcdHN0cnVjdCBuc2ltX3NhIHNhO1xcbiAxMzk6XFx0XFx0dTE2IHNhX2lkeDtcXG4gMTQwOlxcdFxcdGludCByZXQ7XFxuIDE0MTpcXHRcXG4gMTQyOlxcdFxcdG5zID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4gMTQzOlxcdFxcdGlwc2VjID0gXFx1MDAyNm5zLVxcdTAwM2VpcHNlYztcXG4gMTQ0OlxcdFxcbiAxNDU6XFx0XFx0aWYgKHhzLVxcdTAwM2VpZC5wcm90byAhPSBJUFBST1RPX0VTUCBcXHUwMDI2XFx1MDAyNiB4cy1cXHUwMDNlaWQucHJvdG8gIT0gSVBQUk9UT19BSCkge1xcbiAxNDY6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIlVuc3VwcG9ydGVkIHByb3RvY29sIGZvciBpcHNlYyBvZmZsb2FkXFxcIik7XFxuIDE0NzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMTQ4OlxcdFxcdH1cXG4gMTQ5OlxcdFxcbiAxNTA6XFx0XFx0aWYgKHhzLVxcdTAwM2VjYWxnKSB7XFxuIDE1MTpcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiQ29tcHJlc3Npb24gb2ZmbG9hZCBub3Qgc3VwcG9ydGVkXFxcIik7XFxuIDE1MjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMTUzOlxcdFxcdH1cXG4gMTU0OlxcdFxcbiAxNTU6XFx0XFx0aWYgKHhzLVxcdTAwM2V4c28udHlwZSAhPSBYRlJNX0RFVl9PRkZMT0FEX0NSWVBUTykge1xcbiAxNTY6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIlVuc3VwcG9ydGVkIGlwc2VjIG9mZmxvYWQgdHlwZVxcXCIpO1xcbiAxNTc6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDE1ODpcXHRcXHR9XFxuIDE1OTpcXHRcXG4gMTYwOlxcdFxcdC8qIGZpbmQgdGhlIGZpcnN0IHVudXNlZCBpbmRleCAqL1xcbiAxNjE6XFx0XFx0cmV0ID0gbnNpbV9pcHNlY19maW5kX2VtcHR5X2lkeChpcHNlYyk7XFxuIDE2MjpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbiAxNjM6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIk5vIHNwYWNlIGZvciBTQSBpbiBSeCB0YWJsZSFcXFwiKTtcXG4gMTY0OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDE2NTpcXHRcXHR9XFxuIDE2NjpcXHRcXHRzYV9pZHggPSAodTE2KXJldDtcXG4gMTY3OlxcdFxcbiAxNjg6XFx0XFx0bWVtc2V0KFxcdTAwMjZzYSwgMCwgc2l6ZW9mKHNhKSk7XFxuIDE2OTpcXHRcXHRzYS51c2VkID0gdHJ1ZTtcXG4gMTcwOlxcdFxcdHNhLnhzID0geHM7XFxuIDE3MTpcXHRcXG4gMTcyOlxcdFxcdGlmIChzYS54cy1cXHUwMDNlaWQucHJvdG8gXFx1MDAyNiBJUFBST1RPX0VTUClcXG4gMTczOlxcdFxcdFxcdHNhLmNyeXB0ID0geHMtXFx1MDAzZWVhbGcgfHwgeHMtXFx1MDAzZWFlYWQ7XFxuIDE3NDpcXHRcXG4gMTc1OlxcdFxcdC8qIGdldCB0aGUga2V5IGFuZCBzYWx0ICovXFxuIDE3NjpcXHRcXHRyZXQgPSBuc2ltX2lwc2VjX3BhcnNlX3Byb3RvX2tleXMoZGV2LCB4cywgc2Eua2V5LCBcXHUwMDI2c2Euc2FsdCk7XFxuIDE3NzpcXHRcXHRpZiAocmV0KSB7XFxuIDE3ODpcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiRmFpbGVkIHRvIGdldCBrZXkgZGF0YSBmb3IgU0EgdGFibGVcXFwiKTtcXG4gMTc5OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDE4MDpcXHRcXHR9XFxuIDE4MTpcXHRcXG4gMTgyOlxcdFxcdGlmICh4cy1cXHUwMDNleHNvLmRpciA9PSBYRlJNX0RFVl9PRkZMT0FEX0lOKVxcbiAxODM6XFx0XFx0XFx0c2EucnggPSB0cnVlO1xcbiAxODQ6XFx0XFxuIDE4NTpcXHRcXHRpZiAoeHMtXFx1MDAzZXByb3BzLmZhbWlseSA9PSBBRl9JTkVUNilcXG4gMTg2OlxcdFxcdFxcdG1lbWNweShzYS5pcGFkZHIsIFxcdTAwMjZ4cy1cXHUwMDNlaWQuZGFkZHIuYTYsIDE2KTtcXG4gMTg3OlxcdFxcdGVsc2VcXG4gMTg4OlxcdFxcdFxcdG1lbWNweShcXHUwMDI2c2EuaXBhZGRyWzNdLCBcXHUwMDI2eHMtXFx1MDAzZWlkLmRhZGRyLmE0LCA0KTtcXG4gMTg5OlxcdFxcbiAxOTA6XFx0XFx0LyogdGhlIHByZXBhcmF0aW9ucyB3b3JrZWQsIHNvIHNhdmUgdGhlIGluZm8gKi9cXG4gMTkxOlxcdFxcdG1lbWNweShcXHUwMDI2aXBzZWMtXFx1MDAzZXNhW3NhX2lkeF0sIFxcdTAwMjZzYSwgc2l6ZW9mKHNhKSk7XFxuIDE5MjpcXHRcXG4gMTkzOlxcdFxcdC8qIHRoZSBYRlJNIHN0YWNrIGRvZXNuJ3QgbGlrZSBvZmZsb2FkX2hhbmRsZSA9PSAwLFxcbiAxOTQ6XFx0XFx0ICogc28gYWRkIGEgYml0ZmxhZyBpbiBjYXNlIG91ciBhcnJheSBpbmRleCBpcyAwXFxuIDE5NTpcXHRcXHQgKi9cXG4gMTk2OlxcdFxcdHhzLVxcdTAwM2V4c28ub2ZmbG9hZF9oYW5kbGUgPSBzYV9pZHggfCBOU0lNX0lQU0VDX1ZBTElEO1xcbiAxOTc6XFx0XFx0aXBzZWMtXFx1MDAzZWNvdW50Kys7XFxuIDE5ODpcXHRcXG4gMTk5OlxcdFxcdHJldHVybiAwO1xcbiAyMDA6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzo1Nzo0Mi44MzM5NjgzMTZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzAxMDk0ODkyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOZXRkZXZzaW0gSVBzZWMgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgdGhpcyBwYXRjaCBoYXMgY2hhbmdlZC4gSXQgbG9va3MgbGlrZSBpdCdzIGEgc2VyaWVzIG9mIG1vZGlmaWNhdGlvbnMgcHJpbWFyaWx5IGZvY3VzZWQgb24gdGhlIGBuZXRkZXZzaW1gJ3MgSVBzZWMgaW1wbGVtZW50YXRpb24uXG5cbjEuICAqKkVuZGlhbm5lc3MgTWF0dGVyczoqKiBUaGUgaW5pdGlhbCBjaGFuZ2VzIGFyZSBzdHJhaWdodGZvcndhcmQ6IGl0J3MgdXBkYXRpbmcgYHUzMiBrZXlbNF1gIGFuZCBgdTMyIHNhbHRgIHRvIHVzZSBiaWctZW5kaWFuIHJlcHJlc2VudGF0aW9ucyAoYF9fYmUzMiBrZXlbNF1gLCBgX19iZTMyIHNhbHRgKSBpbiBgbnNpbV9zYWAuIEl0IGFsc28gdXBkYXRlcyB0aGUgcGFyYW1ldGVyIHR5cGVzIGluIHRoZSBgbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzKClgIGZ1bmN0aW9uIHRvIHJlZmxlY3QgdGhpcyBlbmRpYW4gY2hhbmdlLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBuZXR3b3JrIHByb3RvY29scyB3aGVyZSBieXRlIG9yZGVyIGlzIHBhcmFtb3VudCBmb3IgZGF0YSBpbnRlcnByZXRhdGlvbi4gQWxzbywgdGhlIHBhdGNoIGNvbnZlcnRzIHRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiB3aXRoIGAoKF9fYmUzMiAqKWtleV9kYXRhKVs0XWAuXG4yLiAgKipEZWJ1ZyBPdXRwdXQgQ29ycmVjdG5lc3M6KiogSXQncyB0cmFuc2xhdGluZyB0aGUgaW50ZXJuYWwgYmlnLWVuZGlhbiByZXByZXNlbnRhdGlvbiB0byB0aGUgQ1BVJ3MgbmF0aXZlIGJ5dGUgb3JkZXIgKGBiZTMyX3RvX2NwdSgpYCkgd2hlbiBwcmludGluZyB0aGUgc2FsdCBhbmQga2V5IHZhbHVlcyBpbiBgbnNpbV9kYmdfbmV0ZGV2X29wc19yZWFkKClgLiBUaGlzIGVuc3VyZXMgdGhlIGRlYnVnIG91dHB1dCBpcyBodW1hbi1yZWFkYWJsZSBhbmQgZG9lc24ndCBjb25mdXNlIHRoaW5ncy5cbjMuICAqKlNlbGZ0ZXN0IEFkanVzdG1lbnRzOioqIFRoZSBmaW5hbCBjaGFuZ2UgaXMgYW4gdXBkYXRlIHRvIHRoZSBleHBlY3RlZCBvdXRwdXQgZm9ybWF0IGluIHRoZSBgcnRuZXRsaW5rLnNoYCBzZWxmLXRlc3RzIHRvIGFjY29tbW9kYXRlIHRoZSB1cGRhdGVkIGRlYnVnIG91dHB1dCBmb3JtYXQuIFRoaXMgY29uZmlybXMgdGhlIGltcGFjdCBvZiB0aGUgZW5kaWFubmVzcyBjaGFuZ2UgcHJvcGFnYXRlcyBjb3JyZWN0bHkuXG5cbk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIG1lcml0cyBmdXp6aW5nLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlJ3MgZW5vdWdoIHBvdGVudGlhbCBmb3IgaW50cm9kdWNpbmcgYnVncyB0aGF0IGNvdWxkIGJlIGRpc2NvdmVyZWQgdGhyb3VnaCBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IHRob3VnaHQgaXMgdGhlIHJlYWNoYWJpbGl0eSBxdWVzdGlvbi4gQ2FuIEkgZXZlbiBleGVyY2lzZSB0aGlzIGNvZGU/IFllcywgYG5ldGRldnNpbWAgaXMgcGVyZmVjdCBmb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBhbmQgR0NFLCBtYWtpbmcgaXQgaWRlYWwgZm9yIGZ1enppbmcgYmVjYXVzZSBpdCdzIGNvbXBsZXRlbHkgdmlydHVhbCBhbmQgYWNjZXNzaWJsZS4gU3l6a2FsbGVyJ3MgZXh0ZW5zaXZlIHVzZSBpcyBhbm90aGVyIGdyZWF0IGluZGljYXRvci5cblxuSXMgdGhlIFhGUk0gb2ZmbG9hZCBwYXRoIHJlYWNoYWJsZT8gWWVzLCBhbmQgaXQncyByZWFjaGFibGUgdGhyb3VnaCB4ZnJtIG5ldGxpbmsgLyBpcHNlYyBvZmZsb2FkIG1lc3NhZ2VzIChgWEZSTV9NU0dfTkVXU0FgLCBgeGRvX2Rldl9zdGF0ZV9hZGRgIHZpYSBgbnNpbV94ZnJtZGV2X29wc2AgLyBgbnNpbV9pcHNlY19hZGRfc2FgKSwgYW5kIGJ5IHJlYWRpbmcgZGVidWdmcyBgbnNpbV9kYmdfbmV0ZGV2X29wc19yZWFkYC4gVGhpcyBpcyBhIHNvbGlkIGNvbm5lY3Rpb24gYW5kIGEgdmVyeSBpbXBvcnRhbnQgYXNwZWN0IG9mIHRoZSB3aG9sZSBzZXR1cC5cblxuKipXb3J0aEZ1enppbmcgQW5hbHlzaXM6KipcblxuKiAgICoqUmVhY2hhYmlsaXR5OioqIFRoZSBjb2RlIGlzIGNvbXBsZXRlbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIGVudmlyb25tZW50cy4gVGhpcyBpcyBhIHByaW1hcnkgcG9zaXRpdmUgY3JpdGVyaW9uLlxuKiAgICoqTkZDSS9SZWZhY3RvcmluZzoqKiBJIG5lZWQgdG8gYmUgc2tlcHRpY2FsIG9mIGFueSBcIm5vIGZ1bmN0aW9uYWwgY2hhbmdlXCIgb3IgXCJyZWZhY3RvcmluZ1wiIGNsYWltcy5cbiogICAqKk5lZ2F0aXZlIENyaXRlcmlhOioqXG4gICAgKiAgIE5vIG5vbi1rZXJuZWwgY2hhbmdlcy5cbiAgICAqICAgTm8gc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLCBhcyBpdCdzIHNvZnR3YXJlLWJhc2VkLlxuICAgICogICBObyB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMuXG4qICAgKipQb3NpdGl2ZSBDcml0ZXJpYToqKlxuICAgICogICBSZWFjaGFibGUgZHJpdmVycyBhbmQgcHJvdG9jb2xzIChOZXRsaW5rLCBkZWJ1Z2ZzLCBldGMuKS5cbiAgICAqICAgUmVzdHJ1Y3R1cmluZyBvZiBkYXRhIHN0cnVjdHVyZXMgKHRoZSBlbmRpYW4gY2hhbmdlIGlzIHNpZ25pZmljYW50KS5cblxuKipDb25jbHVzaW9uOioqIEkgd291bGQgc2F5IHRoaXMgcGF0Y2ggKmRlZmluaXRlbHkqIGp1c3RpZmllcyBmdXp6aW5nIChgV29ydGhGdXp6aW5nID0gdHJ1ZWApLiBUaGUgY2hhbmdlcyB0b3VjaCBjb3JlIGtlcm5lbCBjb2RlIChgZHJpdmVycy9uZXRgKSwgYWZmZWN0IGRhdGEgc3RydWN0dXJlcyByZWxhdGVkIHRvIG5ldHdvcmsgcHJvdG9jb2xzIChJUHNlYywgWEZSTSksIGFuZCB0aGUgcGF0aCBpcyByZWFkaWx5IGFjY2Vzc2libGUuIEkgc2hvdWxkIGludmVzdGlnYXRlIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgKERFQlVHXFxfRlMsIElORVQsIFhGUk1cXF9PRkZMT0FELCBldGMuKSB0byBjb25maXJtIGFueSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBhbmQgcG90ZW50aWFsIGxpbWl0YXRpb25zIG9mIHRoZSBtb2R1bGUuIEdpdmVuIHRoYXQgdGhlIFhGUk1fT0ZGTE9BRCBLY29uZmlnIG9wdGlvbiBpcyBhIGRlcGVuZGVuY3kgYW5kIGBuZXRkZXZzaW0tb2JqcyArPSBpcHNlYy5vYCB1c2VzIGl0IGluIHRoZSBNYWtlZmlsZSwgdGhhdCBpcyBhbiBvYnZpb3VzIGVudHJ5IHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjY0OSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjU3OjQ5Ljg0NDkxOTQzN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQzMzEwMzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBYRlJNX09GRkxPQURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL0tjb25maWc9NT1jb25maWcgWEZSTVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0xMC1cXG5uZXQveGZybS9LY29uZmlnOjExOmNvbmZpZyBYRlJNX09GRkxPQURcXG5uZXQveGZybS9LY29uZmlnLTEyLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6NTc6NTAuMjg4MjM2MTNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg3MDI5NTIzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIFhGUk0gQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIHplcm8gaW4gb24gYG5ldC94ZnJtL0tjb25maWdgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbmF2aWdhdGUgc3RyYWlnaHQgdG8gbGluZSAxMS4gSSdtIHByb2JhYmx5IGxvb2tpbmcgZm9yIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24sIHBlcmhhcHMgcmVsYXRlZCB0byBhIHJlY2VudCBidWcgcmVwb3J0IG9yIGVuaGFuY2VtZW50IHJlcXVlc3QuIExpbmUgMTEgaXMgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIHNldHRpbmdzIGZvciB0aGUgWEZSTSBzdWJzeXN0ZW0gYXJlIGRlZmluZWQsIG9yIGEgbWFqb3IgZGVwZW5kZW5jeSBpcyBlc3RhYmxpc2hlZC4gSSBuZWVkIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGNvbnRleHQgc3Vycm91bmRpbmcgdGhhdCBsaW5lIHRvIHNlZSBob3cgaXQgYWZmZWN0cyB0aGUgc3BlY2lmaWMgZmVhdHVyZSBvciBpc3N1ZSBJJ20gd29ya2luZyB3aXRoLiBUaW1lIHRvIHNlZSB3aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQzMjIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzo1Nzo1Mi4xNTg1MzM5MTJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBYRlJNIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdGNvbmZpZyBYRlJNXFxuICAgNjpcXHRcXHRib29sXFxuICAgNzpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA4OlxcdFxcdHNlbGVjdCBHUk9fQ0VMTFNcXG4gICA5OlxcdFxcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xcbiAgMTA6XFx0XFxuICAxMTpcXHRjb25maWcgWEZSTV9PRkZMT0FEXFxuICAxMjpcXHRcXHRib29sXFxuICAxMzpcXHRcXG4gIDE0OlxcdGNvbmZpZyBYRlJNX0FMR09cXG4gIDE1OlxcdFxcdHRyaXN0YXRlXFxuICAxNjpcXHRcXHRzZWxlY3QgWEZSTVxcbiAgMTc6XFx0XFx0c2VsZWN0IENSWVBUT1xcbiAgMTg6XFx0XFx0c2VsZWN0IENSWVBUT19BRUFEXFxuICAxOTpcXHRcXHRzZWxlY3QgQ1JZUFRPX0hBU0hcXG4gIDIwOlxcdFxcdHNlbGVjdCBDUllQVE9fU0tDSVBIRVJcXG4gIDIxOlxcdFxcbiAgMjI6XFx0aWYgSU5FVFxcbiAgMjM6XFx0Y29uZmlnIFhGUk1fVVNFUlxcbiAgMjQ6XFx0XFx0dHJpc3RhdGUgXFxcIlRyYW5zZm9ybWF0aW9uIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VcXFwiXFxuICAyNTpcXHRcXHRzZWxlY3QgWEZSTV9BTEdPXFxuICAyNjpcXHRcXHRoZWxwXFxuICAyNzpcXHRcXHQgIFN1cHBvcnQgZm9yIFRyYW5zZm9ybWF0aW9uKFhGUk0pIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VcXG4gIDI4OlxcdFxcdCAgbGlrZSBJUHNlYyB1c2VkIGJ5IG5hdGl2ZSBMaW51eCB0b29scy5cXG4gIDI5OlxcdFxcbiAgMzA6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzo1Nzo1Mi4xNTg2MDk4NTJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzI2MDA4OTM3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyBgWEZSTV9PRkZMT0FEYCBTZWxlY3Rpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29kZSBoYXMgbGFuZGVkIG9uIGBYRlJNX09GRkxPQURgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCAqd2hvKiBpcyBjaG9vc2luZyB0aGlzPyBXaGF0J3MgZHJpdmluZyB0aGlzIHNlbGVjdGlvbj9cIiBJJ20gaW1tZWRpYXRlbHkgdHJ5aW5nIHRvIHRyYWNlIGJhY2sgdGhlIGRlY2lzaW9uIHBhdGguIElzIGl0IGEgZGVmYXVsdCBjb25maWd1cmF0aW9uLCBhIHNwZWNpZmljIHVzZXIgc2V0dGluZywgb3Igc29tZXRoaW5nIGRldGVybWluZWQgZHluYW1pY2FsbHkgYmFzZWQgb24gdGhlIHN5c3RlbSdzIGNhcGFiaWxpdGllcz8gS25vd2luZyB0aGUgc291cmNlIGlzIGNydWNpYWwuXG5cbkknbSB0aGlua2luZyBhYm91dCB0aGUgdmFyaW91cyBrZXJuZWwgbW9kdWxlcywgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgbmV0d29yayBpbnRlcmZhY2Ugc2V0dGluZ3MgdGhhdCBjb3VsZCBpbmZsdWVuY2UgdGhpcyBjaG9pY2UuIElzIGl0IHRoZSBoYXJkd2FyZSBpdHNlbGYgc2lnbmFsaW5nIG9mZmxvYWQgY2FwYWJpbGl0aWVzPyBJcyB0aGVyZSBhIHBvbGljeSBzZXR0aW5nIGNvbmZpZ3VyZWQgaW4gdGhlIFhGUk0gc3Vic3lzdGVtIHRoYXQgaXMgZGlyZWN0aW5nIHRoZSB1c2Ugb2YgYW4gb2ZmbG9hZCBlbmdpbmU/IE9yIGhhcyBzb21lIGFwcGxpY2F0aW9uIHJlcXVlc3RlZCBpdCB0aHJvdWdoIHNvbWUgc3BlY2lmaWMgc29ja2V0IG9wdGlvbiBvciBpbnRlcmZhY2U/XG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBXaGF0J3MgdGhlIHRhcmdldCBzY2VuYXJpbz8gSXMgdGhpcyBmb3IgYSBzcGVjaWZpYyBWUE4gdHVubmVsIHNldHVwLCBhIGJ1bGsgZGF0YSB0cmFuc2Zlciwgb3Igc29tZSBvdGhlciBuZXR3b3JrLWludGVuc2l2ZSBhcHBsaWNhdGlvbj8gVGhlIGNvbnRleHQgd2lsbCByZXZlYWwgdGhlIHJlbGV2YW50IGRlY2lzaW9uIGZhY3RvcnMuIFRoZSBzcGVjaWZpYyBuZXR3b3JrIHRyYWZmaWMgcGF0dGVybnMgd291bGQgcHJvdmlkZSBpbXBvcnRhbnQgY29udGV4dC5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIHRoZSBjb25kaXRpb25hbCBsb2dpYyBmb3IgdGhpcyBjaG9pY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSBpdCdzIGJlZW4gdHJpZ2dlcmVkLiBJJ20gbG9va2luZyBmb3IgdGhlIGZsYWdzLCBwYXJhbWV0ZXJzLCBhbmQgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRoYXQgYXJlIGxlYWRpbmcgdG8gdGhpcyBwYXJ0aWN1bGFyIGNvZGUgcGF0aC4gSSB3YW50IHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzIG9yIGNvbnN0cmFpbnRzIHRoYXQgY29tZSBhbG9uZyB3aXRoIGVuYWJsaW5nIG9mZmxvYWQuIEZpbmFsbHkgSSB3aWxsIGVuc3VyZSB0aGlzIGNvZGUgd29uJ3QgY2F1c2UgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uIG9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gSXQgbmVlZHMgdG8gYmUgdGhlIHJpZ2h0IGNob2ljZSBmb3IgdGhlIHNpdHVhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4MzksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjU3OjU1LjQxODcwMTU3MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA2MjUyMzk3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgWEZSTV9PRkZMT0FEXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9MzY5PWNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM3MS1cXHRkZXBlbmRzIG9uIElORVRfRVNQXFxubmV0L2lwdjQvS2NvbmZpZzozNzI6XFx0c2VsZWN0IFhGUk1fT0ZGTE9BRFxcbm5ldC9pcHY0L0tjb25maWctMzczLVxcdGRlZmF1bHQgblxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz03Nz1jb25maWcgSU5FVDZfRVNQX09GRkxPQURcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctNzktXFx0ZGVwZW5kcyBvbiBJTkVUNl9FU1BcXG5uZXQvaXB2Ni9LY29uZmlnOjgwOlxcdHNlbGVjdCBYRlJNX09GRkxPQURcXG5uZXQvaXB2Ni9LY29uZmlnLTgxLVxcdGRlZmF1bHQgblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzo1Nzo1Ny40ODEyMzEyNTlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTgzNjE3NTQ4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2ggZm9yIE5ldGRldnNpbSBJUHNlYyBPZmZsb2FkKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIGl0J3MgZGVhbGluZyB3aXRoIHRoZSBuZXRkZXZzaW0gZHJpdmVyLCBzcGVjaWZpY2FsbHkgaXRzIElQc2VjIG9mZmxvYWQgZnVuY3Rpb25hbGl0eS4gRmlyc3QsIGxldCdzIG5haWwgZG93biB0aGUgZGVwZW5kZW5jaWVzLiBgWEZSTV9PRkZMT0FEYCBpcyB0aGUgY29yZSBoZXJlLCBlbmFibGVkIGJ5IGVpdGhlciBgSU5FVF9FU1BfT0ZGTE9BRGAgb3IgYElORVQ2X0VTUF9PRkZMT0FEYC4gIEFuZCBgTkVUREVWU0lNYCByZXF1aXJlcyBgREVCVUdfRlNgIGFuZCBgSU5FVGAuIGBJTkVUX0VTUF9PRkZMT0FEYCBhbHNvIG5lZWRzIGBJTkVUX0VTUGAuICBgWEZSTV9PRkZMT0FEYCBpcyBpdHMgb3duIGNvbmZpZyBvcHRpb24gYXMgd2VsbCwgaW5kZXBlbmRlbnQgb2YgdGhvc2UuIExldCdzIG1ha2UgYSBub3RlIG9mIHRoZSBjb25maWdzIGludm9sdmVkOiBgTkVUREVWU0lNYCwgYFhGUk1fT0ZGTE9BRGAsIGBJTkVUX0VTUF9PRkZMT0FEYCwgYW5kIGBERUJVR19GU2AuXG5cbk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyAqYWN0dWFsbHkqIGJlaW5nIG1vZGlmaWVkLiBMb29raW5nIGF0IHRoZSBjb2RlLCBpdCBzZWVtcyB0aGUgcGF0Y2ggaXMgdG91Y2hpbmcgdGhlc2UgZnVuY3Rpb25zOiBgbnNpbV9kYmdfbmV0ZGV2X29wc19yZWFkYCwgYG5zaW1faXBzZWNfcGFyc2VfcHJvdG9fa2V5c2AsIGBuc2ltX2lwc2VjX2FkZF9zYWAsIGFuZCBgbnNpbV9pcHNlY190eGAuIE5vdywgbGV0J3Mgc2VlIGlmIHRob3NlIGFyZSB0aGUgKm9ubHkqIGZ1bmN0aW9ucyBpbiBgZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmNgLiBBbHJpZ2h0LCBsb29rcyBsaWtlIHRoZXJlIGFyZSBvdGhlciBmdW5jdGlvbnMgdGhlcmUsIGJ1dCB0aGVzZSBhcmUgdGhlIG9uZXMgYmVpbmcgZGlyZWN0bHkgY2hhbmdlZC4gYG5zaW1faXBzZWNfYWRkX3NhYCBjYWxscyBgbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzYCBhbmQgc2V0cyB1cCBgbnNpbV9zYWAsIGdvdCBpdC5cblxuQXJlIGFueSBvZiB0aGVzZSBmdW5jdGlvbnMgd2lkZWx5IHVzZWQ/IE5vLCB0aGV5IHNlZW0gc3BlY2lmaWMgdG8gdGhlIG5ldGRldnNpbSBJUHNlYyBvZmZsb2FkIHBhdGguXG5cbkFscmlnaHQsIG5vdyBsZXQncyB0aGluayB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMuIFRoaXMgcGF0Y2ggZml4ZXMgZW5kaWFubmVzcyBpc3N1ZXMgaW4gdGhlIGhhbmRsaW5nIG9mIElQc2VjIGtleXMgYW5kIHNhbHQgd2l0aGluIG5ldGRldnNpbS4gSXQgdXBkYXRlcyB0aGUgU0EgZGF0YSB0eXBlcyB0byBgX19iZTMyYCwgY29ycmVjdC4gYG5zaW1faXBzZWNfcGFyc2VfcHJvdG9fa2V5cygpYCBpcyBmaXhlZC4gSXQgYWxzbyBjbGVhbnMgdXAgdGhlIHZhbHVlIGNvbnZlcnNpb25zIGluIGBuc2ltX2RiZ19uZXRkZXZfb3BzX3JlYWRgLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHRocm91Z2ggWEZSTSBuZXRsaW5rIGFuZCBkZWJ1Z2ZzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFNvIHllcywgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIEl0J3MgaW4gYSBwYXRoIHRoYXQncyB1c2VkLCBidXQgbm90IG5lY2Vzc2FyaWx5IGEgXCJjb3JlXCIgbmV0d29ya2luZyBjb21wb25lbnQuXG5cbk9rYXksIGxldCdzIHN1bW1hcml6ZTpcbi0gICBgV29ydGhGdXp6aW5nYDogVHJ1ZS5cbi0gICBgUmVhc29uaW5nYDogVGhlIHBhdGNoIGFkZHJlc3NlcyBlbmRpYW5uZXNzIGlzc3VlcyBpbiBuZXRkZXZzaW0ncyBJUHNlYyBrZXkgYW5kIHNhbHQgaGFuZGxpbmcuICBUaGUgcGF0Y2ggdXBkYXRlcyBTQSBkYXRhIHR5cGVzIHRvIGBfX2JlMzJgLCBmaXhpbmcgYG5zaW1faXBzZWNfcGFyc2VfcHJvdG9fa2V5cygpYCBhbmQgY2xlYW5pbmcgdXAgdmFsdWUgY29udmVyc2lvbnMgaW4gYG5zaW1fZGJnX25ldGRldl9vcHNfcmVhZCgpYC4gIFRoaXMgY29kZSBpcyB1c2VkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhY2Nlc3NpYmxlIHZpYSBYRlJNIG5ldGxpbmsgYW5kIGRlYnVnZnMuXG4tICAgYEVuYWJsZUNvbmZpZ3NgOiBgTkVUREVWU0lNYCwgYFhGUk1fT0ZGTE9BRGAsIGBJTkVUX0VTUF9PRkZMT0FEYCwgYERFQlVHX0ZTYFxuLSAgIGBGb2N1c1N5bWJvbHNgOiBgbnNpbV9kYmdfbmV0ZGV2X29wc19yZWFkYCwgYG5zaW1faXBzZWNfcGFyc2VfcHJvdG9fa2V5c2AsIGBuc2ltX2lwc2VjX2FkZF9zYWBcblxuRmluYWxseSwgbGV0J3MgZG91YmxlIGNoZWNrIHRoYXQgbXkgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzIGFyZSBpbiB0aGUgY29ycmVjdCBmb3JtYXQuLi4geWVwLCBsaXN0IG9mIHN0cmluZ3MsIGxpc3Qgb2Ygc3RyaW5ncywgc3RyaW5nLCBib29sZWFuLiBHb29kIHRvIGdvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTM4OSwiT3V0cHV0VG9rZW5zIjoyMDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2ODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6NTg6MDMuMzE3NDA4OThaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDcwMTc0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUREVWU0lNXCIsXG4gICAgXCJYRlJNX09GRkxPQURcIixcbiAgICBcIklORVRfRVNQX09GRkxPQURcIixcbiAgICBcIkRFQlVHX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnNpbV9kYmdfbmV0ZGV2X29wc19yZWFkXCIsXG4gICAgXCJuc2ltX2lwc2VjX3BhcnNlX3Byb3RvX2tleXNcIixcbiAgICBcIm5zaW1faXBzZWNfYWRkX3NhXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29ycmVjdHMgZW5kaWFubmVzcyBoYW5kbGluZyBvZiBJUHNlYyBrZXlzIGFuZCBzYWx0IGluIHRoZSBuZXRkZXZzaW0gc2ltdWxhdGVkIGRldmljZSBkcml2ZXIsIG1vZGlmeWluZyBuc2ltX3NhIGZpZWxkIHR5cGVzIHRvIF9fYmUzMiwgYWRqdXN0aW5nIGtleS9zYWx0IHBhcnNpbmcgaW4gbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzLCBhbmQgYnl0ZS1zd2FwcGluZyB2YWx1ZXMgZm9yIGRlYnVnZnMgb3V0cHV0IGluIG5zaW1fZGJnX25ldGRldl9vcHNfcmVhZC4gTmV0ZGV2c2ltIGlzIGEgc29mdHdhcmUtc2ltdWxhdGVkIGRldmljZSBkcml2ZXIgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbmV0bGluayAoWEZSTSBzdGF0ZSBvcGVyYXRpb25zKSBhbmQgZGVidWdmcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRERVZTSU1cIixcbiAgICBcIlhGUk1fT0ZGTE9BRFwiLFxuICAgIFwiSU5FVF9FU1BfT0ZGTE9BRFwiLFxuICAgIFwiREVCVUdfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuc2ltX2RiZ19uZXRkZXZfb3BzX3JlYWRcIixcbiAgICBcIm5zaW1faXBzZWNfcGFyc2VfcHJvdG9fa2V5c1wiLFxuICAgIFwibnNpbV9pcHNlY19hZGRfc2FcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb3JyZWN0cyBlbmRpYW5uZXNzIGhhbmRsaW5nIG9mIElQc2VjIGtleXMgYW5kIHNhbHQgaW4gdGhlIG5ldGRldnNpbSBzaW11bGF0ZWQgZGV2aWNlIGRyaXZlciwgbW9kaWZ5aW5nIG5zaW1fc2EgZmllbGQgdHlwZXMgdG8gX19iZTMyLCBhZGp1c3Rpbmcga2V5L3NhbHQgcGFyc2luZyBpbiBuc2ltX2lwc2VjX3BhcnNlX3Byb3RvX2tleXMsIGFuZCBieXRlLXN3YXBwaW5nIHZhbHVlcyBmb3IgZGVidWdmcyBvdXRwdXQgaW4gbnNpbV9kYmdfbmV0ZGV2X29wc19yZWFkLiBOZXRkZXZzaW0gaXMgYSBzb2Z0d2FyZS1zaW11bGF0ZWQgZGV2aWNlIGRyaXZlciByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBuZXRsaW5rIChYRlJNIHN0YXRlIG9wZXJhdGlvbnMpIGFuZCBkZWJ1Z2ZzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzo1ODowMy40MDIxMTkwMjlaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5NDYxMDQzMTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6NTg6MDMuNDAyNzgxNjI5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mzk0NjAzNzYwMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGVuZGlhbm5lc3MgaGFuZGxpbmcgb2YgSVBzZWMga2V5cyBhbmQgc2FsdCB2YWx1ZXMgaW4gbmV0ZGV2c2ltIGJ5IGNoYW5naW5nIHRoZSB0eXBlIGFubm90YXRpb25zIGZyb20gdTMyIHRvIF9fYmUzMiBhbmQgY29udmVydGluZyB0aGVtIHdpdGggYmUzMl90b19jcHUoKSB3aGVuIGZvcm1hdHRpbmcgZGVidWdmcyBvdXRwdXQuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdCBwYWRkaW5nIGNoYW5nZXMsIGNvcGllcyBvZiByYXcga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYXJlIGludHJvZHVjZWQuIEFsbCBidWZmZXJzIGFuZCBzdHJ1Y3R1cmVzIGluIG5ldGRldnNpbSBJUHNlYyBjb2RlIHJlbWFpbiBwcm9wZXJseSBpbml0aWFsaXplZCB2aWEgbWVtc2V0L2t6YWxsb2MuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRjNTM1YTFlODhkMWRhYzFhNTRjYTU3NzcyMGRmYTI4M2JhM2UxMjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDE3OjU3OjIyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuY1xuaW5kZXggMzZhMWJlNDkyM2Q2MS4uNTcyMjgzN2JjZGEzNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jXG4rKysgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuY1xuQEAgLTUwLDExICs1MCwxMSBAQCBzdGF0aWMgc3NpemVfdCBuc2ltX2RiZ19uZXRkZXZfb3BzX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsXG4gXHRcdHAgKz0gc2NucHJpbnRmKHAsIGJ1ZnNpemUgLSAocCAtIGJ1ZiksXG4gXHRcdFx0ICAgICAgIFwic2FbJWldICAgIHNwaT0weCUwOHggcHJvdG89MHgleCBzYWx0PTB4JTA4eCBjcnlwdD0lZFxcblwiLFxuIFx0XHRcdCAgICAgICBpLCBiZTMyX3RvX2NwdShzYXAtXHUwMDNleHMtXHUwMDNlaWQuc3BpKSxcbi1cdFx0XHQgICAgICAgc2FwLVx1MDAzZXhzLVx1MDAzZWlkLnByb3RvLCBzYXAtXHUwMDNlc2FsdCwgc2FwLVx1MDAzZWNyeXB0KTtcbitcdFx0XHQgICAgICAgc2FwLVx1MDAzZXhzLVx1MDAzZWlkLnByb3RvLCBiZTMyX3RvX2NwdShzYXAtXHUwMDNlc2FsdCksIHNhcC1cdTAwM2VjcnlwdCk7XG4gXHRcdHAgKz0gc2NucHJpbnRmKHAsIGJ1ZnNpemUgLSAocCAtIGJ1ZiksXG4gXHRcdFx0ICAgICAgIFwic2FbJWldICAgIGtleT0weCUwOHggJTA4eCAlMDh4ICUwOHhcXG5cIixcbi1cdFx0XHQgICAgICAgaSwgc2FwLVx1MDAzZWtleVswXSwgc2FwLVx1MDAzZWtleVsxXSxcbi1cdFx0XHQgICAgICAgc2FwLVx1MDAzZWtleVsyXSwgc2FwLVx1MDAzZWtleVszXSk7XG4rXHRcdFx0ICAgICAgIGksIGJlMzJfdG9fY3B1KHNhcC1cdTAwM2VrZXlbMF0pLCBiZTMyX3RvX2NwdShzYXAtXHUwMDNla2V5WzFdKSxcbitcdFx0XHQgICAgICAgYmUzMl90b19jcHUoc2FwLVx1MDAzZWtleVsyXSksIGJlMzJfdG9fY3B1KHNhcC1cdTAwM2VrZXlbM10pKTtcbiBcdH1cbiBcbiBcdGxlbiA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZmZlciwgY291bnQsIHBwb3MsIGJ1ZiwgcCAtIGJ1Zik7XG5AQCAtODcsNyArODcsNyBAQCBzdGF0aWMgaW50IG5zaW1faXBzZWNfZmluZF9lbXB0eV9pZHgoc3RydWN0IG5zaW1faXBzZWMgKmlwc2VjKVxuIFxuIHN0YXRpYyBpbnQgbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IHhmcm1fc3RhdGUgKnhzLFxuLVx0XHRcdFx0ICAgICAgIHUzMiAqbXlrZXksIHUzMiAqbXlzYWx0KVxuK1x0XHRcdFx0ICAgICAgIF9fYmUzMiAqbXlrZXksIF9fYmUzMiAqbXlzYWx0KVxuIHtcbiBcdGNvbnN0IGNoYXIgYWVzX2djbV9uYW1lW10gPSBcInJmYzQxMDYoZ2NtKGFlcykpXCI7XG4gXHR1bnNpZ25lZCBjaGFyICprZXlfZGF0YTtcbkBAIC0xMTcsNyArMTE3LDcgQEAgc3RhdGljIGludCBuc2ltX2lwc2VjX3BhcnNlX3Byb3RvX2tleXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcbiBcdC8qIDE2MCBhY2NvdW50cyBmb3IgMTYgYnl0ZSBrZXkgYW5kIDQgYnl0ZSBzYWx0ICovXG4gXHRpZiAoa2V5X2xlbiBcdTAwM2UgTlNJTV9JUFNFQ19BVVRIX0JJVFMpIHtcbi1cdFx0Km15c2FsdCA9ICgodTMyICopa2V5X2RhdGEpWzRdO1xuK1x0XHQqbXlzYWx0ID0gKChfX2JlMzIgKilrZXlfZGF0YSlbNF07XG4gXHR9IGVsc2UgaWYgKGtleV9sZW4gPT0gTlNJTV9JUFNFQ19BVVRIX0JJVFMpIHtcbiBcdFx0Km15c2FsdCA9IDA7XG4gXHR9IGVsc2Uge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaCBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaFxuaW5kZXggNTVhZWM0MTIzN2I5Yi4uYTgyYTY4NTM4NGU2ZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaFxuKysrIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oXG5AQCAtNDIsOCArNDIsOCBAQFxuIHN0cnVjdCBuc2ltX3NhIHtcbiBcdHN0cnVjdCB4ZnJtX3N0YXRlICp4cztcbiBcdF9fYmUzMiBpcGFkZHJbNF07XG4tXHR1MzIga2V5WzRdO1xuLVx0dTMyIHNhbHQ7XG4rXHRfX2JlMzIga2V5WzRdO1xuK1x0X19iZTMyIHNhbHQ7XG4gXHRib29sIHVzZWQ7XG4gXHRib29sIGNyeXB0O1xuIFx0Ym9vbCByeDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5zaFxuaW5kZXggYWNlM2E5OTAyM2VkMC4uNDg0M2Q0NzQ1MzhmNCAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsuc2hcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsuc2hcbkBAIC05MzIsMTEgKzkzMiwxMSBAQCBrY2lfdGVzdF9pcHNlY19vZmZsb2FkKClcbiBcdHJ1bl9jbWQgZGlmZiAkc3lzZnNmIC0gXHUwMDNjXHUwMDNjIEVPRlxuIFNBIGNvdW50PTIgdHg9M1xuIHNhWzBdIHR4IGlwYWRkcj0kZHN0aXBcbi1zYVswXSAgICBzcGk9MHgwMDAwMDAwOSBwcm90bz0weDMyIHNhbHQ9MHg2MTYyNjM2NCBjcnlwdD0xXG4tc2FbMF0gICAga2V5PTB4MzQzMzMyMzEgMzgzNzM2MzUgMzIzMTMwMzkgMzYzNTM0MzNcbitzYVswXSAgICBzcGk9MHgwMDAwMDAwOSBwcm90bz0weDMyIHNhbHQ9MHg2NDYzNjI2MSBjcnlwdD0xXG4rc2FbMF0gICAga2V5PTB4MzEzMjMzMzQgMzUzNjM3MzggMzkzMDMxMzIgMzMzNDM1MzZcbiBzYVsxXSByeCBpcGFkZHI9JHNyY2lwXG4tc2FbMV0gICAgc3BpPTB4MDAwMDAwMDkgcHJvdG89MHgzMiBzYWx0PTB4NjE2MjYzNjQgY3J5cHQ9MVxuLXNhWzFdICAgIGtleT0weDM0MzMzMjMxIDM4MzczNjM1IDMyMzEzMDM5IDM2MzUzNDMzXG4rc2FbMV0gICAgc3BpPTB4MDAwMDAwMDkgcHJvdG89MHgzMiBzYWx0PTB4NjQ2MzYyNjEgY3J5cHQ9MVxuK3NhWzFdICAgIGtleT0weDMxMzIzMzM0IDM1MzYzNzM4IDM5MzAzMTMyIDMzMzQzNTM2XG4gRU9GXG4gXHRpZiBbICQ/IC1uZSAwIF0gOyB0aGVuXG4gXHRcdGVuZF90ZXN0IFwiRkFJTDogaXBzZWNfb2ZmbG9hZCBpbmNvcnJlY3QgZHJpdmVyIGRhdGFcIlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6NTg6MDMuNDAyNzgyNzM5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NzA2ODM1NzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIHNlZSBpZiB3ZSBuZWVkIHRvIGJyaW5nIGluIEtNU0FOLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBpcyBhY3R1YWxseSBjaGFuZ2luZy4gSSBzZWUgaXQncyB0b3VjaGluZyBgZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmNgIGFuZCBgZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oYCwgYWxvbmcgd2l0aCBhIHNlbGZ0ZXN0IHNjcmlwdC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuTG9va2luZyBhdCBgZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmNgLCBJIG5vdGljZSBtb2RpZmljYXRpb25zIGluIHRoZSBgbnNpbV9kYmdfbmV0ZGV2X29wc19yZWFkYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSB0aGV5IGFyZSBjaGFuZ2luZyB0aGUgd2F5IGBzYXAtXHUwMDNlc2FsdGAgYW5kIGBzYXAtXHUwMDNla2V5Wy4uLl1gIGFyZSBwcmludGVkLCBub3cgdXNpbmcgYGJlMzJfdG9fY3B1KC4uLilgLiBTZWVtcyBsaWtlIGFuIGVuZGlhbm5lc3MgY29udmVyc2lvbiB1cGRhdGUsIHdoaWNoICpjb3VsZCogaW5kaWNhdGUgd2UncmUgZGVhbGluZyB3aXRoIG5ldHdvcmstcmVsYXRlZCBkYXRhLCBvciBhdCBsZWFzdCBkYXRhIHRoYXQncyBleHBlY3RlZCB0byBiZSBlbmRpYW4tc2Vuc2l0aXZlLiBNYWtlcyBzZW5zZSBmb3IgbmV0d29yayBzaW11bGF0aW9uLlxuXG5UaGVuLCB0aGVyZSdzIHRoZSBgbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzYCBmdW5jdGlvbi4gSSBzZWUgdGhlIHByb3RvdHlwZSBmb3IgYG15a2V5YCBhbmQgYG15c2FsdGAgaXMgYmVpbmcgY2hhbmdlZCB0byBgX19iZTMyICpgLCBhbmQgdGhlIGNhc3QgYCgodTMyICopa2V5X2RhdGEpWzRdYCBpcyBub3cgYCgoX19iZTMyICopa2V5X2RhdGEpWzRdYC4gQWdhaW4sIHRoaXMgcmVpbmZvcmNlcyB0aGUgZW5kaWFubmVzcyB1cGRhdGUsIGJ1dCBhbHNvIHN1Z2dlc3RzIHRoZSB1bmRlcmx5aW5nIGRhdGEsIHRoZSBga2V5X2RhdGFgLCBtaWdodCBiZSBjaGFuZ2luZyB0eXBlcy4gSSBoYXZlIHRvIHNlZSBob3cgaXQgaXMgdXNlZC5cblxuSW4gYGRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaGAsIEkgc2VlIHRoZSBgc3RydWN0IG5zaW1fc2FgIGZpZWxkcyBga2V5YCBhbmQgYHNhbHRgIGFyZSBiZWluZyB1cGRhdGVkIGZyb20gYHUzMmAgdG8gYF9fYmUzMmAuIFNvLCB0aGlzIGlzIHdoZXJlIHRoZSAqYWN0dWFsKiB0eXBlIGNoYW5nZSBpcyBoYXBwZW5pbmcsIGFuZCBpdCdzIGJlaW5nIHByb3BhZ2F0ZWQgdGhyb3VnaG91dC4gTm93IEkgZ2V0IGl0OiBlbmRpYW5uZXNzIGlzIGJlaW5nIGJha2VkIGludG8gdGhlIGRhdGEgdHlwZXMgdGhlbXNlbHZlcy4gVGhpcyBzaG91bGQgcmVkdWNlIHRoZSBuZWVkIGZvciBjYXN0aW5nLCBhbmQgZW5zdXJlIHRoYXQgdGhlIHJpZ2h0IGRhdGEgaXMgaW4gdGhlIHJpZ2h0IGJ5dGUgb3JkZXIgYXQgZXZlcnkgc3RhZ2Ugb2YgcHJvY2Vzc2luZy5cblxuRmluYWxseSwgdGhlIHNlbGZ0ZXN0IHNjcmlwdCBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5zaGAgaGFzIGFuIHVwZGF0ZSBmb3IgZW5kaWFubmVzcyBpbiB0aGUgb3V0cHV0IGZvciBkZWJ1Z2ZzL3N5c2ZzIGR1bXBzLiBDbGVhcmx5LCB0aGV5IGFyZSB1cGRhdGluZyB0aGUgZW5kaWFubmVzcyBvZiB0aGUgb3V0cHV0LiBUaGF0J3MgZ29vZCB0ZXN0aW5nLlxuXG5Ob3csIEknbSBnb2luZyB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jYCwgZm9jdXNpbmcgc3BlY2lmaWNhbGx5IGFyb3VuZCBgbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzYCBhbmQgaXRzIGNhbGxlcnMuIEdvdHRhIG1ha2Ugc3VyZSB0aGlzIGNoYW5nZSBpcyBzYWZlLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGRhdGEgZmxvdyB0byBlbnN1cmUgbm90aGluZyBpcyByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFmdGVyIHRoZXNlIGNoYW5nZXMuIEVuZGlhbm5lc3MgaXMgYSBjb21tb24gc291cmNlIG9mIGJ1Z3MgaWYgbm90IGhhbmRsZWQgcHJvcGVybHksIHNvIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIGRldmVsb3BlcnMgaGF2ZSBoYW5kbGVkIGFsbCB0aGUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM4MiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjU4OjMyLjEwOTYyMTU4N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDE1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdC8qIENvcHlyaWdodChjKSAyMDE4IE9yYWNsZSBhbmQvb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuICovXFxuICAgMzpcXHRcXG4gICA0OlxcdCNpbmNsdWRlIFxcdTAwM2NjcnlwdG8vYWVhZC5oXFx1MDAzZVxcbiAgIDU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RlYnVnZnMuaFxcdTAwM2VcXG4gICA2OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQveGZybS5oXFx1MDAzZVxcbiAgIDc6XFx0XFxuICAgODpcXHQjaW5jbHVkZSBcXFwibmV0ZGV2c2ltLmhcXFwiXFxuICAgOTpcXHRcXG4gIDEwOlxcdCNkZWZpbmUgTlNJTV9JUFNFQ19BVVRIX0JJVFNcXHQxMjhcXG4gIDExOlxcdFxcbiAgMTI6XFx0c3RhdGljIHNzaXplX3QgbnNpbV9kYmdfbmV0ZGV2X29wc19yZWFkKHN0cnVjdCBmaWxlICpmaWxwLFxcbiAgMTM6XFx0XFx0XFx0XFx0XFx0XFx0Y2hhciBfX3VzZXIgKmJ1ZmZlcixcXG4gIDE0OlxcdFxcdFxcdFxcdFxcdFxcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxcbiAgMTU6XFx0e1xcbiAgMTY6XFx0XFx0c3RydWN0IG5ldGRldnNpbSAqbnMgPSBmaWxwLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuICAxNzpcXHRcXHRzdHJ1Y3QgbnNpbV9pcHNlYyAqaXBzZWMgPSBcXHUwMDI2bnMtXFx1MDAzZWlwc2VjO1xcbiAgMTg6XFx0XFx0c2l6ZV90IGJ1ZnNpemU7XFxuICAxOTpcXHRcXHRjaGFyICpidWYsICpwO1xcbiAgMjA6XFx0XFx0aW50IGxlbjtcXG4gIDIxOlxcdFxcdGludCBpO1xcbiAgMjI6XFx0XFxuICAyMzpcXHRcXHQvKiB0aGUgYnVmZmVyIG5lZWRlZCBpc1xcbiAgMjQ6XFx0XFx0ICogKG51bSBTQXMgKiAzIGxpbmVzIGVhY2ggKiB+NjAgYnl0ZXMgcGVyIGxpbmUpICsgb25lIG1vcmUgbGluZVxcbiAgMjU6XFx0XFx0ICovXFxuICAyNjpcXHRcXHRidWZzaXplID0gKGlwc2VjLVxcdTAwM2Vjb3VudCAqIDQgKiA2MCkgKyA2MDtcXG4gIDI3OlxcdFxcdGJ1ZiA9IGt6YWxsb2MoYnVmc2l6ZSwgR0ZQX0tFUk5FTCk7XFxuICAyODpcXHRcXHRpZiAoIWJ1ZilcXG4gIDI5OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAgMzA6XFx0XFxuICAzMTpcXHRcXHRwID0gYnVmO1xcbiAgMzI6XFx0XFx0cCArPSBzY25wcmludGYocCwgYnVmc2l6ZSAtIChwIC0gYnVmKSxcXG4gIDMzOlxcdFxcdFxcdCAgICAgICBcXFwiU0EgY291bnQ9JXUgdHg9JXVcXFxcblxcXCIsXFxuICAzNDpcXHRcXHRcXHQgICAgICAgaXBzZWMtXFx1MDAzZWNvdW50LCBpcHNlYy1cXHUwMDNldHgpO1xcbiAgMzU6XFx0XFxuICAzNjpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTlNJTV9JUFNFQ19NQVhfU0FfQ09VTlQ7IGkrKykge1xcbiAgMzc6XFx0XFx0XFx0c3RydWN0IG5zaW1fc2EgKnNhcCA9IFxcdTAwMjZpcHNlYy1cXHUwMDNlc2FbaV07XFxuICAzODpcXHRcXG4gIDM5OlxcdFxcdFxcdGlmICghc2FwLVxcdTAwM2V1c2VkKVxcbiAgNDA6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuICA0MTpcXHRcXG4gIDQyOlxcdFxcdFxcdGlmIChzYXAtXFx1MDAzZXhzLVxcdTAwM2Vwcm9wcy5mYW1pbHkgPT0gQUZfSU5FVDYpXFxuICA0MzpcXHRcXHRcXHRcXHRwICs9IHNjbnByaW50ZihwLCBidWZzaXplIC0gKHAgLSBidWYpLFxcbiAgNDQ6XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJzYVslaV0gJWN4IGlwYWRkcj0lcEk2Y1xcXFxuXFxcIixcXG4gIDQ1OlxcdFxcdFxcdFxcdFxcdCAgICAgICBpLCAoc2FwLVxcdTAwM2VyeCA/ICdyJyA6ICd0JyksIFxcdTAwMjZzYXAtXFx1MDAzZWlwYWRkcik7XFxuICA0NjpcXHRcXHRcXHRlbHNlXFxuICA0NzpcXHRcXHRcXHRcXHRwICs9IHNjbnByaW50ZihwLCBidWZzaXplIC0gKHAgLSBidWYpLFxcbiAgNDg6XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJzYVslaV0gJWN4IGlwYWRkcj0lcEk0XFxcXG5cXFwiLFxcbiAgNDk6XFx0XFx0XFx0XFx0XFx0ICAgICAgIGksIChzYXAtXFx1MDAzZXJ4ID8gJ3InIDogJ3QnKSwgXFx1MDAyNnNhcC1cXHUwMDNlaXBhZGRyWzNdKTtcXG4gIDUwOlxcdFxcdFxcdHAgKz0gc2NucHJpbnRmKHAsIGJ1ZnNpemUgLSAocCAtIGJ1ZiksXFxuICA1MTpcXHRcXHRcXHRcXHQgICAgICAgXFxcInNhWyVpXSAgICBzcGk9MHglMDh4IHByb3RvPTB4JXggc2FsdD0weCUwOHggY3J5cHQ9JWRcXFxcblxcXCIsXFxuICA1MjpcXHRcXHRcXHRcXHQgICAgICAgaSwgYmUzMl90b19jcHUoc2FwLVxcdTAwM2V4cy1cXHUwMDNlaWQuc3BpKSxcXG4gIDUzOlxcdFxcdFxcdFxcdCAgICAgICBzYXAtXFx1MDAzZXhzLVxcdTAwM2VpZC5wcm90bywgYmUzMl90b19jcHUoc2FwLVxcdTAwM2VzYWx0KSwgc2FwLVxcdTAwM2VjcnlwdCk7XFxuICA1NDpcXHRcXHRcXHRwICs9IHNjbnByaW50ZihwLCBidWZzaXplIC0gKHAgLSBidWYpLFxcbiAgNTU6XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJzYVslaV0gICAga2V5PTB4JTA4eCAlMDh4ICUwOHggJTA4eFxcXFxuXFxcIixcXG4gIDU2OlxcdFxcdFxcdFxcdCAgICAgICBpLCBiZTMyX3RvX2NwdShzYXAtXFx1MDAzZWtleVswXSksIGJlMzJfdG9fY3B1KHNhcC1cXHUwMDNla2V5WzFdKSxcXG4gIDU3OlxcdFxcdFxcdFxcdCAgICAgICBiZTMyX3RvX2NwdShzYXAtXFx1MDAzZWtleVsyXSksIGJlMzJfdG9fY3B1KHNhcC1cXHUwMDNla2V5WzNdKSk7XFxuICA1ODpcXHRcXHR9XFxuICA1OTpcXHRcXG4gIDYwOlxcdFxcdGxlbiA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZmZlciwgY291bnQsIHBwb3MsIGJ1ZiwgcCAtIGJ1Zik7XFxuICA2MTpcXHRcXG4gIDYyOlxcdFxcdGtmcmVlKGJ1Zik7XFxuICA2MzpcXHRcXHRyZXR1cm4gbGVuO1xcbiAgNjQ6XFx0fVxcbiAgNjU6XFx0XFxuICA2NjpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpcHNlY19kYmdfZm9wcyA9IHtcXG4gIDY3OlxcdFxcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbiAgNjg6XFx0XFx0Lm9wZW4gPSBzaW1wbGVfb3BlbixcXG4gIDY5OlxcdFxcdC5yZWFkID0gbnNpbV9kYmdfbmV0ZGV2X29wc19yZWFkLFxcbiAgNzA6XFx0fTtcXG4gIDcxOlxcdFxcbiAgNzI6XFx0c3RhdGljIGludCBuc2ltX2lwc2VjX2ZpbmRfZW1wdHlfaWR4KHN0cnVjdCBuc2ltX2lwc2VjICppcHNlYylcXG4gIDczOlxcdHtcXG4gIDc0OlxcdFxcdHUzMiBpO1xcbiAgNzU6XFx0XFxuICA3NjpcXHRcXHRpZiAoaXBzZWMtXFx1MDAzZWNvdW50ID09IE5TSU1fSVBTRUNfTUFYX1NBX0NPVU5UKVxcbiAgNzc6XFx0XFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuICA3ODpcXHRcXG4gIDc5OlxcdFxcdC8qIHNlYXJjaCBzYSB0YWJsZSAqL1xcbiAgODA6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5TSU1fSVBTRUNfTUFYX1NBX0NPVU5UOyBpKyspIHtcXG4gIDgxOlxcdFxcdFxcdGlmICghaXBzZWMtXFx1MDAzZXNhW2ldLnVzZWQpXFxuICA4MjpcXHRcXHRcXHRcXHRyZXR1cm4gaTtcXG4gIDgzOlxcdFxcdH1cXG4gIDg0OlxcdFxcbiAgODU6XFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuICA4NjpcXHR9XFxuICA4NzpcXHRcXG4gIDg4OlxcdHN0YXRpYyBpbnQgbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuICA4OTpcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHhmcm1fc3RhdGUgKnhzLFxcbiAgOTA6XFx0XFx0XFx0XFx0XFx0ICAgICAgIF9fYmUzMiAqbXlrZXksIF9fYmUzMiAqbXlzYWx0KVxcbiAgOTE6XFx0e1xcbiAgOTI6XFx0XFx0Y29uc3QgY2hhciBhZXNfZ2NtX25hbWVbXSA9IFxcXCJyZmM0MTA2KGdjbShhZXMpKVxcXCI7XFxuICA5MzpcXHRcXHR1bnNpZ25lZCBjaGFyICprZXlfZGF0YTtcXG4gIDk0OlxcdFxcdGNoYXIgKmFsZ19uYW1lID0gTlVMTDtcXG4gIDk1OlxcdFxcdGludCBrZXlfbGVuO1xcbiAgOTY6XFx0XFxuICA5NzpcXHRcXHRpZiAoIXhzLVxcdTAwM2VhZWFkKSB7XFxuICA5ODpcXHRcXHRcXHRuZXRkZXZfZXJyKGRldiwgXFxcIlVuc3VwcG9ydGVkIElQc2VjIGFsZ29yaXRobVxcXFxuXFxcIik7XFxuICA5OTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMTAwOlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6NTg6MzIuMTA5NzI2MDI3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzODQ0NzYyODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUgd2UgZ28uIEhlcmUgYXJlIG15IHRob3VnaHRzIG9uIGV4YW1pbmluZyB0aGF0IGZ1bmN0aW9uIGFuZCBpdHMgdXNlIHdpdGhpbiB0aGUgbmV0ZGV2c2ltIElQc2VjIGRyaXZlci5cblxuKipEaXZpbmcgRGVlcCBpbnRvIGBuc2ltX2lwc2VjX3BhcnNlX3Byb3RvX2tleXNgKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhlIElQc2VjIGZ1bmN0aW9uYWxpdHkgaXMgaW1wbGVtZW50ZWQgd2l0aGluIHRoZSBuZXRkZXZzaW0gZHJpdmVyLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBkaWcgaW50byBgbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzYC4gVG8gcmVhbGx5IHVuZGVyc3RhbmQgaXRzIHJvbGUgYW5kIHBvdGVudGlhbCBpbXBhY3QsIEknbGwgdHJhY2UgdGhyb3VnaCB0aGUgcmVzdCBvZiB0aGF0IGZ1bmN0aW9uLCBzZWVpbmcgcHJlY2lzZWx5IGhvdyBpdCBoYW5kbGVzIGtleSBwYXJzaW5nIGFuZCB3aGF0IGNvbmZpZ3VyYXRpb25zIGl0J3MgcmVzcG9uc2libGUgZm9yLlxuXG5PZiBjb3Vyc2UsIHRoZSBmdW5jdGlvbiBpdHNlbGYgaXMgb25seSBwYXJ0IG9mIHRoZSBzdG9yeS4gSSdsbCBuZWVkIHRvIGZvbGxvdyB0aGUgY2FsbGluZyBjaGFpbi4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBpcyBjYWxsZWQgZnJvbSwgYnkgd2hhdCBhbmQgd2h5LiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0cyB3aWxsIHJlYWxseSBoZWxwIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kIGJlaGF2aW9yIGluIHRoZSBsYXJnZXIgc2NvcGUgb2YgdGhlIElQc2VjIGRyaXZlciBpbiBgZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmNgLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgaW5mb3JtYXRpb24gSSBuZWVkLCB0byB1bmRlcnN0YW5kIGhvdyBrZXkgbWF0ZXJpYWwgaXMgcHJvY2Vzc2VkIGFuZCBob3cgaXQgYWZmZWN0cyB0aGUgb3ZlcmFsbCBJUHNlYyBzaW11bGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTIyLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzo1ODozNC40OTQyMDUzNFoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAxOlxcdFxcbiAxMDI6XFx0XFx0aWYgKHhzLVxcdTAwM2VhZWFkLVxcdTAwM2VhbGdfaWN2X2xlbiAhPSBOU0lNX0lQU0VDX0FVVEhfQklUUykge1xcbiAxMDM6XFx0XFx0XFx0bmV0ZGV2X2VycihkZXYsIFxcXCJJUHNlYyBvZmZsb2FkIHJlcXVpcmVzICVkIGJpdCBhdXRoZW50aWNhdGlvblxcXFxuXFxcIixcXG4gMTA0OlxcdFxcdFxcdFxcdCAgIE5TSU1fSVBTRUNfQVVUSF9CSVRTKTtcXG4gMTA1OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAxMDY6XFx0XFx0fVxcbiAxMDc6XFx0XFxuIDEwODpcXHRcXHRrZXlfZGF0YSA9IFxcdTAwMjZ4cy1cXHUwMDNlYWVhZC1cXHUwMDNlYWxnX2tleVswXTtcXG4gMTA5OlxcdFxcdGtleV9sZW4gPSB4cy1cXHUwMDNlYWVhZC1cXHUwMDNlYWxnX2tleV9sZW47XFxuIDExMDpcXHRcXHRhbGdfbmFtZSA9IHhzLVxcdTAwM2VhZWFkLVxcdTAwM2VhbGdfbmFtZTtcXG4gMTExOlxcdFxcbiAxMTI6XFx0XFx0aWYgKHN0cmNtcChhbGdfbmFtZSwgYWVzX2djbV9uYW1lKSkge1xcbiAxMTM6XFx0XFx0XFx0bmV0ZGV2X2VycihkZXYsIFxcXCJVbnN1cHBvcnRlZCBJUHNlYyBhbGdvcml0aG0gLSBwbGVhc2UgdXNlICVzXFxcXG5cXFwiLFxcbiAxMTQ6XFx0XFx0XFx0XFx0ICAgYWVzX2djbV9uYW1lKTtcXG4gMTE1OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAxMTY6XFx0XFx0fVxcbiAxMTc6XFx0XFxuIDExODpcXHRcXHQvKiAxNjAgYWNjb3VudHMgZm9yIDE2IGJ5dGUga2V5IGFuZCA0IGJ5dGUgc2FsdCAqL1xcbiAxMTk6XFx0XFx0aWYgKGtleV9sZW4gXFx1MDAzZSBOU0lNX0lQU0VDX0FVVEhfQklUUykge1xcbiAxMjA6XFx0XFx0XFx0Km15c2FsdCA9ICgoX19iZTMyICopa2V5X2RhdGEpWzRdO1xcbiAxMjE6XFx0XFx0fSBlbHNlIGlmIChrZXlfbGVuID09IE5TSU1fSVBTRUNfQVVUSF9CSVRTKSB7XFxuIDEyMjpcXHRcXHRcXHQqbXlzYWx0ID0gMDtcXG4gMTIzOlxcdFxcdH0gZWxzZSB7XFxuIDEyNDpcXHRcXHRcXHRuZXRkZXZfZXJyKGRldiwgXFxcIklQc2VjIGh3IG9mZmxvYWQgb25seSBzdXBwb3J0cyAxMjggYml0IGtleXMgd2l0aCBvcHRpb25hbCAzMiBiaXQgc2FsdFxcXFxuXFxcIik7XFxuIDEyNTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMTI2OlxcdFxcdH1cXG4gMTI3OlxcdFxcdG1lbWNweShteWtleSwga2V5X2RhdGEsIDE2KTtcXG4gMTI4OlxcdFxcbiAxMjk6XFx0XFx0cmV0dXJuIDA7XFxuIDEzMDpcXHR9XFxuIDEzMTpcXHRcXG4gMTMyOlxcdHN0YXRpYyBpbnQgbnNpbV9pcHNlY19hZGRfc2Eoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gMTMzOlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHhmcm1fc3RhdGUgKnhzLFxcbiAxMzQ6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDEzNTpcXHR7XFxuIDEzNjpcXHRcXHRzdHJ1Y3QgbnNpbV9pcHNlYyAqaXBzZWM7XFxuIDEzNzpcXHRcXHRzdHJ1Y3QgbmV0ZGV2c2ltICpucztcXG4gMTM4OlxcdFxcdHN0cnVjdCBuc2ltX3NhIHNhO1xcbiAxMzk6XFx0XFx0dTE2IHNhX2lkeDtcXG4gMTQwOlxcdFxcdGludCByZXQ7XFxuIDE0MTpcXHRcXG4gMTQyOlxcdFxcdG5zID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4gMTQzOlxcdFxcdGlwc2VjID0gXFx1MDAyNm5zLVxcdTAwM2VpcHNlYztcXG4gMTQ0OlxcdFxcbiAxNDU6XFx0XFx0aWYgKHhzLVxcdTAwM2VpZC5wcm90byAhPSBJUFBST1RPX0VTUCBcXHUwMDI2XFx1MDAyNiB4cy1cXHUwMDNlaWQucHJvdG8gIT0gSVBQUk9UT19BSCkge1xcbiAxNDY6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIlVuc3VwcG9ydGVkIHByb3RvY29sIGZvciBpcHNlYyBvZmZsb2FkXFxcIik7XFxuIDE0NzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMTQ4OlxcdFxcdH1cXG4gMTQ5OlxcdFxcbiAxNTA6XFx0XFx0aWYgKHhzLVxcdTAwM2VjYWxnKSB7XFxuIDE1MTpcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiQ29tcHJlc3Npb24gb2ZmbG9hZCBub3Qgc3VwcG9ydGVkXFxcIik7XFxuIDE1MjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMTUzOlxcdFxcdH1cXG4gMTU0OlxcdFxcbiAxNTU6XFx0XFx0aWYgKHhzLVxcdTAwM2V4c28udHlwZSAhPSBYRlJNX0RFVl9PRkZMT0FEX0NSWVBUTykge1xcbiAxNTY6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIlVuc3VwcG9ydGVkIGlwc2VjIG9mZmxvYWQgdHlwZVxcXCIpO1xcbiAxNTc6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDE1ODpcXHRcXHR9XFxuIDE1OTpcXHRcXG4gMTYwOlxcdFxcdC8qIGZpbmQgdGhlIGZpcnN0IHVudXNlZCBpbmRleCAqL1xcbiAxNjE6XFx0XFx0cmV0ID0gbnNpbV9pcHNlY19maW5kX2VtcHR5X2lkeChpcHNlYyk7XFxuIDE2MjpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbiAxNjM6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIk5vIHNwYWNlIGZvciBTQSBpbiBSeCB0YWJsZSFcXFwiKTtcXG4gMTY0OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDE2NTpcXHRcXHR9XFxuIDE2NjpcXHRcXHRzYV9pZHggPSAodTE2KXJldDtcXG4gMTY3OlxcdFxcbiAxNjg6XFx0XFx0bWVtc2V0KFxcdTAwMjZzYSwgMCwgc2l6ZW9mKHNhKSk7XFxuIDE2OTpcXHRcXHRzYS51c2VkID0gdHJ1ZTtcXG4gMTcwOlxcdFxcdHNhLnhzID0geHM7XFxuIDE3MTpcXHRcXG4gMTcyOlxcdFxcdGlmIChzYS54cy1cXHUwMDNlaWQucHJvdG8gXFx1MDAyNiBJUFBST1RPX0VTUClcXG4gMTczOlxcdFxcdFxcdHNhLmNyeXB0ID0geHMtXFx1MDAzZWVhbGcgfHwgeHMtXFx1MDAzZWFlYWQ7XFxuIDE3NDpcXHRcXG4gMTc1OlxcdFxcdC8qIGdldCB0aGUga2V5IGFuZCBzYWx0ICovXFxuIDE3NjpcXHRcXHRyZXQgPSBuc2ltX2lwc2VjX3BhcnNlX3Byb3RvX2tleXMoZGV2LCB4cywgc2Eua2V5LCBcXHUwMDI2c2Euc2FsdCk7XFxuIDE3NzpcXHRcXHRpZiAocmV0KSB7XFxuIDE3ODpcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiRmFpbGVkIHRvIGdldCBrZXkgZGF0YSBmb3IgU0EgdGFibGVcXFwiKTtcXG4gMTc5OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDE4MDpcXHRcXHR9XFxuIDE4MTpcXHRcXG4gMTgyOlxcdFxcdGlmICh4cy1cXHUwMDNleHNvLmRpciA9PSBYRlJNX0RFVl9PRkZMT0FEX0lOKVxcbiAxODM6XFx0XFx0XFx0c2EucnggPSB0cnVlO1xcbiAxODQ6XFx0XFxuIDE4NTpcXHRcXHRpZiAoeHMtXFx1MDAzZXByb3BzLmZhbWlseSA9PSBBRl9JTkVUNilcXG4gMTg2OlxcdFxcdFxcdG1lbWNweShzYS5pcGFkZHIsIFxcdTAwMjZ4cy1cXHUwMDNlaWQuZGFkZHIuYTYsIDE2KTtcXG4gMTg3OlxcdFxcdGVsc2VcXG4gMTg4OlxcdFxcdFxcdG1lbWNweShcXHUwMDI2c2EuaXBhZGRyWzNdLCBcXHUwMDI2eHMtXFx1MDAzZWlkLmRhZGRyLmE0LCA0KTtcXG4gMTg5OlxcdFxcbiAxOTA6XFx0XFx0LyogdGhlIHByZXBhcmF0aW9ucyB3b3JrZWQsIHNvIHNhdmUgdGhlIGluZm8gKi9cXG4gMTkxOlxcdFxcdG1lbWNweShcXHUwMDI2aXBzZWMtXFx1MDAzZXNhW3NhX2lkeF0sIFxcdTAwMjZzYSwgc2l6ZW9mKHNhKSk7XFxuIDE5MjpcXHRcXG4gMTkzOlxcdFxcdC8qIHRoZSBYRlJNIHN0YWNrIGRvZXNuJ3QgbGlrZSBvZmZsb2FkX2hhbmRsZSA9PSAwLFxcbiAxOTQ6XFx0XFx0ICogc28gYWRkIGEgYml0ZmxhZyBpbiBjYXNlIG91ciBhcnJheSBpbmRleCBpcyAwXFxuIDE5NTpcXHRcXHQgKi9cXG4gMTk2OlxcdFxcdHhzLVxcdTAwM2V4c28ub2ZmbG9hZF9oYW5kbGUgPSBzYV9pZHggfCBOU0lNX0lQU0VDX1ZBTElEO1xcbiAxOTc6XFx0XFx0aXBzZWMtXFx1MDAzZWNvdW50Kys7XFxuIDE5ODpcXHRcXG4gMTk5OlxcdFxcdHJldHVybiAwO1xcbiAyMDA6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzo1ODozNC40OTQzMDI4NFoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzU2NjM2MTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBuc2ltX2lwc2VjX2FkZF9zYWAgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgYHN0cnVjdCBuc2ltX3NhIHNhYCBpcyBtZXRpY3Vsb3VzbHkgaW5pdGlhbGl6ZWQgdXNpbmcgYG1lbXNldGAuIFRoaXMgaXMgY3J1Y2lhbCDigJMgYSBjbGVhbiBzbGF0ZSBpcyB0aGUgZm91bmRhdGlvbi4gYG5zaW1faXBzZWNfcGFyc2VfcHJvdG9fa2V5c2AgdGhlbiBleHRyYWN0cyB0aGUgYHNhLmtleWAgYW5kIGBzYS5zYWx0YCwgZW5zdXJpbmcgdGhleSBhcmUgaW50ZXJwcmV0ZWQgYXMgYmlnLWVuZGlhbiAzMi1iaXQgdmFsdWVzIHVzaW5nIGBfX2JlMzJgLiBFeGNlbGxlbnQsIGVuZGlhbm5lc3MgY29uc2lkZXJhdGlvbnMgYXJlIGJlaW5nIGhhbmRsZWQgdXBmcm9udC4gQW5kLCBjb25maXJtZWQgYnkgYG5zaW1fZGJnX25ldGRldl9vcHNfcmVhZGAsIHRoZSBkZWJ1ZyBvdXRwdXQgY29ycmVjdGx5IGNvbnZlcnRzIHRoZSBlbmRpYW5uZXNzIHdoZW4gcHJpbnRpbmcsIHVzaW5nIGBiZTMyX3RvX2NwdWAgc28gdGhhdCB0aGUgaGV4IHZhbHVlcyBtYXRjaCB0aGUgZGVidWdnZWQgZW52aXJvbm1lbnQuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogYXJlIHRoZXJlIGFueSBsaW5nZXJpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IE5vLCBJIGRvbid0IHNlZSBhbnkuIFRoZSBgc2FgIHN0cnVjdCBzdGFydHMgemVyb2VkLiBUaGUga2V5cyBhbmQgc2FsdCBhcmUgaGFuZGxlZCBzYWZlbHkgd2l0aCBgbWVtY3B5YCBhbmQgZGlyZWN0IGFzc2lnbm1lbnQuIFRoZSBkZWJ1ZyBidWZmZXIgdXNlcyBga3phbGxvY2AsIHNvIGl0IGlzIHplcm9lZCBtZW1vcnksIHdoaWNoIGlzIGEgZ29vZCBwcmFjdGljZSB0byBhdm9pZCBsZWFraW5nIHBvdGVudGlhbGx5IHNlbnNpdGl2ZSBpbmZvcm1hdGlvbi4gVGhlIHR5cGUgY2hhbmdlcyBmcm9tIGB1MzJgIHRvIGBfX2JlMzJgIGFuZCBzcGFyc2UgYW5ub3RhdGlvbnMgc2VlbSB0byBoYXZlIGJlZW4gdXNlZCB0byBoZWxwIGVuZm9yY2UgZW5kaWFubmVzcyBjb3JyZWN0bmVzcy4gQW5kIHRoZSBwcmludCBmb3JtYXQgY29udmVydHMgdGhlIGVuZGlhbm5lc3Mgd2hlbiBkaXNwbGF5aW5nLlxuXG5JJ20gc2F0aXNmaWVkIHRoYXQgdGhpcyBzcGVjaWZpYyBjaGFuZ2UgZG9lc24ndCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBIb3dldmVyLCBqdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGNvZGViYXNlIGZvciBvdGhlciB1c2VzIG9mIGBrZXlgLCBgc2FsdGAsIG9yIHRoZSBgc3RydWN0IG5zaW1fc2FgIHdpdGhpbiBgbmV0ZGV2c2ltYC4gVGhhdCdzIHRoZSBuZXh0IHN0ZXAsIGp1c3QgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzgyOSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjU4OjM3Ljg1MDk0MDgzN1oiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1NzQyMDYyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuc2ltX3NhXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jPTEyPXN0YXRpYyBzc2l6ZV90IG5zaW1fZGJnX25ldGRldl9vcHNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jLTM2LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBOU0lNX0lQU0VDX01BWF9TQV9DT1VOVDsgaSsrKSB7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmM6Mzc6XFx0XFx0c3RydWN0IG5zaW1fc2EgKnNhcCA9IFxcdTAwMjZpcHNlYy1cXHUwMDNlc2FbaV07XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtMzgtXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYz0xMzI9c3RhdGljIGludCBuc2ltX2lwc2VjX2FkZF9zYShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtMTM3LVxcdHN0cnVjdCBuZXRkZXZzaW0gKm5zO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jOjEzODpcXHRzdHJ1Y3QgbnNpbV9zYSBzYTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy0xMzktXFx0dTE2IHNhX2lkeDtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jPTIwMj1zdGF0aWMgdm9pZCBuc2ltX2lwc2VjX2RlbF9zYShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeHMpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy0yMTQtXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmM6MjE1OlxcdG1lbXNldChcXHUwMDI2aXBzZWMtXFx1MDAzZXNhW3NhX2lkeF0sIDAsIHNpemVvZihzdHJ1Y3QgbnNpbV9zYSkpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jLTIxNi1cXHRpcHNlYy1cXHUwMDNlY291bnQtLTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jPTIyND1ib29sIG5zaW1faXBzZWNfdHgoc3RydWN0IG5ldGRldnNpbSAqbnMsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy0yMjgtXFx0c3RydWN0IHhmcm1fc3RhdGUgKnhzO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jOjIyOTpcXHRzdHJ1Y3QgbnNpbV9zYSAqdHNhO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jLTIzMC1cXHR1MzIgc2FfaWR4O1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQxLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDo0MjpzdHJ1Y3QgbnNpbV9zYSB7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQzLVxcdHN0cnVjdCB4ZnJtX3N0YXRlICp4cztcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD01Mj1zdHJ1Y3QgbnNpbV9pcHNlYyB7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjUzOlxcdHN0cnVjdCBuc2ltX3NhIHNhW05TSU1fSVBTRUNfTUFYX1NBX0NPVU5UXTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtNTQtXFx0c3RydWN0IGRlbnRyeSAqcGZpbGU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjU4OjQwLjAwODM3MDQ5NFoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODU0NzA3MTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIElQc2VjIFBhdGNoKipcblxuT2theSwgdGhpcyBpcyBwcmV0dHkgY2xlYW4uIEZyb20gd2hhdCBJIGNhbiBzZWUsIHRoaXMgcGF0Y2ggaXMgYSBzdHJhaWdodGZvcndhcmQgZml4IGZvciBob3cgdGhlIG5ldGRldnNpbSBkcml2ZXIgaGFuZGxlcyB0aGUgZW5kaWFubmVzcyBvZiBJUHNlYyBrZXlzIGFuZCBzYWx0LiBUaGV5J3JlIGNvcnJlY3RseSB1cGRhdGluZyB0aGUgZGF0YSB0eXBlcyBmcm9tIHRoZSBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBgdTMyYCB0byB0aGUgbmV0d29yay1ieXRlLW9yZGVyLWF3YXJlIGBfX2JlMzJgLCB3aGljaCBpcyBjcnVjaWFsIGZvciBjcm9zcy1zeXN0ZW0gY29tcGF0aWJpbGl0eSwgYW5kIGFkZGluZyB0aGUgbmVjZXNzYXJ5IGBiZTMyX3RvX2NwdSgpYCBjYWxscyB3aGVuIGNvbnZlcnRpbmcgdGhlIHZhbHVlcyBmb3IgZGVidWdmcyBvdXRwdXQuIFRoaXMgZW5zdXJlcyBjb3JyZWN0IHJlcHJlc2VudGF0aW9uIGFjcm9zcyBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcy5cblxuSSd2ZSBjaGVja2VkLCBhbmQgSSBkb24ndCBzZWUgYW55dGhpbmcgaGVyZSB0aGF0IGludHJvZHVjZXMgbmV3IHJpc2tzOiBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMsIG5vIGRvZGd5IGFsbG9jYXRpb25zLCBhbmQgY2VydGFpbmx5IG5vIG9idmlvdXMgaW5mb3JtYXRpb24gbGVha3MsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJIHdhcyBob3BpbmcgZm9yLiBJdCdzIGEgdGFyZ2V0ZWQgYW5kIGZvY3VzZWQgZml4LlxuXG5HaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2UgYW5kIGl0cyBpbXBsaWNhdGlvbnMgZm9yIGNvbnNpc3RlbnQgSVBzZWMga2V5IHJlcHJlc2VudGF0aW9uLCB0aGUgcmlzayBzZWVtcyBtaW5pbWFsLiBUaGVyZWZvcmUsIEknbGwgcmVjb21tZW5kIHJ1bm5pbmcgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCB3aXRoIGBOZWVkc0tNU0FOPWZhbHNlYCBhbmQgcHJvdmlkZSBhIGRldGFpbGVkIGV4cGxhbmF0aW9uIG9mIHRoZSBmaXhlcyBtYWRlIHRvIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTk0LCJPdXRwdXRUb2tlbnMiOjE0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzo1ODo0Mi44NjMwODEzMjFaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGVuZGlhbm5lc3MgaGFuZGxpbmcgb2YgSVBzZWMga2V5cyBhbmQgc2FsdCB2YWx1ZXMgaW4gbmV0ZGV2c2ltIGJ5IGNoYW5naW5nIHRoZSB0eXBlIGFubm90YXRpb25zIGZyb20gdTMyIHRvIF9fYmUzMiBhbmQgY29udmVydGluZyB0aGVtIHdpdGggYmUzMl90b19jcHUoKSB3aGVuIGZvcm1hdHRpbmcgZGVidWdmcyBvdXRwdXQuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdCBwYWRkaW5nIGNoYW5nZXMsIGNvcGllcyBvZiByYXcga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYXJlIGludHJvZHVjZWQuIEFsbCBidWZmZXJzIGFuZCBzdHJ1Y3R1cmVzIGluIG5ldGRldnNpbSBJUHNlYyBjb2RlIHJlbWFpbiBwcm9wZXJseSBpbml0aWFsaXplZCB2aWEgbWVtc2V0L2t6YWxsb2MuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGVuZGlhbm5lc3MgaGFuZGxpbmcgb2YgSVBzZWMga2V5cyBhbmQgc2FsdCB2YWx1ZXMgaW4gbmV0ZGV2c2ltIGJ5IGNoYW5naW5nIHRoZSB0eXBlIGFubm90YXRpb25zIGZyb20gdTMyIHRvIF9fYmUzMiBhbmQgY29udmVydGluZyB0aGVtIHdpdGggYmUzMl90b19jcHUoKSB3aGVuIGZvcm1hdHRpbmcgZGVidWdmcyBvdXRwdXQuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdCBwYWRkaW5nIGNoYW5nZXMsIGNvcGllcyBvZiByYXcga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYXJlIGludHJvZHVjZWQuIEFsbCBidWZmZXJzIGFuZCBzdHJ1Y3R1cmVzIGluIG5ldGRldnNpbSBJUHNlYyBjb2RlIHJlbWFpbiBwcm9wZXJseSBpbml0aWFsaXplZCB2aWEgbWVtc2V0L2t6YWxsb2MuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6vsf8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 17:35:27 +0000 UTC FinishedAt: 2026-09-08 17:58:44 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e0554c6276da957b6e72849520c70a97404cd1ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETDEVSIM", "XFRM_OFFLOAD", "INET_ESP_OFFLOAD", "DEBUG_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e0554c6276da957b6e72849520c70a97404cd1ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETDEVSIM", "XFRM_OFFLOAD", "INET_ESP_OFFLOAD", "DEBUG_FS" ], "series_id": "8f5cb4b7-30a7-4856-b6ec-7aa7cde1fd79" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nsim_dbg_netdev_ops_read", "nsim_ipsec_parse_proto_keys", "nsim_ipsec_add_sa" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVERFVlNJTSYjMzQ7LAogICAgJiMzNDtYRlJNX09GRkxPQUQmIzM0OywKICAgICYjMzQ7SU5FVF9FU1BfT0ZGTE9BRCYjMzQ7LAogICAgJiMzNDtERUJVR19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25zaW1fZGJnX25ldGRldl9vcHNfcmVhZCYjMzQ7LAogICAgJiMzNDtuc2ltX2lwc2VjX3BhcnNlX3Byb3RvX2tleXMmIzM0OywKICAgICYjMzQ7bnNpbV9pcHNlY19hZGRfc2EmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBlbmRpYW5uZXNzIGhhbmRsaW5nIG9mIElQc2VjIGtleXMgYW5kIHNhbHQgdmFsdWVzIGluIG5ldGRldnNpbSBieSBjaGFuZ2luZyB0aGUgdHlwZSBhbm5vdGF0aW9ucyBmcm9tIHUzMiB0byBfX2JlMzIgYW5kIGNvbnZlcnRpbmcgdGhlbSB3aXRoIGJlMzJfdG9fY3B1KCkgd2hlbiBmb3JtYXR0aW5nIGRlYnVnZnMgb3V0cHV0LiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3QgcGFkZGluZyBjaGFuZ2VzLCBjb3BpZXMgb2YgcmF3IGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZSwgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGFyZSBpbnRyb2R1Y2VkLiBBbGwgYnVmZmVycyBhbmQgc3RydWN0dXJlcyBpbiBuZXRkZXZzaW0gSVBzZWMgY29kZSByZW1haW4gcHJvcGVybHkgaW5pdGlhbGl6ZWQgdmlhIG1lbXNldC9remFsbG9jLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29ycmVjdHMgZW5kaWFubmVzcyBoYW5kbGluZyBvZiBJUHNlYyBrZXlzIGFuZCBzYWx0IGluIHRoZSBuZXRkZXZzaW0gc2ltdWxhdGVkIGRldmljZSBkcml2ZXIsIG1vZGlmeWluZyBuc2ltX3NhIGZpZWxkIHR5cGVzIHRvIF9fYmUzMiwgYWRqdXN0aW5nIGtleS9zYWx0IHBhcnNpbmcgaW4gbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzLCBhbmQgYnl0ZS1zd2FwcGluZyB2YWx1ZXMgZm9yIGRlYnVnZnMgb3V0cHV0IGluIG5zaW1fZGJnX25ldGRldl9vcHNfcmVhZC4gTmV0ZGV2c2ltIGlzIGEgc29mdHdhcmUtc2ltdWxhdGVkIGRldmljZSBkcml2ZXIgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbmV0bGluayAoWEZSTSBzdGF0ZSBvcGVyYXRpb25zKSBhbmQgZGVidWdmcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzo1NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDRjNTM1YTFlODhkMWRhYzFhNTRjYTU3NzcyMGRmYTI4M2JhM2UxMjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDE3OjU3OjIyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmNcbmluZGV4IDM2YTFiZTQ5MjNkNjEuLjU3MjI4MzdiY2RhMzYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmNcbkBAIC01MCwxMSAmIzQzOzUwLDExIEBAIHN0YXRpYyBzc2l6ZV90IG5zaW1fZGJnX25ldGRldl9vcHNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCxcbiBcdFx0cCAmIzQzOz0gc2NucHJpbnRmKHAsIGJ1ZnNpemUgLSAocCAtIGJ1ZiksXG4gXHRcdFx0ICAgICAgIFwmIzM0O3NhWyVpXSAgICBzcGk9MHglMDh4IHByb3RvPTB4JXggc2FsdD0weCUwOHggY3J5cHQ9JWRcXG5cJiMzNDssXG4gXHRcdFx0ICAgICAgIGksIGJlMzJfdG9fY3B1KHNhcC1cdTAwM2V4cy1cdTAwM2VpZC5zcGkpLFxuLVx0XHRcdCAgICAgICBzYXAtXHUwMDNleHMtXHUwMDNlaWQucHJvdG8sIHNhcC1cdTAwM2VzYWx0LCBzYXAtXHUwMDNlY3J5cHQpO1xuJiM0MztcdFx0XHQgICAgICAgc2FwLVx1MDAzZXhzLVx1MDAzZWlkLnByb3RvLCBiZTMyX3RvX2NwdShzYXAtXHUwMDNlc2FsdCksIHNhcC1cdTAwM2VjcnlwdCk7XG4gXHRcdHAgJiM0Mzs9IHNjbnByaW50ZihwLCBidWZzaXplIC0gKHAgLSBidWYpLFxuIFx0XHRcdCAgICAgICBcJiMzNDtzYVslaV0gICAga2V5PTB4JTA4eCAlMDh4ICUwOHggJTA4eFxcblwmIzM0Oyxcbi1cdFx0XHQgICAgICAgaSwgc2FwLVx1MDAzZWtleVswXSwgc2FwLVx1MDAzZWtleVsxXSxcbi1cdFx0XHQgICAgICAgc2FwLVx1MDAzZWtleVsyXSwgc2FwLVx1MDAzZWtleVszXSk7XG4mIzQzO1x0XHRcdCAgICAgICBpLCBiZTMyX3RvX2NwdShzYXAtXHUwMDNla2V5WzBdKSwgYmUzMl90b19jcHUoc2FwLVx1MDAzZWtleVsxXSksXG4mIzQzO1x0XHRcdCAgICAgICBiZTMyX3RvX2NwdShzYXAtXHUwMDNla2V5WzJdKSwgYmUzMl90b19jcHUoc2FwLVx1MDAzZWtleVszXSkpO1xuIFx0fVxuIFxuIFx0bGVuID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmZmVyLCBjb3VudCwgcHBvcywgYnVmLCBwIC0gYnVmKTtcbkBAIC04Nyw3ICYjNDM7ODcsNyBAQCBzdGF0aWMgaW50IG5zaW1faXBzZWNfZmluZF9lbXB0eV9pZHgoc3RydWN0IG5zaW1faXBzZWMgKmlwc2VjKVxuIFxuIHN0YXRpYyBpbnQgbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IHhmcm1fc3RhdGUgKnhzLFxuLVx0XHRcdFx0ICAgICAgIHUzMiAqbXlrZXksIHUzMiAqbXlzYWx0KVxuJiM0MztcdFx0XHRcdCAgICAgICBfX2JlMzIgKm15a2V5LCBfX2JlMzIgKm15c2FsdClcbiB7XG4gXHRjb25zdCBjaGFyIGFlc19nY21fbmFtZVtdID0gXCYjMzQ7cmZjNDEwNihnY20oYWVzKSlcJiMzNDs7XG4gXHR1bnNpZ25lZCBjaGFyICprZXlfZGF0YTtcbkBAIC0xMTcsNyAmIzQzOzExNyw3IEBAIHN0YXRpYyBpbnQgbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXG4gXHQvKiAxNjAgYWNjb3VudHMgZm9yIDE2IGJ5dGUga2V5IGFuZCA0IGJ5dGUgc2FsdCAqL1xuIFx0aWYgKGtleV9sZW4gXHUwMDNlIE5TSU1fSVBTRUNfQVVUSF9CSVRTKSB7XG4tXHRcdCpteXNhbHQgPSAoKHUzMiAqKWtleV9kYXRhKVs0XTtcbiYjNDM7XHRcdCpteXNhbHQgPSAoKF9fYmUzMiAqKWtleV9kYXRhKVs0XTtcbiBcdH0gZWxzZSBpZiAoa2V5X2xlbiA9PSBOU0lNX0lQU0VDX0FVVEhfQklUUykge1xuIFx0XHQqbXlzYWx0ID0gMDtcbiBcdH0gZWxzZSB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oXG5pbmRleCA1NWFlYzQxMjM3YjliLi5hODJhNjg1Mzg0ZTZkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmhcbkBAIC00Miw4ICYjNDM7NDIsOCBAQFxuIHN0cnVjdCBuc2ltX3NhIHtcbiBcdHN0cnVjdCB4ZnJtX3N0YXRlICp4cztcbiBcdF9fYmUzMiBpcGFkZHJbNF07XG4tXHR1MzIga2V5WzRdO1xuLVx0dTMyIHNhbHQ7XG4mIzQzO1x0X19iZTMyIGtleVs0XTtcbiYjNDM7XHRfX2JlMzIgc2FsdDtcbiBcdGJvb2wgdXNlZDtcbiBcdGJvb2wgY3J5cHQ7XG4gXHRib29sIHJ4O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnNoXG5pbmRleCBhY2UzYTk5MDIzZWQwLi40ODQzZDQ3NDUzOGY0IDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5zaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5zaFxuQEAgLTkzMiwxMSAmIzQzOzkzMiwxMSBAQCBrY2lfdGVzdF9pcHNlY19vZmZsb2FkKClcbiBcdHJ1bl9jbWQgZGlmZiAkc3lzZnNmIC0gXHUwMDNjXHUwMDNjIEVPRlxuIFNBIGNvdW50PTIgdHg9M1xuIHNhWzBdIHR4IGlwYWRkcj0kZHN0aXBcbi1zYVswXSAgICBzcGk9MHgwMDAwMDAwOSBwcm90bz0weDMyIHNhbHQ9MHg2MTYyNjM2NCBjcnlwdD0xXG4tc2FbMF0gICAga2V5PTB4MzQzMzMyMzEgMzgzNzM2MzUgMzIzMTMwMzkgMzYzNTM0MzNcbiYjNDM7c2FbMF0gICAgc3BpPTB4MDAwMDAwMDkgcHJvdG89MHgzMiBzYWx0PTB4NjQ2MzYyNjEgY3J5cHQ9MVxuJiM0MztzYVswXSAgICBrZXk9MHgzMTMyMzMzNCAzNTM2MzczOCAzOTMwMzEzMiAzMzM0MzUzNlxuIHNhWzFdIHJ4IGlwYWRkcj0kc3JjaXBcbi1zYVsxXSAgICBzcGk9MHgwMDAwMDAwOSBwcm90bz0weDMyIHNhbHQ9MHg2MTYyNjM2NCBjcnlwdD0xXG4tc2FbMV0gICAga2V5PTB4MzQzMzMyMzEgMzgzNzM2MzUgMzIzMTMwMzkgMzYzNTM0MzNcbiYjNDM7c2FbMV0gICAgc3BpPTB4MDAwMDAwMDkgcHJvdG89MHgzMiBzYWx0PTB4NjQ2MzYyNjEgY3J5cHQ9MVxuJiM0MztzYVsxXSAgICBrZXk9MHgzMTMyMzMzNCAzNTM2MzczOCAzOTMwMzEzMiAzMzM0MzUzNlxuIEVPRlxuIFx0aWYgWyAkPyAtbmUgMCBdIDsgdGhlblxuIFx0XHRlbmRfdGVzdCBcJiMzNDtGQUlMOiBpcHNlY19vZmZsb2FkIGluY29ycmVjdCBkcml2ZXIgZGF0YVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjU3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVERFVlNJTSYjMzQ7LAogICAgJiMzNDtYRlJNX09GRkxPQUQmIzM0OywKICAgICYjMzQ7SU5FVF9FU1BfT0ZGTE9BRCYjMzQ7LAogICAgJiMzNDtERUJVR19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25zaW1fZGJnX25ldGRldl9vcHNfcmVhZCYjMzQ7LAogICAgJiMzNDtuc2ltX2lwc2VjX3BhcnNlX3Byb3RvX2tleXMmIzM0OywKICAgICYjMzQ7bnNpbV9pcHNlY19hZGRfc2EmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29ycmVjdHMgZW5kaWFubmVzcyBoYW5kbGluZyBvZiBJUHNlYyBrZXlzIGFuZCBzYWx0IGluIHRoZSBuZXRkZXZzaW0gc2ltdWxhdGVkIGRldmljZSBkcml2ZXIsIG1vZGlmeWluZyBuc2ltX3NhIGZpZWxkIHR5cGVzIHRvIF9fYmUzMiwgYWRqdXN0aW5nIGtleS9zYWx0IHBhcnNpbmcgaW4gbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzLCBhbmQgYnl0ZS1zd2FwcGluZyB2YWx1ZXMgZm9yIGRlYnVnZnMgb3V0cHV0IGluIG5zaW1fZGJnX25ldGRldl9vcHNfcmVhZC4gTmV0ZGV2c2ltIGlzIGEgc29mdHdhcmUtc2ltdWxhdGVkIGRldmljZSBkcml2ZXIgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbmV0bGluayAoWEZSTSBzdGF0ZSBvcGVyYXRpb25zKSBhbmQgZGVidWdmcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDRjNTM1YTFlODhkMWRhYzFhNTRjYTU3NzcyMGRmYTI4M2JhM2UxMjgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDE3OjU3OjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYwppbmRleCAzNmExYmU0OTIzZDYxLi41NzIyODM3YmNkYTM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYwpAQCAtNTAsMTEgJiM0Mzs1MCwxMSBAQCBzdGF0aWMgc3NpemVfdCBuc2ltX2RiZ19uZXRkZXZfb3BzX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsCiAJCXAgJiM0Mzs9IHNjbnByaW50ZihwLCBidWZzaXplIC0gKHAgLSBidWYpLAogCQkJICAgICAgICYjMzQ7c2FbJWldICAgIHNwaT0weCUwOHggcHJvdG89MHgleCBzYWx0PTB4JTA4eCBjcnlwdD0lZFxuJiMzNDssCiAJCQkgICAgICAgaSwgYmUzMl90b19jcHUoc2FwLSZndDt4cy0mZ3Q7aWQuc3BpKSwKLQkJCSAgICAgICBzYXAtJmd0O3hzLSZndDtpZC5wcm90bywgc2FwLSZndDtzYWx0LCBzYXAtJmd0O2NyeXB0KTsKJiM0MzsJCQkgICAgICAgc2FwLSZndDt4cy0mZ3Q7aWQucHJvdG8sIGJlMzJfdG9fY3B1KHNhcC0mZ3Q7c2FsdCksIHNhcC0mZ3Q7Y3J5cHQpOwogCQlwICYjNDM7PSBzY25wcmludGYocCwgYnVmc2l6ZSAtIChwIC0gYnVmKSwKIAkJCSAgICAgICAmIzM0O3NhWyVpXSAgICBrZXk9MHglMDh4ICUwOHggJTA4eCAlMDh4XG4mIzM0OywKLQkJCSAgICAgICBpLCBzYXAtJmd0O2tleVswXSwgc2FwLSZndDtrZXlbMV0sCi0JCQkgICAgICAgc2FwLSZndDtrZXlbMl0sIHNhcC0mZ3Q7a2V5WzNdKTsKJiM0MzsJCQkgICAgICAgaSwgYmUzMl90b19jcHUoc2FwLSZndDtrZXlbMF0pLCBiZTMyX3RvX2NwdShzYXAtJmd0O2tleVsxXSksCiYjNDM7CQkJICAgICAgIGJlMzJfdG9fY3B1KHNhcC0mZ3Q7a2V5WzJdKSwgYmUzMl90b19jcHUoc2FwLSZndDtrZXlbM10pKTsKIAl9CiAKIAlsZW4gPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcihidWZmZXIsIGNvdW50LCBwcG9zLCBidWYsIHAgLSBidWYpOwpAQCAtODcsNyAmIzQzOzg3LDcgQEAgc3RhdGljIGludCBuc2ltX2lwc2VjX2ZpbmRfZW1wdHlfaWR4KHN0cnVjdCBuc2ltX2lwc2VjICppcHNlYykKIAogc3RhdGljIGludCBuc2ltX2lwc2VjX3BhcnNlX3Byb3RvX2tleXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgICAgICAgc3RydWN0IHhmcm1fc3RhdGUgKnhzLAotCQkJCSAgICAgICB1MzIgKm15a2V5LCB1MzIgKm15c2FsdCkKJiM0MzsJCQkJICAgICAgIF9fYmUzMiAqbXlrZXksIF9fYmUzMiAqbXlzYWx0KQogewogCWNvbnN0IGNoYXIgYWVzX2djbV9uYW1lW10gPSAmIzM0O3JmYzQxMDYoZ2NtKGFlcykpJiMzNDs7CiAJdW5zaWduZWQgY2hhciAqa2V5X2RhdGE7CkBAIC0xMTcsNyAmIzQzOzExNyw3IEBAIHN0YXRpYyBpbnQgbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAKIAkvKiAxNjAgYWNjb3VudHMgZm9yIDE2IGJ5dGUga2V5IGFuZCA0IGJ5dGUgc2FsdCAqLwogCWlmIChrZXlfbGVuICZndDsgTlNJTV9JUFNFQ19BVVRIX0JJVFMpIHsKLQkJKm15c2FsdCA9ICgodTMyICopa2V5X2RhdGEpWzRdOwomIzQzOwkJKm15c2FsdCA9ICgoX19iZTMyICopa2V5X2RhdGEpWzRdOwogCX0gZWxzZSBpZiAoa2V5X2xlbiA9PSBOU0lNX0lQU0VDX0FVVEhfQklUUykgewogCQkqbXlzYWx0ID0gMDsKIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oCmluZGV4IDU1YWVjNDEyMzdiOWIuLmE4MmE2ODUzODRlNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgKQEAgLTQyLDggJiM0Mzs0Miw4IEBACiBzdHJ1Y3QgbnNpbV9zYSB7CiAJc3RydWN0IHhmcm1fc3RhdGUgKnhzOwogCV9fYmUzMiBpcGFkZHJbNF07Ci0JdTMyIGtleVs0XTsKLQl1MzIgc2FsdDsKJiM0MzsJX19iZTMyIGtleVs0XTsKJiM0MzsJX19iZTMyIHNhbHQ7CiAJYm9vbCB1c2VkOwogCWJvb2wgY3J5cHQ7CiAJYm9vbCByeDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnNoCmluZGV4IGFjZTNhOTkwMjNlZDAuLjQ4NDNkNDc0NTM4ZjQgMTAwNzU1Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsuc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5zaApAQCAtOTMyLDExICYjNDM7OTMyLDExIEBAIGtjaV90ZXN0X2lwc2VjX29mZmxvYWQoKQogCXJ1bl9jbWQgZGlmZiAkc3lzZnNmIC0gJmx0OyZsdDsgRU9GCiBTQSBjb3VudD0yIHR4PTMKIHNhWzBdIHR4IGlwYWRkcj0kZHN0aXAKLXNhWzBdICAgIHNwaT0weDAwMDAwMDA5IHByb3RvPTB4MzIgc2FsdD0weDYxNjI2MzY0IGNyeXB0PTEKLXNhWzBdICAgIGtleT0weDM0MzMzMjMxIDM4MzczNjM1IDMyMzEzMDM5IDM2MzUzNDMzCiYjNDM7c2FbMF0gICAgc3BpPTB4MDAwMDAwMDkgcHJvdG89MHgzMiBzYWx0PTB4NjQ2MzYyNjEgY3J5cHQ9MQomIzQzO3NhWzBdICAgIGtleT0weDMxMzIzMzM0IDM1MzYzNzM4IDM5MzAzMTMyIDMzMzQzNTM2CiBzYVsxXSByeCBpcGFkZHI9JHNyY2lwCi1zYVsxXSAgICBzcGk9MHgwMDAwMDAwOSBwcm90bz0weDMyIHNhbHQ9MHg2MTYyNjM2NCBjcnlwdD0xCi1zYVsxXSAgICBrZXk9MHgzNDMzMzIzMSAzODM3MzYzNSAzMjMxMzAzOSAzNjM1MzQzMwomIzQzO3NhWzFdICAgIHNwaT0weDAwMDAwMDA5IHByb3RvPTB4MzIgc2FsdD0weDY0NjM2MjYxIGNyeXB0PTEKJiM0MztzYVsxXSAgICBrZXk9MHgzMTMyMzMzNCAzNTM2MzczOCAzOTMwMzEzMiAzMzM0MzUzNgogRU9GCiAJaWYgWyAkPyAtbmUgMCBdIDsgdGhlbgogCQllbmRfdGVzdCAmIzM0O0ZBSUw6IGlwc2VjX29mZmxvYWQgaW5jb3JyZWN0IGRyaXZlciBkYXRhJiMzNDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE3MAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDEwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldHdvcmsgRGV2aWNlIFNpbXVsYXRvciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBmb2N1c2VkIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzLiBJIHNlZSBtb2RpZmljYXRpb25zIGFjcm9zcyB0aGUgYG5ldGRldnNpbWAgZGlyZWN0b3J5LCBzcGVjaWZpY2FsbHkgYGlwc2VjLmNgIGFuZCBgbmV0ZGV2c2ltLmhgLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBteSBhdHRlbnRpb24uIElQc2VjIHdpdGhpbiBhIHNpbXVsYXRlZCBuZXR3b3JrIGVudmlyb25tZW50Li4uIHRoYXQgY291bGQgYmUgaW50ZXJlc3RpbmcuIEkmIzM5O20gYWxzbyBub3RpbmcgdGhlIGluY2x1c2lvbiBvZiBhIGNoYW5nZSBpbiB0aGUgYHJ0bmV0bGluay5zaGAgc2VsZnRlc3Qgc2NyaXB0LiBUaGlzIHN1Z2dlc3RzIHRlc3RpbmcgaXMgYSBrZXkgY29tcG9uZW50LCBob3BlZnVsbHksIHRvIHZhbGlkYXRlIHRoZXNlIGNoYW5nZXMuCgpNeSBmaXJzdCBzdGVwIGlzIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGFjdHVhbGx5IGJlaW5nICpjaGFuZ2VkKi4gSSYjMzk7bGwgcmVhY2ggZm9yIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBleGFtaW5lIGBuZXRkZXZzaW1gIGFuZCBgaXBzZWMuY2AgbW9yZSBjbG9zZWx5LCB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiB0aGUgbW9kaWZpY2F0aW9ucy4gVGhpcyBpbml0aWFsIGFuYWx5c2lzIHdpbGwgZGljdGF0ZSB0aGUgbmV4dCBzdGVwcywgYnV0IEkgd2FudCB0byBnZXQgYSBoaWdoLWxldmVsIHZpZXcgb2YgdGhlc2UgY2hhbmdlcyBmaXJzdCwgYW5kIHRyeSB0byBhbnRpY2lwYXRlIGFueSBrbm9jay1vbiBlZmZlY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25zaW1fZGJnX25ldGRldl9vcHNfcmVhZHxuc2ltX2lwc2VjJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jLTExLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmM6MTI6c3RhdGljIHNzaXplX3QgbnNpbV9kYmdfbmV0ZGV2X29wc19yZWFkKHN0cnVjdCBmaWxlICpmaWxwLFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtMTMtXHRcdFx0XHRcdGNoYXIgX191c2VyICpidWZmZXIsXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtMTYtXHRzdHJ1Y3QgbmV0ZGV2c2ltICpucyA9IGZpbHAtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmM6MTc6XHRzdHJ1Y3QgbnNpbV9pcHNlYyAqaXBzZWMgPSBcdTAwMjZucy1cdTAwM2VpcHNlYztcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jLTE4LVx0c2l6ZV90IGJ1ZnNpemU7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmM9NjY9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaXBzZWNfZGJnX2ZvcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtNjgtXHQub3BlbiA9IHNpbXBsZV9vcGVuLFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmM6Njk6XHQucmVhZCA9IG5zaW1fZGJnX25ldGRldl9vcHNfcmVhZCxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jLTcwLX07XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy03MS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jOjcyOnN0YXRpYyBpbnQgbnNpbV9pcHNlY19maW5kX2VtcHR5X2lkeChzdHJ1Y3QgbnNpbV9pcHNlYyAqaXBzZWMpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy03My17XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtODctXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYzo4ODpzdGF0aWMgaW50IG5zaW1faXBzZWNfcGFyc2VfcHJvdG9fa2V5cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtODktXHRcdFx0XHQgICAgICAgc3RydWN0IHhmcm1fc3RhdGUgKnhzLFxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jLTEzMS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jOjEzMjpzdGF0aWMgaW50IG5zaW1faXBzZWNfYWRkX3NhKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy0xMzMtXHRcdFx0ICAgICBzdHJ1Y3QgeGZybV9zdGF0ZSAqeHMsXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtMTM1LXtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jOjEzNjpcdHN0cnVjdCBuc2ltX2lwc2VjICppcHNlYztcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jLTEzNy1cdHN0cnVjdCBuZXRkZXZzaW0gKm5zO1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jLTE2MC1cdC8qIGZpbmQgdGhlIGZpcnN0IHVudXNlZCBpbmRleCAqL1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmM6MTYxOlx0cmV0ID0gbnNpbV9pcHNlY19maW5kX2VtcHR5X2lkeChpcHNlYyk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy0xNjItXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtMTc1LVx0LyogZ2V0IHRoZSBrZXkgYW5kIHNhbHQgKi9cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jOjE3NjpcdHJldCA9IG5zaW1faXBzZWNfcGFyc2VfcHJvdG9fa2V5cyhkZXYsIHhzLCBzYS5rZXksIFx1MDAyNnNhLnNhbHQpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtMTc3LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jLTIwMS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jOjIwMjpzdGF0aWMgdm9pZCBuc2ltX2lwc2VjX2RlbF9zYShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeHMpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy0yMDMte1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtMjA0LVx0c3RydWN0IG5ldGRldnNpbSAqbnMgPSBuZXRkZXZfcHJpdihkZXYpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmM6MjA1Olx0c3RydWN0IG5zaW1faXBzZWMgKmlwc2VjID0gXHUwMDI2bnMtXHUwMDNlaXBzZWM7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy0yMDYtXHR1MTYgc2FfaWR4O1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jPTIxOT1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1kZXZfb3BzIG5zaW1feGZybWRldl9vcHMgPSB7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYzoyMjA6XHQueGRvX2Rldl9zdGF0ZV9hZGRcdD0gbnNpbV9pcHNlY19hZGRfc2EsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYzoyMjE6XHQueGRvX2Rldl9zdGF0ZV9kZWxldGVcdD0gbnNpbV9pcHNlY19kZWxfc2EsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy0yMjItfTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jLTIyMy1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jOjIyNDpib29sIG5zaW1faXBzZWNfdHgoc3RydWN0IG5ldGRldnNpbSAqbnMsIHN0cnVjdCBza19idWZmICpza2IpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy0yMjUte1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtMjI2LVx0c3RydWN0IHNlY19wYXRoICpzcCA9IHNrYl9zZWNfcGF0aChza2IpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmM6MjI3Olx0c3RydWN0IG5zaW1faXBzZWMgKmlwc2VjID0gXHUwMDI2bnMtXHUwMDNlaXBzZWM7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy0yMjgtXHRzdHJ1Y3QgeGZybV9zdGF0ZSAqeHM7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtMjcwLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmM6MjcxOnZvaWQgbnNpbV9pcHNlY19pbml0KHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtMjcyLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy0yODctXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYzoyODg6dm9pZCBuc2ltX2lwc2VjX3RlYXJkb3duKHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtMjg5LXtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jOjI5MDpcdHN0cnVjdCBuc2ltX2lwc2VjICppcHNlYyA9IFx1MDAyNm5zLVx1MDAzZWlwc2VjO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtMjkxLVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYz0xMjM9c3RhdGljIG5ldGRldl90eF90IG5zaW1fc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0xMzUtXHRyY3VfcmVhZF9sb2NrKCk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6MTM2Olx0aWYgKCFuc2ltX2lwc2VjX3R4KG5zLCBza2IpKVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTEzNy1cdFx0Z290byBvdXRfZHJvcF9hbnk7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jPTEwNDA9c3RhdGljIGludCBuc2ltX2luaXRfbmV0ZGV2c2ltKHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0xMDY5LVx0bnNpbV9tYWNzZWNfaW5pdChucyk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6MTA3MDpcdG5zaW1faXBzZWNfaW5pdChucyk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtMTA3MS1cbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtMTA5Ny1lcnJfaXBzZWNfdGVhcmRvd246XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6MTA5ODpcdG5zaW1faXBzZWNfdGVhcmRvd24obnMpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTEwOTktXHRuc2ltX21hY3NlY190ZWFyZG93bihucyk7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jPTExNzU9dm9pZCBuc2ltX2Rlc3Ryb3koc3RydWN0IG5ldGRldnNpbSAqbnMpXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTEyMDAtXHRcdG5zaW1fbWFjc2VjX3RlYXJkb3duKG5zKTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYzoxMjAxOlx0XHRuc2ltX2lwc2VjX3RlYXJkb3duKG5zKTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0xMjAyLVx0XHRuc2ltX2JwZl91bmluaXQobnMpO1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD00Mj1zdHJ1Y3QgbnNpbV9zYSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTUxLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjUyOnN0cnVjdCBuc2ltX2lwc2VjIHtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC01My1cdHN0cnVjdCBuc2ltX3NhIHNhW05TSU1fSVBTRUNfTUFYX1NBX0NPVU5UXTtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg9MTA3PXN0cnVjdCBuZXRkZXZzaW0ge1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC0xNDEtXHRib29sIGJwZl9tYXBfYWNjZXB0O1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjE0MjpcdHN0cnVjdCBuc2ltX2lwc2VjIGlwc2VjO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTE0My1cdHN0cnVjdCBuc2ltX21hY3NlYyBtYWNzZWM7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oPTQxND1zdGF0aWMgaW5saW5lIGJvb2wgbnNpbV9kZXZfcG9ydF9pc192ZihzdHJ1Y3QgbnNpbV9kZXZfcG9ydCAqbnNpbV9kZXZfcG9ydClcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtNDE4LSNpZiBJU19FTkFCTEVEKENPTkZJR19YRlJNX09GRkxPQUQpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg6NDE5OnZvaWQgbnNpbV9pcHNlY19pbml0KHN0cnVjdCBuZXRkZXZzaW0gKm5zKTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDo0MjA6dm9pZCBuc2ltX2lwc2VjX3RlYXJkb3duKHN0cnVjdCBuZXRkZXZzaW0gKm5zKTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDo0MjE6Ym9vbCBuc2ltX2lwc2VjX3R4KHN0cnVjdCBuZXRkZXZzaW0gKm5zLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC00MjItI2Vsc2VcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDo0MjM6c3RhdGljIGlubGluZSB2b2lkIG5zaW1faXBzZWNfaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucylcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC00MjQte1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC00MjYtXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg6NDI3OnN0YXRpYyBpbmxpbmUgdm9pZCBuc2ltX2lwc2VjX3RlYXJkb3duKHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQyOC17XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQzMC1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDo0MzE6c3RhdGljIGlubGluZSBib29sIG5zaW1faXBzZWNfdHgoc3RydWN0IG5ldGRldnNpbSAqbnMsIHN0cnVjdCBza19idWZmICpza2IpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtNDMyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTY0CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBOZXRkZXZTaW0gQ29uZmlndXJhdGlvbiBmb3IgSVBTZWMgT2ZmbG9hZCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSB3aXRoIGBkcml2ZXJzL25ldC9uZXRkZXZzaW0vS2NvbmZpZ2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBLY29uZmlnIG9wdGlvbnMgbmVjZXNzYXJ5IHRvIGVuYWJsZSBuZXRkZXZzaW0gd2l0aCBJUFNlYyBvZmZsb2FkIGNhcGFiaWxpdGllcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyByZXF1aXJlZCBmb3IgdGhhdCBmdW5jdGlvbmFsaXR5IHRvIGJlIGNvbmZpZ3VyZWQuIEFyZSB0aGVyZSBzcGVjaWZpYyBkZXBlbmRlbmNpZXM/IEFyZSB0aGVyZSBoaWRkZW4gb3B0aW9ucyB0aGF0IEkmIzM5O20gbWlzc2luZz8gSSB3YW50IHRvIG1ha2Ugc3VyZSBJJiMzOTttIGVuYWJsaW5nIGV2ZXJ5dGhpbmcgdGhhdOKAmXMgbmVlZGVkIHRvIGV4cG9zZSBhbmQgdXRpbGl6ZSB0aGF0IGZ1bmN0aW9uYWxpdHkuIEkmIzM5O2xsIG5lZWQgdG8gcG9yZSBvdmVyIHRoZSBkZWZpbml0aW9ucyBpbiB0aGF0IGZpbGUgY2xvc2VseSwgbG9va2luZyBmb3IgaW50ZXJhY3Rpb25zIGFuZCBwb3RlbnRpYWwgY29uZmxpY3RzLiBJ4oCZbGwgYmUgb24gdGhlIGxvb2tvdXQgZm9yIGFueSBzdWJ0bGUgY2x1ZXMgYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb24gb2YgSVBTZWMgb2ZmbG9hZCB3aXRoaW4gdGhlIE5ldERldlNpbSBlbnZpcm9ubWVudC4gVGhpcyB3aWxsIGFsbG93IG1lIHRvIGVuc3VyZSBteSBidWlsZHMgd2lsbCBoYXZlIHRoaXMgY2FwYWJpbGl0eS4gSSBob3BlIGl0IGlzIGFsbCBzZWxmLWV2aWRlbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkVUREVWU0lNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz02MDI9c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2h5cGVydi9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnLTYwMy1cbmRyaXZlcnMvbmV0L0tjb25maWc6NjA0OmNvbmZpZyBORVRERVZTSU1cbmRyaXZlcnMvbmV0L0tjb25maWctNjA1LVx0dHJpc3RhdGUgXCYjMzQ7U2ltdWxhdGVkIG5ldHdvcmtpbmcgZGV2aWNlXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvTWFrZWZpbGU9ODY9b2JqLSQoQ09ORklHX1VTQjRfTkVUKSAmIzQzOz0gdGh1bmRlcmJvbHQvXG5kcml2ZXJzL25ldC9NYWtlZmlsZTo4NzpvYmotJChDT05GSUdfTkVUREVWU0lNKSAmIzQzOz0gbmV0ZGV2c2ltL1xuZHJpdmVycy9uZXQvTWFrZWZpbGUtODgtb2JqLSQoQ09ORklHX05FVF9GQUlMT1ZFUikgJiM0Mzs9IG5ldF9mYWlsb3Zlci5vXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL01ha2VmaWxlLTItXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vTWFrZWZpbGU6MzpvYmotJChDT05GSUdfTkVUREVWU0lNKSAmIzQzOz0gbmV0ZGV2c2ltLm9cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZS00LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2NDYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gTmV0d29yayBEcml2ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIG5ldHdvcmsgZHJpdmVyIHNpdHVhdGlvbiBiZXR0ZXIuIExldCYjMzk7cyBzZWUuLi4gdGhlIGBLY29uZmlnYCBmaWxlIGluIHRoZSBgZHJpdmVycy9uZXRgIGRpcmVjdG9yeSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDYwNCwgc2VlbXMgbGlrZSBhIGxpa2VseSBwbGFjZSB0byBzdGFydC4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHlvdSBmaW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIG5ldHdvcmsgZGV2aWNlcywgcmlnaHQ/IEl0JiMzOTtsbCBsaWtlbHkgdGVsbCBtZSB0aGUgZGVwZW5kZW5jaWVzLCB0aGUgYnVpbGQgZmxhZ3MsIGFuZCBhbGwgdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzIEkgbmVlZCB0byBrbm93IHRvIHRydWx5IHVuZGVyc3RhbmQgaXRzIGlubmVyIHdvcmtpbmdzLiBUaGVuLCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgcGFydGljdWxhciBkcml2ZXIgZ2V0cyBidWlsdCBpbnRvIHRoZSBrZXJuZWwsIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGBNYWtlZmlsZWAgbG9jYXRlZCBpbiBgZHJpdmVycy9uZXQvbmV0ZGV2c2ltYC4gVGhhdCYjMzk7bGwgZ2l2ZSBtZSB0aGUgYnVpbGQgcnVsZXMsIG9iamVjdCBmaWxlIGRlcGVuZGVuY2llcywgYW5kIGhvdyBpdCBhbGwgZ2V0cyBsaW5rZWQgdG9nZXRoZXIuIFRoYXQgc2hvdWxkIG9mZmVyIHRoZSBtb3N0IGNvbXBsZXRlIGNvbnRleHQgZm9yIG15IGN1cnJlbnQgbmVlZHMuIFRpbWUgdG8gZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjAwOlx0XG4gNjAxOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3RodW5kZXJib2x0L0tjb25maWdcJiMzNDtcbiA2MDI6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvaHlwZXJ2L0tjb25maWdcJiMzNDtcbiA2MDM6XHRcbiA2MDQ6XHRjb25maWcgTkVUREVWU0lNXG4gNjA1Olx0XHR0cmlzdGF0ZSBcJiMzNDtTaW11bGF0ZWQgbmV0d29ya2luZyBkZXZpY2VcJiMzNDtcbiA2MDY6XHRcdGRlcGVuZHMgb24gREVCVUdfRlNcbiA2MDc6XHRcdGRlcGVuZHMgb24gSU5FVFxuIDYwODpcdFx0ZGVwZW5kcyBvbiBQU0FNUExFIHx8IFBTQU1QTEU9blxuIDYwOTpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19NT0NLIHx8IFBUUF8xNTg4X0NMT0NLX01PQ0s9blxuIDYxMDpcdFx0c2VsZWN0IE5FVF9ERVZMSU5LXG4gNjExOlx0XHRzZWxlY3QgUEFHRV9QT09MXG4gNjEyOlx0XHRzZWxlY3QgTkVUX1NIQVBFUlxuIDYxMzpcdFx0aGVscFxuIDYxNDpcdFx0ICBUaGlzIGRyaXZlciBpcyBhIGRldmVsb3BlciB0ZXN0aW5nIHRvb2wgYW5kIHNvZnR3YXJlIG1vZGVsIHRoYXQgY2FuXG4gNjE1Olx0XHQgIGJlIHVzZWQgdG8gdGVzdCB2YXJpb3VzIGNvbnRyb2wgcGF0aCBuZXR3b3JraW5nIEFQSXMsIGVzcGVjaWFsbHlcbiA2MTY6XHRcdCAgSFctb2ZmbG9hZCByZWxhdGVkLlxuIDYxNzpcdFxuIDYxODpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gNjE5Olx0XHQgIHdpbGwgYmUgY2FsbGVkIG5ldGRldnNpbS5cbiA2MjA6XHRcbiA2MjE6XHRjb25maWcgTkVUX0ZBSUxPVkVSXG4gNjIyOlx0XHR0cmlzdGF0ZSBcJiMzNDtGYWlsb3ZlciBkcml2ZXJcJiMzNDtcbiA2MjM6XHRcdHNlbGVjdCBGQUlMT1ZFUlxuIDYyNDpcdFx0aGVscFxuIDYyNTpcdFx0ICBUaGlzIHByb3ZpZGVzIGFuIGF1dG9tYXRlZCBmYWlsb3ZlciBtZWNoYW5pc20gdmlhIEFQSXMgdG8gY3JlYXRlXG4gNjI2Olx0XHQgIGFuZCBkZXN0cm95IGEgZmFpbG92ZXIgbWFzdGVyIG5ldGRldiBhbmQgbWFuYWdlcyBhIHByaW1hcnkgYW5kXG4gNjI3Olx0XHQgIHN0YW5kYnkgc2xhdmUgbmV0ZGV2cyB0aGF0IGdldCByZWdpc3RlcmVkIHZpYSB0aGUgZ2VuZXJpYyBmYWlsb3ZlclxuIDYyODpcdFx0ICBpbmZyYXN0cnVjdHVyZS4gVGhpcyBjYW4gYmUgdXNlZCBieSBwYXJhdmlydHVhbCBkcml2ZXJzIHRvIGVuYWJsZVxuIDYyOTpcdFx0ICBhbiBhbHRlcm5hdGUgbG93IGxhdGVuY3kgZGF0YXBhdGguIEl0IGFsc28gZW5hYmxlcyBsaXZlIG1pZ3JhdGlvbiBvZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNzUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBJUHNlYyBPYmplY3QgQ29tcGlsYXRpb24qKgoKQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgYGlwc2VjLm9gIGlzIGJlaW5nIGJ1aWx0IHdpdGhpbiB0aGUgYG5ldGRldnNpbWAgZnJhbWV3b3JrLiBNeSBmaXJzdCBzdG9wLCBhcyBhbHdheXMgaW4gdGhlc2Ugc2l0dWF0aW9ucywgaXMgdGhlIGBNYWtlZmlsZWAuIFNwZWNpZmljYWxseSwgYGRyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZWAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIG1hZ2ljIHNob3VsZCBiZSBoYXBwZW5pbmcg4oCTIHRoZSBydWxlcywgdGhlIGRlcGVuZGVuY2llcywgdGhlIGZsYWdzLi4uIEl0JiMzOTtzIGFsbCB0aGVyZSwgaG9wZWZ1bGx5IGxhaWQgb3V0IGluIGEgY2xlYW4gYW5kIGxvZ2ljYWwgd2F5LiBJIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCB0YXJnZXRzIGFuZCBzb3VyY2UgZmlsZSBkZXBlbmRlbmNpZXMsIGFueSBzcGVjaWZpYyBjb21waWxlciBmbGFncyBiZWluZyBlbXBsb3llZCBmb3IgSVBzZWMgd2l0aGluIHRoaXMgc2ltdWxhdGVkIG5ldHdvcmsgZGV2aWNlIGNvbnRleHQsIGFuZCBwb3NzaWJseSBhbnkgbGlua2VyIGludHJpY2FjaWVzIGlmIGl0JiMzOTtzIGxpbmtpbmcgYWdhaW5zdCBleHRlcm5hbCBsaWJyYXJpZXMuIExldCYjMzk7cyBzZWUgaWYgdGhlIGFwcHJvYWNoIGlzIHN0cmFpZ2h0Zm9yd2FyZCwgb3IgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgdHJpY2tzIHVzZWQgdG8gaW50ZWdyYXRlIHRoZSBJUHNlYyBjb2RlIGVmZmVjdGl2ZWx5IGludG8gdGhlIHNpbXVsYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdFxuICAgMzpcdG9iai0kKENPTkZJR19ORVRERVZTSU0pICYjNDM7PSBuZXRkZXZzaW0ub1xuICAgNDpcdFxuICAgNTpcdG5ldGRldnNpbS1vYmpzIDo9IFxcXG4gICA2Olx0XHRuZXRkZXYubyBkZXYubyBldGh0b29sLm8gZmliLm8gYnVzLm8gaGVhbHRoLm8gaHdzdGF0cy5vIHVkcF90dW5uZWxzLm8gdGMub1xuICAgNzpcdFxuICAgODpcdGlmZXEgKCQoQ09ORklHX0JQRl9TWVNDQUxMKSx5KVxuICAgOTpcdG5ldGRldnNpbS1vYmpzICYjNDM7PSBcXFxuICAxMDpcdFx0YnBmLm9cbiAgMTE6XHRlbmRpZlxuICAxMjpcdFxuICAxMzpcdGlmbmVxICgkKENPTkZJR19YRlJNX09GRkxPQUQpLClcbiAgMTQ6XHRuZXRkZXZzaW0tb2JqcyAmIzQzOz0gaXBzZWMub1xuICAxNTpcdGVuZGlmXG4gIDE2Olx0XG4gIDE3Olx0aWZuZXEgKCQoQ09ORklHX1BTQU1QTEUpLClcbiAgMTg6XHRuZXRkZXZzaW0tb2JqcyAmIzQzOz0gcHNhbXBsZS5vXG4gIDE5Olx0ZW5kaWZcbiAgMjA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg4OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIERlZXAgaW50byBgaXBzZWMuY2AqKgoKT2theSwgdGltZSB0byByZWFsbHkgZGlnIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBvZiB0aGUgcmVjZW50IGNoYW5nZXMgdG8gYGlwc2VjLmNgLiBJJiMzOTttIGdvaW5nIHRvIG1ldGljdWxvdXNseSBnbyB0aHJvdWdoIHRoZSBjb2RlLCBsaW5lIGJ5IGxpbmUgaWYgbmVjZXNzYXJ5LiBJIHdhbnQgdG8gc2VlIHByZWNpc2VseSAqd2hhdCogd2FzIG1vZGlmaWVkLCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgKmhvdyogdGhlc2UgY2hhbmdlcyBpbXBhY3QgdGhlIGV4ZWN1dGlvbiBmbG93LiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSByaXBwbGUgZWZmZWN0cyDigJMgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGFjdHMsIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgb3Igc3VidGxlIGJlaGF2aW9yYWwgc2hpZnRzLiBJJiMzOTtsbCBiZSB0cmFjaW5nIHRoZSBleGVjdXRpb24gcGF0aCwgbWVudGFsbHkgc2ltdWxhdGluZyBzY2VuYXJpb3MsIGFuZCBjb21wYXJpbmcgdGhlIHVwZGF0ZWQgbG9naWMgYWdhaW5zdCBteSBleGlzdGluZyBtZW50YWwgbW9kZWwgb2YgdGhlIElQU2VjIHN0YWNrLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgY3Vyc29yeSBnbGFuY2U7IEkgbmVlZCB0byBkZXZlbG9wIGEgcm9jay1zb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSB1cGRhdGVkIGludGVyYWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0LyogQ29weXJpZ2h0KGMpIDIwMTggT3JhY2xlIGFuZC9vciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKi9cbiAgIDM6XHRcbiAgIDQ6XHQjaW5jbHVkZSBcdTAwM2NjcnlwdG8vYWVhZC5oXHUwMDNlXG4gICA1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvZGVidWdmcy5oXHUwMDNlXG4gICA2Olx0I2luY2x1ZGUgXHUwMDNjbmV0L3hmcm0uaFx1MDAzZVxuICAgNzpcdFxuICAgODpcdCNpbmNsdWRlIFwmIzM0O25ldGRldnNpbS5oXCYjMzQ7XG4gICA5Olx0XG4gIDEwOlx0I2RlZmluZSBOU0lNX0lQU0VDX0FVVEhfQklUU1x0MTI4XG4gIDExOlx0XG4gIDEyOlx0c3RhdGljIHNzaXplX3QgbnNpbV9kYmdfbmV0ZGV2X29wc19yZWFkKHN0cnVjdCBmaWxlICpmaWxwLFxuICAxMzpcdFx0XHRcdFx0XHRjaGFyIF9fdXNlciAqYnVmZmVyLFxuICAxNDpcdFx0XHRcdFx0XHRzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbiAgMTU6XHR7XG4gIDE2Olx0XHRzdHJ1Y3QgbmV0ZGV2c2ltICpucyA9IGZpbHAtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuICAxNzpcdFx0c3RydWN0IG5zaW1faXBzZWMgKmlwc2VjID0gXHUwMDI2bnMtXHUwMDNlaXBzZWM7XG4gIDE4Olx0XHRzaXplX3QgYnVmc2l6ZTtcbiAgMTk6XHRcdGNoYXIgKmJ1ZiwgKnA7XG4gIDIwOlx0XHRpbnQgbGVuO1xuICAyMTpcdFx0aW50IGk7XG4gIDIyOlx0XG4gIDIzOlx0XHQvKiB0aGUgYnVmZmVyIG5lZWRlZCBpc1xuICAyNDpcdFx0ICogKG51bSBTQXMgKiAzIGxpbmVzIGVhY2ggKiB+NjAgYnl0ZXMgcGVyIGxpbmUpICYjNDM7IG9uZSBtb3JlIGxpbmVcbiAgMjU6XHRcdCAqL1xuICAyNjpcdFx0YnVmc2l6ZSA9IChpcHNlYy1cdTAwM2Vjb3VudCAqIDQgKiA2MCkgJiM0MzsgNjA7XG4gIDI3Olx0XHRidWYgPSBremFsbG9jKGJ1ZnNpemUsIEdGUF9LRVJORUwpO1xuICAyODpcdFx0aWYgKCFidWYpXG4gIDI5Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuICAzMDpcdFxuICAzMTpcdFx0cCA9IGJ1ZjtcbiAgMzI6XHRcdHAgJiM0Mzs9IHNjbnByaW50ZihwLCBidWZzaXplIC0gKHAgLSBidWYpLFxuICAzMzpcdFx0XHQgICAgICAgXCYjMzQ7U0EgY291bnQ9JXUgdHg9JXVcXG5cJiMzNDssXG4gIDM0Olx0XHRcdCAgICAgICBpcHNlYy1cdTAwM2Vjb3VudCwgaXBzZWMtXHUwMDNldHgpO1xuICAzNTpcdFxuICAzNjpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlNJTV9JUFNFQ19NQVhfU0FfQ09VTlQ7IGkmIzQzOyYjNDM7KSB7XG4gIDM3Olx0XHRcdHN0cnVjdCBuc2ltX3NhICpzYXAgPSBcdTAwMjZpcHNlYy1cdTAwM2VzYVtpXTtcbiAgMzg6XHRcbiAgMzk6XHRcdFx0aWYgKCFzYXAtXHUwMDNldXNlZClcbiAgNDA6XHRcdFx0XHRjb250aW51ZTtcbiAgNDE6XHRcbiAgNDI6XHRcdFx0aWYgKHNhcC1cdTAwM2V4cy1cdTAwM2Vwcm9wcy5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gIDQzOlx0XHRcdFx0cCAmIzQzOz0gc2NucHJpbnRmKHAsIGJ1ZnNpemUgLSAocCAtIGJ1ZiksXG4gIDQ0Olx0XHRcdFx0XHQgICAgICAgXCYjMzQ7c2FbJWldICVjeCBpcGFkZHI9JXBJNmNcXG5cJiMzNDssXG4gIDQ1Olx0XHRcdFx0XHQgICAgICAgaSwgKHNhcC1cdTAwM2VyeCA/ICYjMzk7ciYjMzk7IDogJiMzOTt0JiMzOTspLCBcdTAwMjZzYXAtXHUwMDNlaXBhZGRyKTtcbiAgNDY6XHRcdFx0ZWxzZVxuICA0NzpcdFx0XHRcdHAgJiM0Mzs9IHNjbnByaW50ZihwLCBidWZzaXplIC0gKHAgLSBidWYpLFxuICA0ODpcdFx0XHRcdFx0ICAgICAgIFwmIzM0O3NhWyVpXSAlY3ggaXBhZGRyPSVwSTRcXG5cJiMzNDssXG4gIDQ5Olx0XHRcdFx0XHQgICAgICAgaSwgKHNhcC1cdTAwM2VyeCA/ICYjMzk7ciYjMzk7IDogJiMzOTt0JiMzOTspLCBcdTAwMjZzYXAtXHUwMDNlaXBhZGRyWzNdKTtcbiAgNTA6XHRcdFx0cCAmIzQzOz0gc2NucHJpbnRmKHAsIGJ1ZnNpemUgLSAocCAtIGJ1ZiksXG4gIDUxOlx0XHRcdFx0ICAgICAgIFwmIzM0O3NhWyVpXSAgICBzcGk9MHglMDh4IHByb3RvPTB4JXggc2FsdD0weCUwOHggY3J5cHQ9JWRcXG5cJiMzNDssXG4gIDUyOlx0XHRcdFx0ICAgICAgIGksIGJlMzJfdG9fY3B1KHNhcC1cdTAwM2V4cy1cdTAwM2VpZC5zcGkpLFxuICA1MzpcdFx0XHRcdCAgICAgICBzYXAtXHUwMDNleHMtXHUwMDNlaWQucHJvdG8sIGJlMzJfdG9fY3B1KHNhcC1cdTAwM2VzYWx0KSwgc2FwLVx1MDAzZWNyeXB0KTtcbiAgNTQ6XHRcdFx0cCAmIzQzOz0gc2NucHJpbnRmKHAsIGJ1ZnNpemUgLSAocCAtIGJ1ZiksXG4gIDU1Olx0XHRcdFx0ICAgICAgIFwmIzM0O3NhWyVpXSAgICBrZXk9MHglMDh4ICUwOHggJTA4eCAlMDh4XFxuXCYjMzQ7LFxuICA1NjpcdFx0XHRcdCAgICAgICBpLCBiZTMyX3RvX2NwdShzYXAtXHUwMDNla2V5WzBdKSwgYmUzMl90b19jcHUoc2FwLVx1MDAzZWtleVsxXSksXG4gIDU3Olx0XHRcdFx0ICAgICAgIGJlMzJfdG9fY3B1KHNhcC1cdTAwM2VrZXlbMl0pLCBiZTMyX3RvX2NwdShzYXAtXHUwMDNla2V5WzNdKSk7XG4gIDU4Olx0XHR9XG4gIDU5Olx0XG4gIDYwOlx0XHRsZW4gPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcihidWZmZXIsIGNvdW50LCBwcG9zLCBidWYsIHAgLSBidWYpO1xuICA2MTpcdFxuICA2MjpcdFx0a2ZyZWUoYnVmKTtcbiAgNjM6XHRcdHJldHVybiBsZW47XG4gIDY0Olx0fVxuICA2NTpcdFxuICA2NjpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlwc2VjX2RiZ19mb3BzID0ge1xuICA2NzpcdFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXG4gIDY4Olx0XHQub3BlbiA9IHNpbXBsZV9vcGVuLFxuICA2OTpcdFx0LnJlYWQgPSBuc2ltX2RiZ19uZXRkZXZfb3BzX3JlYWQsXG4gIDcwOlx0fTtcbiAgNzE6XHRcbiAgNzI6XHRzdGF0aWMgaW50IG5zaW1faXBzZWNfZmluZF9lbXB0eV9pZHgoc3RydWN0IG5zaW1faXBzZWMgKmlwc2VjKVxuICA3MzpcdHtcbiAgNzQ6XHRcdHUzMiBpO1xuICA3NTpcdFxuICA3NjpcdFx0aWYgKGlwc2VjLVx1MDAzZWNvdW50ID09IE5TSU1fSVBTRUNfTUFYX1NBX0NPVU5UKVxuICA3NzpcdFx0XHRyZXR1cm4gLUVOT1NQQztcbiAgNzg6XHRcbiAgNzk6XHRcdC8qIHNlYXJjaCBzYSB0YWJsZSAqL1xuICA4MDpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlNJTV9JUFNFQ19NQVhfU0FfQ09VTlQ7IGkmIzQzOyYjNDM7KSB7XG4gIDgxOlx0XHRcdGlmICghaXBzZWMtXHUwMDNlc2FbaV0udXNlZClcbiAgODI6XHRcdFx0XHRyZXR1cm4gaTtcbiAgODM6XHRcdH1cbiAgODQ6XHRcbiAgODU6XHRcdHJldHVybiAtRU5PU1BDO1xuICA4NjpcdH1cbiAgODc6XHRcbiAgODg6XHRzdGF0aWMgaW50IG5zaW1faXBzZWNfcGFyc2VfcHJvdG9fa2V5cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuICA4OTpcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCB4ZnJtX3N0YXRlICp4cyxcbiAgOTA6XHRcdFx0XHRcdCAgICAgICBfX2JlMzIgKm15a2V5LCBfX2JlMzIgKm15c2FsdClcbiAgOTE6XHR7XG4gIDkyOlx0XHRjb25zdCBjaGFyIGFlc19nY21fbmFtZVtdID0gXCYjMzQ7cmZjNDEwNihnY20oYWVzKSlcJiMzNDs7XG4gIDkzOlx0XHR1bnNpZ25lZCBjaGFyICprZXlfZGF0YTtcbiAgOTQ6XHRcdGNoYXIgKmFsZ19uYW1lID0gTlVMTDtcbiAgOTU6XHRcdGludCBrZXlfbGVuO1xuICA5NjpcdFxuICA5NzpcdFx0aWYgKCF4cy1cdTAwM2VhZWFkKSB7XG4gIDk4Olx0XHRcdG5ldGRldl9lcnIoZGV2LCBcJiMzNDtVbnN1cHBvcnRlZCBJUHNlYyBhbGdvcml0aG1cXG5cJiMzNDspO1xuICA5OTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAxMDA6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3MDEKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSB3ZSBnby4uLgoKKipEaXZpbmcgaW50byBgZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmNgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcyBgaXBzZWMuY2AgZmlsZSB3aXRoaW4gdGhlIGBuZXRkZXZzaW1gIGRpcmVjdG9yeS4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGlzIHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIGhhbmRsZSBvbiBob3cgdGhlIHNpbXVsYXRlZCBJUHNlYyBmdW5jdGlvbmFsaXR5IGlzIGltcGxlbWVudGVkIHdpdGhpbiB0aGUgbmV0ZGV2c2ltIGVudmlyb25tZW50LiBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyB0aGUgZW5jYXBzdWxhdGlvbiBhbmQgZGVjYXBzdWxhdGlvbiwgZXNwZWNpYWxseSBnaXZlbiB0aGUgc3ludGhldGljIG5hdHVyZSBvZiB0aGlzIHZpcnR1YWwgbmV0d29yayBpbnRlcmZhY2UuIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IHRoZXkmIzM5O3JlIG1pbWlja2luZyB0aGUgSVBzZWMgU0EgbmVnb3RpYXRpb24gYW5kIGtleSBtYW5hZ2VtZW50IHdpdGhvdXQgcmVseWluZyBvbiBoYXJkd2FyZSBvZmZsb2FkIG9yIHNwZWNpZmljIGNyeXB0byBhY2NlbGVyYXRvcnMsIHRoYXQgd291bGQgYmUgdXNlbGVzcyBpbiB0aGlzIGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVk4oCUc3BlY2lmaWNhbGx5LCB0aGUgc2ltdWxhdGVkIFNlY3VyaXR5IEFzc29jaWF0aW9ucyAoU0FzKSBhbmQgaG93IHRoZXkmIzM5O3JlIHJlcHJlc2VudGVkLiBBcmUgdGhleSB1c2luZyBhIHNpbXBsaWZpZWQgbW9kZWwsIG9yIGEgbW9yZSBmYWl0aGZ1bCAodGhvdWdoIGFic3RyYWN0ZWQpIHJlcHJlc2VudGF0aW9uIG9mIElLRS9JUHNlYyBwcm90b2NvbHM/IEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGhvdyB0aGV5IGFyZSBoYW5kbGluZyBhbnkgc3RhdGUgdHJhbnNpdGlvbnMsIGFuZCBob3cgdGhlIHNpbXVsYXRpb24gaGFuZGxlcyBkaWZmZXJlbnQgcGFja2V0IGZsb3dzLCBhbmQgaG93IGl0IGRlYWxzIHdpdGggdGhlIHBvdGVudGlhbCBmb3IgZnJhZ21lbnRhdGlvbiBvciByZWFzc2VtYmx5IHdpdGhpbiB0aGUgc2ltdWxhdGVkIElQc2VjIHR1bm5lbC4gRXNzZW50aWFsbHksIEkgbmVlZCB0byBzZWUgaWYgaXQgcHJvdmlkZXMgYW4gYWNjdXJhdGUsIG9yIGF0IGxlYXN0IGEgdXNhYmxlLCBhYnN0cmFjdGlvbiBvZiBJUHNlYywgZm9yIHRlc3QgcHVycG9zZXMsIHdpdGhpbiB0aGlzIG5ldHdvcmsgc2ltdWxhdGlvbiBlbnZpcm9ubWVudC4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDE6XHRcbiAxMDI6XHRcdGlmICh4cy1cdTAwM2VhZWFkLVx1MDAzZWFsZ19pY3ZfbGVuICE9IE5TSU1fSVBTRUNfQVVUSF9CSVRTKSB7XG4gMTAzOlx0XHRcdG5ldGRldl9lcnIoZGV2LCBcJiMzNDtJUHNlYyBvZmZsb2FkIHJlcXVpcmVzICVkIGJpdCBhdXRoZW50aWNhdGlvblxcblwmIzM0OyxcbiAxMDQ6XHRcdFx0XHQgICBOU0lNX0lQU0VDX0FVVEhfQklUUyk7XG4gMTA1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDEwNjpcdFx0fVxuIDEwNzpcdFxuIDEwODpcdFx0a2V5X2RhdGEgPSBcdTAwMjZ4cy1cdTAwM2VhZWFkLVx1MDAzZWFsZ19rZXlbMF07XG4gMTA5Olx0XHRrZXlfbGVuID0geHMtXHUwMDNlYWVhZC1cdTAwM2VhbGdfa2V5X2xlbjtcbiAxMTA6XHRcdGFsZ19uYW1lID0geHMtXHUwMDNlYWVhZC1cdTAwM2VhbGdfbmFtZTtcbiAxMTE6XHRcbiAxMTI6XHRcdGlmIChzdHJjbXAoYWxnX25hbWUsIGFlc19nY21fbmFtZSkpIHtcbiAxMTM6XHRcdFx0bmV0ZGV2X2VycihkZXYsIFwmIzM0O1Vuc3VwcG9ydGVkIElQc2VjIGFsZ29yaXRobSAtIHBsZWFzZSB1c2UgJXNcXG5cJiMzNDssXG4gMTE0Olx0XHRcdFx0ICAgYWVzX2djbV9uYW1lKTtcbiAxMTU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMTE2Olx0XHR9XG4gMTE3Olx0XG4gMTE4Olx0XHQvKiAxNjAgYWNjb3VudHMgZm9yIDE2IGJ5dGUga2V5IGFuZCA0IGJ5dGUgc2FsdCAqL1xuIDExOTpcdFx0aWYgKGtleV9sZW4gXHUwMDNlIE5TSU1fSVBTRUNfQVVUSF9CSVRTKSB7XG4gMTIwOlx0XHRcdCpteXNhbHQgPSAoKF9fYmUzMiAqKWtleV9kYXRhKVs0XTtcbiAxMjE6XHRcdH0gZWxzZSBpZiAoa2V5X2xlbiA9PSBOU0lNX0lQU0VDX0FVVEhfQklUUykge1xuIDEyMjpcdFx0XHQqbXlzYWx0ID0gMDtcbiAxMjM6XHRcdH0gZWxzZSB7XG4gMTI0Olx0XHRcdG5ldGRldl9lcnIoZGV2LCBcJiMzNDtJUHNlYyBodyBvZmZsb2FkIG9ubHkgc3VwcG9ydHMgMTI4IGJpdCBrZXlzIHdpdGggb3B0aW9uYWwgMzIgYml0IHNhbHRcXG5cJiMzNDspO1xuIDEyNTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAxMjY6XHRcdH1cbiAxMjc6XHRcdG1lbWNweShteWtleSwga2V5X2RhdGEsIDE2KTtcbiAxMjg6XHRcbiAxMjk6XHRcdHJldHVybiAwO1xuIDEzMDpcdH1cbiAxMzE6XHRcbiAxMzI6XHRzdGF0aWMgaW50IG5zaW1faXBzZWNfYWRkX3NhKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gMTMzOlx0XHRcdFx0ICAgICBzdHJ1Y3QgeGZybV9zdGF0ZSAqeHMsXG4gMTM0Olx0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gMTM1Olx0e1xuIDEzNjpcdFx0c3RydWN0IG5zaW1faXBzZWMgKmlwc2VjO1xuIDEzNzpcdFx0c3RydWN0IG5ldGRldnNpbSAqbnM7XG4gMTM4Olx0XHRzdHJ1Y3QgbnNpbV9zYSBzYTtcbiAxMzk6XHRcdHUxNiBzYV9pZHg7XG4gMTQwOlx0XHRpbnQgcmV0O1xuIDE0MTpcdFxuIDE0MjpcdFx0bnMgPSBuZXRkZXZfcHJpdihkZXYpO1xuIDE0MzpcdFx0aXBzZWMgPSBcdTAwMjZucy1cdTAwM2VpcHNlYztcbiAxNDQ6XHRcbiAxNDU6XHRcdGlmICh4cy1cdTAwM2VpZC5wcm90byAhPSBJUFBST1RPX0VTUCBcdTAwMjZcdTAwMjYgeHMtXHUwMDNlaWQucHJvdG8gIT0gSVBQUk9UT19BSCkge1xuIDE0NjpcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtVbnN1cHBvcnRlZCBwcm90b2NvbCBmb3IgaXBzZWMgb2ZmbG9hZFwmIzM0Oyk7XG4gMTQ3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDE0ODpcdFx0fVxuIDE0OTpcdFxuIDE1MDpcdFx0aWYgKHhzLVx1MDAzZWNhbGcpIHtcbiAxNTE6XHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7Q29tcHJlc3Npb24gb2ZmbG9hZCBub3Qgc3VwcG9ydGVkXCYjMzQ7KTtcbiAxNTI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMTUzOlx0XHR9XG4gMTU0Olx0XG4gMTU1Olx0XHRpZiAoeHMtXHUwMDNleHNvLnR5cGUgIT0gWEZSTV9ERVZfT0ZGTE9BRF9DUllQVE8pIHtcbiAxNTY6XHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7VW5zdXBwb3J0ZWQgaXBzZWMgb2ZmbG9hZCB0eXBlXCYjMzQ7KTtcbiAxNTc6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMTU4Olx0XHR9XG4gMTU5Olx0XG4gMTYwOlx0XHQvKiBmaW5kIHRoZSBmaXJzdCB1bnVzZWQgaW5kZXggKi9cbiAxNjE6XHRcdHJldCA9IG5zaW1faXBzZWNfZmluZF9lbXB0eV9pZHgoaXBzZWMpO1xuIDE2MjpcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuIDE2MzpcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtObyBzcGFjZSBmb3IgU0EgaW4gUnggdGFibGUhXCYjMzQ7KTtcbiAxNjQ6XHRcdFx0cmV0dXJuIHJldDtcbiAxNjU6XHRcdH1cbiAxNjY6XHRcdHNhX2lkeCA9ICh1MTYpcmV0O1xuIDE2NzpcdFxuIDE2ODpcdFx0bWVtc2V0KFx1MDAyNnNhLCAwLCBzaXplb2Yoc2EpKTtcbiAxNjk6XHRcdHNhLnVzZWQgPSB0cnVlO1xuIDE3MDpcdFx0c2EueHMgPSB4cztcbiAxNzE6XHRcbiAxNzI6XHRcdGlmIChzYS54cy1cdTAwM2VpZC5wcm90byBcdTAwMjYgSVBQUk9UT19FU1ApXG4gMTczOlx0XHRcdHNhLmNyeXB0ID0geHMtXHUwMDNlZWFsZyB8fCB4cy1cdTAwM2VhZWFkO1xuIDE3NDpcdFxuIDE3NTpcdFx0LyogZ2V0IHRoZSBrZXkgYW5kIHNhbHQgKi9cbiAxNzY6XHRcdHJldCA9IG5zaW1faXBzZWNfcGFyc2VfcHJvdG9fa2V5cyhkZXYsIHhzLCBzYS5rZXksIFx1MDAyNnNhLnNhbHQpO1xuIDE3NzpcdFx0aWYgKHJldCkge1xuIDE3ODpcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtGYWlsZWQgdG8gZ2V0IGtleSBkYXRhIGZvciBTQSB0YWJsZVwmIzM0Oyk7XG4gMTc5Olx0XHRcdHJldHVybiByZXQ7XG4gMTgwOlx0XHR9XG4gMTgxOlx0XG4gMTgyOlx0XHRpZiAoeHMtXHUwMDNleHNvLmRpciA9PSBYRlJNX0RFVl9PRkZMT0FEX0lOKVxuIDE4MzpcdFx0XHRzYS5yeCA9IHRydWU7XG4gMTg0Olx0XG4gMTg1Olx0XHRpZiAoeHMtXHUwMDNlcHJvcHMuZmFtaWx5ID09IEFGX0lORVQ2KVxuIDE4NjpcdFx0XHRtZW1jcHkoc2EuaXBhZGRyLCBcdTAwMjZ4cy1cdTAwM2VpZC5kYWRkci5hNiwgMTYpO1xuIDE4NzpcdFx0ZWxzZVxuIDE4ODpcdFx0XHRtZW1jcHkoXHUwMDI2c2EuaXBhZGRyWzNdLCBcdTAwMjZ4cy1cdTAwM2VpZC5kYWRkci5hNCwgNCk7XG4gMTg5Olx0XG4gMTkwOlx0XHQvKiB0aGUgcHJlcGFyYXRpb25zIHdvcmtlZCwgc28gc2F2ZSB0aGUgaW5mbyAqL1xuIDE5MTpcdFx0bWVtY3B5KFx1MDAyNmlwc2VjLVx1MDAzZXNhW3NhX2lkeF0sIFx1MDAyNnNhLCBzaXplb2Yoc2EpKTtcbiAxOTI6XHRcbiAxOTM6XHRcdC8qIHRoZSBYRlJNIHN0YWNrIGRvZXNuJiMzOTt0IGxpa2Ugb2ZmbG9hZF9oYW5kbGUgPT0gMCxcbiAxOTQ6XHRcdCAqIHNvIGFkZCBhIGJpdGZsYWcgaW4gY2FzZSBvdXIgYXJyYXkgaW5kZXggaXMgMFxuIDE5NTpcdFx0ICovXG4gMTk2Olx0XHR4cy1cdTAwM2V4c28ub2ZmbG9hZF9oYW5kbGUgPSBzYV9pZHggfCBOU0lNX0lQU0VDX1ZBTElEO1xuIDE5NzpcdFx0aXBzZWMtXHUwMDNlY291bnQmIzQzOyYjNDM7O1xuIDE5ODpcdFxuIDE5OTpcdFx0cmV0dXJuIDA7XG4gMjAwOlx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjY0OQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDc2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOZXRkZXZzaW0gSVBzZWMgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCB0aGlzIHBhdGNoIGhhcyBjaGFuZ2VkLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGEgc2VyaWVzIG9mIG1vZGlmaWNhdGlvbnMgcHJpbWFyaWx5IGZvY3VzZWQgb24gdGhlIGBuZXRkZXZzaW1gJiMzOTtzIElQc2VjIGltcGxlbWVudGF0aW9uLgoKMS4gICoqRW5kaWFubmVzcyBNYXR0ZXJzOioqIFRoZSBpbml0aWFsIGNoYW5nZXMgYXJlIHN0cmFpZ2h0Zm9yd2FyZDogaXQmIzM5O3MgdXBkYXRpbmcgYHUzMiBrZXlbNF1gIGFuZCBgdTMyIHNhbHRgIHRvIHVzZSBiaWctZW5kaWFuIHJlcHJlc2VudGF0aW9ucyAoYF9fYmUzMiBrZXlbNF1gLCBgX19iZTMyIHNhbHRgKSBpbiBgbnNpbV9zYWAuIEl0IGFsc28gdXBkYXRlcyB0aGUgcGFyYW1ldGVyIHR5cGVzIGluIHRoZSBgbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzKClgIGZ1bmN0aW9uIHRvIHJlZmxlY3QgdGhpcyBlbmRpYW4gY2hhbmdlLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBuZXR3b3JrIHByb3RvY29scyB3aGVyZSBieXRlIG9yZGVyIGlzIHBhcmFtb3VudCBmb3IgZGF0YSBpbnRlcnByZXRhdGlvbi4gQWxzbywgdGhlIHBhdGNoIGNvbnZlcnRzIHRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiB3aXRoIGAoKF9fYmUzMiAqKWtleV9kYXRhKVs0XWAuCjIuICAqKkRlYnVnIE91dHB1dCBDb3JyZWN0bmVzczoqKiBJdCYjMzk7cyB0cmFuc2xhdGluZyB0aGUgaW50ZXJuYWwgYmlnLWVuZGlhbiByZXByZXNlbnRhdGlvbiB0byB0aGUgQ1BVJiMzOTtzIG5hdGl2ZSBieXRlIG9yZGVyIChgYmUzMl90b19jcHUoKWApIHdoZW4gcHJpbnRpbmcgdGhlIHNhbHQgYW5kIGtleSB2YWx1ZXMgaW4gYG5zaW1fZGJnX25ldGRldl9vcHNfcmVhZCgpYC4gVGhpcyBlbnN1cmVzIHRoZSBkZWJ1ZyBvdXRwdXQgaXMgaHVtYW4tcmVhZGFibGUgYW5kIGRvZXNuJiMzOTt0IGNvbmZ1c2UgdGhpbmdzLgozLiAgKipTZWxmdGVzdCBBZGp1c3RtZW50czoqKiBUaGUgZmluYWwgY2hhbmdlIGlzIGFuIHVwZGF0ZSB0byB0aGUgZXhwZWN0ZWQgb3V0cHV0IGZvcm1hdCBpbiB0aGUgYHJ0bmV0bGluay5zaGAgc2VsZi10ZXN0cyB0byBhY2NvbW1vZGF0ZSB0aGUgdXBkYXRlZCBkZWJ1ZyBvdXRwdXQgZm9ybWF0LiBUaGlzIGNvbmZpcm1zIHRoZSBpbXBhY3Qgb2YgdGhlIGVuZGlhbm5lc3MgY2hhbmdlIHByb3BhZ2F0ZXMgY29ycmVjdGx5LgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgbWVyaXRzIGZ1enppbmcuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhlcmUmIzM5O3MgZW5vdWdoIHBvdGVudGlhbCBmb3IgaW50cm9kdWNpbmcgYnVncyB0aGF0IGNvdWxkIGJlIGRpc2NvdmVyZWQgdGhyb3VnaCBmdXp6aW5nLgoKTXkgcHJpbWFyeSB0aG91Z2h0IGlzIHRoZSByZWFjaGFiaWxpdHkgcXVlc3Rpb24uIENhbiBJIGV2ZW4gZXhlcmNpc2UgdGhpcyBjb2RlPyBZZXMsIGBuZXRkZXZzaW1gIGlzIHBlcmZlY3QgZm9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgYW5kIEdDRSwgbWFraW5nIGl0IGlkZWFsIGZvciBmdXp6aW5nIGJlY2F1c2UgaXQmIzM5O3MgY29tcGxldGVseSB2aXJ0dWFsIGFuZCBhY2Nlc3NpYmxlLiBTeXprYWxsZXImIzM5O3MgZXh0ZW5zaXZlIHVzZSBpcyBhbm90aGVyIGdyZWF0IGluZGljYXRvci4KCklzIHRoZSBYRlJNIG9mZmxvYWQgcGF0aCByZWFjaGFibGU/IFllcywgYW5kIGl0JiMzOTtzIHJlYWNoYWJsZSB0aHJvdWdoIHhmcm0gbmV0bGluayAvIGlwc2VjIG9mZmxvYWQgbWVzc2FnZXMgKGBYRlJNX01TR19ORVdTQWAsIGB4ZG9fZGV2X3N0YXRlX2FkZGAgdmlhIGBuc2ltX3hmcm1kZXZfb3BzYCAvIGBuc2ltX2lwc2VjX2FkZF9zYWApLCBhbmQgYnkgcmVhZGluZyBkZWJ1Z2ZzIGBuc2ltX2RiZ19uZXRkZXZfb3BzX3JlYWRgLiBUaGlzIGlzIGEgc29saWQgY29ubmVjdGlvbiBhbmQgYSB2ZXJ5IGltcG9ydGFudCBhc3BlY3Qgb2YgdGhlIHdob2xlIHNldHVwLgoKKipXb3J0aEZ1enppbmcgQW5hbHlzaXM6KioKCiogICAqKlJlYWNoYWJpbGl0eToqKiBUaGUgY29kZSBpcyBjb21wbGV0ZWx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBlbnZpcm9ubWVudHMuIFRoaXMgaXMgYSBwcmltYXJ5IHBvc2l0aXZlIGNyaXRlcmlvbi4KKiAgICoqTkZDSS9SZWZhY3RvcmluZzoqKiBJIG5lZWQgdG8gYmUgc2tlcHRpY2FsIG9mIGFueSAmIzM0O25vIGZ1bmN0aW9uYWwgY2hhbmdlJiMzNDsgb3IgJiMzNDtyZWZhY3RvcmluZyYjMzQ7IGNsYWltcy4KKiAgICoqTmVnYXRpdmUgQ3JpdGVyaWE6KioKICAgICogICBObyBub24ta2VybmVsIGNoYW5nZXMuCiAgICAqICAgTm8gc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLCBhcyBpdCYjMzk7cyBzb2Z0d2FyZS1iYXNlZC4KICAgICogICBObyB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMuCiogICAqKlBvc2l0aXZlIENyaXRlcmlhOioqCiAgICAqICAgUmVhY2hhYmxlIGRyaXZlcnMgYW5kIHByb3RvY29scyAoTmV0bGluaywgZGVidWdmcywgZXRjLikuCiAgICAqICAgUmVzdHJ1Y3R1cmluZyBvZiBkYXRhIHN0cnVjdHVyZXMgKHRoZSBlbmRpYW4gY2hhbmdlIGlzIHNpZ25pZmljYW50KS4KCioqQ29uY2x1c2lvbjoqKiBJIHdvdWxkIHNheSB0aGlzIHBhdGNoICpkZWZpbml0ZWx5KiBqdXN0aWZpZXMgZnV6emluZyAoYFdvcnRoRnV6emluZyA9IHRydWVgKS4gVGhlIGNoYW5nZXMgdG91Y2ggY29yZSBrZXJuZWwgY29kZSAoYGRyaXZlcnMvbmV0YCksIGFmZmVjdCBkYXRhIHN0cnVjdHVyZXMgcmVsYXRlZCB0byBuZXR3b3JrIHByb3RvY29scyAoSVBzZWMsIFhGUk0pLCBhbmQgdGhlIHBhdGggaXMgcmVhZGlseSBhY2Nlc3NpYmxlLiBJIHNob3VsZCBpbnZlc3RpZ2F0ZSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIChERUJVR1xfRlMsIElORVQsIFhGUk1cX09GRkxPQUQsIGV0Yy4pIHRvIGNvbmZpcm0gYW55IGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIGFuZCBwb3RlbnRpYWwgbGltaXRhdGlvbnMgb2YgdGhlIG1vZHVsZS4gR2l2ZW4gdGhhdCB0aGUgWEZSTV9PRkZMT0FEIEtjb25maWcgb3B0aW9uIGlzIGEgZGVwZW5kZW5jeSBhbmQgYG5ldGRldnNpbS1vYmpzICYjNDM7PSBpcHNlYy5vYCB1c2VzIGl0IGluIHRoZSBNYWtlZmlsZSwgdGhhdCBpcyBhbiBvYnZpb3VzIGVudHJ5IHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWEZSTV9PRkZMT0FEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWc9NT1jb25maWcgWEZSTVxuLS1cbm5ldC94ZnJtL0tjb25maWctMTAtXG5uZXQveGZybS9LY29uZmlnOjExOmNvbmZpZyBYRlJNX09GRkxPQURcbm5ldC94ZnJtL0tjb25maWctMTItXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzIyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIFhGUk0gQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgemVybyBpbiBvbiBgbmV0L3hmcm0vS2NvbmZpZ2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBuYXZpZ2F0ZSBzdHJhaWdodCB0byBsaW5lIDExLiBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgZm9yIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24sIHBlcmhhcHMgcmVsYXRlZCB0byBhIHJlY2VudCBidWcgcmVwb3J0IG9yIGVuaGFuY2VtZW50IHJlcXVlc3QuIExpbmUgMTEgaXMgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIHNldHRpbmdzIGZvciB0aGUgWEZSTSBzdWJzeXN0ZW0gYXJlIGRlZmluZWQsIG9yIGEgbWFqb3IgZGVwZW5kZW5jeSBpcyBlc3RhYmxpc2hlZC4gSSBuZWVkIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGNvbnRleHQgc3Vycm91bmRpbmcgdGhhdCBsaW5lIHRvIHNlZSBob3cgaXQgYWZmZWN0cyB0aGUgc3BlY2lmaWMgZmVhdHVyZSBvciBpc3N1ZSBJJiMzOTttIHdvcmtpbmcgd2l0aC4gVGltZSB0byBzZWUgd2hhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBYRlJNIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0Y29uZmlnIFhGUk1cbiAgIDY6XHRcdGJvb2xcbiAgIDc6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgODpcdFx0c2VsZWN0IEdST19DRUxMU1xuICAgOTpcdFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXG4gIDEwOlx0XG4gIDExOlx0Y29uZmlnIFhGUk1fT0ZGTE9BRFxuICAxMjpcdFx0Ym9vbFxuICAxMzpcdFxuICAxNDpcdGNvbmZpZyBYRlJNX0FMR09cbiAgMTU6XHRcdHRyaXN0YXRlXG4gIDE2Olx0XHRzZWxlY3QgWEZSTVxuICAxNzpcdFx0c2VsZWN0IENSWVBUT1xuICAxODpcdFx0c2VsZWN0IENSWVBUT19BRUFEXG4gIDE5Olx0XHRzZWxlY3QgQ1JZUFRPX0hBU0hcbiAgMjA6XHRcdHNlbGVjdCBDUllQVE9fU0tDSVBIRVJcbiAgMjE6XHRcbiAgMjI6XHRpZiBJTkVUXG4gIDIzOlx0Y29uZmlnIFhGUk1fVVNFUlxuICAyNDpcdFx0dHJpc3RhdGUgXCYjMzQ7VHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVwmIzM0O1xuICAyNTpcdFx0c2VsZWN0IFhGUk1fQUxHT1xuICAyNjpcdFx0aGVscFxuICAyNzpcdFx0ICBTdXBwb3J0IGZvciBUcmFuc2Zvcm1hdGlvbihYRlJNKSB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXG4gIDI4Olx0XHQgIGxpa2UgSVBzZWMgdXNlZCBieSBuYXRpdmUgTGludXggdG9vbHMuXG4gIDI5Olx0XG4gIDMwOlx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODM5CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyBgWEZSTV9PRkZMT0FEYCBTZWxlY3Rpb24qKgoKQWxyaWdodCwgc28gdGhlIGNvZGUgaGFzIGxhbmRlZCBvbiBgWEZSTV9PRkZMT0FEYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgKndobyogaXMgY2hvb3NpbmcgdGhpcz8gV2hhdCYjMzk7cyBkcml2aW5nIHRoaXMgc2VsZWN0aW9uPyYjMzQ7IEkmIzM5O20gaW1tZWRpYXRlbHkgdHJ5aW5nIHRvIHRyYWNlIGJhY2sgdGhlIGRlY2lzaW9uIHBhdGguIElzIGl0IGEgZGVmYXVsdCBjb25maWd1cmF0aW9uLCBhIHNwZWNpZmljIHVzZXIgc2V0dGluZywgb3Igc29tZXRoaW5nIGRldGVybWluZWQgZHluYW1pY2FsbHkgYmFzZWQgb24gdGhlIHN5c3RlbSYjMzk7cyBjYXBhYmlsaXRpZXM/IEtub3dpbmcgdGhlIHNvdXJjZSBpcyBjcnVjaWFsLgoKSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgdmFyaW91cyBrZXJuZWwgbW9kdWxlcywgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgbmV0d29yayBpbnRlcmZhY2Ugc2V0dGluZ3MgdGhhdCBjb3VsZCBpbmZsdWVuY2UgdGhpcyBjaG9pY2UuIElzIGl0IHRoZSBoYXJkd2FyZSBpdHNlbGYgc2lnbmFsaW5nIG9mZmxvYWQgY2FwYWJpbGl0aWVzPyBJcyB0aGVyZSBhIHBvbGljeSBzZXR0aW5nIGNvbmZpZ3VyZWQgaW4gdGhlIFhGUk0gc3Vic3lzdGVtIHRoYXQgaXMgZGlyZWN0aW5nIHRoZSB1c2Ugb2YgYW4gb2ZmbG9hZCBlbmdpbmU/IE9yIGhhcyBzb21lIGFwcGxpY2F0aW9uIHJlcXVlc3RlZCBpdCB0aHJvdWdoIHNvbWUgc3BlY2lmaWMgc29ja2V0IG9wdGlvbiBvciBpbnRlcmZhY2U/CgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gV2hhdCYjMzk7cyB0aGUgdGFyZ2V0IHNjZW5hcmlvPyBJcyB0aGlzIGZvciBhIHNwZWNpZmljIFZQTiB0dW5uZWwgc2V0dXAsIGEgYnVsayBkYXRhIHRyYW5zZmVyLCBvciBzb21lIG90aGVyIG5ldHdvcmstaW50ZW5zaXZlIGFwcGxpY2F0aW9uPyBUaGUgY29udGV4dCB3aWxsIHJldmVhbCB0aGUgcmVsZXZhbnQgZGVjaXNpb24gZmFjdG9ycy4gVGhlIHNwZWNpZmljIG5ldHdvcmsgdHJhZmZpYyBwYXR0ZXJucyB3b3VsZCBwcm92aWRlIGltcG9ydGFudCBjb250ZXh0LgoKTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIHRoZSBjb25kaXRpb25hbCBsb2dpYyBmb3IgdGhpcyBjaG9pY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSBpdCYjMzk7cyBiZWVuIHRyaWdnZXJlZC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgZmxhZ3MsIHBhcmFtZXRlcnMsIGFuZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCBhcmUgbGVhZGluZyB0byB0aGlzIHBhcnRpY3VsYXIgY29kZSBwYXRoLiBJIHdhbnQgdG8gaWRlbnRpZnkgYW55IHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgb3IgY29uc3RyYWludHMgdGhhdCBjb21lIGFsb25nIHdpdGggZW5hYmxpbmcgb2ZmbG9hZC4gRmluYWxseSBJIHdpbGwgZW5zdXJlIHRoaXMgY29kZSB3b24mIzM5O3QgY2F1c2UgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uIG9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gSXQgbmVlZHMgdG8gYmUgdGhlIHJpZ2h0IGNob2ljZSBmb3IgdGhlIHNpdHVhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IFhGUk1fT0ZGTE9BRCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTM2OT1jb25maWcgSU5FVF9FU1BfT0ZGTE9BRFxuLS1cbm5ldC9pcHY0L0tjb25maWctMzcxLVx0ZGVwZW5kcyBvbiBJTkVUX0VTUFxubmV0L2lwdjQvS2NvbmZpZzozNzI6XHRzZWxlY3QgWEZSTV9PRkZMT0FEXG5uZXQvaXB2NC9LY29uZmlnLTM3My1cdGRlZmF1bHQgblxuLS1cbm5ldC9pcHY2L0tjb25maWc9Nzc9Y29uZmlnIElORVQ2X0VTUF9PRkZMT0FEXG4tLVxubmV0L2lwdjYvS2NvbmZpZy03OS1cdGRlcGVuZHMgb24gSU5FVDZfRVNQXG5uZXQvaXB2Ni9LY29uZmlnOjgwOlx0c2VsZWN0IFhGUk1fT0ZGTE9BRFxubmV0L2lwdjYvS2NvbmZpZy04MS1cdGRlZmF1bHQgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTM4OQoJCQkJCQkJb3V0cHV0OiAyMDYKCQkJCQkJCXRob3VnaHRzOiA2ODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoIGZvciBOZXRkZXZzaW0gSVBzZWMgT2ZmbG9hZCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCB0aGUgbmV0ZGV2c2ltIGRyaXZlciwgc3BlY2lmaWNhbGx5IGl0cyBJUHNlYyBvZmZsb2FkIGZ1bmN0aW9uYWxpdHkuIEZpcnN0LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBkZXBlbmRlbmNpZXMuIGBYRlJNX09GRkxPQURgIGlzIHRoZSBjb3JlIGhlcmUsIGVuYWJsZWQgYnkgZWl0aGVyIGBJTkVUX0VTUF9PRkZMT0FEYCBvciBgSU5FVDZfRVNQX09GRkxPQURgLiAgQW5kIGBORVRERVZTSU1gIHJlcXVpcmVzIGBERUJVR19GU2AgYW5kIGBJTkVUYC4gYElORVRfRVNQX09GRkxPQURgIGFsc28gbmVlZHMgYElORVRfRVNQYC4gIGBYRlJNX09GRkxPQURgIGlzIGl0cyBvd24gY29uZmlnIG9wdGlvbiBhcyB3ZWxsLCBpbmRlcGVuZGVudCBvZiB0aG9zZS4gTGV0JiMzOTtzIG1ha2UgYSBub3RlIG9mIHRoZSBjb25maWdzIGludm9sdmVkOiBgTkVUREVWU0lNYCwgYFhGUk1fT0ZGTE9BRGAsIGBJTkVUX0VTUF9PRkZMT0FEYCwgYW5kIGBERUJVR19GU2AuCgpOZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzICphY3R1YWxseSogYmVpbmcgbW9kaWZpZWQuIExvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IHNlZW1zIHRoZSBwYXRjaCBpcyB0b3VjaGluZyB0aGVzZSBmdW5jdGlvbnM6IGBuc2ltX2RiZ19uZXRkZXZfb3BzX3JlYWRgLCBgbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzYCwgYG5zaW1faXBzZWNfYWRkX3NhYCwgYW5kIGBuc2ltX2lwc2VjX3R4YC4gTm93LCBsZXQmIzM5O3Mgc2VlIGlmIHRob3NlIGFyZSB0aGUgKm9ubHkqIGZ1bmN0aW9ucyBpbiBgZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmNgLiBBbHJpZ2h0LCBsb29rcyBsaWtlIHRoZXJlIGFyZSBvdGhlciBmdW5jdGlvbnMgdGhlcmUsIGJ1dCB0aGVzZSBhcmUgdGhlIG9uZXMgYmVpbmcgZGlyZWN0bHkgY2hhbmdlZC4gYG5zaW1faXBzZWNfYWRkX3NhYCBjYWxscyBgbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzYCBhbmQgc2V0cyB1cCBgbnNpbV9zYWAsIGdvdCBpdC4KCkFyZSBhbnkgb2YgdGhlc2UgZnVuY3Rpb25zIHdpZGVseSB1c2VkPyBObywgdGhleSBzZWVtIHNwZWNpZmljIHRvIHRoZSBuZXRkZXZzaW0gSVBzZWMgb2ZmbG9hZCBwYXRoLgoKQWxyaWdodCwgbm93IGxldCYjMzk7cyB0aGluayB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMuIFRoaXMgcGF0Y2ggZml4ZXMgZW5kaWFubmVzcyBpc3N1ZXMgaW4gdGhlIGhhbmRsaW5nIG9mIElQc2VjIGtleXMgYW5kIHNhbHQgd2l0aGluIG5ldGRldnNpbS4gSXQgdXBkYXRlcyB0aGUgU0EgZGF0YSB0eXBlcyB0byBgX19iZTMyYCwgY29ycmVjdC4gYG5zaW1faXBzZWNfcGFyc2VfcHJvdG9fa2V5cygpYCBpcyBmaXhlZC4gSXQgYWxzbyBjbGVhbnMgdXAgdGhlIHZhbHVlIGNvbnZlcnNpb25zIGluIGBuc2ltX2RiZ19uZXRkZXZfb3BzX3JlYWRgLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHRocm91Z2ggWEZSTSBuZXRsaW5rIGFuZCBkZWJ1Z2ZzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFNvIHllcywgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIEl0JiMzOTtzIGluIGEgcGF0aCB0aGF0JiMzOTtzIHVzZWQsIGJ1dCBub3QgbmVjZXNzYXJpbHkgYSAmIzM0O2NvcmUmIzM0OyBuZXR3b3JraW5nIGNvbXBvbmVudC4KCk9rYXksIGxldCYjMzk7cyBzdW1tYXJpemU6Ci0gICBgV29ydGhGdXp6aW5nYDogVHJ1ZS4KLSAgIGBSZWFzb25pbmdgOiBUaGUgcGF0Y2ggYWRkcmVzc2VzIGVuZGlhbm5lc3MgaXNzdWVzIGluIG5ldGRldnNpbSYjMzk7cyBJUHNlYyBrZXkgYW5kIHNhbHQgaGFuZGxpbmcuICBUaGUgcGF0Y2ggdXBkYXRlcyBTQSBkYXRhIHR5cGVzIHRvIGBfX2JlMzJgLCBmaXhpbmcgYG5zaW1faXBzZWNfcGFyc2VfcHJvdG9fa2V5cygpYCBhbmQgY2xlYW5pbmcgdXAgdmFsdWUgY29udmVyc2lvbnMgaW4gYG5zaW1fZGJnX25ldGRldl9vcHNfcmVhZCgpYC4gIFRoaXMgY29kZSBpcyB1c2VkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhY2Nlc3NpYmxlIHZpYSBYRlJNIG5ldGxpbmsgYW5kIGRlYnVnZnMuCi0gICBgRW5hYmxlQ29uZmlnc2A6IGBORVRERVZTSU1gLCBgWEZSTV9PRkZMT0FEYCwgYElORVRfRVNQX09GRkxPQURgLCBgREVCVUdfRlNgCi0gICBgRm9jdXNTeW1ib2xzYDogYG5zaW1fZGJnX25ldGRldl9vcHNfcmVhZGAsIGBuc2ltX2lwc2VjX3BhcnNlX3Byb3RvX2tleXNgLCBgbnNpbV9pcHNlY19hZGRfc2FgCgpGaW5hbGx5LCBsZXQmIzM5O3MgZG91YmxlIGNoZWNrIHRoYXQgbXkgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzIGFyZSBpbiB0aGUgY29ycmVjdCBmb3JtYXQuLi4geWVwLCBsaXN0IG9mIHN0cmluZ3MsIGxpc3Qgb2Ygc3RyaW5ncywgc3RyaW5nLCBib29sZWFuLiBHb29kIHRvIGdvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUREVWU0lNJiMzNDssCiAgICAmIzM0O1hGUk1fT0ZGTE9BRCYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUF9PRkZMT0FEJiMzNDssCiAgICAmIzM0O0RFQlVHX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bnNpbV9kYmdfbmV0ZGV2X29wc19yZWFkJiMzNDssCiAgICAmIzM0O25zaW1faXBzZWNfcGFyc2VfcHJvdG9fa2V5cyYjMzQ7LAogICAgJiMzNDtuc2ltX2lwc2VjX2FkZF9zYSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb3JyZWN0cyBlbmRpYW5uZXNzIGhhbmRsaW5nIG9mIElQc2VjIGtleXMgYW5kIHNhbHQgaW4gdGhlIG5ldGRldnNpbSBzaW11bGF0ZWQgZGV2aWNlIGRyaXZlciwgbW9kaWZ5aW5nIG5zaW1fc2EgZmllbGQgdHlwZXMgdG8gX19iZTMyLCBhZGp1c3Rpbmcga2V5L3NhbHQgcGFyc2luZyBpbiBuc2ltX2lwc2VjX3BhcnNlX3Byb3RvX2tleXMsIGFuZCBieXRlLXN3YXBwaW5nIHZhbHVlcyBmb3IgZGVidWdmcyBvdXRwdXQgaW4gbnNpbV9kYmdfbmV0ZGV2X29wc19yZWFkLiBOZXRkZXZzaW0gaXMgYSBzb2Z0d2FyZS1zaW11bGF0ZWQgZGV2aWNlIGRyaXZlciByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBuZXRsaW5rIChYRlJNIHN0YXRlIG9wZXJhdGlvbnMpIGFuZCBkZWJ1Z2ZzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRERVZTSU0mIzM0OywKICAgICYjMzQ7WEZSTV9PRkZMT0FEJiMzNDssCiAgICAmIzM0O0lORVRfRVNQX09GRkxPQUQmIzM0OywKICAgICYjMzQ7REVCVUdfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuc2ltX2RiZ19uZXRkZXZfb3BzX3JlYWQmIzM0OywKICAgICYjMzQ7bnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzJiMzNDssCiAgICAmIzM0O25zaW1faXBzZWNfYWRkX3NhJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvcnJlY3RzIGVuZGlhbm5lc3MgaGFuZGxpbmcgb2YgSVBzZWMga2V5cyBhbmQgc2FsdCBpbiB0aGUgbmV0ZGV2c2ltIHNpbXVsYXRlZCBkZXZpY2UgZHJpdmVyLCBtb2RpZnlpbmcgbnNpbV9zYSBmaWVsZCB0eXBlcyB0byBfX2JlMzIsIGFkanVzdGluZyBrZXkvc2FsdCBwYXJzaW5nIGluIG5zaW1faXBzZWNfcGFyc2VfcHJvdG9fa2V5cywgYW5kIGJ5dGUtc3dhcHBpbmcgdmFsdWVzIGZvciBkZWJ1Z2ZzIG91dHB1dCBpbiBuc2ltX2RiZ19uZXRkZXZfb3BzX3JlYWQuIE5ldGRldnNpbSBpcyBhIHNvZnR3YXJlLXNpbXVsYXRlZCBkZXZpY2UgZHJpdmVyIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIG5ldGxpbmsgKFhGUk0gc3RhdGUgb3BlcmF0aW9ucykgYW5kIGRlYnVnZnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjU4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6NTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBlbmRpYW5uZXNzIGhhbmRsaW5nIG9mIElQc2VjIGtleXMgYW5kIHNhbHQgdmFsdWVzIGluIG5ldGRldnNpbSBieSBjaGFuZ2luZyB0aGUgdHlwZSBhbm5vdGF0aW9ucyBmcm9tIHUzMiB0byBfX2JlMzIgYW5kIGNvbnZlcnRpbmcgdGhlbSB3aXRoIGJlMzJfdG9fY3B1KCkgd2hlbiBmb3JtYXR0aW5nIGRlYnVnZnMgb3V0cHV0LiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3QgcGFkZGluZyBjaGFuZ2VzLCBjb3BpZXMgb2YgcmF3IGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZSwgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGFyZSBpbnRyb2R1Y2VkLiBBbGwgYnVmZmVycyBhbmQgc3RydWN0dXJlcyBpbiBuZXRkZXZzaW0gSVBzZWMgY29kZSByZW1haW4gcHJvcGVybHkgaW5pdGlhbGl6ZWQgdmlhIG1lbXNldC9remFsbG9jLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDRjNTM1YTFlODhkMWRhYzFhNTRjYTU3NzcyMGRmYTI4M2JhM2UxMjgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDE3OjU3OjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYwppbmRleCAzNmExYmU0OTIzZDYxLi41NzIyODM3YmNkYTM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYwpAQCAtNTAsMTEgJiM0Mzs1MCwxMSBAQCBzdGF0aWMgc3NpemVfdCBuc2ltX2RiZ19uZXRkZXZfb3BzX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsCiAJCXAgJiM0Mzs9IHNjbnByaW50ZihwLCBidWZzaXplIC0gKHAgLSBidWYpLAogCQkJICAgICAgICYjMzQ7c2FbJWldICAgIHNwaT0weCUwOHggcHJvdG89MHgleCBzYWx0PTB4JTA4eCBjcnlwdD0lZFxuJiMzNDssCiAJCQkgICAgICAgaSwgYmUzMl90b19jcHUoc2FwLSZndDt4cy0mZ3Q7aWQuc3BpKSwKLQkJCSAgICAgICBzYXAtJmd0O3hzLSZndDtpZC5wcm90bywgc2FwLSZndDtzYWx0LCBzYXAtJmd0O2NyeXB0KTsKJiM0MzsJCQkgICAgICAgc2FwLSZndDt4cy0mZ3Q7aWQucHJvdG8sIGJlMzJfdG9fY3B1KHNhcC0mZ3Q7c2FsdCksIHNhcC0mZ3Q7Y3J5cHQpOwogCQlwICYjNDM7PSBzY25wcmludGYocCwgYnVmc2l6ZSAtIChwIC0gYnVmKSwKIAkJCSAgICAgICAmIzM0O3NhWyVpXSAgICBrZXk9MHglMDh4ICUwOHggJTA4eCAlMDh4XG4mIzM0OywKLQkJCSAgICAgICBpLCBzYXAtJmd0O2tleVswXSwgc2FwLSZndDtrZXlbMV0sCi0JCQkgICAgICAgc2FwLSZndDtrZXlbMl0sIHNhcC0mZ3Q7a2V5WzNdKTsKJiM0MzsJCQkgICAgICAgaSwgYmUzMl90b19jcHUoc2FwLSZndDtrZXlbMF0pLCBiZTMyX3RvX2NwdShzYXAtJmd0O2tleVsxXSksCiYjNDM7CQkJICAgICAgIGJlMzJfdG9fY3B1KHNhcC0mZ3Q7a2V5WzJdKSwgYmUzMl90b19jcHUoc2FwLSZndDtrZXlbM10pKTsKIAl9CiAKIAlsZW4gPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcihidWZmZXIsIGNvdW50LCBwcG9zLCBidWYsIHAgLSBidWYpOwpAQCAtODcsNyAmIzQzOzg3LDcgQEAgc3RhdGljIGludCBuc2ltX2lwc2VjX2ZpbmRfZW1wdHlfaWR4KHN0cnVjdCBuc2ltX2lwc2VjICppcHNlYykKIAogc3RhdGljIGludCBuc2ltX2lwc2VjX3BhcnNlX3Byb3RvX2tleXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgICAgICAgc3RydWN0IHhmcm1fc3RhdGUgKnhzLAotCQkJCSAgICAgICB1MzIgKm15a2V5LCB1MzIgKm15c2FsdCkKJiM0MzsJCQkJICAgICAgIF9fYmUzMiAqbXlrZXksIF9fYmUzMiAqbXlzYWx0KQogewogCWNvbnN0IGNoYXIgYWVzX2djbV9uYW1lW10gPSAmIzM0O3JmYzQxMDYoZ2NtKGFlcykpJiMzNDs7CiAJdW5zaWduZWQgY2hhciAqa2V5X2RhdGE7CkBAIC0xMTcsNyAmIzQzOzExNyw3IEBAIHN0YXRpYyBpbnQgbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAKIAkvKiAxNjAgYWNjb3VudHMgZm9yIDE2IGJ5dGUga2V5IGFuZCA0IGJ5dGUgc2FsdCAqLwogCWlmIChrZXlfbGVuICZndDsgTlNJTV9JUFNFQ19BVVRIX0JJVFMpIHsKLQkJKm15c2FsdCA9ICgodTMyICopa2V5X2RhdGEpWzRdOwomIzQzOwkJKm15c2FsdCA9ICgoX19iZTMyICopa2V5X2RhdGEpWzRdOwogCX0gZWxzZSBpZiAoa2V5X2xlbiA9PSBOU0lNX0lQU0VDX0FVVEhfQklUUykgewogCQkqbXlzYWx0ID0gMDsKIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oCmluZGV4IDU1YWVjNDEyMzdiOWIuLmE4MmE2ODUzODRlNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgKQEAgLTQyLDggJiM0Mzs0Miw4IEBACiBzdHJ1Y3QgbnNpbV9zYSB7CiAJc3RydWN0IHhmcm1fc3RhdGUgKnhzOwogCV9fYmUzMiBpcGFkZHJbNF07Ci0JdTMyIGtleVs0XTsKLQl1MzIgc2FsdDsKJiM0MzsJX19iZTMyIGtleVs0XTsKJiM0MzsJX19iZTMyIHNhbHQ7CiAJYm9vbCB1c2VkOwogCWJvb2wgY3J5cHQ7CiAJYm9vbCByeDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnNoCmluZGV4IGFjZTNhOTkwMjNlZDAuLjQ4NDNkNDc0NTM4ZjQgMTAwNzU1Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsuc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5zaApAQCAtOTMyLDExICYjNDM7OTMyLDExIEBAIGtjaV90ZXN0X2lwc2VjX29mZmxvYWQoKQogCXJ1bl9jbWQgZGlmZiAkc3lzZnNmIC0gJmx0OyZsdDsgRU9GCiBTQSBjb3VudD0yIHR4PTMKIHNhWzBdIHR4IGlwYWRkcj0kZHN0aXAKLXNhWzBdICAgIHNwaT0weDAwMDAwMDA5IHByb3RvPTB4MzIgc2FsdD0weDYxNjI2MzY0IGNyeXB0PTEKLXNhWzBdICAgIGtleT0weDM0MzMzMjMxIDM4MzczNjM1IDMyMzEzMDM5IDM2MzUzNDMzCiYjNDM7c2FbMF0gICAgc3BpPTB4MDAwMDAwMDkgcHJvdG89MHgzMiBzYWx0PTB4NjQ2MzYyNjEgY3J5cHQ9MQomIzQzO3NhWzBdICAgIGtleT0weDMxMzIzMzM0IDM1MzYzNzM4IDM5MzAzMTMyIDMzMzQzNTM2CiBzYVsxXSByeCBpcGFkZHI9JHNyY2lwCi1zYVsxXSAgICBzcGk9MHgwMDAwMDAwOSBwcm90bz0weDMyIHNhbHQ9MHg2MTYyNjM2NCBjcnlwdD0xCi1zYVsxXSAgICBrZXk9MHgzNDMzMzIzMSAzODM3MzYzNSAzMjMxMzAzOSAzNjM1MzQzMwomIzQzO3NhWzFdICAgIHNwaT0weDAwMDAwMDA5IHByb3RvPTB4MzIgc2FsdD0weDY0NjM2MjYxIGNyeXB0PTEKJiM0MztzYVsxXSAgICBrZXk9MHgzMTMyMzMzNCAzNTM2MzczOCAzOTMwMzEzMiAzMzM0MzUzNgogRU9GCiAJaWYgWyAkPyAtbmUgMCBdIDsgdGhlbgogCQllbmRfdGVzdCAmIzM0O0ZBSUw6IGlwc2VjX29mZmxvYWQgaW5jb3JyZWN0IGRyaXZlciBkYXRhJiMzNDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzODIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBzZWUgaWYgd2UgbmVlZCB0byBicmluZyBpbiBLTVNBTi4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggaXMgYWN0dWFsbHkgY2hhbmdpbmcuIEkgc2VlIGl0JiMzOTtzIHRvdWNoaW5nIGBkcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuY2AgYW5kIGBkcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmhgLCBhbG9uZyB3aXRoIGEgc2VsZnRlc3Qgc2NyaXB0LiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4KCkxvb2tpbmcgYXQgYGRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jYCwgSSBub3RpY2UgbW9kaWZpY2F0aW9ucyBpbiB0aGUgYG5zaW1fZGJnX25ldGRldl9vcHNfcmVhZGAgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgdGhleSBhcmUgY2hhbmdpbmcgdGhlIHdheSBgc2FwLSZndDtzYWx0YCBhbmQgYHNhcC0mZ3Q7a2V5Wy4uLl1gIGFyZSBwcmludGVkLCBub3cgdXNpbmcgYGJlMzJfdG9fY3B1KC4uLilgLiBTZWVtcyBsaWtlIGFuIGVuZGlhbm5lc3MgY29udmVyc2lvbiB1cGRhdGUsIHdoaWNoICpjb3VsZCogaW5kaWNhdGUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBuZXR3b3JrLXJlbGF0ZWQgZGF0YSwgb3IgYXQgbGVhc3QgZGF0YSB0aGF0JiMzOTtzIGV4cGVjdGVkIHRvIGJlIGVuZGlhbi1zZW5zaXRpdmUuIE1ha2VzIHNlbnNlIGZvciBuZXR3b3JrIHNpbXVsYXRpb24uCgpUaGVuLCB0aGVyZSYjMzk7cyB0aGUgYG5zaW1faXBzZWNfcGFyc2VfcHJvdG9fa2V5c2AgZnVuY3Rpb24uIEkgc2VlIHRoZSBwcm90b3R5cGUgZm9yIGBteWtleWAgYW5kIGBteXNhbHRgIGlzIGJlaW5nIGNoYW5nZWQgdG8gYF9fYmUzMiAqYCwgYW5kIHRoZSBjYXN0IGAoKHUzMiAqKWtleV9kYXRhKVs0XWAgaXMgbm93IGAoKF9fYmUzMiAqKWtleV9kYXRhKVs0XWAuIEFnYWluLCB0aGlzIHJlaW5mb3JjZXMgdGhlIGVuZGlhbm5lc3MgdXBkYXRlLCBidXQgYWxzbyBzdWdnZXN0cyB0aGUgdW5kZXJseWluZyBkYXRhLCB0aGUgYGtleV9kYXRhYCwgbWlnaHQgYmUgY2hhbmdpbmcgdHlwZXMuIEkgaGF2ZSB0byBzZWUgaG93IGl0IGlzIHVzZWQuCgpJbiBgZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oYCwgSSBzZWUgdGhlIGBzdHJ1Y3QgbnNpbV9zYWAgZmllbGRzIGBrZXlgIGFuZCBgc2FsdGAgYXJlIGJlaW5nIHVwZGF0ZWQgZnJvbSBgdTMyYCB0byBgX19iZTMyYC4gU28sIHRoaXMgaXMgd2hlcmUgdGhlICphY3R1YWwqIHR5cGUgY2hhbmdlIGlzIGhhcHBlbmluZywgYW5kIGl0JiMzOTtzIGJlaW5nIHByb3BhZ2F0ZWQgdGhyb3VnaG91dC4gTm93IEkgZ2V0IGl0OiBlbmRpYW5uZXNzIGlzIGJlaW5nIGJha2VkIGludG8gdGhlIGRhdGEgdHlwZXMgdGhlbXNlbHZlcy4gVGhpcyBzaG91bGQgcmVkdWNlIHRoZSBuZWVkIGZvciBjYXN0aW5nLCBhbmQgZW5zdXJlIHRoYXQgdGhlIHJpZ2h0IGRhdGEgaXMgaW4gdGhlIHJpZ2h0IGJ5dGUgb3JkZXIgYXQgZXZlcnkgc3RhZ2Ugb2YgcHJvY2Vzc2luZy4KCkZpbmFsbHksIHRoZSBzZWxmdGVzdCBzY3JpcHQgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsuc2hgIGhhcyBhbiB1cGRhdGUgZm9yIGVuZGlhbm5lc3MgaW4gdGhlIG91dHB1dCBmb3IgZGVidWdmcy9zeXNmcyBkdW1wcy4gQ2xlYXJseSwgdGhleSBhcmUgdXBkYXRpbmcgdGhlIGVuZGlhbm5lc3Mgb2YgdGhlIG91dHB1dC4gVGhhdCYjMzk7cyBnb29kIHRlc3RpbmcuCgpOb3csIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBkcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuY2AsIGZvY3VzaW5nIHNwZWNpZmljYWxseSBhcm91bmQgYG5zaW1faXBzZWNfcGFyc2VfcHJvdG9fa2V5c2AgYW5kIGl0cyBjYWxsZXJzLiBHb3R0YSBtYWtlIHN1cmUgdGhpcyBjaGFuZ2UgaXMgc2FmZS4gSSBuZWVkIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cgdG8gZW5zdXJlIG5vdGhpbmcgaXMgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBhZnRlciB0aGVzZSBjaGFuZ2VzLiBFbmRpYW5uZXNzIGlzIGEgY29tbW9uIHNvdXJjZSBvZiBidWdzIGlmIG5vdCBoYW5kbGVkIHByb3Blcmx5LCBzbyBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBkZXZlbG9wZXJzIGhhdmUgaGFuZGxlZCBhbGwgdGhlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQvKiBDb3B5cmlnaHQoYykgMjAxOCBPcmFjbGUgYW5kL29yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAqL1xuICAgMzpcdFxuICAgNDpcdCNpbmNsdWRlIFx1MDAzY2NyeXB0by9hZWFkLmhcdTAwM2VcbiAgIDU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWJ1Z2ZzLmhcdTAwM2VcbiAgIDY6XHQjaW5jbHVkZSBcdTAwM2NuZXQveGZybS5oXHUwMDNlXG4gICA3Olx0XG4gICA4Olx0I2luY2x1ZGUgXCYjMzQ7bmV0ZGV2c2ltLmhcJiMzNDtcbiAgIDk6XHRcbiAgMTA6XHQjZGVmaW5lIE5TSU1fSVBTRUNfQVVUSF9CSVRTXHQxMjhcbiAgMTE6XHRcbiAgMTI6XHRzdGF0aWMgc3NpemVfdCBuc2ltX2RiZ19uZXRkZXZfb3BzX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsXG4gIDEzOlx0XHRcdFx0XHRcdGNoYXIgX191c2VyICpidWZmZXIsXG4gIDE0Olx0XHRcdFx0XHRcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxuICAxNTpcdHtcbiAgMTY6XHRcdHN0cnVjdCBuZXRkZXZzaW0gKm5zID0gZmlscC1cdTAwM2Vwcml2YXRlX2RhdGE7XG4gIDE3Olx0XHRzdHJ1Y3QgbnNpbV9pcHNlYyAqaXBzZWMgPSBcdTAwMjZucy1cdTAwM2VpcHNlYztcbiAgMTg6XHRcdHNpemVfdCBidWZzaXplO1xuICAxOTpcdFx0Y2hhciAqYnVmLCAqcDtcbiAgMjA6XHRcdGludCBsZW47XG4gIDIxOlx0XHRpbnQgaTtcbiAgMjI6XHRcbiAgMjM6XHRcdC8qIHRoZSBidWZmZXIgbmVlZGVkIGlzXG4gIDI0Olx0XHQgKiAobnVtIFNBcyAqIDMgbGluZXMgZWFjaCAqIH42MCBieXRlcyBwZXIgbGluZSkgJiM0Mzsgb25lIG1vcmUgbGluZVxuICAyNTpcdFx0ICovXG4gIDI2Olx0XHRidWZzaXplID0gKGlwc2VjLVx1MDAzZWNvdW50ICogNCAqIDYwKSAmIzQzOyA2MDtcbiAgMjc6XHRcdGJ1ZiA9IGt6YWxsb2MoYnVmc2l6ZSwgR0ZQX0tFUk5FTCk7XG4gIDI4Olx0XHRpZiAoIWJ1ZilcbiAgMjk6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gIDMwOlx0XG4gIDMxOlx0XHRwID0gYnVmO1xuICAzMjpcdFx0cCAmIzQzOz0gc2NucHJpbnRmKHAsIGJ1ZnNpemUgLSAocCAtIGJ1ZiksXG4gIDMzOlx0XHRcdCAgICAgICBcJiMzNDtTQSBjb3VudD0ldSB0eD0ldVxcblwmIzM0OyxcbiAgMzQ6XHRcdFx0ICAgICAgIGlwc2VjLVx1MDAzZWNvdW50LCBpcHNlYy1cdTAwM2V0eCk7XG4gIDM1Olx0XG4gIDM2Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOU0lNX0lQU0VDX01BWF9TQV9DT1VOVDsgaSYjNDM7JiM0MzspIHtcbiAgMzc6XHRcdFx0c3RydWN0IG5zaW1fc2EgKnNhcCA9IFx1MDAyNmlwc2VjLVx1MDAzZXNhW2ldO1xuICAzODpcdFxuICAzOTpcdFx0XHRpZiAoIXNhcC1cdTAwM2V1c2VkKVxuICA0MDpcdFx0XHRcdGNvbnRpbnVlO1xuICA0MTpcdFxuICA0MjpcdFx0XHRpZiAoc2FwLVx1MDAzZXhzLVx1MDAzZXByb3BzLmZhbWlseSA9PSBBRl9JTkVUNilcbiAgNDM6XHRcdFx0XHRwICYjNDM7PSBzY25wcmludGYocCwgYnVmc2l6ZSAtIChwIC0gYnVmKSxcbiAgNDQ6XHRcdFx0XHRcdCAgICAgICBcJiMzNDtzYVslaV0gJWN4IGlwYWRkcj0lcEk2Y1xcblwmIzM0OyxcbiAgNDU6XHRcdFx0XHRcdCAgICAgICBpLCAoc2FwLVx1MDAzZXJ4ID8gJiMzOTtyJiMzOTsgOiAmIzM5O3QmIzM5OyksIFx1MDAyNnNhcC1cdTAwM2VpcGFkZHIpO1xuICA0NjpcdFx0XHRlbHNlXG4gIDQ3Olx0XHRcdFx0cCAmIzQzOz0gc2NucHJpbnRmKHAsIGJ1ZnNpemUgLSAocCAtIGJ1ZiksXG4gIDQ4Olx0XHRcdFx0XHQgICAgICAgXCYjMzQ7c2FbJWldICVjeCBpcGFkZHI9JXBJNFxcblwmIzM0OyxcbiAgNDk6XHRcdFx0XHRcdCAgICAgICBpLCAoc2FwLVx1MDAzZXJ4ID8gJiMzOTtyJiMzOTsgOiAmIzM5O3QmIzM5OyksIFx1MDAyNnNhcC1cdTAwM2VpcGFkZHJbM10pO1xuICA1MDpcdFx0XHRwICYjNDM7PSBzY25wcmludGYocCwgYnVmc2l6ZSAtIChwIC0gYnVmKSxcbiAgNTE6XHRcdFx0XHQgICAgICAgXCYjMzQ7c2FbJWldICAgIHNwaT0weCUwOHggcHJvdG89MHgleCBzYWx0PTB4JTA4eCBjcnlwdD0lZFxcblwmIzM0OyxcbiAgNTI6XHRcdFx0XHQgICAgICAgaSwgYmUzMl90b19jcHUoc2FwLVx1MDAzZXhzLVx1MDAzZWlkLnNwaSksXG4gIDUzOlx0XHRcdFx0ICAgICAgIHNhcC1cdTAwM2V4cy1cdTAwM2VpZC5wcm90bywgYmUzMl90b19jcHUoc2FwLVx1MDAzZXNhbHQpLCBzYXAtXHUwMDNlY3J5cHQpO1xuICA1NDpcdFx0XHRwICYjNDM7PSBzY25wcmludGYocCwgYnVmc2l6ZSAtIChwIC0gYnVmKSxcbiAgNTU6XHRcdFx0XHQgICAgICAgXCYjMzQ7c2FbJWldICAgIGtleT0weCUwOHggJTA4eCAlMDh4ICUwOHhcXG5cJiMzNDssXG4gIDU2Olx0XHRcdFx0ICAgICAgIGksIGJlMzJfdG9fY3B1KHNhcC1cdTAwM2VrZXlbMF0pLCBiZTMyX3RvX2NwdShzYXAtXHUwMDNla2V5WzFdKSxcbiAgNTc6XHRcdFx0XHQgICAgICAgYmUzMl90b19jcHUoc2FwLVx1MDAzZWtleVsyXSksIGJlMzJfdG9fY3B1KHNhcC1cdTAwM2VrZXlbM10pKTtcbiAgNTg6XHRcdH1cbiAgNTk6XHRcbiAgNjA6XHRcdGxlbiA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZmZlciwgY291bnQsIHBwb3MsIGJ1ZiwgcCAtIGJ1Zik7XG4gIDYxOlx0XG4gIDYyOlx0XHRrZnJlZShidWYpO1xuICA2MzpcdFx0cmV0dXJuIGxlbjtcbiAgNjQ6XHR9XG4gIDY1Olx0XG4gIDY2Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaXBzZWNfZGJnX2ZvcHMgPSB7XG4gIDY3Olx0XHQub3duZXIgPSBUSElTX01PRFVMRSxcbiAgNjg6XHRcdC5vcGVuID0gc2ltcGxlX29wZW4sXG4gIDY5Olx0XHQucmVhZCA9IG5zaW1fZGJnX25ldGRldl9vcHNfcmVhZCxcbiAgNzA6XHR9O1xuICA3MTpcdFxuICA3MjpcdHN0YXRpYyBpbnQgbnNpbV9pcHNlY19maW5kX2VtcHR5X2lkeChzdHJ1Y3QgbnNpbV9pcHNlYyAqaXBzZWMpXG4gIDczOlx0e1xuICA3NDpcdFx0dTMyIGk7XG4gIDc1Olx0XG4gIDc2Olx0XHRpZiAoaXBzZWMtXHUwMDNlY291bnQgPT0gTlNJTV9JUFNFQ19NQVhfU0FfQ09VTlQpXG4gIDc3Olx0XHRcdHJldHVybiAtRU5PU1BDO1xuICA3ODpcdFxuICA3OTpcdFx0Lyogc2VhcmNoIHNhIHRhYmxlICovXG4gIDgwOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOU0lNX0lQU0VDX01BWF9TQV9DT1VOVDsgaSYjNDM7JiM0MzspIHtcbiAgODE6XHRcdFx0aWYgKCFpcHNlYy1cdTAwM2VzYVtpXS51c2VkKVxuICA4MjpcdFx0XHRcdHJldHVybiBpO1xuICA4MzpcdFx0fVxuICA4NDpcdFxuICA4NTpcdFx0cmV0dXJuIC1FTk9TUEM7XG4gIDg2Olx0fVxuICA4NzpcdFxuICA4ODpcdHN0YXRpYyBpbnQgbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gIDg5Olx0XHRcdFx0XHQgICAgICAgc3RydWN0IHhmcm1fc3RhdGUgKnhzLFxuICA5MDpcdFx0XHRcdFx0ICAgICAgIF9fYmUzMiAqbXlrZXksIF9fYmUzMiAqbXlzYWx0KVxuICA5MTpcdHtcbiAgOTI6XHRcdGNvbnN0IGNoYXIgYWVzX2djbV9uYW1lW10gPSBcJiMzNDtyZmM0MTA2KGdjbShhZXMpKVwmIzM0OztcbiAgOTM6XHRcdHVuc2lnbmVkIGNoYXIgKmtleV9kYXRhO1xuICA5NDpcdFx0Y2hhciAqYWxnX25hbWUgPSBOVUxMO1xuICA5NTpcdFx0aW50IGtleV9sZW47XG4gIDk2Olx0XG4gIDk3Olx0XHRpZiAoIXhzLVx1MDAzZWFlYWQpIHtcbiAgOTg6XHRcdFx0bmV0ZGV2X2VycihkZXYsIFwmIzM0O1Vuc3VwcG9ydGVkIElQc2VjIGFsZ29yaXRobVxcblwmIzM0Oyk7XG4gIDk5Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDEwMDpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTIyCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUgd2UgZ28uIEhlcmUgYXJlIG15IHRob3VnaHRzIG9uIGV4YW1pbmluZyB0aGF0IGZ1bmN0aW9uIGFuZCBpdHMgdXNlIHdpdGhpbiB0aGUgbmV0ZGV2c2ltIElQc2VjIGRyaXZlci4KCioqRGl2aW5nIERlZXAgaW50byBgbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzYCoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGUgSVBzZWMgZnVuY3Rpb25hbGl0eSBpcyBpbXBsZW1lbnRlZCB3aXRoaW4gdGhlIG5ldGRldnNpbSBkcml2ZXIuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byBgbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzYC4gVG8gcmVhbGx5IHVuZGVyc3RhbmQgaXRzIHJvbGUgYW5kIHBvdGVudGlhbCBpbXBhY3QsIEkmIzM5O2xsIHRyYWNlIHRocm91Z2ggdGhlIHJlc3Qgb2YgdGhhdCBmdW5jdGlvbiwgc2VlaW5nIHByZWNpc2VseSBob3cgaXQgaGFuZGxlcyBrZXkgcGFyc2luZyBhbmQgd2hhdCBjb25maWd1cmF0aW9ucyBpdCYjMzk7cyByZXNwb25zaWJsZSBmb3IuCgpPZiBjb3Vyc2UsIHRoZSBmdW5jdGlvbiBpdHNlbGYgaXMgb25seSBwYXJ0IG9mIHRoZSBzdG9yeS4gSSYjMzk7bGwgbmVlZCB0byBmb2xsb3cgdGhlIGNhbGxpbmcgY2hhaW4uIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGlzIGlzIGNhbGxlZCBmcm9tLCBieSB3aGF0IGFuZCB3aHkuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHRzIHdpbGwgcmVhbGx5IGhlbHAgdW5kZXJzdGFuZCBpdHMgcHVycG9zZSBhbmQgYmVoYXZpb3IgaW4gdGhlIGxhcmdlciBzY29wZSBvZiB0aGUgSVBzZWMgZHJpdmVyIGluIGBkcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuY2AuIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQsIHRvIHVuZGVyc3RhbmQgaG93IGtleSBtYXRlcmlhbCBpcyBwcm9jZXNzZWQgYW5kIGhvdyBpdCBhZmZlY3RzIHRoZSBvdmVyYWxsIElQc2VjIHNpbXVsYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDE6XHRcbiAxMDI6XHRcdGlmICh4cy1cdTAwM2VhZWFkLVx1MDAzZWFsZ19pY3ZfbGVuICE9IE5TSU1fSVBTRUNfQVVUSF9CSVRTKSB7XG4gMTAzOlx0XHRcdG5ldGRldl9lcnIoZGV2LCBcJiMzNDtJUHNlYyBvZmZsb2FkIHJlcXVpcmVzICVkIGJpdCBhdXRoZW50aWNhdGlvblxcblwmIzM0OyxcbiAxMDQ6XHRcdFx0XHQgICBOU0lNX0lQU0VDX0FVVEhfQklUUyk7XG4gMTA1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDEwNjpcdFx0fVxuIDEwNzpcdFxuIDEwODpcdFx0a2V5X2RhdGEgPSBcdTAwMjZ4cy1cdTAwM2VhZWFkLVx1MDAzZWFsZ19rZXlbMF07XG4gMTA5Olx0XHRrZXlfbGVuID0geHMtXHUwMDNlYWVhZC1cdTAwM2VhbGdfa2V5X2xlbjtcbiAxMTA6XHRcdGFsZ19uYW1lID0geHMtXHUwMDNlYWVhZC1cdTAwM2VhbGdfbmFtZTtcbiAxMTE6XHRcbiAxMTI6XHRcdGlmIChzdHJjbXAoYWxnX25hbWUsIGFlc19nY21fbmFtZSkpIHtcbiAxMTM6XHRcdFx0bmV0ZGV2X2VycihkZXYsIFwmIzM0O1Vuc3VwcG9ydGVkIElQc2VjIGFsZ29yaXRobSAtIHBsZWFzZSB1c2UgJXNcXG5cJiMzNDssXG4gMTE0Olx0XHRcdFx0ICAgYWVzX2djbV9uYW1lKTtcbiAxMTU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMTE2Olx0XHR9XG4gMTE3Olx0XG4gMTE4Olx0XHQvKiAxNjAgYWNjb3VudHMgZm9yIDE2IGJ5dGUga2V5IGFuZCA0IGJ5dGUgc2FsdCAqL1xuIDExOTpcdFx0aWYgKGtleV9sZW4gXHUwMDNlIE5TSU1fSVBTRUNfQVVUSF9CSVRTKSB7XG4gMTIwOlx0XHRcdCpteXNhbHQgPSAoKF9fYmUzMiAqKWtleV9kYXRhKVs0XTtcbiAxMjE6XHRcdH0gZWxzZSBpZiAoa2V5X2xlbiA9PSBOU0lNX0lQU0VDX0FVVEhfQklUUykge1xuIDEyMjpcdFx0XHQqbXlzYWx0ID0gMDtcbiAxMjM6XHRcdH0gZWxzZSB7XG4gMTI0Olx0XHRcdG5ldGRldl9lcnIoZGV2LCBcJiMzNDtJUHNlYyBodyBvZmZsb2FkIG9ubHkgc3VwcG9ydHMgMTI4IGJpdCBrZXlzIHdpdGggb3B0aW9uYWwgMzIgYml0IHNhbHRcXG5cJiMzNDspO1xuIDEyNTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAxMjY6XHRcdH1cbiAxMjc6XHRcdG1lbWNweShteWtleSwga2V5X2RhdGEsIDE2KTtcbiAxMjg6XHRcbiAxMjk6XHRcdHJldHVybiAwO1xuIDEzMDpcdH1cbiAxMzE6XHRcbiAxMzI6XHRzdGF0aWMgaW50IG5zaW1faXBzZWNfYWRkX3NhKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gMTMzOlx0XHRcdFx0ICAgICBzdHJ1Y3QgeGZybV9zdGF0ZSAqeHMsXG4gMTM0Olx0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gMTM1Olx0e1xuIDEzNjpcdFx0c3RydWN0IG5zaW1faXBzZWMgKmlwc2VjO1xuIDEzNzpcdFx0c3RydWN0IG5ldGRldnNpbSAqbnM7XG4gMTM4Olx0XHRzdHJ1Y3QgbnNpbV9zYSBzYTtcbiAxMzk6XHRcdHUxNiBzYV9pZHg7XG4gMTQwOlx0XHRpbnQgcmV0O1xuIDE0MTpcdFxuIDE0MjpcdFx0bnMgPSBuZXRkZXZfcHJpdihkZXYpO1xuIDE0MzpcdFx0aXBzZWMgPSBcdTAwMjZucy1cdTAwM2VpcHNlYztcbiAxNDQ6XHRcbiAxNDU6XHRcdGlmICh4cy1cdTAwM2VpZC5wcm90byAhPSBJUFBST1RPX0VTUCBcdTAwMjZcdTAwMjYgeHMtXHUwMDNlaWQucHJvdG8gIT0gSVBQUk9UT19BSCkge1xuIDE0NjpcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtVbnN1cHBvcnRlZCBwcm90b2NvbCBmb3IgaXBzZWMgb2ZmbG9hZFwmIzM0Oyk7XG4gMTQ3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDE0ODpcdFx0fVxuIDE0OTpcdFxuIDE1MDpcdFx0aWYgKHhzLVx1MDAzZWNhbGcpIHtcbiAxNTE6XHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7Q29tcHJlc3Npb24gb2ZmbG9hZCBub3Qgc3VwcG9ydGVkXCYjMzQ7KTtcbiAxNTI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMTUzOlx0XHR9XG4gMTU0Olx0XG4gMTU1Olx0XHRpZiAoeHMtXHUwMDNleHNvLnR5cGUgIT0gWEZSTV9ERVZfT0ZGTE9BRF9DUllQVE8pIHtcbiAxNTY6XHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7VW5zdXBwb3J0ZWQgaXBzZWMgb2ZmbG9hZCB0eXBlXCYjMzQ7KTtcbiAxNTc6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMTU4Olx0XHR9XG4gMTU5Olx0XG4gMTYwOlx0XHQvKiBmaW5kIHRoZSBmaXJzdCB1bnVzZWQgaW5kZXggKi9cbiAxNjE6XHRcdHJldCA9IG5zaW1faXBzZWNfZmluZF9lbXB0eV9pZHgoaXBzZWMpO1xuIDE2MjpcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuIDE2MzpcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtObyBzcGFjZSBmb3IgU0EgaW4gUnggdGFibGUhXCYjMzQ7KTtcbiAxNjQ6XHRcdFx0cmV0dXJuIHJldDtcbiAxNjU6XHRcdH1cbiAxNjY6XHRcdHNhX2lkeCA9ICh1MTYpcmV0O1xuIDE2NzpcdFxuIDE2ODpcdFx0bWVtc2V0KFx1MDAyNnNhLCAwLCBzaXplb2Yoc2EpKTtcbiAxNjk6XHRcdHNhLnVzZWQgPSB0cnVlO1xuIDE3MDpcdFx0c2EueHMgPSB4cztcbiAxNzE6XHRcbiAxNzI6XHRcdGlmIChzYS54cy1cdTAwM2VpZC5wcm90byBcdTAwMjYgSVBQUk9UT19FU1ApXG4gMTczOlx0XHRcdHNhLmNyeXB0ID0geHMtXHUwMDNlZWFsZyB8fCB4cy1cdTAwM2VhZWFkO1xuIDE3NDpcdFxuIDE3NTpcdFx0LyogZ2V0IHRoZSBrZXkgYW5kIHNhbHQgKi9cbiAxNzY6XHRcdHJldCA9IG5zaW1faXBzZWNfcGFyc2VfcHJvdG9fa2V5cyhkZXYsIHhzLCBzYS5rZXksIFx1MDAyNnNhLnNhbHQpO1xuIDE3NzpcdFx0aWYgKHJldCkge1xuIDE3ODpcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtGYWlsZWQgdG8gZ2V0IGtleSBkYXRhIGZvciBTQSB0YWJsZVwmIzM0Oyk7XG4gMTc5Olx0XHRcdHJldHVybiByZXQ7XG4gMTgwOlx0XHR9XG4gMTgxOlx0XG4gMTgyOlx0XHRpZiAoeHMtXHUwMDNleHNvLmRpciA9PSBYRlJNX0RFVl9PRkZMT0FEX0lOKVxuIDE4MzpcdFx0XHRzYS5yeCA9IHRydWU7XG4gMTg0Olx0XG4gMTg1Olx0XHRpZiAoeHMtXHUwMDNlcHJvcHMuZmFtaWx5ID09IEFGX0lORVQ2KVxuIDE4NjpcdFx0XHRtZW1jcHkoc2EuaXBhZGRyLCBcdTAwMjZ4cy1cdTAwM2VpZC5kYWRkci5hNiwgMTYpO1xuIDE4NzpcdFx0ZWxzZVxuIDE4ODpcdFx0XHRtZW1jcHkoXHUwMDI2c2EuaXBhZGRyWzNdLCBcdTAwMjZ4cy1cdTAwM2VpZC5kYWRkci5hNCwgNCk7XG4gMTg5Olx0XG4gMTkwOlx0XHQvKiB0aGUgcHJlcGFyYXRpb25zIHdvcmtlZCwgc28gc2F2ZSB0aGUgaW5mbyAqL1xuIDE5MTpcdFx0bWVtY3B5KFx1MDAyNmlwc2VjLVx1MDAzZXNhW3NhX2lkeF0sIFx1MDAyNnNhLCBzaXplb2Yoc2EpKTtcbiAxOTI6XHRcbiAxOTM6XHRcdC8qIHRoZSBYRlJNIHN0YWNrIGRvZXNuJiMzOTt0IGxpa2Ugb2ZmbG9hZF9oYW5kbGUgPT0gMCxcbiAxOTQ6XHRcdCAqIHNvIGFkZCBhIGJpdGZsYWcgaW4gY2FzZSBvdXIgYXJyYXkgaW5kZXggaXMgMFxuIDE5NTpcdFx0ICovXG4gMTk2Olx0XHR4cy1cdTAwM2V4c28ub2ZmbG9hZF9oYW5kbGUgPSBzYV9pZHggfCBOU0lNX0lQU0VDX1ZBTElEO1xuIDE5NzpcdFx0aXBzZWMtXHUwMDNlY291bnQmIzQzOyYjNDM7O1xuIDE5ODpcdFxuIDE5OTpcdFx0cmV0dXJuIDA7XG4gMjAwOlx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODI5CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMzA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBuc2ltX2lwc2VjX2FkZF9zYWAgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBgc3RydWN0IG5zaW1fc2Egc2FgIGlzIG1ldGljdWxvdXNseSBpbml0aWFsaXplZCB1c2luZyBgbWVtc2V0YC4gVGhpcyBpcyBjcnVjaWFsIOKAkyBhIGNsZWFuIHNsYXRlIGlzIHRoZSBmb3VuZGF0aW9uLiBgbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzYCB0aGVuIGV4dHJhY3RzIHRoZSBgc2Eua2V5YCBhbmQgYHNhLnNhbHRgLCBlbnN1cmluZyB0aGV5IGFyZSBpbnRlcnByZXRlZCBhcyBiaWctZW5kaWFuIDMyLWJpdCB2YWx1ZXMgdXNpbmcgYF9fYmUzMmAuIEV4Y2VsbGVudCwgZW5kaWFubmVzcyBjb25zaWRlcmF0aW9ucyBhcmUgYmVpbmcgaGFuZGxlZCB1cGZyb250LiBBbmQsIGNvbmZpcm1lZCBieSBgbnNpbV9kYmdfbmV0ZGV2X29wc19yZWFkYCwgdGhlIGRlYnVnIG91dHB1dCBjb3JyZWN0bHkgY29udmVydHMgdGhlIGVuZGlhbm5lc3Mgd2hlbiBwcmludGluZywgdXNpbmcgYGJlMzJfdG9fY3B1YCBzbyB0aGF0IHRoZSBoZXggdmFsdWVzIG1hdGNoIHRoZSBkZWJ1Z2dlZCBlbnZpcm9ubWVudC4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogYXJlIHRoZXJlIGFueSBsaW5nZXJpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IE5vLCBJIGRvbiYjMzk7dCBzZWUgYW55LiBUaGUgYHNhYCBzdHJ1Y3Qgc3RhcnRzIHplcm9lZC4gVGhlIGtleXMgYW5kIHNhbHQgYXJlIGhhbmRsZWQgc2FmZWx5IHdpdGggYG1lbWNweWAgYW5kIGRpcmVjdCBhc3NpZ25tZW50LiBUaGUgZGVidWcgYnVmZmVyIHVzZXMgYGt6YWxsb2NgLCBzbyBpdCBpcyB6ZXJvZWQgbWVtb3J5LCB3aGljaCBpcyBhIGdvb2QgcHJhY3RpY2UgdG8gYXZvaWQgbGVha2luZyBwb3RlbnRpYWxseSBzZW5zaXRpdmUgaW5mb3JtYXRpb24uIFRoZSB0eXBlIGNoYW5nZXMgZnJvbSBgdTMyYCB0byBgX19iZTMyYCBhbmQgc3BhcnNlIGFubm90YXRpb25zIHNlZW0gdG8gaGF2ZSBiZWVuIHVzZWQgdG8gaGVscCBlbmZvcmNlIGVuZGlhbm5lc3MgY29ycmVjdG5lc3MuIEFuZCB0aGUgcHJpbnQgZm9ybWF0IGNvbnZlcnRzIHRoZSBlbmRpYW5uZXNzIHdoZW4gZGlzcGxheWluZy4KCkkmIzM5O20gc2F0aXNmaWVkIHRoYXQgdGhpcyBzcGVjaWZpYyBjaGFuZ2UgZG9lc24mIzM5O3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gSG93ZXZlciwganVzdCB0byBiZSB0aG9yb3VnaCwgSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBjb2RlYmFzZSBmb3Igb3RoZXIgdXNlcyBvZiBga2V5YCwgYHNhbHRgLCBvciB0aGUgYHN0cnVjdCBuc2ltX3NhYCB3aXRoaW4gYG5ldGRldnNpbWAuIFRoYXQmIzM5O3MgdGhlIG5leHQgc3RlcCwganVzdCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuc2ltX3NhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jPTEyPXN0YXRpYyBzc2l6ZV90IG5zaW1fZGJnX25ldGRldl9vcHNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCxcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy0zNi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5TSU1fSVBTRUNfTUFYX1NBX0NPVU5UOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmM6Mzc6XHRcdHN0cnVjdCBuc2ltX3NhICpzYXAgPSBcdTAwMjZpcHNlYy1cdTAwM2VzYVtpXTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jLTM4LVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jPTEzMj1zdGF0aWMgaW50IG5zaW1faXBzZWNfYWRkX3NhKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtMTM3LVx0c3RydWN0IG5ldGRldnNpbSAqbnM7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYzoxMzg6XHRzdHJ1Y3QgbnNpbV9zYSBzYTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jLTEzOS1cdHUxNiBzYV9pZHg7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmM9MjAyPXN0YXRpYyB2b2lkIG5zaW1faXBzZWNfZGVsX3NhKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCB4ZnJtX3N0YXRlICp4cylcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy0yMTQtXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYzoyMTU6XHRtZW1zZXQoXHUwMDI2aXBzZWMtXHUwMDNlc2Fbc2FfaWR4XSwgMCwgc2l6ZW9mKHN0cnVjdCBuc2ltX3NhKSk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy0yMTYtXHRpcHNlYy1cdTAwM2Vjb3VudC0tO1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jPTIyND1ib29sIG5zaW1faXBzZWNfdHgoc3RydWN0IG5ldGRldnNpbSAqbnMsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtMjI4LVx0c3RydWN0IHhmcm1fc3RhdGUgKnhzO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmM6MjI5Olx0c3RydWN0IG5zaW1fc2EgKnRzYTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jLTIzMC1cdHUzMiBzYV9pZHg7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQxLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjQyOnN0cnVjdCBuc2ltX3NhIHtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC00My1cdHN0cnVjdCB4ZnJtX3N0YXRlICp4cztcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg9NTI9c3RydWN0IG5zaW1faXBzZWMge1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjUzOlx0c3RydWN0IG5zaW1fc2Egc2FbTlNJTV9JUFNFQ19NQVhfU0FfQ09VTlRdO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTU0LVx0c3RydWN0IGRlbnRyeSAqcGZpbGU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxOTQKCQkJCQkJCW91dHB1dDogMTQzCgkJCQkJCQl0aG91Z2h0czogMTA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIElQc2VjIFBhdGNoKioKCk9rYXksIHRoaXMgaXMgcHJldHR5IGNsZWFuLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCB0aGlzIHBhdGNoIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGZpeCBmb3IgaG93IHRoZSBuZXRkZXZzaW0gZHJpdmVyIGhhbmRsZXMgdGhlIGVuZGlhbm5lc3Mgb2YgSVBzZWMga2V5cyBhbmQgc2FsdC4gVGhleSYjMzk7cmUgY29ycmVjdGx5IHVwZGF0aW5nIHRoZSBkYXRhIHR5cGVzIGZyb20gdGhlIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIGB1MzJgIHRvIHRoZSBuZXR3b3JrLWJ5dGUtb3JkZXItYXdhcmUgYF9fYmUzMmAsIHdoaWNoIGlzIGNydWNpYWwgZm9yIGNyb3NzLXN5c3RlbSBjb21wYXRpYmlsaXR5LCBhbmQgYWRkaW5nIHRoZSBuZWNlc3NhcnkgYGJlMzJfdG9fY3B1KClgIGNhbGxzIHdoZW4gY29udmVydGluZyB0aGUgdmFsdWVzIGZvciBkZWJ1Z2ZzIG91dHB1dC4gVGhpcyBlbnN1cmVzIGNvcnJlY3QgcmVwcmVzZW50YXRpb24gYWNyb3NzIGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzLgoKSSYjMzk7dmUgY2hlY2tlZCwgYW5kIEkgZG9uJiMzOTt0IHNlZSBhbnl0aGluZyBoZXJlIHRoYXQgaW50cm9kdWNlcyBuZXcgcmlza3M6IG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcywgbm8gZG9kZ3kgYWxsb2NhdGlvbnMsIGFuZCBjZXJ0YWlubHkgbm8gb2J2aW91cyBpbmZvcm1hdGlvbiBsZWFrcywgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEkgd2FzIGhvcGluZyBmb3IuIEl0JiMzOTtzIGEgdGFyZ2V0ZWQgYW5kIGZvY3VzZWQgZml4LgoKR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlIGFuZCBpdHMgaW1wbGljYXRpb25zIGZvciBjb25zaXN0ZW50IElQc2VjIGtleSByZXByZXNlbnRhdGlvbiwgdGhlIHJpc2sgc2VlbXMgbWluaW1hbC4gVGhlcmVmb3JlLCBJJiMzOTtsbCByZWNvbW1lbmQgcnVubmluZyB0aGUgYHNldC1yZXN1bHRzYCB0b29sIHdpdGggYE5lZWRzS01TQU49ZmFsc2VgIGFuZCBwcm92aWRlIGEgZGV0YWlsZWQgZXhwbGFuYXRpb24gb2YgdGhlIGZpeGVzIG1hZGUgdG8gYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGVuZGlhbm5lc3MgaGFuZGxpbmcgb2YgSVBzZWMga2V5cyBhbmQgc2FsdCB2YWx1ZXMgaW4gbmV0ZGV2c2ltIGJ5IGNoYW5naW5nIHRoZSB0eXBlIGFubm90YXRpb25zIGZyb20gdTMyIHRvIF9fYmUzMiBhbmQgY29udmVydGluZyB0aGVtIHdpdGggYmUzMl90b19jcHUoKSB3aGVuIGZvcm1hdHRpbmcgZGVidWdmcyBvdXRwdXQuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdCBwYWRkaW5nIGNoYW5nZXMsIGNvcGllcyBvZiByYXcga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYXJlIGludHJvZHVjZWQuIEFsbCBidWZmZXJzIGFuZCBzdHJ1Y3R1cmVzIGluIG5ldGRldnNpbSBJUHNlYyBjb2RlIHJlbWFpbiBwcm9wZXJseSBpbml0aWFsaXplZCB2aWEgbWVtc2V0L2t6YWxsb2MuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgZW5kaWFubmVzcyBoYW5kbGluZyBvZiBJUHNlYyBrZXlzIGFuZCBzYWx0IHZhbHVlcyBpbiBuZXRkZXZzaW0gYnkgY2hhbmdpbmcgdGhlIHR5cGUgYW5ub3RhdGlvbnMgZnJvbSB1MzIgdG8gX19iZTMyIGFuZCBjb252ZXJ0aW5nIHRoZW0gd2l0aCBiZTMyX3RvX2NwdSgpIHdoZW4gZm9ybWF0dGluZyBkZWJ1Z2ZzIG91dHB1dC4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0IHBhZGRpbmcgY2hhbmdlcywgY29waWVzIG9mIHJhdyBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2UsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBhcmUgaW50cm9kdWNlZC4gQWxsIGJ1ZmZlcnMgYW5kIHN0cnVjdHVyZXMgaW4gbmV0ZGV2c2ltIElQc2VjIGNvZGUgcmVtYWluIHByb3Blcmx5IGluaXRpYWxpemVkIHZpYSBtZW1zZXQva3phbGxvYy4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjU3OjIzLjcyMjc5Nzk2M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MTQwMzc3Mzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVERFVlNJTVwiLFxuICAgIFwiWEZSTV9PRkZMT0FEXCIsXG4gICAgXCJJTkVUX0VTUF9PRkZMT0FEXCIsXG4gICAgXCJERUJVR19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5zaW1fZGJnX25ldGRldl9vcHNfcmVhZFwiLFxuICAgIFwibnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzXCIsXG4gICAgXCJuc2ltX2lwc2VjX2FkZF9zYVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgZW5kaWFubmVzcyBoYW5kbGluZyBvZiBJUHNlYyBrZXlzIGFuZCBzYWx0IHZhbHVlcyBpbiBuZXRkZXZzaW0gYnkgY2hhbmdpbmcgdGhlIHR5cGUgYW5ub3RhdGlvbnMgZnJvbSB1MzIgdG8gX19iZTMyIGFuZCBjb252ZXJ0aW5nIHRoZW0gd2l0aCBiZTMyX3RvX2NwdSgpIHdoZW4gZm9ybWF0dGluZyBkZWJ1Z2ZzIG91dHB1dC4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0IHBhZGRpbmcgY2hhbmdlcywgY29waWVzIG9mIHJhdyBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2UsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBhcmUgaW50cm9kdWNlZC4gQWxsIGJ1ZmZlcnMgYW5kIHN0cnVjdHVyZXMgaW4gbmV0ZGV2c2ltIElQc2VjIGNvZGUgcmVtYWluIHByb3Blcmx5IGluaXRpYWxpemVkIHZpYSBtZW1zZXQva3phbGxvYy4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29ycmVjdHMgZW5kaWFubmVzcyBoYW5kbGluZyBvZiBJUHNlYyBrZXlzIGFuZCBzYWx0IGluIHRoZSBuZXRkZXZzaW0gc2ltdWxhdGVkIGRldmljZSBkcml2ZXIsIG1vZGlmeWluZyBuc2ltX3NhIGZpZWxkIHR5cGVzIHRvIF9fYmUzMiwgYWRqdXN0aW5nIGtleS9zYWx0IHBhcnNpbmcgaW4gbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzLCBhbmQgYnl0ZS1zd2FwcGluZyB2YWx1ZXMgZm9yIGRlYnVnZnMgb3V0cHV0IGluIG5zaW1fZGJnX25ldGRldl9vcHNfcmVhZC4gTmV0ZGV2c2ltIGlzIGEgc29mdHdhcmUtc2ltdWxhdGVkIGRldmljZSBkcml2ZXIgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbmV0bGluayAoWEZSTSBzdGF0ZSBvcGVyYXRpb25zKSBhbmQgZGVidWdmcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6NTc6MjMuNzIyODAyOTUzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDYzMjkyMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0YzUzNWExZTg4ZDFkYWMxYTU0Y2E1Nzc3MjBkZmEyODNiYTNlMTI4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDggMTc6NTc6MjIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuY1xcbmluZGV4IDM2YTFiZTQ5MjNkNjEuLjU3MjI4MzdiY2RhMzYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmNcXG4rKysgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuY1xcbkBAIC01MCwxMSArNTAsMTEgQEAgc3RhdGljIHNzaXplX3QgbnNpbV9kYmdfbmV0ZGV2X29wc19yZWFkKHN0cnVjdCBmaWxlICpmaWxwLFxcbiBcXHRcXHRwICs9IHNjbnByaW50ZihwLCBidWZzaXplIC0gKHAgLSBidWYpLFxcbiBcXHRcXHRcXHQgICAgICAgXFxcInNhWyVpXSAgICBzcGk9MHglMDh4IHByb3RvPTB4JXggc2FsdD0weCUwOHggY3J5cHQ9JWRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdCAgICAgICBpLCBiZTMyX3RvX2NwdShzYXAtXFx1MDAzZXhzLVxcdTAwM2VpZC5zcGkpLFxcbi1cXHRcXHRcXHQgICAgICAgc2FwLVxcdTAwM2V4cy1cXHUwMDNlaWQucHJvdG8sIHNhcC1cXHUwMDNlc2FsdCwgc2FwLVxcdTAwM2VjcnlwdCk7XFxuK1xcdFxcdFxcdCAgICAgICBzYXAtXFx1MDAzZXhzLVxcdTAwM2VpZC5wcm90bywgYmUzMl90b19jcHUoc2FwLVxcdTAwM2VzYWx0KSwgc2FwLVxcdTAwM2VjcnlwdCk7XFxuIFxcdFxcdHAgKz0gc2NucHJpbnRmKHAsIGJ1ZnNpemUgLSAocCAtIGJ1ZiksXFxuIFxcdFxcdFxcdCAgICAgICBcXFwic2FbJWldICAgIGtleT0weCUwOHggJTA4eCAlMDh4ICUwOHhcXFxcblxcXCIsXFxuLVxcdFxcdFxcdCAgICAgICBpLCBzYXAtXFx1MDAzZWtleVswXSwgc2FwLVxcdTAwM2VrZXlbMV0sXFxuLVxcdFxcdFxcdCAgICAgICBzYXAtXFx1MDAzZWtleVsyXSwgc2FwLVxcdTAwM2VrZXlbM10pO1xcbitcXHRcXHRcXHQgICAgICAgaSwgYmUzMl90b19jcHUoc2FwLVxcdTAwM2VrZXlbMF0pLCBiZTMyX3RvX2NwdShzYXAtXFx1MDAzZWtleVsxXSksXFxuK1xcdFxcdFxcdCAgICAgICBiZTMyX3RvX2NwdShzYXAtXFx1MDAzZWtleVsyXSksIGJlMzJfdG9fY3B1KHNhcC1cXHUwMDNla2V5WzNdKSk7XFxuIFxcdH1cXG4gXFxuIFxcdGxlbiA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZmZlciwgY291bnQsIHBwb3MsIGJ1ZiwgcCAtIGJ1Zik7XFxuQEAgLTg3LDcgKzg3LDcgQEAgc3RhdGljIGludCBuc2ltX2lwc2VjX2ZpbmRfZW1wdHlfaWR4KHN0cnVjdCBuc2ltX2lwc2VjICppcHNlYylcXG4gXFxuIHN0YXRpYyBpbnQgbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgeGZybV9zdGF0ZSAqeHMsXFxuLVxcdFxcdFxcdFxcdCAgICAgICB1MzIgKm15a2V5LCB1MzIgKm15c2FsdClcXG4rXFx0XFx0XFx0XFx0ICAgICAgIF9fYmUzMiAqbXlrZXksIF9fYmUzMiAqbXlzYWx0KVxcbiB7XFxuIFxcdGNvbnN0IGNoYXIgYWVzX2djbV9uYW1lW10gPSBcXFwicmZjNDEwNihnY20oYWVzKSlcXFwiO1xcbiBcXHR1bnNpZ25lZCBjaGFyICprZXlfZGF0YTtcXG5AQCAtMTE3LDcgKzExNyw3IEBAIHN0YXRpYyBpbnQgbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcbiBcXHQvKiAxNjAgYWNjb3VudHMgZm9yIDE2IGJ5dGUga2V5IGFuZCA0IGJ5dGUgc2FsdCAqL1xcbiBcXHRpZiAoa2V5X2xlbiBcXHUwMDNlIE5TSU1fSVBTRUNfQVVUSF9CSVRTKSB7XFxuLVxcdFxcdCpteXNhbHQgPSAoKHUzMiAqKWtleV9kYXRhKVs0XTtcXG4rXFx0XFx0Km15c2FsdCA9ICgoX19iZTMyICopa2V5X2RhdGEpWzRdO1xcbiBcXHR9IGVsc2UgaWYgKGtleV9sZW4gPT0gTlNJTV9JUFNFQ19BVVRIX0JJVFMpIHtcXG4gXFx0XFx0Km15c2FsdCA9IDA7XFxuIFxcdH0gZWxzZSB7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaCBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaFxcbmluZGV4IDU1YWVjNDEyMzdiOWIuLmE4MmE2ODUzODRlNmQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oXFxuKysrIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oXFxuQEAgLTQyLDggKzQyLDggQEBcXG4gc3RydWN0IG5zaW1fc2Ege1xcbiBcXHRzdHJ1Y3QgeGZybV9zdGF0ZSAqeHM7XFxuIFxcdF9fYmUzMiBpcGFkZHJbNF07XFxuLVxcdHUzMiBrZXlbNF07XFxuLVxcdHUzMiBzYWx0O1xcbitcXHRfX2JlMzIga2V5WzRdO1xcbitcXHRfX2JlMzIgc2FsdDtcXG4gXFx0Ym9vbCB1c2VkO1xcbiBcXHRib29sIGNyeXB0O1xcbiBcXHRib29sIHJ4O1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5zaFxcbmluZGV4IGFjZTNhOTkwMjNlZDAuLjQ4NDNkNDc0NTM4ZjQgMTAwNzU1XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5zaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsuc2hcXG5AQCAtOTMyLDExICs5MzIsMTEgQEAga2NpX3Rlc3RfaXBzZWNfb2ZmbG9hZCgpXFxuIFxcdHJ1bl9jbWQgZGlmZiAkc3lzZnNmIC0gXFx1MDAzY1xcdTAwM2MgRU9GXFxuIFNBIGNvdW50PTIgdHg9M1xcbiBzYVswXSB0eCBpcGFkZHI9JGRzdGlwXFxuLXNhWzBdICAgIHNwaT0weDAwMDAwMDA5IHByb3RvPTB4MzIgc2FsdD0weDYxNjI2MzY0IGNyeXB0PTFcXG4tc2FbMF0gICAga2V5PTB4MzQzMzMyMzEgMzgzNzM2MzUgMzIzMTMwMzkgMzYzNTM0MzNcXG4rc2FbMF0gICAgc3BpPTB4MDAwMDAwMDkgcHJvdG89MHgzMiBzYWx0PTB4NjQ2MzYyNjEgY3J5cHQ9MVxcbitzYVswXSAgICBrZXk9MHgzMTMyMzMzNCAzNTM2MzczOCAzOTMwMzEzMiAzMzM0MzUzNlxcbiBzYVsxXSByeCBpcGFkZHI9JHNyY2lwXFxuLXNhWzFdICAgIHNwaT0weDAwMDAwMDA5IHByb3RvPTB4MzIgc2FsdD0weDYxNjI2MzY0IGNyeXB0PTFcXG4tc2FbMV0gICAga2V5PTB4MzQzMzMyMzEgMzgzNzM2MzUgMzIzMTMwMzkgMzYzNTM0MzNcXG4rc2FbMV0gICAgc3BpPTB4MDAwMDAwMDkgcHJvdG89MHgzMiBzYWx0PTB4NjQ2MzYyNjEgY3J5cHQ9MVxcbitzYVsxXSAgICBrZXk9MHgzMTMyMzMzNCAzNTM2MzczOCAzOTMwMzEzMiAzMzM0MzUzNlxcbiBFT0ZcXG4gXFx0aWYgWyAkPyAtbmUgMCBdIDsgdGhlblxcbiBcXHRcXHRlbmRfdGVzdCBcXFwiRkFJTDogaXBzZWNfb2ZmbG9hZCBpbmNvcnJlY3QgZHJpdmVyIGRhdGFcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjU3OjI0LjM2OTg2NTUyM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzkwMzIyNDkwNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUREVWU0lNXCIsXG4gICAgXCJYRlJNX09GRkxPQURcIixcbiAgICBcIklORVRfRVNQX09GRkxPQURcIixcbiAgICBcIkRFQlVHX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnNpbV9kYmdfbmV0ZGV2X29wc19yZWFkXCIsXG4gICAgXCJuc2ltX2lwc2VjX3BhcnNlX3Byb3RvX2tleXNcIixcbiAgICBcIm5zaW1faXBzZWNfYWRkX3NhXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29ycmVjdHMgZW5kaWFubmVzcyBoYW5kbGluZyBvZiBJUHNlYyBrZXlzIGFuZCBzYWx0IGluIHRoZSBuZXRkZXZzaW0gc2ltdWxhdGVkIGRldmljZSBkcml2ZXIsIG1vZGlmeWluZyBuc2ltX3NhIGZpZWxkIHR5cGVzIHRvIF9fYmUzMiwgYWRqdXN0aW5nIGtleS9zYWx0IHBhcnNpbmcgaW4gbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzLCBhbmQgYnl0ZS1zd2FwcGluZyB2YWx1ZXMgZm9yIGRlYnVnZnMgb3V0cHV0IGluIG5zaW1fZGJnX25ldGRldl9vcHNfcmVhZC4gTmV0ZGV2c2ltIGlzIGEgc29mdHdhcmUtc2ltdWxhdGVkIGRldmljZSBkcml2ZXIgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbmV0bGluayAoWEZSTSBzdGF0ZSBvcGVyYXRpb25zKSBhbmQgZGVidWdmcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0YzUzNWExZTg4ZDFkYWMxYTU0Y2E1Nzc3MjBkZmEyODNiYTNlMTI4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAxNzo1NzoyMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmNcbmluZGV4IDM2YTFiZTQ5MjNkNjEuLjU3MjI4MzdiY2RhMzYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuY1xuKysrIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmNcbkBAIC01MCwxMSArNTAsMTEgQEAgc3RhdGljIHNzaXplX3QgbnNpbV9kYmdfbmV0ZGV2X29wc19yZWFkKHN0cnVjdCBmaWxlICpmaWxwLFxuIFx0XHRwICs9IHNjbnByaW50ZihwLCBidWZzaXplIC0gKHAgLSBidWYpLFxuIFx0XHRcdCAgICAgICBcInNhWyVpXSAgICBzcGk9MHglMDh4IHByb3RvPTB4JXggc2FsdD0weCUwOHggY3J5cHQ9JWRcXG5cIixcbiBcdFx0XHQgICAgICAgaSwgYmUzMl90b19jcHUoc2FwLVx1MDAzZXhzLVx1MDAzZWlkLnNwaSksXG4tXHRcdFx0ICAgICAgIHNhcC1cdTAwM2V4cy1cdTAwM2VpZC5wcm90bywgc2FwLVx1MDAzZXNhbHQsIHNhcC1cdTAwM2VjcnlwdCk7XG4rXHRcdFx0ICAgICAgIHNhcC1cdTAwM2V4cy1cdTAwM2VpZC5wcm90bywgYmUzMl90b19jcHUoc2FwLVx1MDAzZXNhbHQpLCBzYXAtXHUwMDNlY3J5cHQpO1xuIFx0XHRwICs9IHNjbnByaW50ZihwLCBidWZzaXplIC0gKHAgLSBidWYpLFxuIFx0XHRcdCAgICAgICBcInNhWyVpXSAgICBrZXk9MHglMDh4ICUwOHggJTA4eCAlMDh4XFxuXCIsXG4tXHRcdFx0ICAgICAgIGksIHNhcC1cdTAwM2VrZXlbMF0sIHNhcC1cdTAwM2VrZXlbMV0sXG4tXHRcdFx0ICAgICAgIHNhcC1cdTAwM2VrZXlbMl0sIHNhcC1cdTAwM2VrZXlbM10pO1xuK1x0XHRcdCAgICAgICBpLCBiZTMyX3RvX2NwdShzYXAtXHUwMDNla2V5WzBdKSwgYmUzMl90b19jcHUoc2FwLVx1MDAzZWtleVsxXSksXG4rXHRcdFx0ICAgICAgIGJlMzJfdG9fY3B1KHNhcC1cdTAwM2VrZXlbMl0pLCBiZTMyX3RvX2NwdShzYXAtXHUwMDNla2V5WzNdKSk7XG4gXHR9XG4gXG4gXHRsZW4gPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcihidWZmZXIsIGNvdW50LCBwcG9zLCBidWYsIHAgLSBidWYpO1xuQEAgLTg3LDcgKzg3LDcgQEAgc3RhdGljIGludCBuc2ltX2lwc2VjX2ZpbmRfZW1wdHlfaWR4KHN0cnVjdCBuc2ltX2lwc2VjICppcHNlYylcbiBcbiBzdGF0aWMgaW50IG5zaW1faXBzZWNfcGFyc2VfcHJvdG9fa2V5cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCB4ZnJtX3N0YXRlICp4cyxcbi1cdFx0XHRcdCAgICAgICB1MzIgKm15a2V5LCB1MzIgKm15c2FsdClcbitcdFx0XHRcdCAgICAgICBfX2JlMzIgKm15a2V5LCBfX2JlMzIgKm15c2FsdClcbiB7XG4gXHRjb25zdCBjaGFyIGFlc19nY21fbmFtZVtdID0gXCJyZmM0MTA2KGdjbShhZXMpKVwiO1xuIFx0dW5zaWduZWQgY2hhciAqa2V5X2RhdGE7XG5AQCAtMTE3LDcgKzExNyw3IEBAIHN0YXRpYyBpbnQgbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXG4gXHQvKiAxNjAgYWNjb3VudHMgZm9yIDE2IGJ5dGUga2V5IGFuZCA0IGJ5dGUgc2FsdCAqL1xuIFx0aWYgKGtleV9sZW4gXHUwMDNlIE5TSU1fSVBTRUNfQVVUSF9CSVRTKSB7XG4tXHRcdCpteXNhbHQgPSAoKHUzMiAqKWtleV9kYXRhKVs0XTtcbitcdFx0Km15c2FsdCA9ICgoX19iZTMyICopa2V5X2RhdGEpWzRdO1xuIFx0fSBlbHNlIGlmIChrZXlfbGVuID09IE5TSU1fSVBTRUNfQVVUSF9CSVRTKSB7XG4gXHRcdCpteXNhbHQgPSAwO1xuIFx0fSBlbHNlIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmggYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmhcbmluZGV4IDU1YWVjNDEyMzdiOWIuLmE4MmE2ODUzODRlNmQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmhcbisrKyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaFxuQEAgLTQyLDggKzQyLDggQEBcbiBzdHJ1Y3QgbnNpbV9zYSB7XG4gXHRzdHJ1Y3QgeGZybV9zdGF0ZSAqeHM7XG4gXHRfX2JlMzIgaXBhZGRyWzRdO1xuLVx0dTMyIGtleVs0XTtcbi1cdHUzMiBzYWx0O1xuK1x0X19iZTMyIGtleVs0XTtcbitcdF9fYmUzMiBzYWx0O1xuIFx0Ym9vbCB1c2VkO1xuIFx0Ym9vbCBjcnlwdDtcbiBcdGJvb2wgcng7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsuc2hcbmluZGV4IGFjZTNhOTkwMjNlZDAuLjQ4NDNkNDc0NTM4ZjQgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnNoXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnNoXG5AQCAtOTMyLDExICs5MzIsMTEgQEAga2NpX3Rlc3RfaXBzZWNfb2ZmbG9hZCgpXG4gXHRydW5fY21kIGRpZmYgJHN5c2ZzZiAtIFx1MDAzY1x1MDAzYyBFT0ZcbiBTQSBjb3VudD0yIHR4PTNcbiBzYVswXSB0eCBpcGFkZHI9JGRzdGlwXG4tc2FbMF0gICAgc3BpPTB4MDAwMDAwMDkgcHJvdG89MHgzMiBzYWx0PTB4NjE2MjYzNjQgY3J5cHQ9MVxuLXNhWzBdICAgIGtleT0weDM0MzMzMjMxIDM4MzczNjM1IDMyMzEzMDM5IDM2MzUzNDMzXG4rc2FbMF0gICAgc3BpPTB4MDAwMDAwMDkgcHJvdG89MHgzMiBzYWx0PTB4NjQ2MzYyNjEgY3J5cHQ9MVxuK3NhWzBdICAgIGtleT0weDMxMzIzMzM0IDM1MzYzNzM4IDM5MzAzMTMyIDMzMzQzNTM2XG4gc2FbMV0gcnggaXBhZGRyPSRzcmNpcFxuLXNhWzFdICAgIHNwaT0weDAwMDAwMDA5IHByb3RvPTB4MzIgc2FsdD0weDYxNjI2MzY0IGNyeXB0PTFcbi1zYVsxXSAgICBrZXk9MHgzNDMzMzIzMSAzODM3MzYzNSAzMjMxMzAzOSAzNjM1MzQzM1xuK3NhWzFdICAgIHNwaT0weDAwMDAwMDA5IHByb3RvPTB4MzIgc2FsdD0weDY0NjM2MjYxIGNyeXB0PTFcbitzYVsxXSAgICBrZXk9MHgzMTMyMzMzNCAzNTM2MzczOCAzOTMwMzEzMiAzMzM0MzUzNlxuIEVPRlxuIFx0aWYgWyAkPyAtbmUgMCBdIDsgdGhlblxuIFx0XHRlbmRfdGVzdCBcIkZBSUw6IGlwc2VjX29mZmxvYWQgaW5jb3JyZWN0IGRyaXZlciBkYXRhXCJcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjU3OjI0LjM2OTg2NzI4M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU5NzY1NjQ1NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXR3b3JrIERldmljZSBTaW11bGF0b3IgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGZvY3VzZWQgb24gdW5kZXJzdGFuZGluZyB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMuIEkgc2VlIG1vZGlmaWNhdGlvbnMgYWNyb3NzIHRoZSBgbmV0ZGV2c2ltYCBkaXJlY3RvcnksIHNwZWNpZmljYWxseSBgaXBzZWMuY2AgYW5kIGBuZXRkZXZzaW0uaGAsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIG15IGF0dGVudGlvbi4gSVBzZWMgd2l0aGluIGEgc2ltdWxhdGVkIG5ldHdvcmsgZW52aXJvbm1lbnQuLi4gdGhhdCBjb3VsZCBiZSBpbnRlcmVzdGluZy4gSSdtIGFsc28gbm90aW5nIHRoZSBpbmNsdXNpb24gb2YgYSBjaGFuZ2UgaW4gdGhlIGBydG5ldGxpbmsuc2hgIHNlbGZ0ZXN0IHNjcmlwdC4gVGhpcyBzdWdnZXN0cyB0ZXN0aW5nIGlzIGEga2V5IGNvbXBvbmVudCwgaG9wZWZ1bGx5LCB0byB2YWxpZGF0ZSB0aGVzZSBjaGFuZ2VzLlxuXG5NeSBmaXJzdCBzdGVwIGlzIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0J3MgYWN0dWFsbHkgYmVpbmcgKmNoYW5nZWQqLiBJJ2xsIHJlYWNoIGZvciBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZXhhbWluZSBgbmV0ZGV2c2ltYCBhbmQgYGlwc2VjLmNgIG1vcmUgY2xvc2VseSwgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgdGhlIG1vZGlmaWNhdGlvbnMuIFRoaXMgaW5pdGlhbCBhbmFseXNpcyB3aWxsIGRpY3RhdGUgdGhlIG5leHQgc3RlcHMsIGJ1dCBJIHdhbnQgdG8gZ2V0IGEgaGlnaC1sZXZlbCB2aWV3IG9mIHRoZXNlIGNoYW5nZXMgZmlyc3QsIGFuZCB0cnkgdG8gYW50aWNpcGF0ZSBhbnkga25vY2stb24gZWZmZWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE3MCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjU3OjMwLjM0NjQzMzc4OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTI3MTI5MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnNpbV9kYmdfbmV0ZGV2X29wc19yZWFkfG5zaW1faXBzZWNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0ZGV2c2ltXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jLTExLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jOjEyOnN0YXRpYyBzc2l6ZV90IG5zaW1fZGJnX25ldGRldl9vcHNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCxcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy0xMy1cXHRcXHRcXHRcXHRcXHRjaGFyIF9fdXNlciAqYnVmZmVyLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtMTYtXFx0c3RydWN0IG5ldGRldnNpbSAqbnMgPSBmaWxwLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmM6MTc6XFx0c3RydWN0IG5zaW1faXBzZWMgKmlwc2VjID0gXFx1MDAyNm5zLVxcdTAwM2VpcHNlYztcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy0xOC1cXHRzaXplX3QgYnVmc2l6ZTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jPTY2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlwc2VjX2RiZ19mb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtNjgtXFx0Lm9wZW4gPSBzaW1wbGVfb3BlbixcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYzo2OTpcXHQucmVhZCA9IG5zaW1fZGJnX25ldGRldl9vcHNfcmVhZCxcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy03MC19O1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jLTcxLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jOjcyOnN0YXRpYyBpbnQgbnNpbV9pcHNlY19maW5kX2VtcHR5X2lkeChzdHJ1Y3QgbnNpbV9pcHNlYyAqaXBzZWMpXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtNzMte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtODctXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmM6ODg6c3RhdGljIGludCBuc2ltX2lwc2VjX3BhcnNlX3Byb3RvX2tleXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy04OS1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHhmcm1fc3RhdGUgKnhzLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtMTMxLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jOjEzMjpzdGF0aWMgaW50IG5zaW1faXBzZWNfYWRkX3NhKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtMTMzLVxcdFxcdFxcdCAgICAgc3RydWN0IHhmcm1fc3RhdGUgKnhzLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtMTM1LXtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYzoxMzY6XFx0c3RydWN0IG5zaW1faXBzZWMgKmlwc2VjO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jLTEzNy1cXHRzdHJ1Y3QgbmV0ZGV2c2ltICpucztcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jLTE2MC1cXHQvKiBmaW5kIHRoZSBmaXJzdCB1bnVzZWQgaW5kZXggKi9cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYzoxNjE6XFx0cmV0ID0gbnNpbV9pcHNlY19maW5kX2VtcHR5X2lkeChpcHNlYyk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtMTYyLVxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy0xNzUtXFx0LyogZ2V0IHRoZSBrZXkgYW5kIHNhbHQgKi9cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYzoxNzY6XFx0cmV0ID0gbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzKGRldiwgeHMsIHNhLmtleSwgXFx1MDAyNnNhLnNhbHQpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jLTE3Ny1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy0yMDEtXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmM6MjAyOnN0YXRpYyB2b2lkIG5zaW1faXBzZWNfZGVsX3NhKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCB4ZnJtX3N0YXRlICp4cylcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy0yMDMte1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jLTIwNC1cXHRzdHJ1Y3QgbmV0ZGV2c2ltICpucyA9IG5ldGRldl9wcml2KGRldik7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmM6MjA1OlxcdHN0cnVjdCBuc2ltX2lwc2VjICppcHNlYyA9IFxcdTAwMjZucy1cXHUwMDNlaXBzZWM7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtMjA2LVxcdHUxNiBzYV9pZHg7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYz0yMTk9c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtZGV2X29wcyBuc2ltX3hmcm1kZXZfb3BzID0ge1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jOjIyMDpcXHQueGRvX2Rldl9zdGF0ZV9hZGRcXHQ9IG5zaW1faXBzZWNfYWRkX3NhLFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jOjIyMTpcXHQueGRvX2Rldl9zdGF0ZV9kZWxldGVcXHQ9IG5zaW1faXBzZWNfZGVsX3NhLFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jLTIyMi19O1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jLTIyMy1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYzoyMjQ6Ym9vbCBuc2ltX2lwc2VjX3R4KHN0cnVjdCBuZXRkZXZzaW0gKm5zLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jLTIyNS17XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtMjI2LVxcdHN0cnVjdCBzZWNfcGF0aCAqc3AgPSBza2Jfc2VjX3BhdGgoc2tiKTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYzoyMjc6XFx0c3RydWN0IG5zaW1faXBzZWMgKmlwc2VjID0gXFx1MDAyNm5zLVxcdTAwM2VpcHNlYztcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy0yMjgtXFx0c3RydWN0IHhmcm1fc3RhdGUgKnhzO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtMjcwLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jOjI3MTp2b2lkIG5zaW1faXBzZWNfaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucylcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy0yNzIte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtMjg3LVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jOjI4ODp2b2lkIG5zaW1faXBzZWNfdGVhcmRvd24oc3RydWN0IG5ldGRldnNpbSAqbnMpXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtMjg5LXtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYzoyOTA6XFx0c3RydWN0IG5zaW1faXBzZWMgKmlwc2VjID0gXFx1MDAyNm5zLVxcdTAwM2VpcHNlYztcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy0yOTEtXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM9MTIzPXN0YXRpYyBuZXRkZXZfdHhfdCBuc2ltX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0xMzUtXFx0cmN1X3JlYWRfbG9jaygpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYzoxMzY6XFx0aWYgKCFuc2ltX2lwc2VjX3R4KG5zLCBza2IpKVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0xMzctXFx0XFx0Z290byBvdXRfZHJvcF9hbnk7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM9MTA0MD1zdGF0aWMgaW50IG5zaW1faW5pdF9uZXRkZXZzaW0oc3RydWN0IG5ldGRldnNpbSAqbnMpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtMTA2OS1cXHRuc2ltX21hY3NlY19pbml0KG5zKTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6MTA3MDpcXHRuc2ltX2lwc2VjX2luaXQobnMpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0xMDcxLVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTEwOTctZXJyX2lwc2VjX3RlYXJkb3duOlxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYzoxMDk4OlxcdG5zaW1faXBzZWNfdGVhcmRvd24obnMpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0xMDk5LVxcdG5zaW1fbWFjc2VjX3RlYXJkb3duKG5zKTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYz0xMTc1PXZvaWQgbnNpbV9kZXN0cm95KHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTEyMDAtXFx0XFx0bnNpbV9tYWNzZWNfdGVhcmRvd24obnMpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYzoxMjAxOlxcdFxcdG5zaW1faXBzZWNfdGVhcmRvd24obnMpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0xMjAyLVxcdFxcdG5zaW1fYnBmX3VuaW5pdChucyk7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg9NDI9c3RydWN0IG5zaW1fc2Ege1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTUxLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDo1MjpzdHJ1Y3QgbnNpbV9pcHNlYyB7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTUzLVxcdHN0cnVjdCBuc2ltX3NhIHNhW05TSU1fSVBTRUNfTUFYX1NBX0NPVU5UXTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD0xMDc9c3RydWN0IG5ldGRldnNpbSB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMTQxLVxcdGJvb2wgYnBmX21hcF9hY2NlcHQ7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjE0MjpcXHRzdHJ1Y3QgbnNpbV9pcHNlYyBpcHNlYztcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMTQzLVxcdHN0cnVjdCBuc2ltX21hY3NlYyBtYWNzZWM7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg9NDE0PXN0YXRpYyBpbmxpbmUgYm9vbCBuc2ltX2Rldl9wb3J0X2lzX3ZmKHN0cnVjdCBuc2ltX2Rldl9wb3J0ICpuc2ltX2Rldl9wb3J0KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQxOC0jaWYgSVNfRU5BQkxFRChDT05GSUdfWEZSTV9PRkZMT0FEKVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDo0MTk6dm9pZCBuc2ltX2lwc2VjX2luaXQoc3RydWN0IG5ldGRldnNpbSAqbnMpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDo0MjA6dm9pZCBuc2ltX2lwc2VjX3RlYXJkb3duKHN0cnVjdCBuZXRkZXZzaW0gKm5zKTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg6NDIxOmJvb2wgbnNpbV9pcHNlY190eChzdHJ1Y3QgbmV0ZGV2c2ltICpucywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQyMi0jZWxzZVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDo0MjM6c3RhdGljIGlubGluZSB2b2lkIG5zaW1faXBzZWNfaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucylcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtNDI0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC00MjYtXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjQyNzpzdGF0aWMgaW5saW5lIHZvaWQgbnNpbV9pcHNlY190ZWFyZG93bihzdHJ1Y3QgbmV0ZGV2c2ltICpucylcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtNDI4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC00MzAtXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjQzMTpzdGF0aWMgaW5saW5lIGJvb2wgbnNpbV9pcHNlY190eChzdHJ1Y3QgbmV0ZGV2c2ltICpucywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtNDMyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6NTc6MzAuNDU5MTUzMjY4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg0MjEzMzM5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBOZXRkZXZTaW0gQ29uZmlndXJhdGlvbiBmb3IgSVBTZWMgT2ZmbG9hZCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IHdpdGggYGRyaXZlcnMvbmV0L25ldGRldnNpbS9LY29uZmlnYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IEtjb25maWcgb3B0aW9ucyBuZWNlc3NhcnkgdG8gZW5hYmxlIG5ldGRldnNpbSB3aXRoIElQU2VjIG9mZmxvYWQgY2FwYWJpbGl0aWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgcmVxdWlyZWQgZm9yIHRoYXQgZnVuY3Rpb25hbGl0eSB0byBiZSBjb25maWd1cmVkLiBBcmUgdGhlcmUgc3BlY2lmaWMgZGVwZW5kZW5jaWVzPyBBcmUgdGhlcmUgaGlkZGVuIG9wdGlvbnMgdGhhdCBJJ20gbWlzc2luZz8gSSB3YW50IHRvIG1ha2Ugc3VyZSBJJ20gZW5hYmxpbmcgZXZlcnl0aGluZyB0aGF04oCZcyBuZWVkZWQgdG8gZXhwb3NlIGFuZCB1dGlsaXplIHRoYXQgZnVuY3Rpb25hbGl0eS4gSSdsbCBuZWVkIHRvIHBvcmUgb3ZlciB0aGUgZGVmaW5pdGlvbnMgaW4gdGhhdCBmaWxlIGNsb3NlbHksIGxvb2tpbmcgZm9yIGludGVyYWN0aW9ucyBhbmQgcG90ZW50aWFsIGNvbmZsaWN0cy4gSeKAmWxsIGJlIG9uIHRoZSBsb29rb3V0IGZvciBhbnkgc3VidGxlIGNsdWVzIGFib3V0IHRoZSBjb25maWd1cmF0aW9uIG9mIElQU2VjIG9mZmxvYWQgd2l0aGluIHRoZSBOZXREZXZTaW0gZW52aXJvbm1lbnQuIFRoaXMgd2lsbCBhbGxvdyBtZSB0byBlbnN1cmUgbXkgYnVpbGRzIHdpbGwgaGF2ZSB0aGlzIGNhcGFiaWxpdHkuIEkgaG9wZSBpdCBpcyBhbGwgc2VsZi1ldmlkZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTY0LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6NTc6MzMuMzAxMjg5OTgzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDM0NzkyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJORVRERVZTSU1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz02MDI9c291cmNlIFxcXCJkcml2ZXJzL25ldC9oeXBlcnYvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL25ldC9LY29uZmlnLTYwMy1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjYwNDpjb25maWcgTkVUREVWU0lNXFxuZHJpdmVycy9uZXQvS2NvbmZpZy02MDUtXFx0dHJpc3RhdGUgXFxcIlNpbXVsYXRlZCBuZXR3b3JraW5nIGRldmljZVxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L01ha2VmaWxlPTg2PW9iai0kKENPTkZJR19VU0I0X05FVCkgKz0gdGh1bmRlcmJvbHQvXFxuZHJpdmVycy9uZXQvTWFrZWZpbGU6ODc6b2JqLSQoQ09ORklHX05FVERFVlNJTSkgKz0gbmV0ZGV2c2ltL1xcbmRyaXZlcnMvbmV0L01ha2VmaWxlLTg4LW9iai0kKENPTkZJR19ORVRfRkFJTE9WRVIpICs9IG5ldF9mYWlsb3Zlci5vXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vTWFrZWZpbGUtMi1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vTWFrZWZpbGU6MzpvYmotJChDT05GSUdfTkVUREVWU0lNKSArPSBuZXRkZXZzaW0ub1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZS00LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzo1NzozMy40NzE2NDMzNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2MDkwMzAzMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIE5ldHdvcmsgRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIG5ldHdvcmsgZHJpdmVyIHNpdHVhdGlvbiBiZXR0ZXIuIExldCdzIHNlZS4uLiB0aGUgYEtjb25maWdgIGZpbGUgaW4gdGhlIGBkcml2ZXJzL25ldGAgZGlyZWN0b3J5LCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNjA0LCBzZWVtcyBsaWtlIGEgbGlrZWx5IHBsYWNlIHRvIHN0YXJ0LiBUaGF0J3MgdXN1YWxseSB3aGVyZSB5b3UgZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBuZXR3b3JrIGRldmljZXMsIHJpZ2h0PyBJdCdsbCBsaWtlbHkgdGVsbCBtZSB0aGUgZGVwZW5kZW5jaWVzLCB0aGUgYnVpbGQgZmxhZ3MsIGFuZCBhbGwgdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzIEkgbmVlZCB0byBrbm93IHRvIHRydWx5IHVuZGVyc3RhbmQgaXRzIGlubmVyIHdvcmtpbmdzLiBUaGVuLCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgcGFydGljdWxhciBkcml2ZXIgZ2V0cyBidWlsdCBpbnRvIHRoZSBrZXJuZWwsIEknbGwgbmVlZCB0byBjaGVjayB0aGUgYE1ha2VmaWxlYCBsb2NhdGVkIGluIGBkcml2ZXJzL25ldC9uZXRkZXZzaW1gLiBUaGF0J2xsIGdpdmUgbWUgdGhlIGJ1aWxkIHJ1bGVzLCBvYmplY3QgZmlsZSBkZXBlbmRlbmNpZXMsIGFuZCBob3cgaXQgYWxsIGdldHMgbGlua2VkIHRvZ2V0aGVyLiBUaGF0IHNob3VsZCBvZmZlciB0aGUgbW9zdCBjb21wbGV0ZSBjb250ZXh0IGZvciBteSBjdXJyZW50IG5lZWRzLiBUaW1lIHRvIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY0NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjU3OjM2LjA4MDY3Njk3OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwMDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNjAwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjAwOlxcdFxcbiA2MDE6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC90aHVuZGVyYm9sdC9LY29uZmlnXFxcIlxcbiA2MDI6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC9oeXBlcnYvS2NvbmZpZ1xcXCJcXG4gNjAzOlxcdFxcbiA2MDQ6XFx0Y29uZmlnIE5FVERFVlNJTVxcbiA2MDU6XFx0XFx0dHJpc3RhdGUgXFxcIlNpbXVsYXRlZCBuZXR3b3JraW5nIGRldmljZVxcXCJcXG4gNjA2OlxcdFxcdGRlcGVuZHMgb24gREVCVUdfRlNcXG4gNjA3OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiA2MDg6XFx0XFx0ZGVwZW5kcyBvbiBQU0FNUExFIHx8IFBTQU1QTEU9blxcbiA2MDk6XFx0XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19NT0NLIHx8IFBUUF8xNTg4X0NMT0NLX01PQ0s9blxcbiA2MTA6XFx0XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuIDYxMTpcXHRcXHRzZWxlY3QgUEFHRV9QT09MXFxuIDYxMjpcXHRcXHRzZWxlY3QgTkVUX1NIQVBFUlxcbiA2MTM6XFx0XFx0aGVscFxcbiA2MTQ6XFx0XFx0ICBUaGlzIGRyaXZlciBpcyBhIGRldmVsb3BlciB0ZXN0aW5nIHRvb2wgYW5kIHNvZnR3YXJlIG1vZGVsIHRoYXQgY2FuXFxuIDYxNTpcXHRcXHQgIGJlIHVzZWQgdG8gdGVzdCB2YXJpb3VzIGNvbnRyb2wgcGF0aCBuZXR3b3JraW5nIEFQSXMsIGVzcGVjaWFsbHlcXG4gNjE2OlxcdFxcdCAgSFctb2ZmbG9hZCByZWxhdGVkLlxcbiA2MTc6XFx0XFxuIDYxODpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gNjE5OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgbmV0ZGV2c2ltLlxcbiA2MjA6XFx0XFxuIDYyMTpcXHRjb25maWcgTkVUX0ZBSUxPVkVSXFxuIDYyMjpcXHRcXHR0cmlzdGF0ZSBcXFwiRmFpbG92ZXIgZHJpdmVyXFxcIlxcbiA2MjM6XFx0XFx0c2VsZWN0IEZBSUxPVkVSXFxuIDYyNDpcXHRcXHRoZWxwXFxuIDYyNTpcXHRcXHQgIFRoaXMgcHJvdmlkZXMgYW4gYXV0b21hdGVkIGZhaWxvdmVyIG1lY2hhbmlzbSB2aWEgQVBJcyB0byBjcmVhdGVcXG4gNjI2OlxcdFxcdCAgYW5kIGRlc3Ryb3kgYSBmYWlsb3ZlciBtYXN0ZXIgbmV0ZGV2IGFuZCBtYW5hZ2VzIGEgcHJpbWFyeSBhbmRcXG4gNjI3OlxcdFxcdCAgc3RhbmRieSBzbGF2ZSBuZXRkZXZzIHRoYXQgZ2V0IHJlZ2lzdGVyZWQgdmlhIHRoZSBnZW5lcmljIGZhaWxvdmVyXFxuIDYyODpcXHRcXHQgIGluZnJhc3RydWN0dXJlLiBUaGlzIGNhbiBiZSB1c2VkIGJ5IHBhcmF2aXJ0dWFsIGRyaXZlcnMgdG8gZW5hYmxlXFxuIDYyOTpcXHRcXHQgIGFuIGFsdGVybmF0ZSBsb3cgbGF0ZW5jeSBkYXRhcGF0aC4gSXQgYWxzbyBlbmFibGVzIGxpdmUgbWlncmF0aW9uIG9mXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjU3OjM2LjA4MDc2ODU1OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2MDg1Mzk4OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIElQc2VjIE9iamVjdCBDb21waWxhdGlvbioqXG5cbkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGBpcHNlYy5vYCBpcyBiZWluZyBidWlsdCB3aXRoaW4gdGhlIGBuZXRkZXZzaW1gIGZyYW1ld29yay4gTXkgZmlyc3Qgc3RvcCwgYXMgYWx3YXlzIGluIHRoZXNlIHNpdHVhdGlvbnMsIGlzIHRoZSBgTWFrZWZpbGVgLiBTcGVjaWZpY2FsbHksIGBkcml2ZXJzL25ldC9uZXRkZXZzaW0vTWFrZWZpbGVgLiBUaGF0J3Mgd2hlcmUgdGhlIG1hZ2ljIHNob3VsZCBiZSBoYXBwZW5pbmcg4oCTIHRoZSBydWxlcywgdGhlIGRlcGVuZGVuY2llcywgdGhlIGZsYWdzLi4uIEl0J3MgYWxsIHRoZXJlLCBob3BlZnVsbHkgbGFpZCBvdXQgaW4gYSBjbGVhbiBhbmQgbG9naWNhbCB3YXkuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIHJlbGV2YW50IHRhcmdldHMgYW5kIHNvdXJjZSBmaWxlIGRlcGVuZGVuY2llcywgYW55IHNwZWNpZmljIGNvbXBpbGVyIGZsYWdzIGJlaW5nIGVtcGxveWVkIGZvciBJUHNlYyB3aXRoaW4gdGhpcyBzaW11bGF0ZWQgbmV0d29yayBkZXZpY2UgY29udGV4dCwgYW5kIHBvc3NpYmx5IGFueSBsaW5rZXIgaW50cmljYWNpZXMgaWYgaXQncyBsaW5raW5nIGFnYWluc3QgZXh0ZXJuYWwgbGlicmFyaWVzLiBMZXQncyBzZWUgaWYgdGhlIGFwcHJvYWNoIGlzIHN0cmFpZ2h0Zm9yd2FyZCwgb3IgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgdHJpY2tzIHVzZWQgdG8gaW50ZWdyYXRlIHRoZSBJUHNlYyBjb2RlIGVmZmVjdGl2ZWx5IGludG8gdGhlIHNpbXVsYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzNzUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjU3OjM4LjY4OTMxMzE2OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9uZXRkZXZzaW0vTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRcXG4gICAzOlxcdG9iai0kKENPTkZJR19ORVRERVZTSU0pICs9IG5ldGRldnNpbS5vXFxuICAgNDpcXHRcXG4gICA1OlxcdG5ldGRldnNpbS1vYmpzIDo9IFxcXFxcXG4gICA2OlxcdFxcdG5ldGRldi5vIGRldi5vIGV0aHRvb2wubyBmaWIubyBidXMubyBoZWFsdGgubyBod3N0YXRzLm8gdWRwX3R1bm5lbHMubyB0Yy5vXFxuICAgNzpcXHRcXG4gICA4OlxcdGlmZXEgKCQoQ09ORklHX0JQRl9TWVNDQUxMKSx5KVxcbiAgIDk6XFx0bmV0ZGV2c2ltLW9ianMgKz0gXFxcXFxcbiAgMTA6XFx0XFx0YnBmLm9cXG4gIDExOlxcdGVuZGlmXFxuICAxMjpcXHRcXG4gIDEzOlxcdGlmbmVxICgkKENPTkZJR19YRlJNX09GRkxPQUQpLClcXG4gIDE0OlxcdG5ldGRldnNpbS1vYmpzICs9IGlwc2VjLm9cXG4gIDE1OlxcdGVuZGlmXFxuICAxNjpcXHRcXG4gIDE3OlxcdGlmbmVxICgkKENPTkZJR19QU0FNUExFKSwpXFxuICAxODpcXHRuZXRkZXZzaW0tb2JqcyArPSBwc2FtcGxlLm9cXG4gIDE5OlxcdGVuZGlmXFxuICAyMDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6NTc6MzguNjg5MzgyODg5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4NzkxMDAyNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIERlZXAgaW50byBgaXBzZWMuY2AqKlxuXG5Pa2F5LCB0aW1lIHRvIHJlYWxseSBkaWcgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIHRoZSByZWNlbnQgY2hhbmdlcyB0byBgaXBzZWMuY2AuIEknbSBnb2luZyB0byBtZXRpY3Vsb3VzbHkgZ28gdGhyb3VnaCB0aGUgY29kZSwgbGluZSBieSBsaW5lIGlmIG5lY2Vzc2FyeS4gSSB3YW50IHRvIHNlZSBwcmVjaXNlbHkgKndoYXQqIHdhcyBtb2RpZmllZCwgYW5kIG1vcmUgaW1wb3J0YW50bHksICpob3cqIHRoZXNlIGNoYW5nZXMgaW1wYWN0IHRoZSBleGVjdXRpb24gZmxvdy4gSSdtIGxvb2tpbmcgZm9yIHRoZSByaXBwbGUgZWZmZWN0cyDigJMgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGFjdHMsIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgb3Igc3VidGxlIGJlaGF2aW9yYWwgc2hpZnRzLiBJJ2xsIGJlIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoLCBtZW50YWxseSBzaW11bGF0aW5nIHNjZW5hcmlvcywgYW5kIGNvbXBhcmluZyB0aGUgdXBkYXRlZCBsb2dpYyBhZ2FpbnN0IG15IGV4aXN0aW5nIG1lbnRhbCBtb2RlbCBvZiB0aGUgSVBTZWMgc3RhY2suIFRoaXMgaXNuJ3QganVzdCBhIGN1cnNvcnkgZ2xhbmNlOyBJIG5lZWQgdG8gZGV2ZWxvcCBhIHJvY2stc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgdXBkYXRlZCBpbnRlcmFjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg4OSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6NTc6NDAuNTY4NDg1NzZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE4MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdC8qIENvcHlyaWdodChjKSAyMDE4IE9yYWNsZSBhbmQvb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuICovXFxuICAgMzpcXHRcXG4gICA0OlxcdCNpbmNsdWRlIFxcdTAwM2NjcnlwdG8vYWVhZC5oXFx1MDAzZVxcbiAgIDU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RlYnVnZnMuaFxcdTAwM2VcXG4gICA2OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQveGZybS5oXFx1MDAzZVxcbiAgIDc6XFx0XFxuICAgODpcXHQjaW5jbHVkZSBcXFwibmV0ZGV2c2ltLmhcXFwiXFxuICAgOTpcXHRcXG4gIDEwOlxcdCNkZWZpbmUgTlNJTV9JUFNFQ19BVVRIX0JJVFNcXHQxMjhcXG4gIDExOlxcdFxcbiAgMTI6XFx0c3RhdGljIHNzaXplX3QgbnNpbV9kYmdfbmV0ZGV2X29wc19yZWFkKHN0cnVjdCBmaWxlICpmaWxwLFxcbiAgMTM6XFx0XFx0XFx0XFx0XFx0XFx0Y2hhciBfX3VzZXIgKmJ1ZmZlcixcXG4gIDE0OlxcdFxcdFxcdFxcdFxcdFxcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxcbiAgMTU6XFx0e1xcbiAgMTY6XFx0XFx0c3RydWN0IG5ldGRldnNpbSAqbnMgPSBmaWxwLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuICAxNzpcXHRcXHRzdHJ1Y3QgbnNpbV9pcHNlYyAqaXBzZWMgPSBcXHUwMDI2bnMtXFx1MDAzZWlwc2VjO1xcbiAgMTg6XFx0XFx0c2l6ZV90IGJ1ZnNpemU7XFxuICAxOTpcXHRcXHRjaGFyICpidWYsICpwO1xcbiAgMjA6XFx0XFx0aW50IGxlbjtcXG4gIDIxOlxcdFxcdGludCBpO1xcbiAgMjI6XFx0XFxuICAyMzpcXHRcXHQvKiB0aGUgYnVmZmVyIG5lZWRlZCBpc1xcbiAgMjQ6XFx0XFx0ICogKG51bSBTQXMgKiAzIGxpbmVzIGVhY2ggKiB+NjAgYnl0ZXMgcGVyIGxpbmUpICsgb25lIG1vcmUgbGluZVxcbiAgMjU6XFx0XFx0ICovXFxuICAyNjpcXHRcXHRidWZzaXplID0gKGlwc2VjLVxcdTAwM2Vjb3VudCAqIDQgKiA2MCkgKyA2MDtcXG4gIDI3OlxcdFxcdGJ1ZiA9IGt6YWxsb2MoYnVmc2l6ZSwgR0ZQX0tFUk5FTCk7XFxuICAyODpcXHRcXHRpZiAoIWJ1ZilcXG4gIDI5OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAgMzA6XFx0XFxuICAzMTpcXHRcXHRwID0gYnVmO1xcbiAgMzI6XFx0XFx0cCArPSBzY25wcmludGYocCwgYnVmc2l6ZSAtIChwIC0gYnVmKSxcXG4gIDMzOlxcdFxcdFxcdCAgICAgICBcXFwiU0EgY291bnQ9JXUgdHg9JXVcXFxcblxcXCIsXFxuICAzNDpcXHRcXHRcXHQgICAgICAgaXBzZWMtXFx1MDAzZWNvdW50LCBpcHNlYy1cXHUwMDNldHgpO1xcbiAgMzU6XFx0XFxuICAzNjpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTlNJTV9JUFNFQ19NQVhfU0FfQ09VTlQ7IGkrKykge1xcbiAgMzc6XFx0XFx0XFx0c3RydWN0IG5zaW1fc2EgKnNhcCA9IFxcdTAwMjZpcHNlYy1cXHUwMDNlc2FbaV07XFxuICAzODpcXHRcXG4gIDM5OlxcdFxcdFxcdGlmICghc2FwLVxcdTAwM2V1c2VkKVxcbiAgNDA6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuICA0MTpcXHRcXG4gIDQyOlxcdFxcdFxcdGlmIChzYXAtXFx1MDAzZXhzLVxcdTAwM2Vwcm9wcy5mYW1pbHkgPT0gQUZfSU5FVDYpXFxuICA0MzpcXHRcXHRcXHRcXHRwICs9IHNjbnByaW50ZihwLCBidWZzaXplIC0gKHAgLSBidWYpLFxcbiAgNDQ6XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJzYVslaV0gJWN4IGlwYWRkcj0lcEk2Y1xcXFxuXFxcIixcXG4gIDQ1OlxcdFxcdFxcdFxcdFxcdCAgICAgICBpLCAoc2FwLVxcdTAwM2VyeCA/ICdyJyA6ICd0JyksIFxcdTAwMjZzYXAtXFx1MDAzZWlwYWRkcik7XFxuICA0NjpcXHRcXHRcXHRlbHNlXFxuICA0NzpcXHRcXHRcXHRcXHRwICs9IHNjbnByaW50ZihwLCBidWZzaXplIC0gKHAgLSBidWYpLFxcbiAgNDg6XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJzYVslaV0gJWN4IGlwYWRkcj0lcEk0XFxcXG5cXFwiLFxcbiAgNDk6XFx0XFx0XFx0XFx0XFx0ICAgICAgIGksIChzYXAtXFx1MDAzZXJ4ID8gJ3InIDogJ3QnKSwgXFx1MDAyNnNhcC1cXHUwMDNlaXBhZGRyWzNdKTtcXG4gIDUwOlxcdFxcdFxcdHAgKz0gc2NucHJpbnRmKHAsIGJ1ZnNpemUgLSAocCAtIGJ1ZiksXFxuICA1MTpcXHRcXHRcXHRcXHQgICAgICAgXFxcInNhWyVpXSAgICBzcGk9MHglMDh4IHByb3RvPTB4JXggc2FsdD0weCUwOHggY3J5cHQ9JWRcXFxcblxcXCIsXFxuICA1MjpcXHRcXHRcXHRcXHQgICAgICAgaSwgYmUzMl90b19jcHUoc2FwLVxcdTAwM2V4cy1cXHUwMDNlaWQuc3BpKSxcXG4gIDUzOlxcdFxcdFxcdFxcdCAgICAgICBzYXAtXFx1MDAzZXhzLVxcdTAwM2VpZC5wcm90bywgYmUzMl90b19jcHUoc2FwLVxcdTAwM2VzYWx0KSwgc2FwLVxcdTAwM2VjcnlwdCk7XFxuICA1NDpcXHRcXHRcXHRwICs9IHNjbnByaW50ZihwLCBidWZzaXplIC0gKHAgLSBidWYpLFxcbiAgNTU6XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJzYVslaV0gICAga2V5PTB4JTA4eCAlMDh4ICUwOHggJTA4eFxcXFxuXFxcIixcXG4gIDU2OlxcdFxcdFxcdFxcdCAgICAgICBpLCBiZTMyX3RvX2NwdShzYXAtXFx1MDAzZWtleVswXSksIGJlMzJfdG9fY3B1KHNhcC1cXHUwMDNla2V5WzFdKSxcXG4gIDU3OlxcdFxcdFxcdFxcdCAgICAgICBiZTMyX3RvX2NwdShzYXAtXFx1MDAzZWtleVsyXSksIGJlMzJfdG9fY3B1KHNhcC1cXHUwMDNla2V5WzNdKSk7XFxuICA1ODpcXHRcXHR9XFxuICA1OTpcXHRcXG4gIDYwOlxcdFxcdGxlbiA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZmZlciwgY291bnQsIHBwb3MsIGJ1ZiwgcCAtIGJ1Zik7XFxuICA2MTpcXHRcXG4gIDYyOlxcdFxcdGtmcmVlKGJ1Zik7XFxuICA2MzpcXHRcXHRyZXR1cm4gbGVuO1xcbiAgNjQ6XFx0fVxcbiAgNjU6XFx0XFxuICA2NjpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpcHNlY19kYmdfZm9wcyA9IHtcXG4gIDY3OlxcdFxcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbiAgNjg6XFx0XFx0Lm9wZW4gPSBzaW1wbGVfb3BlbixcXG4gIDY5OlxcdFxcdC5yZWFkID0gbnNpbV9kYmdfbmV0ZGV2X29wc19yZWFkLFxcbiAgNzA6XFx0fTtcXG4gIDcxOlxcdFxcbiAgNzI6XFx0c3RhdGljIGludCBuc2ltX2lwc2VjX2ZpbmRfZW1wdHlfaWR4KHN0cnVjdCBuc2ltX2lwc2VjICppcHNlYylcXG4gIDczOlxcdHtcXG4gIDc0OlxcdFxcdHUzMiBpO1xcbiAgNzU6XFx0XFxuICA3NjpcXHRcXHRpZiAoaXBzZWMtXFx1MDAzZWNvdW50ID09IE5TSU1fSVBTRUNfTUFYX1NBX0NPVU5UKVxcbiAgNzc6XFx0XFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuICA3ODpcXHRcXG4gIDc5OlxcdFxcdC8qIHNlYXJjaCBzYSB0YWJsZSAqL1xcbiAgODA6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5TSU1fSVBTRUNfTUFYX1NBX0NPVU5UOyBpKyspIHtcXG4gIDgxOlxcdFxcdFxcdGlmICghaXBzZWMtXFx1MDAzZXNhW2ldLnVzZWQpXFxuICA4MjpcXHRcXHRcXHRcXHRyZXR1cm4gaTtcXG4gIDgzOlxcdFxcdH1cXG4gIDg0OlxcdFxcbiAgODU6XFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuICA4NjpcXHR9XFxuICA4NzpcXHRcXG4gIDg4OlxcdHN0YXRpYyBpbnQgbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuICA4OTpcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHhmcm1fc3RhdGUgKnhzLFxcbiAgOTA6XFx0XFx0XFx0XFx0XFx0ICAgICAgIF9fYmUzMiAqbXlrZXksIF9fYmUzMiAqbXlzYWx0KVxcbiAgOTE6XFx0e1xcbiAgOTI6XFx0XFx0Y29uc3QgY2hhciBhZXNfZ2NtX25hbWVbXSA9IFxcXCJyZmM0MTA2KGdjbShhZXMpKVxcXCI7XFxuICA5MzpcXHRcXHR1bnNpZ25lZCBjaGFyICprZXlfZGF0YTtcXG4gIDk0OlxcdFxcdGNoYXIgKmFsZ19uYW1lID0gTlVMTDtcXG4gIDk1OlxcdFxcdGludCBrZXlfbGVuO1xcbiAgOTY6XFx0XFxuICA5NzpcXHRcXHRpZiAoIXhzLVxcdTAwM2VhZWFkKSB7XFxuICA5ODpcXHRcXHRcXHRuZXRkZXZfZXJyKGRldiwgXFxcIlVuc3VwcG9ydGVkIElQc2VjIGFsZ29yaXRobVxcXFxuXFxcIik7XFxuICA5OTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMTAwOlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6NTc6NDAuNTY4NTc5MTJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI2NTI4MjUwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSB3ZSBnby4uLlxuXG4qKkRpdmluZyBpbnRvIGBkcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuY2AqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgYGlwc2VjLmNgIGZpbGUgd2l0aGluIHRoZSBgbmV0ZGV2c2ltYCBkaXJlY3RvcnkuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciBoYW5kbGUgb24gaG93IHRoZSBzaW11bGF0ZWQgSVBzZWMgZnVuY3Rpb25hbGl0eSBpcyBpbXBsZW1lbnRlZCB3aXRoaW4gdGhlIG5ldGRldnNpbSBlbnZpcm9ubWVudC4gSSdtIGhvcGluZyB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGV5J3JlIGhhbmRsaW5nIHRoZSBlbmNhcHN1bGF0aW9uIGFuZCBkZWNhcHN1bGF0aW9uLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBzeW50aGV0aWMgbmF0dXJlIG9mIHRoaXMgdmlydHVhbCBuZXR3b3JrIGludGVyZmFjZS4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyB0aGV5J3JlIG1pbWlja2luZyB0aGUgSVBzZWMgU0EgbmVnb3RpYXRpb24gYW5kIGtleSBtYW5hZ2VtZW50IHdpdGhvdXQgcmVseWluZyBvbiBoYXJkd2FyZSBvZmZsb2FkIG9yIHNwZWNpZmljIGNyeXB0byBhY2NlbGVyYXRvcnMsIHRoYXQgd291bGQgYmUgdXNlbGVzcyBpbiB0aGlzIGNvbnRleHQuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWTigJRzcGVjaWZpY2FsbHksIHRoZSBzaW11bGF0ZWQgU2VjdXJpdHkgQXNzb2NpYXRpb25zIChTQXMpIGFuZCBob3cgdGhleSdyZSByZXByZXNlbnRlZC4gQXJlIHRoZXkgdXNpbmcgYSBzaW1wbGlmaWVkIG1vZGVsLCBvciBhIG1vcmUgZmFpdGhmdWwgKHRob3VnaCBhYnN0cmFjdGVkKSByZXByZXNlbnRhdGlvbiBvZiBJS0UvSVBzZWMgcHJvdG9jb2xzPyBJJ2xsIGJlIGxvb2tpbmcgZm9yIGhvdyB0aGV5IGFyZSBoYW5kbGluZyBhbnkgc3RhdGUgdHJhbnNpdGlvbnMsIGFuZCBob3cgdGhlIHNpbXVsYXRpb24gaGFuZGxlcyBkaWZmZXJlbnQgcGFja2V0IGZsb3dzLCBhbmQgaG93IGl0IGRlYWxzIHdpdGggdGhlIHBvdGVudGlhbCBmb3IgZnJhZ21lbnRhdGlvbiBvciByZWFzc2VtYmx5IHdpdGhpbiB0aGUgc2ltdWxhdGVkIElQc2VjIHR1bm5lbC4gRXNzZW50aWFsbHksIEkgbmVlZCB0byBzZWUgaWYgaXQgcHJvdmlkZXMgYW4gYWNjdXJhdGUsIG9yIGF0IGxlYXN0IGEgdXNhYmxlLCBhYnN0cmFjdGlvbiBvZiBJUHNlYywgZm9yIHRlc3QgcHVycG9zZXMsIHdpdGhpbiB0aGlzIG5ldHdvcmsgc2ltdWxhdGlvbiBlbnZpcm9ubWVudC4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3MDEsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjU3OjQyLjgzMzg2NjIzNloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAxOlxcdFxcbiAxMDI6XFx0XFx0aWYgKHhzLVxcdTAwM2VhZWFkLVxcdTAwM2VhbGdfaWN2X2xlbiAhPSBOU0lNX0lQU0VDX0FVVEhfQklUUykge1xcbiAxMDM6XFx0XFx0XFx0bmV0ZGV2X2VycihkZXYsIFxcXCJJUHNlYyBvZmZsb2FkIHJlcXVpcmVzICVkIGJpdCBhdXRoZW50aWNhdGlvblxcXFxuXFxcIixcXG4gMTA0OlxcdFxcdFxcdFxcdCAgIE5TSU1fSVBTRUNfQVVUSF9CSVRTKTtcXG4gMTA1OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAxMDY6XFx0XFx0fVxcbiAxMDc6XFx0XFxuIDEwODpcXHRcXHRrZXlfZGF0YSA9IFxcdTAwMjZ4cy1cXHUwMDNlYWVhZC1cXHUwMDNlYWxnX2tleVswXTtcXG4gMTA5OlxcdFxcdGtleV9sZW4gPSB4cy1cXHUwMDNlYWVhZC1cXHUwMDNlYWxnX2tleV9sZW47XFxuIDExMDpcXHRcXHRhbGdfbmFtZSA9IHhzLVxcdTAwM2VhZWFkLVxcdTAwM2VhbGdfbmFtZTtcXG4gMTExOlxcdFxcbiAxMTI6XFx0XFx0aWYgKHN0cmNtcChhbGdfbmFtZSwgYWVzX2djbV9uYW1lKSkge1xcbiAxMTM6XFx0XFx0XFx0bmV0ZGV2X2VycihkZXYsIFxcXCJVbnN1cHBvcnRlZCBJUHNlYyBhbGdvcml0aG0gLSBwbGVhc2UgdXNlICVzXFxcXG5cXFwiLFxcbiAxMTQ6XFx0XFx0XFx0XFx0ICAgYWVzX2djbV9uYW1lKTtcXG4gMTE1OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAxMTY6XFx0XFx0fVxcbiAxMTc6XFx0XFxuIDExODpcXHRcXHQvKiAxNjAgYWNjb3VudHMgZm9yIDE2IGJ5dGUga2V5IGFuZCA0IGJ5dGUgc2FsdCAqL1xcbiAxMTk6XFx0XFx0aWYgKGtleV9sZW4gXFx1MDAzZSBOU0lNX0lQU0VDX0FVVEhfQklUUykge1xcbiAxMjA6XFx0XFx0XFx0Km15c2FsdCA9ICgoX19iZTMyICopa2V5X2RhdGEpWzRdO1xcbiAxMjE6XFx0XFx0fSBlbHNlIGlmIChrZXlfbGVuID09IE5TSU1fSVBTRUNfQVVUSF9CSVRTKSB7XFxuIDEyMjpcXHRcXHRcXHQqbXlzYWx0ID0gMDtcXG4gMTIzOlxcdFxcdH0gZWxzZSB7XFxuIDEyNDpcXHRcXHRcXHRuZXRkZXZfZXJyKGRldiwgXFxcIklQc2VjIGh3IG9mZmxvYWQgb25seSBzdXBwb3J0cyAxMjggYml0IGtleXMgd2l0aCBvcHRpb25hbCAzMiBiaXQgc2FsdFxcXFxuXFxcIik7XFxuIDEyNTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMTI2OlxcdFxcdH1cXG4gMTI3OlxcdFxcdG1lbWNweShteWtleSwga2V5X2RhdGEsIDE2KTtcXG4gMTI4OlxcdFxcbiAxMjk6XFx0XFx0cmV0dXJuIDA7XFxuIDEzMDpcXHR9XFxuIDEzMTpcXHRcXG4gMTMyOlxcdHN0YXRpYyBpbnQgbnNpbV9pcHNlY19hZGRfc2Eoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gMTMzOlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHhmcm1fc3RhdGUgKnhzLFxcbiAxMzQ6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDEzNTpcXHR7XFxuIDEzNjpcXHRcXHRzdHJ1Y3QgbnNpbV9pcHNlYyAqaXBzZWM7XFxuIDEzNzpcXHRcXHRzdHJ1Y3QgbmV0ZGV2c2ltICpucztcXG4gMTM4OlxcdFxcdHN0cnVjdCBuc2ltX3NhIHNhO1xcbiAxMzk6XFx0XFx0dTE2IHNhX2lkeDtcXG4gMTQwOlxcdFxcdGludCByZXQ7XFxuIDE0MTpcXHRcXG4gMTQyOlxcdFxcdG5zID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4gMTQzOlxcdFxcdGlwc2VjID0gXFx1MDAyNm5zLVxcdTAwM2VpcHNlYztcXG4gMTQ0OlxcdFxcbiAxNDU6XFx0XFx0aWYgKHhzLVxcdTAwM2VpZC5wcm90byAhPSBJUFBST1RPX0VTUCBcXHUwMDI2XFx1MDAyNiB4cy1cXHUwMDNlaWQucHJvdG8gIT0gSVBQUk9UT19BSCkge1xcbiAxNDY6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIlVuc3VwcG9ydGVkIHByb3RvY29sIGZvciBpcHNlYyBvZmZsb2FkXFxcIik7XFxuIDE0NzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMTQ4OlxcdFxcdH1cXG4gMTQ5OlxcdFxcbiAxNTA6XFx0XFx0aWYgKHhzLVxcdTAwM2VjYWxnKSB7XFxuIDE1MTpcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiQ29tcHJlc3Npb24gb2ZmbG9hZCBub3Qgc3VwcG9ydGVkXFxcIik7XFxuIDE1MjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMTUzOlxcdFxcdH1cXG4gMTU0OlxcdFxcbiAxNTU6XFx0XFx0aWYgKHhzLVxcdTAwM2V4c28udHlwZSAhPSBYRlJNX0RFVl9PRkZMT0FEX0NSWVBUTykge1xcbiAxNTY6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIlVuc3VwcG9ydGVkIGlwc2VjIG9mZmxvYWQgdHlwZVxcXCIpO1xcbiAxNTc6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDE1ODpcXHRcXHR9XFxuIDE1OTpcXHRcXG4gMTYwOlxcdFxcdC8qIGZpbmQgdGhlIGZpcnN0IHVudXNlZCBpbmRleCAqL1xcbiAxNjE6XFx0XFx0cmV0ID0gbnNpbV9pcHNlY19maW5kX2VtcHR5X2lkeChpcHNlYyk7XFxuIDE2MjpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbiAxNjM6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIk5vIHNwYWNlIGZvciBTQSBpbiBSeCB0YWJsZSFcXFwiKTtcXG4gMTY0OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDE2NTpcXHRcXHR9XFxuIDE2NjpcXHRcXHRzYV9pZHggPSAodTE2KXJldDtcXG4gMTY3OlxcdFxcbiAxNjg6XFx0XFx0bWVtc2V0KFxcdTAwMjZzYSwgMCwgc2l6ZW9mKHNhKSk7XFxuIDE2OTpcXHRcXHRzYS51c2VkID0gdHJ1ZTtcXG4gMTcwOlxcdFxcdHNhLnhzID0geHM7XFxuIDE3MTpcXHRcXG4gMTcyOlxcdFxcdGlmIChzYS54cy1cXHUwMDNlaWQucHJvdG8gXFx1MDAyNiBJUFBST1RPX0VTUClcXG4gMTczOlxcdFxcdFxcdHNhLmNyeXB0ID0geHMtXFx1MDAzZWVhbGcgfHwgeHMtXFx1MDAzZWFlYWQ7XFxuIDE3NDpcXHRcXG4gMTc1OlxcdFxcdC8qIGdldCB0aGUga2V5IGFuZCBzYWx0ICovXFxuIDE3NjpcXHRcXHRyZXQgPSBuc2ltX2lwc2VjX3BhcnNlX3Byb3RvX2tleXMoZGV2LCB4cywgc2Eua2V5LCBcXHUwMDI2c2Euc2FsdCk7XFxuIDE3NzpcXHRcXHRpZiAocmV0KSB7XFxuIDE3ODpcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiRmFpbGVkIHRvIGdldCBrZXkgZGF0YSBmb3IgU0EgdGFibGVcXFwiKTtcXG4gMTc5OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDE4MDpcXHRcXHR9XFxuIDE4MTpcXHRcXG4gMTgyOlxcdFxcdGlmICh4cy1cXHUwMDNleHNvLmRpciA9PSBYRlJNX0RFVl9PRkZMT0FEX0lOKVxcbiAxODM6XFx0XFx0XFx0c2EucnggPSB0cnVlO1xcbiAxODQ6XFx0XFxuIDE4NTpcXHRcXHRpZiAoeHMtXFx1MDAzZXByb3BzLmZhbWlseSA9PSBBRl9JTkVUNilcXG4gMTg2OlxcdFxcdFxcdG1lbWNweShzYS5pcGFkZHIsIFxcdTAwMjZ4cy1cXHUwMDNlaWQuZGFkZHIuYTYsIDE2KTtcXG4gMTg3OlxcdFxcdGVsc2VcXG4gMTg4OlxcdFxcdFxcdG1lbWNweShcXHUwMDI2c2EuaXBhZGRyWzNdLCBcXHUwMDI2eHMtXFx1MDAzZWlkLmRhZGRyLmE0LCA0KTtcXG4gMTg5OlxcdFxcbiAxOTA6XFx0XFx0LyogdGhlIHByZXBhcmF0aW9ucyB3b3JrZWQsIHNvIHNhdmUgdGhlIGluZm8gKi9cXG4gMTkxOlxcdFxcdG1lbWNweShcXHUwMDI2aXBzZWMtXFx1MDAzZXNhW3NhX2lkeF0sIFxcdTAwMjZzYSwgc2l6ZW9mKHNhKSk7XFxuIDE5MjpcXHRcXG4gMTkzOlxcdFxcdC8qIHRoZSBYRlJNIHN0YWNrIGRvZXNuJ3QgbGlrZSBvZmZsb2FkX2hhbmRsZSA9PSAwLFxcbiAxOTQ6XFx0XFx0ICogc28gYWRkIGEgYml0ZmxhZyBpbiBjYXNlIG91ciBhcnJheSBpbmRleCBpcyAwXFxuIDE5NTpcXHRcXHQgKi9cXG4gMTk2OlxcdFxcdHhzLVxcdTAwM2V4c28ub2ZmbG9hZF9oYW5kbGUgPSBzYV9pZHggfCBOU0lNX0lQU0VDX1ZBTElEO1xcbiAxOTc6XFx0XFx0aXBzZWMtXFx1MDAzZWNvdW50Kys7XFxuIDE5ODpcXHRcXG4gMTk5OlxcdFxcdHJldHVybiAwO1xcbiAyMDA6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzo1Nzo0Mi44MzM5NjgzMTZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzAxMDk0ODkyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOZXRkZXZzaW0gSVBzZWMgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgdGhpcyBwYXRjaCBoYXMgY2hhbmdlZC4gSXQgbG9va3MgbGlrZSBpdCdzIGEgc2VyaWVzIG9mIG1vZGlmaWNhdGlvbnMgcHJpbWFyaWx5IGZvY3VzZWQgb24gdGhlIGBuZXRkZXZzaW1gJ3MgSVBzZWMgaW1wbGVtZW50YXRpb24uXG5cbjEuICAqKkVuZGlhbm5lc3MgTWF0dGVyczoqKiBUaGUgaW5pdGlhbCBjaGFuZ2VzIGFyZSBzdHJhaWdodGZvcndhcmQ6IGl0J3MgdXBkYXRpbmcgYHUzMiBrZXlbNF1gIGFuZCBgdTMyIHNhbHRgIHRvIHVzZSBiaWctZW5kaWFuIHJlcHJlc2VudGF0aW9ucyAoYF9fYmUzMiBrZXlbNF1gLCBgX19iZTMyIHNhbHRgKSBpbiBgbnNpbV9zYWAuIEl0IGFsc28gdXBkYXRlcyB0aGUgcGFyYW1ldGVyIHR5cGVzIGluIHRoZSBgbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzKClgIGZ1bmN0aW9uIHRvIHJlZmxlY3QgdGhpcyBlbmRpYW4gY2hhbmdlLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBuZXR3b3JrIHByb3RvY29scyB3aGVyZSBieXRlIG9yZGVyIGlzIHBhcmFtb3VudCBmb3IgZGF0YSBpbnRlcnByZXRhdGlvbi4gQWxzbywgdGhlIHBhdGNoIGNvbnZlcnRzIHRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiB3aXRoIGAoKF9fYmUzMiAqKWtleV9kYXRhKVs0XWAuXG4yLiAgKipEZWJ1ZyBPdXRwdXQgQ29ycmVjdG5lc3M6KiogSXQncyB0cmFuc2xhdGluZyB0aGUgaW50ZXJuYWwgYmlnLWVuZGlhbiByZXByZXNlbnRhdGlvbiB0byB0aGUgQ1BVJ3MgbmF0aXZlIGJ5dGUgb3JkZXIgKGBiZTMyX3RvX2NwdSgpYCkgd2hlbiBwcmludGluZyB0aGUgc2FsdCBhbmQga2V5IHZhbHVlcyBpbiBgbnNpbV9kYmdfbmV0ZGV2X29wc19yZWFkKClgLiBUaGlzIGVuc3VyZXMgdGhlIGRlYnVnIG91dHB1dCBpcyBodW1hbi1yZWFkYWJsZSBhbmQgZG9lc24ndCBjb25mdXNlIHRoaW5ncy5cbjMuICAqKlNlbGZ0ZXN0IEFkanVzdG1lbnRzOioqIFRoZSBmaW5hbCBjaGFuZ2UgaXMgYW4gdXBkYXRlIHRvIHRoZSBleHBlY3RlZCBvdXRwdXQgZm9ybWF0IGluIHRoZSBgcnRuZXRsaW5rLnNoYCBzZWxmLXRlc3RzIHRvIGFjY29tbW9kYXRlIHRoZSB1cGRhdGVkIGRlYnVnIG91dHB1dCBmb3JtYXQuIFRoaXMgY29uZmlybXMgdGhlIGltcGFjdCBvZiB0aGUgZW5kaWFubmVzcyBjaGFuZ2UgcHJvcGFnYXRlcyBjb3JyZWN0bHkuXG5cbk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIG1lcml0cyBmdXp6aW5nLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlJ3MgZW5vdWdoIHBvdGVudGlhbCBmb3IgaW50cm9kdWNpbmcgYnVncyB0aGF0IGNvdWxkIGJlIGRpc2NvdmVyZWQgdGhyb3VnaCBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IHRob3VnaHQgaXMgdGhlIHJlYWNoYWJpbGl0eSBxdWVzdGlvbi4gQ2FuIEkgZXZlbiBleGVyY2lzZSB0aGlzIGNvZGU/IFllcywgYG5ldGRldnNpbWAgaXMgcGVyZmVjdCBmb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBhbmQgR0NFLCBtYWtpbmcgaXQgaWRlYWwgZm9yIGZ1enppbmcgYmVjYXVzZSBpdCdzIGNvbXBsZXRlbHkgdmlydHVhbCBhbmQgYWNjZXNzaWJsZS4gU3l6a2FsbGVyJ3MgZXh0ZW5zaXZlIHVzZSBpcyBhbm90aGVyIGdyZWF0IGluZGljYXRvci5cblxuSXMgdGhlIFhGUk0gb2ZmbG9hZCBwYXRoIHJlYWNoYWJsZT8gWWVzLCBhbmQgaXQncyByZWFjaGFibGUgdGhyb3VnaCB4ZnJtIG5ldGxpbmsgLyBpcHNlYyBvZmZsb2FkIG1lc3NhZ2VzIChgWEZSTV9NU0dfTkVXU0FgLCBgeGRvX2Rldl9zdGF0ZV9hZGRgIHZpYSBgbnNpbV94ZnJtZGV2X29wc2AgLyBgbnNpbV9pcHNlY19hZGRfc2FgKSwgYW5kIGJ5IHJlYWRpbmcgZGVidWdmcyBgbnNpbV9kYmdfbmV0ZGV2X29wc19yZWFkYC4gVGhpcyBpcyBhIHNvbGlkIGNvbm5lY3Rpb24gYW5kIGEgdmVyeSBpbXBvcnRhbnQgYXNwZWN0IG9mIHRoZSB3aG9sZSBzZXR1cC5cblxuKipXb3J0aEZ1enppbmcgQW5hbHlzaXM6KipcblxuKiAgICoqUmVhY2hhYmlsaXR5OioqIFRoZSBjb2RlIGlzIGNvbXBsZXRlbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIGVudmlyb25tZW50cy4gVGhpcyBpcyBhIHByaW1hcnkgcG9zaXRpdmUgY3JpdGVyaW9uLlxuKiAgICoqTkZDSS9SZWZhY3RvcmluZzoqKiBJIG5lZWQgdG8gYmUgc2tlcHRpY2FsIG9mIGFueSBcIm5vIGZ1bmN0aW9uYWwgY2hhbmdlXCIgb3IgXCJyZWZhY3RvcmluZ1wiIGNsYWltcy5cbiogICAqKk5lZ2F0aXZlIENyaXRlcmlhOioqXG4gICAgKiAgIE5vIG5vbi1rZXJuZWwgY2hhbmdlcy5cbiAgICAqICAgTm8gc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLCBhcyBpdCdzIHNvZnR3YXJlLWJhc2VkLlxuICAgICogICBObyB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMuXG4qICAgKipQb3NpdGl2ZSBDcml0ZXJpYToqKlxuICAgICogICBSZWFjaGFibGUgZHJpdmVycyBhbmQgcHJvdG9jb2xzIChOZXRsaW5rLCBkZWJ1Z2ZzLCBldGMuKS5cbiAgICAqICAgUmVzdHJ1Y3R1cmluZyBvZiBkYXRhIHN0cnVjdHVyZXMgKHRoZSBlbmRpYW4gY2hhbmdlIGlzIHNpZ25pZmljYW50KS5cblxuKipDb25jbHVzaW9uOioqIEkgd291bGQgc2F5IHRoaXMgcGF0Y2ggKmRlZmluaXRlbHkqIGp1c3RpZmllcyBmdXp6aW5nIChgV29ydGhGdXp6aW5nID0gdHJ1ZWApLiBUaGUgY2hhbmdlcyB0b3VjaCBjb3JlIGtlcm5lbCBjb2RlIChgZHJpdmVycy9uZXRgKSwgYWZmZWN0IGRhdGEgc3RydWN0dXJlcyByZWxhdGVkIHRvIG5ldHdvcmsgcHJvdG9jb2xzIChJUHNlYywgWEZSTSksIGFuZCB0aGUgcGF0aCBpcyByZWFkaWx5IGFjY2Vzc2libGUuIEkgc2hvdWxkIGludmVzdGlnYXRlIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgKERFQlVHXFxfRlMsIElORVQsIFhGUk1cXF9PRkZMT0FELCBldGMuKSB0byBjb25maXJtIGFueSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBhbmQgcG90ZW50aWFsIGxpbWl0YXRpb25zIG9mIHRoZSBtb2R1bGUuIEdpdmVuIHRoYXQgdGhlIFhGUk1fT0ZGTE9BRCBLY29uZmlnIG9wdGlvbiBpcyBhIGRlcGVuZGVuY3kgYW5kIGBuZXRkZXZzaW0tb2JqcyArPSBpcHNlYy5vYCB1c2VzIGl0IGluIHRoZSBNYWtlZmlsZSwgdGhhdCBpcyBhbiBvYnZpb3VzIGVudHJ5IHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjY0OSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjU3OjQ5Ljg0NDkxOTQzN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQzMzEwMzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBYRlJNX09GRkxPQURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL0tjb25maWc9NT1jb25maWcgWEZSTVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0xMC1cXG5uZXQveGZybS9LY29uZmlnOjExOmNvbmZpZyBYRlJNX09GRkxPQURcXG5uZXQveGZybS9LY29uZmlnLTEyLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6NTc6NTAuMjg4MjM2MTNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg3MDI5NTIzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIFhGUk0gQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIHplcm8gaW4gb24gYG5ldC94ZnJtL0tjb25maWdgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbmF2aWdhdGUgc3RyYWlnaHQgdG8gbGluZSAxMS4gSSdtIHByb2JhYmx5IGxvb2tpbmcgZm9yIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24sIHBlcmhhcHMgcmVsYXRlZCB0byBhIHJlY2VudCBidWcgcmVwb3J0IG9yIGVuaGFuY2VtZW50IHJlcXVlc3QuIExpbmUgMTEgaXMgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIHNldHRpbmdzIGZvciB0aGUgWEZSTSBzdWJzeXN0ZW0gYXJlIGRlZmluZWQsIG9yIGEgbWFqb3IgZGVwZW5kZW5jeSBpcyBlc3RhYmxpc2hlZC4gSSBuZWVkIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGNvbnRleHQgc3Vycm91bmRpbmcgdGhhdCBsaW5lIHRvIHNlZSBob3cgaXQgYWZmZWN0cyB0aGUgc3BlY2lmaWMgZmVhdHVyZSBvciBpc3N1ZSBJJ20gd29ya2luZyB3aXRoLiBUaW1lIHRvIHNlZSB3aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQzMjIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzo1Nzo1Mi4xNTg1MzM5MTJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBYRlJNIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdGNvbmZpZyBYRlJNXFxuICAgNjpcXHRcXHRib29sXFxuICAgNzpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA4OlxcdFxcdHNlbGVjdCBHUk9fQ0VMTFNcXG4gICA5OlxcdFxcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xcbiAgMTA6XFx0XFxuICAxMTpcXHRjb25maWcgWEZSTV9PRkZMT0FEXFxuICAxMjpcXHRcXHRib29sXFxuICAxMzpcXHRcXG4gIDE0OlxcdGNvbmZpZyBYRlJNX0FMR09cXG4gIDE1OlxcdFxcdHRyaXN0YXRlXFxuICAxNjpcXHRcXHRzZWxlY3QgWEZSTVxcbiAgMTc6XFx0XFx0c2VsZWN0IENSWVBUT1xcbiAgMTg6XFx0XFx0c2VsZWN0IENSWVBUT19BRUFEXFxuICAxOTpcXHRcXHRzZWxlY3QgQ1JZUFRPX0hBU0hcXG4gIDIwOlxcdFxcdHNlbGVjdCBDUllQVE9fU0tDSVBIRVJcXG4gIDIxOlxcdFxcbiAgMjI6XFx0aWYgSU5FVFxcbiAgMjM6XFx0Y29uZmlnIFhGUk1fVVNFUlxcbiAgMjQ6XFx0XFx0dHJpc3RhdGUgXFxcIlRyYW5zZm9ybWF0aW9uIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VcXFwiXFxuICAyNTpcXHRcXHRzZWxlY3QgWEZSTV9BTEdPXFxuICAyNjpcXHRcXHRoZWxwXFxuICAyNzpcXHRcXHQgIFN1cHBvcnQgZm9yIFRyYW5zZm9ybWF0aW9uKFhGUk0pIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VcXG4gIDI4OlxcdFxcdCAgbGlrZSBJUHNlYyB1c2VkIGJ5IG5hdGl2ZSBMaW51eCB0b29scy5cXG4gIDI5OlxcdFxcbiAgMzA6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzo1Nzo1Mi4xNTg2MDk4NTJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzI2MDA4OTM3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyBgWEZSTV9PRkZMT0FEYCBTZWxlY3Rpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29kZSBoYXMgbGFuZGVkIG9uIGBYRlJNX09GRkxPQURgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCAqd2hvKiBpcyBjaG9vc2luZyB0aGlzPyBXaGF0J3MgZHJpdmluZyB0aGlzIHNlbGVjdGlvbj9cIiBJJ20gaW1tZWRpYXRlbHkgdHJ5aW5nIHRvIHRyYWNlIGJhY2sgdGhlIGRlY2lzaW9uIHBhdGguIElzIGl0IGEgZGVmYXVsdCBjb25maWd1cmF0aW9uLCBhIHNwZWNpZmljIHVzZXIgc2V0dGluZywgb3Igc29tZXRoaW5nIGRldGVybWluZWQgZHluYW1pY2FsbHkgYmFzZWQgb24gdGhlIHN5c3RlbSdzIGNhcGFiaWxpdGllcz8gS25vd2luZyB0aGUgc291cmNlIGlzIGNydWNpYWwuXG5cbkknbSB0aGlua2luZyBhYm91dCB0aGUgdmFyaW91cyBrZXJuZWwgbW9kdWxlcywgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgbmV0d29yayBpbnRlcmZhY2Ugc2V0dGluZ3MgdGhhdCBjb3VsZCBpbmZsdWVuY2UgdGhpcyBjaG9pY2UuIElzIGl0IHRoZSBoYXJkd2FyZSBpdHNlbGYgc2lnbmFsaW5nIG9mZmxvYWQgY2FwYWJpbGl0aWVzPyBJcyB0aGVyZSBhIHBvbGljeSBzZXR0aW5nIGNvbmZpZ3VyZWQgaW4gdGhlIFhGUk0gc3Vic3lzdGVtIHRoYXQgaXMgZGlyZWN0aW5nIHRoZSB1c2Ugb2YgYW4gb2ZmbG9hZCBlbmdpbmU/IE9yIGhhcyBzb21lIGFwcGxpY2F0aW9uIHJlcXVlc3RlZCBpdCB0aHJvdWdoIHNvbWUgc3BlY2lmaWMgc29ja2V0IG9wdGlvbiBvciBpbnRlcmZhY2U/XG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBXaGF0J3MgdGhlIHRhcmdldCBzY2VuYXJpbz8gSXMgdGhpcyBmb3IgYSBzcGVjaWZpYyBWUE4gdHVubmVsIHNldHVwLCBhIGJ1bGsgZGF0YSB0cmFuc2Zlciwgb3Igc29tZSBvdGhlciBuZXR3b3JrLWludGVuc2l2ZSBhcHBsaWNhdGlvbj8gVGhlIGNvbnRleHQgd2lsbCByZXZlYWwgdGhlIHJlbGV2YW50IGRlY2lzaW9uIGZhY3RvcnMuIFRoZSBzcGVjaWZpYyBuZXR3b3JrIHRyYWZmaWMgcGF0dGVybnMgd291bGQgcHJvdmlkZSBpbXBvcnRhbnQgY29udGV4dC5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIHRoZSBjb25kaXRpb25hbCBsb2dpYyBmb3IgdGhpcyBjaG9pY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSBpdCdzIGJlZW4gdHJpZ2dlcmVkLiBJJ20gbG9va2luZyBmb3IgdGhlIGZsYWdzLCBwYXJhbWV0ZXJzLCBhbmQgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRoYXQgYXJlIGxlYWRpbmcgdG8gdGhpcyBwYXJ0aWN1bGFyIGNvZGUgcGF0aC4gSSB3YW50IHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzIG9yIGNvbnN0cmFpbnRzIHRoYXQgY29tZSBhbG9uZyB3aXRoIGVuYWJsaW5nIG9mZmxvYWQuIEZpbmFsbHkgSSB3aWxsIGVuc3VyZSB0aGlzIGNvZGUgd29uJ3QgY2F1c2UgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uIG9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gSXQgbmVlZHMgdG8gYmUgdGhlIHJpZ2h0IGNob2ljZSBmb3IgdGhlIHNpdHVhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4MzksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjU3OjU1LjQxODcwMTU3MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA2MjUyMzk3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgWEZSTV9PRkZMT0FEXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9MzY5PWNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM3MS1cXHRkZXBlbmRzIG9uIElORVRfRVNQXFxubmV0L2lwdjQvS2NvbmZpZzozNzI6XFx0c2VsZWN0IFhGUk1fT0ZGTE9BRFxcbm5ldC9pcHY0L0tjb25maWctMzczLVxcdGRlZmF1bHQgblxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz03Nz1jb25maWcgSU5FVDZfRVNQX09GRkxPQURcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctNzktXFx0ZGVwZW5kcyBvbiBJTkVUNl9FU1BcXG5uZXQvaXB2Ni9LY29uZmlnOjgwOlxcdHNlbGVjdCBYRlJNX09GRkxPQURcXG5uZXQvaXB2Ni9LY29uZmlnLTgxLVxcdGRlZmF1bHQgblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzo1Nzo1Ny40ODEyMzEyNTlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTgzNjE3NTQ4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2ggZm9yIE5ldGRldnNpbSBJUHNlYyBPZmZsb2FkKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIGl0J3MgZGVhbGluZyB3aXRoIHRoZSBuZXRkZXZzaW0gZHJpdmVyLCBzcGVjaWZpY2FsbHkgaXRzIElQc2VjIG9mZmxvYWQgZnVuY3Rpb25hbGl0eS4gRmlyc3QsIGxldCdzIG5haWwgZG93biB0aGUgZGVwZW5kZW5jaWVzLiBgWEZSTV9PRkZMT0FEYCBpcyB0aGUgY29yZSBoZXJlLCBlbmFibGVkIGJ5IGVpdGhlciBgSU5FVF9FU1BfT0ZGTE9BRGAgb3IgYElORVQ2X0VTUF9PRkZMT0FEYC4gIEFuZCBgTkVUREVWU0lNYCByZXF1aXJlcyBgREVCVUdfRlNgIGFuZCBgSU5FVGAuIGBJTkVUX0VTUF9PRkZMT0FEYCBhbHNvIG5lZWRzIGBJTkVUX0VTUGAuICBgWEZSTV9PRkZMT0FEYCBpcyBpdHMgb3duIGNvbmZpZyBvcHRpb24gYXMgd2VsbCwgaW5kZXBlbmRlbnQgb2YgdGhvc2UuIExldCdzIG1ha2UgYSBub3RlIG9mIHRoZSBjb25maWdzIGludm9sdmVkOiBgTkVUREVWU0lNYCwgYFhGUk1fT0ZGTE9BRGAsIGBJTkVUX0VTUF9PRkZMT0FEYCwgYW5kIGBERUJVR19GU2AuXG5cbk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyAqYWN0dWFsbHkqIGJlaW5nIG1vZGlmaWVkLiBMb29raW5nIGF0IHRoZSBjb2RlLCBpdCBzZWVtcyB0aGUgcGF0Y2ggaXMgdG91Y2hpbmcgdGhlc2UgZnVuY3Rpb25zOiBgbnNpbV9kYmdfbmV0ZGV2X29wc19yZWFkYCwgYG5zaW1faXBzZWNfcGFyc2VfcHJvdG9fa2V5c2AsIGBuc2ltX2lwc2VjX2FkZF9zYWAsIGFuZCBgbnNpbV9pcHNlY190eGAuIE5vdywgbGV0J3Mgc2VlIGlmIHRob3NlIGFyZSB0aGUgKm9ubHkqIGZ1bmN0aW9ucyBpbiBgZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmNgLiBBbHJpZ2h0LCBsb29rcyBsaWtlIHRoZXJlIGFyZSBvdGhlciBmdW5jdGlvbnMgdGhlcmUsIGJ1dCB0aGVzZSBhcmUgdGhlIG9uZXMgYmVpbmcgZGlyZWN0bHkgY2hhbmdlZC4gYG5zaW1faXBzZWNfYWRkX3NhYCBjYWxscyBgbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzYCBhbmQgc2V0cyB1cCBgbnNpbV9zYWAsIGdvdCBpdC5cblxuQXJlIGFueSBvZiB0aGVzZSBmdW5jdGlvbnMgd2lkZWx5IHVzZWQ/IE5vLCB0aGV5IHNlZW0gc3BlY2lmaWMgdG8gdGhlIG5ldGRldnNpbSBJUHNlYyBvZmZsb2FkIHBhdGguXG5cbkFscmlnaHQsIG5vdyBsZXQncyB0aGluayB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMuIFRoaXMgcGF0Y2ggZml4ZXMgZW5kaWFubmVzcyBpc3N1ZXMgaW4gdGhlIGhhbmRsaW5nIG9mIElQc2VjIGtleXMgYW5kIHNhbHQgd2l0aGluIG5ldGRldnNpbS4gSXQgdXBkYXRlcyB0aGUgU0EgZGF0YSB0eXBlcyB0byBgX19iZTMyYCwgY29ycmVjdC4gYG5zaW1faXBzZWNfcGFyc2VfcHJvdG9fa2V5cygpYCBpcyBmaXhlZC4gSXQgYWxzbyBjbGVhbnMgdXAgdGhlIHZhbHVlIGNvbnZlcnNpb25zIGluIGBuc2ltX2RiZ19uZXRkZXZfb3BzX3JlYWRgLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHRocm91Z2ggWEZSTSBuZXRsaW5rIGFuZCBkZWJ1Z2ZzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFNvIHllcywgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIEl0J3MgaW4gYSBwYXRoIHRoYXQncyB1c2VkLCBidXQgbm90IG5lY2Vzc2FyaWx5IGEgXCJjb3JlXCIgbmV0d29ya2luZyBjb21wb25lbnQuXG5cbk9rYXksIGxldCdzIHN1bW1hcml6ZTpcbi0gICBgV29ydGhGdXp6aW5nYDogVHJ1ZS5cbi0gICBgUmVhc29uaW5nYDogVGhlIHBhdGNoIGFkZHJlc3NlcyBlbmRpYW5uZXNzIGlzc3VlcyBpbiBuZXRkZXZzaW0ncyBJUHNlYyBrZXkgYW5kIHNhbHQgaGFuZGxpbmcuICBUaGUgcGF0Y2ggdXBkYXRlcyBTQSBkYXRhIHR5cGVzIHRvIGBfX2JlMzJgLCBmaXhpbmcgYG5zaW1faXBzZWNfcGFyc2VfcHJvdG9fa2V5cygpYCBhbmQgY2xlYW5pbmcgdXAgdmFsdWUgY29udmVyc2lvbnMgaW4gYG5zaW1fZGJnX25ldGRldl9vcHNfcmVhZCgpYC4gIFRoaXMgY29kZSBpcyB1c2VkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhY2Nlc3NpYmxlIHZpYSBYRlJNIG5ldGxpbmsgYW5kIGRlYnVnZnMuXG4tICAgYEVuYWJsZUNvbmZpZ3NgOiBgTkVUREVWU0lNYCwgYFhGUk1fT0ZGTE9BRGAsIGBJTkVUX0VTUF9PRkZMT0FEYCwgYERFQlVHX0ZTYFxuLSAgIGBGb2N1c1N5bWJvbHNgOiBgbnNpbV9kYmdfbmV0ZGV2X29wc19yZWFkYCwgYG5zaW1faXBzZWNfcGFyc2VfcHJvdG9fa2V5c2AsIGBuc2ltX2lwc2VjX2FkZF9zYWBcblxuRmluYWxseSwgbGV0J3MgZG91YmxlIGNoZWNrIHRoYXQgbXkgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzIGFyZSBpbiB0aGUgY29ycmVjdCBmb3JtYXQuLi4geWVwLCBsaXN0IG9mIHN0cmluZ3MsIGxpc3Qgb2Ygc3RyaW5ncywgc3RyaW5nLCBib29sZWFuLiBHb29kIHRvIGdvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTM4OSwiT3V0cHV0VG9rZW5zIjoyMDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2ODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6NTg6MDMuMzE3NDA4OThaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDcwMTc0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUREVWU0lNXCIsXG4gICAgXCJYRlJNX09GRkxPQURcIixcbiAgICBcIklORVRfRVNQX09GRkxPQURcIixcbiAgICBcIkRFQlVHX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnNpbV9kYmdfbmV0ZGV2X29wc19yZWFkXCIsXG4gICAgXCJuc2ltX2lwc2VjX3BhcnNlX3Byb3RvX2tleXNcIixcbiAgICBcIm5zaW1faXBzZWNfYWRkX3NhXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29ycmVjdHMgZW5kaWFubmVzcyBoYW5kbGluZyBvZiBJUHNlYyBrZXlzIGFuZCBzYWx0IGluIHRoZSBuZXRkZXZzaW0gc2ltdWxhdGVkIGRldmljZSBkcml2ZXIsIG1vZGlmeWluZyBuc2ltX3NhIGZpZWxkIHR5cGVzIHRvIF9fYmUzMiwgYWRqdXN0aW5nIGtleS9zYWx0IHBhcnNpbmcgaW4gbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzLCBhbmQgYnl0ZS1zd2FwcGluZyB2YWx1ZXMgZm9yIGRlYnVnZnMgb3V0cHV0IGluIG5zaW1fZGJnX25ldGRldl9vcHNfcmVhZC4gTmV0ZGV2c2ltIGlzIGEgc29mdHdhcmUtc2ltdWxhdGVkIGRldmljZSBkcml2ZXIgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbmV0bGluayAoWEZSTSBzdGF0ZSBvcGVyYXRpb25zKSBhbmQgZGVidWdmcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRERVZTSU1cIixcbiAgICBcIlhGUk1fT0ZGTE9BRFwiLFxuICAgIFwiSU5FVF9FU1BfT0ZGTE9BRFwiLFxuICAgIFwiREVCVUdfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuc2ltX2RiZ19uZXRkZXZfb3BzX3JlYWRcIixcbiAgICBcIm5zaW1faXBzZWNfcGFyc2VfcHJvdG9fa2V5c1wiLFxuICAgIFwibnNpbV9pcHNlY19hZGRfc2FcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb3JyZWN0cyBlbmRpYW5uZXNzIGhhbmRsaW5nIG9mIElQc2VjIGtleXMgYW5kIHNhbHQgaW4gdGhlIG5ldGRldnNpbSBzaW11bGF0ZWQgZGV2aWNlIGRyaXZlciwgbW9kaWZ5aW5nIG5zaW1fc2EgZmllbGQgdHlwZXMgdG8gX19iZTMyLCBhZGp1c3Rpbmcga2V5L3NhbHQgcGFyc2luZyBpbiBuc2ltX2lwc2VjX3BhcnNlX3Byb3RvX2tleXMsIGFuZCBieXRlLXN3YXBwaW5nIHZhbHVlcyBmb3IgZGVidWdmcyBvdXRwdXQgaW4gbnNpbV9kYmdfbmV0ZGV2X29wc19yZWFkLiBOZXRkZXZzaW0gaXMgYSBzb2Z0d2FyZS1zaW11bGF0ZWQgZGV2aWNlIGRyaXZlciByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBuZXRsaW5rIChYRlJNIHN0YXRlIG9wZXJhdGlvbnMpIGFuZCBkZWJ1Z2ZzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzo1ODowMy40MDIxMTkwMjlaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5NDYxMDQzMTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6NTg6MDMuNDAyNzgxNjI5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mzk0NjAzNzYwMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGVuZGlhbm5lc3MgaGFuZGxpbmcgb2YgSVBzZWMga2V5cyBhbmQgc2FsdCB2YWx1ZXMgaW4gbmV0ZGV2c2ltIGJ5IGNoYW5naW5nIHRoZSB0eXBlIGFubm90YXRpb25zIGZyb20gdTMyIHRvIF9fYmUzMiBhbmQgY29udmVydGluZyB0aGVtIHdpdGggYmUzMl90b19jcHUoKSB3aGVuIGZvcm1hdHRpbmcgZGVidWdmcyBvdXRwdXQuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdCBwYWRkaW5nIGNoYW5nZXMsIGNvcGllcyBvZiByYXcga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYXJlIGludHJvZHVjZWQuIEFsbCBidWZmZXJzIGFuZCBzdHJ1Y3R1cmVzIGluIG5ldGRldnNpbSBJUHNlYyBjb2RlIHJlbWFpbiBwcm9wZXJseSBpbml0aWFsaXplZCB2aWEgbWVtc2V0L2t6YWxsb2MuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRjNTM1YTFlODhkMWRhYzFhNTRjYTU3NzcyMGRmYTI4M2JhM2UxMjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDE3OjU3OjIyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuY1xuaW5kZXggMzZhMWJlNDkyM2Q2MS4uNTcyMjgzN2JjZGEzNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jXG4rKysgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuY1xuQEAgLTUwLDExICs1MCwxMSBAQCBzdGF0aWMgc3NpemVfdCBuc2ltX2RiZ19uZXRkZXZfb3BzX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsXG4gXHRcdHAgKz0gc2NucHJpbnRmKHAsIGJ1ZnNpemUgLSAocCAtIGJ1ZiksXG4gXHRcdFx0ICAgICAgIFwic2FbJWldICAgIHNwaT0weCUwOHggcHJvdG89MHgleCBzYWx0PTB4JTA4eCBjcnlwdD0lZFxcblwiLFxuIFx0XHRcdCAgICAgICBpLCBiZTMyX3RvX2NwdShzYXAtXHUwMDNleHMtXHUwMDNlaWQuc3BpKSxcbi1cdFx0XHQgICAgICAgc2FwLVx1MDAzZXhzLVx1MDAzZWlkLnByb3RvLCBzYXAtXHUwMDNlc2FsdCwgc2FwLVx1MDAzZWNyeXB0KTtcbitcdFx0XHQgICAgICAgc2FwLVx1MDAzZXhzLVx1MDAzZWlkLnByb3RvLCBiZTMyX3RvX2NwdShzYXAtXHUwMDNlc2FsdCksIHNhcC1cdTAwM2VjcnlwdCk7XG4gXHRcdHAgKz0gc2NucHJpbnRmKHAsIGJ1ZnNpemUgLSAocCAtIGJ1ZiksXG4gXHRcdFx0ICAgICAgIFwic2FbJWldICAgIGtleT0weCUwOHggJTA4eCAlMDh4ICUwOHhcXG5cIixcbi1cdFx0XHQgICAgICAgaSwgc2FwLVx1MDAzZWtleVswXSwgc2FwLVx1MDAzZWtleVsxXSxcbi1cdFx0XHQgICAgICAgc2FwLVx1MDAzZWtleVsyXSwgc2FwLVx1MDAzZWtleVszXSk7XG4rXHRcdFx0ICAgICAgIGksIGJlMzJfdG9fY3B1KHNhcC1cdTAwM2VrZXlbMF0pLCBiZTMyX3RvX2NwdShzYXAtXHUwMDNla2V5WzFdKSxcbitcdFx0XHQgICAgICAgYmUzMl90b19jcHUoc2FwLVx1MDAzZWtleVsyXSksIGJlMzJfdG9fY3B1KHNhcC1cdTAwM2VrZXlbM10pKTtcbiBcdH1cbiBcbiBcdGxlbiA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZmZlciwgY291bnQsIHBwb3MsIGJ1ZiwgcCAtIGJ1Zik7XG5AQCAtODcsNyArODcsNyBAQCBzdGF0aWMgaW50IG5zaW1faXBzZWNfZmluZF9lbXB0eV9pZHgoc3RydWN0IG5zaW1faXBzZWMgKmlwc2VjKVxuIFxuIHN0YXRpYyBpbnQgbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IHhmcm1fc3RhdGUgKnhzLFxuLVx0XHRcdFx0ICAgICAgIHUzMiAqbXlrZXksIHUzMiAqbXlzYWx0KVxuK1x0XHRcdFx0ICAgICAgIF9fYmUzMiAqbXlrZXksIF9fYmUzMiAqbXlzYWx0KVxuIHtcbiBcdGNvbnN0IGNoYXIgYWVzX2djbV9uYW1lW10gPSBcInJmYzQxMDYoZ2NtKGFlcykpXCI7XG4gXHR1bnNpZ25lZCBjaGFyICprZXlfZGF0YTtcbkBAIC0xMTcsNyArMTE3LDcgQEAgc3RhdGljIGludCBuc2ltX2lwc2VjX3BhcnNlX3Byb3RvX2tleXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcbiBcdC8qIDE2MCBhY2NvdW50cyBmb3IgMTYgYnl0ZSBrZXkgYW5kIDQgYnl0ZSBzYWx0ICovXG4gXHRpZiAoa2V5X2xlbiBcdTAwM2UgTlNJTV9JUFNFQ19BVVRIX0JJVFMpIHtcbi1cdFx0Km15c2FsdCA9ICgodTMyICopa2V5X2RhdGEpWzRdO1xuK1x0XHQqbXlzYWx0ID0gKChfX2JlMzIgKilrZXlfZGF0YSlbNF07XG4gXHR9IGVsc2UgaWYgKGtleV9sZW4gPT0gTlNJTV9JUFNFQ19BVVRIX0JJVFMpIHtcbiBcdFx0Km15c2FsdCA9IDA7XG4gXHR9IGVsc2Uge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaCBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaFxuaW5kZXggNTVhZWM0MTIzN2I5Yi4uYTgyYTY4NTM4NGU2ZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaFxuKysrIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oXG5AQCAtNDIsOCArNDIsOCBAQFxuIHN0cnVjdCBuc2ltX3NhIHtcbiBcdHN0cnVjdCB4ZnJtX3N0YXRlICp4cztcbiBcdF9fYmUzMiBpcGFkZHJbNF07XG4tXHR1MzIga2V5WzRdO1xuLVx0dTMyIHNhbHQ7XG4rXHRfX2JlMzIga2V5WzRdO1xuK1x0X19iZTMyIHNhbHQ7XG4gXHRib29sIHVzZWQ7XG4gXHRib29sIGNyeXB0O1xuIFx0Ym9vbCByeDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5zaFxuaW5kZXggYWNlM2E5OTAyM2VkMC4uNDg0M2Q0NzQ1MzhmNCAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsuc2hcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsuc2hcbkBAIC05MzIsMTEgKzkzMiwxMSBAQCBrY2lfdGVzdF9pcHNlY19vZmZsb2FkKClcbiBcdHJ1bl9jbWQgZGlmZiAkc3lzZnNmIC0gXHUwMDNjXHUwMDNjIEVPRlxuIFNBIGNvdW50PTIgdHg9M1xuIHNhWzBdIHR4IGlwYWRkcj0kZHN0aXBcbi1zYVswXSAgICBzcGk9MHgwMDAwMDAwOSBwcm90bz0weDMyIHNhbHQ9MHg2MTYyNjM2NCBjcnlwdD0xXG4tc2FbMF0gICAga2V5PTB4MzQzMzMyMzEgMzgzNzM2MzUgMzIzMTMwMzkgMzYzNTM0MzNcbitzYVswXSAgICBzcGk9MHgwMDAwMDAwOSBwcm90bz0weDMyIHNhbHQ9MHg2NDYzNjI2MSBjcnlwdD0xXG4rc2FbMF0gICAga2V5PTB4MzEzMjMzMzQgMzUzNjM3MzggMzkzMDMxMzIgMzMzNDM1MzZcbiBzYVsxXSByeCBpcGFkZHI9JHNyY2lwXG4tc2FbMV0gICAgc3BpPTB4MDAwMDAwMDkgcHJvdG89MHgzMiBzYWx0PTB4NjE2MjYzNjQgY3J5cHQ9MVxuLXNhWzFdICAgIGtleT0weDM0MzMzMjMxIDM4MzczNjM1IDMyMzEzMDM5IDM2MzUzNDMzXG4rc2FbMV0gICAgc3BpPTB4MDAwMDAwMDkgcHJvdG89MHgzMiBzYWx0PTB4NjQ2MzYyNjEgY3J5cHQ9MVxuK3NhWzFdICAgIGtleT0weDMxMzIzMzM0IDM1MzYzNzM4IDM5MzAzMTMyIDMzMzQzNTM2XG4gRU9GXG4gXHRpZiBbICQ/IC1uZSAwIF0gOyB0aGVuXG4gXHRcdGVuZF90ZXN0IFwiRkFJTDogaXBzZWNfb2ZmbG9hZCBpbmNvcnJlY3QgZHJpdmVyIGRhdGFcIlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6NTg6MDMuNDAyNzgyNzM5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NzA2ODM1NzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIHNlZSBpZiB3ZSBuZWVkIHRvIGJyaW5nIGluIEtNU0FOLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBpcyBhY3R1YWxseSBjaGFuZ2luZy4gSSBzZWUgaXQncyB0b3VjaGluZyBgZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmNgIGFuZCBgZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oYCwgYWxvbmcgd2l0aCBhIHNlbGZ0ZXN0IHNjcmlwdC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuTG9va2luZyBhdCBgZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmNgLCBJIG5vdGljZSBtb2RpZmljYXRpb25zIGluIHRoZSBgbnNpbV9kYmdfbmV0ZGV2X29wc19yZWFkYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSB0aGV5IGFyZSBjaGFuZ2luZyB0aGUgd2F5IGBzYXAtXHUwMDNlc2FsdGAgYW5kIGBzYXAtXHUwMDNla2V5Wy4uLl1gIGFyZSBwcmludGVkLCBub3cgdXNpbmcgYGJlMzJfdG9fY3B1KC4uLilgLiBTZWVtcyBsaWtlIGFuIGVuZGlhbm5lc3MgY29udmVyc2lvbiB1cGRhdGUsIHdoaWNoICpjb3VsZCogaW5kaWNhdGUgd2UncmUgZGVhbGluZyB3aXRoIG5ldHdvcmstcmVsYXRlZCBkYXRhLCBvciBhdCBsZWFzdCBkYXRhIHRoYXQncyBleHBlY3RlZCB0byBiZSBlbmRpYW4tc2Vuc2l0aXZlLiBNYWtlcyBzZW5zZSBmb3IgbmV0d29yayBzaW11bGF0aW9uLlxuXG5UaGVuLCB0aGVyZSdzIHRoZSBgbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzYCBmdW5jdGlvbi4gSSBzZWUgdGhlIHByb3RvdHlwZSBmb3IgYG15a2V5YCBhbmQgYG15c2FsdGAgaXMgYmVpbmcgY2hhbmdlZCB0byBgX19iZTMyICpgLCBhbmQgdGhlIGNhc3QgYCgodTMyICopa2V5X2RhdGEpWzRdYCBpcyBub3cgYCgoX19iZTMyICopa2V5X2RhdGEpWzRdYC4gQWdhaW4sIHRoaXMgcmVpbmZvcmNlcyB0aGUgZW5kaWFubmVzcyB1cGRhdGUsIGJ1dCBhbHNvIHN1Z2dlc3RzIHRoZSB1bmRlcmx5aW5nIGRhdGEsIHRoZSBga2V5X2RhdGFgLCBtaWdodCBiZSBjaGFuZ2luZyB0eXBlcy4gSSBoYXZlIHRvIHNlZSBob3cgaXQgaXMgdXNlZC5cblxuSW4gYGRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaGAsIEkgc2VlIHRoZSBgc3RydWN0IG5zaW1fc2FgIGZpZWxkcyBga2V5YCBhbmQgYHNhbHRgIGFyZSBiZWluZyB1cGRhdGVkIGZyb20gYHUzMmAgdG8gYF9fYmUzMmAuIFNvLCB0aGlzIGlzIHdoZXJlIHRoZSAqYWN0dWFsKiB0eXBlIGNoYW5nZSBpcyBoYXBwZW5pbmcsIGFuZCBpdCdzIGJlaW5nIHByb3BhZ2F0ZWQgdGhyb3VnaG91dC4gTm93IEkgZ2V0IGl0OiBlbmRpYW5uZXNzIGlzIGJlaW5nIGJha2VkIGludG8gdGhlIGRhdGEgdHlwZXMgdGhlbXNlbHZlcy4gVGhpcyBzaG91bGQgcmVkdWNlIHRoZSBuZWVkIGZvciBjYXN0aW5nLCBhbmQgZW5zdXJlIHRoYXQgdGhlIHJpZ2h0IGRhdGEgaXMgaW4gdGhlIHJpZ2h0IGJ5dGUgb3JkZXIgYXQgZXZlcnkgc3RhZ2Ugb2YgcHJvY2Vzc2luZy5cblxuRmluYWxseSwgdGhlIHNlbGZ0ZXN0IHNjcmlwdCBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5zaGAgaGFzIGFuIHVwZGF0ZSBmb3IgZW5kaWFubmVzcyBpbiB0aGUgb3V0cHV0IGZvciBkZWJ1Z2ZzL3N5c2ZzIGR1bXBzLiBDbGVhcmx5LCB0aGV5IGFyZSB1cGRhdGluZyB0aGUgZW5kaWFubmVzcyBvZiB0aGUgb3V0cHV0LiBUaGF0J3MgZ29vZCB0ZXN0aW5nLlxuXG5Ob3csIEknbSBnb2luZyB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jYCwgZm9jdXNpbmcgc3BlY2lmaWNhbGx5IGFyb3VuZCBgbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzYCBhbmQgaXRzIGNhbGxlcnMuIEdvdHRhIG1ha2Ugc3VyZSB0aGlzIGNoYW5nZSBpcyBzYWZlLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGRhdGEgZmxvdyB0byBlbnN1cmUgbm90aGluZyBpcyByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFmdGVyIHRoZXNlIGNoYW5nZXMuIEVuZGlhbm5lc3MgaXMgYSBjb21tb24gc291cmNlIG9mIGJ1Z3MgaWYgbm90IGhhbmRsZWQgcHJvcGVybHksIHNvIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIGRldmVsb3BlcnMgaGF2ZSBoYW5kbGVkIGFsbCB0aGUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM4MiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjU4OjMyLjEwOTYyMTU4N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDE1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdC8qIENvcHlyaWdodChjKSAyMDE4IE9yYWNsZSBhbmQvb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuICovXFxuICAgMzpcXHRcXG4gICA0OlxcdCNpbmNsdWRlIFxcdTAwM2NjcnlwdG8vYWVhZC5oXFx1MDAzZVxcbiAgIDU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RlYnVnZnMuaFxcdTAwM2VcXG4gICA2OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQveGZybS5oXFx1MDAzZVxcbiAgIDc6XFx0XFxuICAgODpcXHQjaW5jbHVkZSBcXFwibmV0ZGV2c2ltLmhcXFwiXFxuICAgOTpcXHRcXG4gIDEwOlxcdCNkZWZpbmUgTlNJTV9JUFNFQ19BVVRIX0JJVFNcXHQxMjhcXG4gIDExOlxcdFxcbiAgMTI6XFx0c3RhdGljIHNzaXplX3QgbnNpbV9kYmdfbmV0ZGV2X29wc19yZWFkKHN0cnVjdCBmaWxlICpmaWxwLFxcbiAgMTM6XFx0XFx0XFx0XFx0XFx0XFx0Y2hhciBfX3VzZXIgKmJ1ZmZlcixcXG4gIDE0OlxcdFxcdFxcdFxcdFxcdFxcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxcbiAgMTU6XFx0e1xcbiAgMTY6XFx0XFx0c3RydWN0IG5ldGRldnNpbSAqbnMgPSBmaWxwLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuICAxNzpcXHRcXHRzdHJ1Y3QgbnNpbV9pcHNlYyAqaXBzZWMgPSBcXHUwMDI2bnMtXFx1MDAzZWlwc2VjO1xcbiAgMTg6XFx0XFx0c2l6ZV90IGJ1ZnNpemU7XFxuICAxOTpcXHRcXHRjaGFyICpidWYsICpwO1xcbiAgMjA6XFx0XFx0aW50IGxlbjtcXG4gIDIxOlxcdFxcdGludCBpO1xcbiAgMjI6XFx0XFxuICAyMzpcXHRcXHQvKiB0aGUgYnVmZmVyIG5lZWRlZCBpc1xcbiAgMjQ6XFx0XFx0ICogKG51bSBTQXMgKiAzIGxpbmVzIGVhY2ggKiB+NjAgYnl0ZXMgcGVyIGxpbmUpICsgb25lIG1vcmUgbGluZVxcbiAgMjU6XFx0XFx0ICovXFxuICAyNjpcXHRcXHRidWZzaXplID0gKGlwc2VjLVxcdTAwM2Vjb3VudCAqIDQgKiA2MCkgKyA2MDtcXG4gIDI3OlxcdFxcdGJ1ZiA9IGt6YWxsb2MoYnVmc2l6ZSwgR0ZQX0tFUk5FTCk7XFxuICAyODpcXHRcXHRpZiAoIWJ1ZilcXG4gIDI5OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAgMzA6XFx0XFxuICAzMTpcXHRcXHRwID0gYnVmO1xcbiAgMzI6XFx0XFx0cCArPSBzY25wcmludGYocCwgYnVmc2l6ZSAtIChwIC0gYnVmKSxcXG4gIDMzOlxcdFxcdFxcdCAgICAgICBcXFwiU0EgY291bnQ9JXUgdHg9JXVcXFxcblxcXCIsXFxuICAzNDpcXHRcXHRcXHQgICAgICAgaXBzZWMtXFx1MDAzZWNvdW50LCBpcHNlYy1cXHUwMDNldHgpO1xcbiAgMzU6XFx0XFxuICAzNjpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTlNJTV9JUFNFQ19NQVhfU0FfQ09VTlQ7IGkrKykge1xcbiAgMzc6XFx0XFx0XFx0c3RydWN0IG5zaW1fc2EgKnNhcCA9IFxcdTAwMjZpcHNlYy1cXHUwMDNlc2FbaV07XFxuICAzODpcXHRcXG4gIDM5OlxcdFxcdFxcdGlmICghc2FwLVxcdTAwM2V1c2VkKVxcbiAgNDA6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuICA0MTpcXHRcXG4gIDQyOlxcdFxcdFxcdGlmIChzYXAtXFx1MDAzZXhzLVxcdTAwM2Vwcm9wcy5mYW1pbHkgPT0gQUZfSU5FVDYpXFxuICA0MzpcXHRcXHRcXHRcXHRwICs9IHNjbnByaW50ZihwLCBidWZzaXplIC0gKHAgLSBidWYpLFxcbiAgNDQ6XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJzYVslaV0gJWN4IGlwYWRkcj0lcEk2Y1xcXFxuXFxcIixcXG4gIDQ1OlxcdFxcdFxcdFxcdFxcdCAgICAgICBpLCAoc2FwLVxcdTAwM2VyeCA/ICdyJyA6ICd0JyksIFxcdTAwMjZzYXAtXFx1MDAzZWlwYWRkcik7XFxuICA0NjpcXHRcXHRcXHRlbHNlXFxuICA0NzpcXHRcXHRcXHRcXHRwICs9IHNjbnByaW50ZihwLCBidWZzaXplIC0gKHAgLSBidWYpLFxcbiAgNDg6XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJzYVslaV0gJWN4IGlwYWRkcj0lcEk0XFxcXG5cXFwiLFxcbiAgNDk6XFx0XFx0XFx0XFx0XFx0ICAgICAgIGksIChzYXAtXFx1MDAzZXJ4ID8gJ3InIDogJ3QnKSwgXFx1MDAyNnNhcC1cXHUwMDNlaXBhZGRyWzNdKTtcXG4gIDUwOlxcdFxcdFxcdHAgKz0gc2NucHJpbnRmKHAsIGJ1ZnNpemUgLSAocCAtIGJ1ZiksXFxuICA1MTpcXHRcXHRcXHRcXHQgICAgICAgXFxcInNhWyVpXSAgICBzcGk9MHglMDh4IHByb3RvPTB4JXggc2FsdD0weCUwOHggY3J5cHQ9JWRcXFxcblxcXCIsXFxuICA1MjpcXHRcXHRcXHRcXHQgICAgICAgaSwgYmUzMl90b19jcHUoc2FwLVxcdTAwM2V4cy1cXHUwMDNlaWQuc3BpKSxcXG4gIDUzOlxcdFxcdFxcdFxcdCAgICAgICBzYXAtXFx1MDAzZXhzLVxcdTAwM2VpZC5wcm90bywgYmUzMl90b19jcHUoc2FwLVxcdTAwM2VzYWx0KSwgc2FwLVxcdTAwM2VjcnlwdCk7XFxuICA1NDpcXHRcXHRcXHRwICs9IHNjbnByaW50ZihwLCBidWZzaXplIC0gKHAgLSBidWYpLFxcbiAgNTU6XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJzYVslaV0gICAga2V5PTB4JTA4eCAlMDh4ICUwOHggJTA4eFxcXFxuXFxcIixcXG4gIDU2OlxcdFxcdFxcdFxcdCAgICAgICBpLCBiZTMyX3RvX2NwdShzYXAtXFx1MDAzZWtleVswXSksIGJlMzJfdG9fY3B1KHNhcC1cXHUwMDNla2V5WzFdKSxcXG4gIDU3OlxcdFxcdFxcdFxcdCAgICAgICBiZTMyX3RvX2NwdShzYXAtXFx1MDAzZWtleVsyXSksIGJlMzJfdG9fY3B1KHNhcC1cXHUwMDNla2V5WzNdKSk7XFxuICA1ODpcXHRcXHR9XFxuICA1OTpcXHRcXG4gIDYwOlxcdFxcdGxlbiA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZmZlciwgY291bnQsIHBwb3MsIGJ1ZiwgcCAtIGJ1Zik7XFxuICA2MTpcXHRcXG4gIDYyOlxcdFxcdGtmcmVlKGJ1Zik7XFxuICA2MzpcXHRcXHRyZXR1cm4gbGVuO1xcbiAgNjQ6XFx0fVxcbiAgNjU6XFx0XFxuICA2NjpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpcHNlY19kYmdfZm9wcyA9IHtcXG4gIDY3OlxcdFxcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbiAgNjg6XFx0XFx0Lm9wZW4gPSBzaW1wbGVfb3BlbixcXG4gIDY5OlxcdFxcdC5yZWFkID0gbnNpbV9kYmdfbmV0ZGV2X29wc19yZWFkLFxcbiAgNzA6XFx0fTtcXG4gIDcxOlxcdFxcbiAgNzI6XFx0c3RhdGljIGludCBuc2ltX2lwc2VjX2ZpbmRfZW1wdHlfaWR4KHN0cnVjdCBuc2ltX2lwc2VjICppcHNlYylcXG4gIDczOlxcdHtcXG4gIDc0OlxcdFxcdHUzMiBpO1xcbiAgNzU6XFx0XFxuICA3NjpcXHRcXHRpZiAoaXBzZWMtXFx1MDAzZWNvdW50ID09IE5TSU1fSVBTRUNfTUFYX1NBX0NPVU5UKVxcbiAgNzc6XFx0XFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuICA3ODpcXHRcXG4gIDc5OlxcdFxcdC8qIHNlYXJjaCBzYSB0YWJsZSAqL1xcbiAgODA6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5TSU1fSVBTRUNfTUFYX1NBX0NPVU5UOyBpKyspIHtcXG4gIDgxOlxcdFxcdFxcdGlmICghaXBzZWMtXFx1MDAzZXNhW2ldLnVzZWQpXFxuICA4MjpcXHRcXHRcXHRcXHRyZXR1cm4gaTtcXG4gIDgzOlxcdFxcdH1cXG4gIDg0OlxcdFxcbiAgODU6XFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuICA4NjpcXHR9XFxuICA4NzpcXHRcXG4gIDg4OlxcdHN0YXRpYyBpbnQgbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuICA4OTpcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHhmcm1fc3RhdGUgKnhzLFxcbiAgOTA6XFx0XFx0XFx0XFx0XFx0ICAgICAgIF9fYmUzMiAqbXlrZXksIF9fYmUzMiAqbXlzYWx0KVxcbiAgOTE6XFx0e1xcbiAgOTI6XFx0XFx0Y29uc3QgY2hhciBhZXNfZ2NtX25hbWVbXSA9IFxcXCJyZmM0MTA2KGdjbShhZXMpKVxcXCI7XFxuICA5MzpcXHRcXHR1bnNpZ25lZCBjaGFyICprZXlfZGF0YTtcXG4gIDk0OlxcdFxcdGNoYXIgKmFsZ19uYW1lID0gTlVMTDtcXG4gIDk1OlxcdFxcdGludCBrZXlfbGVuO1xcbiAgOTY6XFx0XFxuICA5NzpcXHRcXHRpZiAoIXhzLVxcdTAwM2VhZWFkKSB7XFxuICA5ODpcXHRcXHRcXHRuZXRkZXZfZXJyKGRldiwgXFxcIlVuc3VwcG9ydGVkIElQc2VjIGFsZ29yaXRobVxcXFxuXFxcIik7XFxuICA5OTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMTAwOlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6NTg6MzIuMTA5NzI2MDI3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzODQ0NzYyODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUgd2UgZ28uIEhlcmUgYXJlIG15IHRob3VnaHRzIG9uIGV4YW1pbmluZyB0aGF0IGZ1bmN0aW9uIGFuZCBpdHMgdXNlIHdpdGhpbiB0aGUgbmV0ZGV2c2ltIElQc2VjIGRyaXZlci5cblxuKipEaXZpbmcgRGVlcCBpbnRvIGBuc2ltX2lwc2VjX3BhcnNlX3Byb3RvX2tleXNgKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhlIElQc2VjIGZ1bmN0aW9uYWxpdHkgaXMgaW1wbGVtZW50ZWQgd2l0aGluIHRoZSBuZXRkZXZzaW0gZHJpdmVyLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBkaWcgaW50byBgbnNpbV9pcHNlY19wYXJzZV9wcm90b19rZXlzYC4gVG8gcmVhbGx5IHVuZGVyc3RhbmQgaXRzIHJvbGUgYW5kIHBvdGVudGlhbCBpbXBhY3QsIEknbGwgdHJhY2UgdGhyb3VnaCB0aGUgcmVzdCBvZiB0aGF0IGZ1bmN0aW9uLCBzZWVpbmcgcHJlY2lzZWx5IGhvdyBpdCBoYW5kbGVzIGtleSBwYXJzaW5nIGFuZCB3aGF0IGNvbmZpZ3VyYXRpb25zIGl0J3MgcmVzcG9uc2libGUgZm9yLlxuXG5PZiBjb3Vyc2UsIHRoZSBmdW5jdGlvbiBpdHNlbGYgaXMgb25seSBwYXJ0IG9mIHRoZSBzdG9yeS4gSSdsbCBuZWVkIHRvIGZvbGxvdyB0aGUgY2FsbGluZyBjaGFpbi4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBpcyBjYWxsZWQgZnJvbSwgYnkgd2hhdCBhbmQgd2h5LiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0cyB3aWxsIHJlYWxseSBoZWxwIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kIGJlaGF2aW9yIGluIHRoZSBsYXJnZXIgc2NvcGUgb2YgdGhlIElQc2VjIGRyaXZlciBpbiBgZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmNgLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgaW5mb3JtYXRpb24gSSBuZWVkLCB0byB1bmRlcnN0YW5kIGhvdyBrZXkgbWF0ZXJpYWwgaXMgcHJvY2Vzc2VkIGFuZCBob3cgaXQgYWZmZWN0cyB0aGUgb3ZlcmFsbCBJUHNlYyBzaW11bGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTIyLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzo1ODozNC40OTQyMDUzNFoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAxOlxcdFxcbiAxMDI6XFx0XFx0aWYgKHhzLVxcdTAwM2VhZWFkLVxcdTAwM2VhbGdfaWN2X2xlbiAhPSBOU0lNX0lQU0VDX0FVVEhfQklUUykge1xcbiAxMDM6XFx0XFx0XFx0bmV0ZGV2X2VycihkZXYsIFxcXCJJUHNlYyBvZmZsb2FkIHJlcXVpcmVzICVkIGJpdCBhdXRoZW50aWNhdGlvblxcXFxuXFxcIixcXG4gMTA0OlxcdFxcdFxcdFxcdCAgIE5TSU1fSVBTRUNfQVVUSF9CSVRTKTtcXG4gMTA1OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAxMDY6XFx0XFx0fVxcbiAxMDc6XFx0XFxuIDEwODpcXHRcXHRrZXlfZGF0YSA9IFxcdTAwMjZ4cy1cXHUwMDNlYWVhZC1cXHUwMDNlYWxnX2tleVswXTtcXG4gMTA5OlxcdFxcdGtleV9sZW4gPSB4cy1cXHUwMDNlYWVhZC1cXHUwMDNlYWxnX2tleV9sZW47XFxuIDExMDpcXHRcXHRhbGdfbmFtZSA9IHhzLVxcdTAwM2VhZWFkLVxcdTAwM2VhbGdfbmFtZTtcXG4gMTExOlxcdFxcbiAxMTI6XFx0XFx0aWYgKHN0cmNtcChhbGdfbmFtZSwgYWVzX2djbV9uYW1lKSkge1xcbiAxMTM6XFx0XFx0XFx0bmV0ZGV2X2VycihkZXYsIFxcXCJVbnN1cHBvcnRlZCBJUHNlYyBhbGdvcml0aG0gLSBwbGVhc2UgdXNlICVzXFxcXG5cXFwiLFxcbiAxMTQ6XFx0XFx0XFx0XFx0ICAgYWVzX2djbV9uYW1lKTtcXG4gMTE1OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAxMTY6XFx0XFx0fVxcbiAxMTc6XFx0XFxuIDExODpcXHRcXHQvKiAxNjAgYWNjb3VudHMgZm9yIDE2IGJ5dGUga2V5IGFuZCA0IGJ5dGUgc2FsdCAqL1xcbiAxMTk6XFx0XFx0aWYgKGtleV9sZW4gXFx1MDAzZSBOU0lNX0lQU0VDX0FVVEhfQklUUykge1xcbiAxMjA6XFx0XFx0XFx0Km15c2FsdCA9ICgoX19iZTMyICopa2V5X2RhdGEpWzRdO1xcbiAxMjE6XFx0XFx0fSBlbHNlIGlmIChrZXlfbGVuID09IE5TSU1fSVBTRUNfQVVUSF9CSVRTKSB7XFxuIDEyMjpcXHRcXHRcXHQqbXlzYWx0ID0gMDtcXG4gMTIzOlxcdFxcdH0gZWxzZSB7XFxuIDEyNDpcXHRcXHRcXHRuZXRkZXZfZXJyKGRldiwgXFxcIklQc2VjIGh3IG9mZmxvYWQgb25seSBzdXBwb3J0cyAxMjggYml0IGtleXMgd2l0aCBvcHRpb25hbCAzMiBiaXQgc2FsdFxcXFxuXFxcIik7XFxuIDEyNTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMTI2OlxcdFxcdH1cXG4gMTI3OlxcdFxcdG1lbWNweShteWtleSwga2V5X2RhdGEsIDE2KTtcXG4gMTI4OlxcdFxcbiAxMjk6XFx0XFx0cmV0dXJuIDA7XFxuIDEzMDpcXHR9XFxuIDEzMTpcXHRcXG4gMTMyOlxcdHN0YXRpYyBpbnQgbnNpbV9pcHNlY19hZGRfc2Eoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gMTMzOlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHhmcm1fc3RhdGUgKnhzLFxcbiAxMzQ6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDEzNTpcXHR7XFxuIDEzNjpcXHRcXHRzdHJ1Y3QgbnNpbV9pcHNlYyAqaXBzZWM7XFxuIDEzNzpcXHRcXHRzdHJ1Y3QgbmV0ZGV2c2ltICpucztcXG4gMTM4OlxcdFxcdHN0cnVjdCBuc2ltX3NhIHNhO1xcbiAxMzk6XFx0XFx0dTE2IHNhX2lkeDtcXG4gMTQwOlxcdFxcdGludCByZXQ7XFxuIDE0MTpcXHRcXG4gMTQyOlxcdFxcdG5zID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4gMTQzOlxcdFxcdGlwc2VjID0gXFx1MDAyNm5zLVxcdTAwM2VpcHNlYztcXG4gMTQ0OlxcdFxcbiAxNDU6XFx0XFx0aWYgKHhzLVxcdTAwM2VpZC5wcm90byAhPSBJUFBST1RPX0VTUCBcXHUwMDI2XFx1MDAyNiB4cy1cXHUwMDNlaWQucHJvdG8gIT0gSVBQUk9UT19BSCkge1xcbiAxNDY6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIlVuc3VwcG9ydGVkIHByb3RvY29sIGZvciBpcHNlYyBvZmZsb2FkXFxcIik7XFxuIDE0NzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMTQ4OlxcdFxcdH1cXG4gMTQ5OlxcdFxcbiAxNTA6XFx0XFx0aWYgKHhzLVxcdTAwM2VjYWxnKSB7XFxuIDE1MTpcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiQ29tcHJlc3Npb24gb2ZmbG9hZCBub3Qgc3VwcG9ydGVkXFxcIik7XFxuIDE1MjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMTUzOlxcdFxcdH1cXG4gMTU0OlxcdFxcbiAxNTU6XFx0XFx0aWYgKHhzLVxcdTAwM2V4c28udHlwZSAhPSBYRlJNX0RFVl9PRkZMT0FEX0NSWVBUTykge1xcbiAxNTY6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIlVuc3VwcG9ydGVkIGlwc2VjIG9mZmxvYWQgdHlwZVxcXCIpO1xcbiAxNTc6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDE1ODpcXHRcXHR9XFxuIDE1OTpcXHRcXG4gMTYwOlxcdFxcdC8qIGZpbmQgdGhlIGZpcnN0IHVudXNlZCBpbmRleCAqL1xcbiAxNjE6XFx0XFx0cmV0ID0gbnNpbV9pcHNlY19maW5kX2VtcHR5X2lkeChpcHNlYyk7XFxuIDE2MjpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbiAxNjM6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIk5vIHNwYWNlIGZvciBTQSBpbiBSeCB0YWJsZSFcXFwiKTtcXG4gMTY0OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDE2NTpcXHRcXHR9XFxuIDE2NjpcXHRcXHRzYV9pZHggPSAodTE2KXJldDtcXG4gMTY3OlxcdFxcbiAxNjg6XFx0XFx0bWVtc2V0KFxcdTAwMjZzYSwgMCwgc2l6ZW9mKHNhKSk7XFxuIDE2OTpcXHRcXHRzYS51c2VkID0gdHJ1ZTtcXG4gMTcwOlxcdFxcdHNhLnhzID0geHM7XFxuIDE3MTpcXHRcXG4gMTcyOlxcdFxcdGlmIChzYS54cy1cXHUwMDNlaWQucHJvdG8gXFx1MDAyNiBJUFBST1RPX0VTUClcXG4gMTczOlxcdFxcdFxcdHNhLmNyeXB0ID0geHMtXFx1MDAzZWVhbGcgfHwgeHMtXFx1MDAzZWFlYWQ7XFxuIDE3NDpcXHRcXG4gMTc1OlxcdFxcdC8qIGdldCB0aGUga2V5IGFuZCBzYWx0ICovXFxuIDE3NjpcXHRcXHRyZXQgPSBuc2ltX2lwc2VjX3BhcnNlX3Byb3RvX2tleXMoZGV2LCB4cywgc2Eua2V5LCBcXHUwMDI2c2Euc2FsdCk7XFxuIDE3NzpcXHRcXHRpZiAocmV0KSB7XFxuIDE3ODpcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiRmFpbGVkIHRvIGdldCBrZXkgZGF0YSBmb3IgU0EgdGFibGVcXFwiKTtcXG4gMTc5OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDE4MDpcXHRcXHR9XFxuIDE4MTpcXHRcXG4gMTgyOlxcdFxcdGlmICh4cy1cXHUwMDNleHNvLmRpciA9PSBYRlJNX0RFVl9PRkZMT0FEX0lOKVxcbiAxODM6XFx0XFx0XFx0c2EucnggPSB0cnVlO1xcbiAxODQ6XFx0XFxuIDE4NTpcXHRcXHRpZiAoeHMtXFx1MDAzZXByb3BzLmZhbWlseSA9PSBBRl9JTkVUNilcXG4gMTg2OlxcdFxcdFxcdG1lbWNweShzYS5pcGFkZHIsIFxcdTAwMjZ4cy1cXHUwMDNlaWQuZGFkZHIuYTYsIDE2KTtcXG4gMTg3OlxcdFxcdGVsc2VcXG4gMTg4OlxcdFxcdFxcdG1lbWNweShcXHUwMDI2c2EuaXBhZGRyWzNdLCBcXHUwMDI2eHMtXFx1MDAzZWlkLmRhZGRyLmE0LCA0KTtcXG4gMTg5OlxcdFxcbiAxOTA6XFx0XFx0LyogdGhlIHByZXBhcmF0aW9ucyB3b3JrZWQsIHNvIHNhdmUgdGhlIGluZm8gKi9cXG4gMTkxOlxcdFxcdG1lbWNweShcXHUwMDI2aXBzZWMtXFx1MDAzZXNhW3NhX2lkeF0sIFxcdTAwMjZzYSwgc2l6ZW9mKHNhKSk7XFxuIDE5MjpcXHRcXG4gMTkzOlxcdFxcdC8qIHRoZSBYRlJNIHN0YWNrIGRvZXNuJ3QgbGlrZSBvZmZsb2FkX2hhbmRsZSA9PSAwLFxcbiAxOTQ6XFx0XFx0ICogc28gYWRkIGEgYml0ZmxhZyBpbiBjYXNlIG91ciBhcnJheSBpbmRleCBpcyAwXFxuIDE5NTpcXHRcXHQgKi9cXG4gMTk2OlxcdFxcdHhzLVxcdTAwM2V4c28ub2ZmbG9hZF9oYW5kbGUgPSBzYV9pZHggfCBOU0lNX0lQU0VDX1ZBTElEO1xcbiAxOTc6XFx0XFx0aXBzZWMtXFx1MDAzZWNvdW50Kys7XFxuIDE5ODpcXHRcXG4gMTk5OlxcdFxcdHJldHVybiAwO1xcbiAyMDA6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzo1ODozNC40OTQzMDI4NFoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzU2NjM2MTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBuc2ltX2lwc2VjX2FkZF9zYWAgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgYHN0cnVjdCBuc2ltX3NhIHNhYCBpcyBtZXRpY3Vsb3VzbHkgaW5pdGlhbGl6ZWQgdXNpbmcgYG1lbXNldGAuIFRoaXMgaXMgY3J1Y2lhbCDigJMgYSBjbGVhbiBzbGF0ZSBpcyB0aGUgZm91bmRhdGlvbi4gYG5zaW1faXBzZWNfcGFyc2VfcHJvdG9fa2V5c2AgdGhlbiBleHRyYWN0cyB0aGUgYHNhLmtleWAgYW5kIGBzYS5zYWx0YCwgZW5zdXJpbmcgdGhleSBhcmUgaW50ZXJwcmV0ZWQgYXMgYmlnLWVuZGlhbiAzMi1iaXQgdmFsdWVzIHVzaW5nIGBfX2JlMzJgLiBFeGNlbGxlbnQsIGVuZGlhbm5lc3MgY29uc2lkZXJhdGlvbnMgYXJlIGJlaW5nIGhhbmRsZWQgdXBmcm9udC4gQW5kLCBjb25maXJtZWQgYnkgYG5zaW1fZGJnX25ldGRldl9vcHNfcmVhZGAsIHRoZSBkZWJ1ZyBvdXRwdXQgY29ycmVjdGx5IGNvbnZlcnRzIHRoZSBlbmRpYW5uZXNzIHdoZW4gcHJpbnRpbmcsIHVzaW5nIGBiZTMyX3RvX2NwdWAgc28gdGhhdCB0aGUgaGV4IHZhbHVlcyBtYXRjaCB0aGUgZGVidWdnZWQgZW52aXJvbm1lbnQuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogYXJlIHRoZXJlIGFueSBsaW5nZXJpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IE5vLCBJIGRvbid0IHNlZSBhbnkuIFRoZSBgc2FgIHN0cnVjdCBzdGFydHMgemVyb2VkLiBUaGUga2V5cyBhbmQgc2FsdCBhcmUgaGFuZGxlZCBzYWZlbHkgd2l0aCBgbWVtY3B5YCBhbmQgZGlyZWN0IGFzc2lnbm1lbnQuIFRoZSBkZWJ1ZyBidWZmZXIgdXNlcyBga3phbGxvY2AsIHNvIGl0IGlzIHplcm9lZCBtZW1vcnksIHdoaWNoIGlzIGEgZ29vZCBwcmFjdGljZSB0byBhdm9pZCBsZWFraW5nIHBvdGVudGlhbGx5IHNlbnNpdGl2ZSBpbmZvcm1hdGlvbi4gVGhlIHR5cGUgY2hhbmdlcyBmcm9tIGB1MzJgIHRvIGBfX2JlMzJgIGFuZCBzcGFyc2UgYW5ub3RhdGlvbnMgc2VlbSB0byBoYXZlIGJlZW4gdXNlZCB0byBoZWxwIGVuZm9yY2UgZW5kaWFubmVzcyBjb3JyZWN0bmVzcy4gQW5kIHRoZSBwcmludCBmb3JtYXQgY29udmVydHMgdGhlIGVuZGlhbm5lc3Mgd2hlbiBkaXNwbGF5aW5nLlxuXG5JJ20gc2F0aXNmaWVkIHRoYXQgdGhpcyBzcGVjaWZpYyBjaGFuZ2UgZG9lc24ndCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBIb3dldmVyLCBqdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGNvZGViYXNlIGZvciBvdGhlciB1c2VzIG9mIGBrZXlgLCBgc2FsdGAsIG9yIHRoZSBgc3RydWN0IG5zaW1fc2FgIHdpdGhpbiBgbmV0ZGV2c2ltYC4gVGhhdCdzIHRoZSBuZXh0IHN0ZXAsIGp1c3QgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzgyOSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjU4OjM3Ljg1MDk0MDgzN1oiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1NzQyMDYyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuc2ltX3NhXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jPTEyPXN0YXRpYyBzc2l6ZV90IG5zaW1fZGJnX25ldGRldl9vcHNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jLTM2LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBOU0lNX0lQU0VDX01BWF9TQV9DT1VOVDsgaSsrKSB7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmM6Mzc6XFx0XFx0c3RydWN0IG5zaW1fc2EgKnNhcCA9IFxcdTAwMjZpcHNlYy1cXHUwMDNlc2FbaV07XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtMzgtXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYz0xMzI9c3RhdGljIGludCBuc2ltX2lwc2VjX2FkZF9zYShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmMtMTM3LVxcdHN0cnVjdCBuZXRkZXZzaW0gKm5zO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jOjEzODpcXHRzdHJ1Y3QgbnNpbV9zYSBzYTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy0xMzktXFx0dTE2IHNhX2lkeDtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jPTIwMj1zdGF0aWMgdm9pZCBuc2ltX2lwc2VjX2RlbF9zYShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeHMpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy0yMTQtXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2lwc2VjLmM6MjE1OlxcdG1lbXNldChcXHUwMDI2aXBzZWMtXFx1MDAzZXNhW3NhX2lkeF0sIDAsIHNpemVvZihzdHJ1Y3QgbnNpbV9zYSkpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jLTIxNi1cXHRpcHNlYy1cXHUwMDNlY291bnQtLTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jPTIyND1ib29sIG5zaW1faXBzZWNfdHgoc3RydWN0IG5ldGRldnNpbSAqbnMsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaXBzZWMuYy0yMjgtXFx0c3RydWN0IHhmcm1fc3RhdGUgKnhzO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jOjIyOTpcXHRzdHJ1Y3QgbnNpbV9zYSAqdHNhO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9pcHNlYy5jLTIzMC1cXHR1MzIgc2FfaWR4O1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQxLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDo0MjpzdHJ1Y3QgbnNpbV9zYSB7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQzLVxcdHN0cnVjdCB4ZnJtX3N0YXRlICp4cztcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD01Mj1zdHJ1Y3QgbnNpbV9pcHNlYyB7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjUzOlxcdHN0cnVjdCBuc2ltX3NhIHNhW05TSU1fSVBTRUNfTUFYX1NBX0NPVU5UXTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtNTQtXFx0c3RydWN0IGRlbnRyeSAqcGZpbGU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjU4OjQwLjAwODM3MDQ5NFoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODU0NzA3MTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIElQc2VjIFBhdGNoKipcblxuT2theSwgdGhpcyBpcyBwcmV0dHkgY2xlYW4uIEZyb20gd2hhdCBJIGNhbiBzZWUsIHRoaXMgcGF0Y2ggaXMgYSBzdHJhaWdodGZvcndhcmQgZml4IGZvciBob3cgdGhlIG5ldGRldnNpbSBkcml2ZXIgaGFuZGxlcyB0aGUgZW5kaWFubmVzcyBvZiBJUHNlYyBrZXlzIGFuZCBzYWx0LiBUaGV5J3JlIGNvcnJlY3RseSB1cGRhdGluZyB0aGUgZGF0YSB0eXBlcyBmcm9tIHRoZSBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBgdTMyYCB0byB0aGUgbmV0d29yay1ieXRlLW9yZGVyLWF3YXJlIGBfX2JlMzJgLCB3aGljaCBpcyBjcnVjaWFsIGZvciBjcm9zcy1zeXN0ZW0gY29tcGF0aWJpbGl0eSwgYW5kIGFkZGluZyB0aGUgbmVjZXNzYXJ5IGBiZTMyX3RvX2NwdSgpYCBjYWxscyB3aGVuIGNvbnZlcnRpbmcgdGhlIHZhbHVlcyBmb3IgZGVidWdmcyBvdXRwdXQuIFRoaXMgZW5zdXJlcyBjb3JyZWN0IHJlcHJlc2VudGF0aW9uIGFjcm9zcyBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcy5cblxuSSd2ZSBjaGVja2VkLCBhbmQgSSBkb24ndCBzZWUgYW55dGhpbmcgaGVyZSB0aGF0IGludHJvZHVjZXMgbmV3IHJpc2tzOiBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMsIG5vIGRvZGd5IGFsbG9jYXRpb25zLCBhbmQgY2VydGFpbmx5IG5vIG9idmlvdXMgaW5mb3JtYXRpb24gbGVha3MsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJIHdhcyBob3BpbmcgZm9yLiBJdCdzIGEgdGFyZ2V0ZWQgYW5kIGZvY3VzZWQgZml4LlxuXG5HaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2UgYW5kIGl0cyBpbXBsaWNhdGlvbnMgZm9yIGNvbnNpc3RlbnQgSVBzZWMga2V5IHJlcHJlc2VudGF0aW9uLCB0aGUgcmlzayBzZWVtcyBtaW5pbWFsLiBUaGVyZWZvcmUsIEknbGwgcmVjb21tZW5kIHJ1bm5pbmcgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCB3aXRoIGBOZWVkc0tNU0FOPWZhbHNlYCBhbmQgcHJvdmlkZSBhIGRldGFpbGVkIGV4cGxhbmF0aW9uIG9mIHRoZSBmaXhlcyBtYWRlIHRvIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTk0LCJPdXRwdXRUb2tlbnMiOjE0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzo1ODo0Mi44NjMwODEzMjFaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGVuZGlhbm5lc3MgaGFuZGxpbmcgb2YgSVBzZWMga2V5cyBhbmQgc2FsdCB2YWx1ZXMgaW4gbmV0ZGV2c2ltIGJ5IGNoYW5naW5nIHRoZSB0eXBlIGFubm90YXRpb25zIGZyb20gdTMyIHRvIF9fYmUzMiBhbmQgY29udmVydGluZyB0aGVtIHdpdGggYmUzMl90b19jcHUoKSB3aGVuIGZvcm1hdHRpbmcgZGVidWdmcyBvdXRwdXQuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdCBwYWRkaW5nIGNoYW5nZXMsIGNvcGllcyBvZiByYXcga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYXJlIGludHJvZHVjZWQuIEFsbCBidWZmZXJzIGFuZCBzdHJ1Y3R1cmVzIGluIG5ldGRldnNpbSBJUHNlYyBjb2RlIHJlbWFpbiBwcm9wZXJseSBpbml0aWFsaXplZCB2aWEgbWVtc2V0L2t6YWxsb2MuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGVuZGlhbm5lc3MgaGFuZGxpbmcgb2YgSVBzZWMga2V5cyBhbmQgc2FsdCB2YWx1ZXMgaW4gbmV0ZGV2c2ltIGJ5IGNoYW5naW5nIHRoZSB0eXBlIGFubm90YXRpb25zIGZyb20gdTMyIHRvIF9fYmUzMiBhbmQgY29udmVydGluZyB0aGVtIHdpdGggYmUzMl90b19jcHUoKSB3aGVuIGZvcm1hdHRpbmcgZGVidWdmcyBvdXRwdXQuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdCBwYWRkaW5nIGNoYW5nZXMsIGNvcGllcyBvZiByYXcga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYXJlIGludHJvZHVjZWQuIEFsbCBidWZmZXJzIGFuZCBzdHJ1Y3R1cmVzIGluIG5ldGRldnNpbSBJUHNlYyBjb2RlIHJlbWFpbiBwcm9wZXJseSBpbml0aWFsaXplZCB2aWEgbWVtc2V0L2t6YWxsb2MuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6vsf8[1] Phase: Succeeded StartedAt: 2026-09-08 17:58:54 +0000 UTC FinishedAt: 2026-09-08 17:58:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6vsf8[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-08 17:58:54 +0000 UTC FinishedAt: 2026-09-08 17:58:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6vsf8[2] Phase: Succeeded StartedAt: 2026-09-08 17:58:54 +0000 UTC FinishedAt: 2026-09-08 21:41:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6vsf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_dbg_netdev_ops_read","nsim_ipsec_parse_proto_keys","nsim_ipsec_add_sa"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"8f5cb4b7-30a7-4856-b6ec-7aa7cde1fd79","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-08 17:58:54 +0000 UTC FinishedAt: 2026-09-08 21:41:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_dbg_netdev_ops_read","nsim_ipsec_parse_proto_keys","nsim_ipsec_add_sa"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"8f5cb4b7-30a7-4856-b6ec-7aa7cde1fd79","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow6vsf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_dbg_netdev_ops_read","nsim_ipsec_parse_proto_keys","nsim_ipsec_add_sa"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"8f5cb4b7-30a7-4856-b6ec-7aa7cde1fd79","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-08 17:58:54 +0000 UTC FinishedAt: 2026-09-08 17:59:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6vsf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_dbg_netdev_ops_read","nsim_ipsec_parse_proto_keys","nsim_ipsec_add_sa"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"8f5cb4b7-30a7-4856-b6ec-7aa7cde1fd79","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-08 17:58:54 +0000 UTC FinishedAt: 2026-09-08 17:58:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6vsf8/series-workflow6vsf8-convert-artifact-1352396143/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6vsf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_dbg_netdev_ops_read","nsim_ipsec_parse_proto_keys","nsim_ipsec_add_sa"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"8f5cb4b7-30a7-4856-b6ec-7aa7cde1fd79","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-08 17:59:04 +0000 UTC FinishedAt: 2026-09-08 18:17:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6vsf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_dbg_netdev_ops_read","nsim_ipsec_parse_proto_keys","nsim_ipsec_add_sa"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"8f5cb4b7-30a7-4856-b6ec-7aa7cde1fd79","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-08 17:59:04 +0000 UTC FinishedAt: 2026-09-08 18:17:11 +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:*a69ccf14-3f2f-4f1c-897d-a845c4d1bd91,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-workflow6vsf8/series-workflow6vsf8-convert-artifact-1352396143/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": "ac850f36-9b68-49ff-ad33-ed1f63b1e55d", "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-workflow6vsf8/series-workflow6vsf8-build-action-3365579317/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6vsf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_dbg_netdev_ops_read","nsim_ipsec_parse_proto_keys","nsim_ipsec_add_sa"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"8f5cb4b7-30a7-4856-b6ec-7aa7cde1fd79","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-08 17:59:04 +0000 UTC FinishedAt: 2026-09-08 18:17:01 +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:*a69ccf14-3f2f-4f1c-897d-a845c4d1bd91,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-workflow6vsf8/series-workflow6vsf8-convert-artifact-1352396143/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": "ac850f36-9b68-49ff-ad33-ed1f63b1e55d", "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-workflow6vsf8/series-workflow6vsf8-build-action-3365579317/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6vsf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_dbg_netdev_ops_read","nsim_ipsec_parse_proto_keys","nsim_ipsec_add_sa"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"8f5cb4b7-30a7-4856-b6ec-7aa7cde1fd79","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-08 18:17:11 +0000 UTC FinishedAt: 2026-09-08 18:17:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6vsf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_dbg_netdev_ops_read","nsim_ipsec_parse_proto_keys","nsim_ipsec_add_sa"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"8f5cb4b7-30a7-4856-b6ec-7aa7cde1fd79","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-08 18:17:11 +0000 UTC FinishedAt: 2026-09-08 18:17:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6vsf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_dbg_netdev_ops_read","nsim_ipsec_parse_proto_keys","nsim_ipsec_add_sa"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"8f5cb4b7-30a7-4856-b6ec-7aa7cde1fd79","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-08 18:17:11 +0000 UTC FinishedAt: 2026-09-08 18:17:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6vsf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_dbg_netdev_ops_read","nsim_ipsec_parse_proto_keys","nsim_ipsec_add_sa"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"8f5cb4b7-30a7-4856-b6ec-7aa7cde1fd79","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-08 18:17:11 +0000 UTC FinishedAt: 2026-09-08 18:17:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"8f5cb4b7-30a7-4856-b6ec-7aa7cde1fd79","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6vsf8/series-workflow6vsf8-convert-artifact-2360565182/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6vsf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_dbg_netdev_ops_read","nsim_ipsec_parse_proto_keys","nsim_ipsec_add_sa"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"8f5cb4b7-30a7-4856-b6ec-7aa7cde1fd79","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-08 18:17:21 +0000 UTC FinishedAt: 2026-09-08 18:19:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6vsf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_dbg_netdev_ops_read","nsim_ipsec_parse_proto_keys","nsim_ipsec_add_sa"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"8f5cb4b7-30a7-4856-b6ec-7aa7cde1fd79","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-08 18:17:21 +0000 UTC FinishedAt: 2026-09-08 18:19:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ac850f36-9b68-49ff-ad33-ed1f63b1e55d,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-workflow6vsf8/series-workflow6vsf8-build-action-3365579317/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-workflow6vsf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_dbg_netdev_ops_read","nsim_ipsec_parse_proto_keys","nsim_ipsec_add_sa"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"8f5cb4b7-30a7-4856-b6ec-7aa7cde1fd79","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-08 18:19:13 +0000 UTC FinishedAt: 2026-09-08 18:19:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6vsf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_dbg_netdev_ops_read","nsim_ipsec_parse_proto_keys","nsim_ipsec_add_sa"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"8f5cb4b7-30a7-4856-b6ec-7aa7cde1fd79","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-08 18:19:13 +0000 UTC FinishedAt: 2026-09-08 18:19:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6vsf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_dbg_netdev_ops_read","nsim_ipsec_parse_proto_keys","nsim_ipsec_add_sa"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"8f5cb4b7-30a7-4856-b6ec-7aa7cde1fd79","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-08 18:19:13 +0000 UTC FinishedAt: 2026-09-08 18:36:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6vsf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_dbg_netdev_ops_read","nsim_ipsec_parse_proto_keys","nsim_ipsec_add_sa"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"8f5cb4b7-30a7-4856-b6ec-7aa7cde1fd79","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-08 18:19:13 +0000 UTC FinishedAt: 2026-09-08 18:36:47 +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:*a69ccf14-3f2f-4f1c-897d-a845c4d1bd91,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-workflow6vsf8/series-workflow6vsf8-convert-artifact-2360565182/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": "5c0ec683-db2f-43fa-9c1b-1bbaed76480f", "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-workflow6vsf8/series-workflow6vsf8-build-action-118363922/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6vsf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_dbg_netdev_ops_read","nsim_ipsec_parse_proto_keys","nsim_ipsec_add_sa"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"8f5cb4b7-30a7-4856-b6ec-7aa7cde1fd79","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-08 18:19:13 +0000 UTC FinishedAt: 2026-09-08 18:36:37 +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:*a69ccf14-3f2f-4f1c-897d-a845c4d1bd91,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-workflow6vsf8/series-workflow6vsf8-convert-artifact-2360565182/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": "5c0ec683-db2f-43fa-9c1b-1bbaed76480f", "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-workflow6vsf8/series-workflow6vsf8-build-action-118363922/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6vsf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_dbg_netdev_ops_read","nsim_ipsec_parse_proto_keys","nsim_ipsec_add_sa"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"8f5cb4b7-30a7-4856-b6ec-7aa7cde1fd79","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-08 18:36:47 +0000 UTC FinishedAt: 2026-09-08 18:36:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6vsf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_dbg_netdev_ops_read","nsim_ipsec_parse_proto_keys","nsim_ipsec_add_sa"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"8f5cb4b7-30a7-4856-b6ec-7aa7cde1fd79","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-08 18:36:47 +0000 UTC FinishedAt: 2026-09-08 18:36:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6vsf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_dbg_netdev_ops_read","nsim_ipsec_parse_proto_keys","nsim_ipsec_add_sa"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"8f5cb4b7-30a7-4856-b6ec-7aa7cde1fd79","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-08 18:36:47 +0000 UTC FinishedAt: 2026-09-08 18:38:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6vsf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_dbg_netdev_ops_read","nsim_ipsec_parse_proto_keys","nsim_ipsec_add_sa"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"8f5cb4b7-30a7-4856-b6ec-7aa7cde1fd79","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-08 18:36:47 +0000 UTC FinishedAt: 2026-09-08 18:38:24 +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:*5c0ec683-db2f-43fa-9c1b-1bbaed76480f,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-workflow6vsf8/series-workflow6vsf8-build-action-118363922/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-workflow6vsf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_dbg_netdev_ops_read","nsim_ipsec_parse_proto_keys","nsim_ipsec_add_sa"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"8f5cb4b7-30a7-4856-b6ec-7aa7cde1fd79","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-08 18:38:34 +0000 UTC FinishedAt: 2026-09-08 21:41:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6vsf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_dbg_netdev_ops_read","nsim_ipsec_parse_proto_keys","nsim_ipsec_add_sa"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"8f5cb4b7-30a7-4856-b6ec-7aa7cde1fd79","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-08 18:38:34 +0000 UTC FinishedAt: 2026-09-08 21:41:27 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_dbg_netdev_ops_read","nsim_ipsec_parse_proto_keys","nsim_ipsec_add_sa"],"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:*ac850f36-9b68-49ff-ad33-ed1f63b1e55d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5c0ec683-db2f-43fa-9c1b-1bbaed76480f,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-workflow6vsf8/series-workflow6vsf8-build-action-3365579317/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-workflow6vsf8/series-workflow6vsf8-build-action-118363922/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6vsf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_dbg_netdev_ops_read","nsim_ipsec_parse_proto_keys","nsim_ipsec_add_sa"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"8f5cb4b7-30a7-4856-b6ec-7aa7cde1fd79","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-08 18:38:34 +0000 UTC FinishedAt: 2026-09-08 18:38:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6vsf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_dbg_netdev_ops_read","nsim_ipsec_parse_proto_keys","nsim_ipsec_add_sa"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"8f5cb4b7-30a7-4856-b6ec-7aa7cde1fd79","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-08 18:38:34 +0000 UTC FinishedAt: 2026-09-08 18:38:39 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_dbg_netdev_ops_read","nsim_ipsec_parse_proto_keys","nsim_ipsec_add_sa"],"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-workflow6vsf8/series-workflow6vsf8-convert-artifact-1769619395/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6vsf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_dbg_netdev_ops_read","nsim_ipsec_parse_proto_keys","nsim_ipsec_add_sa"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"8f5cb4b7-30a7-4856-b6ec-7aa7cde1fd79","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-08 18:38:34 +0000 UTC FinishedAt: 2026-09-08 18:38:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6vsf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_dbg_netdev_ops_read","nsim_ipsec_parse_proto_keys","nsim_ipsec_add_sa"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"8f5cb4b7-30a7-4856-b6ec-7aa7cde1fd79","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-08 18:38:34 +0000 UTC FinishedAt: 2026-09-08 18:38:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6vsf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_dbg_netdev_ops_read","nsim_ipsec_parse_proto_keys","nsim_ipsec_add_sa"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"8f5cb4b7-30a7-4856-b6ec-7aa7cde1fd79","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-08 18:38:34 +0000 UTC FinishedAt: 2026-09-08 18:38:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6vsf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_dbg_netdev_ops_read","nsim_ipsec_parse_proto_keys","nsim_ipsec_add_sa"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"8f5cb4b7-30a7-4856-b6ec-7aa7cde1fd79","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-08 18:38:44 +0000 UTC FinishedAt: 2026-09-08 21:41:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6vsf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_dbg_netdev_ops_read","nsim_ipsec_parse_proto_keys","nsim_ipsec_add_sa"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","XFRM_OFFLOAD","INET_ESP_OFFLOAD","DEBUG_FS"],"series_id":"8f5cb4b7-30a7-4856-b6ec-7aa7cde1fd79","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-08 18:38:44 +0000 UTC FinishedAt: 2026-09-08 21:41:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ac850f36-9b68-49ff-ad33-ed1f63b1e55d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5c0ec683-db2f-43fa-9c1b-1bbaed76480f,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-workflow6vsf8/series-workflow6vsf8-build-action-3365579317/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-workflow6vsf8/series-workflow6vsf8-build-action-118363922/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-workflow6vsf8/series-workflow6vsf8-convert-artifact-1769619395/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,}