Name: series-workflow5mv5p Phase: Succeeded StartedAt: 2026-08-13 18:59:37 +0000 UTC FinishedAt: 2026-08-13 23:07:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5mv5p[0] Phase: Succeeded StartedAt: 2026-08-13 18:59:37 +0000 UTC FinishedAt: 2026-08-13 19:22:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5mv5p[0].run-triage Phase: Succeeded StartedAt: 2026-08-13 18:59:37 +0000 UTC FinishedAt: 2026-08-13 19:22:12 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "3205699d79f262412c1be7fc1c04066610d3cd52", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TUN", "TAP", "MACVTAP", "PACKET", "VIRTIO_NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "3205699d79f262412c1be7fc1c04066610d3cd52", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TUN", "TAP", "MACVTAP", "PACKET", "VIRTIO_NET" ], "series_id": "ccf036e1-8494-4eab-b5ce-2a71352ea2a6" }, "track": "KASAN", "fuzz": { "focus": [ "kvm", "net" ], "focus_symbols": [ "skb_segment", "tun_get_user", "tap_get_user", "packet_snd", "tpacket_snd", "receive_big", "receive_mergeable" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RVTiYjMzQ7LAogICAgJiMzNDtUQVAmIzM0OywKICAgICYjMzQ7TUFDVlRBUCYjMzQ7LAogICAgJiMzNDtQQUNLRVQmIzM0OywKICAgICYjMzQ7VklSVElPX05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NrYl9zZWdtZW50JiMzNDssCiAgICAmIzM0O3R1bl9nZXRfdXNlciYjMzQ7LAogICAgJiMzNDt0YXBfZ2V0X3VzZXImIzM0OywKICAgICYjMzQ7cGFja2V0X3NuZCYjMzQ7LAogICAgJiMzNDt0cGFja2V0X3NuZCYjMzQ7LAogICAgJiMzNDtyZWNlaXZlX2JpZyYjMzQ7LAogICAgJiMzNDtyZWNlaXZlX21lcmdlYWJsZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBwb3RlbnRpYWwgaXNzdWVzIHdpdGggR1NPIHNpemUgYW5kIHNlZ21lbnQgY2FsY3VsYXRpb25zLCBsaWtlbHkgcHJldmVudGluZyBpbnRlZ2VyIG92ZXJmbG93cywgZXhjZXNzaXZlIHNlZ21lbnQgY291bnRzLCBvciBkaXZpc2lvbiBieSB6ZXJvLiBJdCBlbmZvcmNlcyBhIG1pbmltdW0gYGdzb19zaXplYCBhbmQgbGltaXRzIGBwYXJ0aWFsX3NlZ3NgIHRvIGBHU09fTUFYX1NFR1NgLiBUaGVzZSBhcmUgYXJpdGhtZXRpYyBhbmQgYm91bmRzLWNoZWNraW5nIGZpeGVzLiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb2YgbmV3IGRhdGEgc3RydWN0dXJlcywgbm8gY2hhbmdlcyB0byBtZW1vcnkgaW5pdGlhbGl6YXRpb24sIGFuZCBubyByaXNrIG9mIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNpbmcgaXQgaW4gY29udHJvbCBmbG93LiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgY3Jhc2hlcyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGxvZ2ljIGZvciBHU08gc2VnbWVudGF0aW9uIChgc2tiX3NlZ21lbnRgKSBhbmQgdmlydGlvIG5ldCBoZWFkZXIgcGFyc2luZyAoYF9fdmlydGlvX25ldF9oZHJfdG9fc2tiYCkuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGhvdyBwYWNrZXRzIGFyZSBzZWdtZW50ZWQgYW5kIGhvdyB2aXJ0aW8gaGVhZGVycyBhcmUgdmFsaWRhdGVkLCB3aGljaCBhcmUgcmVhY2hhYmxlIHZpYSBUVU4vVEFQIGRldmljZXMsIEFGX1BBQ0tFVCBzb2NrZXRzLCBhbmQgdmlydGlvLW5ldC4gVGhlIGNoYW5nZXMgaGF2ZSBmdW5jdGlvbmFsIGltcGFjdCBhbmQgYXJlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTk6MTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhM2JjZDAxM2FmYTVhODQ0MDZkMmNiYzE1NmQ1NjI1YmVhMGMzOGM0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMTk6MTk6NTEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaFxuaW5kZXggZjM2ZDIxYjViYzE5ZS4uYzM4MWI5MTZjMWI1NCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvX25ldC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaFxuQEAgLTYsNiAmIzQzOzYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcHY2LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91ZHAuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvdGNwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L3RjcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC92aXJ0aW9fbmV0LmhcdTAwM2VcbiBcbkBAIC0xNzksNiAmIzQzOzE4MCw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IF9fdmlydGlvX25ldF9oZHJfdG9fc2tiKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0aWYgKHNrYi1cdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICAgc2tiLVx1MDAzZWNzdW1fb2Zmc2V0ICE9IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKSlcbiBcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRcdFx0QlVJTERfQlVHX09OKFRDUF9NSU5fR1NPX1NJWkUgKiBHU09fTUFYX1NFR1MgXHUwMDNjIEdTT19NQVhfU0laRSk7XG4mIzQzO1x0XHRcdGdzb19zaXplID0gbWF4KGdzb19zaXplLCBUQ1BfTUlOX0dTT19TSVpFKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmNcbmluZGV4IGM4MmExNDcyYTVlYTguLjQzOWNiZmViMDJiZDYgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9za2J1ZmYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc2tidWZmLmNcbkBAIC00ODYwLDcgJiM0Mzs0ODYwLDcgQEAgc3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50KHN0cnVjdCBza19idWZmICpoZWFkX3NrYixcbiBcdFx0ICogZG9lc24mIzM5O3QgZml0IGludG8gYW4gTVNTIHNpemVkIGJsb2NrLCBzbyB0YWtlIGNhcmUgb2YgdGhhdFxuIFx0XHQgKiBub3cuXG4gXHRcdCAqL1xuLVx0XHRwYXJ0aWFsX3NlZ3MgPSBsZW4gLyBtc3M7XG4mIzQzO1x0XHRwYXJ0aWFsX3NlZ3MgPSBtaW4obGVuIC8gbXNzLCBHU09fTUFYX1NFR1MpO1xuIFx0XHRpZiAocGFydGlhbF9zZWdzIFx1MDAzZSAxKVxuIFx0XHRcdG1zcyAqPSBwYXJ0aWFsX3NlZ3M7XG4gXHRcdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxOToxOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFVOJiMzNDssCiAgICAmIzM0O1RBUCYjMzQ7LAogICAgJiMzNDtNQUNWVEFQJiMzNDssCiAgICAmIzM0O1BBQ0tFVCYjMzQ7LAogICAgJiMzNDtWSVJUSU9fTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2tiX3NlZ21lbnQmIzM0OywKICAgICYjMzQ7dHVuX2dldF91c2VyJiMzNDssCiAgICAmIzM0O3RhcF9nZXRfdXNlciYjMzQ7LAogICAgJiMzNDtwYWNrZXRfc25kJiMzNDssCiAgICAmIzM0O3RwYWNrZXRfc25kJiMzNDssCiAgICAmIzM0O3JlY2VpdmVfYmlnJiMzNDssCiAgICAmIzM0O3JlY2VpdmVfbWVyZ2VhYmxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBsb2dpYyBmb3IgR1NPIHNlZ21lbnRhdGlvbiAoYHNrYl9zZWdtZW50YCkgYW5kIHZpcnRpbyBuZXQgaGVhZGVyIHBhcnNpbmcgKGBfX3ZpcnRpb19uZXRfaGRyX3RvX3NrYmApLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBob3cgcGFja2V0cyBhcmUgc2VnbWVudGVkIGFuZCBob3cgdmlydGlvIGhlYWRlcnMgYXJlIHZhbGlkYXRlZCwgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgVFVOL1RBUCBkZXZpY2VzLCBBRl9QQUNLRVQgc29ja2V0cywgYW5kIHZpcnRpby1uZXQuIFRoZSBjaGFuZ2VzIGhhdmUgZnVuY3Rpb25hbCBpbXBhY3QgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTNiY2QwMTNhZmE1YTg0NDA2ZDJjYmMxNTZkNTYyNWJlYTBjMzhjNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDE5OjE5OjUxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaAppbmRleCBmMzZkMjFiNWJjMTllLi5jMzgxYjkxNmMxYjU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaApAQCAtNiw2ICYjNDM7Niw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvaXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pcHY2LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdWRwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC90Y3AuaCZndDsKICNpbmNsdWRlICZsdDt1YXBpL2xpbnV4L3RjcC5oJmd0OwogI2luY2x1ZGUgJmx0O3VhcGkvbGludXgvdmlydGlvX25ldC5oJmd0OwogCkBAIC0xNzksNiAmIzQzOzE4MCw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IF9fdmlydGlvX25ldF9oZHJfdG9fc2tiKHN0cnVjdCBza19idWZmICpza2IsCiAJCQlpZiAoc2tiLSZndDtpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCAmYW1wOyZhbXA7CiAJCQkgICAgc2tiLSZndDtjc3VtX29mZnNldCAhPSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjaykpCiAJCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CQkJQlVJTERfQlVHX09OKFRDUF9NSU5fR1NPX1NJWkUgKiBHU09fTUFYX1NFR1MgJmx0OyBHU09fTUFYX1NJWkUpOwomIzQzOwkJCWdzb19zaXplID0gbWF4KGdzb19zaXplLCBUQ1BfTUlOX0dTT19TSVpFKTsKIAkJCWJyZWFrOwogCQl9CiAKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmMKaW5kZXggYzgyYTE0NzJhNWVhOC4uNDM5Y2JmZWIwMmJkNiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc2tidWZmLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc2tidWZmLmMKQEAgLTQ4NjAsNyAmIzQzOzQ4NjAsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKmhlYWRfc2tiLAogCQkgKiBkb2VzbiYjMzk7dCBmaXQgaW50byBhbiBNU1Mgc2l6ZWQgYmxvY2ssIHNvIHRha2UgY2FyZSBvZiB0aGF0CiAJCSAqIG5vdy4KIAkJICovCi0JCXBhcnRpYWxfc2VncyA9IGxlbiAvIG1zczsKJiM0MzsJCXBhcnRpYWxfc2VncyA9IG1pbihsZW4gLyBtc3MsIEdTT19NQVhfU0VHUyk7CiAJCWlmIChwYXJ0aWFsX3NlZ3MgJmd0OyAxKQogCQkJbXNzICo9IHBhcnRpYWxfc2VnczsKIAkJZWxzZQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxOToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzE3CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE5ldHdvcmtpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0b3VjaGVzIHNvbWUgcHJldHR5IGZ1bmRhbWVudGFsIG5ldHdvcmtpbmcgY29kZS4gSXQmIzM5O3MgdG91Y2hpbmcgYGluY2x1ZGUvbGludXgvdmlydGlvX25ldC5oYCBhbmQgYG5ldC9jb3JlL3NrYnVmZi5jYCwgd2hpY2ggaW1tZWRpYXRlbHkgcmFpc2VzIG15IGV5ZWJyb3dzIOKAkyB0aGF0JiMzOTtzIGNvcmUgc3R1ZmYuIFNwZWNpZmljYWxseSwgaXQgYXBwZWFycyB0byBiZSBtb2RpZnlpbmcgaG93IFRDUCBzZWdtZW50YXRpb24gb2ZmbG9hZCAoVFNPKSBpcyBoYW5kbGVkLCBnaXZlbiB0aGUgY29udGV4dCBpbiBgX192aXJ0aW9fbmV0X2hkcl90b19za2JgIHdpdGhpbiBgdmlydGlvX25ldC5oYCwgYW5kIGBza2Jfc2VnbWVudGAgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYC4KCkkgY2FuIHNlZSBzb21lIHNpZ25pZmljYW50IGNoYW5nZXMgaGVyZS4gSW4gYGluY2x1ZGUvbGludXgvdmlydGlvX25ldC5oYCwgaXQgaW50cm9kdWNlcyBhIGBCVUlMRF9CVUdfT05gIGNoZWNrIGFuZCBtb2RpZmllcyB0aGUgYGdzb19zaXplYCBjYWxjdWxhdGlvbiwgc3BlY2lmaWNhbGx5IHVzaW5nIGBUQ1BfTUlOX0dTT19TSVpFYC4gVGhpcyBzdWdnZXN0cyB0aGV5JiMzOTtyZSB0cnlpbmcgdG8gZW5mb3JjZSBhIG1pbmltdW0gR1NPIHNpemUsIGxpa2VseSB0byBhbGlnbiB3aXRoIHNvbWUgaGFyZHdhcmUgY29uc3RyYWludCBvciBvcHRpbWl6YXRpb24uIFRoZSBgbWluYCBmdW5jdGlvbiBpbiBgbmV0L2NvcmUvc2tidWZmLmNgLCBzdWdnZXN0cyB0aGVyZSBpcyBhbiB1cHBlciBib3VuZCBvbiBgbGVuIC8gbXNzYCwgd2hpY2ggcHJldmVudHMgbGFyZ2Ugc2VnbWVudHMgZnJvbSBiZWluZyBjcmVhdGVkLiBUaGlzIGxvb2tzIHJlbGF0ZWQgdG8gaG93IHBhY2tldHMgYXJlIGZyYWdtZW50ZWQgYW5kIHJlYXNzZW1ibGVkLCB3aGljaCBpcyB3aGVyZSBUU08gb2Z0ZW4gY29tZXMgaW50byBwbGF5LgoKR2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgZnVuY3Rpb25hbCBjaGFuZ2VzLCB0aGlzIHBhdGNoIHdhcnJhbnRzIHRob3JvdWdoIGZ1enppbmcuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiBpZGVudGlmeWluZyB0aGUga2V5IGVudHJ5IHBvaW50cy4gYHNrYl9zZWdtZW50YCBpcyBhIG5vbi1zdGF0aWMsIGV4cG9ydGVkIGZ1bmN0aW9uLCB3aGljaCBtZWFucyBpdCYjMzk7cyBhIGRpcmVjdCBBUEkgZW50cnlwb2ludC4gVGhhdCYjMzk7cyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4gYF9fdmlydGlvX25ldF9oZHJfdG9fc2tiYCwgb24gdGhlIG90aGVyIGhhbmQsIGlzIHN0YXRpYyBhbmQgaW5saW5lLCBtZWFuaW5nIGl0JiMzOTtzIGlubGluZWQuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIHRyYWNlIGl0cyB1c2VzIHRvIGZpbmQgdGhlIGFjdHVhbCBjYWxsIHNpdGVzIHRoYXQgSSYjMzk7bGwgbmVlZCB0byBmdXp6LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fdmlydGlvX25ldF9oZHJfdG9fc2tiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvdmlydGlvX25ldC5oPTI5PXN0YXRpYyBpbmxpbmUgaW50IHZpcnRpb19uZXRfaGRyX3NldF9wcm90byhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmluY2x1ZGUvbGludXgvdmlydGlvX25ldC5oLTUwLVxuaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0Lmg6NTE6c3RhdGljIGlubGluZSBpbnQgX192aXJ0aW9fbmV0X2hkcl90b19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYixcbmluY2x1ZGUvbGludXgvdmlydGlvX25ldC5oLTUyLVx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCB2aXJ0aW9fbmV0X2hkciAqaGRyLFxuLS1cbmluY2x1ZGUvbGludXgvdmlydGlvX25ldC5oPTIwNz1zdGF0aWMgaW5saW5lIGludCB2aXJ0aW9fbmV0X2hkcl90b19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaC0yMTAte1xuaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0Lmg6MjExOlx0cmV0dXJuIF9fdmlydGlvX25ldF9oZHJfdG9fc2tiKHNrYiwgaGRyLCBsaXR0bGVfZW5kaWFuLCBoZHItXHUwMDNlZ3NvX3R5cGUpO1xuaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmgtMjEyLX1cbi0tXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaD0yOTY9dmlydGlvX25ldF9oZHJfdG5sX3RvX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmluY2x1ZGUvbGludXgvdmlydGlvX25ldC5oLTM0NS1cdC8qIExldCB0aGUgYmFzaWMgcGFyc2luZyBkZWFsIHdpdGggcGxhaW4gR1NPIGZlYXR1cmVzLiAqL1xuaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0Lmg6MzQ2Olx0cmV0ID0gX192aXJ0aW9fbmV0X2hkcl90b19za2Ioc2tiLCBoZHIsIHRydWUsXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaC0zNDctXHRcdFx0XHQgICAgICBoZHItXHUwMDNlZ3NvX3R5cGUgXHUwMDI2IH5nc29fdHVubmVsX3R5cGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MjUKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHQgcHJvY2Vzc2VzOgoKKipBbmFseXppbmcgdmlydGlvX25ldCBIZWFkZXIgQ29udmVyc2lvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGB2aXJ0aW9fbmV0X2hkcl90b19za2JgIGFuZCBgdmlydGlvX25ldF9oZHJfdG5sX3RvX3NrYmAgZnVuY3Rpb25zLCBhbmQgdGhlIGZhY3QgdGhhdCB0aGV5JiMzOTtyZSBib3RoIGRlY2xhcmVkIGFzIGBzdGF0aWMgaW5saW5lYCBpcyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZy4gVGhpcyBtZWFucyB0aGV5JiMzOTtyZSBsaWtlbHkgcGVyZm9ybWFuY2UtY3JpdGljYWwgYW5kIG9wdGltaXplZCBmb3IgaW5saW5pbmcuIE5vdywgbXkgbmV4dCBtb3ZlIGlzIGNsZWFyOiBJIG5lZWQgdG8gdHJhY2UgdGhlaXIgdXNhZ2UuIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgKndoZXJlKiB0aGV5JiMzOTtyZSBiZWluZyBjYWxsZWQgd2l0aGluIHRoZSBicm9hZGVyIHZpcnRpby1uZXQgaW1wbGVtZW50YXRpb24uIEZpbmRpbmcgdGhlaXIgY2FsbCBzaXRlcyB3aWxsIGdpdmUgbWUgY3J1Y2lhbCBjb250ZXh0LiBUaGlzIHNob3VsZCB0ZWxsIG1lIHdoYXQgZGF0YSBpcyBiZWluZyB0cmFuc2xhdGVkLCB3aGVuIGFuZCBieSB3aGF0IHBhcnRzIG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBVbmRlcnN0YW5kaW5nIHRoaXMgaXMga2V5IHRvIGZvcm1pbmcgYSBmdWxsZXIgdW5kZXJzdGFuZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxOToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aXJ0aW9fbmV0X2hkcl90b19za2ImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC91bS9kcml2ZXJzL3ZlY3Rvcl90cmFuc3BvcnRzLmM9MTk2PXN0YXRpYyBpbnQgcmF3X3ZlcmlmeV9oZWFkZXIoXG4tLVxuYXJjaC91bS9kcml2ZXJzL3ZlY3Rvcl90cmFuc3BvcnRzLmMtMjExLVxuYXJjaC91bS9kcml2ZXJzL3ZlY3Rvcl90cmFuc3BvcnRzLmM6MjEyOlx0dmlydGlvX25ldF9oZHJfdG9fc2tiKHNrYiwgdmhlYWRlciwgdmlydGlvX2xlZ2FjeV9pc19saXR0bGVfZW5kaWFuKCkpO1xuYXJjaC91bS9kcml2ZXJzL3ZlY3Rvcl90cmFuc3BvcnRzLmMtMjEzLVx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy9uZXQvdHVuX3ZuZXQuaD0xODA9c3RhdGljIGlubGluZSBpbnQgdHVuX3ZuZXRfaGRyX3RvX3NrYih1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQvdHVuX3ZuZXQuaC0xODIte1xuZHJpdmVycy9uZXQvdHVuX3ZuZXQuaDoxODM6XHRyZXR1cm4gdmlydGlvX25ldF9oZHJfdG9fc2tiKHNrYiwgaGRyLCB0dW5fdm5ldF9pc19saXR0bGVfZW5kaWFuKGZsYWdzKSk7XG5kcml2ZXJzL25ldC90dW5fdm5ldC5oLTE4NC19XG4tLVxuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jPTgzNj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnBhZ2VfdG9fc2tiKHN0cnVjdCB2aXJ0bmV0X2luZm8gKnZpLFxuLS1cbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYy04ODgtXHQvKiBDb3B5IGFsbCBmcmFtZSBpZiBpdCBmaXRzIHNrYi1cdTAwM2VoZWFkLCBvdGhlcndpc2VcbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYzo4ODk6XHQgKiB3ZSBsZXQgdmlydGlvX25ldF9oZHJfdG9fc2tiKCkgYW5kIEdSTyBwdWxsIGhlYWRlcnMgYXMgbmVlZGVkLlxuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jLTg5MC1cdCAqL1xuLS1cbmluY2x1ZGUvbGludXgvdmlydGlvX25ldC5oPTI5PXN0YXRpYyBpbmxpbmUgaW50IHZpcnRpb19uZXRfaGRyX3NldF9wcm90byhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmluY2x1ZGUvbGludXgvdmlydGlvX25ldC5oLTUwLVxuaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0Lmg6NTE6c3RhdGljIGlubGluZSBpbnQgX192aXJ0aW9fbmV0X2hkcl90b19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYixcbmluY2x1ZGUvbGludXgvdmlydGlvX25ldC5oLTUyLVx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCB2aXJ0aW9fbmV0X2hkciAqaGRyLFxuLS1cbmluY2x1ZGUvbGludXgvdmlydGlvX25ldC5oLTIwNi1cbmluY2x1ZGUvbGludXgvdmlydGlvX25ldC5oOjIwNzpzdGF0aWMgaW5saW5lIGludCB2aXJ0aW9fbmV0X2hkcl90b19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYixcbmluY2x1ZGUvbGludXgvdmlydGlvX25ldC5oLTIwOC1cdFx0XHRcdFx0Y29uc3Qgc3RydWN0IHZpcnRpb19uZXRfaGRyICpoZHIsXG4tLVxuaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmgtMjEwLXtcbmluY2x1ZGUvbGludXgvdmlydGlvX25ldC5oOjIxMTpcdHJldHVybiBfX3ZpcnRpb19uZXRfaGRyX3RvX3NrYihza2IsIGhkciwgbGl0dGxlX2VuZGlhbiwgaGRyLVx1MDAzZWdzb190eXBlKTtcbmluY2x1ZGUvbGludXgvdmlydGlvX25ldC5oLTIxMi19XG4tLVxuaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0Lmg9Mjk2PXZpcnRpb19uZXRfaGRyX3RubF90b19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaC0zMTAtXHRpZiAoIWdzb190dW5uZWxfdHlwZSlcbmluY2x1ZGUvbGludXgvdmlydGlvX25ldC5oOjMxMTpcdFx0cmV0dXJuIHZpcnRpb19uZXRfaGRyX3RvX3NrYihza2IsIGhkciwgbGl0dGxlX2VuZGlhbik7XG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaC0zMTItXG4tLVxuaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmgtMzQ1LVx0LyogTGV0IHRoZSBiYXNpYyBwYXJzaW5nIGRlYWwgd2l0aCBwbGFpbiBHU08gZmVhdHVyZXMuICovXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaDozNDY6XHRyZXQgPSBfX3ZpcnRpb19uZXRfaGRyX3RvX3NrYihza2IsIGhkciwgdHJ1ZSxcbmluY2x1ZGUvbGludXgvdmlydGlvX25ldC5oLTM0Ny1cdFx0XHRcdCAgICAgIGhkci1cdTAwM2Vnc29fdHlwZSBcdTAwMjYgfmdzb190dW5uZWxfdHlwZSk7XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yNzM2PXN0YXRpYyBpbnQgdHBhY2tldF9zbmQoc3RydWN0IHBhY2tldF9zb2NrICpwbywgc3RydWN0IG1zZ2hkciAqbXNnKVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjg5NC1cdFx0aWYgKGhhc192bmV0X2hkcikge1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyODk1Olx0XHRcdGlmICh2aXJ0aW9fbmV0X2hkcl90b19za2Ioc2tiLCBcdTAwMjZ2bmV0X2hkciwgdmlvX2xlKCkpKSB7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI4OTYtXHRcdFx0XHR0cF9sZW4gPSAtRUlOVkFMO1xuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9Mjk2Nj1zdGF0aWMgaW50IHBhY2tldF9zbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzA5Ni1cdGlmICh2bmV0X2hkcl9zeikge1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYzozMDk3Olx0XHRlcnIgPSB2aXJ0aW9fbmV0X2hkcl90b19za2Ioc2tiLCBcdTAwMjZ2bmV0X2hkciwgdmlvX2xlKCkpO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMDk4LVx0XHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNDMKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5ldHdvcmsgSGVhZGVyIENvbnZlcnNpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgcGFja2V0IGhlYWRlcnMgYXJlIGhhbmRsZWQgYWNyb3NzIGEgZmV3IGRpZmZlcmVudCBkcml2ZXJzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2F0ZWdvcml6ZSBhIGZldyBrZXkgZnVuY3Rpb25zLiBgdHVuX3ZuZXRfaGRyX3RvX3NrYmAgaXMgdXNlZCBzcGVjaWZpY2FsbHkgaW4gdGhlIGB0dW5gLCBgbWFjdnRhcGAsIGFuZCBgdGFwYCBkcml2ZXJzIOKAkyBhbGwgb2Ygd2hpY2ggYXJlIGludm9sdmVkIGluIHR1bm5lbGluZyBvciBicmlkZ2luZyBuZXR3b3JrIHRyYWZmaWMuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LCBmb2N1c2VzIG1lLgoKVGhlbiwgSSYjMzk7dmUgZ290IGB2aXJ0aW9fbmV0X2hkcl90b19za2JgLCBhbmQgSSBzZWUgdGhhdCBmdW5jdGlvbiBhcHBlYXJpbmcgaW4gdGhlIGNvbnRleHQgb2YgYGFmX3BhY2tldC5jYCDigJMgc3BlY2lmaWNhbGx5IHdpdGhpbiBgdHBhY2tldF9zbmRgIGFuZCBgcGFja2V0X3NuZGAuIFRoaXMgZmVlbHMgdmVyeSBzcGVjaWZpYyB0byB0aGUgcGFja2V0IHNvY2tldCBpbmZyYXN0cnVjdHVyZSwgc28gaXQgc3VnZ2VzdHMgYSBkaWZmZXJlbnQgdHlwZSBvZiBoZWFkZXIgY29udmVyc2lvbiByZWxhdGVkIHRvIHBhY2tldCBzb2NrZXQgc2VuZCBvcGVyYXRpb25zLgoKQW5kIGZpbmFsbHksIGBza2Jfc2VnbWVudGAsIHdoaWNoIEkmIzM5O20gYWxyZWFkeSBxdWl0ZSBmYW1pbGlhciB3aXRoLiBJdCBpcyBjb3JlIG5ldHdvcmtpbmcgYW5kIHVzZWQgYWNyb3NzIG1hbnkgYXJlYXMsIHNvIHRoYXQgZmVlbHMgZXhwZWN0ZWQuCgpGb3IgdGhpcyBhbmFseXNpcywgSSYjMzk7bGwgbm93IGZvY3VzIGluIG9uIGB0dW5fdm5ldF9oZHJfdG9fc2tiYCBhbmQgbG9vayBhdCBpdCBtb3JlIGNsb3NlbHksIGdpdmVuIG15IHByaW9yIHVuZGVyc3RhbmRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTk6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHVuX3ZuZXRfaGRyX3RvX3NrYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90YXAuYz01NzI9c3RhdGljIHNzaXplX3QgdGFwX2dldF91c2VyKHN0cnVjdCB0YXBfcXVldWUgKnEsIHZvaWQgKm1zZ19jb250cm9sLFxuLS1cbmRyaXZlcnMvbmV0L3RhcC5jLTY1MC1cdGlmICh2bmV0X2hkcl9sZW4pIHtcbmRyaXZlcnMvbmV0L3RhcC5jOjY1MTpcdFx0ZXJyID0gdHVuX3ZuZXRfaGRyX3RvX3NrYihxLVx1MDAzZWZsYWdzLCBza2IsIFx1MDAyNnZuZXRfaGRyKTtcbmRyaXZlcnMvbmV0L3RhcC5jLTY1Mi1cdFx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L3RhcC5jPTEwNDQ9c3RhdGljIGludCB0YXBfZ2V0X3VzZXJfeGRwKHN0cnVjdCB0YXBfcXVldWUgKnEsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxuLS1cbmRyaXZlcnMvbmV0L3RhcC5jLTEwODUtXHRpZiAodm5ldF9oZHJfbGVuKSB7XG5kcml2ZXJzL25ldC90YXAuYzoxMDg2Olx0XHRlcnIgPSB0dW5fdm5ldF9oZHJfdG9fc2tiKHEtXHUwMDNlZmxhZ3MsIHNrYiwgZ3NvKTtcbmRyaXZlcnMvbmV0L3RhcC5jLTEwODctXHRcdGlmIChlcnIpIHtcbi0tXG5kcml2ZXJzL25ldC90dW5fdm5ldC5oPTE3ND1zdGF0aWMgaW5saW5lIGludCB0dW5fdm5ldF9oZHJfcHV0KGludCBzeiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbmRyaXZlcnMvbmV0L3R1bl92bmV0LmgtMTc5LVxuZHJpdmVycy9uZXQvdHVuX3ZuZXQuaDoxODA6c3RhdGljIGlubGluZSBpbnQgdHVuX3ZuZXRfaGRyX3RvX3NrYih1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBza19idWZmICpza2IsXG5kcml2ZXJzL25ldC90dW5fdm5ldC5oLTE4MS1cdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCB2aXJ0aW9fbmV0X2hkciAqaGRyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4MjMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4gSSBuZWVkIHRvIHRyYWNrIGRvd24gYHR1bl92bmV0X2hkcl90b19za2JgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayBgdHVuLmNgLCB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgaXQuIEJ1dCB3YWl0IGEgbWludXRlLi4uIGl0JiMzOTtzIG5vdCB0aGVyZSEgQWgsIHJpZ2h0LCB0aGF0JiMzOTtzIGl0LCBgdHVuX3ZuZXQuaGAgaXMgaW5jbHVkZWQgaW4gYHR1bi5jYC4gSSBuZWVkIHRvIGxvb2sgaW4gdGhhdCBoZWFkZXIgZmlsZSwgdGhhdCYjMzk7cyB3aGVyZSB0aGUgZGVmaW5pdGlvbiBpcyBtb3N0IGxpa2VseS4gR29vZCwgdGhhdCBzYXZlcyBtZSBzb21lIHRpbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHVuX3ZuZXRfaGRyX3RvX3NrYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3R1bi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTk6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA0MQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgS2VybmVsIENvZGU6IEEgUXVpY2sgQ2hlY2sqKgoKUmlnaHQsIHNvIEkgc2VlIGEgbWVudGlvbiBvZiBgdHVuLmNgIGFuZCBgdHVuX3ZuZXRfaGRyX3RvX3NrYmAuIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtXYWl0LCBpcyB0aGF0IHdoZXJlIHRoZSBgdm5ldF9oZHJgIGludGVyYWN0aW9uIGhhcHBlbnM/JiMzNDsgQnV0IEkmIzM5O20gbm90IGdvaW5nIHRvIGp1bXAgdG8gY29uY2x1c2lvbnMuIEJldHRlciB0byBxdWlja2x5IHZlcmlmeSBieSBnb2luZyBkaXJlY3RseSB0byB0aGUgc291cmNlLiBMZXQmIzM5O3MgZ2V0IHRoZSBjb250ZXh0IHJpZ2h0OiBhIGRpdmUgaW50byBgdHVuLmNgIGlzIHdhcnJhbnRlZCB0byBjb25maXJtIHdoZXRoZXIgYHZuZXRfaGRyYCBpcyB1c2VkIGluIHRoYXQgcGFydGljdWxhciBmdW5jdGlvbi4gQSBxdWljayBzY2FuIHdpbGwgdGVsbCB0aGUgdGFsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTk6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm5ldF9oZHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90dW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90dW4uYz0xODI9c3RydWN0IHR1bl9zdHJ1Y3Qge1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTE5NS1cdGludFx0XHRcdGFsaWduO1xuZHJpdmVycy9uZXQvdHVuLmM6MTk2Olx0aW50XHRcdFx0dm5ldF9oZHJfc3o7XG5kcml2ZXJzL25ldC90dW4uYy0xOTctXHRpbnRcdFx0XHRzbmRidWY7XG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9MTc3ND1zdGF0aWMgc3NpemVfdCB0dW5fZ2V0X3VzZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0xODEyLVx0aWYgKHR1bi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1ZORVRfSERSKSB7XG5kcml2ZXJzL25ldC90dW4uYzoxODEzOlx0XHRpbnQgdm5ldF9oZHJfc3ogPSBSRUFEX09OQ0UodHVuLVx1MDAzZXZuZXRfaGRyX3N6KTtcbmRyaXZlcnMvbmV0L3R1bi5jLTE4MTQtXG5kcml2ZXJzL25ldC90dW4uYzoxODE1Olx0XHRmZWF0dXJlcyA9IHR1bl92bmV0X2hkcl9ndWVzdF9mZWF0dXJlcyh2bmV0X2hkcl9zeik7XG5kcml2ZXJzL25ldC90dW4uYzoxODE2Olx0XHRoZHJfbGVuID0gX190dW5fdm5ldF9oZHJfZ2V0KHZuZXRfaGRyX3N6LCB0dW4tXHUwMDNlZmxhZ3MsXG5kcml2ZXJzL25ldC90dW4uYy0xODE3LVx0XHRcdFx0XHQgICAgIGZlYXR1cmVzLCBmcm9tLCBnc28pO1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTE4MjAtXG5kcml2ZXJzL25ldC90dW4uYzoxODIxOlx0XHRsZW4gLT0gdm5ldF9oZHJfc3o7XG5kcml2ZXJzL25ldC90dW4uYy0xODIyLVx0fVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTE4OTQtXG5kcml2ZXJzL25ldC90dW4uYzoxODk1Olx0aWYgKHR1bl92bmV0X2hkcl90bmxfdG9fc2tiKHR1bi1cdTAwM2VmbGFncywgZmVhdHVyZXMsIHNrYiwgXHUwMDI2aGRyKSkge1xuZHJpdmVycy9uZXQvdHVuLmMtMTg5Ni1cdFx0YXRvbWljX2xvbmdfaW5jKFx1MDAyNnR1bi1cdTAwM2VyeF9mcmFtZV9lcnJvcnMpO1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTIwODY9c3RhdGljIHNzaXplX3QgdHVuX3B1dF91c2VyX3hkcChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTIwOTAte1xuZHJpdmVycy9uZXQvdHVuLmM6MjA5MTpcdGludCB2bmV0X2hkcl9zeiA9IDA7XG5kcml2ZXJzL25ldC90dW4uYy0yMDkyLVx0c2l6ZV90IHNpemUgPSB4ZHBfZnJhbWUtXHUwMDNlbGVuO1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTIwOTctXG5kcml2ZXJzL25ldC90dW4uYzoyMDk4Olx0XHR2bmV0X2hkcl9zeiA9IFJFQURfT05DRSh0dW4tXHUwMDNldm5ldF9oZHJfc3opO1xuZHJpdmVycy9uZXQvdHVuLmM6MjA5OTpcdFx0cmV0ID0gdHVuX3ZuZXRfaGRyX3B1dCh2bmV0X2hkcl9zeiwgaXRlciwgXHUwMDI2Z3NvKTtcbmRyaXZlcnMvbmV0L3R1bi5jLTIxMDAtXHRcdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMjEwMy1cbmRyaXZlcnMvbmV0L3R1bi5jOjIxMDQ6XHRyZXQgPSBjb3B5X3RvX2l0ZXIoeGRwX2ZyYW1lLVx1MDAzZWRhdGEsIHNpemUsIGl0ZXIpICYjNDM7IHZuZXRfaGRyX3N6O1xuZHJpdmVycy9uZXQvdHVuLmMtMjEwNS1cbi0tXG5kcml2ZXJzL25ldC90dW4uYz0yMTE0PXN0YXRpYyBzc2l6ZV90IHR1bl9wdXRfdXNlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTIxMjItXHRpbnQgdmxhbl9obGVuID0gMDtcbmRyaXZlcnMvbmV0L3R1bi5jOjIxMjM6XHRpbnQgdm5ldF9oZHJfc3ogPSAwO1xuZHJpdmVycy9uZXQvdHVuLmMtMjEyNC1cdGludCByZXQ7XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMjEyOS1cdGlmICh0dW4tXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9WTkVUX0hEUilcbmRyaXZlcnMvbmV0L3R1bi5jOjIxMzA6XHRcdHZuZXRfaGRyX3N6ID0gUkVBRF9PTkNFKHR1bi1cdTAwM2V2bmV0X2hkcl9zeik7XG5kcml2ZXJzL25ldC90dW4uYy0yMTMxLVxuZHJpdmVycy9uZXQvdHVuLmM6MjEzMjpcdHRvdGFsID0gc2tiLVx1MDAzZWxlbiAmIzQzOyB2bGFuX2hsZW4gJiM0Mzsgdm5ldF9oZHJfc3o7XG5kcml2ZXJzL25ldC90dW4uYy0yMTMzLVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTIxNDctXG5kcml2ZXJzL25ldC90dW4uYzoyMTQ4Olx0aWYgKHZuZXRfaGRyX3N6KSB7XG5kcml2ZXJzL25ldC90dW4uYy0yMTQ5LVx0XHRzdHJ1Y3QgdmlydGlvX25ldF9oZHJfdjFfaGFzaF90dW5uZWwgaGRyO1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTIxNTItXHRcdG1lbXNldChcdTAwMjZoZHIsIDAsIHNpemVvZihoZHIpKTtcbmRyaXZlcnMvbmV0L3R1bi5jOjIxNTM6XHRcdHJldCA9IHR1bl92bmV0X2hkcl90bmxfZnJvbV9za2IodHVuLVx1MDAzZWZsYWdzLCB0dW4tXHUwMDNlZGV2LCBza2IsXG5kcml2ZXJzL25ldC90dW4uYy0yMTU0LVx0XHRcdFx0XHRcdFx1MDAyNmhkcik7XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMjE2Mi1cdFx0Z3NvID0gKHN0cnVjdCB2aXJ0aW9fbmV0X2hkciAqKVx1MDAyNmhkcjtcbmRyaXZlcnMvbmV0L3R1bi5jOjIxNjM6XHRcdHJldCA9IF9fdHVuX3ZuZXRfaGRyX3B1dCh2bmV0X2hkcl9zeiwgdHVuLVx1MDAzZWRldi1cdTAwM2VmZWF0dXJlcyxcbmRyaXZlcnMvbmV0L3R1bi5jLTIxNjQtXHRcdFx0XHRcdCBpdGVyLCBnc28pO1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTI1MTA9c3RhdGljIGludCB0dW5feGRwX29uZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTI1ODktXG5kcml2ZXJzL25ldC90dW4uYzoyNTkwOlx0ZmVhdHVyZXMgPSB0dW5fdm5ldF9oZHJfZ3Vlc3RfZmVhdHVyZXMoUkVBRF9PTkNFKHR1bi1cdTAwM2V2bmV0X2hkcl9zeikpO1xuZHJpdmVycy9uZXQvdHVuLmMtMjU5MS1cdHRubF9oZHIgPSAoc3RydWN0IHZpcnRpb19uZXRfaGRyX3YxX2hhc2hfdHVubmVsICopZ3NvO1xuZHJpdmVycy9uZXQvdHVuLmM6MjU5MjpcdGlmICh0dW5fdm5ldF9oZHJfdG5sX3RvX3NrYih0dW4tXHUwMDNlZmxhZ3MsIGZlYXR1cmVzLCBza2IsIHRubF9oZHIpKSB7XG5kcml2ZXJzL25ldC90dW4uYy0yNTkzLVx0XHRhdG9taWNfbG9uZ19pbmMoXHUwMDI2dHVuLVx1MDAzZXJ4X2ZyYW1lX2Vycm9ycyk7XG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9MjgyOT1zdGF0aWMgaW50IHR1bl9zZXRfaWZmKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBpZnJlcSAqaWZyKVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTI5MzEtXHRcdHR1bi1cdTAwM2V0eGZsdC5jb3VudCA9IDA7XG5kcml2ZXJzL25ldC90dW4uYzoyOTMyOlx0XHR0dW4tXHUwMDNldm5ldF9oZHJfc3ogPSBzaXplb2Yoc3RydWN0IHZpcnRpb19uZXRfaGRyKTtcbmRyaXZlcnMvbmV0L3R1bi5jLTI5MzMtXG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9MzE4MD1zdGF0aWMgbG9uZyBfX3R1bl9jaHJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzQ1OS1cdGRlZmF1bHQ6XG5kcml2ZXJzL25ldC90dW4uYzozNDYwOlx0XHRyZXQgPSB0dW5fdm5ldF9pb2N0bChcdTAwMjZ0dW4tXHUwMDNldm5ldF9oZHJfc3osIFx1MDAyNnR1bi1cdTAwM2VmbGFncywgY21kLCBhcmdwKTtcbmRyaXZlcnMvbmV0L3R1bi5jLTM0NjEtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxOToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTE5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gdGhlIGB0dW5gIERyaXZlcioqCgpPa2F5LCBzbyBJIHNlZSBgdHVuX3ZuZXRfaGRyX3RubF90b19za2JgIGdldHRpbmcgY2FsbGVkIHdpdGhpbiBgdHVuLmNgLiAgSW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZnVuY3Rpb24gYmV0dGVyIHRvIGdyYXNwIGl0cyByb2xlIGluIHRoZSBkYXRhIGZsb3cuICBUaGVyZWZvcmUsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGRlZmluaXRpb24gb2YgYHR1bl92bmV0X2hkcl90bmxfdG9fc2tiYC4gU2luY2UgaXQmIzM5O3MgaGVhZGVyIHJlbGF0ZWQsIG15IGh1bmNoIGlzIHRoYXQgaXQmIzM5O2xsIGJlIGluIGBkcml2ZXJzL25ldC90dW5fdm5ldC5oYC4gTGV0JiMzOTtzIGNvbmZpcm0gdGhhdCBhbmQgZ2V0IGEgY2xvc2VyIGxvb2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3R1bl92bmV0X2hkcl90bmxfdG9fc2tiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3R1bi5jPTE3NzQ9c3RhdGljIHNzaXplX3QgdHVuX2dldF91c2VyKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMTg5NC1cbmRyaXZlcnMvbmV0L3R1bi5jOjE4OTU6XHRpZiAodHVuX3ZuZXRfaGRyX3RubF90b19za2IodHVuLVx1MDAzZWZsYWdzLCBmZWF0dXJlcywgc2tiLCBcdTAwMjZoZHIpKSB7XG5kcml2ZXJzL25ldC90dW4uYy0xODk2LVx0XHRhdG9taWNfbG9uZ19pbmMoXHUwMDI2dHVuLVx1MDAzZXJ4X2ZyYW1lX2Vycm9ycyk7XG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9MjUxMD1zdGF0aWMgaW50IHR1bl94ZHBfb25lKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMjU5MS1cdHRubF9oZHIgPSAoc3RydWN0IHZpcnRpb19uZXRfaGRyX3YxX2hhc2hfdHVubmVsICopZ3NvO1xuZHJpdmVycy9uZXQvdHVuLmM6MjU5MjpcdGlmICh0dW5fdm5ldF9oZHJfdG5sX3RvX3NrYih0dW4tXHUwMDNlZmxhZ3MsIGZlYXR1cmVzLCBza2IsIHRubF9oZHIpKSB7XG5kcml2ZXJzL25ldC90dW4uYy0yNTkzLVx0XHRhdG9taWNfbG9uZ19pbmMoXHUwMDI2dHVuLVx1MDAzZXJ4X2ZyYW1lX2Vycm9ycyk7XG4tLVxuZHJpdmVycy9uZXQvdHVuX3ZuZXQuaD0xOTc9c3RhdGljIGlubGluZSBpbnRcbmRyaXZlcnMvbmV0L3R1bl92bmV0Lmg6MTk4OnR1bl92bmV0X2hkcl90bmxfdG9fc2tiKHVuc2lnbmVkIGludCBmbGFncywgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMsXG5kcml2ZXJzL25ldC90dW5fdm5ldC5oLTE5OS1cdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxOToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTI2CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMTIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBOZXR3b3JrIERyaXZlciBFbnRyeSBQb2ludHMqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gbWFwIG91dCB0aGUga2V5IGVudHJ5IHBvaW50cyBmb3IgdGhpcyBuZXR3b3JrIGRyaXZlciBzdHVmZi4gRnJvbSB3aGF0IEkmIzM5O20gc2VlaW5nLCBgdHVuX2dldF91c2VyYCBhbmQgYHR1bl94ZHBfb25lYCBhcmUgdGhlIGNydWNpYWwgc3RhcnRpbmcgcG9pbnRzIHRvIHVuZGVyc3RhbmQgdGhlIGJlaGF2aW9yIG9mIGB0dW4uY2AuIEZvciB0aGUgYHRhcC5jYCBzaWRlIG9mIHRoaW5ncywgYHRhcF9nZXRfdXNlcmAgYW5kIGB0YXBfZ2V0X3VzZXJfeGRwYCBzZWVtIHRvIGJlIHRoZSBwcmltYXJ5IGhvb2tzLiBJIGFsc28gbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGhvdyBgdHBhY2tldF9zbmRgIGFuZCBgcGFja2V0X3NuZGAgd29yayB3aXRoaW4gYGFmX3BhY2tldC5jYC4KCk5vdywgYHNrYl9zZWdtZW50YCBpcyBzb21ldGhpbmcgSSBrbm93IHdlbGwsIHJlc2lkaW5nIGluIGBuZXQvY29yZS9za2J1ZmYuY2AsIGl0JiMzOTtzIGJlZW4gZXhwb3J0ZWQsIGFuZCBJIHJlY2FsbCBpdCBiZWluZyBhIGtleSBwbGF5ZXIgaW4gR1NPL1RTTyBmbG93cywgc28gdGhpcyBpcyBpbXBvcnRhbnQuIEkgdGhpbmsgSSYjMzk7bGwgZGl2ZSBhIGxpdHRsZSBkZWVwZXIgaW50byBpdHMgdXNhZ2Ugbm93IHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gaG93IGV2ZXJ5dGhpbmcgZml0cyB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTk6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tiX3NlZ21lbnQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NlZ21lbnRhdGlvbi1vZmZsb2Fkcy5yc3Q9MjA1PUluc3RlYWQsIHRoZSBTQ1RQIHByb3RvY29sIGxheWVyIGJ1aWxkcyBhbiBza2Igd2l0aCB0aGUgc2VnbWVudHMgY29ycmVjdGx5XG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc2VnbWVudGF0aW9uLW9mZmxvYWRzLnJzdDoyMDY6cGFkZGVkIGFuZCBzdG9yZWQgYXMgY2hhaW5lZCBza2JzLCBhbmQgc2tiX3NlZ21lbnQoKSBzcGxpdHMgYmFzZWQgb24gdGhvc2UuXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc2VnbWVudGF0aW9uLW9mZmxvYWRzLnJzdC0yMDctVG8gc2lnbmFsIHRoaXMsIGdzb19zaXplIGlzIHNldCB0byB0aGUgc3BlY2lhbCB2YWx1ZSBHU09fQllfRlJBR1MuXG4tLVxuZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jPTY4OTA9bmV0ZGV2X2ZlYXR1cmVzX3QgcWV0aF9mZWF0dXJlc19jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYy02OTMxLVx0aWYgKG5ldGlmX25lZWRzX2dzbyhza2IsIGZlYXR1cmVzKSkge1xuZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jOjY5MzI6XHRcdC8qIG1hdGNoIHNrYl9zZWdtZW50KCk6ICovXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMtNjkzMy1cdFx0dW5zaWduZWQgaW50IGRvZmZzZXQgPSBza2ItXHUwMDNlZGF0YSAtIHNrYl9tYWNfaGVhZGVyKHNrYik7XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0zNDg9c3RydWN0IHNrX2J1ZmY7XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0zNTUtXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjM1NjovKiBTZXQgc2tiX3NoaW5mbyhza2IpLVx1MDAzZWdzb19zaXplIHRvIHRoaXMgaW4gY2FzZSB5b3Ugd2FudCBza2Jfc2VnbWVudCB0b1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0zNTctICogc2VnbWVudCB1c2luZyBpdHMgY3VycmVudCBzZWdtZW50YXRpb24gaW5zdGVhZC5cbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTQyNzU9dm9pZCBza2Jfc2NydWJfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgeG5ldCk7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjQyNzY6c3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50KHN0cnVjdCBza19idWZmICpza2IsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NDI3NzpzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnRfbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcyxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNDI3OC1cdFx0XHRcdCB1bnNpZ25lZCBpbnQgb2Zmc2V0KTtcbi0tXG5pbmNsdWRlL25ldC91ZHAuaD01ODA9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqdWRwX3Jjdl9zZWdtZW50KHN0cnVjdCBzb2NrICpzayxcbi0tXG5pbmNsdWRlL25ldC91ZHAuaC01OTUtXG5pbmNsdWRlL25ldC91ZHAuaDo1OTY6XHQvKiBBdm9pZCBjc3VtIHJlY2FsY3VsYXRpb24gYnkgc2tiX3NlZ21lbnQgdW5sZXNzIHVzZXJzcGFjZSBleHBsaWNpdGx5XG5pbmNsdWRlL25ldC91ZHAuaC01OTctXHQgKiBhc2tzIGZvciB0aGUgZmluYWwgY2hlY2tzdW0gdmFsdWVzXG4tLVxubGliL3Rlc3RfYnBmLmM9MTUyMjM9c3RhdGljIF9faW5pdCBzdHJ1Y3Qgc2tfYnVmZiAqYnVpbGRfdGVzdF9za2JfbGluZWFyX25vX2hlYWRfZnJhZyh2b2lkKVxuLS1cbmxpYi90ZXN0X2JwZi5jLTE1Mjc2LVxubGliL3Rlc3RfYnBmLmM6MTUyNzc6c3RydWN0IHNrYl9zZWdtZW50X3Rlc3Qge1xubGliL3Rlc3RfYnBmLmMtMTUyNzgtXHRjb25zdCBjaGFyICpkZXNjcjtcbi0tXG5saWIvdGVzdF9icGYuYy0xNTI4Mi1cbmxpYi90ZXN0X2JwZi5jOjE1MjgzOnN0YXRpYyBzdHJ1Y3Qgc2tiX3NlZ21lbnRfdGVzdCBza2Jfc2VnbWVudF90ZXN0c1tdIF9faW5pdGNvbnN0ID0ge1xubGliL3Rlc3RfYnBmLmMtMTUyODQtXHR7XG4tLVxubGliL3Rlc3RfYnBmLmMtMTUyOTktXG5saWIvdGVzdF9icGYuYzoxNTMwMDpzdGF0aWMgX19pbml0IGludCB0ZXN0X3NrYl9zZWdtZW50X3NpbmdsZShjb25zdCBzdHJ1Y3Qgc2tiX3NlZ21lbnRfdGVzdCAqdGVzdClcbmxpYi90ZXN0X2JwZi5jLTE1MzAxLXtcbi0tXG5saWIvdGVzdF9icGYuYy0xNTMxMC1cbmxpYi90ZXN0X2JwZi5jOjE1MzExOlx0c2VncyA9IHNrYl9zZWdtZW50KHNrYiwgdGVzdC1cdTAwM2VmZWF0dXJlcyk7XG5saWIvdGVzdF9icGYuYy0xNTMxMi1cdGlmICghSVNfRVJSKHNlZ3MpKSB7XG4tLVxubGliL3Rlc3RfYnBmLmMtMTUzMjAtXG5saWIvdGVzdF9icGYuYzoxNTMyMTpzdGF0aWMgX19pbml0IGludCB0ZXN0X3NrYl9zZWdtZW50KHZvaWQpXG5saWIvdGVzdF9icGYuYy0xNTMyMi17XG4tLVxubGliL3Rlc3RfYnBmLmMtMTUzMjQtXG5saWIvdGVzdF9icGYuYzoxNTMyNTpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoc2tiX3NlZ21lbnRfdGVzdHMpOyBpJiM0MzsmIzQzOykge1xubGliL3Rlc3RfYnBmLmM6MTUzMjY6XHRcdGNvbnN0IHN0cnVjdCBza2Jfc2VnbWVudF90ZXN0ICp0ZXN0ID0gXHUwMDI2c2tiX3NlZ21lbnRfdGVzdHNbaV07XG5saWIvdGVzdF9icGYuYy0xNTMyNy1cbi0tXG5saWIvdGVzdF9icGYuYy0xNTMzMy1cbmxpYi90ZXN0X2JwZi5jOjE1MzM0Olx0XHRpZiAodGVzdF9za2Jfc2VnbWVudF9zaW5nbGUodGVzdCkpIHtcbmxpYi90ZXN0X2JwZi5jLTE1MzM1LVx0XHRcdHByX2NvbnQoXCYjMzQ7RkFJTFxcblwmIzM0Oyk7XG4tLVxubGliL3Rlc3RfYnBmLmM9MTU3ODk9c3RhdGljIF9faW5pdCBpbnQgZmluZF90ZXN0X2luZGV4KGNvbnN0IGNoYXIgKnRlc3RfbmFtZSlcbi0tXG5saWIvdGVzdF9icGYuYy0xNTgwNi1cbmxpYi90ZXN0X2JwZi5jOjE1ODA3Olx0aWYgKCFzdHJjbXAodGVzdF9zdWl0ZSwgXCYjMzQ7dGVzdF9za2Jfc2VnbWVudFwmIzM0OykpIHtcbmxpYi90ZXN0X2JwZi5jOjE1ODA4Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHNrYl9zZWdtZW50X3Rlc3RzKTsgaSYjNDM7JiM0MzspIHtcbmxpYi90ZXN0X2JwZi5jOjE1ODA5Olx0XHRcdGlmICghc3RyY21wKHNrYl9zZWdtZW50X3Rlc3RzW2ldLmRlc2NyLCB0ZXN0X25hbWUpKVxubGliL3Rlc3RfYnBmLmMtMTU4MTAtXHRcdFx0XHRyZXR1cm4gaTtcbi0tXG5saWIvdGVzdF9icGYuYz0xNTgxNz1zdGF0aWMgX19pbml0IGludCBwcmVwYXJlX3Rlc3RfcmFuZ2Uodm9pZClcbi0tXG5saWIvdGVzdF9icGYuYy0xNTgyNC1cdFx0dmFsaWRfcmFuZ2UgPSBBUlJBWV9TSVpFKHRhaWxfY2FsbF90ZXN0cyk7XG5saWIvdGVzdF9icGYuYzoxNTgyNTpcdGVsc2UgaWYgKCFzdHJjbXAodGVzdF9zdWl0ZSwgXCYjMzQ7dGVzdF9za2Jfc2VnbWVudFwmIzM0OykpXG5saWIvdGVzdF9icGYuYzoxNTgyNjpcdFx0dmFsaWRfcmFuZ2UgPSBBUlJBWV9TSVpFKHNrYl9zZWdtZW50X3Rlc3RzKTtcbmxpYi90ZXN0X2JwZi5jLTE1ODI3LVx0ZWxzZVxuLS1cbmxpYi90ZXN0X2JwZi5jPTE1ODc2PXN0YXRpYyBpbnQgX19pbml0IHRlc3RfYnBmX2luaXQodm9pZClcbi0tXG5saWIvdGVzdF9icGYuYy0xNTg4My1cdCAgICBzdHJjbXAodGVzdF9zdWl0ZSwgXCYjMzQ7dGVzdF90YWlsX2NhbGxzXCYjMzQ7KSBcdTAwMjZcdTAwMjZcbmxpYi90ZXN0X2JwZi5jOjE1ODg0Olx0ICAgIHN0cmNtcCh0ZXN0X3N1aXRlLCBcJiMzNDt0ZXN0X3NrYl9zZWdtZW50XCYjMzQ7KSkge1xubGliL3Rlc3RfYnBmLmMtMTU4ODUtXHRcdHByX2VycihcJiMzNDt0ZXN0X2JwZjogaW52YWxpZCB0ZXN0X3N1aXRlICYjMzk7JXMmIzM5OyBzcGVjaWZpZWQuXFxuXCYjMzQ7LCB0ZXN0X3N1aXRlKTtcbi0tXG5saWIvdGVzdF9icGYuYy0xNTkxOS1cbmxpYi90ZXN0X2JwZi5jOjE1OTIwOlx0aWYgKCFzdHJsZW4odGVzdF9zdWl0ZSkgfHwgIXN0cmNtcCh0ZXN0X3N1aXRlLCBcJiMzNDt0ZXN0X3NrYl9zZWdtZW50XCYjMzQ7KSlcbmxpYi90ZXN0X2JwZi5jOjE1OTIxOlx0XHRyZXR1cm4gdGVzdF9za2Jfc2VnbWVudCgpO1xubGliL3Rlc3RfYnBmLmMtMTU5MjItXG4tLVxubmV0L2NvcmUvbmV0X3Rlc3QuYz0xMj1zdGF0aWMgdm9pZCBfX2luaXRfc2tiKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvbmV0X3Rlc3QuYy0xNi1cbm5ldC9jb3JlL25ldF90ZXN0LmM6MTc6XHQvKiBza2Jfc2VnbWVudCBleHBlY3RzIHNrYi1cdTAwM2VkYXRhIGF0IHN0YXJ0IG9mIHBheWxvYWQgKi9cbm5ldC9jb3JlL25ldF90ZXN0LmMtMTgtXHRza2JfcHVsbChza2IsIHNpemVvZihoZHIpKTtcbi0tXG5uZXQvY29yZS9uZXRfdGVzdC5jPTE0Nz1zdGF0aWMgdm9pZCBnc29fdGVzdF9mdW5jKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5uZXQvY29yZS9uZXRfdGVzdC5jLTIyOC1cbm5ldC9jb3JlL25ldF90ZXN0LmM6MjI5Olx0c2VncyA9IHNrYl9zZWdtZW50KHNrYiwgZmVhdHVyZXMpO1xubmV0L2NvcmUvbmV0X3Rlc3QuYy0yMzAtXHRpZiAoSVNfRVJSKHNlZ3MpKSB7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NDY2Mj1zdGF0aWMgaW5saW5lIHNrYl9mcmFnX3Qgc2tiX2hlYWRfZnJhZ190b19wYWdlX2Rlc2Moc3RydWN0IHNrX2J1ZmYgKmZyYWdfc2tiKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTQ2NzMtXG5uZXQvY29yZS9za2J1ZmYuYzo0Njc0OnN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudF9saXN0KHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvY29yZS9za2J1ZmYuYy00Njc1LVx0XHRcdFx0IG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTQ3NjUtfVxubmV0L2NvcmUvc2tidWZmLmM6NDc2NjpFWFBPUlRfU1lNQk9MX0dQTChza2Jfc2VnbWVudF9saXN0KTtcbm5ldC9jb3JlL3NrYnVmZi5jLTQ3NjctXG5uZXQvY29yZS9za2J1ZmYuYy00NzY4LS8qKlxubmV0L2NvcmUvc2tidWZmLmM6NDc2OTogKlx0c2tiX3NlZ21lbnQgLSBQZXJmb3JtIHByb3RvY29sIHNlZ21lbnRhdGlvbiBvbiBza2IuXG5uZXQvY29yZS9za2J1ZmYuYy00NzcwLSAqXHRAaGVhZF9za2I6IGJ1ZmZlciB0byBzZWdtZW50XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNDc3Ni0gKi9cbm5ldC9jb3JlL3NrYnVmZi5jOjQ3Nzc6c3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50KHN0cnVjdCBza19idWZmICpoZWFkX3NrYixcbm5ldC9jb3JlL3NrYnVmZi5jLTQ3NzgtXHRcdFx0ICAgIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTUwMzMtXHRcdFx0XHRuZXRfd2Fybl9yYXRlbGltaXRlZChcbm5ldC9jb3JlL3NrYnVmZi5jOjUwMzQ6XHRcdFx0XHRcdFwmIzM0O3NrYl9zZWdtZW50OiB0b28gbWFueSBmcmFnczogJXUgJXVcXG5cJiMzNDssXG5uZXQvY29yZS9za2J1ZmYuYy01MDM1LVx0XHRcdFx0XHRwb3MsIG1zcyk7XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNTEyOS19XG5uZXQvY29yZS9za2J1ZmYuYzo1MTMwOkVYUE9SVF9TWU1CT0xfR1BMKHNrYl9zZWdtZW50KTtcbm5ldC9jb3JlL3NrYnVmZi5jLTUxMzEtXG4tLVxubmV0L2lwdjQvdGNwX29mZmxvYWQuYz04OD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKl9fdGNwNF9nc29fc2VnbWVudF9saXN0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvdGNwX29mZmxvYWQuYy05MC17XG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jOjkxOlx0c2tiID0gc2tiX3NlZ21lbnRfbGlzdChza2IsIGZlYXR1cmVzLCBza2JfbWFjX2hlYWRlcl9sZW4oc2tiKSk7XG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jLTkyLVx0aWYgKElTX0VSUihza2IpKVxuLS1cbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmM9MTMzPXN0cnVjdCBza19idWZmICp0Y3BfZ3NvX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jLTE4MC1cbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmM6MTgxOlx0c2VncyA9IHNrYl9zZWdtZW50KHNrYiwgZmVhdHVyZXMpO1xubmV0L2lwdjQvdGNwX29mZmxvYWQuYy0xODItXHRpZiAoSVNfRVJSKHNlZ3MpKVxuLS1cbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM9NDYzPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqX191ZHBfZ3NvX3NlZ21lbnRfbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtNDY4LVxubmV0L2lwdjQvdWRwX29mZmxvYWQuYzo0Njk6XHRza2IgPSBza2Jfc2VnbWVudF9saXN0KHNrYiwgZmVhdHVyZXMsIHNrYl9tYWNfaGVhZGVyX2xlbihza2IpKTtcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtNDcwLVx0aWYgKElTX0VSUihza2IpKVxuLS1cbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM9NDgxPXN0cnVjdCBza19idWZmICpfX3VkcF9nc29fc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqZ3NvX3NrYixcbi0tXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTUxNi1cdGlmIChza2Jfc2hpbmZvKGdzb19za2IpLVx1MDAzZWdzb190eXBlIFx1MDAyNiBTS0JfR1NPX0ZSQUdMSVNUKSB7XG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jOjUxNzpcdFx0IC8qIERldGVjdCBtb2RpZmllZCBnZW9tZXRyeSBhbmQgcGFzcyB0aG9zZSB0byBza2Jfc2VnbWVudC4gKi9cbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtNTE4LVx0XHRpZiAoKHNrYl9wYWdlbGVuKGdzb19za2IpIC0gc2l6ZW9mKCp1aCkgPT0gc2tiX3NoaW5mbyhnc29fc2tiKS1cdTAwM2Vnc29fc2l6ZSkgXHUwMDI2XHUwMDI2XG4tLVxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy01NDMtXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jOjU0NDpcdC8qIGNsZWFyIGRlc3RydWN0b3IgdG8gYXZvaWQgc2tiX3NlZ21lbnQgYXNzaWduaW5nIGl0IHRvIHRhaWwgKi9cbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtNTQ1LVx0Y29weV9kdG9yID0gZ3NvX3NrYi1cdTAwM2VkZXN0cnVjdG9yID09IHNvY2tfd2ZyZWU7XG4tLVxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy01NTAtXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jOjU1MTpcdHNlZ3MgPSBza2Jfc2VnbWVudChnc29fc2tiLCBmZWF0dXJlcyk7XG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTU1Mi1cdGlmIChJU19FUlJfT1JfTlVMTChzZWdzKSkge1xuLS1cbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM9NjMzPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdWRwNF91Zm9fZnJhZ21lbnQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTY4Ny1cdCAqL1xubmV0L2lwdjQvdWRwX29mZmxvYWQuYzo2ODg6XHRzZWdzID0gc2tiX3NlZ21lbnQoc2tiLCBmZWF0dXJlcyk7XG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTY4OS1vdXQ6XG4tLVxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jPTE0Nz1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKl9fdGNwNl9nc29fc2VnbWVudF9saXN0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jLTE0OS17XG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmM6MTUwOlx0c2tiID0gc2tiX3NlZ21lbnRfbGlzdChza2IsIGZlYXR1cmVzLCBza2JfbWFjX2hlYWRlcl9sZW4oc2tiKSk7XG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmMtMTUxLVx0aWYgKElTX0VSUihza2IpKVxuLS1cbm5ldC9pcHY2L3VkcF9vZmZsb2FkLmM9MTk9c3RhdGljIHN0cnVjdCBza19idWZmICp1ZHA2X3Vmb19mcmFnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY2L3VkcF9vZmZsb2FkLmMtMTA4LVx0XHQgKi9cbm5ldC9pcHY2L3VkcF9vZmZsb2FkLmM6MTA5Olx0XHRzZWdzID0gc2tiX3NlZ21lbnQoc2tiLCBmZWF0dXJlcyk7XG5uZXQvaXB2Ni91ZHBfb2ZmbG9hZC5jLTExMC1cdH1cbi0tXG5uZXQvc2N0cC9vZmZsb2FkLmM9Mzk9c3RhdGljIHN0cnVjdCBza19idWZmICpzY3RwX2dzb19zZWdtZW50KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3NjdHAvb2ZmbG9hZC5jLTcxLVxubmV0L3NjdHAvb2ZmbG9hZC5jOjcyOlx0c2VncyA9IHNrYl9zZWdtZW50KHNrYiwgKGZlYXR1cmVzIHwgTkVUSUZfRl9IV19DU1VNKSBcdTAwMjYgfk5FVElGX0ZfU0cpO1xubmV0L3NjdHAvb2ZmbG9hZC5jLTczLVx0aWYgKElTX0VSUihzZWdzKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTk6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1NjkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBTY29wZSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byBHU08gc2VnbWVudGF0aW9uLCB0aGF0IG11Y2ggaXMgY2xlYXIuIFRoZSBrZXkgcGxheWVycyBoZXJlIHNlZW0gdG8gYmUgYHNrYl9zZWdtZW50YCDigJMgdGhhdCYjMzk7cyB0aGUgY29yZSBvZiB0aGUgc2VnbWVudGF0aW9uIGxvZ2ljLCBzbyBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgYSBjbG9zZSBleWUgb24gaXQg4oCTIGFuZCB0aGUgZnVuY3Rpb25zIGNhbGxpbmcgaXQ6IGB0Y3BfZ3NvX3NlZ21lbnRgLCBgX191ZHBfZ3NvX3NlZ21lbnRgLCB0aGUgVUZPIGZyYWdtZW50ZXJzLCBhbmQgYHNjdHBfZ3NvX3NlZ21lbnRgLiBUaG9zZSBhcmUgdHJpZ2dlcmVkIGJ5IHRoZSBsaWtlcyBvZiBgc2tiX21hY19nc29fc2VnbWVudGAgYW5kIGV2ZW50dWFsbHksIGBkZXZfaGFyZF9zdGFydF94bWl0YCwgc28gSSBjYW4gc2VlIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBkYXRhIHBhdGguCgpCZXlvbmQgR1NPLCBJIHNlZSBpdCBhbHNvIHRvdWNoZXMgYF9fdmlydGlvX25ldF9oZHJfdG9fc2tiYCwgd2hpY2ggZmxhZ3MgdXAgYHR1bl9nZXRfdXNlcmAsIGB0YXBfZ2V0X3VzZXJgLCBhbmQgYHBhY2tldF9zbmRgIGFzIHJlbGV2YW50LiBTbyBJIGhhdmUgYSBmZWVsaW5nIHRoZSB2aXJ0dWFsIG5ldHdvcmtpbmcgc2lkZSBpcyBhbHNvIGluIHBsYXkuCgpUaGVyZWZvcmUsIG15IGluaXRpYWwgbWVudGFsIGNoZWNrbGlzdCBpczoKCiogICBgc2tiX3NlZ21lbnRgICh0aGUgY29yZSkKKiAgIGB0dW5fZ2V0X3VzZXJgCiogICBgdGFwX2dldF91c2VyYAoqICAgYHBhY2tldF9zbmRgCiogICBgdHBhY2tldF9zbmRgCgpJIHNob3VsZCBzZWUgaWYgYW55IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcmVsZXZhbnQsIGJ1dCBgQ09ORklHX1RVTmAsIGBDT05GSUdfTUFDVlRBUGAsIGFuZCBgQ09ORklHX1BBQ0tFVGAgYXJlIHByZXR0eSBzdGFuZGFyZCBmYXJlIGluIG5ldHdvcmtpbmcgY29udGV4dHMsIGFuZCBzaW5jZSB0aGlzIHBhdGNoIGlzIG1vZGlmeWluZyBjb3JlIG5ldHdvcmtpbmcgY29kZSwgaXQmIzM5O3MgdmVyeSBsaWtlbHkgdG8gYmUgYWx3YXlzIGNvbXBpbGVkLgoKVGltZSB0byBkZWx2ZSBpbnRvIGBuZXQvY29yZS9za2J1ZmYuY2AgYW5kIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgc2tiX3NlZ21lbnRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxOToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDg1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0ODUwOlx0XHRcdFx0XHRcdGdvdG8gbm9ybWFsO1xuNDg1MTpcdFxuNDg1MjpcdFx0XHRcdFx0bGVuIC09IGl0ZXItXHUwMDNlbGVuO1xuNDg1MzpcdFx0XHRcdH1cbjQ4NTQ6XHRcbjQ4NTU6XHRcdFx0XHRpZiAobGVuICE9IGZyYWdfbGVuKVxuNDg1NjpcdFx0XHRcdFx0Z290byBub3JtYWw7XG40ODU3Olx0XHRcdH1cbjQ4NTg6XHRcbjQ4NTk6XHRcdFx0LyogR1NPIHBhcnRpYWwgb25seSByZXF1aXJlcyB0aGF0IHdlIHRyaW0gb2ZmIGFueSBleGNlc3MgdGhhdFxuNDg2MDpcdFx0XHQgKiBkb2VzbiYjMzk7dCBmaXQgaW50byBhbiBNU1Mgc2l6ZWQgYmxvY2ssIHNvIHRha2UgY2FyZSBvZiB0aGF0XG40ODYxOlx0XHRcdCAqIG5vdy5cbjQ4NjI6XHRcdFx0ICovXG40ODYzOlx0XHRcdHBhcnRpYWxfc2VncyA9IG1pbihsZW4gLyBtc3MsIEdTT19NQVhfU0VHUyk7XG40ODY0Olx0XHRcdGlmIChwYXJ0aWFsX3NlZ3MgXHUwMDNlIDEpXG40ODY1Olx0XHRcdFx0bXNzICo9IHBhcnRpYWxfc2VncztcbjQ4NjY6XHRcdFx0ZWxzZVxuNDg2NzpcdFx0XHRcdHBhcnRpYWxfc2VncyA9IDA7XG40ODY4Olx0XHR9XG40ODY5Olx0XG40ODcwOlx0bm9ybWFsOlxuNDg3MTpcdFx0aGVhZHJvb20gPSBza2JfaGVhZHJvb20oaGVhZF9za2IpO1xuNDg3MjpcdFx0cG9zID0gc2tiX2hlYWRsZW4oaGVhZF9za2IpO1xuNDg3MzpcdFxuNDg3NDpcdFx0aWYgKHNrYl9vcnBoYW5fZnJhZ3MoaGVhZF9za2IsIEdGUF9BVE9NSUMpKVxuNDg3NTpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbjQ4NzY6XHRcbjQ4Nzc6XHRcdG5mcmFncyA9IHNrYl9zaGluZm8oaGVhZF9za2IpLVx1MDAzZW5yX2ZyYWdzO1xuNDg3ODpcdFx0ZnJhZyA9IHNrYl9zaGluZm8oaGVhZF9za2IpLVx1MDAzZWZyYWdzO1xuNDg3OTpcdFx0ZnJhZ19za2IgPSBoZWFkX3NrYjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTk6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2NTAKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUmVjZW50IE5ldHdvcmsgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCB0aGUgY29yZSBjaGFuZ2UgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIGFkanVzdG1lbnQgdG8gaG93IHdlIGNhbGN1bGF0ZSBgcGFydGlhbF9zZWdzYCB3aXRoaW4gdGhlIGBza2Jfc2VnbWVudGAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgbGltaXRpbmcgdGhlIGBwYXJ0aWFsX3NlZ3NgIGNhbGN1bGF0aW9uIHRvIHRoZSBtaW5pbXVtIG9mIGBsZW4gLyBtc3NgIGFuZCBgR1NPX01BWF9TRUdTYC4gVGhpcyBpcyBhIGRlZmluaXRlIHNhZmVndWFyZCBhZ2FpbnN0IHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93IG9yIHNvbWUgb3RoZXIgZWRnZS1jYXNlIHNjZW5hcmlvIGluIHNlZ21lbnRhdGlvbiwgd2hpY2ggaXMgZ29vZC4gVGhlIHByaW9yIGNhbGN1bGF0aW9uLCB3aGlsZSBzZWVtaW5nbHkgc3RyYWlnaHRmb3J3YXJkLCBjb3VsZCBwb3RlbnRpYWxseSBsZWFkIHRvIGlzc3VlcyB3aGVuIGRlYWxpbmcgd2l0aCBwYXJ0aWN1bGFybHkgbGFyZ2Ugb3IgZnJhZ21lbnRlZCBwYWNrZXRzLiBUaGlzIG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGJvdW5kcyBjaGVja2luZyBpcyBhbHdheXMgYSBwb3NpdGl2ZSB0aGluZyBpbiBuZXR3b3JrIGNvZGUuCgpOb3csIGdsYW5jaW5nIGF0IHRoZSBzZWNvbmQgY2hhbmdlLCB3aGljaCBpcyBpbiBgX192aXJ0aW9fbmV0X2hkcl90b19za2JgLCBJIHNlZSB0aGF0IGl0IGludm9sdmVzIGBnc29fc2l6ZWAuIEl0IGFwcGVhcnMgdGhlcmUmIzM5O3MgYSBndWFyZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYGdzb19zaXplYCBwYXJhbWV0ZXIgb2YgdmlydGlvIG5ldCBpcyBhdCBsZWFzdCBgVENQX01JTl9HU09fU0laRWAgd2hlbiBnZW5lcmF0aW5nIGEgaGVhZGVyLiBUaGUgYEJVSUxEX0JVR19PTmAgc3RhdGVtZW50IGNhdWdodCBteSBleWUgdG9vIOKAkyBpdCBhc3NlcnRzIGEgcmVsYXRpb25zaGlwIGJldHdlZW4gYFRDUF9NSU5fR1NPX1NJWkVgIGFuZCBgR1NPX01BWF9TRUdTYCBhbmQgYEdTT19NQVhfU0laRWAuIFRoaXMgc3VnZ2VzdHMgdGhlIHBhdGNoIGlzIGFpbWVkIGF0IGVuc3VyaW5nIGNvbnNpc3RlbnQgR1NPIGJlaGF2aW9yLCBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSBtaW5pbXVtIHBhY2tldCBzaXplIG9yIGxpbWl0YXRpb25zIGltcG9zZWQgYnkgdGhlIGhhcmR3YXJlIGFuZCBzb2Z0d2FyZSBvbiBHU08gY2FwYWJpbGl0aWVzLgoKQWxyaWdodCwgc28gdGhlIGZvY3VzIGlzIHJlYWxseSBvbiBzZWdtZW50YXRpb24gYW5kIEdTTy4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaG93IHRoaXMgcmVsYXRlcyB0byBhIGZldyBmdW5jdGlvbnMuIE15IGltbWVkaWF0ZSBsaXN0IG9mIGludGVyZXN0aW5nIGZ1bmN0aW9ucyBpbmNsdWRlcyBgc2tiX3NlZ21lbnRgIOKAkyBvYnZpb3VzbHksIGdpdmVuIHRoZSBmaXJzdCBjaGFuZ2UsIGFuZCBJIG5lZWQgdG8gc2VlIGhvdyBpdCB3b3JrcyBpbiBjb250ZXh0IOKAkyBhbmQgdGhlbiBgdHVuX2dldF91c2VyYCwgYHRhcF9nZXRfdXNlcmAsIGBwYWNrZXRfc25kYCwgYW5kIGB0cGFja2V0X3NuZGAuIFRoZXNlIGFyZSBhbGwgY3J1Y2lhbCBwb2ludHMgd2hlcmUgbmV0d29yayBwYWNrZXRzIGFyZSBoYW5kbGVkLCBhbmQgYSBHU08vc2VnbWVudGF0aW9uIGlzc3VlIGNvdWxkIG1hbmlmZXN0LiBJJiMzOTtsbCBzdGFydCB3aXRoIGB0dW5fZ2V0X3VzZXJgIGluIGBkcml2ZXJzL25ldC90dW4uY2AgYW5kIHNlZSBpZiB0aGUgcGF0Y2ggZGlyZWN0bHkgYWZmZWN0cyBhbnl0aGluZyB0aGVyZSwgc2luY2UgaXQmIzM5O3MgYSBjb21tb24gbmV0d29yayBpbnRlcmZhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3R1bl9nZXRfdXNlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90dW4uYz0xNjc3PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdHVuX2J1aWxkX3NrYihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTE3NzMtLyogR2V0IHBhY2tldCBmcm9tIHVzZXIgc3BhY2UgYnVmZmVyICovXG5kcml2ZXJzL25ldC90dW4uYzoxNzc0OnN0YXRpYyBzc2l6ZV90IHR1bl9nZXRfdXNlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxuZHJpdmVycy9uZXQvdHVuLmMtMTc3NS1cdFx0XHQgICAgdm9pZCAqbXNnX2NvbnRyb2wsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcbi0tXG5kcml2ZXJzL25ldC90dW4uYz0yMDY2PXN0YXRpYyBzc2l6ZV90IHR1bl9jaHJfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0yMDc5LVxuZHJpdmVycy9uZXQvdHVuLmM6MjA4MDpcdHJlc3VsdCA9IHR1bl9nZXRfdXNlcih0dW4sIHRmaWxlLCBOVUxMLCBmcm9tLCBub2Jsb2NrLCBmYWxzZSk7XG5kcml2ZXJzL25ldC90dW4uYy0yMDgxLVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTI2NDY9c3RhdGljIGludCB0dW5fc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgdG90YWxfbGVuKVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTI2OTItXG5kcml2ZXJzL25ldC90dW4uYzoyNjkzOlx0cmV0ID0gdHVuX2dldF91c2VyKHR1biwgdGZpbGUsIGN0bCA/IGN0bC1cdTAwM2VwdHIgOiBOVUxMLCBcdTAwMjZtLVx1MDAzZW1zZ19pdGVyLFxuZHJpdmVycy9uZXQvdHVuLmMtMjY5NC1cdFx0XHQgICBtLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlULFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxOToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDcyMgoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLCB0aGlua2luZyB0aHJvdWdoIGl0IGluIGEgdGVjaG5pY2FsIGNvbnRleHQuCgoqKkluaXRpYWwgQXNzZXNzbWVudDogTmV0d29yayBEcml2ZXIgQ29uc2lkZXJhdGlvbnMqKgoKQWxyaWdodCwgbG9va2luZyBhdCBgdHVuX2dldF91c2VyYCBhbmQgYHRhcF9nZXRfdXNlcmAsIHRoZXNlIGFyZSBjbGVhcmx5IHJlbGV2YW50IGZ1bmN0aW9ucyBmb3IgbmV0d29yayBkcml2ZXIgZGV2ZWxvcG1lbnQsIHNwZWNpZmljYWxseSBpbiB0aGUgY29udGV4dCBvZiBUVU4vVEFQIGludGVyZmFjZXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1llcCwgdGhhdCBtYWtlcyBzZW5zZS4mIzM0OyBUaGVzZSBhcmUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzLgoKYHR1bl9nZXRfdXNlcmAgaXMgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgZXhhbWluaW5nIHRoZSB1c2VyLXNwYWNlIGludGVyYWN0aW9uIHdpdGggYSBUVU4gZGV2aWNlLiBJJiMzOTtkIGV4cGVjdCBpdCBkZWFscyB3aXRoIHNldHRpbmcgdXAgdGhlIGludGVyZmFjZSYjMzk7cyBwYXJhbWV0ZXJzLCBoYW5kbGluZyBkYXRhIHRyYW5zZmVyIGJldHdlZW4gdGhlIGtlcm5lbCBhbmQgdXNlciBzcGFjZSwgYW5kIHBvc3NpYmx5IG1hbmFnaW5nIHZpcnR1YWwgSVAgYWRkcmVzc2VzIG9yIHJvdXRpbmcgY29uZmlndXJhdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGltcGxlbWVudGF0aW9uLCBidXQgdGhlIG5hbWUgc3Ryb25nbHkgc3VnZ2VzdHMgaXRzIHJvbGUuIEkgd291bGQgYmUgY29uc2lkZXJpbmcgaG93IGl0IGhhbmRsZXMgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIG5ldHdvcmsgc3RhY2ssIGFuZCBhbnkgc2VjdXJpdHkgaW1wbGljYXRpb25zLgoKU2ltaWxhcmx5LCBgdGFwX2dldF91c2VyYCBpcyBlcXVhbGx5IGltcG9ydGFudCwgcGFydGljdWxhcmx5IGdpdmVuIFRBUCYjMzk7cyByb2xlIGFzIGEgYnJpZGdpbmcgaW50ZXJmYWNlLiBJIGltYWdpbmUgaXQgbWlycm9ycyBtdWNoIG9mIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkgYXMgVFVOLCBidXQgd2l0aCB0aGUgYWRkZWQgY29tcGxleGl0eSBvZiBFdGhlcm5ldCBmcmFtZSBoYW5kbGluZyBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9uIHdpdGggYSBicmlkZ2UgZHJpdmVyLiBJdCB3aWxsIGJlIHZlcnkgdXNlZnVsIGluIHJldmlld2luZyBhbnkgY29kZSB3aXRoIHRoZSB1c2Ugb2YgYSBUQVAgaW50ZXJmYWNlLCBjb25zaWRlcmluZyB0aGUgbnVhbmNlcyBvZiB0aGUgZHJpdmVyIGFuZCBpdHMgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGxpbmsgbGF5ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RhcF9nZXRfdXNlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90YXAuYz01NDM9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqdGFwX2FsbG9jX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHNpemVfdCBwcmVwYWQsXG4tLVxuZHJpdmVycy9uZXQvdGFwLmMtNTcxLS8qIEdldCBwYWNrZXQgZnJvbSB1c2VyIHNwYWNlIGJ1ZmZlciAqL1xuZHJpdmVycy9uZXQvdGFwLmM6NTcyOnN0YXRpYyBzc2l6ZV90IHRhcF9nZXRfdXNlcihzdHJ1Y3QgdGFwX3F1ZXVlICpxLCB2b2lkICptc2dfY29udHJvbCxcbmRyaXZlcnMvbmV0L3RhcC5jLTU3My1cdFx0XHQgICAgc3RydWN0IGlvdl9pdGVyICpmcm9tLCBpbnQgbm9ibG9jaylcbi0tXG5kcml2ZXJzL25ldC90YXAuYz02OTE9c3RhdGljIHNzaXplX3QgdGFwX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4tLVxuZHJpdmVycy9uZXQvdGFwLmMtNjk5LVxuZHJpdmVycy9uZXQvdGFwLmM6NzAwOlx0cmV0dXJuIHRhcF9nZXRfdXNlcihxLCBOVUxMLCBmcm9tLCBub2Jsb2NrKTtcbmRyaXZlcnMvbmV0L3RhcC5jLTcwMS19XG4tLVxuZHJpdmVycy9uZXQvdGFwLmM9MTAzMz1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0YXBfZm9wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC90YXAuYy0xMDQzLVxuZHJpdmVycy9uZXQvdGFwLmM6MTA0NDpzdGF0aWMgaW50IHRhcF9nZXRfdXNlcl94ZHAoc3RydWN0IHRhcF9xdWV1ZSAqcSwgc3RydWN0IHhkcF9idWZmICp4ZHApXG5kcml2ZXJzL25ldC90YXAuYy0xMDQ1LXtcbi0tXG5kcml2ZXJzL25ldC90YXAuYz0xMTE1PXN0YXRpYyBpbnQgdGFwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSxcbi0tXG5kcml2ZXJzL25ldC90YXAuYy0xMTI2LVx0XHRcdHhkcCA9IFx1MDAyNigoc3RydWN0IHhkcF9idWZmICopY3RsLVx1MDAzZXB0cilbaV07XG5kcml2ZXJzL25ldC90YXAuYzoxMTI3Olx0XHRcdHRhcF9nZXRfdXNlcl94ZHAocSwgeGRwKTtcbmRyaXZlcnMvbmV0L3RhcC5jLTExMjgtXHRcdH1cbi0tXG5kcml2ZXJzL25ldC90YXAuYy0xMTMxLVxuZHJpdmVycy9uZXQvdGFwLmM6MTEzMjpcdHJldHVybiB0YXBfZ2V0X3VzZXIocSwgY3RsID8gY3RsLVx1MDAzZXB0ciA6IE5VTEwsIFx1MDAyNm0tXHUwMDNlbXNnX2l0ZXIsXG5kcml2ZXJzL25ldC90YXAuYy0xMTMzLVx0XHRcdCAgICBtLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTk6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU1NjgKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ29uc2lkZXJpbmcgRnVuY3Rpb24gRGVzaWduIE9wdGlvbnMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIG5ldyBmdW5jdGlvbiBhbmQgdGhlIGJlc3Qgd2F5IHRvIGFwcHJvYWNoIGl0LiBgdGFwX2dldF91c2VyYCBzZWVtcyBsaWtlIGEgc29saWQgY2FuZGlkYXRlLiBJdCYjMzk7cyBnb3QgdGhlIHJpZ2h0IGZ1bmN0aW9uYWxpdHksIGFuZCB0aGUgZXhpc3Rpbmcgc3RydWN0dXJlIGlzIHByb2JhYmx5IGEgZ29vZCBzdGFydGluZyBwb2ludC4gQnV0LCBiZWZvcmUgSSBnZXQgdG9vIGF0dGFjaGVkIHRvIHRoYXQsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhIG1vcmUgZWxlZ2FudCBvciBlZmZpY2llbnQgc29sdXRpb24uCgpMZXQgbWUgdGFrZSBhbm90aGVyIGxvb2suLi4gaG1tLCB3aGF0IGFib3V0IHNvbWV0aGluZyBsaWtlIGBwYWNrZXRfc25kYD8gSSYjMzk7bSBjdXJpb3VzLiBJIG1heSBuZWVkIHRvIGRpdmUgaW50byB0aGUgY29kZWJhc2UgYW5kIGFuYWx5emUgaXRzIGludGVybmFsIHdvcmtpbmdzLiBJdCBtYXkgcmVxdWlyZSBhIGRlZXBlciBhbmFseXNpcywgYnV0IGl0JiMzOTtzIHdvcnRoIGNoZWNraW5nLiBEZXBlbmRpbmcgb24gaG93IHRoZSBkYXRhIGlzIGhhbmRsZWQgaW4gdGhhdCBmdW5jdGlvbiwgdGhlcmUgbWlnaHQgYmUgc29tZSBjbGV2ZXIgaW50ZWdyYXRpb24gb3Bwb3J0dW5pdGllcyB0aGVyZS4gSSBuZWVkIHRvIHdlaWdoIHRoZSBwcm9zIGFuZCBjb25zIG9mIGJvdGggYXBwcm9hY2hlcyBiZWZvcmUgY29tbWl0dGluZyB0byBhIGZpbmFsIGRlc2lnbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTk6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFja2V0X3NuZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcGFja2V0L2FmX3BhY2tldC5jPTI1Mjg9c3RhdGljIHZvaWQgdHBhY2tldF9kZXN0cnVjdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI1NDctXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI1NDg6c3RhdGljIGludCBfX3BhY2tldF9zbmRfdm5ldF9wYXJzZShzdHJ1Y3QgdmlydGlvX25ldF9oZHIgKnZuZXRfaGRyLCBzaXplX3QgbGVuKVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNTQ5LXtcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI1NjMtXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI1NjQ6c3RhdGljIGludCBwYWNrZXRfc25kX3ZuZXRfcGFyc2Uoc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgKmxlbixcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjU2NS1cdFx0XHRcdCBzdHJ1Y3QgdmlydGlvX25ldF9oZHIgKnZuZXRfaGRyLCBpbnQgdm5ldF9oZHJfc3opXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNTc1LVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNTc2Olx0cmV0ID0gX19wYWNrZXRfc25kX3ZuZXRfcGFyc2Uodm5ldF9oZHIsICpsZW4pO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNTc3LVx0aWYgKHJldClcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTI2Njg9c3RhdGljIGludCB0cGFja2V0X3BhcnNlX2hlYWRlcihzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCB2b2lkICpmcmFtZSxcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI3MzUtXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI3MzY6c3RhdGljIGludCB0cGFja2V0X3NuZChzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3QgbXNnaGRyICptc2cpXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI3Mzcte1xuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjg0OS1cdFx0XHRtZW1jcHkoXHUwMDI2dm5ldF9oZHIsIGRhdGEgLSB2bmV0X2hkcl9zeiwgc2l6ZW9mKHZuZXRfaGRyKSk7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI4NTA6XHRcdFx0aWYgKF9fcGFja2V0X3NuZF92bmV0X3BhcnNlKFx1MDAyNnZuZXRfaGRyLCB0cF9sZW4pKSB7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI4NTEtXHRcdFx0XHR0cF9sZW4gPSAtRUlOVkFMO1xuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9Mjk0MD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnBhY2tldF9hbGxvY19za2Ioc3RydWN0IHNvY2sgKnNrLCBzaXplX3QgcHJlcGFkLFxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjk2NS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6Mjk2NjpzdGF0aWMgaW50IHBhY2tldF9zbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yOTY3LXtcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMwMjMtXHRpZiAodm5ldF9oZHJfc3opIHtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzAyNDpcdFx0ZXJyID0gcGFja2V0X3NuZF92bmV0X3BhcnNlKG1zZywgXHUwMDI2bGVuLCBcdTAwMjZ2bmV0X2hkciwgdm5ldF9oZHJfc3opO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMDI1LVx0XHRpZiAoZXJyKVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MzEyNT1zdGF0aWMgaW50IHBhY2tldF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMxMzAtXHQvKiBSZWFkaW5nIHR4X3JpbmcucGdfdmVjIHdpdGhvdXQgaG9sZGluZyBwZ192ZWNfbG9jayBpcyByYWN5LlxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzozMTMxOlx0ICogdHBhY2tldF9zbmQoKSB3aWxsIHJlZG8gdGhlIGNoZWNrIHNhZmVseS5cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzEzMi1cdCAqL1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMTMzLVx0aWYgKGRhdGFfcmFjZShwby1cdTAwM2V0eF9yaW5nLnBnX3ZlYykpXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjMxMzQ6XHRcdHJldHVybiB0cGFja2V0X3NuZChwbywgbXNnKTtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzEzNS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzEzNjpcdHJldHVybiBwYWNrZXRfc25kKHNvY2ssIG1zZywgbGVuKTtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzEzNy19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2Nzc0CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBOZXR3b3JrIFBhY2tldCBUcmFuc21pc3Npb24gRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBwYWNrZXQgdHJhbnNtaXNzaW9uLCB0cnlpbmcgdG8gc2VlIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGxpZXMuIEdvb2QgbmV3cywgYHBhY2tldF9zbmRgIGFuZCBgdHBhY2tldF9zbmRgIHNlZW0gcHJvbWlzaW5nIOKAkyB0aGV5JiMzOTtyZSBkZWZpbml0ZWx5IG9uIHRoZSByaWdodCB0cmFjay4gQW5kLCBvZiBjb3Vyc2UsIEkgaGF2ZSB0byByZS1mYW1pbGlhcml6ZSBteXNlbGYgd2l0aCBgc2tiX3NlZ21lbnRgOyBpdCYjMzk7cyBhIHdvcmtob3JzZSwgdGhhdCBvbmUsIGFuZCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkga25vdyBob3cgaXQmIzM5O3MgYmVpbmcgbGV2ZXJhZ2VkLiBJdHMgd2lkZXNwcmVhZCB1c2UsIGNvdXBsZWQgd2l0aCBpdHMgZXhwb3J0IHN0YXR1cywgc3VnZ2VzdHMgaXQmIzM5O3MgYSBrZXkgcGllY2Ugb2YgdGhlIHB1enpsZS4KCk5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGFyZSB0aGVyZSAqb3RoZXIqIGZ1bmN0aW9ucyBwbGF5aW5nIGEgcGl2b3RhbCByb2xlIGhlcmU/IEkgbmVlZCB0byBnZXQgYSBicm9hZGVyIHZpZXcgb2YgdGhlIGVjb3N5c3RlbS4gTGV0IG1lIGRpZyBhIGxpdHRsZSBkZWVwZXIuIEhtbSwgYHZpcnRpb19uZXRfaGRyX3RvX3NrYmAgc2VlbXMgdG8gYmUgcmVsZXZhbnQuIEl0JiMzOTtzIHVzZWQgd2l0aGluIGB0dW5fZ2V0X3VzZXJgLCBgdGFwX2dldF91c2VyYCwgdGhhdCBwYWlyIG1ha2VzIHNlbnNlLCBpdCBpcyBhbHNvIHVzZWQgaW4gYHBhY2tldF9zbmRgIGFuZCBgdHBhY2tldF9zbmRgLCB3aGljaCBhcmUgYWxzbyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZGluZywgYW5kIGZpbmFsbHkgYHBhZ2VfdG9fc2tiYCwgaW4gYGRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuY2AsIHdoaWNoIG1ha2VzIG1lIHRoaW5rIGl0IGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCB0aGUgcGFnZSBhbGxvY2F0aW9uIGFzcGVjdC4gVGhpcyBpcyBhbiBpbnRlcmVzdGluZyBzZXQgb2YgY29ubmVjdGlvbnMgYW5kIHdhcnJhbnRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTk6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFnZV90b19za2ImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdmlydGlvX25ldC5jPTgxOT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnZpcnRuZXRfYnVpbGRfc2tiKHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGJ1Zmxlbixcbi0tXG5kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMtODM1LS8qIENhbGxlZCBmcm9tIGJvdHRvbSBoYWxmIGNvbnRleHQgKi9cbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYzo4MzY6c3RhdGljIHN0cnVjdCBza19idWZmICpwYWdlX3RvX3NrYihzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSxcbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYy04MzctXHRcdFx0XHQgICBzdHJ1Y3QgcmVjZWl2ZV9xdWV1ZSAqcnEsXG4tLVxuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jPTE5OTQ9c3RhdGljIHN0cnVjdCBza19idWZmICpyZWNlaXZlX2JpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYy0yMDE2LVxuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jOjIwMTc6XHRza2IgPSBwYWdlX3RvX3NrYih2aSwgcnEsIHBhZ2UsIDAsIGxlbiwgUEFHRV9TSVpFLCAwKTtcbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYy0yMDE4LVx0dTY0X3N0YXRzX2FkZChcdTAwMjZzdGF0cy1cdTAwM2VieXRlcywgbGVuIC0gdmktXHUwMDNlaGRyX2xlbik7XG4tLVxuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jPTIzNzY9c3RhdGljIHN0cnVjdCBza19idWZmICpyZWNlaXZlX21lcmdlYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYy0yNDEzLVxuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jOjI0MTQ6XHRoZWFkX3NrYiA9IHBhZ2VfdG9fc2tiKHZpLCBycSwgcGFnZSwgb2Zmc2V0LCBsZW4sIHRydWVzaXplLCBoZWFkcm9vbSk7XG5kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMtMjQxNS1cdGN1cnJfc2tiID0gaGVhZF9za2I7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NTk5CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBWaXJ0aW8tTmV0IEdTTyBhbmQgUGFja2V0IEhhbmRsaW5nKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCYjMzk7cyBydW5uaW5nIHRocm91Z2ggbXkgaGVhZCBhcyBJIGxvb2sgYXQgdGhlc2UgZnVuY3Rpb25zIGFuZCBjb25maWd1cmF0aW9ucy4gYHJlY2VpdmVfYmlnYCBhbmQgYHJlY2VpdmVfbWVyZ2VhYmxlYCBpbiBgZHJpdmVycy9uZXQvdmlydGlvX25ldC5jYCBhcmUgc29saWQgc3RhcnRpbmcgcG9pbnRzLCBhcyB1c3VhbC4gTGV0JiMzOTtzIGRpZyBkZWVwZXIgaW50byB0aGUgR1NPIGhhbmRsaW5nLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGltcGxlbWVudGF0aW9uLCBzbyBsZXQmIzM5O3Mgc3RhcnQgd2l0aCBgX192aXJ0aW9fbmV0X2hkcl90b19za2JgIGluIGBpbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaGAuIEFoLCB5ZXMsIHRoZXJlIGl0IGlzOgpgYGBjCgkJCUJVSUxEX0JVR19PTihUQ1BfTUlOX0dTT19TSVpFICogR1NPX01BWF9TRUdTICZsdDsgR1NPX01BWF9TSVpFKTsKCQkJZ3NvX3NpemUgPSBtYXgoZ3NvX3NpemUsIFRDUF9NSU5fR1NPX1NJWkUpOwpgYGAKVGhhdCBgQlVJTERfQlVHX09OYCBsb29rcyBmYW1pbGlhciDigJMgaXQmIzM5O3MgYWRkcmVzc2luZyB0aGF0IHBvdGVudGlhbCBpc3N1ZSB3aXRoIEdTTyBzaXplLiBHb29kIGNhdGNoLiBBbmQgdGhlIGBnc29fc2l6ZSA9IG1heChnc29fc2l6ZSwgVENQX01JTl9HU09fU0laRSlgIGlzIGFub3RoZXIgY3JpdGljYWwgcGllY2Ugb2YgdGhhdCBmaXg7IGVuc3VyaW5nIGEgcmVhc29uYWJsZSBtaW5pbXVtLgoKTW92aW5nIG9uLCB0aGUgb3RoZXIgY3J1Y2lhbCBzcG90IHNlZW1zIHRvIGJlIGluIGBza2Jfc2VnbWVudGA6CmBgYGMKCQlwYXJ0aWFsX3NlZ3MgPSBtaW4obGVuIC8gbXNzLCBHU09fTUFYX1NFR1MpOwpgYGAKUmlnaHQsIHRoaXMgbG9va3MgbGlrZSBpdOKAmXMgdG8gcHJldmVudCBgcGFydGlhbF9zZWdzYCBmcm9tIG92ZXJmbG93aW5nIGBHU09fTUFYX1NFR1NgLiBDbGFzc2ljIEdTTyBzZWdtZW50YXRpb24gbGltaXQgcHJvdGVjdGlvbi4KClNvLCB0YWtpbmcgYSBzdGVwIGJhY2sgdG8gb3JnYW5pemUgbXkgdGhvdWdodHMsIHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgSSB3YW50IHRvIHRob3JvdWdobHkgcmV2aWV3IGFuZCB0cmFjZSBhcmU6Ci0gYHNrYl9zZWdtZW50YCAob2J2aW91c2x5LCBnaXZlbiB0aGUgR1NPIGZvY3VzKQotIGB0dW5fZ2V0X3VzZXJgCi0gYHRhcF9nZXRfdXNlcmAKLSBgcGFja2V0X3NuZGAKLSBgdHBhY2tldF9zbmRgCi0gYHJlY2VpdmVfYmlnYAotIGByZWNlaXZlX21lcmdlYWJsZWAKClRob3NlIHNlZW0gbGlrZSB0aGUgY3JpdGljYWwgcGF0aHMuIE5vdywgdG8gbWFrZSBzdXJlIEkgaGF2ZSB0aGUgY29udGV4dCwgd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgaW52b2x2ZWQ/IEkga25vdyBgVFVOYCwgYE1BQ1ZUQVBgLCBgUEFDS0VUYCwgYW5kIGBWSVJUSU9fTkVUYCBhcmUgYWxsIHJlbGV2YW50IGhlcmUuIE5vdyBsZXQmIzM5O3Mgc2VlIHdoZXJlIHRoZSBjb25maWd1cmF0aW9uIHNpdHMsIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IHRoZSBgS2NvbmZpZ2AgZm9yIGBWSVJUSU9fTkVUYCB0byBjaGVjayBpZiBJIGFtIG1pc3Npbmcgc29tZXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxOToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVklSVElPX05FVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTQzNT1jb25maWcgVkVUSFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctNDQyLVxuZHJpdmVycy9uZXQvS2NvbmZpZzo0NDM6Y29uZmlnIFZJUlRJT19ORVRcbmRyaXZlcnMvbmV0L0tjb25maWctNDQ0LVx0dHJpc3RhdGUgXCYjMzQ7VmlydGlvIG5ldHdvcmsgZHJpdmVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NTEzCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIE1BQ1ZUQVAgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIGBNQUNWVEFQYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBgS2NvbmZpZ2AgZmlsZXMuIFRoYXQmIzM5O3MgdGhlIGRlZmluaXRpdmUgc291cmNlIGZvciB0aGVzZSBzb3J0cyBvZiBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgYE1BQ1ZUQVBgIGlzIGRlZmluZWQsIHdoaWNoIHNldHRpbmdzIGNvbnRyb2wgaXQsIGFuZCB3aGF0IG90aGVyIGNvbXBvbmVudHMgaXQgbWlnaHQgZGVwZW5kIG9uLiBIb3BlZnVsbHksIHRoZSByZWxldmFudCBgS2NvbmZpZ2AgZW50cnkgaXMgd2VsbC1jb21tZW50ZWQgYW5kIGNsZWFyLiBJJiMzOTttIGxvb2tpbmcgZm9yIGFueSBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBiZSByZWxldmFudCB0byB0aGUgaXNzdWUgSSYjMzk7bSBkZWJ1Z2dpbmcgb3IgdGhlIGZlYXR1cmUgSSYjMzk7bSBlbmFibGluZy4gSSYjMzk7bGwgYmUgZXhwZWN0aW5nIHRvIHNlZSBhIGJvb2xlYW4gY29uZmlndXJhdGlvbiBvcHRpb24gZGVmaW5lZCBzb21ld2hlcmUsIGFsb25nIHdpdGggbWF5YmUgc29tZSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgb24gb3RoZXIgbmV0d29yayBvciB2aXJ0dWFsaXphdGlvbiBtb2R1bGVzLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gc3BhY2UgYW5kIGRlY2lkZSBpZiB0aGlzIGlzIGFjdHVhbGx5IGVuYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQUNWVEFQJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9MTY1PWNvbmZpZyBNQUNWTEFOXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0xNzgtXG5kcml2ZXJzL25ldC9LY29uZmlnOjE3OTpjb25maWcgTUFDVlRBUFxuZHJpdmVycy9uZXQvS2NvbmZpZy0xODAtXHR0cmlzdGF0ZSBcJiMzNDtNQUMtVkxBTiBiYXNlZCB0YXAgZHJpdmVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4ODIyCgkJCQkJCQlvdXRwdXQ6IDE2CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQ2hlY2tpbmcgdGhlIFRVTiBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGBLY29uZmlnYCBmaWxlcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBgVFVOYCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgc2hvdWxkIHF1aWNrbHkgdmVyaWZ5IHRoZSByZWxldmFudCBkZXBlbmRlbmNpZXMgYW5kIHBvc3NpYmxlIGJ1aWxkIGZsYWdzLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIGFueSByZWNlbnQgY2hhbmdlcyBtaWdodCBoYXZlIGltcGFjdGVkIHRoZSBkZWZhdWx0IHNldHRpbmdzLiBJdCYjMzk7cyBiZXN0IHRvIGNvbmZpcm0gdGhlIGBUVU5gIGRldmljZSBpcyBlbmFibGVkLCBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYXMgZXhwZWN0ZWQgZm9yIHRoZSBjdXJyZW50IHVzZSBjYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxOToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVFVOJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlPTI0MD1jb25maWcgVEFSR0VUX0NQVVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlLTI2NC1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlOjI2NTpjb25maWcgVFVORV9DUFVcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlLTI2Ni1cdHN0cmluZ1xuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZz00NzE9Y2hvaWNlXG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnLTQ3NC1cbmFyY2gvcmlzY3YvS2NvbmZpZzo0NzU6Y29uZmlnIFRVTkVfR0VORVJJQ1xuYXJjaC9yaXNjdi9LY29uZmlnLTQ3Ni1cdGJvb2wgXCYjMzQ7Z2VuZXJpY1wmIzM0O1xuLS1cbmFyY2gvczM5MC9LY29uZmlnPTQ2MT1jaG9pY2Vcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy00NzEtXG5hcmNoL3MzOTAvS2NvbmZpZzo0NzI6Y29uZmlnIFRVTkVfREVGQVVMVFxuYXJjaC9zMzkwL0tjb25maWctNDczLVx0Ym9vbCBcJiMzNDtEZWZhdWx0XCYjMzQ7XG4tLVxuYXJjaC9zMzkwL0tjb25maWctNDc3LVxuYXJjaC9zMzkwL0tjb25maWc6NDc4OmNvbmZpZyBUVU5FX1oxMFxuYXJjaC9zMzkwL0tjb25maWctNDc5LVx0Ym9vbCBcJiMzNDtJQk0gU3lzdGVtIHoxMFwmIzM0O1xuYXJjaC9zMzkwL0tjb25maWctNDgwLVxuYXJjaC9zMzkwL0tjb25maWc6NDgxOmNvbmZpZyBUVU5FX1oxOTZcbmFyY2gvczM5MC9LY29uZmlnLTQ4Mi1cdGJvb2wgXCYjMzQ7SUJNIHpFbnRlcnByaXNlIDExNCBhbmQgMTk2XCYjMzQ7XG4tLVxuYXJjaC9zMzkwL0tjb25maWctNDg0LVxuYXJjaC9zMzkwL0tjb25maWc6NDg1OmNvbmZpZyBUVU5FX1pFQzEyXG5hcmNoL3MzOTAvS2NvbmZpZy00ODYtXHRib29sIFwmIzM0O0lCTSB6QkMxMiBhbmQgekVDMTJcJiMzNDtcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy00ODgtXG5hcmNoL3MzOTAvS2NvbmZpZzo0ODk6Y29uZmlnIFRVTkVfWjEzXG5hcmNoL3MzOTAvS2NvbmZpZy00OTAtXHRib29sIFwmIzM0O0lCTSB6MTNzIGFuZCB6MTNcJiMzNDtcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy00OTItXG5hcmNoL3MzOTAvS2NvbmZpZzo0OTM6Y29uZmlnIFRVTkVfWjE0XG5hcmNoL3MzOTAvS2NvbmZpZy00OTQtXHRib29sIFwmIzM0O0lCTSB6MTQgWlIxIGFuZCB6MTRcJiMzNDtcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy00OTYtXG5hcmNoL3MzOTAvS2NvbmZpZzo0OTc6Y29uZmlnIFRVTkVfWjE1XG5hcmNoL3MzOTAvS2NvbmZpZy00OTgtXHRib29sIFwmIzM0O0lCTSB6MTVcJiMzNDtcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy01MDAtXG5hcmNoL3MzOTAvS2NvbmZpZzo1MDE6Y29uZmlnIFRVTkVfWjE2XG5hcmNoL3MzOTAvS2NvbmZpZy01MDItXHRib29sIFwmIzM0O0lCTSB6MTZcJiMzNDtcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy01MDQtXG5hcmNoL3MzOTAvS2NvbmZpZzo1MDU6Y29uZmlnIFRVTkVfWjE3XG5hcmNoL3MzOTAvS2NvbmZpZy01MDYtXHRib29sIFwmIzM0O0lCTSB6MTdcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTM4Nj1jb25maWcgUklPTkVUX1JYX1NJWkVcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTM5MC1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzkxOmNvbmZpZyBUVU5cbmRyaXZlcnMvbmV0L0tjb25maWctMzkyLVx0dHJpc3RhdGUgXCYjMzQ7VW5pdmVyc2FsIFRVTi9UQVAgZGV2aWNlIGRyaXZlciBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz00MTU9Y29uZmlnIFRBUFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctNDIwLVxuZHJpdmVycy9uZXQvS2NvbmZpZzo0MjE6Y29uZmlnIFRVTl9WTkVUX0NST1NTX0xFXG5kcml2ZXJzL25ldC9LY29uZmlnLTQyMi1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgY3Jvc3MtZW5kaWFuIHZuZXQgaGVhZGVycyBvbiBsaXR0bGUtZW5kaWFuIGtlcm5lbHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTk6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk4NzIKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHRob3VnaCBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKktjb25maWcgRGl2ZSBmb3IgUEFDS0VUKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBvciBzZXR0aW5ncyByZWxhdGVkIHRvIHRoZSBgUEFDS0VUYCBmdW5jdGlvbmFsaXR5IGluIHRoaXMgcHJvamVjdC4gRmlyc3QsIG15IGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBgS2NvbmZpZ2AgZmlsZXMuIFRoYXQmIzM5O3MgdXN1YWxseSB0aGUgY2VudHJhbCBodWIgZm9yIGRlZmluaW5nIGFuZCBjb250cm9sbGluZyBrZXJuZWwgZmVhdHVyZXMsIGRyaXZlcnMsIGFuZCBvcHRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGxvY2F0ZSB0aGUgcmVsZXZhbnQgYEtjb25maWdgIGZpbGVzIOKAkyBwcm9iYWJseSBzdGFydGluZyB3aXRoIHRoZSBtb3JlIGdlbmVyYWwgb25lcyBhbmQgdGhlbiBkcmlsbGluZyBkb3duIGlmIG5lY2Vzc2FyeS4gVGhlIGdvYWwgaGVyZSBpcyB0byB1bmRlcnN0YW5kIHRoZSBkaWZmZXJlbnQgYFBBQ0tFVGAgcmVsYXRlZCBjb25maWd1cmF0aW9ucyBhdmFpbGFibGUsIHRoZWlyIGRlZmF1bHRzLCBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIHNldHRpbmdzLCBhbmQsIGNydWNpYWxseSwgaG93IHRvIGVuYWJsZSBvciBkaXNhYmxlIHRoZW0gd2l0aGluIHRoZSBidWlsZCBzeXN0ZW0uIEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc2ltcGxlIG1vZHVsZSwgc29tZXRoaW5nIG1vcmUgY29tcGxleCwgb3IgcGVyaGFwcyBhIHNldCBvZiByZWxhdGVkIG9wdGlvbnM/IExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQUNLRVQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3BhY2tldC9LY29uZmlnLTUtXG5uZXQvcGFja2V0L0tjb25maWc6Njpjb25maWcgUEFDS0VUXG5uZXQvcGFja2V0L0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O1BhY2tldCBzb2NrZXRcJiMzNDtcbi0tXG5uZXQvcGFja2V0L0tjb25maWctMTgtXG5uZXQvcGFja2V0L0tjb25maWc6MTk6Y29uZmlnIFBBQ0tFVF9ESUFHXG5uZXQvcGFja2V0L0tjb25maWctMjAtXHR0cmlzdGF0ZSBcJiMzNDtQYWNrZXQ6IHNvY2tldHMgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTk6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAxODcKCQkJCQkJCW91dHB1dDogMTg4CgkJCQkJCQl0aG91Z2h0czogMzA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLCBmb2N1c2luZyBvbiBuZXR3b3JrLXJlbGF0ZWQgY29kZS4gTXkgY29uZmlncyB0ZWxsIG1lIHRvIGNvbnNpZGVyIGBUVU5gLCBgTUFDVlRBUGAsIGBQQUNLRVRgLCBgVklSVElPX05FVGAsIGFuZCBgVEFQYC4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgYHNrYl9zZWdtZW50YCBpbiBgbmV0L2NvcmUvc2tidWZmLmNgIGlzIGFsd2F5cyBjb21waWxlZDsgSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLgoKSSYjMzk7dmUgaWRlbnRpZmllZCBhIGhhbmRmdWwgb2YgZnVuY3Rpb25zIHRoYXQgc2VlbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gVGhlc2UgaW5jbHVkZSBgc2tiX3NlZ21lbnRgLCBgdHVuX2dldF91c2VyYCwgYHRhcF9nZXRfdXNlcmAsIGBwYWNrZXRfc25kYCwgYHRwYWNrZXRfc25kYCwgYHJlY2VpdmVfYmlnYCwgYW5kIGByZWNlaXZlX21lcmdlYWJsZWAuIAoKSGFuZyBvbiwgYHJlY2VpdmVfYmlnYCBhbmQgYHJlY2VpdmVfbWVyZ2VhYmxlYCBhcmUgc3BlY2lmaWMgdG8gYHZpcnRpb19uZXRgLCByaWdodD8gQW5kIHRoZXkmIzM5O3JlIHN0YXRpYyBidXQgbm90IGlubGluZWQuIEdvb2QgdG8ga25vdy4gYHNrYl9zZWdtZW50YCBpcyBleHBvcnRlZCwgdGhhdCYjMzk7cyB1c2VmdWwuIEFuZCBhbGwgdGhlIG90aGVycywgYHR1bl9nZXRfdXNlcmAsIGB0YXBfZ2V0X3VzZXJgLCBgcGFja2V0X3NuZGAsIGFuZCBgdHBhY2tldF9zbmRgIGFyZSBzdGF0aWMuCgpUaGUga2V5IHF1ZXN0aW9uIGlzLCBhcmUgdGhleSBzdWl0YWJsZSBmb3IgZnV6emluZz8gQW5kIHRoZSBhbnN3ZXIgaXMgeWVzLCBhYnNvbHV0ZWx5ISBUaGVzZSBhcHBlYXIgdG8gYmUgZW50cnkgcG9pbnRzIHRoYXQgaGFuZGxlIHVzZXItcHJvdmlkZWQgZGF0YS4gYHR1bl9nZXRfdXNlcmAgaGFuZGxlcyBkYXRhIHdoZW4gd3JpdGluZyB0byBhIFRVTiBkZXZpY2UsIGB0YXBfZ2V0X3VzZXJgIHdoZW4gd3JpdGluZyB0byBhIFRBUCBkZXZpY2UuIFRoZW4gYHBhY2tldF9zbmRgIGFuZCBgdHBhY2tldF9zbmRgIGFyZSBpbnZvbHZlZCBpbiBzZW5kaW5nIHBhY2tldHMgdmlhIEFGX1BBQ0tFVCBzb2NrZXRzLiBBbmQgZmluYWxseSwgYHNrYl9zZWdtZW50YCBpcyB0aWVkIHRvIEdTTyBzZWdtZW50YXRpb24sIHNvIGl0IGRlZmluaXRlbHkgZGVhbHMgd2l0aCBwYWNrZXQgZGF0YS4KCkFscmlnaHQsIEkmIzM5O20gY29uZmlkZW50IGluIHRoZXNlIHRhcmdldHMuIFRpbWUgdG8gZmVlZCB0aGlzIGluZm9ybWF0aW9uIHRvIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgYW5kIG1vdmUgb24gdG8gdGhlIG5leHQgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTk6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RVTiYjMzQ7LAogICAgJiMzNDtUQVAmIzM0OywKICAgICYjMzQ7TUFDVlRBUCYjMzQ7LAogICAgJiMzNDtQQUNLRVQmIzM0OywKICAgICYjMzQ7VklSVElPX05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NrYl9zZWdtZW50JiMzNDssCiAgICAmIzM0O3R1bl9nZXRfdXNlciYjMzQ7LAogICAgJiMzNDt0YXBfZ2V0X3VzZXImIzM0OywKICAgICYjMzQ7cGFja2V0X3NuZCYjMzQ7LAogICAgJiMzNDt0cGFja2V0X3NuZCYjMzQ7LAogICAgJiMzNDtyZWNlaXZlX2JpZyYjMzQ7LAogICAgJiMzNDtyZWNlaXZlX21lcmdlYWJsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgbG9naWMgZm9yIEdTTyBzZWdtZW50YXRpb24gKGBza2Jfc2VnbWVudGApIGFuZCB2aXJ0aW8gbmV0IGhlYWRlciBwYXJzaW5nIChgX192aXJ0aW9fbmV0X2hkcl90b19za2JgKS4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaG93IHBhY2tldHMgYXJlIHNlZ21lbnRlZCBhbmQgaG93IHZpcnRpbyBoZWFkZXJzIGFyZSB2YWxpZGF0ZWQsIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIFRVTi9UQVAgZGV2aWNlcywgQUZfUEFDS0VUIHNvY2tldHMsIGFuZCB2aXJ0aW8tbmV0LiBUaGUgY2hhbmdlcyBoYXZlIGZ1bmN0aW9uYWwgaW1wYWN0IGFuZCBhcmUgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFVOJiMzNDssCiAgICAmIzM0O1RBUCYjMzQ7LAogICAgJiMzNDtNQUNWVEFQJiMzNDssCiAgICAmIzM0O1BBQ0tFVCYjMzQ7LAogICAgJiMzNDtWSVJUSU9fTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2tiX3NlZ21lbnQmIzM0OywKICAgICYjMzQ7dHVuX2dldF91c2VyJiMzNDssCiAgICAmIzM0O3RhcF9nZXRfdXNlciYjMzQ7LAogICAgJiMzNDtwYWNrZXRfc25kJiMzNDssCiAgICAmIzM0O3RwYWNrZXRfc25kJiMzNDssCiAgICAmIzM0O3JlY2VpdmVfYmlnJiMzNDssCiAgICAmIzM0O3JlY2VpdmVfbWVyZ2VhYmxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBsb2dpYyBmb3IgR1NPIHNlZ21lbnRhdGlvbiAoYHNrYl9zZWdtZW50YCkgYW5kIHZpcnRpbyBuZXQgaGVhZGVyIHBhcnNpbmcgKGBfX3ZpcnRpb19uZXRfaGRyX3RvX3NrYmApLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBob3cgcGFja2V0cyBhcmUgc2VnbWVudGVkIGFuZCBob3cgdmlydGlvIGhlYWRlcnMgYXJlIHZhbGlkYXRlZCwgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgVFVOL1RBUCBkZXZpY2VzLCBBRl9QQUNLRVQgc29ja2V0cywgYW5kIHZpcnRpby1uZXQuIFRoZSBjaGFuZ2VzIGhhdmUgZnVuY3Rpb25hbCBpbXBhY3QgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxOToyMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjIxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBwb3RlbnRpYWwgaXNzdWVzIHdpdGggR1NPIHNpemUgYW5kIHNlZ21lbnQgY2FsY3VsYXRpb25zLCBsaWtlbHkgcHJldmVudGluZyBpbnRlZ2VyIG92ZXJmbG93cywgZXhjZXNzaXZlIHNlZ21lbnQgY291bnRzLCBvciBkaXZpc2lvbiBieSB6ZXJvLiBJdCBlbmZvcmNlcyBhIG1pbmltdW0gYGdzb19zaXplYCBhbmQgbGltaXRzIGBwYXJ0aWFsX3NlZ3NgIHRvIGBHU09fTUFYX1NFR1NgLiBUaGVzZSBhcmUgYXJpdGhtZXRpYyBhbmQgYm91bmRzLWNoZWNraW5nIGZpeGVzLiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb2YgbmV3IGRhdGEgc3RydWN0dXJlcywgbm8gY2hhbmdlcyB0byBtZW1vcnkgaW5pdGlhbGl6YXRpb24sIGFuZCBubyByaXNrIG9mIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNpbmcgaXQgaW4gY29udHJvbCBmbG93LiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgY3Jhc2hlcyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTNiY2QwMTNhZmE1YTg0NDA2ZDJjYmMxNTZkNTYyNWJlYTBjMzhjNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDE5OjE5OjUxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaAppbmRleCBmMzZkMjFiNWJjMTllLi5jMzgxYjkxNmMxYjU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaApAQCAtNiw2ICYjNDM7Niw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvaXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pcHY2LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdWRwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC90Y3AuaCZndDsKICNpbmNsdWRlICZsdDt1YXBpL2xpbnV4L3RjcC5oJmd0OwogI2luY2x1ZGUgJmx0O3VhcGkvbGludXgvdmlydGlvX25ldC5oJmd0OwogCkBAIC0xNzksNiAmIzQzOzE4MCw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IF9fdmlydGlvX25ldF9oZHJfdG9fc2tiKHN0cnVjdCBza19idWZmICpza2IsCiAJCQlpZiAoc2tiLSZndDtpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCAmYW1wOyZhbXA7CiAJCQkgICAgc2tiLSZndDtjc3VtX29mZnNldCAhPSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjaykpCiAJCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CQkJQlVJTERfQlVHX09OKFRDUF9NSU5fR1NPX1NJWkUgKiBHU09fTUFYX1NFR1MgJmx0OyBHU09fTUFYX1NJWkUpOwomIzQzOwkJCWdzb19zaXplID0gbWF4KGdzb19zaXplLCBUQ1BfTUlOX0dTT19TSVpFKTsKIAkJCWJyZWFrOwogCQl9CiAKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmMKaW5kZXggYzgyYTE0NzJhNWVhOC4uNDM5Y2JmZWIwMmJkNiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc2tidWZmLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc2tidWZmLmMKQEAgLTQ4NjAsNyAmIzQzOzQ4NjAsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKmhlYWRfc2tiLAogCQkgKiBkb2VzbiYjMzk7dCBmaXQgaW50byBhbiBNU1Mgc2l6ZWQgYmxvY2ssIHNvIHRha2UgY2FyZSBvZiB0aGF0CiAJCSAqIG5vdy4KIAkJICovCi0JCXBhcnRpYWxfc2VncyA9IGxlbiAvIG1zczsKJiM0MzsJCXBhcnRpYWxfc2VncyA9IG1pbihsZW4gLyBtc3MsIEdTT19NQVhfU0VHUyk7CiAJCWlmIChwYXJ0aWFsX3NlZ3MgJmd0OyAxKQogCQkJbXNzICo9IHBhcnRpYWxfc2VnczsKIAkJZWxzZQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTk6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMxNAoJCQkJCQkJb3V0cHV0OiAxNTUKCQkJCQkJCXRob3VnaHRzOiA4MzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqR1NPIFNpemUgYW5kIFNlZ21lbnQgQm91bmRzIEZpeCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgdmlydGlvX25ldC5oYCBhbmQgYHNrYnVmZi5jYC4gTXkgaW5pdGlhbCByZWFkIGlzIHRoYXQgaXQmIzM5O3MgZGVhbGluZyB3aXRoIEdlbmVyYWxpemVkIFNlZ21lbnRhdGlvbiBPZmZsb2FkIChHU08pIGFuZCwgc3BlY2lmaWNhbGx5LCBob3cgdGhlIHNpemUgb2YgdGhvc2Ugc2VnbWVudHMgaXMgaGFuZGxlZC4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gaW52b2x2ZSBtYWtpbmcgc3VyZSB0aGUgR1NPIHNpemUgZG9lc24mIzM5O3QgYmVjb21lIHRvbyBzbWFsbCBhbmQgdGhlIG51bWJlciBvZiBzZWdtZW50cyBpc24mIzM5O3QgdW5ib3VuZGVkLCB0byBhdm9pZCBpbnRlZ2VyIG92ZXJmbG93cyBvciBkaXZpc2lvbiBieSB6ZXJvLgoKSW4gYF9fdmlydGlvX25ldF9oZHJfdG9fc2tiYCwgdGhlIGFkZGl0aW9uIG9mIGBnc29fc2l6ZSA9IG1heChnc29fc2l6ZSwgVENQX01JTl9HU09fU0laRSlgIGNhdWdodCBteSBleWUuICBUaGlzIGd1YXJhbnRlZXMgdGhhdCB0aGUgc2VnbWVudCBzaXplIHdpbGwgYXQgbGVhc3QgYmUgYFRDUF9NSU5fR1NPX1NJWkVgLCB3aGljaCBpcyBhIGdvb2Qgc2FuaXR5IGNoZWNrLiBUaGVuLCBpbiBgc2tiX3NlZ21lbnRgLCB0aGUgYHBhcnRpYWxfc2VncyA9IG1pbihsZW4gLyBtc3MsIEdTT19NQVhfU0VHUylgIG1vZGlmaWNhdGlvbiBpcyBzbWFydC4gQnkgbGltaXRpbmcgYHBhcnRpYWxfc2Vnc2AgdG8gYEdTT19NQVhfU0VHU2AsIHRoZSBjYWxjdWxhdGlvbiBvZiBgbXNzICogcGFydGlhbF9zZWdzYCBpcyBtYWRlIHNhZmVyLCBwcmV2ZW50aW5nIHRoYXQgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgSSBtZW50aW9uZWQgZWFybGllci4gSWYgYG1zc2AgYmVjYW1lIHRvbyBzbWFsbCwgdGhlIGRpdmlzaW9uIGNvdWxkIHByb2R1Y2UgZXhjZXNzaXZlbHkgbGFyZ2UgbnVtYmVycy4KCk15IGZpcnN0IHRob3VnaHQgd2FzLCAmIzM0O0lzIHRoaXMgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnk/JiMzNDsgR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGVzZSBjaGFuZ2Vz4oCUYWRqdXN0aW5nIGNhbGN1bGF0aW9ucywgZW5zdXJpbmcgYm91bmRzLCBhbmQgcHJvdGVjdGluZyBhZ2FpbnN0IGFyaXRobWV0aWMgaXNzdWVz4oCUaXQgKnNlZW1zKiB1bmxpa2VseS4gIEkgbWVhbiwgdGhpcyBoYXMgbW9yZSB0byBkbyB3aXRoIHBvdGVudGlhbGx5IGdvaW5nIG91dCBvZiBib3VuZHMsIGluZmluaXRlIGxvb3BzLCBhbmQgY3Jhc2hpbmcgZHVlIHRvIGluY29ycmVjdCBjYWxjdWxhdGlvbnMgb2YgR1NPLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSAqdmFsdWVzKiBoZXJlIGFuZCBob3cgdGhleeKAmXJlIHVzZWQsIG5vdCB3aGV0aGVyIHRob3NlIHZhbHVlcyBhcmUgaW5pdGlhbGl6ZWQuIEtBU0FOIHdvdWxkIGRlZmluaXRlbHkgcGljayB1cCBhbnkgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIEtNU0FOIGlzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeS4KCkxldCBtZSBkb3VibGUtY2hlY2suIFRoZSBgZ3NvX3NpemVgIGNvbWVzIGZyb20gYGhkci0mZ3Q7Z3NvX3NpemVgLCBhbmQgYGxlbmAgYW5kIGBtc3NgIGFyZSBkZXJpdmVkIGZyb20gdGhlIGBza2JgJiMzOTtzIHN0YXRlLiBObyBuZXcgYWxsb2NhdGlvbnMgb3IgY29waWVzIGludG8gdXNlciBzcGFjZSBhcmUgaW50cm9kdWNlZC4gVGhlc2UgYXJlIHB1cmVseSBib3VuZHMgY2hlY2tzIGFuZCBhcml0aG1ldGljIGFkanVzdG1lbnRzIG9uIGV4aXN0aW5nLCBpbml0aWFsaXplZCBkYXRhLiAgTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgaW52b2x2ZWQuICBUaGUgcmlzayBpcyBtb3JlIGFib3V0IG1ha2luZyBzdXJlIHRoZSBjYWxjdWxhdGlvbnMgcmVtYWluIHdpdGhpbiByZWFzb25hYmxlIGxpbWl0cyBhbmQgYXZvaWRpbmcgbmFzdHkgc2lkZSBlZmZlY3RzIGZyb20gb3ZlcmZsb3dpbmcgdmFyaWFibGVzIHVzZWQgaW4gY2FsY3VsYXRpb25zLiBNeSBjb25jbHVzaW9uOiBOZWVkc0tNU0FOID0gZmFsc2UuIFRoZSBmaXggaXMgYWJvdXQgc2FmZSBhcml0aG1ldGljLCBzZWdtZW50IGxpbWl0cywgYW5kIHByZXZlbnRpbmcgb3ZlcmZsb3dzLCBub3QgZGVhbGluZyB3aXRoIG1lbW9yeSBpbml0aWFsaXphdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTk6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBHU08gc2l6ZSBhbmQgc2VnbWVudCBjYWxjdWxhdGlvbnMsIGxpa2VseSBwcmV2ZW50aW5nIGludGVnZXIgb3ZlcmZsb3dzLCBleGNlc3NpdmUgc2VnbWVudCBjb3VudHMsIG9yIGRpdmlzaW9uIGJ5IHplcm8uIEl0IGVuZm9yY2VzIGEgbWluaW11bSBgZ3NvX3NpemVgIGFuZCBsaW1pdHMgYHBhcnRpYWxfc2Vnc2AgdG8gYEdTT19NQVhfU0VHU2AuIFRoZXNlIGFyZSBhcml0aG1ldGljIGFuZCBib3VuZHMtY2hlY2tpbmcgZml4ZXMuIFRoZXJlIGlzIG5vIGludHJvZHVjdGlvbiBvZiBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBubyBjaGFuZ2VzIHRvIG1lbW9yeSBpbml0aWFsaXphdGlvbiwgYW5kIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2luZyBpdCBpbiBjb250cm9sIGZsb3cuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBtZW1vcnkgY29ycnVwdGlvbiBvciBjcmFzaGVzIHJlbGF0ZWQgdG8gdGhlc2UgY2hhbmdlcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBHU08gc2l6ZSBhbmQgc2VnbWVudCBjYWxjdWxhdGlvbnMsIGxpa2VseSBwcmV2ZW50aW5nIGludGVnZXIgb3ZlcmZsb3dzLCBleGNlc3NpdmUgc2VnbWVudCBjb3VudHMsIG9yIGRpdmlzaW9uIGJ5IHplcm8uIEl0IGVuZm9yY2VzIGEgbWluaW11bSBgZ3NvX3NpemVgIGFuZCBsaW1pdHMgYHBhcnRpYWxfc2Vnc2AgdG8gYEdTT19NQVhfU0VHU2AuIFRoZXNlIGFyZSBhcml0aG1ldGljIGFuZCBib3VuZHMtY2hlY2tpbmcgZml4ZXMuIFRoZXJlIGlzIG5vIGludHJvZHVjdGlvbiBvZiBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBubyBjaGFuZ2VzIHRvIG1lbW9yeSBpbml0aWFsaXphdGlvbiwgYW5kIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2luZyBpdCBpbiBjb250cm9sIGZsb3cuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBtZW1vcnkgY29ycnVwdGlvbiBvciBjcmFzaGVzIHJlbGF0ZWQgdG8gdGhlc2UgY2hhbmdlcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxOToxOTo1Mi44NDkzNzE0OTdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjgwNTkzMjQxNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFVOXCIsXG4gICAgXCJUQVBcIixcbiAgICBcIk1BQ1ZUQVBcIixcbiAgICBcIlBBQ0tFVFwiLFxuICAgIFwiVklSVElPX05FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNrYl9zZWdtZW50XCIsXG4gICAgXCJ0dW5fZ2V0X3VzZXJcIixcbiAgICBcInRhcF9nZXRfdXNlclwiLFxuICAgIFwicGFja2V0X3NuZFwiLFxuICAgIFwidHBhY2tldF9zbmRcIixcbiAgICBcInJlY2VpdmVfYmlnXCIsXG4gICAgXCJyZWNlaXZlX21lcmdlYWJsZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBHU08gc2l6ZSBhbmQgc2VnbWVudCBjYWxjdWxhdGlvbnMsIGxpa2VseSBwcmV2ZW50aW5nIGludGVnZXIgb3ZlcmZsb3dzLCBleGNlc3NpdmUgc2VnbWVudCBjb3VudHMsIG9yIGRpdmlzaW9uIGJ5IHplcm8uIEl0IGVuZm9yY2VzIGEgbWluaW11bSBgZ3NvX3NpemVgIGFuZCBsaW1pdHMgYHBhcnRpYWxfc2Vnc2AgdG8gYEdTT19NQVhfU0VHU2AuIFRoZXNlIGFyZSBhcml0aG1ldGljIGFuZCBib3VuZHMtY2hlY2tpbmcgZml4ZXMuIFRoZXJlIGlzIG5vIGludHJvZHVjdGlvbiBvZiBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBubyBjaGFuZ2VzIHRvIG1lbW9yeSBpbml0aWFsaXphdGlvbiwgYW5kIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2luZyBpdCBpbiBjb250cm9sIGZsb3cuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBtZW1vcnkgY29ycnVwdGlvbiBvciBjcmFzaGVzIHJlbGF0ZWQgdG8gdGhlc2UgY2hhbmdlcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBsb2dpYyBmb3IgR1NPIHNlZ21lbnRhdGlvbiAoYHNrYl9zZWdtZW50YCkgYW5kIHZpcnRpbyBuZXQgaGVhZGVyIHBhcnNpbmcgKGBfX3ZpcnRpb19uZXRfaGRyX3RvX3NrYmApLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBob3cgcGFja2V0cyBhcmUgc2VnbWVudGVkIGFuZCBob3cgdmlydGlvIGhlYWRlcnMgYXJlIHZhbGlkYXRlZCwgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgVFVOL1RBUCBkZXZpY2VzLCBBRl9QQUNLRVQgc29ja2V0cywgYW5kIHZpcnRpby1uZXQuIFRoZSBjaGFuZ2VzIGhhdmUgZnVuY3Rpb25hbCBpbXBhY3QgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxOToxOTo1Mi44NDkzNzk4MDdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNDg5NTk1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGEzYmNkMDEzYWZhNWE4NDQwNmQyY2JjMTU2ZDU2MjViZWEwYzM4YzRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMTMgMTk6MTk6NTEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaFxcbmluZGV4IGYzNmQyMWI1YmMxOWUuLmMzODFiOTE2YzFiNTQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaFxcbkBAIC02LDYgKzYsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lwdjYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VkcC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L3RjcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC90Y3AuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3VhcGkvbGludXgvdmlydGlvX25ldC5oXFx1MDAzZVxcbiBcXG5AQCAtMTc5LDYgKzE4MCw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IF9fdmlydGlvX25ldF9oZHJfdG9fc2tiKHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdGlmIChza2ItXFx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdCAgICBza2ItXFx1MDAzZWNzdW1fb2Zmc2V0ICE9IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKSlcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRcXHRcXHRCVUlMRF9CVUdfT04oVENQX01JTl9HU09fU0laRSAqIEdTT19NQVhfU0VHUyBcXHUwMDNjIEdTT19NQVhfU0laRSk7XFxuK1xcdFxcdFxcdGdzb19zaXplID0gbWF4KGdzb19zaXplLCBUQ1BfTUlOX0dTT19TSVpFKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmNcXG5pbmRleCBjODJhMTQ3MmE1ZWE4Li40MzljYmZlYjAyYmQ2IDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL3NrYnVmZi5jXFxuKysrIGIvbmV0L2NvcmUvc2tidWZmLmNcXG5AQCAtNDg2MCw3ICs0ODYwLDcgQEAgc3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50KHN0cnVjdCBza19idWZmICpoZWFkX3NrYixcXG4gXFx0XFx0ICogZG9lc24ndCBmaXQgaW50byBhbiBNU1Mgc2l6ZWQgYmxvY2ssIHNvIHRha2UgY2FyZSBvZiB0aGF0XFxuIFxcdFxcdCAqIG5vdy5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdHBhcnRpYWxfc2VncyA9IGxlbiAvIG1zcztcXG4rXFx0XFx0cGFydGlhbF9zZWdzID0gbWluKGxlbiAvIG1zcywgR1NPX01BWF9TRUdTKTtcXG4gXFx0XFx0aWYgKHBhcnRpYWxfc2VncyBcXHUwMDNlIDEpXFxuIFxcdFxcdFxcdG1zcyAqPSBwYXJ0aWFsX3NlZ3M7XFxuIFxcdFxcdGVsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTk6MTk6NTMuMzc0OTg3NDEyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTE1Mzg3OTc5ODA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRVTlwiLFxuICAgIFwiVEFQXCIsXG4gICAgXCJNQUNWVEFQXCIsXG4gICAgXCJQQUNLRVRcIixcbiAgICBcIlZJUlRJT19ORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJza2Jfc2VnbWVudFwiLFxuICAgIFwidHVuX2dldF91c2VyXCIsXG4gICAgXCJ0YXBfZ2V0X3VzZXJcIixcbiAgICBcInBhY2tldF9zbmRcIixcbiAgICBcInRwYWNrZXRfc25kXCIsXG4gICAgXCJyZWNlaXZlX2JpZ1wiLFxuICAgIFwicmVjZWl2ZV9tZXJnZWFibGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgbG9naWMgZm9yIEdTTyBzZWdtZW50YXRpb24gKGBza2Jfc2VnbWVudGApIGFuZCB2aXJ0aW8gbmV0IGhlYWRlciBwYXJzaW5nIChgX192aXJ0aW9fbmV0X2hkcl90b19za2JgKS4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaG93IHBhY2tldHMgYXJlIHNlZ21lbnRlZCBhbmQgaG93IHZpcnRpbyBoZWFkZXJzIGFyZSB2YWxpZGF0ZWQsIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIFRVTi9UQVAgZGV2aWNlcywgQUZfUEFDS0VUIHNvY2tldHMsIGFuZCB2aXJ0aW8tbmV0LiBUaGUgY2hhbmdlcyBoYXZlIGZ1bmN0aW9uYWwgaW1wYWN0IGFuZCBhcmUgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTNiY2QwMTNhZmE1YTg0NDA2ZDJjYmMxNTZkNTYyNWJlYTBjMzhjNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDE5OjE5OjUxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaFxuaW5kZXggZjM2ZDIxYjViYzE5ZS4uYzM4MWI5MTZjMWI1NCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvX25ldC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaFxuQEAgLTYsNiArNiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwdjYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VkcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L3RjcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC90Y3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvdmlydGlvX25ldC5oXHUwMDNlXG4gXG5AQCAtMTc5LDYgKzE4MCw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IF9fdmlydGlvX25ldF9oZHJfdG9fc2tiKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0aWYgKHNrYi1cdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICAgc2tiLVx1MDAzZWNzdW1fb2Zmc2V0ICE9IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKSlcbiBcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0XHRcdEJVSUxEX0JVR19PTihUQ1BfTUlOX0dTT19TSVpFICogR1NPX01BWF9TRUdTIFx1MDAzYyBHU09fTUFYX1NJWkUpO1xuK1x0XHRcdGdzb19zaXplID0gbWF4KGdzb19zaXplLCBUQ1BfTUlOX0dTT19TSVpFKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmNcbmluZGV4IGM4MmExNDcyYTVlYTguLjQzOWNiZmViMDJiZDYgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9za2J1ZmYuY1xuKysrIGIvbmV0L2NvcmUvc2tidWZmLmNcbkBAIC00ODYwLDcgKzQ4NjAsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKmhlYWRfc2tiLFxuIFx0XHQgKiBkb2Vzbid0IGZpdCBpbnRvIGFuIE1TUyBzaXplZCBibG9jaywgc28gdGFrZSBjYXJlIG9mIHRoYXRcbiBcdFx0ICogbm93LlxuIFx0XHQgKi9cbi1cdFx0cGFydGlhbF9zZWdzID0gbGVuIC8gbXNzO1xuK1x0XHRwYXJ0aWFsX3NlZ3MgPSBtaW4obGVuIC8gbXNzLCBHU09fTUFYX1NFR1MpO1xuIFx0XHRpZiAocGFydGlhbF9zZWdzIFx1MDAzZSAxKVxuIFx0XHRcdG1zcyAqPSBwYXJ0aWFsX3NlZ3M7XG4gXHRcdGVsc2VcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE5OjE5OjUzLjM3NDk5NzUwMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwNjk5MzIxMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTmV0d29ya2luZyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0b3VjaGVzIHNvbWUgcHJldHR5IGZ1bmRhbWVudGFsIG5ldHdvcmtpbmcgY29kZS4gSXQncyB0b3VjaGluZyBgaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmhgIGFuZCBgbmV0L2NvcmUvc2tidWZmLmNgLCB3aGljaCBpbW1lZGlhdGVseSByYWlzZXMgbXkgZXllYnJvd3Mg4oCTIHRoYXQncyBjb3JlIHN0dWZmLiBTcGVjaWZpY2FsbHksIGl0IGFwcGVhcnMgdG8gYmUgbW9kaWZ5aW5nIGhvdyBUQ1Agc2VnbWVudGF0aW9uIG9mZmxvYWQgKFRTTykgaXMgaGFuZGxlZCwgZ2l2ZW4gdGhlIGNvbnRleHQgaW4gYF9fdmlydGlvX25ldF9oZHJfdG9fc2tiYCB3aXRoaW4gYHZpcnRpb19uZXQuaGAsIGFuZCBgc2tiX3NlZ21lbnRgIGluIGBuZXQvY29yZS9za2J1ZmYuY2AuXG5cbkkgY2FuIHNlZSBzb21lIHNpZ25pZmljYW50IGNoYW5nZXMgaGVyZS4gSW4gYGluY2x1ZGUvbGludXgvdmlydGlvX25ldC5oYCwgaXQgaW50cm9kdWNlcyBhIGBCVUlMRF9CVUdfT05gIGNoZWNrIGFuZCBtb2RpZmllcyB0aGUgYGdzb19zaXplYCBjYWxjdWxhdGlvbiwgc3BlY2lmaWNhbGx5IHVzaW5nIGBUQ1BfTUlOX0dTT19TSVpFYC4gVGhpcyBzdWdnZXN0cyB0aGV5J3JlIHRyeWluZyB0byBlbmZvcmNlIGEgbWluaW11bSBHU08gc2l6ZSwgbGlrZWx5IHRvIGFsaWduIHdpdGggc29tZSBoYXJkd2FyZSBjb25zdHJhaW50IG9yIG9wdGltaXphdGlvbi4gVGhlIGBtaW5gIGZ1bmN0aW9uIGluIGBuZXQvY29yZS9za2J1ZmYuY2AsIHN1Z2dlc3RzIHRoZXJlIGlzIGFuIHVwcGVyIGJvdW5kIG9uIGBsZW4gLyBtc3NgLCB3aGljaCBwcmV2ZW50cyBsYXJnZSBzZWdtZW50cyBmcm9tIGJlaW5nIGNyZWF0ZWQuIFRoaXMgbG9va3MgcmVsYXRlZCB0byBob3cgcGFja2V0cyBhcmUgZnJhZ21lbnRlZCBhbmQgcmVhc3NlbWJsZWQsIHdoaWNoIGlzIHdoZXJlIFRTTyBvZnRlbiBjb21lcyBpbnRvIHBsYXkuXG5cbkdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIGZ1bmN0aW9uYWwgY2hhbmdlcywgdGhpcyBwYXRjaCB3YXJyYW50cyB0aG9yb3VnaCBmdXp6aW5nLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gaWRlbnRpZnlpbmcgdGhlIGtleSBlbnRyeSBwb2ludHMuIGBza2Jfc2VnbWVudGAgaXMgYSBub24tc3RhdGljLCBleHBvcnRlZCBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgaXQncyBhIGRpcmVjdCBBUEkgZW50cnlwb2ludC4gVGhhdCdzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBgX192aXJ0aW9fbmV0X2hkcl90b19za2JgLCBvbiB0aGUgb3RoZXIgaGFuZCwgaXMgc3RhdGljIGFuZCBpbmxpbmUsIG1lYW5pbmcgaXQncyBpbmxpbmVkLiBUaGVyZWZvcmUsIEkgbmVlZCB0byB0cmFjZSBpdHMgdXNlcyB0byBmaW5kIHRoZSBhY3R1YWwgY2FsbCBzaXRlcyB0aGF0IEknbGwgbmVlZCB0byBmdXp6LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzE3LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDk2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTk6MjA6MDEuNDQ0OTMzNDA4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMjgwNDMzMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX192aXJ0aW9fbmV0X2hkcl90b19za2JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0Lmg9Mjk9c3RhdGljIGlubGluZSBpbnQgdmlydGlvX25ldF9oZHJfc2V0X3Byb3RvKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaC01MC1cXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaDo1MTpzdGF0aWMgaW5saW5lIGludCBfX3ZpcnRpb19uZXRfaGRyX3RvX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmluY2x1ZGUvbGludXgvdmlydGlvX25ldC5oLTUyLVxcdFxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IHZpcnRpb19uZXRfaGRyICpoZHIsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaD0yMDc9c3RhdGljIGlubGluZSBpbnQgdmlydGlvX25ldF9oZHJfdG9fc2tiKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaC0yMTAte1xcbmluY2x1ZGUvbGludXgvdmlydGlvX25ldC5oOjIxMTpcXHRyZXR1cm4gX192aXJ0aW9fbmV0X2hkcl90b19za2Ioc2tiLCBoZHIsIGxpdHRsZV9lbmRpYW4sIGhkci1cXHUwMDNlZ3NvX3R5cGUpO1xcbmluY2x1ZGUvbGludXgvdmlydGlvX25ldC5oLTIxMi19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaD0yOTY9dmlydGlvX25ldF9oZHJfdG5sX3RvX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmgtMzQ1LVxcdC8qIExldCB0aGUgYmFzaWMgcGFyc2luZyBkZWFsIHdpdGggcGxhaW4gR1NPIGZlYXR1cmVzLiAqL1xcbmluY2x1ZGUvbGludXgvdmlydGlvX25ldC5oOjM0NjpcXHRyZXQgPSBfX3ZpcnRpb19uZXRfaGRyX3RvX3NrYihza2IsIGhkciwgdHJ1ZSxcXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaC0zNDctXFx0XFx0XFx0XFx0ICAgICAgaGRyLVxcdTAwM2Vnc29fdHlwZSBcXHUwMDI2IH5nc29fdHVubmVsX3R5cGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxOToyMDowMy43NzI5ODQ1MjdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTg4Njc3OTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0IHByb2Nlc3NlczpcblxuKipBbmFseXppbmcgdmlydGlvX25ldCBIZWFkZXIgQ29udmVyc2lvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBgdmlydGlvX25ldF9oZHJfdG9fc2tiYCBhbmQgYHZpcnRpb19uZXRfaGRyX3RubF90b19za2JgIGZ1bmN0aW9ucywgYW5kIHRoZSBmYWN0IHRoYXQgdGhleSdyZSBib3RoIGRlY2xhcmVkIGFzIGBzdGF0aWMgaW5saW5lYCBpcyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZy4gVGhpcyBtZWFucyB0aGV5J3JlIGxpa2VseSBwZXJmb3JtYW5jZS1jcml0aWNhbCBhbmQgb3B0aW1pemVkIGZvciBpbmxpbmluZy4gTm93LCBteSBuZXh0IG1vdmUgaXMgY2xlYXI6IEkgbmVlZCB0byB0cmFjZSB0aGVpciB1c2FnZS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSAqd2hlcmUqIHRoZXkncmUgYmVpbmcgY2FsbGVkIHdpdGhpbiB0aGUgYnJvYWRlciB2aXJ0aW8tbmV0IGltcGxlbWVudGF0aW9uLiBGaW5kaW5nIHRoZWlyIGNhbGwgc2l0ZXMgd2lsbCBnaXZlIG1lIGNydWNpYWwgY29udGV4dC4gVGhpcyBzaG91bGQgdGVsbCBtZSB3aGF0IGRhdGEgaXMgYmVpbmcgdHJhbnNsYXRlZCwgd2hlbiBhbmQgYnkgd2hhdCBwYXJ0cyBvZiB0aGUgbmV0d29ya2luZyBzdGFjay4gVW5kZXJzdGFuZGluZyB0aGlzIGlzIGtleSB0byBmb3JtaW5nIGEgZnVsbGVyIHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2MjUsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxOToyMDowNy4zNjE2NjQ1NTlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ3NDY2MTI3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aXJ0aW9fbmV0X2hkcl90b19za2JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC91bS9kcml2ZXJzL3ZlY3Rvcl90cmFuc3BvcnRzLmM9MTk2PXN0YXRpYyBpbnQgcmF3X3ZlcmlmeV9oZWFkZXIoXFxuLS1cXG5hcmNoL3VtL2RyaXZlcnMvdmVjdG9yX3RyYW5zcG9ydHMuYy0yMTEtXFxuYXJjaC91bS9kcml2ZXJzL3ZlY3Rvcl90cmFuc3BvcnRzLmM6MjEyOlxcdHZpcnRpb19uZXRfaGRyX3RvX3NrYihza2IsIHZoZWFkZXIsIHZpcnRpb19sZWdhY3lfaXNfbGl0dGxlX2VuZGlhbigpKTtcXG5hcmNoL3VtL2RyaXZlcnMvdmVjdG9yX3RyYW5zcG9ydHMuYy0yMTMtXFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL25ldC90dW5fdm5ldC5oPTE4MD1zdGF0aWMgaW5saW5lIGludCB0dW5fdm5ldF9oZHJfdG9fc2tiKHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bl92bmV0LmgtMTgyLXtcXG5kcml2ZXJzL25ldC90dW5fdm5ldC5oOjE4MzpcXHRyZXR1cm4gdmlydGlvX25ldF9oZHJfdG9fc2tiKHNrYiwgaGRyLCB0dW5fdm5ldF9pc19saXR0bGVfZW5kaWFuKGZsYWdzKSk7XFxuZHJpdmVycy9uZXQvdHVuX3ZuZXQuaC0xODQtfVxcbi0tXFxuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jPTgzNj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnBhZ2VfdG9fc2tiKHN0cnVjdCB2aXJ0bmV0X2luZm8gKnZpLFxcbi0tXFxuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jLTg4OC1cXHQvKiBDb3B5IGFsbCBmcmFtZSBpZiBpdCBmaXRzIHNrYi1cXHUwMDNlaGVhZCwgb3RoZXJ3aXNlXFxuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jOjg4OTpcXHQgKiB3ZSBsZXQgdmlydGlvX25ldF9oZHJfdG9fc2tiKCkgYW5kIEdSTyBwdWxsIGhlYWRlcnMgYXMgbmVlZGVkLlxcbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYy04OTAtXFx0ICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaD0yOT1zdGF0aWMgaW5saW5lIGludCB2aXJ0aW9fbmV0X2hkcl9zZXRfcHJvdG8oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmluY2x1ZGUvbGludXgvdmlydGlvX25ldC5oLTUwLVxcbmluY2x1ZGUvbGludXgvdmlydGlvX25ldC5oOjUxOnN0YXRpYyBpbmxpbmUgaW50IF9fdmlydGlvX25ldF9oZHJfdG9fc2tiKHN0cnVjdCBza19idWZmICpza2IsXFxuaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmgtNTItXFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgdmlydGlvX25ldF9oZHIgKmhkcixcXG4tLVxcbmluY2x1ZGUvbGludXgvdmlydGlvX25ldC5oLTIwNi1cXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaDoyMDc6c3RhdGljIGlubGluZSBpbnQgdmlydGlvX25ldF9oZHJfdG9fc2tiKHN0cnVjdCBza19idWZmICpza2IsXFxuaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmgtMjA4LVxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCB2aXJ0aW9fbmV0X2hkciAqaGRyLFxcbi0tXFxuaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmgtMjEwLXtcXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaDoyMTE6XFx0cmV0dXJuIF9fdmlydGlvX25ldF9oZHJfdG9fc2tiKHNrYiwgaGRyLCBsaXR0bGVfZW5kaWFuLCBoZHItXFx1MDAzZWdzb190eXBlKTtcXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaC0yMTItfVxcbi0tXFxuaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0Lmg9Mjk2PXZpcnRpb19uZXRfaGRyX3RubF90b19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmluY2x1ZGUvbGludXgvdmlydGlvX25ldC5oLTMxMC1cXHRpZiAoIWdzb190dW5uZWxfdHlwZSlcXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaDozMTE6XFx0XFx0cmV0dXJuIHZpcnRpb19uZXRfaGRyX3RvX3NrYihza2IsIGhkciwgbGl0dGxlX2VuZGlhbik7XFxuaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmgtMzEyLVxcbi0tXFxuaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmgtMzQ1LVxcdC8qIExldCB0aGUgYmFzaWMgcGFyc2luZyBkZWFsIHdpdGggcGxhaW4gR1NPIGZlYXR1cmVzLiAqL1xcbmluY2x1ZGUvbGludXgvdmlydGlvX25ldC5oOjM0NjpcXHRyZXQgPSBfX3ZpcnRpb19uZXRfaGRyX3RvX3NrYihza2IsIGhkciwgdHJ1ZSxcXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaC0zNDctXFx0XFx0XFx0XFx0ICAgICAgaGRyLVxcdTAwM2Vnc29fdHlwZSBcXHUwMDI2IH5nc29fdHVubmVsX3R5cGUpO1xcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yNzM2PXN0YXRpYyBpbnQgdHBhY2tldF9zbmQoc3RydWN0IHBhY2tldF9zb2NrICpwbywgc3RydWN0IG1zZ2hkciAqbXNnKVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yODk0LVxcdFxcdGlmIChoYXNfdm5ldF9oZHIpIHtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI4OTU6XFx0XFx0XFx0aWYgKHZpcnRpb19uZXRfaGRyX3RvX3NrYihza2IsIFxcdTAwMjZ2bmV0X2hkciwgdmlvX2xlKCkpKSB7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yODk2LVxcdFxcdFxcdFxcdHRwX2xlbiA9IC1FSU5WQUw7XFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTI5NjY9c3RhdGljIGludCBwYWNrZXRfc25kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzA5Ni1cXHRpZiAodm5ldF9oZHJfc3opIHtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjMwOTc6XFx0XFx0ZXJyID0gdmlydGlvX25ldF9oZHJfdG9fc2tiKHNrYiwgXFx1MDAyNnZuZXRfaGRyLCB2aW9fbGUoKSk7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMDk4LVxcdFxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE5OjIwOjA5LjgzNjMzNTk2NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NjcyNDY2NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5ldHdvcmsgSGVhZGVyIENvbnZlcnNpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHBhY2tldCBoZWFkZXJzIGFyZSBoYW5kbGVkIGFjcm9zcyBhIGZldyBkaWZmZXJlbnQgZHJpdmVycy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNhdGVnb3JpemUgYSBmZXcga2V5IGZ1bmN0aW9ucy4gYHR1bl92bmV0X2hkcl90b19za2JgIGlzIHVzZWQgc3BlY2lmaWNhbGx5IGluIHRoZSBgdHVuYCwgYG1hY3Z0YXBgLCBhbmQgYHRhcGAgZHJpdmVycyDigJMgYWxsIG9mIHdoaWNoIGFyZSBpbnZvbHZlZCBpbiB0dW5uZWxpbmcgb3IgYnJpZGdpbmcgbmV0d29yayB0cmFmZmljLiBUaGF0J3MgZ29vZCB0byBrbm93LCBmb2N1c2VzIG1lLlxuXG5UaGVuLCBJJ3ZlIGdvdCBgdmlydGlvX25ldF9oZHJfdG9fc2tiYCwgYW5kIEkgc2VlIHRoYXQgZnVuY3Rpb24gYXBwZWFyaW5nIGluIHRoZSBjb250ZXh0IG9mIGBhZl9wYWNrZXQuY2Ag4oCTIHNwZWNpZmljYWxseSB3aXRoaW4gYHRwYWNrZXRfc25kYCBhbmQgYHBhY2tldF9zbmRgLiBUaGlzIGZlZWxzIHZlcnkgc3BlY2lmaWMgdG8gdGhlIHBhY2tldCBzb2NrZXQgaW5mcmFzdHJ1Y3R1cmUsIHNvIGl0IHN1Z2dlc3RzIGEgZGlmZmVyZW50IHR5cGUgb2YgaGVhZGVyIGNvbnZlcnNpb24gcmVsYXRlZCB0byBwYWNrZXQgc29ja2V0IHNlbmQgb3BlcmF0aW9ucy5cblxuQW5kIGZpbmFsbHksIGBza2Jfc2VnbWVudGAsIHdoaWNoIEknbSBhbHJlYWR5IHF1aXRlIGZhbWlsaWFyIHdpdGguIEl0IGlzIGNvcmUgbmV0d29ya2luZyBhbmQgdXNlZCBhY3Jvc3MgbWFueSBhcmVhcywgc28gdGhhdCBmZWVscyBleHBlY3RlZC5cblxuRm9yIHRoaXMgYW5hbHlzaXMsIEknbGwgbm93IGZvY3VzIGluIG9uIGB0dW5fdm5ldF9oZHJfdG9fc2tiYCBhbmQgbG9vayBhdCBpdCBtb3JlIGNsb3NlbHksIGdpdmVuIG15IHByaW9yIHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwNDMsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTk6MjA6MTQuNzAzNTg2MzY3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3Mzc0MTA0MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHVuX3ZuZXRfaGRyX3RvX3NrYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC90YXAuYz01NzI9c3RhdGljIHNzaXplX3QgdGFwX2dldF91c2VyKHN0cnVjdCB0YXBfcXVldWUgKnEsIHZvaWQgKm1zZ19jb250cm9sLFxcbi0tXFxuZHJpdmVycy9uZXQvdGFwLmMtNjUwLVxcdGlmICh2bmV0X2hkcl9sZW4pIHtcXG5kcml2ZXJzL25ldC90YXAuYzo2NTE6XFx0XFx0ZXJyID0gdHVuX3ZuZXRfaGRyX3RvX3NrYihxLVxcdTAwM2VmbGFncywgc2tiLCBcXHUwMDI2dm5ldF9oZHIpO1xcbmRyaXZlcnMvbmV0L3RhcC5jLTY1Mi1cXHRcXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL25ldC90YXAuYz0xMDQ0PXN0YXRpYyBpbnQgdGFwX2dldF91c2VyX3hkcChzdHJ1Y3QgdGFwX3F1ZXVlICpxLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcXG4tLVxcbmRyaXZlcnMvbmV0L3RhcC5jLTEwODUtXFx0aWYgKHZuZXRfaGRyX2xlbikge1xcbmRyaXZlcnMvbmV0L3RhcC5jOjEwODY6XFx0XFx0ZXJyID0gdHVuX3ZuZXRfaGRyX3RvX3NrYihxLVxcdTAwM2VmbGFncywgc2tiLCBnc28pO1xcbmRyaXZlcnMvbmV0L3RhcC5jLTEwODctXFx0XFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuX3ZuZXQuaD0xNzQ9c3RhdGljIGlubGluZSBpbnQgdHVuX3ZuZXRfaGRyX3B1dChpbnQgc3osIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bl92bmV0LmgtMTc5LVxcbmRyaXZlcnMvbmV0L3R1bl92bmV0Lmg6MTgwOnN0YXRpYyBpbmxpbmUgaW50IHR1bl92bmV0X2hkcl90b19za2IodW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmRyaXZlcnMvbmV0L3R1bl92bmV0LmgtMTgxLVxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCB2aXJ0aW9fbmV0X2hkciAqaGRyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxOToyMDoxNy40NDEwMDM4MDVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTA2OTIyMjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuIEkgbmVlZCB0byB0cmFjayBkb3duIGB0dW5fdm5ldF9oZHJfdG9fc2tiYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgYHR1bi5jYCwgdGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCBpdC4gQnV0IHdhaXQgYSBtaW51dGUuLi4gaXQncyBub3QgdGhlcmUhIEFoLCByaWdodCwgdGhhdCdzIGl0LCBgdHVuX3ZuZXQuaGAgaXMgaW5jbHVkZWQgaW4gYHR1bi5jYC4gSSBuZWVkIHRvIGxvb2sgaW4gdGhhdCBoZWFkZXIgZmlsZSwgdGhhdCdzIHdoZXJlIHRoZSBkZWZpbml0aW9uIGlzIG1vc3QgbGlrZWx5LiBHb29kLCB0aGF0IHNhdmVzIG1lIHNvbWUgdGltZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTgyMywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE5OjIwOjIwLjU0NzkzMDM2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg2NzMyMTYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInR1bl92bmV0X2hkcl90b19za2JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdHVuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE5OjIwOjIwLjY2NjYxNDAyN1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjQ3ODYwMzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIEtlcm5lbCBDb2RlOiBBIFF1aWNrIENoZWNrKipcblxuUmlnaHQsIHNvIEkgc2VlIGEgbWVudGlvbiBvZiBgdHVuLmNgIGFuZCBgdHVuX3ZuZXRfaGRyX3RvX3NrYmAuIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJXYWl0LCBpcyB0aGF0IHdoZXJlIHRoZSBgdm5ldF9oZHJgIGludGVyYWN0aW9uIGhhcHBlbnM/XCIgQnV0IEknbSBub3QgZ29pbmcgdG8ganVtcCB0byBjb25jbHVzaW9ucy4gQmV0dGVyIHRvIHF1aWNrbHkgdmVyaWZ5IGJ5IGdvaW5nIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UuIExldCdzIGdldCB0aGUgY29udGV4dCByaWdodDogYSBkaXZlIGludG8gYHR1bi5jYCBpcyB3YXJyYW50ZWQgdG8gY29uZmlybSB3aGV0aGVyIGB2bmV0X2hkcmAgaXMgdXNlZCBpbiB0aGF0IHBhcnRpY3VsYXIgZnVuY3Rpb24uIEEgcXVpY2sgc2NhbiB3aWxsIHRlbGwgdGhlIHRhbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwNDEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxOToyMDoyNy4zMTQ0Nzc4NDZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2NzE1MDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZuZXRfaGRyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jPTE4Mj1zdHJ1Y3QgdHVuX3N0cnVjdCB7XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0xOTUtXFx0aW50XFx0XFx0XFx0YWxpZ247XFxuZHJpdmVycy9uZXQvdHVuLmM6MTk2OlxcdGludFxcdFxcdFxcdHZuZXRfaGRyX3N6O1xcbmRyaXZlcnMvbmV0L3R1bi5jLTE5Ny1cXHRpbnRcXHRcXHRcXHRzbmRidWY7XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0xNzc0PXN0YXRpYyBzc2l6ZV90IHR1bl9nZXRfdXNlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMTgxMi1cXHRpZiAodHVuLVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9WTkVUX0hEUikge1xcbmRyaXZlcnMvbmV0L3R1bi5jOjE4MTM6XFx0XFx0aW50IHZuZXRfaGRyX3N6ID0gUkVBRF9PTkNFKHR1bi1cXHUwMDNldm5ldF9oZHJfc3opO1xcbmRyaXZlcnMvbmV0L3R1bi5jLTE4MTQtXFxuZHJpdmVycy9uZXQvdHVuLmM6MTgxNTpcXHRcXHRmZWF0dXJlcyA9IHR1bl92bmV0X2hkcl9ndWVzdF9mZWF0dXJlcyh2bmV0X2hkcl9zeik7XFxuZHJpdmVycy9uZXQvdHVuLmM6MTgxNjpcXHRcXHRoZHJfbGVuID0gX190dW5fdm5ldF9oZHJfZ2V0KHZuZXRfaGRyX3N6LCB0dW4tXFx1MDAzZWZsYWdzLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTE4MTctXFx0XFx0XFx0XFx0XFx0ICAgICBmZWF0dXJlcywgZnJvbSwgZ3NvKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTE4MjAtXFxuZHJpdmVycy9uZXQvdHVuLmM6MTgyMTpcXHRcXHRsZW4gLT0gdm5ldF9oZHJfc3o7XFxuZHJpdmVycy9uZXQvdHVuLmMtMTgyMi1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0xODk0LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjE4OTU6XFx0aWYgKHR1bl92bmV0X2hkcl90bmxfdG9fc2tiKHR1bi1cXHUwMDNlZmxhZ3MsIGZlYXR1cmVzLCBza2IsIFxcdTAwMjZoZHIpKSB7XFxuZHJpdmVycy9uZXQvdHVuLmMtMTg5Ni1cXHRcXHRhdG9taWNfbG9uZ19pbmMoXFx1MDAyNnR1bi1cXHUwMDNlcnhfZnJhbWVfZXJyb3JzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTIwODY9c3RhdGljIHNzaXplX3QgdHVuX3B1dF91c2VyX3hkcChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjA5MC17XFxuZHJpdmVycy9uZXQvdHVuLmM6MjA5MTpcXHRpbnQgdm5ldF9oZHJfc3ogPSAwO1xcbmRyaXZlcnMvbmV0L3R1bi5jLTIwOTItXFx0c2l6ZV90IHNpemUgPSB4ZHBfZnJhbWUtXFx1MDAzZWxlbjtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTIwOTctXFxuZHJpdmVycy9uZXQvdHVuLmM6MjA5ODpcXHRcXHR2bmV0X2hkcl9zeiA9IFJFQURfT05DRSh0dW4tXFx1MDAzZXZuZXRfaGRyX3N6KTtcXG5kcml2ZXJzL25ldC90dW4uYzoyMDk5OlxcdFxcdHJldCA9IHR1bl92bmV0X2hkcl9wdXQodm5ldF9oZHJfc3osIGl0ZXIsIFxcdTAwMjZnc28pO1xcbmRyaXZlcnMvbmV0L3R1bi5jLTIxMDAtXFx0XFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTIxMDMtXFxuZHJpdmVycy9uZXQvdHVuLmM6MjEwNDpcXHRyZXQgPSBjb3B5X3RvX2l0ZXIoeGRwX2ZyYW1lLVxcdTAwM2VkYXRhLCBzaXplLCBpdGVyKSArIHZuZXRfaGRyX3N6O1xcbmRyaXZlcnMvbmV0L3R1bi5jLTIxMDUtXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0yMTE0PXN0YXRpYyBzc2l6ZV90IHR1bl9wdXRfdXNlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjEyMi1cXHRpbnQgdmxhbl9obGVuID0gMDtcXG5kcml2ZXJzL25ldC90dW4uYzoyMTIzOlxcdGludCB2bmV0X2hkcl9zeiA9IDA7XFxuZHJpdmVycy9uZXQvdHVuLmMtMjEyNC1cXHRpbnQgcmV0O1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjEyOS1cXHRpZiAodHVuLVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9WTkVUX0hEUilcXG5kcml2ZXJzL25ldC90dW4uYzoyMTMwOlxcdFxcdHZuZXRfaGRyX3N6ID0gUkVBRF9PTkNFKHR1bi1cXHUwMDNldm5ldF9oZHJfc3opO1xcbmRyaXZlcnMvbmV0L3R1bi5jLTIxMzEtXFxuZHJpdmVycy9uZXQvdHVuLmM6MjEzMjpcXHR0b3RhbCA9IHNrYi1cXHUwMDNlbGVuICsgdmxhbl9obGVuICsgdm5ldF9oZHJfc3o7XFxuZHJpdmVycy9uZXQvdHVuLmMtMjEzMy1cXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTIxNDctXFxuZHJpdmVycy9uZXQvdHVuLmM6MjE0ODpcXHRpZiAodm5ldF9oZHJfc3opIHtcXG5kcml2ZXJzL25ldC90dW4uYy0yMTQ5LVxcdFxcdHN0cnVjdCB2aXJ0aW9fbmV0X2hkcl92MV9oYXNoX3R1bm5lbCBoZHI7XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0yMTUyLVxcdFxcdG1lbXNldChcXHUwMDI2aGRyLCAwLCBzaXplb2YoaGRyKSk7XFxuZHJpdmVycy9uZXQvdHVuLmM6MjE1MzpcXHRcXHRyZXQgPSB0dW5fdm5ldF9oZHJfdG5sX2Zyb21fc2tiKHR1bi1cXHUwMDNlZmxhZ3MsIHR1bi1cXHUwMDNlZGV2LCBza2IsXFxuZHJpdmVycy9uZXQvdHVuLmMtMjE1NC1cXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2aGRyKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTIxNjItXFx0XFx0Z3NvID0gKHN0cnVjdCB2aXJ0aW9fbmV0X2hkciAqKVxcdTAwMjZoZHI7XFxuZHJpdmVycy9uZXQvdHVuLmM6MjE2MzpcXHRcXHRyZXQgPSBfX3R1bl92bmV0X2hkcl9wdXQodm5ldF9oZHJfc3osIHR1bi1cXHUwMDNlZGV2LVxcdTAwM2VmZWF0dXJlcyxcXG5kcml2ZXJzL25ldC90dW4uYy0yMTY0LVxcdFxcdFxcdFxcdFxcdCBpdGVyLCBnc28pO1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmM9MjUxMD1zdGF0aWMgaW50IHR1bl94ZHBfb25lKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0yNTg5LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjI1OTA6XFx0ZmVhdHVyZXMgPSB0dW5fdm5ldF9oZHJfZ3Vlc3RfZmVhdHVyZXMoUkVBRF9PTkNFKHR1bi1cXHUwMDNldm5ldF9oZHJfc3opKTtcXG5kcml2ZXJzL25ldC90dW4uYy0yNTkxLVxcdHRubF9oZHIgPSAoc3RydWN0IHZpcnRpb19uZXRfaGRyX3YxX2hhc2hfdHVubmVsICopZ3NvO1xcbmRyaXZlcnMvbmV0L3R1bi5jOjI1OTI6XFx0aWYgKHR1bl92bmV0X2hkcl90bmxfdG9fc2tiKHR1bi1cXHUwMDNlZmxhZ3MsIGZlYXR1cmVzLCBza2IsIHRubF9oZHIpKSB7XFxuZHJpdmVycy9uZXQvdHVuLmMtMjU5My1cXHRcXHRhdG9taWNfbG9uZ19pbmMoXFx1MDAyNnR1bi1cXHUwMDNlcnhfZnJhbWVfZXJyb3JzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTI4Mjk9c3RhdGljIGludCB0dW5fc2V0X2lmZihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgaWZyZXEgKmlmcilcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTI5MzEtXFx0XFx0dHVuLVxcdTAwM2V0eGZsdC5jb3VudCA9IDA7XFxuZHJpdmVycy9uZXQvdHVuLmM6MjkzMjpcXHRcXHR0dW4tXFx1MDAzZXZuZXRfaGRyX3N6ID0gc2l6ZW9mKHN0cnVjdCB2aXJ0aW9fbmV0X2hkcik7XFxuZHJpdmVycy9uZXQvdHVuLmMtMjkzMy1cXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTMxODA9c3RhdGljIGxvbmcgX190dW5fY2hyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzQ1OS1cXHRkZWZhdWx0OlxcbmRyaXZlcnMvbmV0L3R1bi5jOjM0NjA6XFx0XFx0cmV0ID0gdHVuX3ZuZXRfaW9jdGwoXFx1MDAyNnR1bi1cXHUwMDNldm5ldF9oZHJfc3osIFxcdTAwMjZ0dW4tXFx1MDAzZWZsYWdzLCBjbWQsIGFyZ3ApO1xcbmRyaXZlcnMvbmV0L3R1bi5jLTM0NjEtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE5OjIwOjI3LjM4MTE5Nzc5NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDgwMDE5NzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgYHR1bmAgRHJpdmVyKipcblxuT2theSwgc28gSSBzZWUgYHR1bl92bmV0X2hkcl90bmxfdG9fc2tiYCBnZXR0aW5nIGNhbGxlZCB3aXRoaW4gYHR1bi5jYC4gIEludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uIGJldHRlciB0byBncmFzcCBpdHMgcm9sZSBpbiB0aGUgZGF0YSBmbG93LiAgVGhlcmVmb3JlLCBsZXQncyBkaXZlIGludG8gdGhlIGRlZmluaXRpb24gb2YgYHR1bl92bmV0X2hkcl90bmxfdG9fc2tiYC4gU2luY2UgaXQncyBoZWFkZXIgcmVsYXRlZCwgbXkgaHVuY2ggaXMgdGhhdCBpdCdsbCBiZSBpbiBgZHJpdmVycy9uZXQvdHVuX3ZuZXQuaGAuIExldCdzIGNvbmZpcm0gdGhhdCBhbmQgZ2V0IGEgY2xvc2VyIGxvb2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5MTksIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxOToyMDozMC44NjEyMjA2MTlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MTgyNTUzMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHVuX3ZuZXRfaGRyX3RubF90b19za2JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdHVuLmM9MTc3ND1zdGF0aWMgc3NpemVfdCB0dW5fZ2V0X3VzZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTE4OTQtXFxuZHJpdmVycy9uZXQvdHVuLmM6MTg5NTpcXHRpZiAodHVuX3ZuZXRfaGRyX3RubF90b19za2IodHVuLVxcdTAwM2VmbGFncywgZmVhdHVyZXMsIHNrYiwgXFx1MDAyNmhkcikpIHtcXG5kcml2ZXJzL25ldC90dW4uYy0xODk2LVxcdFxcdGF0b21pY19sb25nX2luYyhcXHUwMDI2dHVuLVxcdTAwM2VyeF9mcmFtZV9lcnJvcnMpO1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmM9MjUxMD1zdGF0aWMgaW50IHR1bl94ZHBfb25lKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0yNTkxLVxcdHRubF9oZHIgPSAoc3RydWN0IHZpcnRpb19uZXRfaGRyX3YxX2hhc2hfdHVubmVsICopZ3NvO1xcbmRyaXZlcnMvbmV0L3R1bi5jOjI1OTI6XFx0aWYgKHR1bl92bmV0X2hkcl90bmxfdG9fc2tiKHR1bi1cXHUwMDNlZmxhZ3MsIGZlYXR1cmVzLCBza2IsIHRubF9oZHIpKSB7XFxuZHJpdmVycy9uZXQvdHVuLmMtMjU5My1cXHRcXHRhdG9taWNfbG9uZ19pbmMoXFx1MDAyNnR1bi1cXHUwMDNlcnhfZnJhbWVfZXJyb3JzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bl92bmV0Lmg9MTk3PXN0YXRpYyBpbmxpbmUgaW50XFxuZHJpdmVycy9uZXQvdHVuX3ZuZXQuaDoxOTg6dHVuX3ZuZXRfaGRyX3RubF90b19za2IodW5zaWduZWQgaW50IGZsYWdzLCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcyxcXG5kcml2ZXJzL25ldC90dW5fdm5ldC5oLTE5OS1cXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxOToyMDozMy4yNzk0ODA1NTZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg5Njc0MTkwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0d29yayBEcml2ZXIgRW50cnkgUG9pbnRzKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBtYXAgb3V0IHRoZSBrZXkgZW50cnkgcG9pbnRzIGZvciB0aGlzIG5ldHdvcmsgZHJpdmVyIHN0dWZmLiBGcm9tIHdoYXQgSSdtIHNlZWluZywgYHR1bl9nZXRfdXNlcmAgYW5kIGB0dW5feGRwX29uZWAgYXJlIHRoZSBjcnVjaWFsIHN0YXJ0aW5nIHBvaW50cyB0byB1bmRlcnN0YW5kIHRoZSBiZWhhdmlvciBvZiBgdHVuLmNgLiBGb3IgdGhlIGB0YXAuY2Agc2lkZSBvZiB0aGluZ3MsIGB0YXBfZ2V0X3VzZXJgIGFuZCBgdGFwX2dldF91c2VyX3hkcGAgc2VlbSB0byBiZSB0aGUgcHJpbWFyeSBob29rcy4gSSBhbHNvIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBob3cgYHRwYWNrZXRfc25kYCBhbmQgYHBhY2tldF9zbmRgIHdvcmsgd2l0aGluIGBhZl9wYWNrZXQuY2AuXG5cbk5vdywgYHNrYl9zZWdtZW50YCBpcyBzb21ldGhpbmcgSSBrbm93IHdlbGwsIHJlc2lkaW5nIGluIGBuZXQvY29yZS9za2J1ZmYuY2AsIGl0J3MgYmVlbiBleHBvcnRlZCwgYW5kIEkgcmVjYWxsIGl0IGJlaW5nIGEga2V5IHBsYXllciBpbiBHU08vVFNPIGZsb3dzLCBzbyB0aGlzIGlzIGltcG9ydGFudC4gSSB0aGluayBJJ2xsIGRpdmUgYSBsaXR0bGUgZGVlcGVyIGludG8gaXRzIHVzYWdlIG5vdyB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIGhvdyBldmVyeXRoaW5nIGZpdHMgdG9nZXRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1MjYsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTk6MjA6MzcuMTc2MjI0NzY4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjg3NDEyODQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl9zZWdtZW50XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9zZWdtZW50YXRpb24tb2ZmbG9hZHMucnN0PTIwNT1JbnN0ZWFkLCB0aGUgU0NUUCBwcm90b2NvbCBsYXllciBidWlsZHMgYW4gc2tiIHdpdGggdGhlIHNlZ21lbnRzIGNvcnJlY3RseVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9zZWdtZW50YXRpb24tb2ZmbG9hZHMucnN0OjIwNjpwYWRkZWQgYW5kIHN0b3JlZCBhcyBjaGFpbmVkIHNrYnMsIGFuZCBza2Jfc2VnbWVudCgpIHNwbGl0cyBiYXNlZCBvbiB0aG9zZS5cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc2VnbWVudGF0aW9uLW9mZmxvYWRzLnJzdC0yMDctVG8gc2lnbmFsIHRoaXMsIGdzb19zaXplIGlzIHNldCB0byB0aGUgc3BlY2lhbCB2YWx1ZSBHU09fQllfRlJBR1MuXFxuLS1cXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmM9Njg5MD1uZXRkZXZfZmVhdHVyZXNfdCBxZXRoX2ZlYXR1cmVzX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMtNjkzMS1cXHRpZiAobmV0aWZfbmVlZHNfZ3NvKHNrYiwgZmVhdHVyZXMpKSB7XFxuZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jOjY5MzI6XFx0XFx0LyogbWF0Y2ggc2tiX3NlZ21lbnQoKTogKi9cXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMtNjkzMy1cXHRcXHR1bnNpZ25lZCBpbnQgZG9mZnNldCA9IHNrYi1cXHUwMDNlZGF0YSAtIHNrYl9tYWNfaGVhZGVyKHNrYik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTM0OD1zdHJ1Y3Qgc2tfYnVmZjtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzU1LVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MzU2Oi8qIFNldCBza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWdzb19zaXplIHRvIHRoaXMgaW4gY2FzZSB5b3Ugd2FudCBza2Jfc2VnbWVudCB0b1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzU3LSAqIHNlZ21lbnQgdXNpbmcgaXRzIGN1cnJlbnQgc2VnbWVudGF0aW9uIGluc3RlYWQuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTQyNzU9dm9pZCBza2Jfc2NydWJfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgeG5ldCk7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo0Mjc2OnN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcyk7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo0Mjc3OnN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudF9saXN0KHN0cnVjdCBza19idWZmICpza2IsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzLFxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNDI3OC1cXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50IG9mZnNldCk7XFxuLS1cXG5pbmNsdWRlL25ldC91ZHAuaD01ODA9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqdWRwX3Jjdl9zZWdtZW50KHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbmluY2x1ZGUvbmV0L3VkcC5oLTU5NS1cXG5pbmNsdWRlL25ldC91ZHAuaDo1OTY6XFx0LyogQXZvaWQgY3N1bSByZWNhbGN1bGF0aW9uIGJ5IHNrYl9zZWdtZW50IHVubGVzcyB1c2Vyc3BhY2UgZXhwbGljaXRseVxcbmluY2x1ZGUvbmV0L3VkcC5oLTU5Ny1cXHQgKiBhc2tzIGZvciB0aGUgZmluYWwgY2hlY2tzdW0gdmFsdWVzXFxuLS1cXG5saWIvdGVzdF9icGYuYz0xNTIyMz1zdGF0aWMgX19pbml0IHN0cnVjdCBza19idWZmICpidWlsZF90ZXN0X3NrYl9saW5lYXJfbm9faGVhZF9mcmFnKHZvaWQpXFxuLS1cXG5saWIvdGVzdF9icGYuYy0xNTI3Ni1cXG5saWIvdGVzdF9icGYuYzoxNTI3NzpzdHJ1Y3Qgc2tiX3NlZ21lbnRfdGVzdCB7XFxubGliL3Rlc3RfYnBmLmMtMTUyNzgtXFx0Y29uc3QgY2hhciAqZGVzY3I7XFxuLS1cXG5saWIvdGVzdF9icGYuYy0xNTI4Mi1cXG5saWIvdGVzdF9icGYuYzoxNTI4MzpzdGF0aWMgc3RydWN0IHNrYl9zZWdtZW50X3Rlc3Qgc2tiX3NlZ21lbnRfdGVzdHNbXSBfX2luaXRjb25zdCA9IHtcXG5saWIvdGVzdF9icGYuYy0xNTI4NC1cXHR7XFxuLS1cXG5saWIvdGVzdF9icGYuYy0xNTI5OS1cXG5saWIvdGVzdF9icGYuYzoxNTMwMDpzdGF0aWMgX19pbml0IGludCB0ZXN0X3NrYl9zZWdtZW50X3NpbmdsZShjb25zdCBzdHJ1Y3Qgc2tiX3NlZ21lbnRfdGVzdCAqdGVzdClcXG5saWIvdGVzdF9icGYuYy0xNTMwMS17XFxuLS1cXG5saWIvdGVzdF9icGYuYy0xNTMxMC1cXG5saWIvdGVzdF9icGYuYzoxNTMxMTpcXHRzZWdzID0gc2tiX3NlZ21lbnQoc2tiLCB0ZXN0LVxcdTAwM2VmZWF0dXJlcyk7XFxubGliL3Rlc3RfYnBmLmMtMTUzMTItXFx0aWYgKCFJU19FUlIoc2VncykpIHtcXG4tLVxcbmxpYi90ZXN0X2JwZi5jLTE1MzIwLVxcbmxpYi90ZXN0X2JwZi5jOjE1MzIxOnN0YXRpYyBfX2luaXQgaW50IHRlc3Rfc2tiX3NlZ21lbnQodm9pZClcXG5saWIvdGVzdF9icGYuYy0xNTMyMi17XFxuLS1cXG5saWIvdGVzdF9icGYuYy0xNTMyNC1cXG5saWIvdGVzdF9icGYuYzoxNTMyNTpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShza2Jfc2VnbWVudF90ZXN0cyk7IGkrKykge1xcbmxpYi90ZXN0X2JwZi5jOjE1MzI2OlxcdFxcdGNvbnN0IHN0cnVjdCBza2Jfc2VnbWVudF90ZXN0ICp0ZXN0ID0gXFx1MDAyNnNrYl9zZWdtZW50X3Rlc3RzW2ldO1xcbmxpYi90ZXN0X2JwZi5jLTE1MzI3LVxcbi0tXFxubGliL3Rlc3RfYnBmLmMtMTUzMzMtXFxubGliL3Rlc3RfYnBmLmM6MTUzMzQ6XFx0XFx0aWYgKHRlc3Rfc2tiX3NlZ21lbnRfc2luZ2xlKHRlc3QpKSB7XFxubGliL3Rlc3RfYnBmLmMtMTUzMzUtXFx0XFx0XFx0cHJfY29udChcXFwiRkFJTFxcXFxuXFxcIik7XFxuLS1cXG5saWIvdGVzdF9icGYuYz0xNTc4OT1zdGF0aWMgX19pbml0IGludCBmaW5kX3Rlc3RfaW5kZXgoY29uc3QgY2hhciAqdGVzdF9uYW1lKVxcbi0tXFxubGliL3Rlc3RfYnBmLmMtMTU4MDYtXFxubGliL3Rlc3RfYnBmLmM6MTU4MDc6XFx0aWYgKCFzdHJjbXAodGVzdF9zdWl0ZSwgXFxcInRlc3Rfc2tiX3NlZ21lbnRcXFwiKSkge1xcbmxpYi90ZXN0X2JwZi5jOjE1ODA4OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHNrYl9zZWdtZW50X3Rlc3RzKTsgaSsrKSB7XFxubGliL3Rlc3RfYnBmLmM6MTU4MDk6XFx0XFx0XFx0aWYgKCFzdHJjbXAoc2tiX3NlZ21lbnRfdGVzdHNbaV0uZGVzY3IsIHRlc3RfbmFtZSkpXFxubGliL3Rlc3RfYnBmLmMtMTU4MTAtXFx0XFx0XFx0XFx0cmV0dXJuIGk7XFxuLS1cXG5saWIvdGVzdF9icGYuYz0xNTgxNz1zdGF0aWMgX19pbml0IGludCBwcmVwYXJlX3Rlc3RfcmFuZ2Uodm9pZClcXG4tLVxcbmxpYi90ZXN0X2JwZi5jLTE1ODI0LVxcdFxcdHZhbGlkX3JhbmdlID0gQVJSQVlfU0laRSh0YWlsX2NhbGxfdGVzdHMpO1xcbmxpYi90ZXN0X2JwZi5jOjE1ODI1OlxcdGVsc2UgaWYgKCFzdHJjbXAodGVzdF9zdWl0ZSwgXFxcInRlc3Rfc2tiX3NlZ21lbnRcXFwiKSlcXG5saWIvdGVzdF9icGYuYzoxNTgyNjpcXHRcXHR2YWxpZF9yYW5nZSA9IEFSUkFZX1NJWkUoc2tiX3NlZ21lbnRfdGVzdHMpO1xcbmxpYi90ZXN0X2JwZi5jLTE1ODI3LVxcdGVsc2VcXG4tLVxcbmxpYi90ZXN0X2JwZi5jPTE1ODc2PXN0YXRpYyBpbnQgX19pbml0IHRlc3RfYnBmX2luaXQodm9pZClcXG4tLVxcbmxpYi90ZXN0X2JwZi5jLTE1ODgzLVxcdCAgICBzdHJjbXAodGVzdF9zdWl0ZSwgXFxcInRlc3RfdGFpbF9jYWxsc1xcXCIpIFxcdTAwMjZcXHUwMDI2XFxubGliL3Rlc3RfYnBmLmM6MTU4ODQ6XFx0ICAgIHN0cmNtcCh0ZXN0X3N1aXRlLCBcXFwidGVzdF9za2Jfc2VnbWVudFxcXCIpKSB7XFxubGliL3Rlc3RfYnBmLmMtMTU4ODUtXFx0XFx0cHJfZXJyKFxcXCJ0ZXN0X2JwZjogaW52YWxpZCB0ZXN0X3N1aXRlICclcycgc3BlY2lmaWVkLlxcXFxuXFxcIiwgdGVzdF9zdWl0ZSk7XFxuLS1cXG5saWIvdGVzdF9icGYuYy0xNTkxOS1cXG5saWIvdGVzdF9icGYuYzoxNTkyMDpcXHRpZiAoIXN0cmxlbih0ZXN0X3N1aXRlKSB8fCAhc3RyY21wKHRlc3Rfc3VpdGUsIFxcXCJ0ZXN0X3NrYl9zZWdtZW50XFxcIikpXFxubGliL3Rlc3RfYnBmLmM6MTU5MjE6XFx0XFx0cmV0dXJuIHRlc3Rfc2tiX3NlZ21lbnQoKTtcXG5saWIvdGVzdF9icGYuYy0xNTkyMi1cXG4tLVxcbm5ldC9jb3JlL25ldF90ZXN0LmM9MTI9c3RhdGljIHZvaWQgX19pbml0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvbmV0X3Rlc3QuYy0xNi1cXG5uZXQvY29yZS9uZXRfdGVzdC5jOjE3OlxcdC8qIHNrYl9zZWdtZW50IGV4cGVjdHMgc2tiLVxcdTAwM2VkYXRhIGF0IHN0YXJ0IG9mIHBheWxvYWQgKi9cXG5uZXQvY29yZS9uZXRfdGVzdC5jLTE4LVxcdHNrYl9wdWxsKHNrYiwgc2l6ZW9mKGhkcikpO1xcbi0tXFxubmV0L2NvcmUvbmV0X3Rlc3QuYz0xNDc9c3RhdGljIHZvaWQgZ3NvX3Rlc3RfZnVuYyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5uZXQvY29yZS9uZXRfdGVzdC5jLTIyOC1cXG5uZXQvY29yZS9uZXRfdGVzdC5jOjIyOTpcXHRzZWdzID0gc2tiX3NlZ21lbnQoc2tiLCBmZWF0dXJlcyk7XFxubmV0L2NvcmUvbmV0X3Rlc3QuYy0yMzAtXFx0aWYgKElTX0VSUihzZWdzKSkge1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NDY2Mj1zdGF0aWMgaW5saW5lIHNrYl9mcmFnX3Qgc2tiX2hlYWRfZnJhZ190b19wYWdlX2Rlc2Moc3RydWN0IHNrX2J1ZmYgKmZyYWdfc2tiKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNDY3My1cXG5uZXQvY29yZS9za2J1ZmYuYzo0Njc0OnN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudF9saXN0KHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2NvcmUvc2tidWZmLmMtNDY3NS1cXHRcXHRcXHRcXHQgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMsXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy00NzY1LX1cXG5uZXQvY29yZS9za2J1ZmYuYzo0NzY2OkVYUE9SVF9TWU1CT0xfR1BMKHNrYl9zZWdtZW50X2xpc3QpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTQ3NjctXFxubmV0L2NvcmUvc2tidWZmLmMtNDc2OC0vKipcXG5uZXQvY29yZS9za2J1ZmYuYzo0NzY5OiAqXFx0c2tiX3NlZ21lbnQgLSBQZXJmb3JtIHByb3RvY29sIHNlZ21lbnRhdGlvbiBvbiBza2IuXFxubmV0L2NvcmUvc2tidWZmLmMtNDc3MC0gKlxcdEBoZWFkX3NrYjogYnVmZmVyIHRvIHNlZ21lbnRcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTQ3NzYtICovXFxubmV0L2NvcmUvc2tidWZmLmM6NDc3NzpzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKmhlYWRfc2tiLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTQ3NzgtXFx0XFx0XFx0ICAgIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNTAzMy1cXHRcXHRcXHRcXHRuZXRfd2Fybl9yYXRlbGltaXRlZChcXG5uZXQvY29yZS9za2J1ZmYuYzo1MDM0OlxcdFxcdFxcdFxcdFxcdFxcXCJza2Jfc2VnbWVudDogdG9vIG1hbnkgZnJhZ3M6ICV1ICV1XFxcXG5cXFwiLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTUwMzUtXFx0XFx0XFx0XFx0XFx0cG9zLCBtc3MpO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNTEyOS19XFxubmV0L2NvcmUvc2tidWZmLmM6NTEzMDpFWFBPUlRfU1lNQk9MX0dQTChza2Jfc2VnbWVudCk7XFxubmV0L2NvcmUvc2tidWZmLmMtNTEzMS1cXG4tLVxcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmM9ODg9c3RhdGljIHN0cnVjdCBza19idWZmICpfX3RjcDRfZ3NvX3NlZ21lbnRfbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwX29mZmxvYWQuYy05MC17XFxubmV0L2lwdjQvdGNwX29mZmxvYWQuYzo5MTpcXHRza2IgPSBza2Jfc2VnbWVudF9saXN0KHNrYiwgZmVhdHVyZXMsIHNrYl9tYWNfaGVhZGVyX2xlbihza2IpKTtcXG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jLTkyLVxcdGlmIChJU19FUlIoc2tiKSlcXG4tLVxcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmM9MTMzPXN0cnVjdCBza19idWZmICp0Y3BfZ3NvX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmMtMTgwLVxcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmM6MTgxOlxcdHNlZ3MgPSBza2Jfc2VnbWVudChza2IsIGZlYXR1cmVzKTtcXG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jLTE4Mi1cXHRpZiAoSVNfRVJSKHNlZ3MpKVxcbi0tXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYz00NjM9c3RhdGljIHN0cnVjdCBza19idWZmICpfX3VkcF9nc29fc2VnbWVudF9saXN0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTQ2OC1cXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jOjQ2OTpcXHRza2IgPSBza2Jfc2VnbWVudF9saXN0KHNrYiwgZmVhdHVyZXMsIHNrYl9tYWNfaGVhZGVyX2xlbihza2IpKTtcXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTQ3MC1cXHRpZiAoSVNfRVJSKHNrYikpXFxuLS1cXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jPTQ4MT1zdHJ1Y3Qgc2tfYnVmZiAqX191ZHBfZ3NvX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKmdzb19za2IsXFxuLS1cXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTUxNi1cXHRpZiAoc2tiX3NoaW5mbyhnc29fc2tiKS1cXHUwMDNlZ3NvX3R5cGUgXFx1MDAyNiBTS0JfR1NPX0ZSQUdMSVNUKSB7XFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYzo1MTc6XFx0XFx0IC8qIERldGVjdCBtb2RpZmllZCBnZW9tZXRyeSBhbmQgcGFzcyB0aG9zZSB0byBza2Jfc2VnbWVudC4gKi9cXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTUxOC1cXHRcXHRpZiAoKHNrYl9wYWdlbGVuKGdzb19za2IpIC0gc2l6ZW9mKCp1aCkgPT0gc2tiX3NoaW5mbyhnc29fc2tiKS1cXHUwMDNlZ3NvX3NpemUpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTU0My1cXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jOjU0NDpcXHQvKiBjbGVhciBkZXN0cnVjdG9yIHRvIGF2b2lkIHNrYl9zZWdtZW50IGFzc2lnbmluZyBpdCB0byB0YWlsICovXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy01NDUtXFx0Y29weV9kdG9yID0gZ3NvX3NrYi1cXHUwMDNlZGVzdHJ1Y3RvciA9PSBzb2NrX3dmcmVlO1xcbi0tXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy01NTAtXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYzo1NTE6XFx0c2VncyA9IHNrYl9zZWdtZW50KGdzb19za2IsIGZlYXR1cmVzKTtcXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTU1Mi1cXHRpZiAoSVNfRVJSX09SX05VTEwoc2VncykpIHtcXG4tLVxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM9NjMzPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdWRwNF91Zm9fZnJhZ21lbnQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtNjg3LVxcdCAqL1xcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM6Njg4OlxcdHNlZ3MgPSBza2Jfc2VnbWVudChza2IsIGZlYXR1cmVzKTtcXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTY4OS1vdXQ6XFxuLS1cXG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmM9MTQ3PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqX190Y3A2X2dzb19zZWdtZW50X2xpc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYy0xNDkte1xcbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYzoxNTA6XFx0c2tiID0gc2tiX3NlZ21lbnRfbGlzdChza2IsIGZlYXR1cmVzLCBza2JfbWFjX2hlYWRlcl9sZW4oc2tiKSk7XFxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jLTE1MS1cXHRpZiAoSVNfRVJSKHNrYikpXFxuLS1cXG5uZXQvaXB2Ni91ZHBfb2ZmbG9hZC5jPTE5PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdWRwNl91Zm9fZnJhZ21lbnQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L3VkcF9vZmZsb2FkLmMtMTA4LVxcdFxcdCAqL1xcbm5ldC9pcHY2L3VkcF9vZmZsb2FkLmM6MTA5OlxcdFxcdHNlZ3MgPSBza2Jfc2VnbWVudChza2IsIGZlYXR1cmVzKTtcXG5uZXQvaXB2Ni91ZHBfb2ZmbG9hZC5jLTExMC1cXHR9XFxuLS1cXG5uZXQvc2N0cC9vZmZsb2FkLmM9Mzk9c3RhdGljIHN0cnVjdCBza19idWZmICpzY3RwX2dzb19zZWdtZW50KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvc2N0cC9vZmZsb2FkLmMtNzEtXFxubmV0L3NjdHAvb2ZmbG9hZC5jOjcyOlxcdHNlZ3MgPSBza2Jfc2VnbWVudChza2IsIChmZWF0dXJlcyB8IE5FVElGX0ZfSFdfQ1NVTSkgXFx1MDAyNiB+TkVUSUZfRl9TRyk7XFxubmV0L3NjdHAvb2ZmbG9hZC5jLTczLVxcdGlmIChJU19FUlIoc2VncykpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE5OjIwOjM5LjQ2MzY0MzA1OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Nzk0MTgyNzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBTY29wZSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIEdTTyBzZWdtZW50YXRpb24sIHRoYXQgbXVjaCBpcyBjbGVhci4gVGhlIGtleSBwbGF5ZXJzIGhlcmUgc2VlbSB0byBiZSBgc2tiX3NlZ21lbnRgIOKAkyB0aGF0J3MgdGhlIGNvcmUgb2YgdGhlIHNlZ21lbnRhdGlvbiBsb2dpYywgc28gSSdsbCBuZWVkIHRvIGtlZXAgYSBjbG9zZSBleWUgb24gaXQg4oCTIGFuZCB0aGUgZnVuY3Rpb25zIGNhbGxpbmcgaXQ6IGB0Y3BfZ3NvX3NlZ21lbnRgLCBgX191ZHBfZ3NvX3NlZ21lbnRgLCB0aGUgVUZPIGZyYWdtZW50ZXJzLCBhbmQgYHNjdHBfZ3NvX3NlZ21lbnRgLiBUaG9zZSBhcmUgdHJpZ2dlcmVkIGJ5IHRoZSBsaWtlcyBvZiBgc2tiX21hY19nc29fc2VnbWVudGAgYW5kIGV2ZW50dWFsbHksIGBkZXZfaGFyZF9zdGFydF94bWl0YCwgc28gSSBjYW4gc2VlIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBkYXRhIHBhdGguXG5cbkJleW9uZCBHU08sIEkgc2VlIGl0IGFsc28gdG91Y2hlcyBgX192aXJ0aW9fbmV0X2hkcl90b19za2JgLCB3aGljaCBmbGFncyB1cCBgdHVuX2dldF91c2VyYCwgYHRhcF9nZXRfdXNlcmAsIGFuZCBgcGFja2V0X3NuZGAgYXMgcmVsZXZhbnQuIFNvIEkgaGF2ZSBhIGZlZWxpbmcgdGhlIHZpcnR1YWwgbmV0d29ya2luZyBzaWRlIGlzIGFsc28gaW4gcGxheS5cblxuVGhlcmVmb3JlLCBteSBpbml0aWFsIG1lbnRhbCBjaGVja2xpc3QgaXM6XG5cbiogICBgc2tiX3NlZ21lbnRgICh0aGUgY29yZSlcbiogICBgdHVuX2dldF91c2VyYFxuKiAgIGB0YXBfZ2V0X3VzZXJgXG4qICAgYHBhY2tldF9zbmRgXG4qICAgYHRwYWNrZXRfc25kYFxuXG5JIHNob3VsZCBzZWUgaWYgYW55IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcmVsZXZhbnQsIGJ1dCBgQ09ORklHX1RVTmAsIGBDT05GSUdfTUFDVlRBUGAsIGFuZCBgQ09ORklHX1BBQ0tFVGAgYXJlIHByZXR0eSBzdGFuZGFyZCBmYXJlIGluIG5ldHdvcmtpbmcgY29udGV4dHMsIGFuZCBzaW5jZSB0aGlzIHBhdGNoIGlzIG1vZGlmeWluZyBjb3JlIG5ldHdvcmtpbmcgY29kZSwgaXQncyB2ZXJ5IGxpa2VseSB0byBiZSBhbHdheXMgY29tcGlsZWQuXG5cblRpbWUgdG8gZGVsdmUgaW50byBgbmV0L2NvcmUvc2tidWZmLmNgIGFuZCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHNrYl9zZWdtZW50YC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1NjksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTk6MjA6NDUuMjU3ODI5ODI0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzMDkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0ODUwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0ODUwOlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gbm9ybWFsO1xcbjQ4NTE6XFx0XFxuNDg1MjpcXHRcXHRcXHRcXHRcXHRsZW4gLT0gaXRlci1cXHUwMDNlbGVuO1xcbjQ4NTM6XFx0XFx0XFx0XFx0fVxcbjQ4NTQ6XFx0XFxuNDg1NTpcXHRcXHRcXHRcXHRpZiAobGVuICE9IGZyYWdfbGVuKVxcbjQ4NTY6XFx0XFx0XFx0XFx0XFx0Z290byBub3JtYWw7XFxuNDg1NzpcXHRcXHRcXHR9XFxuNDg1ODpcXHRcXG40ODU5OlxcdFxcdFxcdC8qIEdTTyBwYXJ0aWFsIG9ubHkgcmVxdWlyZXMgdGhhdCB3ZSB0cmltIG9mZiBhbnkgZXhjZXNzIHRoYXRcXG40ODYwOlxcdFxcdFxcdCAqIGRvZXNuJ3QgZml0IGludG8gYW4gTVNTIHNpemVkIGJsb2NrLCBzbyB0YWtlIGNhcmUgb2YgdGhhdFxcbjQ4NjE6XFx0XFx0XFx0ICogbm93LlxcbjQ4NjI6XFx0XFx0XFx0ICovXFxuNDg2MzpcXHRcXHRcXHRwYXJ0aWFsX3NlZ3MgPSBtaW4obGVuIC8gbXNzLCBHU09fTUFYX1NFR1MpO1xcbjQ4NjQ6XFx0XFx0XFx0aWYgKHBhcnRpYWxfc2VncyBcXHUwMDNlIDEpXFxuNDg2NTpcXHRcXHRcXHRcXHRtc3MgKj0gcGFydGlhbF9zZWdzO1xcbjQ4NjY6XFx0XFx0XFx0ZWxzZVxcbjQ4Njc6XFx0XFx0XFx0XFx0cGFydGlhbF9zZWdzID0gMDtcXG40ODY4OlxcdFxcdH1cXG40ODY5OlxcdFxcbjQ4NzA6XFx0bm9ybWFsOlxcbjQ4NzE6XFx0XFx0aGVhZHJvb20gPSBza2JfaGVhZHJvb20oaGVhZF9za2IpO1xcbjQ4NzI6XFx0XFx0cG9zID0gc2tiX2hlYWRsZW4oaGVhZF9za2IpO1xcbjQ4NzM6XFx0XFxuNDg3NDpcXHRcXHRpZiAoc2tiX29ycGhhbl9mcmFncyhoZWFkX3NrYiwgR0ZQX0FUT01JQykpXFxuNDg3NTpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG40ODc2OlxcdFxcbjQ4Nzc6XFx0XFx0bmZyYWdzID0gc2tiX3NoaW5mbyhoZWFkX3NrYiktXFx1MDAzZW5yX2ZyYWdzO1xcbjQ4Nzg6XFx0XFx0ZnJhZyA9IHNrYl9zaGluZm8oaGVhZF9za2IpLVxcdTAwM2VmcmFncztcXG40ODc5OlxcdFxcdGZyYWdfc2tiID0gaGVhZF9za2I7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE5OjIwOjQ1LjI1ODE2NDY5NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTAxMTU1MTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFJlY2VudCBOZXR3b3JrIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIHRoZSBjb3JlIGNoYW5nZSB0aGF0IGp1bXBzIG91dCBpcyB0aGUgYWRqdXN0bWVudCB0byBob3cgd2UgY2FsY3VsYXRlIGBwYXJ0aWFsX3NlZ3NgIHdpdGhpbiB0aGUgYHNrYl9zZWdtZW50YCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCdzIGxpbWl0aW5nIHRoZSBgcGFydGlhbF9zZWdzYCBjYWxjdWxhdGlvbiB0byB0aGUgbWluaW11bSBvZiBgbGVuIC8gbXNzYCBhbmQgYEdTT19NQVhfU0VHU2AuIFRoaXMgaXMgYSBkZWZpbml0ZSBzYWZlZ3VhcmQgYWdhaW5zdCBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBvciBzb21lIG90aGVyIGVkZ2UtY2FzZSBzY2VuYXJpbyBpbiBzZWdtZW50YXRpb24sIHdoaWNoIGlzIGdvb2QuIFRoZSBwcmlvciBjYWxjdWxhdGlvbiwgd2hpbGUgc2VlbWluZ2x5IHN0cmFpZ2h0Zm9yd2FyZCwgY291bGQgcG90ZW50aWFsbHkgbGVhZCB0byBpc3N1ZXMgd2hlbiBkZWFsaW5nIHdpdGggcGFydGljdWxhcmx5IGxhcmdlIG9yIGZyYWdtZW50ZWQgcGFja2V0cy4gVGhpcyBtYWtlcyBwZXJmZWN0IHNlbnNlOyBib3VuZHMgY2hlY2tpbmcgaXMgYWx3YXlzIGEgcG9zaXRpdmUgdGhpbmcgaW4gbmV0d29yayBjb2RlLlxuXG5Ob3csIGdsYW5jaW5nIGF0IHRoZSBzZWNvbmQgY2hhbmdlLCB3aGljaCBpcyBpbiBgX192aXJ0aW9fbmV0X2hkcl90b19za2JgLCBJIHNlZSB0aGF0IGl0IGludm9sdmVzIGBnc29fc2l6ZWAuIEl0IGFwcGVhcnMgdGhlcmUncyBhIGd1YXJkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBgZ3NvX3NpemVgIHBhcmFtZXRlciBvZiB2aXJ0aW8gbmV0IGlzIGF0IGxlYXN0IGBUQ1BfTUlOX0dTT19TSVpFYCB3aGVuIGdlbmVyYXRpbmcgYSBoZWFkZXIuIFRoZSBgQlVJTERfQlVHX09OYCBzdGF0ZW1lbnQgY2F1Z2h0IG15IGV5ZSB0b28g4oCTIGl0IGFzc2VydHMgYSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgVENQX01JTl9HU09fU0laRWAgYW5kIGBHU09fTUFYX1NFR1NgIGFuZCBgR1NPX01BWF9TSVpFYC4gVGhpcyBzdWdnZXN0cyB0aGUgcGF0Y2ggaXMgYWltZWQgYXQgZW5zdXJpbmcgY29uc2lzdGVudCBHU08gYmVoYXZpb3IsIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIG1pbmltdW0gcGFja2V0IHNpemUgb3IgbGltaXRhdGlvbnMgaW1wb3NlZCBieSB0aGUgaGFyZHdhcmUgYW5kIHNvZnR3YXJlIG9uIEdTTyBjYXBhYmlsaXRpZXMuXG5cbkFscmlnaHQsIHNvIHRoZSBmb2N1cyBpcyByZWFsbHkgb24gc2VnbWVudGF0aW9uIGFuZCBHU08uIExldCdzIHNlZS4uLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBob3cgdGhpcyByZWxhdGVzIHRvIGEgZmV3IGZ1bmN0aW9ucy4gTXkgaW1tZWRpYXRlIGxpc3Qgb2YgaW50ZXJlc3RpbmcgZnVuY3Rpb25zIGluY2x1ZGVzIGBza2Jfc2VnbWVudGAg4oCTIG9idmlvdXNseSwgZ2l2ZW4gdGhlIGZpcnN0IGNoYW5nZSwgYW5kIEkgbmVlZCB0byBzZWUgaG93IGl0IHdvcmtzIGluIGNvbnRleHQg4oCTIGFuZCB0aGVuIGB0dW5fZ2V0X3VzZXJgLCBgdGFwX2dldF91c2VyYCwgYHBhY2tldF9zbmRgLCBhbmQgYHRwYWNrZXRfc25kYC4gVGhlc2UgYXJlIGFsbCBjcnVjaWFsIHBvaW50cyB3aGVyZSBuZXR3b3JrIHBhY2tldHMgYXJlIGhhbmRsZWQsIGFuZCBhIEdTTy9zZWdtZW50YXRpb24gaXNzdWUgY291bGQgbWFuaWZlc3QuIEknbGwgc3RhcnQgd2l0aCBgdHVuX2dldF91c2VyYCBpbiBgZHJpdmVycy9uZXQvdHVuLmNgIGFuZCBzZWUgaWYgdGhlIHBhdGNoIGRpcmVjdGx5IGFmZmVjdHMgYW55dGhpbmcgdGhlcmUsIHNpbmNlIGl0J3MgYSBjb21tb24gbmV0d29yayBpbnRlcmZhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjUwLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTk6MjA6NTEuMzU5MzIyNzNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MjU4NzIxNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHVuX2dldF91c2VyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jPTE2Nzc9c3RhdGljIHN0cnVjdCBza19idWZmICp0dW5fYnVpbGRfc2tiKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0xNzczLS8qIEdldCBwYWNrZXQgZnJvbSB1c2VyIHNwYWNlIGJ1ZmZlciAqL1xcbmRyaXZlcnMvbmV0L3R1bi5jOjE3NzQ6c3RhdGljIHNzaXplX3QgdHVuX2dldF91c2VyKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsXFxuZHJpdmVycy9uZXQvdHVuLmMtMTc3NS1cXHRcXHRcXHQgICAgdm9pZCAqbXNnX2NvbnRyb2wsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTIwNjY9c3RhdGljIHNzaXplX3QgdHVuX2Nocl93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjA3OS1cXG5kcml2ZXJzL25ldC90dW4uYzoyMDgwOlxcdHJlc3VsdCA9IHR1bl9nZXRfdXNlcih0dW4sIHRmaWxlLCBOVUxMLCBmcm9tLCBub2Jsb2NrLCBmYWxzZSk7XFxuZHJpdmVycy9uZXQvdHVuLmMtMjA4MS1cXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTI2NDY9c3RhdGljIGludCB0dW5fc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgdG90YWxfbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjY5Mi1cXG5kcml2ZXJzL25ldC90dW4uYzoyNjkzOlxcdHJldCA9IHR1bl9nZXRfdXNlcih0dW4sIHRmaWxlLCBjdGwgPyBjdGwtXFx1MDAzZXB0ciA6IE5VTEwsIFxcdTAwMjZtLVxcdTAwM2Vtc2dfaXRlcixcXG5kcml2ZXJzL25ldC90dW4uYy0yNjk0LVxcdFxcdFxcdCAgIG0tXFx1MDAzZW1zZ19mbGFncyBcXHUwMDI2IE1TR19ET05UV0FJVCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTk6MjA6NTMuNzg1MjAzMDI3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3OTkwNjQzNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucywgdGhpbmtpbmcgdGhyb3VnaCBpdCBpbiBhIHRlY2huaWNhbCBjb250ZXh0LlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogTmV0d29yayBEcml2ZXIgQ29uc2lkZXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBsb29raW5nIGF0IGB0dW5fZ2V0X3VzZXJgIGFuZCBgdGFwX2dldF91c2VyYCwgdGhlc2UgYXJlIGNsZWFybHkgcmVsZXZhbnQgZnVuY3Rpb25zIGZvciBuZXR3b3JrIGRyaXZlciBkZXZlbG9wbWVudCwgc3BlY2lmaWNhbGx5IGluIHRoZSBjb250ZXh0IG9mIFRVTi9UQVAgaW50ZXJmYWNlcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiWWVwLCB0aGF0IG1ha2VzIHNlbnNlLlwiIFRoZXNlIGFyZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3MuXG5cbmB0dW5fZ2V0X3VzZXJgIGlzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGV4YW1pbmluZyB0aGUgdXNlci1zcGFjZSBpbnRlcmFjdGlvbiB3aXRoIGEgVFVOIGRldmljZS4gSSdkIGV4cGVjdCBpdCBkZWFscyB3aXRoIHNldHRpbmcgdXAgdGhlIGludGVyZmFjZSdzIHBhcmFtZXRlcnMsIGhhbmRsaW5nIGRhdGEgdHJhbnNmZXIgYmV0d2VlbiB0aGUga2VybmVsIGFuZCB1c2VyIHNwYWNlLCBhbmQgcG9zc2libHkgbWFuYWdpbmcgdmlydHVhbCBJUCBhZGRyZXNzZXMgb3Igcm91dGluZyBjb25maWd1cmF0aW9ucy4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiwgYnV0IHRoZSBuYW1lIHN0cm9uZ2x5IHN1Z2dlc3RzIGl0cyByb2xlLiBJIHdvdWxkIGJlIGNvbnNpZGVyaW5nIGhvdyBpdCBoYW5kbGVzIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBuZXR3b3JrIHN0YWNrLCBhbmQgYW55IHNlY3VyaXR5IGltcGxpY2F0aW9ucy5cblxuU2ltaWxhcmx5LCBgdGFwX2dldF91c2VyYCBpcyBlcXVhbGx5IGltcG9ydGFudCwgcGFydGljdWxhcmx5IGdpdmVuIFRBUCdzIHJvbGUgYXMgYSBicmlkZ2luZyBpbnRlcmZhY2UuIEkgaW1hZ2luZSBpdCBtaXJyb3JzIG11Y2ggb2YgdGhlIHNhbWUgZnVuY3Rpb25hbGl0eSBhcyBUVU4sIGJ1dCB3aXRoIHRoZSBhZGRlZCBjb21wbGV4aXR5IG9mIEV0aGVybmV0IGZyYW1lIGhhbmRsaW5nIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb24gd2l0aCBhIGJyaWRnZSBkcml2ZXIuIEl0IHdpbGwgYmUgdmVyeSB1c2VmdWwgaW4gcmV2aWV3aW5nIGFueSBjb2RlIHdpdGggdGhlIHVzZSBvZiBhIFRBUCBpbnRlcmZhY2UsIGNvbnNpZGVyaW5nIHRoZSBudWFuY2VzIG9mIHRoZSBkcml2ZXIgYW5kIGl0cyBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgbGluayBsYXllci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3MjIsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxOToyMDo1Ny41ODQyNzAxNDJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMzM3MzE4NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGFwX2dldF91c2VyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3RhcC5jPTU0Mz1zdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICp0YXBfYWxsb2Nfc2tiKHN0cnVjdCBzb2NrICpzaywgc2l6ZV90IHByZXBhZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3RhcC5jLTU3MS0vKiBHZXQgcGFja2V0IGZyb20gdXNlciBzcGFjZSBidWZmZXIgKi9cXG5kcml2ZXJzL25ldC90YXAuYzo1NzI6c3RhdGljIHNzaXplX3QgdGFwX2dldF91c2VyKHN0cnVjdCB0YXBfcXVldWUgKnEsIHZvaWQgKm1zZ19jb250cm9sLFxcbmRyaXZlcnMvbmV0L3RhcC5jLTU3My1cXHRcXHRcXHQgICAgc3RydWN0IGlvdl9pdGVyICpmcm9tLCBpbnQgbm9ibG9jaylcXG4tLVxcbmRyaXZlcnMvbmV0L3RhcC5jPTY5MT1zdGF0aWMgc3NpemVfdCB0YXBfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4tLVxcbmRyaXZlcnMvbmV0L3RhcC5jLTY5OS1cXG5kcml2ZXJzL25ldC90YXAuYzo3MDA6XFx0cmV0dXJuIHRhcF9nZXRfdXNlcihxLCBOVUxMLCBmcm9tLCBub2Jsb2NrKTtcXG5kcml2ZXJzL25ldC90YXAuYy03MDEtfVxcbi0tXFxuZHJpdmVycy9uZXQvdGFwLmM9MTAzMz1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0YXBfZm9wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3RhcC5jLTEwNDMtXFxuZHJpdmVycy9uZXQvdGFwLmM6MTA0NDpzdGF0aWMgaW50IHRhcF9nZXRfdXNlcl94ZHAoc3RydWN0IHRhcF9xdWV1ZSAqcSwgc3RydWN0IHhkcF9idWZmICp4ZHApXFxuZHJpdmVycy9uZXQvdGFwLmMtMTA0NS17XFxuLS1cXG5kcml2ZXJzL25ldC90YXAuYz0xMTE1PXN0YXRpYyBpbnQgdGFwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSxcXG4tLVxcbmRyaXZlcnMvbmV0L3RhcC5jLTExMjYtXFx0XFx0XFx0eGRwID0gXFx1MDAyNigoc3RydWN0IHhkcF9idWZmICopY3RsLVxcdTAwM2VwdHIpW2ldO1xcbmRyaXZlcnMvbmV0L3RhcC5jOjExMjc6XFx0XFx0XFx0dGFwX2dldF91c2VyX3hkcChxLCB4ZHApO1xcbmRyaXZlcnMvbmV0L3RhcC5jLTExMjgtXFx0XFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvdGFwLmMtMTEzMS1cXG5kcml2ZXJzL25ldC90YXAuYzoxMTMyOlxcdHJldHVybiB0YXBfZ2V0X3VzZXIocSwgY3RsID8gY3RsLVxcdTAwM2VwdHIgOiBOVUxMLCBcXHUwMDI2bS1cXHUwMDNlbXNnX2l0ZXIsXFxuZHJpdmVycy9uZXQvdGFwLmMtMTEzMy1cXHRcXHRcXHQgICAgbS1cXHUwMDNlbXNnX2ZsYWdzIFxcdTAwMjYgTVNHX0RPTlRXQUlUKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTk6MjA6NTkuOTE4MDA4OTkxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNTc2OTIwNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNvbnNpZGVyaW5nIEZ1bmN0aW9uIERlc2lnbiBPcHRpb25zKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgbmV3IGZ1bmN0aW9uIGFuZCB0aGUgYmVzdCB3YXkgdG8gYXBwcm9hY2ggaXQuIGB0YXBfZ2V0X3VzZXJgIHNlZW1zIGxpa2UgYSBzb2xpZCBjYW5kaWRhdGUuIEl0J3MgZ290IHRoZSByaWdodCBmdW5jdGlvbmFsaXR5LCBhbmQgdGhlIGV4aXN0aW5nIHN0cnVjdHVyZSBpcyBwcm9iYWJseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEJ1dCwgYmVmb3JlIEkgZ2V0IHRvbyBhdHRhY2hlZCB0byB0aGF0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhIG1vcmUgZWxlZ2FudCBvciBlZmZpY2llbnQgc29sdXRpb24uXG5cbkxldCBtZSB0YWtlIGFub3RoZXIgbG9vay4uLiBobW0sIHdoYXQgYWJvdXQgc29tZXRoaW5nIGxpa2UgYHBhY2tldF9zbmRgPyBJJ20gY3VyaW91cy4gSSBtYXkgbmVlZCB0byBkaXZlIGludG8gdGhlIGNvZGViYXNlIGFuZCBhbmFseXplIGl0cyBpbnRlcm5hbCB3b3JraW5ncy4gSXQgbWF5IHJlcXVpcmUgYSBkZWVwZXIgYW5hbHlzaXMsIGJ1dCBpdCdzIHdvcnRoIGNoZWNraW5nLiBEZXBlbmRpbmcgb24gaG93IHRoZSBkYXRhIGlzIGhhbmRsZWQgaW4gdGhhdCBmdW5jdGlvbiwgdGhlcmUgbWlnaHQgYmUgc29tZSBjbGV2ZXIgaW50ZWdyYXRpb24gb3Bwb3J0dW5pdGllcyB0aGVyZS4gSSBuZWVkIHRvIHdlaWdoIHRoZSBwcm9zIGFuZCBjb25zIG9mIGJvdGggYXBwcm9hY2hlcyBiZWZvcmUgY29tbWl0dGluZyB0byBhIGZpbmFsIGRlc2lnbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1NjgsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxOToyMTowNC4xNzU3MDM3ODJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMjAyMTI1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFja2V0X3NuZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcGFja2V0L2FmX3BhY2tldC5jPTI1Mjg9c3RhdGljIHZvaWQgdHBhY2tldF9kZXN0cnVjdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjU0Ny1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI1NDg6c3RhdGljIGludCBfX3BhY2tldF9zbmRfdm5ldF9wYXJzZShzdHJ1Y3QgdmlydGlvX25ldF9oZHIgKnZuZXRfaGRyLCBzaXplX3QgbGVuKVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjU0OS17XFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI1NjMtXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNTY0OnN0YXRpYyBpbnQgcGFja2V0X3NuZF92bmV0X3BhcnNlKHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90ICpsZW4sXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNTY1LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgdmlydGlvX25ldF9oZHIgKnZuZXRfaGRyLCBpbnQgdm5ldF9oZHJfc3opXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI1NzUtXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNTc2OlxcdHJldCA9IF9fcGFja2V0X3NuZF92bmV0X3BhcnNlKHZuZXRfaGRyLCAqbGVuKTtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI1NzctXFx0aWYgKHJldClcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MjY2OD1zdGF0aWMgaW50IHRwYWNrZXRfcGFyc2VfaGVhZGVyKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHZvaWQgKmZyYW1lLFxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNzM1LVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjczNjpzdGF0aWMgaW50IHRwYWNrZXRfc25kKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBtc2doZHIgKm1zZylcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI3Mzcte1xcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yODQ5LVxcdFxcdFxcdG1lbWNweShcXHUwMDI2dm5ldF9oZHIsIGRhdGEgLSB2bmV0X2hkcl9zeiwgc2l6ZW9mKHZuZXRfaGRyKSk7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyODUwOlxcdFxcdFxcdGlmIChfX3BhY2tldF9zbmRfdm5ldF9wYXJzZShcXHUwMDI2dm5ldF9oZHIsIHRwX2xlbikpIHtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI4NTEtXFx0XFx0XFx0XFx0dHBfbGVuID0gLUVJTlZBTDtcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9Mjk0MD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnBhY2tldF9hbGxvY19za2Ioc3RydWN0IHNvY2sgKnNrLCBzaXplX3QgcHJlcGFkLFxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yOTY1LVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6Mjk2NjpzdGF0aWMgaW50IHBhY2tldF9zbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjk2Ny17XFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMwMjMtXFx0aWYgKHZuZXRfaGRyX3N6KSB7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzozMDI0OlxcdFxcdGVyciA9IHBhY2tldF9zbmRfdm5ldF9wYXJzZShtc2csIFxcdTAwMjZsZW4sIFxcdTAwMjZ2bmV0X2hkciwgdm5ldF9oZHJfc3opO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzAyNS1cXHRcXHRpZiAoZXJyKVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0zMTI1PXN0YXRpYyBpbnQgcGFja2V0X3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMTMwLVxcdC8qIFJlYWRpbmcgdHhfcmluZy5wZ192ZWMgd2l0aG91dCBob2xkaW5nIHBnX3ZlY19sb2NrIGlzIHJhY3kuXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzozMTMxOlxcdCAqIHRwYWNrZXRfc25kKCkgd2lsbCByZWRvIHRoZSBjaGVjayBzYWZlbHkuXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMTMyLVxcdCAqL1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzEzMy1cXHRpZiAoZGF0YV9yYWNlKHBvLVxcdTAwM2V0eF9yaW5nLnBnX3ZlYykpXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzozMTM0OlxcdFxcdHJldHVybiB0cGFja2V0X3NuZChwbywgbXNnKTtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMxMzUtXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzozMTM2OlxcdHJldHVybiBwYWNrZXRfc25kKHNvY2ssIG1zZywgbGVuKTtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMxMzctfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxOToyMTowNi40OTU5MjI5MTJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI0MjQwNDkwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0d29yayBQYWNrZXQgVHJhbnNtaXNzaW9uIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHBhY2tldCB0cmFuc21pc3Npb24sIHRyeWluZyB0byBzZWUgd2hlcmUgdGhlIGNvcmUgbG9naWMgbGllcy4gR29vZCBuZXdzLCBgcGFja2V0X3NuZGAgYW5kIGB0cGFja2V0X3NuZGAgc2VlbSBwcm9taXNpbmcg4oCTIHRoZXkncmUgZGVmaW5pdGVseSBvbiB0aGUgcmlnaHQgdHJhY2suIEFuZCwgb2YgY291cnNlLCBJIGhhdmUgdG8gcmUtZmFtaWxpYXJpemUgbXlzZWxmIHdpdGggYHNrYl9zZWdtZW50YDsgaXQncyBhIHdvcmtob3JzZSwgdGhhdCBvbmUsIGFuZCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkga25vdyBob3cgaXQncyBiZWluZyBsZXZlcmFnZWQuIEl0cyB3aWRlc3ByZWFkIHVzZSwgY291cGxlZCB3aXRoIGl0cyBleHBvcnQgc3RhdHVzLCBzdWdnZXN0cyBpdCdzIGEga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUuXG5cbk5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGFyZSB0aGVyZSAqb3RoZXIqIGZ1bmN0aW9ucyBwbGF5aW5nIGEgcGl2b3RhbCByb2xlIGhlcmU/IEkgbmVlZCB0byBnZXQgYSBicm9hZGVyIHZpZXcgb2YgdGhlIGVjb3N5c3RlbS4gTGV0IG1lIGRpZyBhIGxpdHRsZSBkZWVwZXIuIEhtbSwgYHZpcnRpb19uZXRfaGRyX3RvX3NrYmAgc2VlbXMgdG8gYmUgcmVsZXZhbnQuIEl0J3MgdXNlZCB3aXRoaW4gYHR1bl9nZXRfdXNlcmAsIGB0YXBfZ2V0X3VzZXJgLCB0aGF0IHBhaXIgbWFrZXMgc2Vuc2UsIGl0IGlzIGFsc28gdXNlZCBpbiBgcGFja2V0X3NuZGAgYW5kIGB0cGFja2V0X3NuZGAsIHdoaWNoIGFyZSBhbHNvIGltcG9ydGFudCB0byB1bmRlcnN0YW5kaW5nLCBhbmQgZmluYWxseSBgcGFnZV90b19za2JgLCBpbiBgZHJpdmVycy9uZXQvdmlydGlvX25ldC5jYCwgd2hpY2ggbWFrZXMgbWUgdGhpbmsgaXQgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSBwYWdlIGFsbG9jYXRpb24gYXNwZWN0LiBUaGlzIGlzIGFuIGludGVyZXN0aW5nIHNldCBvZiBjb25uZWN0aW9ucyBhbmQgd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjc3NCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxOToyMToxMS43MzgzMzA1MDRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MjU0MDk5OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFnZV90b19za2JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdmlydGlvX25ldC5jPTgxOT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnZpcnRuZXRfYnVpbGRfc2tiKHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGJ1ZmxlbixcXG4tLVxcbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYy04MzUtLyogQ2FsbGVkIGZyb20gYm90dG9tIGhhbGYgY29udGV4dCAqL1xcbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYzo4MzY6c3RhdGljIHN0cnVjdCBza19idWZmICpwYWdlX3RvX3NrYihzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSxcXG5kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMtODM3LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCByZWNlaXZlX3F1ZXVlICpycSxcXG4tLVxcbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYz0xOTk0PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcmVjZWl2ZV9iaWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYy0yMDE2LVxcbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYzoyMDE3OlxcdHNrYiA9IHBhZ2VfdG9fc2tiKHZpLCBycSwgcGFnZSwgMCwgbGVuLCBQQUdFX1NJWkUsIDApO1xcbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYy0yMDE4LVxcdHU2NF9zdGF0c19hZGQoXFx1MDAyNnN0YXRzLVxcdTAwM2VieXRlcywgbGVuIC0gdmktXFx1MDAzZWhkcl9sZW4pO1xcbi0tXFxuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jPTIzNzY9c3RhdGljIHN0cnVjdCBza19idWZmICpyZWNlaXZlX21lcmdlYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jLTI0MTMtXFxuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jOjI0MTQ6XFx0aGVhZF9za2IgPSBwYWdlX3RvX3NrYih2aSwgcnEsIHBhZ2UsIG9mZnNldCwgbGVuLCB0cnVlc2l6ZSwgaGVhZHJvb20pO1xcbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYy0yNDE1LVxcdGN1cnJfc2tiID0gaGVhZF9za2I7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE5OjIxOjE0LjE2Mzc2NTQyMVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTM5NTY5MzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBWaXJ0aW8tTmV0IEdTTyBhbmQgUGFja2V0IEhhbmRsaW5nKipcblxuT2theSwgaGVyZSdzIHdoYXQncyBydW5uaW5nIHRocm91Z2ggbXkgaGVhZCBhcyBJIGxvb2sgYXQgdGhlc2UgZnVuY3Rpb25zIGFuZCBjb25maWd1cmF0aW9ucy4gYHJlY2VpdmVfYmlnYCBhbmQgYHJlY2VpdmVfbWVyZ2VhYmxlYCBpbiBgZHJpdmVycy9uZXQvdmlydGlvX25ldC5jYCBhcmUgc29saWQgc3RhcnRpbmcgcG9pbnRzLCBhcyB1c3VhbC4gTGV0J3MgZGlnIGRlZXBlciBpbnRvIHRoZSBHU08gaGFuZGxpbmcuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW1wbGVtZW50YXRpb24sIHNvIGxldCdzIHN0YXJ0IHdpdGggYF9fdmlydGlvX25ldF9oZHJfdG9fc2tiYCBpbiBgaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmhgLiBBaCwgeWVzLCB0aGVyZSBpdCBpczpcbmBgYGNcblx0XHRcdEJVSUxEX0JVR19PTihUQ1BfTUlOX0dTT19TSVpFICogR1NPX01BWF9TRUdTIFx1MDAzYyBHU09fTUFYX1NJWkUpO1xuXHRcdFx0Z3NvX3NpemUgPSBtYXgoZ3NvX3NpemUsIFRDUF9NSU5fR1NPX1NJWkUpO1xuYGBgXG5UaGF0IGBCVUlMRF9CVUdfT05gIGxvb2tzIGZhbWlsaWFyIOKAkyBpdCdzIGFkZHJlc3NpbmcgdGhhdCBwb3RlbnRpYWwgaXNzdWUgd2l0aCBHU08gc2l6ZS4gR29vZCBjYXRjaC4gQW5kIHRoZSBgZ3NvX3NpemUgPSBtYXgoZ3NvX3NpemUsIFRDUF9NSU5fR1NPX1NJWkUpYCBpcyBhbm90aGVyIGNyaXRpY2FsIHBpZWNlIG9mIHRoYXQgZml4OyBlbnN1cmluZyBhIHJlYXNvbmFibGUgbWluaW11bS5cblxuTW92aW5nIG9uLCB0aGUgb3RoZXIgY3J1Y2lhbCBzcG90IHNlZW1zIHRvIGJlIGluIGBza2Jfc2VnbWVudGA6XG5gYGBjXG5cdFx0cGFydGlhbF9zZWdzID0gbWluKGxlbiAvIG1zcywgR1NPX01BWF9TRUdTKTtcbmBgYFxuUmlnaHQsIHRoaXMgbG9va3MgbGlrZSBpdOKAmXMgdG8gcHJldmVudCBgcGFydGlhbF9zZWdzYCBmcm9tIG92ZXJmbG93aW5nIGBHU09fTUFYX1NFR1NgLiBDbGFzc2ljIEdTTyBzZWdtZW50YXRpb24gbGltaXQgcHJvdGVjdGlvbi5cblxuU28sIHRha2luZyBhIHN0ZXAgYmFjayB0byBvcmdhbml6ZSBteSB0aG91Z2h0cywgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBJIHdhbnQgdG8gdGhvcm91Z2hseSByZXZpZXcgYW5kIHRyYWNlIGFyZTpcbi0gYHNrYl9zZWdtZW50YCAob2J2aW91c2x5LCBnaXZlbiB0aGUgR1NPIGZvY3VzKVxuLSBgdHVuX2dldF91c2VyYFxuLSBgdGFwX2dldF91c2VyYFxuLSBgcGFja2V0X3NuZGBcbi0gYHRwYWNrZXRfc25kYFxuLSBgcmVjZWl2ZV9iaWdgXG4tIGByZWNlaXZlX21lcmdlYWJsZWBcblxuVGhvc2Ugc2VlbSBsaWtlIHRoZSBjcml0aWNhbCBwYXRocy4gTm93LCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSBjb250ZXh0LCB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSBpbnZvbHZlZD8gSSBrbm93IGBUVU5gLCBgTUFDVlRBUGAsIGBQQUNLRVRgLCBhbmQgYFZJUlRJT19ORVRgIGFyZSBhbGwgcmVsZXZhbnQgaGVyZS4gTm93IGxldCdzIHNlZSB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBzaXRzLCBJJ2xsIHRha2UgYSBsb29rIGF0IHRoZSBgS2NvbmZpZ2AgZm9yIGBWSVJUSU9fTkVUYCB0byBjaGVjayBpZiBJIGFtIG1pc3Npbmcgc29tZXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzU5OSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxOToyMToyMC43MDMzMzc4MTNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2ODIzMjA3MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZJUlRJT19ORVRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz00MzU9Y29uZmlnIFZFVEhcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctNDQyLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6NDQzOmNvbmZpZyBWSVJUSU9fTkVUXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00NDQtXFx0dHJpc3RhdGUgXFxcIlZpcnRpbyBuZXR3b3JrIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTk6MjE6MjMuMzg1NjY1MTcyWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MzEyODExOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBNQUNWVEFQIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIGBNQUNWVEFQYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBgS2NvbmZpZ2AgZmlsZXMuIFRoYXQncyB0aGUgZGVmaW5pdGl2ZSBzb3VyY2UgZm9yIHRoZXNlIHNvcnRzIG9mIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0uIEknbGwgbmVlZCB0byBzZWUgaG93IGBNQUNWVEFQYCBpcyBkZWZpbmVkLCB3aGljaCBzZXR0aW5ncyBjb250cm9sIGl0LCBhbmQgd2hhdCBvdGhlciBjb21wb25lbnRzIGl0IG1pZ2h0IGRlcGVuZCBvbi4gSG9wZWZ1bGx5LCB0aGUgcmVsZXZhbnQgYEtjb25maWdgIGVudHJ5IGlzIHdlbGwtY29tbWVudGVkIGFuZCBjbGVhci4gSSdtIGxvb2tpbmcgZm9yIGFueSBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBiZSByZWxldmFudCB0byB0aGUgaXNzdWUgSSdtIGRlYnVnZ2luZyBvciB0aGUgZmVhdHVyZSBJJ20gZW5hYmxpbmcuIEknbGwgYmUgZXhwZWN0aW5nIHRvIHNlZSBhIGJvb2xlYW4gY29uZmlndXJhdGlvbiBvcHRpb24gZGVmaW5lZCBzb21ld2hlcmUsIGFsb25nIHdpdGggbWF5YmUgc29tZSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgb24gb3RoZXIgbmV0d29yayBvciB2aXJ0dWFsaXphdGlvbiBtb2R1bGVzLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gc3BhY2UgYW5kIGRlY2lkZSBpZiB0aGlzIGlzIGFjdHVhbGx5IGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NTEzLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTk6MjE6MjcuMjE2OTUzMDk2WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzg1MjU4MTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNQUNWVEFQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9MTY1PWNvbmZpZyBNQUNWTEFOXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTE3OC1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjE3OTpjb25maWcgTUFDVlRBUFxcbmRyaXZlcnMvbmV0L0tjb25maWctMTgwLVxcdHRyaXN0YXRlIFxcXCJNQUMtVkxBTiBiYXNlZCB0YXAgZHJpdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxOToyMToyOS42MDIyMjM5MzRaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk3Njg1NDA5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQ2hlY2tpbmcgdGhlIFRVTiBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgYEtjb25maWdgIGZpbGVzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGBUVU5gIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBzaG91bGQgcXVpY2tseSB2ZXJpZnkgdGhlIHJlbGV2YW50IGRlcGVuZGVuY2llcyBhbmQgcG9zc2libGUgYnVpbGQgZmxhZ3MuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gd2hldGhlciBhbnkgcmVjZW50IGNoYW5nZXMgbWlnaHQgaGF2ZSBpbXBhY3RlZCB0aGUgZGVmYXVsdCBzZXR0aW5ncy4gSXQncyBiZXN0IHRvIGNvbmZpcm0gdGhlIGBUVU5gIGRldmljZSBpcyBlbmFibGVkLCBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYXMgZXhwZWN0ZWQgZm9yIHRoZSBjdXJyZW50IHVzZSBjYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODgyMiwiT3V0cHV0VG9rZW5zIjoxNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE5OjIxOjMyLjU3OTA4MTM2NFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4NTM4MzY1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVFVOXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlPTI0MD1jb25maWcgVEFSR0VUX0NQVVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGUtMjY0LVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlOjI2NTpjb25maWcgVFVORV9DUFVcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZS0yNjYtXFx0c3RyaW5nXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWc9NDcxPWNob2ljZVxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnLTQ3NC1cXG5hcmNoL3Jpc2N2L0tjb25maWc6NDc1OmNvbmZpZyBUVU5FX0dFTkVSSUNcXG5hcmNoL3Jpc2N2L0tjb25maWctNDc2LVxcdGJvb2wgXFxcImdlbmVyaWNcXFwiXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZz00NjE9Y2hvaWNlXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy00NzEtXFxuYXJjaC9zMzkwL0tjb25maWc6NDcyOmNvbmZpZyBUVU5FX0RFRkFVTFRcXG5hcmNoL3MzOTAvS2NvbmZpZy00NzMtXFx0Ym9vbCBcXFwiRGVmYXVsdFxcXCJcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTQ3Ny1cXG5hcmNoL3MzOTAvS2NvbmZpZzo0Nzg6Y29uZmlnIFRVTkVfWjEwXFxuYXJjaC9zMzkwL0tjb25maWctNDc5LVxcdGJvb2wgXFxcIklCTSBTeXN0ZW0gejEwXFxcIlxcbmFyY2gvczM5MC9LY29uZmlnLTQ4MC1cXG5hcmNoL3MzOTAvS2NvbmZpZzo0ODE6Y29uZmlnIFRVTkVfWjE5NlxcbmFyY2gvczM5MC9LY29uZmlnLTQ4Mi1cXHRib29sIFxcXCJJQk0gekVudGVycHJpc2UgMTE0IGFuZCAxOTZcXFwiXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy00ODQtXFxuYXJjaC9zMzkwL0tjb25maWc6NDg1OmNvbmZpZyBUVU5FX1pFQzEyXFxuYXJjaC9zMzkwL0tjb25maWctNDg2LVxcdGJvb2wgXFxcIklCTSB6QkMxMiBhbmQgekVDMTJcXFwiXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy00ODgtXFxuYXJjaC9zMzkwL0tjb25maWc6NDg5OmNvbmZpZyBUVU5FX1oxM1xcbmFyY2gvczM5MC9LY29uZmlnLTQ5MC1cXHRib29sIFxcXCJJQk0gejEzcyBhbmQgejEzXFxcIlxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctNDkyLVxcbmFyY2gvczM5MC9LY29uZmlnOjQ5Mzpjb25maWcgVFVORV9aMTRcXG5hcmNoL3MzOTAvS2NvbmZpZy00OTQtXFx0Ym9vbCBcXFwiSUJNIHoxNCBaUjEgYW5kIHoxNFxcXCJcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTQ5Ni1cXG5hcmNoL3MzOTAvS2NvbmZpZzo0OTc6Y29uZmlnIFRVTkVfWjE1XFxuYXJjaC9zMzkwL0tjb25maWctNDk4LVxcdGJvb2wgXFxcIklCTSB6MTVcXFwiXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy01MDAtXFxuYXJjaC9zMzkwL0tjb25maWc6NTAxOmNvbmZpZyBUVU5FX1oxNlxcbmFyY2gvczM5MC9LY29uZmlnLTUwMi1cXHRib29sIFxcXCJJQk0gejE2XFxcIlxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctNTA0LVxcbmFyY2gvczM5MC9LY29uZmlnOjUwNTpjb25maWcgVFVORV9aMTdcXG5hcmNoL3MzOTAvS2NvbmZpZy01MDYtXFx0Ym9vbCBcXFwiSUJNIHoxN1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9Mzg2PWNvbmZpZyBSSU9ORVRfUlhfU0laRVxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zOTAtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzozOTE6Y29uZmlnIFRVTlxcbmRyaXZlcnMvbmV0L0tjb25maWctMzkyLVxcdHRyaXN0YXRlIFxcXCJVbml2ZXJzYWwgVFVOL1RBUCBkZXZpY2UgZHJpdmVyIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTQxNT1jb25maWcgVEFQXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTQyMC1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjQyMTpjb25maWcgVFVOX1ZORVRfQ1JPU1NfTEVcXG5kcml2ZXJzL25ldC9LY29uZmlnLTQyMi1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBjcm9zcy1lbmRpYW4gdm5ldCBoZWFkZXJzIG9uIGxpdHRsZS1lbmRpYW4ga2VybmVsc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTk6MjE6MzQuNjY0NDcxODAxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMjk1MTA1MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHRob3VnaCBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqS2NvbmZpZyBEaXZlIGZvciBQQUNLRVQqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgb3Igc2V0dGluZ3MgcmVsYXRlZCB0byB0aGUgYFBBQ0tFVGAgZnVuY3Rpb25hbGl0eSBpbiB0aGlzIHByb2plY3QuIEZpcnN0LCBteSBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB0aGUgYEtjb25maWdgIGZpbGVzLiBUaGF0J3MgdXN1YWxseSB0aGUgY2VudHJhbCBodWIgZm9yIGRlZmluaW5nIGFuZCBjb250cm9sbGluZyBrZXJuZWwgZmVhdHVyZXMsIGRyaXZlcnMsIGFuZCBvcHRpb25zLiBJJ2xsIG5lZWQgdG8gbG9jYXRlIHRoZSByZWxldmFudCBgS2NvbmZpZ2AgZmlsZXMg4oCTIHByb2JhYmx5IHN0YXJ0aW5nIHdpdGggdGhlIG1vcmUgZ2VuZXJhbCBvbmVzIGFuZCB0aGVuIGRyaWxsaW5nIGRvd24gaWYgbmVjZXNzYXJ5LiBUaGUgZ29hbCBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGRpZmZlcmVudCBgUEFDS0VUYCByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGF2YWlsYWJsZSwgdGhlaXIgZGVmYXVsdHMsIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgc2V0dGluZ3MsIGFuZCwgY3J1Y2lhbGx5LCBob3cgdG8gZW5hYmxlIG9yIGRpc2FibGUgdGhlbSB3aXRoaW4gdGhlIGJ1aWxkIHN5c3RlbS4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzaW1wbGUgbW9kdWxlLCBzb21ldGhpbmcgbW9yZSBjb21wbGV4LCBvciBwZXJoYXBzIGEgc2V0IG9mIHJlbGF0ZWQgb3B0aW9ucz8gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTg3MiwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE5OjIxOjM3Ljg5Mzk4NjcxNFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM3NDgwNDA5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUEFDS0VUXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9wYWNrZXQvS2NvbmZpZy01LVxcbm5ldC9wYWNrZXQvS2NvbmZpZzo2OmNvbmZpZyBQQUNLRVRcXG5uZXQvcGFja2V0L0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiUGFja2V0IHNvY2tldFxcXCJcXG4tLVxcbm5ldC9wYWNrZXQvS2NvbmZpZy0xOC1cXG5uZXQvcGFja2V0L0tjb25maWc6MTk6Y29uZmlnIFBBQ0tFVF9ESUFHXFxubmV0L3BhY2tldC9LY29uZmlnLTIwLVxcdHRyaXN0YXRlIFxcXCJQYWNrZXQ6IHNvY2tldHMgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE5OjIxOjQwLjI2ODgyNzM5MloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MzM3MTYwOTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cywgZm9jdXNpbmcgb24gbmV0d29yay1yZWxhdGVkIGNvZGUuIE15IGNvbmZpZ3MgdGVsbCBtZSB0byBjb25zaWRlciBgVFVOYCwgYE1BQ1ZUQVBgLCBgUEFDS0VUYCwgYFZJUlRJT19ORVRgLCBhbmQgYFRBUGAuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGBza2Jfc2VnbWVudGAgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYCBpcyBhbHdheXMgY29tcGlsZWQ7IEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC5cblxuSSd2ZSBpZGVudGlmaWVkIGEgaGFuZGZ1bCBvZiBmdW5jdGlvbnMgdGhhdCBzZWVtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBUaGVzZSBpbmNsdWRlIGBza2Jfc2VnbWVudGAsIGB0dW5fZ2V0X3VzZXJgLCBgdGFwX2dldF91c2VyYCwgYHBhY2tldF9zbmRgLCBgdHBhY2tldF9zbmRgLCBgcmVjZWl2ZV9iaWdgLCBhbmQgYHJlY2VpdmVfbWVyZ2VhYmxlYC4gXG5cbkhhbmcgb24sIGByZWNlaXZlX2JpZ2AgYW5kIGByZWNlaXZlX21lcmdlYWJsZWAgYXJlIHNwZWNpZmljIHRvIGB2aXJ0aW9fbmV0YCwgcmlnaHQ/IEFuZCB0aGV5J3JlIHN0YXRpYyBidXQgbm90IGlubGluZWQuIEdvb2QgdG8ga25vdy4gYHNrYl9zZWdtZW50YCBpcyBleHBvcnRlZCwgdGhhdCdzIHVzZWZ1bC4gQW5kIGFsbCB0aGUgb3RoZXJzLCBgdHVuX2dldF91c2VyYCwgYHRhcF9nZXRfdXNlcmAsIGBwYWNrZXRfc25kYCwgYW5kIGB0cGFja2V0X3NuZGAgYXJlIHN0YXRpYy5cblxuVGhlIGtleSBxdWVzdGlvbiBpcywgYXJlIHRoZXkgc3VpdGFibGUgZm9yIGZ1enppbmc/IEFuZCB0aGUgYW5zd2VyIGlzIHllcywgYWJzb2x1dGVseSEgVGhlc2UgYXBwZWFyIHRvIGJlIGVudHJ5IHBvaW50cyB0aGF0IGhhbmRsZSB1c2VyLXByb3ZpZGVkIGRhdGEuIGB0dW5fZ2V0X3VzZXJgIGhhbmRsZXMgZGF0YSB3aGVuIHdyaXRpbmcgdG8gYSBUVU4gZGV2aWNlLCBgdGFwX2dldF91c2VyYCB3aGVuIHdyaXRpbmcgdG8gYSBUQVAgZGV2aWNlLiBUaGVuIGBwYWNrZXRfc25kYCBhbmQgYHRwYWNrZXRfc25kYCBhcmUgaW52b2x2ZWQgaW4gc2VuZGluZyBwYWNrZXRzIHZpYSBBRl9QQUNLRVQgc29ja2V0cy4gQW5kIGZpbmFsbHksIGBza2Jfc2VnbWVudGAgaXMgdGllZCB0byBHU08gc2VnbWVudGF0aW9uLCBzbyBpdCBkZWZpbml0ZWx5IGRlYWxzIHdpdGggcGFja2V0IGRhdGEuXG5cbkFscmlnaHQsIEknbSBjb25maWRlbnQgaW4gdGhlc2UgdGFyZ2V0cy4gVGltZSB0byBmZWVkIHRoaXMgaW5mb3JtYXRpb24gdG8gdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgbW92ZSBvbiB0byB0aGUgbmV4dCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDE4NywiT3V0cHV0VG9rZW5zIjoxODgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTk6MjE6NDguNjA1OTkxNDJaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTY5NzA4MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRVTlwiLFxuICAgIFwiVEFQXCIsXG4gICAgXCJNQUNWVEFQXCIsXG4gICAgXCJQQUNLRVRcIixcbiAgICBcIlZJUlRJT19ORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJza2Jfc2VnbWVudFwiLFxuICAgIFwidHVuX2dldF91c2VyXCIsXG4gICAgXCJ0YXBfZ2V0X3VzZXJcIixcbiAgICBcInBhY2tldF9zbmRcIixcbiAgICBcInRwYWNrZXRfc25kXCIsXG4gICAgXCJyZWNlaXZlX2JpZ1wiLFxuICAgIFwicmVjZWl2ZV9tZXJnZWFibGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgbG9naWMgZm9yIEdTTyBzZWdtZW50YXRpb24gKGBza2Jfc2VnbWVudGApIGFuZCB2aXJ0aW8gbmV0IGhlYWRlciBwYXJzaW5nIChgX192aXJ0aW9fbmV0X2hkcl90b19za2JgKS4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaG93IHBhY2tldHMgYXJlIHNlZ21lbnRlZCBhbmQgaG93IHZpcnRpbyBoZWFkZXJzIGFyZSB2YWxpZGF0ZWQsIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIFRVTi9UQVAgZGV2aWNlcywgQUZfUEFDS0VUIHNvY2tldHMsIGFuZCB2aXJ0aW8tbmV0LiBUaGUgY2hhbmdlcyBoYXZlIGZ1bmN0aW9uYWwgaW1wYWN0IGFuZCBhcmUgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUVU5cIixcbiAgICBcIlRBUFwiLFxuICAgIFwiTUFDVlRBUFwiLFxuICAgIFwiUEFDS0VUXCIsXG4gICAgXCJWSVJUSU9fTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2tiX3NlZ21lbnRcIixcbiAgICBcInR1bl9nZXRfdXNlclwiLFxuICAgIFwidGFwX2dldF91c2VyXCIsXG4gICAgXCJwYWNrZXRfc25kXCIsXG4gICAgXCJ0cGFja2V0X3NuZFwiLFxuICAgIFwicmVjZWl2ZV9iaWdcIixcbiAgICBcInJlY2VpdmVfbWVyZ2VhYmxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGxvZ2ljIGZvciBHU08gc2VnbWVudGF0aW9uIChgc2tiX3NlZ21lbnRgKSBhbmQgdmlydGlvIG5ldCBoZWFkZXIgcGFyc2luZyAoYF9fdmlydGlvX25ldF9oZHJfdG9fc2tiYCkuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGhvdyBwYWNrZXRzIGFyZSBzZWdtZW50ZWQgYW5kIGhvdyB2aXJ0aW8gaGVhZGVycyBhcmUgdmFsaWRhdGVkLCB3aGljaCBhcmUgcmVhY2hhYmxlIHZpYSBUVU4vVEFQIGRldmljZXMsIEFGX1BBQ0tFVCBzb2NrZXRzLCBhbmQgdmlydGlvLW5ldC4gVGhlIGNoYW5nZXMgaGF2ZSBmdW5jdGlvbmFsIGltcGFjdCBhbmQgYXJlIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE5OjIxOjQ4Ljc2Mjk3MjU4NVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxNDU3MDk1MTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxOToyMTo0OC43NjQwMjEyOTVaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTIxNDQ2NTUyNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBwb3RlbnRpYWwgaXNzdWVzIHdpdGggR1NPIHNpemUgYW5kIHNlZ21lbnQgY2FsY3VsYXRpb25zLCBsaWtlbHkgcHJldmVudGluZyBpbnRlZ2VyIG92ZXJmbG93cywgZXhjZXNzaXZlIHNlZ21lbnQgY291bnRzLCBvciBkaXZpc2lvbiBieSB6ZXJvLiBJdCBlbmZvcmNlcyBhIG1pbmltdW0gYGdzb19zaXplYCBhbmQgbGltaXRzIGBwYXJ0aWFsX3NlZ3NgIHRvIGBHU09fTUFYX1NFR1NgLiBUaGVzZSBhcmUgYXJpdGhtZXRpYyBhbmQgYm91bmRzLWNoZWNraW5nIGZpeGVzLiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb2YgbmV3IGRhdGEgc3RydWN0dXJlcywgbm8gY2hhbmdlcyB0byBtZW1vcnkgaW5pdGlhbGl6YXRpb24sIGFuZCBubyByaXNrIG9mIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNpbmcgaXQgaW4gY29udHJvbCBmbG93LiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgY3Jhc2hlcyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhM2JjZDAxM2FmYTVhODQ0MDZkMmNiYzE1NmQ1NjI1YmVhMGMzOGM0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMTk6MTk6NTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaCBiL2luY2x1ZGUvbGludXgvdmlydGlvX25ldC5oXG5pbmRleCBmMzZkMjFiNWJjMTllLi5jMzgxYjkxNmMxYjU0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmhcbisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX25ldC5oXG5AQCAtNiw2ICs2LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXB2Ni5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWRwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvdGNwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L3RjcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC92aXJ0aW9fbmV0LmhcdTAwM2VcbiBcbkBAIC0xNzksNiArMTgwLDkgQEAgc3RhdGljIGlubGluZSBpbnQgX192aXJ0aW9fbmV0X2hkcl90b19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRpZiAoc2tiLVx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICBza2ItXHUwMDNlY3N1bV9vZmZzZXQgIT0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spKVxuIFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdFx0QlVJTERfQlVHX09OKFRDUF9NSU5fR1NPX1NJWkUgKiBHU09fTUFYX1NFR1MgXHUwMDNjIEdTT19NQVhfU0laRSk7XG4rXHRcdFx0Z3NvX3NpemUgPSBtYXgoZ3NvX3NpemUsIFRDUF9NSU5fR1NPX1NJWkUpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuY1xuaW5kZXggYzgyYTE0NzJhNWVhOC4uNDM5Y2JmZWIwMmJkNiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NrYnVmZi5jXG4rKysgYi9uZXQvY29yZS9za2J1ZmYuY1xuQEAgLTQ4NjAsNyArNDg2MCw3IEBAIHN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqaGVhZF9za2IsXG4gXHRcdCAqIGRvZXNuJ3QgZml0IGludG8gYW4gTVNTIHNpemVkIGJsb2NrLCBzbyB0YWtlIGNhcmUgb2YgdGhhdFxuIFx0XHQgKiBub3cuXG4gXHRcdCAqL1xuLVx0XHRwYXJ0aWFsX3NlZ3MgPSBsZW4gLyBtc3M7XG4rXHRcdHBhcnRpYWxfc2VncyA9IG1pbihsZW4gLyBtc3MsIEdTT19NQVhfU0VHUyk7XG4gXHRcdGlmIChwYXJ0aWFsX3NlZ3MgXHUwMDNlIDEpXG4gXHRcdFx0bXNzICo9IHBhcnRpYWxfc2VncztcbiBcdFx0ZWxzZVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTk6MjE6NDguNzY0MDIyNzQ1WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMTQ0NjIyNjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkdTTyBTaXplIGFuZCBTZWdtZW50IEJvdW5kcyBGaXgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGB2aXJ0aW9fbmV0LmhgIGFuZCBgc2tidWZmLmNgLiBNeSBpbml0aWFsIHJlYWQgaXMgdGhhdCBpdCdzIGRlYWxpbmcgd2l0aCBHZW5lcmFsaXplZCBTZWdtZW50YXRpb24gT2ZmbG9hZCAoR1NPKSBhbmQsIHNwZWNpZmljYWxseSwgaG93IHRoZSBzaXplIG9mIHRob3NlIHNlZ21lbnRzIGlzIGhhbmRsZWQuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGludm9sdmUgbWFraW5nIHN1cmUgdGhlIEdTTyBzaXplIGRvZXNuJ3QgYmVjb21lIHRvbyBzbWFsbCBhbmQgdGhlIG51bWJlciBvZiBzZWdtZW50cyBpc24ndCB1bmJvdW5kZWQsIHRvIGF2b2lkIGludGVnZXIgb3ZlcmZsb3dzIG9yIGRpdmlzaW9uIGJ5IHplcm8uXG5cbkluIGBfX3ZpcnRpb19uZXRfaGRyX3RvX3NrYmAsIHRoZSBhZGRpdGlvbiBvZiBgZ3NvX3NpemUgPSBtYXgoZ3NvX3NpemUsIFRDUF9NSU5fR1NPX1NJWkUpYCBjYXVnaHQgbXkgZXllLiAgVGhpcyBndWFyYW50ZWVzIHRoYXQgdGhlIHNlZ21lbnQgc2l6ZSB3aWxsIGF0IGxlYXN0IGJlIGBUQ1BfTUlOX0dTT19TSVpFYCwgd2hpY2ggaXMgYSBnb29kIHNhbml0eSBjaGVjay4gVGhlbiwgaW4gYHNrYl9zZWdtZW50YCwgdGhlIGBwYXJ0aWFsX3NlZ3MgPSBtaW4obGVuIC8gbXNzLCBHU09fTUFYX1NFR1MpYCBtb2RpZmljYXRpb24gaXMgc21hcnQuIEJ5IGxpbWl0aW5nIGBwYXJ0aWFsX3NlZ3NgIHRvIGBHU09fTUFYX1NFR1NgLCB0aGUgY2FsY3VsYXRpb24gb2YgYG1zcyAqIHBhcnRpYWxfc2Vnc2AgaXMgbWFkZSBzYWZlciwgcHJldmVudGluZyB0aGF0IHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93IEkgbWVudGlvbmVkIGVhcmxpZXIuIElmIGBtc3NgIGJlY2FtZSB0b28gc21hbGwsIHRoZSBkaXZpc2lvbiBjb3VsZCBwcm9kdWNlIGV4Y2Vzc2l2ZWx5IGxhcmdlIG51bWJlcnMuXG5cbk15IGZpcnN0IHRob3VnaHQgd2FzLCBcIklzIHRoaXMgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnk/XCIgR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGVzZSBjaGFuZ2Vz4oCUYWRqdXN0aW5nIGNhbGN1bGF0aW9ucywgZW5zdXJpbmcgYm91bmRzLCBhbmQgcHJvdGVjdGluZyBhZ2FpbnN0IGFyaXRobWV0aWMgaXNzdWVz4oCUaXQgKnNlZW1zKiB1bmxpa2VseS4gIEkgbWVhbiwgdGhpcyBoYXMgbW9yZSB0byBkbyB3aXRoIHBvdGVudGlhbGx5IGdvaW5nIG91dCBvZiBib3VuZHMsIGluZmluaXRlIGxvb3BzLCBhbmQgY3Jhc2hpbmcgZHVlIHRvIGluY29ycmVjdCBjYWxjdWxhdGlvbnMgb2YgR1NPLiBJJ20gZm9jdXNpbmcgb24gdGhlICp2YWx1ZXMqIGhlcmUgYW5kIGhvdyB0aGV54oCZcmUgdXNlZCwgbm90IHdoZXRoZXIgdGhvc2UgdmFsdWVzIGFyZSBpbml0aWFsaXplZC4gS0FTQU4gd291bGQgZGVmaW5pdGVseSBwaWNrIHVwIGFueSBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gS01TQU4gaXMgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5MZXQgbWUgZG91YmxlLWNoZWNrLiBUaGUgYGdzb19zaXplYCBjb21lcyBmcm9tIGBoZHItXHUwMDNlZ3NvX3NpemVgLCBhbmQgYGxlbmAgYW5kIGBtc3NgIGFyZSBkZXJpdmVkIGZyb20gdGhlIGBza2JgJ3Mgc3RhdGUuIE5vIG5ldyBhbGxvY2F0aW9ucyBvciBjb3BpZXMgaW50byB1c2VyIHNwYWNlIGFyZSBpbnRyb2R1Y2VkLiBUaGVzZSBhcmUgcHVyZWx5IGJvdW5kcyBjaGVja3MgYW5kIGFyaXRobWV0aWMgYWRqdXN0bWVudHMgb24gZXhpc3RpbmcsIGluaXRpYWxpemVkIGRhdGEuICBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnZvbHZlZC4gIFRoZSByaXNrIGlzIG1vcmUgYWJvdXQgbWFraW5nIHN1cmUgdGhlIGNhbGN1bGF0aW9ucyByZW1haW4gd2l0aGluIHJlYXNvbmFibGUgbGltaXRzIGFuZCBhdm9pZGluZyBuYXN0eSBzaWRlIGVmZmVjdHMgZnJvbSBvdmVyZmxvd2luZyB2YXJpYWJsZXMgdXNlZCBpbiBjYWxjdWxhdGlvbnMuIE15IGNvbmNsdXNpb246IE5lZWRzS01TQU4gPSBmYWxzZS4gVGhlIGZpeCBpcyBhYm91dCBzYWZlIGFyaXRobWV0aWMsIHNlZ21lbnQgbGltaXRzLCBhbmQgcHJldmVudGluZyBvdmVyZmxvd3MsIG5vdCBkZWFsaW5nIHdpdGggbWVtb3J5IGluaXRpYWxpemF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzE0LCJPdXRwdXRUb2tlbnMiOjE1NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE5OjIyOjAwLjkwODY1MDM2OFoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBHU08gc2l6ZSBhbmQgc2VnbWVudCBjYWxjdWxhdGlvbnMsIGxpa2VseSBwcmV2ZW50aW5nIGludGVnZXIgb3ZlcmZsb3dzLCBleGNlc3NpdmUgc2VnbWVudCBjb3VudHMsIG9yIGRpdmlzaW9uIGJ5IHplcm8uIEl0IGVuZm9yY2VzIGEgbWluaW11bSBgZ3NvX3NpemVgIGFuZCBsaW1pdHMgYHBhcnRpYWxfc2Vnc2AgdG8gYEdTT19NQVhfU0VHU2AuIFRoZXNlIGFyZSBhcml0aG1ldGljIGFuZCBib3VuZHMtY2hlY2tpbmcgZml4ZXMuIFRoZXJlIGlzIG5vIGludHJvZHVjdGlvbiBvZiBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBubyBjaGFuZ2VzIHRvIG1lbW9yeSBpbml0aWFsaXphdGlvbiwgYW5kIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2luZyBpdCBpbiBjb250cm9sIGZsb3cuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBtZW1vcnkgY29ycnVwdGlvbiBvciBjcmFzaGVzIHJlbGF0ZWQgdG8gdGhlc2UgY2hhbmdlcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBwb3RlbnRpYWwgaXNzdWVzIHdpdGggR1NPIHNpemUgYW5kIHNlZ21lbnQgY2FsY3VsYXRpb25zLCBsaWtlbHkgcHJldmVudGluZyBpbnRlZ2VyIG92ZXJmbG93cywgZXhjZXNzaXZlIHNlZ21lbnQgY291bnRzLCBvciBkaXZpc2lvbiBieSB6ZXJvLiBJdCBlbmZvcmNlcyBhIG1pbmltdW0gYGdzb19zaXplYCBhbmQgbGltaXRzIGBwYXJ0aWFsX3NlZ3NgIHRvIGBHU09fTUFYX1NFR1NgLiBUaGVzZSBhcmUgYXJpdGhtZXRpYyBhbmQgYm91bmRzLWNoZWNraW5nIGZpeGVzLiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb2YgbmV3IGRhdGEgc3RydWN0dXJlcywgbm8gY2hhbmdlcyB0byBtZW1vcnkgaW5pdGlhbGl6YXRpb24sIGFuZCBubyByaXNrIG9mIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNpbmcgaXQgaW4gY29udHJvbCBmbG93LiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgY3Jhc2hlcyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow5mv5p[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-13 18:59:37 +0000 UTC FinishedAt: 2026-08-13 19:22:02 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "3205699d79f262412c1be7fc1c04066610d3cd52", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TUN", "TAP", "MACVTAP", "PACKET", "VIRTIO_NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "3205699d79f262412c1be7fc1c04066610d3cd52", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TUN", "TAP", "MACVTAP", "PACKET", "VIRTIO_NET" ], "series_id": "ccf036e1-8494-4eab-b5ce-2a71352ea2a6" }, "track": "KASAN", "fuzz": { "focus": [ "kvm", "net" ], "focus_symbols": [ "skb_segment", "tun_get_user", "tap_get_user", "packet_snd", "tpacket_snd", "receive_big", "receive_mergeable" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RVTiYjMzQ7LAogICAgJiMzNDtUQVAmIzM0OywKICAgICYjMzQ7TUFDVlRBUCYjMzQ7LAogICAgJiMzNDtQQUNLRVQmIzM0OywKICAgICYjMzQ7VklSVElPX05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NrYl9zZWdtZW50JiMzNDssCiAgICAmIzM0O3R1bl9nZXRfdXNlciYjMzQ7LAogICAgJiMzNDt0YXBfZ2V0X3VzZXImIzM0OywKICAgICYjMzQ7cGFja2V0X3NuZCYjMzQ7LAogICAgJiMzNDt0cGFja2V0X3NuZCYjMzQ7LAogICAgJiMzNDtyZWNlaXZlX2JpZyYjMzQ7LAogICAgJiMzNDtyZWNlaXZlX21lcmdlYWJsZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBwb3RlbnRpYWwgaXNzdWVzIHdpdGggR1NPIHNpemUgYW5kIHNlZ21lbnQgY2FsY3VsYXRpb25zLCBsaWtlbHkgcHJldmVudGluZyBpbnRlZ2VyIG92ZXJmbG93cywgZXhjZXNzaXZlIHNlZ21lbnQgY291bnRzLCBvciBkaXZpc2lvbiBieSB6ZXJvLiBJdCBlbmZvcmNlcyBhIG1pbmltdW0gYGdzb19zaXplYCBhbmQgbGltaXRzIGBwYXJ0aWFsX3NlZ3NgIHRvIGBHU09fTUFYX1NFR1NgLiBUaGVzZSBhcmUgYXJpdGhtZXRpYyBhbmQgYm91bmRzLWNoZWNraW5nIGZpeGVzLiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb2YgbmV3IGRhdGEgc3RydWN0dXJlcywgbm8gY2hhbmdlcyB0byBtZW1vcnkgaW5pdGlhbGl6YXRpb24sIGFuZCBubyByaXNrIG9mIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNpbmcgaXQgaW4gY29udHJvbCBmbG93LiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgY3Jhc2hlcyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGxvZ2ljIGZvciBHU08gc2VnbWVudGF0aW9uIChgc2tiX3NlZ21lbnRgKSBhbmQgdmlydGlvIG5ldCBoZWFkZXIgcGFyc2luZyAoYF9fdmlydGlvX25ldF9oZHJfdG9fc2tiYCkuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGhvdyBwYWNrZXRzIGFyZSBzZWdtZW50ZWQgYW5kIGhvdyB2aXJ0aW8gaGVhZGVycyBhcmUgdmFsaWRhdGVkLCB3aGljaCBhcmUgcmVhY2hhYmxlIHZpYSBUVU4vVEFQIGRldmljZXMsIEFGX1BBQ0tFVCBzb2NrZXRzLCBhbmQgdmlydGlvLW5ldC4gVGhlIGNoYW5nZXMgaGF2ZSBmdW5jdGlvbmFsIGltcGFjdCBhbmQgYXJlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTk6MTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhM2JjZDAxM2FmYTVhODQ0MDZkMmNiYzE1NmQ1NjI1YmVhMGMzOGM0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMTk6MTk6NTEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaFxuaW5kZXggZjM2ZDIxYjViYzE5ZS4uYzM4MWI5MTZjMWI1NCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvX25ldC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaFxuQEAgLTYsNiAmIzQzOzYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcHY2LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91ZHAuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvdGNwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L3RjcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC92aXJ0aW9fbmV0LmhcdTAwM2VcbiBcbkBAIC0xNzksNiAmIzQzOzE4MCw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IF9fdmlydGlvX25ldF9oZHJfdG9fc2tiKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0aWYgKHNrYi1cdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICAgc2tiLVx1MDAzZWNzdW1fb2Zmc2V0ICE9IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKSlcbiBcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRcdFx0QlVJTERfQlVHX09OKFRDUF9NSU5fR1NPX1NJWkUgKiBHU09fTUFYX1NFR1MgXHUwMDNjIEdTT19NQVhfU0laRSk7XG4mIzQzO1x0XHRcdGdzb19zaXplID0gbWF4KGdzb19zaXplLCBUQ1BfTUlOX0dTT19TSVpFKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmNcbmluZGV4IGM4MmExNDcyYTVlYTguLjQzOWNiZmViMDJiZDYgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9za2J1ZmYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc2tidWZmLmNcbkBAIC00ODYwLDcgJiM0Mzs0ODYwLDcgQEAgc3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50KHN0cnVjdCBza19idWZmICpoZWFkX3NrYixcbiBcdFx0ICogZG9lc24mIzM5O3QgZml0IGludG8gYW4gTVNTIHNpemVkIGJsb2NrLCBzbyB0YWtlIGNhcmUgb2YgdGhhdFxuIFx0XHQgKiBub3cuXG4gXHRcdCAqL1xuLVx0XHRwYXJ0aWFsX3NlZ3MgPSBsZW4gLyBtc3M7XG4mIzQzO1x0XHRwYXJ0aWFsX3NlZ3MgPSBtaW4obGVuIC8gbXNzLCBHU09fTUFYX1NFR1MpO1xuIFx0XHRpZiAocGFydGlhbF9zZWdzIFx1MDAzZSAxKVxuIFx0XHRcdG1zcyAqPSBwYXJ0aWFsX3NlZ3M7XG4gXHRcdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxOToxOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFVOJiMzNDssCiAgICAmIzM0O1RBUCYjMzQ7LAogICAgJiMzNDtNQUNWVEFQJiMzNDssCiAgICAmIzM0O1BBQ0tFVCYjMzQ7LAogICAgJiMzNDtWSVJUSU9fTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2tiX3NlZ21lbnQmIzM0OywKICAgICYjMzQ7dHVuX2dldF91c2VyJiMzNDssCiAgICAmIzM0O3RhcF9nZXRfdXNlciYjMzQ7LAogICAgJiMzNDtwYWNrZXRfc25kJiMzNDssCiAgICAmIzM0O3RwYWNrZXRfc25kJiMzNDssCiAgICAmIzM0O3JlY2VpdmVfYmlnJiMzNDssCiAgICAmIzM0O3JlY2VpdmVfbWVyZ2VhYmxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBsb2dpYyBmb3IgR1NPIHNlZ21lbnRhdGlvbiAoYHNrYl9zZWdtZW50YCkgYW5kIHZpcnRpbyBuZXQgaGVhZGVyIHBhcnNpbmcgKGBfX3ZpcnRpb19uZXRfaGRyX3RvX3NrYmApLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBob3cgcGFja2V0cyBhcmUgc2VnbWVudGVkIGFuZCBob3cgdmlydGlvIGhlYWRlcnMgYXJlIHZhbGlkYXRlZCwgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgVFVOL1RBUCBkZXZpY2VzLCBBRl9QQUNLRVQgc29ja2V0cywgYW5kIHZpcnRpby1uZXQuIFRoZSBjaGFuZ2VzIGhhdmUgZnVuY3Rpb25hbCBpbXBhY3QgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTNiY2QwMTNhZmE1YTg0NDA2ZDJjYmMxNTZkNTYyNWJlYTBjMzhjNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDE5OjE5OjUxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaAppbmRleCBmMzZkMjFiNWJjMTllLi5jMzgxYjkxNmMxYjU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaApAQCAtNiw2ICYjNDM7Niw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvaXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pcHY2LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdWRwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC90Y3AuaCZndDsKICNpbmNsdWRlICZsdDt1YXBpL2xpbnV4L3RjcC5oJmd0OwogI2luY2x1ZGUgJmx0O3VhcGkvbGludXgvdmlydGlvX25ldC5oJmd0OwogCkBAIC0xNzksNiAmIzQzOzE4MCw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IF9fdmlydGlvX25ldF9oZHJfdG9fc2tiKHN0cnVjdCBza19idWZmICpza2IsCiAJCQlpZiAoc2tiLSZndDtpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCAmYW1wOyZhbXA7CiAJCQkgICAgc2tiLSZndDtjc3VtX29mZnNldCAhPSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjaykpCiAJCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CQkJQlVJTERfQlVHX09OKFRDUF9NSU5fR1NPX1NJWkUgKiBHU09fTUFYX1NFR1MgJmx0OyBHU09fTUFYX1NJWkUpOwomIzQzOwkJCWdzb19zaXplID0gbWF4KGdzb19zaXplLCBUQ1BfTUlOX0dTT19TSVpFKTsKIAkJCWJyZWFrOwogCQl9CiAKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmMKaW5kZXggYzgyYTE0NzJhNWVhOC4uNDM5Y2JmZWIwMmJkNiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc2tidWZmLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc2tidWZmLmMKQEAgLTQ4NjAsNyAmIzQzOzQ4NjAsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKmhlYWRfc2tiLAogCQkgKiBkb2VzbiYjMzk7dCBmaXQgaW50byBhbiBNU1Mgc2l6ZWQgYmxvY2ssIHNvIHRha2UgY2FyZSBvZiB0aGF0CiAJCSAqIG5vdy4KIAkJICovCi0JCXBhcnRpYWxfc2VncyA9IGxlbiAvIG1zczsKJiM0MzsJCXBhcnRpYWxfc2VncyA9IG1pbihsZW4gLyBtc3MsIEdTT19NQVhfU0VHUyk7CiAJCWlmIChwYXJ0aWFsX3NlZ3MgJmd0OyAxKQogCQkJbXNzICo9IHBhcnRpYWxfc2VnczsKIAkJZWxzZQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxOToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzE3CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE5ldHdvcmtpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0b3VjaGVzIHNvbWUgcHJldHR5IGZ1bmRhbWVudGFsIG5ldHdvcmtpbmcgY29kZS4gSXQmIzM5O3MgdG91Y2hpbmcgYGluY2x1ZGUvbGludXgvdmlydGlvX25ldC5oYCBhbmQgYG5ldC9jb3JlL3NrYnVmZi5jYCwgd2hpY2ggaW1tZWRpYXRlbHkgcmFpc2VzIG15IGV5ZWJyb3dzIOKAkyB0aGF0JiMzOTtzIGNvcmUgc3R1ZmYuIFNwZWNpZmljYWxseSwgaXQgYXBwZWFycyB0byBiZSBtb2RpZnlpbmcgaG93IFRDUCBzZWdtZW50YXRpb24gb2ZmbG9hZCAoVFNPKSBpcyBoYW5kbGVkLCBnaXZlbiB0aGUgY29udGV4dCBpbiBgX192aXJ0aW9fbmV0X2hkcl90b19za2JgIHdpdGhpbiBgdmlydGlvX25ldC5oYCwgYW5kIGBza2Jfc2VnbWVudGAgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYC4KCkkgY2FuIHNlZSBzb21lIHNpZ25pZmljYW50IGNoYW5nZXMgaGVyZS4gSW4gYGluY2x1ZGUvbGludXgvdmlydGlvX25ldC5oYCwgaXQgaW50cm9kdWNlcyBhIGBCVUlMRF9CVUdfT05gIGNoZWNrIGFuZCBtb2RpZmllcyB0aGUgYGdzb19zaXplYCBjYWxjdWxhdGlvbiwgc3BlY2lmaWNhbGx5IHVzaW5nIGBUQ1BfTUlOX0dTT19TSVpFYC4gVGhpcyBzdWdnZXN0cyB0aGV5JiMzOTtyZSB0cnlpbmcgdG8gZW5mb3JjZSBhIG1pbmltdW0gR1NPIHNpemUsIGxpa2VseSB0byBhbGlnbiB3aXRoIHNvbWUgaGFyZHdhcmUgY29uc3RyYWludCBvciBvcHRpbWl6YXRpb24uIFRoZSBgbWluYCBmdW5jdGlvbiBpbiBgbmV0L2NvcmUvc2tidWZmLmNgLCBzdWdnZXN0cyB0aGVyZSBpcyBhbiB1cHBlciBib3VuZCBvbiBgbGVuIC8gbXNzYCwgd2hpY2ggcHJldmVudHMgbGFyZ2Ugc2VnbWVudHMgZnJvbSBiZWluZyBjcmVhdGVkLiBUaGlzIGxvb2tzIHJlbGF0ZWQgdG8gaG93IHBhY2tldHMgYXJlIGZyYWdtZW50ZWQgYW5kIHJlYXNzZW1ibGVkLCB3aGljaCBpcyB3aGVyZSBUU08gb2Z0ZW4gY29tZXMgaW50byBwbGF5LgoKR2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgZnVuY3Rpb25hbCBjaGFuZ2VzLCB0aGlzIHBhdGNoIHdhcnJhbnRzIHRob3JvdWdoIGZ1enppbmcuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiBpZGVudGlmeWluZyB0aGUga2V5IGVudHJ5IHBvaW50cy4gYHNrYl9zZWdtZW50YCBpcyBhIG5vbi1zdGF0aWMsIGV4cG9ydGVkIGZ1bmN0aW9uLCB3aGljaCBtZWFucyBpdCYjMzk7cyBhIGRpcmVjdCBBUEkgZW50cnlwb2ludC4gVGhhdCYjMzk7cyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4gYF9fdmlydGlvX25ldF9oZHJfdG9fc2tiYCwgb24gdGhlIG90aGVyIGhhbmQsIGlzIHN0YXRpYyBhbmQgaW5saW5lLCBtZWFuaW5nIGl0JiMzOTtzIGlubGluZWQuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIHRyYWNlIGl0cyB1c2VzIHRvIGZpbmQgdGhlIGFjdHVhbCBjYWxsIHNpdGVzIHRoYXQgSSYjMzk7bGwgbmVlZCB0byBmdXp6LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fdmlydGlvX25ldF9oZHJfdG9fc2tiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvdmlydGlvX25ldC5oPTI5PXN0YXRpYyBpbmxpbmUgaW50IHZpcnRpb19uZXRfaGRyX3NldF9wcm90byhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmluY2x1ZGUvbGludXgvdmlydGlvX25ldC5oLTUwLVxuaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0Lmg6NTE6c3RhdGljIGlubGluZSBpbnQgX192aXJ0aW9fbmV0X2hkcl90b19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYixcbmluY2x1ZGUvbGludXgvdmlydGlvX25ldC5oLTUyLVx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCB2aXJ0aW9fbmV0X2hkciAqaGRyLFxuLS1cbmluY2x1ZGUvbGludXgvdmlydGlvX25ldC5oPTIwNz1zdGF0aWMgaW5saW5lIGludCB2aXJ0aW9fbmV0X2hkcl90b19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaC0yMTAte1xuaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0Lmg6MjExOlx0cmV0dXJuIF9fdmlydGlvX25ldF9oZHJfdG9fc2tiKHNrYiwgaGRyLCBsaXR0bGVfZW5kaWFuLCBoZHItXHUwMDNlZ3NvX3R5cGUpO1xuaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmgtMjEyLX1cbi0tXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaD0yOTY9dmlydGlvX25ldF9oZHJfdG5sX3RvX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmluY2x1ZGUvbGludXgvdmlydGlvX25ldC5oLTM0NS1cdC8qIExldCB0aGUgYmFzaWMgcGFyc2luZyBkZWFsIHdpdGggcGxhaW4gR1NPIGZlYXR1cmVzLiAqL1xuaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0Lmg6MzQ2Olx0cmV0ID0gX192aXJ0aW9fbmV0X2hkcl90b19za2Ioc2tiLCBoZHIsIHRydWUsXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaC0zNDctXHRcdFx0XHQgICAgICBoZHItXHUwMDNlZ3NvX3R5cGUgXHUwMDI2IH5nc29fdHVubmVsX3R5cGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MjUKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHQgcHJvY2Vzc2VzOgoKKipBbmFseXppbmcgdmlydGlvX25ldCBIZWFkZXIgQ29udmVyc2lvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGB2aXJ0aW9fbmV0X2hkcl90b19za2JgIGFuZCBgdmlydGlvX25ldF9oZHJfdG5sX3RvX3NrYmAgZnVuY3Rpb25zLCBhbmQgdGhlIGZhY3QgdGhhdCB0aGV5JiMzOTtyZSBib3RoIGRlY2xhcmVkIGFzIGBzdGF0aWMgaW5saW5lYCBpcyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZy4gVGhpcyBtZWFucyB0aGV5JiMzOTtyZSBsaWtlbHkgcGVyZm9ybWFuY2UtY3JpdGljYWwgYW5kIG9wdGltaXplZCBmb3IgaW5saW5pbmcuIE5vdywgbXkgbmV4dCBtb3ZlIGlzIGNsZWFyOiBJIG5lZWQgdG8gdHJhY2UgdGhlaXIgdXNhZ2UuIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgKndoZXJlKiB0aGV5JiMzOTtyZSBiZWluZyBjYWxsZWQgd2l0aGluIHRoZSBicm9hZGVyIHZpcnRpby1uZXQgaW1wbGVtZW50YXRpb24uIEZpbmRpbmcgdGhlaXIgY2FsbCBzaXRlcyB3aWxsIGdpdmUgbWUgY3J1Y2lhbCBjb250ZXh0LiBUaGlzIHNob3VsZCB0ZWxsIG1lIHdoYXQgZGF0YSBpcyBiZWluZyB0cmFuc2xhdGVkLCB3aGVuIGFuZCBieSB3aGF0IHBhcnRzIG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBVbmRlcnN0YW5kaW5nIHRoaXMgaXMga2V5IHRvIGZvcm1pbmcgYSBmdWxsZXIgdW5kZXJzdGFuZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxOToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aXJ0aW9fbmV0X2hkcl90b19za2ImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC91bS9kcml2ZXJzL3ZlY3Rvcl90cmFuc3BvcnRzLmM9MTk2PXN0YXRpYyBpbnQgcmF3X3ZlcmlmeV9oZWFkZXIoXG4tLVxuYXJjaC91bS9kcml2ZXJzL3ZlY3Rvcl90cmFuc3BvcnRzLmMtMjExLVxuYXJjaC91bS9kcml2ZXJzL3ZlY3Rvcl90cmFuc3BvcnRzLmM6MjEyOlx0dmlydGlvX25ldF9oZHJfdG9fc2tiKHNrYiwgdmhlYWRlciwgdmlydGlvX2xlZ2FjeV9pc19saXR0bGVfZW5kaWFuKCkpO1xuYXJjaC91bS9kcml2ZXJzL3ZlY3Rvcl90cmFuc3BvcnRzLmMtMjEzLVx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy9uZXQvdHVuX3ZuZXQuaD0xODA9c3RhdGljIGlubGluZSBpbnQgdHVuX3ZuZXRfaGRyX3RvX3NrYih1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQvdHVuX3ZuZXQuaC0xODIte1xuZHJpdmVycy9uZXQvdHVuX3ZuZXQuaDoxODM6XHRyZXR1cm4gdmlydGlvX25ldF9oZHJfdG9fc2tiKHNrYiwgaGRyLCB0dW5fdm5ldF9pc19saXR0bGVfZW5kaWFuKGZsYWdzKSk7XG5kcml2ZXJzL25ldC90dW5fdm5ldC5oLTE4NC19XG4tLVxuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jPTgzNj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnBhZ2VfdG9fc2tiKHN0cnVjdCB2aXJ0bmV0X2luZm8gKnZpLFxuLS1cbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYy04ODgtXHQvKiBDb3B5IGFsbCBmcmFtZSBpZiBpdCBmaXRzIHNrYi1cdTAwM2VoZWFkLCBvdGhlcndpc2VcbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYzo4ODk6XHQgKiB3ZSBsZXQgdmlydGlvX25ldF9oZHJfdG9fc2tiKCkgYW5kIEdSTyBwdWxsIGhlYWRlcnMgYXMgbmVlZGVkLlxuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jLTg5MC1cdCAqL1xuLS1cbmluY2x1ZGUvbGludXgvdmlydGlvX25ldC5oPTI5PXN0YXRpYyBpbmxpbmUgaW50IHZpcnRpb19uZXRfaGRyX3NldF9wcm90byhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmluY2x1ZGUvbGludXgvdmlydGlvX25ldC5oLTUwLVxuaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0Lmg6NTE6c3RhdGljIGlubGluZSBpbnQgX192aXJ0aW9fbmV0X2hkcl90b19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYixcbmluY2x1ZGUvbGludXgvdmlydGlvX25ldC5oLTUyLVx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCB2aXJ0aW9fbmV0X2hkciAqaGRyLFxuLS1cbmluY2x1ZGUvbGludXgvdmlydGlvX25ldC5oLTIwNi1cbmluY2x1ZGUvbGludXgvdmlydGlvX25ldC5oOjIwNzpzdGF0aWMgaW5saW5lIGludCB2aXJ0aW9fbmV0X2hkcl90b19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYixcbmluY2x1ZGUvbGludXgvdmlydGlvX25ldC5oLTIwOC1cdFx0XHRcdFx0Y29uc3Qgc3RydWN0IHZpcnRpb19uZXRfaGRyICpoZHIsXG4tLVxuaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmgtMjEwLXtcbmluY2x1ZGUvbGludXgvdmlydGlvX25ldC5oOjIxMTpcdHJldHVybiBfX3ZpcnRpb19uZXRfaGRyX3RvX3NrYihza2IsIGhkciwgbGl0dGxlX2VuZGlhbiwgaGRyLVx1MDAzZWdzb190eXBlKTtcbmluY2x1ZGUvbGludXgvdmlydGlvX25ldC5oLTIxMi19XG4tLVxuaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0Lmg9Mjk2PXZpcnRpb19uZXRfaGRyX3RubF90b19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaC0zMTAtXHRpZiAoIWdzb190dW5uZWxfdHlwZSlcbmluY2x1ZGUvbGludXgvdmlydGlvX25ldC5oOjMxMTpcdFx0cmV0dXJuIHZpcnRpb19uZXRfaGRyX3RvX3NrYihza2IsIGhkciwgbGl0dGxlX2VuZGlhbik7XG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaC0zMTItXG4tLVxuaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmgtMzQ1LVx0LyogTGV0IHRoZSBiYXNpYyBwYXJzaW5nIGRlYWwgd2l0aCBwbGFpbiBHU08gZmVhdHVyZXMuICovXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaDozNDY6XHRyZXQgPSBfX3ZpcnRpb19uZXRfaGRyX3RvX3NrYihza2IsIGhkciwgdHJ1ZSxcbmluY2x1ZGUvbGludXgvdmlydGlvX25ldC5oLTM0Ny1cdFx0XHRcdCAgICAgIGhkci1cdTAwM2Vnc29fdHlwZSBcdTAwMjYgfmdzb190dW5uZWxfdHlwZSk7XG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yNzM2PXN0YXRpYyBpbnQgdHBhY2tldF9zbmQoc3RydWN0IHBhY2tldF9zb2NrICpwbywgc3RydWN0IG1zZ2hkciAqbXNnKVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjg5NC1cdFx0aWYgKGhhc192bmV0X2hkcikge1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyODk1Olx0XHRcdGlmICh2aXJ0aW9fbmV0X2hkcl90b19za2Ioc2tiLCBcdTAwMjZ2bmV0X2hkciwgdmlvX2xlKCkpKSB7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI4OTYtXHRcdFx0XHR0cF9sZW4gPSAtRUlOVkFMO1xuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9Mjk2Nj1zdGF0aWMgaW50IHBhY2tldF9zbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzA5Ni1cdGlmICh2bmV0X2hkcl9zeikge1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYzozMDk3Olx0XHRlcnIgPSB2aXJ0aW9fbmV0X2hkcl90b19za2Ioc2tiLCBcdTAwMjZ2bmV0X2hkciwgdmlvX2xlKCkpO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMDk4LVx0XHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNDMKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5ldHdvcmsgSGVhZGVyIENvbnZlcnNpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgcGFja2V0IGhlYWRlcnMgYXJlIGhhbmRsZWQgYWNyb3NzIGEgZmV3IGRpZmZlcmVudCBkcml2ZXJzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2F0ZWdvcml6ZSBhIGZldyBrZXkgZnVuY3Rpb25zLiBgdHVuX3ZuZXRfaGRyX3RvX3NrYmAgaXMgdXNlZCBzcGVjaWZpY2FsbHkgaW4gdGhlIGB0dW5gLCBgbWFjdnRhcGAsIGFuZCBgdGFwYCBkcml2ZXJzIOKAkyBhbGwgb2Ygd2hpY2ggYXJlIGludm9sdmVkIGluIHR1bm5lbGluZyBvciBicmlkZ2luZyBuZXR3b3JrIHRyYWZmaWMuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LCBmb2N1c2VzIG1lLgoKVGhlbiwgSSYjMzk7dmUgZ290IGB2aXJ0aW9fbmV0X2hkcl90b19za2JgLCBhbmQgSSBzZWUgdGhhdCBmdW5jdGlvbiBhcHBlYXJpbmcgaW4gdGhlIGNvbnRleHQgb2YgYGFmX3BhY2tldC5jYCDigJMgc3BlY2lmaWNhbGx5IHdpdGhpbiBgdHBhY2tldF9zbmRgIGFuZCBgcGFja2V0X3NuZGAuIFRoaXMgZmVlbHMgdmVyeSBzcGVjaWZpYyB0byB0aGUgcGFja2V0IHNvY2tldCBpbmZyYXN0cnVjdHVyZSwgc28gaXQgc3VnZ2VzdHMgYSBkaWZmZXJlbnQgdHlwZSBvZiBoZWFkZXIgY29udmVyc2lvbiByZWxhdGVkIHRvIHBhY2tldCBzb2NrZXQgc2VuZCBvcGVyYXRpb25zLgoKQW5kIGZpbmFsbHksIGBza2Jfc2VnbWVudGAsIHdoaWNoIEkmIzM5O20gYWxyZWFkeSBxdWl0ZSBmYW1pbGlhciB3aXRoLiBJdCBpcyBjb3JlIG5ldHdvcmtpbmcgYW5kIHVzZWQgYWNyb3NzIG1hbnkgYXJlYXMsIHNvIHRoYXQgZmVlbHMgZXhwZWN0ZWQuCgpGb3IgdGhpcyBhbmFseXNpcywgSSYjMzk7bGwgbm93IGZvY3VzIGluIG9uIGB0dW5fdm5ldF9oZHJfdG9fc2tiYCBhbmQgbG9vayBhdCBpdCBtb3JlIGNsb3NlbHksIGdpdmVuIG15IHByaW9yIHVuZGVyc3RhbmRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTk6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHVuX3ZuZXRfaGRyX3RvX3NrYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90YXAuYz01NzI9c3RhdGljIHNzaXplX3QgdGFwX2dldF91c2VyKHN0cnVjdCB0YXBfcXVldWUgKnEsIHZvaWQgKm1zZ19jb250cm9sLFxuLS1cbmRyaXZlcnMvbmV0L3RhcC5jLTY1MC1cdGlmICh2bmV0X2hkcl9sZW4pIHtcbmRyaXZlcnMvbmV0L3RhcC5jOjY1MTpcdFx0ZXJyID0gdHVuX3ZuZXRfaGRyX3RvX3NrYihxLVx1MDAzZWZsYWdzLCBza2IsIFx1MDAyNnZuZXRfaGRyKTtcbmRyaXZlcnMvbmV0L3RhcC5jLTY1Mi1cdFx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L3RhcC5jPTEwNDQ9c3RhdGljIGludCB0YXBfZ2V0X3VzZXJfeGRwKHN0cnVjdCB0YXBfcXVldWUgKnEsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxuLS1cbmRyaXZlcnMvbmV0L3RhcC5jLTEwODUtXHRpZiAodm5ldF9oZHJfbGVuKSB7XG5kcml2ZXJzL25ldC90YXAuYzoxMDg2Olx0XHRlcnIgPSB0dW5fdm5ldF9oZHJfdG9fc2tiKHEtXHUwMDNlZmxhZ3MsIHNrYiwgZ3NvKTtcbmRyaXZlcnMvbmV0L3RhcC5jLTEwODctXHRcdGlmIChlcnIpIHtcbi0tXG5kcml2ZXJzL25ldC90dW5fdm5ldC5oPTE3ND1zdGF0aWMgaW5saW5lIGludCB0dW5fdm5ldF9oZHJfcHV0KGludCBzeiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbmRyaXZlcnMvbmV0L3R1bl92bmV0LmgtMTc5LVxuZHJpdmVycy9uZXQvdHVuX3ZuZXQuaDoxODA6c3RhdGljIGlubGluZSBpbnQgdHVuX3ZuZXRfaGRyX3RvX3NrYih1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBza19idWZmICpza2IsXG5kcml2ZXJzL25ldC90dW5fdm5ldC5oLTE4MS1cdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCB2aXJ0aW9fbmV0X2hkciAqaGRyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4MjMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4gSSBuZWVkIHRvIHRyYWNrIGRvd24gYHR1bl92bmV0X2hkcl90b19za2JgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayBgdHVuLmNgLCB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgaXQuIEJ1dCB3YWl0IGEgbWludXRlLi4uIGl0JiMzOTtzIG5vdCB0aGVyZSEgQWgsIHJpZ2h0LCB0aGF0JiMzOTtzIGl0LCBgdHVuX3ZuZXQuaGAgaXMgaW5jbHVkZWQgaW4gYHR1bi5jYC4gSSBuZWVkIHRvIGxvb2sgaW4gdGhhdCBoZWFkZXIgZmlsZSwgdGhhdCYjMzk7cyB3aGVyZSB0aGUgZGVmaW5pdGlvbiBpcyBtb3N0IGxpa2VseS4gR29vZCwgdGhhdCBzYXZlcyBtZSBzb21lIHRpbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHVuX3ZuZXRfaGRyX3RvX3NrYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3R1bi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTk6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA0MQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgS2VybmVsIENvZGU6IEEgUXVpY2sgQ2hlY2sqKgoKUmlnaHQsIHNvIEkgc2VlIGEgbWVudGlvbiBvZiBgdHVuLmNgIGFuZCBgdHVuX3ZuZXRfaGRyX3RvX3NrYmAuIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtXYWl0LCBpcyB0aGF0IHdoZXJlIHRoZSBgdm5ldF9oZHJgIGludGVyYWN0aW9uIGhhcHBlbnM/JiMzNDsgQnV0IEkmIzM5O20gbm90IGdvaW5nIHRvIGp1bXAgdG8gY29uY2x1c2lvbnMuIEJldHRlciB0byBxdWlja2x5IHZlcmlmeSBieSBnb2luZyBkaXJlY3RseSB0byB0aGUgc291cmNlLiBMZXQmIzM5O3MgZ2V0IHRoZSBjb250ZXh0IHJpZ2h0OiBhIGRpdmUgaW50byBgdHVuLmNgIGlzIHdhcnJhbnRlZCB0byBjb25maXJtIHdoZXRoZXIgYHZuZXRfaGRyYCBpcyB1c2VkIGluIHRoYXQgcGFydGljdWxhciBmdW5jdGlvbi4gQSBxdWljayBzY2FuIHdpbGwgdGVsbCB0aGUgdGFsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTk6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm5ldF9oZHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90dW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90dW4uYz0xODI9c3RydWN0IHR1bl9zdHJ1Y3Qge1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTE5NS1cdGludFx0XHRcdGFsaWduO1xuZHJpdmVycy9uZXQvdHVuLmM6MTk2Olx0aW50XHRcdFx0dm5ldF9oZHJfc3o7XG5kcml2ZXJzL25ldC90dW4uYy0xOTctXHRpbnRcdFx0XHRzbmRidWY7XG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9MTc3ND1zdGF0aWMgc3NpemVfdCB0dW5fZ2V0X3VzZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0xODEyLVx0aWYgKHR1bi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1ZORVRfSERSKSB7XG5kcml2ZXJzL25ldC90dW4uYzoxODEzOlx0XHRpbnQgdm5ldF9oZHJfc3ogPSBSRUFEX09OQ0UodHVuLVx1MDAzZXZuZXRfaGRyX3N6KTtcbmRyaXZlcnMvbmV0L3R1bi5jLTE4MTQtXG5kcml2ZXJzL25ldC90dW4uYzoxODE1Olx0XHRmZWF0dXJlcyA9IHR1bl92bmV0X2hkcl9ndWVzdF9mZWF0dXJlcyh2bmV0X2hkcl9zeik7XG5kcml2ZXJzL25ldC90dW4uYzoxODE2Olx0XHRoZHJfbGVuID0gX190dW5fdm5ldF9oZHJfZ2V0KHZuZXRfaGRyX3N6LCB0dW4tXHUwMDNlZmxhZ3MsXG5kcml2ZXJzL25ldC90dW4uYy0xODE3LVx0XHRcdFx0XHQgICAgIGZlYXR1cmVzLCBmcm9tLCBnc28pO1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTE4MjAtXG5kcml2ZXJzL25ldC90dW4uYzoxODIxOlx0XHRsZW4gLT0gdm5ldF9oZHJfc3o7XG5kcml2ZXJzL25ldC90dW4uYy0xODIyLVx0fVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTE4OTQtXG5kcml2ZXJzL25ldC90dW4uYzoxODk1Olx0aWYgKHR1bl92bmV0X2hkcl90bmxfdG9fc2tiKHR1bi1cdTAwM2VmbGFncywgZmVhdHVyZXMsIHNrYiwgXHUwMDI2aGRyKSkge1xuZHJpdmVycy9uZXQvdHVuLmMtMTg5Ni1cdFx0YXRvbWljX2xvbmdfaW5jKFx1MDAyNnR1bi1cdTAwM2VyeF9mcmFtZV9lcnJvcnMpO1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTIwODY9c3RhdGljIHNzaXplX3QgdHVuX3B1dF91c2VyX3hkcChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTIwOTAte1xuZHJpdmVycy9uZXQvdHVuLmM6MjA5MTpcdGludCB2bmV0X2hkcl9zeiA9IDA7XG5kcml2ZXJzL25ldC90dW4uYy0yMDkyLVx0c2l6ZV90IHNpemUgPSB4ZHBfZnJhbWUtXHUwMDNlbGVuO1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTIwOTctXG5kcml2ZXJzL25ldC90dW4uYzoyMDk4Olx0XHR2bmV0X2hkcl9zeiA9IFJFQURfT05DRSh0dW4tXHUwMDNldm5ldF9oZHJfc3opO1xuZHJpdmVycy9uZXQvdHVuLmM6MjA5OTpcdFx0cmV0ID0gdHVuX3ZuZXRfaGRyX3B1dCh2bmV0X2hkcl9zeiwgaXRlciwgXHUwMDI2Z3NvKTtcbmRyaXZlcnMvbmV0L3R1bi5jLTIxMDAtXHRcdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMjEwMy1cbmRyaXZlcnMvbmV0L3R1bi5jOjIxMDQ6XHRyZXQgPSBjb3B5X3RvX2l0ZXIoeGRwX2ZyYW1lLVx1MDAzZWRhdGEsIHNpemUsIGl0ZXIpICYjNDM7IHZuZXRfaGRyX3N6O1xuZHJpdmVycy9uZXQvdHVuLmMtMjEwNS1cbi0tXG5kcml2ZXJzL25ldC90dW4uYz0yMTE0PXN0YXRpYyBzc2l6ZV90IHR1bl9wdXRfdXNlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTIxMjItXHRpbnQgdmxhbl9obGVuID0gMDtcbmRyaXZlcnMvbmV0L3R1bi5jOjIxMjM6XHRpbnQgdm5ldF9oZHJfc3ogPSAwO1xuZHJpdmVycy9uZXQvdHVuLmMtMjEyNC1cdGludCByZXQ7XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMjEyOS1cdGlmICh0dW4tXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9WTkVUX0hEUilcbmRyaXZlcnMvbmV0L3R1bi5jOjIxMzA6XHRcdHZuZXRfaGRyX3N6ID0gUkVBRF9PTkNFKHR1bi1cdTAwM2V2bmV0X2hkcl9zeik7XG5kcml2ZXJzL25ldC90dW4uYy0yMTMxLVxuZHJpdmVycy9uZXQvdHVuLmM6MjEzMjpcdHRvdGFsID0gc2tiLVx1MDAzZWxlbiAmIzQzOyB2bGFuX2hsZW4gJiM0Mzsgdm5ldF9oZHJfc3o7XG5kcml2ZXJzL25ldC90dW4uYy0yMTMzLVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTIxNDctXG5kcml2ZXJzL25ldC90dW4uYzoyMTQ4Olx0aWYgKHZuZXRfaGRyX3N6KSB7XG5kcml2ZXJzL25ldC90dW4uYy0yMTQ5LVx0XHRzdHJ1Y3QgdmlydGlvX25ldF9oZHJfdjFfaGFzaF90dW5uZWwgaGRyO1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTIxNTItXHRcdG1lbXNldChcdTAwMjZoZHIsIDAsIHNpemVvZihoZHIpKTtcbmRyaXZlcnMvbmV0L3R1bi5jOjIxNTM6XHRcdHJldCA9IHR1bl92bmV0X2hkcl90bmxfZnJvbV9za2IodHVuLVx1MDAzZWZsYWdzLCB0dW4tXHUwMDNlZGV2LCBza2IsXG5kcml2ZXJzL25ldC90dW4uYy0yMTU0LVx0XHRcdFx0XHRcdFx1MDAyNmhkcik7XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMjE2Mi1cdFx0Z3NvID0gKHN0cnVjdCB2aXJ0aW9fbmV0X2hkciAqKVx1MDAyNmhkcjtcbmRyaXZlcnMvbmV0L3R1bi5jOjIxNjM6XHRcdHJldCA9IF9fdHVuX3ZuZXRfaGRyX3B1dCh2bmV0X2hkcl9zeiwgdHVuLVx1MDAzZWRldi1cdTAwM2VmZWF0dXJlcyxcbmRyaXZlcnMvbmV0L3R1bi5jLTIxNjQtXHRcdFx0XHRcdCBpdGVyLCBnc28pO1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTI1MTA9c3RhdGljIGludCB0dW5feGRwX29uZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTI1ODktXG5kcml2ZXJzL25ldC90dW4uYzoyNTkwOlx0ZmVhdHVyZXMgPSB0dW5fdm5ldF9oZHJfZ3Vlc3RfZmVhdHVyZXMoUkVBRF9PTkNFKHR1bi1cdTAwM2V2bmV0X2hkcl9zeikpO1xuZHJpdmVycy9uZXQvdHVuLmMtMjU5MS1cdHRubF9oZHIgPSAoc3RydWN0IHZpcnRpb19uZXRfaGRyX3YxX2hhc2hfdHVubmVsICopZ3NvO1xuZHJpdmVycy9uZXQvdHVuLmM6MjU5MjpcdGlmICh0dW5fdm5ldF9oZHJfdG5sX3RvX3NrYih0dW4tXHUwMDNlZmxhZ3MsIGZlYXR1cmVzLCBza2IsIHRubF9oZHIpKSB7XG5kcml2ZXJzL25ldC90dW4uYy0yNTkzLVx0XHRhdG9taWNfbG9uZ19pbmMoXHUwMDI2dHVuLVx1MDAzZXJ4X2ZyYW1lX2Vycm9ycyk7XG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9MjgyOT1zdGF0aWMgaW50IHR1bl9zZXRfaWZmKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBpZnJlcSAqaWZyKVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTI5MzEtXHRcdHR1bi1cdTAwM2V0eGZsdC5jb3VudCA9IDA7XG5kcml2ZXJzL25ldC90dW4uYzoyOTMyOlx0XHR0dW4tXHUwMDNldm5ldF9oZHJfc3ogPSBzaXplb2Yoc3RydWN0IHZpcnRpb19uZXRfaGRyKTtcbmRyaXZlcnMvbmV0L3R1bi5jLTI5MzMtXG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9MzE4MD1zdGF0aWMgbG9uZyBfX3R1bl9jaHJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzQ1OS1cdGRlZmF1bHQ6XG5kcml2ZXJzL25ldC90dW4uYzozNDYwOlx0XHRyZXQgPSB0dW5fdm5ldF9pb2N0bChcdTAwMjZ0dW4tXHUwMDNldm5ldF9oZHJfc3osIFx1MDAyNnR1bi1cdTAwM2VmbGFncywgY21kLCBhcmdwKTtcbmRyaXZlcnMvbmV0L3R1bi5jLTM0NjEtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxOToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTE5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gdGhlIGB0dW5gIERyaXZlcioqCgpPa2F5LCBzbyBJIHNlZSBgdHVuX3ZuZXRfaGRyX3RubF90b19za2JgIGdldHRpbmcgY2FsbGVkIHdpdGhpbiBgdHVuLmNgLiAgSW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZnVuY3Rpb24gYmV0dGVyIHRvIGdyYXNwIGl0cyByb2xlIGluIHRoZSBkYXRhIGZsb3cuICBUaGVyZWZvcmUsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGRlZmluaXRpb24gb2YgYHR1bl92bmV0X2hkcl90bmxfdG9fc2tiYC4gU2luY2UgaXQmIzM5O3MgaGVhZGVyIHJlbGF0ZWQsIG15IGh1bmNoIGlzIHRoYXQgaXQmIzM5O2xsIGJlIGluIGBkcml2ZXJzL25ldC90dW5fdm5ldC5oYC4gTGV0JiMzOTtzIGNvbmZpcm0gdGhhdCBhbmQgZ2V0IGEgY2xvc2VyIGxvb2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3R1bl92bmV0X2hkcl90bmxfdG9fc2tiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3R1bi5jPTE3NzQ9c3RhdGljIHNzaXplX3QgdHVuX2dldF91c2VyKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMTg5NC1cbmRyaXZlcnMvbmV0L3R1bi5jOjE4OTU6XHRpZiAodHVuX3ZuZXRfaGRyX3RubF90b19za2IodHVuLVx1MDAzZWZsYWdzLCBmZWF0dXJlcywgc2tiLCBcdTAwMjZoZHIpKSB7XG5kcml2ZXJzL25ldC90dW4uYy0xODk2LVx0XHRhdG9taWNfbG9uZ19pbmMoXHUwMDI2dHVuLVx1MDAzZXJ4X2ZyYW1lX2Vycm9ycyk7XG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9MjUxMD1zdGF0aWMgaW50IHR1bl94ZHBfb25lKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMjU5MS1cdHRubF9oZHIgPSAoc3RydWN0IHZpcnRpb19uZXRfaGRyX3YxX2hhc2hfdHVubmVsICopZ3NvO1xuZHJpdmVycy9uZXQvdHVuLmM6MjU5MjpcdGlmICh0dW5fdm5ldF9oZHJfdG5sX3RvX3NrYih0dW4tXHUwMDNlZmxhZ3MsIGZlYXR1cmVzLCBza2IsIHRubF9oZHIpKSB7XG5kcml2ZXJzL25ldC90dW4uYy0yNTkzLVx0XHRhdG9taWNfbG9uZ19pbmMoXHUwMDI2dHVuLVx1MDAzZXJ4X2ZyYW1lX2Vycm9ycyk7XG4tLVxuZHJpdmVycy9uZXQvdHVuX3ZuZXQuaD0xOTc9c3RhdGljIGlubGluZSBpbnRcbmRyaXZlcnMvbmV0L3R1bl92bmV0Lmg6MTk4OnR1bl92bmV0X2hkcl90bmxfdG9fc2tiKHVuc2lnbmVkIGludCBmbGFncywgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMsXG5kcml2ZXJzL25ldC90dW5fdm5ldC5oLTE5OS1cdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxOToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTI2CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMTIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBOZXR3b3JrIERyaXZlciBFbnRyeSBQb2ludHMqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gbWFwIG91dCB0aGUga2V5IGVudHJ5IHBvaW50cyBmb3IgdGhpcyBuZXR3b3JrIGRyaXZlciBzdHVmZi4gRnJvbSB3aGF0IEkmIzM5O20gc2VlaW5nLCBgdHVuX2dldF91c2VyYCBhbmQgYHR1bl94ZHBfb25lYCBhcmUgdGhlIGNydWNpYWwgc3RhcnRpbmcgcG9pbnRzIHRvIHVuZGVyc3RhbmQgdGhlIGJlaGF2aW9yIG9mIGB0dW4uY2AuIEZvciB0aGUgYHRhcC5jYCBzaWRlIG9mIHRoaW5ncywgYHRhcF9nZXRfdXNlcmAgYW5kIGB0YXBfZ2V0X3VzZXJfeGRwYCBzZWVtIHRvIGJlIHRoZSBwcmltYXJ5IGhvb2tzLiBJIGFsc28gbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGhvdyBgdHBhY2tldF9zbmRgIGFuZCBgcGFja2V0X3NuZGAgd29yayB3aXRoaW4gYGFmX3BhY2tldC5jYC4KCk5vdywgYHNrYl9zZWdtZW50YCBpcyBzb21ldGhpbmcgSSBrbm93IHdlbGwsIHJlc2lkaW5nIGluIGBuZXQvY29yZS9za2J1ZmYuY2AsIGl0JiMzOTtzIGJlZW4gZXhwb3J0ZWQsIGFuZCBJIHJlY2FsbCBpdCBiZWluZyBhIGtleSBwbGF5ZXIgaW4gR1NPL1RTTyBmbG93cywgc28gdGhpcyBpcyBpbXBvcnRhbnQuIEkgdGhpbmsgSSYjMzk7bGwgZGl2ZSBhIGxpdHRsZSBkZWVwZXIgaW50byBpdHMgdXNhZ2Ugbm93IHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gaG93IGV2ZXJ5dGhpbmcgZml0cyB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTk6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tiX3NlZ21lbnQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NlZ21lbnRhdGlvbi1vZmZsb2Fkcy5yc3Q9MjA1PUluc3RlYWQsIHRoZSBTQ1RQIHByb3RvY29sIGxheWVyIGJ1aWxkcyBhbiBza2Igd2l0aCB0aGUgc2VnbWVudHMgY29ycmVjdGx5XG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc2VnbWVudGF0aW9uLW9mZmxvYWRzLnJzdDoyMDY6cGFkZGVkIGFuZCBzdG9yZWQgYXMgY2hhaW5lZCBza2JzLCBhbmQgc2tiX3NlZ21lbnQoKSBzcGxpdHMgYmFzZWQgb24gdGhvc2UuXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc2VnbWVudGF0aW9uLW9mZmxvYWRzLnJzdC0yMDctVG8gc2lnbmFsIHRoaXMsIGdzb19zaXplIGlzIHNldCB0byB0aGUgc3BlY2lhbCB2YWx1ZSBHU09fQllfRlJBR1MuXG4tLVxuZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jPTY4OTA9bmV0ZGV2X2ZlYXR1cmVzX3QgcWV0aF9mZWF0dXJlc19jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYy02OTMxLVx0aWYgKG5ldGlmX25lZWRzX2dzbyhza2IsIGZlYXR1cmVzKSkge1xuZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jOjY5MzI6XHRcdC8qIG1hdGNoIHNrYl9zZWdtZW50KCk6ICovXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMtNjkzMy1cdFx0dW5zaWduZWQgaW50IGRvZmZzZXQgPSBza2ItXHUwMDNlZGF0YSAtIHNrYl9tYWNfaGVhZGVyKHNrYik7XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0zNDg9c3RydWN0IHNrX2J1ZmY7XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0zNTUtXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjM1NjovKiBTZXQgc2tiX3NoaW5mbyhza2IpLVx1MDAzZWdzb19zaXplIHRvIHRoaXMgaW4gY2FzZSB5b3Ugd2FudCBza2Jfc2VnbWVudCB0b1xuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0zNTctICogc2VnbWVudCB1c2luZyBpdHMgY3VycmVudCBzZWdtZW50YXRpb24gaW5zdGVhZC5cbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTQyNzU9dm9pZCBza2Jfc2NydWJfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgeG5ldCk7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjQyNzY6c3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50KHN0cnVjdCBza19idWZmICpza2IsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NDI3NzpzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnRfbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcyxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNDI3OC1cdFx0XHRcdCB1bnNpZ25lZCBpbnQgb2Zmc2V0KTtcbi0tXG5pbmNsdWRlL25ldC91ZHAuaD01ODA9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqdWRwX3Jjdl9zZWdtZW50KHN0cnVjdCBzb2NrICpzayxcbi0tXG5pbmNsdWRlL25ldC91ZHAuaC01OTUtXG5pbmNsdWRlL25ldC91ZHAuaDo1OTY6XHQvKiBBdm9pZCBjc3VtIHJlY2FsY3VsYXRpb24gYnkgc2tiX3NlZ21lbnQgdW5sZXNzIHVzZXJzcGFjZSBleHBsaWNpdGx5XG5pbmNsdWRlL25ldC91ZHAuaC01OTctXHQgKiBhc2tzIGZvciB0aGUgZmluYWwgY2hlY2tzdW0gdmFsdWVzXG4tLVxubGliL3Rlc3RfYnBmLmM9MTUyMjM9c3RhdGljIF9faW5pdCBzdHJ1Y3Qgc2tfYnVmZiAqYnVpbGRfdGVzdF9za2JfbGluZWFyX25vX2hlYWRfZnJhZyh2b2lkKVxuLS1cbmxpYi90ZXN0X2JwZi5jLTE1Mjc2LVxubGliL3Rlc3RfYnBmLmM6MTUyNzc6c3RydWN0IHNrYl9zZWdtZW50X3Rlc3Qge1xubGliL3Rlc3RfYnBmLmMtMTUyNzgtXHRjb25zdCBjaGFyICpkZXNjcjtcbi0tXG5saWIvdGVzdF9icGYuYy0xNTI4Mi1cbmxpYi90ZXN0X2JwZi5jOjE1MjgzOnN0YXRpYyBzdHJ1Y3Qgc2tiX3NlZ21lbnRfdGVzdCBza2Jfc2VnbWVudF90ZXN0c1tdIF9faW5pdGNvbnN0ID0ge1xubGliL3Rlc3RfYnBmLmMtMTUyODQtXHR7XG4tLVxubGliL3Rlc3RfYnBmLmMtMTUyOTktXG5saWIvdGVzdF9icGYuYzoxNTMwMDpzdGF0aWMgX19pbml0IGludCB0ZXN0X3NrYl9zZWdtZW50X3NpbmdsZShjb25zdCBzdHJ1Y3Qgc2tiX3NlZ21lbnRfdGVzdCAqdGVzdClcbmxpYi90ZXN0X2JwZi5jLTE1MzAxLXtcbi0tXG5saWIvdGVzdF9icGYuYy0xNTMxMC1cbmxpYi90ZXN0X2JwZi5jOjE1MzExOlx0c2VncyA9IHNrYl9zZWdtZW50KHNrYiwgdGVzdC1cdTAwM2VmZWF0dXJlcyk7XG5saWIvdGVzdF9icGYuYy0xNTMxMi1cdGlmICghSVNfRVJSKHNlZ3MpKSB7XG4tLVxubGliL3Rlc3RfYnBmLmMtMTUzMjAtXG5saWIvdGVzdF9icGYuYzoxNTMyMTpzdGF0aWMgX19pbml0IGludCB0ZXN0X3NrYl9zZWdtZW50KHZvaWQpXG5saWIvdGVzdF9icGYuYy0xNTMyMi17XG4tLVxubGliL3Rlc3RfYnBmLmMtMTUzMjQtXG5saWIvdGVzdF9icGYuYzoxNTMyNTpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoc2tiX3NlZ21lbnRfdGVzdHMpOyBpJiM0MzsmIzQzOykge1xubGliL3Rlc3RfYnBmLmM6MTUzMjY6XHRcdGNvbnN0IHN0cnVjdCBza2Jfc2VnbWVudF90ZXN0ICp0ZXN0ID0gXHUwMDI2c2tiX3NlZ21lbnRfdGVzdHNbaV07XG5saWIvdGVzdF9icGYuYy0xNTMyNy1cbi0tXG5saWIvdGVzdF9icGYuYy0xNTMzMy1cbmxpYi90ZXN0X2JwZi5jOjE1MzM0Olx0XHRpZiAodGVzdF9za2Jfc2VnbWVudF9zaW5nbGUodGVzdCkpIHtcbmxpYi90ZXN0X2JwZi5jLTE1MzM1LVx0XHRcdHByX2NvbnQoXCYjMzQ7RkFJTFxcblwmIzM0Oyk7XG4tLVxubGliL3Rlc3RfYnBmLmM9MTU3ODk9c3RhdGljIF9faW5pdCBpbnQgZmluZF90ZXN0X2luZGV4KGNvbnN0IGNoYXIgKnRlc3RfbmFtZSlcbi0tXG5saWIvdGVzdF9icGYuYy0xNTgwNi1cbmxpYi90ZXN0X2JwZi5jOjE1ODA3Olx0aWYgKCFzdHJjbXAodGVzdF9zdWl0ZSwgXCYjMzQ7dGVzdF9za2Jfc2VnbWVudFwmIzM0OykpIHtcbmxpYi90ZXN0X2JwZi5jOjE1ODA4Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHNrYl9zZWdtZW50X3Rlc3RzKTsgaSYjNDM7JiM0MzspIHtcbmxpYi90ZXN0X2JwZi5jOjE1ODA5Olx0XHRcdGlmICghc3RyY21wKHNrYl9zZWdtZW50X3Rlc3RzW2ldLmRlc2NyLCB0ZXN0X25hbWUpKVxubGliL3Rlc3RfYnBmLmMtMTU4MTAtXHRcdFx0XHRyZXR1cm4gaTtcbi0tXG5saWIvdGVzdF9icGYuYz0xNTgxNz1zdGF0aWMgX19pbml0IGludCBwcmVwYXJlX3Rlc3RfcmFuZ2Uodm9pZClcbi0tXG5saWIvdGVzdF9icGYuYy0xNTgyNC1cdFx0dmFsaWRfcmFuZ2UgPSBBUlJBWV9TSVpFKHRhaWxfY2FsbF90ZXN0cyk7XG5saWIvdGVzdF9icGYuYzoxNTgyNTpcdGVsc2UgaWYgKCFzdHJjbXAodGVzdF9zdWl0ZSwgXCYjMzQ7dGVzdF9za2Jfc2VnbWVudFwmIzM0OykpXG5saWIvdGVzdF9icGYuYzoxNTgyNjpcdFx0dmFsaWRfcmFuZ2UgPSBBUlJBWV9TSVpFKHNrYl9zZWdtZW50X3Rlc3RzKTtcbmxpYi90ZXN0X2JwZi5jLTE1ODI3LVx0ZWxzZVxuLS1cbmxpYi90ZXN0X2JwZi5jPTE1ODc2PXN0YXRpYyBpbnQgX19pbml0IHRlc3RfYnBmX2luaXQodm9pZClcbi0tXG5saWIvdGVzdF9icGYuYy0xNTg4My1cdCAgICBzdHJjbXAodGVzdF9zdWl0ZSwgXCYjMzQ7dGVzdF90YWlsX2NhbGxzXCYjMzQ7KSBcdTAwMjZcdTAwMjZcbmxpYi90ZXN0X2JwZi5jOjE1ODg0Olx0ICAgIHN0cmNtcCh0ZXN0X3N1aXRlLCBcJiMzNDt0ZXN0X3NrYl9zZWdtZW50XCYjMzQ7KSkge1xubGliL3Rlc3RfYnBmLmMtMTU4ODUtXHRcdHByX2VycihcJiMzNDt0ZXN0X2JwZjogaW52YWxpZCB0ZXN0X3N1aXRlICYjMzk7JXMmIzM5OyBzcGVjaWZpZWQuXFxuXCYjMzQ7LCB0ZXN0X3N1aXRlKTtcbi0tXG5saWIvdGVzdF9icGYuYy0xNTkxOS1cbmxpYi90ZXN0X2JwZi5jOjE1OTIwOlx0aWYgKCFzdHJsZW4odGVzdF9zdWl0ZSkgfHwgIXN0cmNtcCh0ZXN0X3N1aXRlLCBcJiMzNDt0ZXN0X3NrYl9zZWdtZW50XCYjMzQ7KSlcbmxpYi90ZXN0X2JwZi5jOjE1OTIxOlx0XHRyZXR1cm4gdGVzdF9za2Jfc2VnbWVudCgpO1xubGliL3Rlc3RfYnBmLmMtMTU5MjItXG4tLVxubmV0L2NvcmUvbmV0X3Rlc3QuYz0xMj1zdGF0aWMgdm9pZCBfX2luaXRfc2tiKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvbmV0X3Rlc3QuYy0xNi1cbm5ldC9jb3JlL25ldF90ZXN0LmM6MTc6XHQvKiBza2Jfc2VnbWVudCBleHBlY3RzIHNrYi1cdTAwM2VkYXRhIGF0IHN0YXJ0IG9mIHBheWxvYWQgKi9cbm5ldC9jb3JlL25ldF90ZXN0LmMtMTgtXHRza2JfcHVsbChza2IsIHNpemVvZihoZHIpKTtcbi0tXG5uZXQvY29yZS9uZXRfdGVzdC5jPTE0Nz1zdGF0aWMgdm9pZCBnc29fdGVzdF9mdW5jKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5uZXQvY29yZS9uZXRfdGVzdC5jLTIyOC1cbm5ldC9jb3JlL25ldF90ZXN0LmM6MjI5Olx0c2VncyA9IHNrYl9zZWdtZW50KHNrYiwgZmVhdHVyZXMpO1xubmV0L2NvcmUvbmV0X3Rlc3QuYy0yMzAtXHRpZiAoSVNfRVJSKHNlZ3MpKSB7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NDY2Mj1zdGF0aWMgaW5saW5lIHNrYl9mcmFnX3Qgc2tiX2hlYWRfZnJhZ190b19wYWdlX2Rlc2Moc3RydWN0IHNrX2J1ZmYgKmZyYWdfc2tiKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTQ2NzMtXG5uZXQvY29yZS9za2J1ZmYuYzo0Njc0OnN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudF9saXN0KHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvY29yZS9za2J1ZmYuYy00Njc1LVx0XHRcdFx0IG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTQ3NjUtfVxubmV0L2NvcmUvc2tidWZmLmM6NDc2NjpFWFBPUlRfU1lNQk9MX0dQTChza2Jfc2VnbWVudF9saXN0KTtcbm5ldC9jb3JlL3NrYnVmZi5jLTQ3NjctXG5uZXQvY29yZS9za2J1ZmYuYy00NzY4LS8qKlxubmV0L2NvcmUvc2tidWZmLmM6NDc2OTogKlx0c2tiX3NlZ21lbnQgLSBQZXJmb3JtIHByb3RvY29sIHNlZ21lbnRhdGlvbiBvbiBza2IuXG5uZXQvY29yZS9za2J1ZmYuYy00NzcwLSAqXHRAaGVhZF9za2I6IGJ1ZmZlciB0byBzZWdtZW50XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNDc3Ni0gKi9cbm5ldC9jb3JlL3NrYnVmZi5jOjQ3Nzc6c3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50KHN0cnVjdCBza19idWZmICpoZWFkX3NrYixcbm5ldC9jb3JlL3NrYnVmZi5jLTQ3NzgtXHRcdFx0ICAgIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTUwMzMtXHRcdFx0XHRuZXRfd2Fybl9yYXRlbGltaXRlZChcbm5ldC9jb3JlL3NrYnVmZi5jOjUwMzQ6XHRcdFx0XHRcdFwmIzM0O3NrYl9zZWdtZW50OiB0b28gbWFueSBmcmFnczogJXUgJXVcXG5cJiMzNDssXG5uZXQvY29yZS9za2J1ZmYuYy01MDM1LVx0XHRcdFx0XHRwb3MsIG1zcyk7XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNTEyOS19XG5uZXQvY29yZS9za2J1ZmYuYzo1MTMwOkVYUE9SVF9TWU1CT0xfR1BMKHNrYl9zZWdtZW50KTtcbm5ldC9jb3JlL3NrYnVmZi5jLTUxMzEtXG4tLVxubmV0L2lwdjQvdGNwX29mZmxvYWQuYz04OD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKl9fdGNwNF9nc29fc2VnbWVudF9saXN0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvdGNwX29mZmxvYWQuYy05MC17XG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jOjkxOlx0c2tiID0gc2tiX3NlZ21lbnRfbGlzdChza2IsIGZlYXR1cmVzLCBza2JfbWFjX2hlYWRlcl9sZW4oc2tiKSk7XG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jLTkyLVx0aWYgKElTX0VSUihza2IpKVxuLS1cbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmM9MTMzPXN0cnVjdCBza19idWZmICp0Y3BfZ3NvX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jLTE4MC1cbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmM6MTgxOlx0c2VncyA9IHNrYl9zZWdtZW50KHNrYiwgZmVhdHVyZXMpO1xubmV0L2lwdjQvdGNwX29mZmxvYWQuYy0xODItXHRpZiAoSVNfRVJSKHNlZ3MpKVxuLS1cbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM9NDYzPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqX191ZHBfZ3NvX3NlZ21lbnRfbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtNDY4LVxubmV0L2lwdjQvdWRwX29mZmxvYWQuYzo0Njk6XHRza2IgPSBza2Jfc2VnbWVudF9saXN0KHNrYiwgZmVhdHVyZXMsIHNrYl9tYWNfaGVhZGVyX2xlbihza2IpKTtcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtNDcwLVx0aWYgKElTX0VSUihza2IpKVxuLS1cbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM9NDgxPXN0cnVjdCBza19idWZmICpfX3VkcF9nc29fc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqZ3NvX3NrYixcbi0tXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTUxNi1cdGlmIChza2Jfc2hpbmZvKGdzb19za2IpLVx1MDAzZWdzb190eXBlIFx1MDAyNiBTS0JfR1NPX0ZSQUdMSVNUKSB7XG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jOjUxNzpcdFx0IC8qIERldGVjdCBtb2RpZmllZCBnZW9tZXRyeSBhbmQgcGFzcyB0aG9zZSB0byBza2Jfc2VnbWVudC4gKi9cbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtNTE4LVx0XHRpZiAoKHNrYl9wYWdlbGVuKGdzb19za2IpIC0gc2l6ZW9mKCp1aCkgPT0gc2tiX3NoaW5mbyhnc29fc2tiKS1cdTAwM2Vnc29fc2l6ZSkgXHUwMDI2XHUwMDI2XG4tLVxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy01NDMtXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jOjU0NDpcdC8qIGNsZWFyIGRlc3RydWN0b3IgdG8gYXZvaWQgc2tiX3NlZ21lbnQgYXNzaWduaW5nIGl0IHRvIHRhaWwgKi9cbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtNTQ1LVx0Y29weV9kdG9yID0gZ3NvX3NrYi1cdTAwM2VkZXN0cnVjdG9yID09IHNvY2tfd2ZyZWU7XG4tLVxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy01NTAtXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jOjU1MTpcdHNlZ3MgPSBza2Jfc2VnbWVudChnc29fc2tiLCBmZWF0dXJlcyk7XG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTU1Mi1cdGlmIChJU19FUlJfT1JfTlVMTChzZWdzKSkge1xuLS1cbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM9NjMzPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdWRwNF91Zm9fZnJhZ21lbnQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTY4Ny1cdCAqL1xubmV0L2lwdjQvdWRwX29mZmxvYWQuYzo2ODg6XHRzZWdzID0gc2tiX3NlZ21lbnQoc2tiLCBmZWF0dXJlcyk7XG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTY4OS1vdXQ6XG4tLVxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jPTE0Nz1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKl9fdGNwNl9nc29fc2VnbWVudF9saXN0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jLTE0OS17XG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmM6MTUwOlx0c2tiID0gc2tiX3NlZ21lbnRfbGlzdChza2IsIGZlYXR1cmVzLCBza2JfbWFjX2hlYWRlcl9sZW4oc2tiKSk7XG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmMtMTUxLVx0aWYgKElTX0VSUihza2IpKVxuLS1cbm5ldC9pcHY2L3VkcF9vZmZsb2FkLmM9MTk9c3RhdGljIHN0cnVjdCBza19idWZmICp1ZHA2X3Vmb19mcmFnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY2L3VkcF9vZmZsb2FkLmMtMTA4LVx0XHQgKi9cbm5ldC9pcHY2L3VkcF9vZmZsb2FkLmM6MTA5Olx0XHRzZWdzID0gc2tiX3NlZ21lbnQoc2tiLCBmZWF0dXJlcyk7XG5uZXQvaXB2Ni91ZHBfb2ZmbG9hZC5jLTExMC1cdH1cbi0tXG5uZXQvc2N0cC9vZmZsb2FkLmM9Mzk9c3RhdGljIHN0cnVjdCBza19idWZmICpzY3RwX2dzb19zZWdtZW50KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3NjdHAvb2ZmbG9hZC5jLTcxLVxubmV0L3NjdHAvb2ZmbG9hZC5jOjcyOlx0c2VncyA9IHNrYl9zZWdtZW50KHNrYiwgKGZlYXR1cmVzIHwgTkVUSUZfRl9IV19DU1VNKSBcdTAwMjYgfk5FVElGX0ZfU0cpO1xubmV0L3NjdHAvb2ZmbG9hZC5jLTczLVx0aWYgKElTX0VSUihzZWdzKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTk6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1NjkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBTY29wZSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byBHU08gc2VnbWVudGF0aW9uLCB0aGF0IG11Y2ggaXMgY2xlYXIuIFRoZSBrZXkgcGxheWVycyBoZXJlIHNlZW0gdG8gYmUgYHNrYl9zZWdtZW50YCDigJMgdGhhdCYjMzk7cyB0aGUgY29yZSBvZiB0aGUgc2VnbWVudGF0aW9uIGxvZ2ljLCBzbyBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgYSBjbG9zZSBleWUgb24gaXQg4oCTIGFuZCB0aGUgZnVuY3Rpb25zIGNhbGxpbmcgaXQ6IGB0Y3BfZ3NvX3NlZ21lbnRgLCBgX191ZHBfZ3NvX3NlZ21lbnRgLCB0aGUgVUZPIGZyYWdtZW50ZXJzLCBhbmQgYHNjdHBfZ3NvX3NlZ21lbnRgLiBUaG9zZSBhcmUgdHJpZ2dlcmVkIGJ5IHRoZSBsaWtlcyBvZiBgc2tiX21hY19nc29fc2VnbWVudGAgYW5kIGV2ZW50dWFsbHksIGBkZXZfaGFyZF9zdGFydF94bWl0YCwgc28gSSBjYW4gc2VlIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBkYXRhIHBhdGguCgpCZXlvbmQgR1NPLCBJIHNlZSBpdCBhbHNvIHRvdWNoZXMgYF9fdmlydGlvX25ldF9oZHJfdG9fc2tiYCwgd2hpY2ggZmxhZ3MgdXAgYHR1bl9nZXRfdXNlcmAsIGB0YXBfZ2V0X3VzZXJgLCBhbmQgYHBhY2tldF9zbmRgIGFzIHJlbGV2YW50LiBTbyBJIGhhdmUgYSBmZWVsaW5nIHRoZSB2aXJ0dWFsIG5ldHdvcmtpbmcgc2lkZSBpcyBhbHNvIGluIHBsYXkuCgpUaGVyZWZvcmUsIG15IGluaXRpYWwgbWVudGFsIGNoZWNrbGlzdCBpczoKCiogICBgc2tiX3NlZ21lbnRgICh0aGUgY29yZSkKKiAgIGB0dW5fZ2V0X3VzZXJgCiogICBgdGFwX2dldF91c2VyYAoqICAgYHBhY2tldF9zbmRgCiogICBgdHBhY2tldF9zbmRgCgpJIHNob3VsZCBzZWUgaWYgYW55IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcmVsZXZhbnQsIGJ1dCBgQ09ORklHX1RVTmAsIGBDT05GSUdfTUFDVlRBUGAsIGFuZCBgQ09ORklHX1BBQ0tFVGAgYXJlIHByZXR0eSBzdGFuZGFyZCBmYXJlIGluIG5ldHdvcmtpbmcgY29udGV4dHMsIGFuZCBzaW5jZSB0aGlzIHBhdGNoIGlzIG1vZGlmeWluZyBjb3JlIG5ldHdvcmtpbmcgY29kZSwgaXQmIzM5O3MgdmVyeSBsaWtlbHkgdG8gYmUgYWx3YXlzIGNvbXBpbGVkLgoKVGltZSB0byBkZWx2ZSBpbnRvIGBuZXQvY29yZS9za2J1ZmYuY2AgYW5kIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgc2tiX3NlZ21lbnRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxOToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDg1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0ODUwOlx0XHRcdFx0XHRcdGdvdG8gbm9ybWFsO1xuNDg1MTpcdFxuNDg1MjpcdFx0XHRcdFx0bGVuIC09IGl0ZXItXHUwMDNlbGVuO1xuNDg1MzpcdFx0XHRcdH1cbjQ4NTQ6XHRcbjQ4NTU6XHRcdFx0XHRpZiAobGVuICE9IGZyYWdfbGVuKVxuNDg1NjpcdFx0XHRcdFx0Z290byBub3JtYWw7XG40ODU3Olx0XHRcdH1cbjQ4NTg6XHRcbjQ4NTk6XHRcdFx0LyogR1NPIHBhcnRpYWwgb25seSByZXF1aXJlcyB0aGF0IHdlIHRyaW0gb2ZmIGFueSBleGNlc3MgdGhhdFxuNDg2MDpcdFx0XHQgKiBkb2VzbiYjMzk7dCBmaXQgaW50byBhbiBNU1Mgc2l6ZWQgYmxvY2ssIHNvIHRha2UgY2FyZSBvZiB0aGF0XG40ODYxOlx0XHRcdCAqIG5vdy5cbjQ4NjI6XHRcdFx0ICovXG40ODYzOlx0XHRcdHBhcnRpYWxfc2VncyA9IG1pbihsZW4gLyBtc3MsIEdTT19NQVhfU0VHUyk7XG40ODY0Olx0XHRcdGlmIChwYXJ0aWFsX3NlZ3MgXHUwMDNlIDEpXG40ODY1Olx0XHRcdFx0bXNzICo9IHBhcnRpYWxfc2VncztcbjQ4NjY6XHRcdFx0ZWxzZVxuNDg2NzpcdFx0XHRcdHBhcnRpYWxfc2VncyA9IDA7XG40ODY4Olx0XHR9XG40ODY5Olx0XG40ODcwOlx0bm9ybWFsOlxuNDg3MTpcdFx0aGVhZHJvb20gPSBza2JfaGVhZHJvb20oaGVhZF9za2IpO1xuNDg3MjpcdFx0cG9zID0gc2tiX2hlYWRsZW4oaGVhZF9za2IpO1xuNDg3MzpcdFxuNDg3NDpcdFx0aWYgKHNrYl9vcnBoYW5fZnJhZ3MoaGVhZF9za2IsIEdGUF9BVE9NSUMpKVxuNDg3NTpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbjQ4NzY6XHRcbjQ4Nzc6XHRcdG5mcmFncyA9IHNrYl9zaGluZm8oaGVhZF9za2IpLVx1MDAzZW5yX2ZyYWdzO1xuNDg3ODpcdFx0ZnJhZyA9IHNrYl9zaGluZm8oaGVhZF9za2IpLVx1MDAzZWZyYWdzO1xuNDg3OTpcdFx0ZnJhZ19za2IgPSBoZWFkX3NrYjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTk6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2NTAKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUmVjZW50IE5ldHdvcmsgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCB0aGUgY29yZSBjaGFuZ2UgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIGFkanVzdG1lbnQgdG8gaG93IHdlIGNhbGN1bGF0ZSBgcGFydGlhbF9zZWdzYCB3aXRoaW4gdGhlIGBza2Jfc2VnbWVudGAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgbGltaXRpbmcgdGhlIGBwYXJ0aWFsX3NlZ3NgIGNhbGN1bGF0aW9uIHRvIHRoZSBtaW5pbXVtIG9mIGBsZW4gLyBtc3NgIGFuZCBgR1NPX01BWF9TRUdTYC4gVGhpcyBpcyBhIGRlZmluaXRlIHNhZmVndWFyZCBhZ2FpbnN0IHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93IG9yIHNvbWUgb3RoZXIgZWRnZS1jYXNlIHNjZW5hcmlvIGluIHNlZ21lbnRhdGlvbiwgd2hpY2ggaXMgZ29vZC4gVGhlIHByaW9yIGNhbGN1bGF0aW9uLCB3aGlsZSBzZWVtaW5nbHkgc3RyYWlnaHRmb3J3YXJkLCBjb3VsZCBwb3RlbnRpYWxseSBsZWFkIHRvIGlzc3VlcyB3aGVuIGRlYWxpbmcgd2l0aCBwYXJ0aWN1bGFybHkgbGFyZ2Ugb3IgZnJhZ21lbnRlZCBwYWNrZXRzLiBUaGlzIG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGJvdW5kcyBjaGVja2luZyBpcyBhbHdheXMgYSBwb3NpdGl2ZSB0aGluZyBpbiBuZXR3b3JrIGNvZGUuCgpOb3csIGdsYW5jaW5nIGF0IHRoZSBzZWNvbmQgY2hhbmdlLCB3aGljaCBpcyBpbiBgX192aXJ0aW9fbmV0X2hkcl90b19za2JgLCBJIHNlZSB0aGF0IGl0IGludm9sdmVzIGBnc29fc2l6ZWAuIEl0IGFwcGVhcnMgdGhlcmUmIzM5O3MgYSBndWFyZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYGdzb19zaXplYCBwYXJhbWV0ZXIgb2YgdmlydGlvIG5ldCBpcyBhdCBsZWFzdCBgVENQX01JTl9HU09fU0laRWAgd2hlbiBnZW5lcmF0aW5nIGEgaGVhZGVyLiBUaGUgYEJVSUxEX0JVR19PTmAgc3RhdGVtZW50IGNhdWdodCBteSBleWUgdG9vIOKAkyBpdCBhc3NlcnRzIGEgcmVsYXRpb25zaGlwIGJldHdlZW4gYFRDUF9NSU5fR1NPX1NJWkVgIGFuZCBgR1NPX01BWF9TRUdTYCBhbmQgYEdTT19NQVhfU0laRWAuIFRoaXMgc3VnZ2VzdHMgdGhlIHBhdGNoIGlzIGFpbWVkIGF0IGVuc3VyaW5nIGNvbnNpc3RlbnQgR1NPIGJlaGF2aW9yLCBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSBtaW5pbXVtIHBhY2tldCBzaXplIG9yIGxpbWl0YXRpb25zIGltcG9zZWQgYnkgdGhlIGhhcmR3YXJlIGFuZCBzb2Z0d2FyZSBvbiBHU08gY2FwYWJpbGl0aWVzLgoKQWxyaWdodCwgc28gdGhlIGZvY3VzIGlzIHJlYWxseSBvbiBzZWdtZW50YXRpb24gYW5kIEdTTy4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaG93IHRoaXMgcmVsYXRlcyB0byBhIGZldyBmdW5jdGlvbnMuIE15IGltbWVkaWF0ZSBsaXN0IG9mIGludGVyZXN0aW5nIGZ1bmN0aW9ucyBpbmNsdWRlcyBgc2tiX3NlZ21lbnRgIOKAkyBvYnZpb3VzbHksIGdpdmVuIHRoZSBmaXJzdCBjaGFuZ2UsIGFuZCBJIG5lZWQgdG8gc2VlIGhvdyBpdCB3b3JrcyBpbiBjb250ZXh0IOKAkyBhbmQgdGhlbiBgdHVuX2dldF91c2VyYCwgYHRhcF9nZXRfdXNlcmAsIGBwYWNrZXRfc25kYCwgYW5kIGB0cGFja2V0X3NuZGAuIFRoZXNlIGFyZSBhbGwgY3J1Y2lhbCBwb2ludHMgd2hlcmUgbmV0d29yayBwYWNrZXRzIGFyZSBoYW5kbGVkLCBhbmQgYSBHU08vc2VnbWVudGF0aW9uIGlzc3VlIGNvdWxkIG1hbmlmZXN0LiBJJiMzOTtsbCBzdGFydCB3aXRoIGB0dW5fZ2V0X3VzZXJgIGluIGBkcml2ZXJzL25ldC90dW4uY2AgYW5kIHNlZSBpZiB0aGUgcGF0Y2ggZGlyZWN0bHkgYWZmZWN0cyBhbnl0aGluZyB0aGVyZSwgc2luY2UgaXQmIzM5O3MgYSBjb21tb24gbmV0d29yayBpbnRlcmZhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3R1bl9nZXRfdXNlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90dW4uYz0xNjc3PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdHVuX2J1aWxkX3NrYihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTE3NzMtLyogR2V0IHBhY2tldCBmcm9tIHVzZXIgc3BhY2UgYnVmZmVyICovXG5kcml2ZXJzL25ldC90dW4uYzoxNzc0OnN0YXRpYyBzc2l6ZV90IHR1bl9nZXRfdXNlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxuZHJpdmVycy9uZXQvdHVuLmMtMTc3NS1cdFx0XHQgICAgdm9pZCAqbXNnX2NvbnRyb2wsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcbi0tXG5kcml2ZXJzL25ldC90dW4uYz0yMDY2PXN0YXRpYyBzc2l6ZV90IHR1bl9jaHJfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0yMDc5LVxuZHJpdmVycy9uZXQvdHVuLmM6MjA4MDpcdHJlc3VsdCA9IHR1bl9nZXRfdXNlcih0dW4sIHRmaWxlLCBOVUxMLCBmcm9tLCBub2Jsb2NrLCBmYWxzZSk7XG5kcml2ZXJzL25ldC90dW4uYy0yMDgxLVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTI2NDY9c3RhdGljIGludCB0dW5fc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgdG90YWxfbGVuKVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTI2OTItXG5kcml2ZXJzL25ldC90dW4uYzoyNjkzOlx0cmV0ID0gdHVuX2dldF91c2VyKHR1biwgdGZpbGUsIGN0bCA/IGN0bC1cdTAwM2VwdHIgOiBOVUxMLCBcdTAwMjZtLVx1MDAzZW1zZ19pdGVyLFxuZHJpdmVycy9uZXQvdHVuLmMtMjY5NC1cdFx0XHQgICBtLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlULFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxOToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDcyMgoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLCB0aGlua2luZyB0aHJvdWdoIGl0IGluIGEgdGVjaG5pY2FsIGNvbnRleHQuCgoqKkluaXRpYWwgQXNzZXNzbWVudDogTmV0d29yayBEcml2ZXIgQ29uc2lkZXJhdGlvbnMqKgoKQWxyaWdodCwgbG9va2luZyBhdCBgdHVuX2dldF91c2VyYCBhbmQgYHRhcF9nZXRfdXNlcmAsIHRoZXNlIGFyZSBjbGVhcmx5IHJlbGV2YW50IGZ1bmN0aW9ucyBmb3IgbmV0d29yayBkcml2ZXIgZGV2ZWxvcG1lbnQsIHNwZWNpZmljYWxseSBpbiB0aGUgY29udGV4dCBvZiBUVU4vVEFQIGludGVyZmFjZXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1llcCwgdGhhdCBtYWtlcyBzZW5zZS4mIzM0OyBUaGVzZSBhcmUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzLgoKYHR1bl9nZXRfdXNlcmAgaXMgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgZXhhbWluaW5nIHRoZSB1c2VyLXNwYWNlIGludGVyYWN0aW9uIHdpdGggYSBUVU4gZGV2aWNlLiBJJiMzOTtkIGV4cGVjdCBpdCBkZWFscyB3aXRoIHNldHRpbmcgdXAgdGhlIGludGVyZmFjZSYjMzk7cyBwYXJhbWV0ZXJzLCBoYW5kbGluZyBkYXRhIHRyYW5zZmVyIGJldHdlZW4gdGhlIGtlcm5lbCBhbmQgdXNlciBzcGFjZSwgYW5kIHBvc3NpYmx5IG1hbmFnaW5nIHZpcnR1YWwgSVAgYWRkcmVzc2VzIG9yIHJvdXRpbmcgY29uZmlndXJhdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGltcGxlbWVudGF0aW9uLCBidXQgdGhlIG5hbWUgc3Ryb25nbHkgc3VnZ2VzdHMgaXRzIHJvbGUuIEkgd291bGQgYmUgY29uc2lkZXJpbmcgaG93IGl0IGhhbmRsZXMgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIG5ldHdvcmsgc3RhY2ssIGFuZCBhbnkgc2VjdXJpdHkgaW1wbGljYXRpb25zLgoKU2ltaWxhcmx5LCBgdGFwX2dldF91c2VyYCBpcyBlcXVhbGx5IGltcG9ydGFudCwgcGFydGljdWxhcmx5IGdpdmVuIFRBUCYjMzk7cyByb2xlIGFzIGEgYnJpZGdpbmcgaW50ZXJmYWNlLiBJIGltYWdpbmUgaXQgbWlycm9ycyBtdWNoIG9mIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkgYXMgVFVOLCBidXQgd2l0aCB0aGUgYWRkZWQgY29tcGxleGl0eSBvZiBFdGhlcm5ldCBmcmFtZSBoYW5kbGluZyBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9uIHdpdGggYSBicmlkZ2UgZHJpdmVyLiBJdCB3aWxsIGJlIHZlcnkgdXNlZnVsIGluIHJldmlld2luZyBhbnkgY29kZSB3aXRoIHRoZSB1c2Ugb2YgYSBUQVAgaW50ZXJmYWNlLCBjb25zaWRlcmluZyB0aGUgbnVhbmNlcyBvZiB0aGUgZHJpdmVyIGFuZCBpdHMgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGxpbmsgbGF5ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RhcF9nZXRfdXNlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90YXAuYz01NDM9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqdGFwX2FsbG9jX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHNpemVfdCBwcmVwYWQsXG4tLVxuZHJpdmVycy9uZXQvdGFwLmMtNTcxLS8qIEdldCBwYWNrZXQgZnJvbSB1c2VyIHNwYWNlIGJ1ZmZlciAqL1xuZHJpdmVycy9uZXQvdGFwLmM6NTcyOnN0YXRpYyBzc2l6ZV90IHRhcF9nZXRfdXNlcihzdHJ1Y3QgdGFwX3F1ZXVlICpxLCB2b2lkICptc2dfY29udHJvbCxcbmRyaXZlcnMvbmV0L3RhcC5jLTU3My1cdFx0XHQgICAgc3RydWN0IGlvdl9pdGVyICpmcm9tLCBpbnQgbm9ibG9jaylcbi0tXG5kcml2ZXJzL25ldC90YXAuYz02OTE9c3RhdGljIHNzaXplX3QgdGFwX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4tLVxuZHJpdmVycy9uZXQvdGFwLmMtNjk5LVxuZHJpdmVycy9uZXQvdGFwLmM6NzAwOlx0cmV0dXJuIHRhcF9nZXRfdXNlcihxLCBOVUxMLCBmcm9tLCBub2Jsb2NrKTtcbmRyaXZlcnMvbmV0L3RhcC5jLTcwMS19XG4tLVxuZHJpdmVycy9uZXQvdGFwLmM9MTAzMz1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0YXBfZm9wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC90YXAuYy0xMDQzLVxuZHJpdmVycy9uZXQvdGFwLmM6MTA0NDpzdGF0aWMgaW50IHRhcF9nZXRfdXNlcl94ZHAoc3RydWN0IHRhcF9xdWV1ZSAqcSwgc3RydWN0IHhkcF9idWZmICp4ZHApXG5kcml2ZXJzL25ldC90YXAuYy0xMDQ1LXtcbi0tXG5kcml2ZXJzL25ldC90YXAuYz0xMTE1PXN0YXRpYyBpbnQgdGFwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSxcbi0tXG5kcml2ZXJzL25ldC90YXAuYy0xMTI2LVx0XHRcdHhkcCA9IFx1MDAyNigoc3RydWN0IHhkcF9idWZmICopY3RsLVx1MDAzZXB0cilbaV07XG5kcml2ZXJzL25ldC90YXAuYzoxMTI3Olx0XHRcdHRhcF9nZXRfdXNlcl94ZHAocSwgeGRwKTtcbmRyaXZlcnMvbmV0L3RhcC5jLTExMjgtXHRcdH1cbi0tXG5kcml2ZXJzL25ldC90YXAuYy0xMTMxLVxuZHJpdmVycy9uZXQvdGFwLmM6MTEzMjpcdHJldHVybiB0YXBfZ2V0X3VzZXIocSwgY3RsID8gY3RsLVx1MDAzZXB0ciA6IE5VTEwsIFx1MDAyNm0tXHUwMDNlbXNnX2l0ZXIsXG5kcml2ZXJzL25ldC90YXAuYy0xMTMzLVx0XHRcdCAgICBtLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTk6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU1NjgKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ29uc2lkZXJpbmcgRnVuY3Rpb24gRGVzaWduIE9wdGlvbnMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIG5ldyBmdW5jdGlvbiBhbmQgdGhlIGJlc3Qgd2F5IHRvIGFwcHJvYWNoIGl0LiBgdGFwX2dldF91c2VyYCBzZWVtcyBsaWtlIGEgc29saWQgY2FuZGlkYXRlLiBJdCYjMzk7cyBnb3QgdGhlIHJpZ2h0IGZ1bmN0aW9uYWxpdHksIGFuZCB0aGUgZXhpc3Rpbmcgc3RydWN0dXJlIGlzIHByb2JhYmx5IGEgZ29vZCBzdGFydGluZyBwb2ludC4gQnV0LCBiZWZvcmUgSSBnZXQgdG9vIGF0dGFjaGVkIHRvIHRoYXQsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhIG1vcmUgZWxlZ2FudCBvciBlZmZpY2llbnQgc29sdXRpb24uCgpMZXQgbWUgdGFrZSBhbm90aGVyIGxvb2suLi4gaG1tLCB3aGF0IGFib3V0IHNvbWV0aGluZyBsaWtlIGBwYWNrZXRfc25kYD8gSSYjMzk7bSBjdXJpb3VzLiBJIG1heSBuZWVkIHRvIGRpdmUgaW50byB0aGUgY29kZWJhc2UgYW5kIGFuYWx5emUgaXRzIGludGVybmFsIHdvcmtpbmdzLiBJdCBtYXkgcmVxdWlyZSBhIGRlZXBlciBhbmFseXNpcywgYnV0IGl0JiMzOTtzIHdvcnRoIGNoZWNraW5nLiBEZXBlbmRpbmcgb24gaG93IHRoZSBkYXRhIGlzIGhhbmRsZWQgaW4gdGhhdCBmdW5jdGlvbiwgdGhlcmUgbWlnaHQgYmUgc29tZSBjbGV2ZXIgaW50ZWdyYXRpb24gb3Bwb3J0dW5pdGllcyB0aGVyZS4gSSBuZWVkIHRvIHdlaWdoIHRoZSBwcm9zIGFuZCBjb25zIG9mIGJvdGggYXBwcm9hY2hlcyBiZWZvcmUgY29tbWl0dGluZyB0byBhIGZpbmFsIGRlc2lnbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTk6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFja2V0X3NuZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcGFja2V0L2FmX3BhY2tldC5jPTI1Mjg9c3RhdGljIHZvaWQgdHBhY2tldF9kZXN0cnVjdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI1NDctXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI1NDg6c3RhdGljIGludCBfX3BhY2tldF9zbmRfdm5ldF9wYXJzZShzdHJ1Y3QgdmlydGlvX25ldF9oZHIgKnZuZXRfaGRyLCBzaXplX3QgbGVuKVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNTQ5LXtcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI1NjMtXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI1NjQ6c3RhdGljIGludCBwYWNrZXRfc25kX3ZuZXRfcGFyc2Uoc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgKmxlbixcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjU2NS1cdFx0XHRcdCBzdHJ1Y3QgdmlydGlvX25ldF9oZHIgKnZuZXRfaGRyLCBpbnQgdm5ldF9oZHJfc3opXG4tLVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNTc1LVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNTc2Olx0cmV0ID0gX19wYWNrZXRfc25kX3ZuZXRfcGFyc2Uodm5ldF9oZHIsICpsZW4pO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNTc3LVx0aWYgKHJldClcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTI2Njg9c3RhdGljIGludCB0cGFja2V0X3BhcnNlX2hlYWRlcihzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCB2b2lkICpmcmFtZSxcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI3MzUtXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI3MzY6c3RhdGljIGludCB0cGFja2V0X3NuZChzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3QgbXNnaGRyICptc2cpXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI3Mzcte1xuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjg0OS1cdFx0XHRtZW1jcHkoXHUwMDI2dm5ldF9oZHIsIGRhdGEgLSB2bmV0X2hkcl9zeiwgc2l6ZW9mKHZuZXRfaGRyKSk7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI4NTA6XHRcdFx0aWYgKF9fcGFja2V0X3NuZF92bmV0X3BhcnNlKFx1MDAyNnZuZXRfaGRyLCB0cF9sZW4pKSB7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI4NTEtXHRcdFx0XHR0cF9sZW4gPSAtRUlOVkFMO1xuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9Mjk0MD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnBhY2tldF9hbGxvY19za2Ioc3RydWN0IHNvY2sgKnNrLCBzaXplX3QgcHJlcGFkLFxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjk2NS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6Mjk2NjpzdGF0aWMgaW50IHBhY2tldF9zbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yOTY3LXtcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMwMjMtXHRpZiAodm5ldF9oZHJfc3opIHtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzAyNDpcdFx0ZXJyID0gcGFja2V0X3NuZF92bmV0X3BhcnNlKG1zZywgXHUwMDI2bGVuLCBcdTAwMjZ2bmV0X2hkciwgdm5ldF9oZHJfc3opO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMDI1LVx0XHRpZiAoZXJyKVxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MzEyNT1zdGF0aWMgaW50IHBhY2tldF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMxMzAtXHQvKiBSZWFkaW5nIHR4X3JpbmcucGdfdmVjIHdpdGhvdXQgaG9sZGluZyBwZ192ZWNfbG9jayBpcyByYWN5LlxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzozMTMxOlx0ICogdHBhY2tldF9zbmQoKSB3aWxsIHJlZG8gdGhlIGNoZWNrIHNhZmVseS5cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzEzMi1cdCAqL1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMTMzLVx0aWYgKGRhdGFfcmFjZShwby1cdTAwM2V0eF9yaW5nLnBnX3ZlYykpXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjMxMzQ6XHRcdHJldHVybiB0cGFja2V0X3NuZChwbywgbXNnKTtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzEzNS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MzEzNjpcdHJldHVybiBwYWNrZXRfc25kKHNvY2ssIG1zZywgbGVuKTtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzEzNy19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2Nzc0CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBOZXR3b3JrIFBhY2tldCBUcmFuc21pc3Npb24gRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBwYWNrZXQgdHJhbnNtaXNzaW9uLCB0cnlpbmcgdG8gc2VlIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGxpZXMuIEdvb2QgbmV3cywgYHBhY2tldF9zbmRgIGFuZCBgdHBhY2tldF9zbmRgIHNlZW0gcHJvbWlzaW5nIOKAkyB0aGV5JiMzOTtyZSBkZWZpbml0ZWx5IG9uIHRoZSByaWdodCB0cmFjay4gQW5kLCBvZiBjb3Vyc2UsIEkgaGF2ZSB0byByZS1mYW1pbGlhcml6ZSBteXNlbGYgd2l0aCBgc2tiX3NlZ21lbnRgOyBpdCYjMzk7cyBhIHdvcmtob3JzZSwgdGhhdCBvbmUsIGFuZCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkga25vdyBob3cgaXQmIzM5O3MgYmVpbmcgbGV2ZXJhZ2VkLiBJdHMgd2lkZXNwcmVhZCB1c2UsIGNvdXBsZWQgd2l0aCBpdHMgZXhwb3J0IHN0YXR1cywgc3VnZ2VzdHMgaXQmIzM5O3MgYSBrZXkgcGllY2Ugb2YgdGhlIHB1enpsZS4KCk5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGFyZSB0aGVyZSAqb3RoZXIqIGZ1bmN0aW9ucyBwbGF5aW5nIGEgcGl2b3RhbCByb2xlIGhlcmU/IEkgbmVlZCB0byBnZXQgYSBicm9hZGVyIHZpZXcgb2YgdGhlIGVjb3N5c3RlbS4gTGV0IG1lIGRpZyBhIGxpdHRsZSBkZWVwZXIuIEhtbSwgYHZpcnRpb19uZXRfaGRyX3RvX3NrYmAgc2VlbXMgdG8gYmUgcmVsZXZhbnQuIEl0JiMzOTtzIHVzZWQgd2l0aGluIGB0dW5fZ2V0X3VzZXJgLCBgdGFwX2dldF91c2VyYCwgdGhhdCBwYWlyIG1ha2VzIHNlbnNlLCBpdCBpcyBhbHNvIHVzZWQgaW4gYHBhY2tldF9zbmRgIGFuZCBgdHBhY2tldF9zbmRgLCB3aGljaCBhcmUgYWxzbyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZGluZywgYW5kIGZpbmFsbHkgYHBhZ2VfdG9fc2tiYCwgaW4gYGRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuY2AsIHdoaWNoIG1ha2VzIG1lIHRoaW5rIGl0IGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCB0aGUgcGFnZSBhbGxvY2F0aW9uIGFzcGVjdC4gVGhpcyBpcyBhbiBpbnRlcmVzdGluZyBzZXQgb2YgY29ubmVjdGlvbnMgYW5kIHdhcnJhbnRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTk6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFnZV90b19za2ImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdmlydGlvX25ldC5jPTgxOT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnZpcnRuZXRfYnVpbGRfc2tiKHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGJ1Zmxlbixcbi0tXG5kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMtODM1LS8qIENhbGxlZCBmcm9tIGJvdHRvbSBoYWxmIGNvbnRleHQgKi9cbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYzo4MzY6c3RhdGljIHN0cnVjdCBza19idWZmICpwYWdlX3RvX3NrYihzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSxcbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYy04MzctXHRcdFx0XHQgICBzdHJ1Y3QgcmVjZWl2ZV9xdWV1ZSAqcnEsXG4tLVxuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jPTE5OTQ9c3RhdGljIHN0cnVjdCBza19idWZmICpyZWNlaXZlX2JpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYy0yMDE2LVxuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jOjIwMTc6XHRza2IgPSBwYWdlX3RvX3NrYih2aSwgcnEsIHBhZ2UsIDAsIGxlbiwgUEFHRV9TSVpFLCAwKTtcbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYy0yMDE4LVx0dTY0X3N0YXRzX2FkZChcdTAwMjZzdGF0cy1cdTAwM2VieXRlcywgbGVuIC0gdmktXHUwMDNlaGRyX2xlbik7XG4tLVxuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jPTIzNzY9c3RhdGljIHN0cnVjdCBza19idWZmICpyZWNlaXZlX21lcmdlYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYy0yNDEzLVxuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jOjI0MTQ6XHRoZWFkX3NrYiA9IHBhZ2VfdG9fc2tiKHZpLCBycSwgcGFnZSwgb2Zmc2V0LCBsZW4sIHRydWVzaXplLCBoZWFkcm9vbSk7XG5kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMtMjQxNS1cdGN1cnJfc2tiID0gaGVhZF9za2I7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NTk5CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBWaXJ0aW8tTmV0IEdTTyBhbmQgUGFja2V0IEhhbmRsaW5nKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCYjMzk7cyBydW5uaW5nIHRocm91Z2ggbXkgaGVhZCBhcyBJIGxvb2sgYXQgdGhlc2UgZnVuY3Rpb25zIGFuZCBjb25maWd1cmF0aW9ucy4gYHJlY2VpdmVfYmlnYCBhbmQgYHJlY2VpdmVfbWVyZ2VhYmxlYCBpbiBgZHJpdmVycy9uZXQvdmlydGlvX25ldC5jYCBhcmUgc29saWQgc3RhcnRpbmcgcG9pbnRzLCBhcyB1c3VhbC4gTGV0JiMzOTtzIGRpZyBkZWVwZXIgaW50byB0aGUgR1NPIGhhbmRsaW5nLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGltcGxlbWVudGF0aW9uLCBzbyBsZXQmIzM5O3Mgc3RhcnQgd2l0aCBgX192aXJ0aW9fbmV0X2hkcl90b19za2JgIGluIGBpbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaGAuIEFoLCB5ZXMsIHRoZXJlIGl0IGlzOgpgYGBjCgkJCUJVSUxEX0JVR19PTihUQ1BfTUlOX0dTT19TSVpFICogR1NPX01BWF9TRUdTICZsdDsgR1NPX01BWF9TSVpFKTsKCQkJZ3NvX3NpemUgPSBtYXgoZ3NvX3NpemUsIFRDUF9NSU5fR1NPX1NJWkUpOwpgYGAKVGhhdCBgQlVJTERfQlVHX09OYCBsb29rcyBmYW1pbGlhciDigJMgaXQmIzM5O3MgYWRkcmVzc2luZyB0aGF0IHBvdGVudGlhbCBpc3N1ZSB3aXRoIEdTTyBzaXplLiBHb29kIGNhdGNoLiBBbmQgdGhlIGBnc29fc2l6ZSA9IG1heChnc29fc2l6ZSwgVENQX01JTl9HU09fU0laRSlgIGlzIGFub3RoZXIgY3JpdGljYWwgcGllY2Ugb2YgdGhhdCBmaXg7IGVuc3VyaW5nIGEgcmVhc29uYWJsZSBtaW5pbXVtLgoKTW92aW5nIG9uLCB0aGUgb3RoZXIgY3J1Y2lhbCBzcG90IHNlZW1zIHRvIGJlIGluIGBza2Jfc2VnbWVudGA6CmBgYGMKCQlwYXJ0aWFsX3NlZ3MgPSBtaW4obGVuIC8gbXNzLCBHU09fTUFYX1NFR1MpOwpgYGAKUmlnaHQsIHRoaXMgbG9va3MgbGlrZSBpdOKAmXMgdG8gcHJldmVudCBgcGFydGlhbF9zZWdzYCBmcm9tIG92ZXJmbG93aW5nIGBHU09fTUFYX1NFR1NgLiBDbGFzc2ljIEdTTyBzZWdtZW50YXRpb24gbGltaXQgcHJvdGVjdGlvbi4KClNvLCB0YWtpbmcgYSBzdGVwIGJhY2sgdG8gb3JnYW5pemUgbXkgdGhvdWdodHMsIHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgSSB3YW50IHRvIHRob3JvdWdobHkgcmV2aWV3IGFuZCB0cmFjZSBhcmU6Ci0gYHNrYl9zZWdtZW50YCAob2J2aW91c2x5LCBnaXZlbiB0aGUgR1NPIGZvY3VzKQotIGB0dW5fZ2V0X3VzZXJgCi0gYHRhcF9nZXRfdXNlcmAKLSBgcGFja2V0X3NuZGAKLSBgdHBhY2tldF9zbmRgCi0gYHJlY2VpdmVfYmlnYAotIGByZWNlaXZlX21lcmdlYWJsZWAKClRob3NlIHNlZW0gbGlrZSB0aGUgY3JpdGljYWwgcGF0aHMuIE5vdywgdG8gbWFrZSBzdXJlIEkgaGF2ZSB0aGUgY29udGV4dCwgd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgaW52b2x2ZWQ/IEkga25vdyBgVFVOYCwgYE1BQ1ZUQVBgLCBgUEFDS0VUYCwgYW5kIGBWSVJUSU9fTkVUYCBhcmUgYWxsIHJlbGV2YW50IGhlcmUuIE5vdyBsZXQmIzM5O3Mgc2VlIHdoZXJlIHRoZSBjb25maWd1cmF0aW9uIHNpdHMsIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IHRoZSBgS2NvbmZpZ2AgZm9yIGBWSVJUSU9fTkVUYCB0byBjaGVjayBpZiBJIGFtIG1pc3Npbmcgc29tZXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxOToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVklSVElPX05FVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTQzNT1jb25maWcgVkVUSFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctNDQyLVxuZHJpdmVycy9uZXQvS2NvbmZpZzo0NDM6Y29uZmlnIFZJUlRJT19ORVRcbmRyaXZlcnMvbmV0L0tjb25maWctNDQ0LVx0dHJpc3RhdGUgXCYjMzQ7VmlydGlvIG5ldHdvcmsgZHJpdmVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NTEzCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIE1BQ1ZUQVAgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIGBNQUNWVEFQYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBgS2NvbmZpZ2AgZmlsZXMuIFRoYXQmIzM5O3MgdGhlIGRlZmluaXRpdmUgc291cmNlIGZvciB0aGVzZSBzb3J0cyBvZiBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgYE1BQ1ZUQVBgIGlzIGRlZmluZWQsIHdoaWNoIHNldHRpbmdzIGNvbnRyb2wgaXQsIGFuZCB3aGF0IG90aGVyIGNvbXBvbmVudHMgaXQgbWlnaHQgZGVwZW5kIG9uLiBIb3BlZnVsbHksIHRoZSByZWxldmFudCBgS2NvbmZpZ2AgZW50cnkgaXMgd2VsbC1jb21tZW50ZWQgYW5kIGNsZWFyLiBJJiMzOTttIGxvb2tpbmcgZm9yIGFueSBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBiZSByZWxldmFudCB0byB0aGUgaXNzdWUgSSYjMzk7bSBkZWJ1Z2dpbmcgb3IgdGhlIGZlYXR1cmUgSSYjMzk7bSBlbmFibGluZy4gSSYjMzk7bGwgYmUgZXhwZWN0aW5nIHRvIHNlZSBhIGJvb2xlYW4gY29uZmlndXJhdGlvbiBvcHRpb24gZGVmaW5lZCBzb21ld2hlcmUsIGFsb25nIHdpdGggbWF5YmUgc29tZSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgb24gb3RoZXIgbmV0d29yayBvciB2aXJ0dWFsaXphdGlvbiBtb2R1bGVzLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gc3BhY2UgYW5kIGRlY2lkZSBpZiB0aGlzIGlzIGFjdHVhbGx5IGVuYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQUNWVEFQJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9MTY1PWNvbmZpZyBNQUNWTEFOXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0xNzgtXG5kcml2ZXJzL25ldC9LY29uZmlnOjE3OTpjb25maWcgTUFDVlRBUFxuZHJpdmVycy9uZXQvS2NvbmZpZy0xODAtXHR0cmlzdGF0ZSBcJiMzNDtNQUMtVkxBTiBiYXNlZCB0YXAgZHJpdmVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4ODIyCgkJCQkJCQlvdXRwdXQ6IDE2CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQ2hlY2tpbmcgdGhlIFRVTiBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGBLY29uZmlnYCBmaWxlcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBgVFVOYCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgc2hvdWxkIHF1aWNrbHkgdmVyaWZ5IHRoZSByZWxldmFudCBkZXBlbmRlbmNpZXMgYW5kIHBvc3NpYmxlIGJ1aWxkIGZsYWdzLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIGFueSByZWNlbnQgY2hhbmdlcyBtaWdodCBoYXZlIGltcGFjdGVkIHRoZSBkZWZhdWx0IHNldHRpbmdzLiBJdCYjMzk7cyBiZXN0IHRvIGNvbmZpcm0gdGhlIGBUVU5gIGRldmljZSBpcyBlbmFibGVkLCBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYXMgZXhwZWN0ZWQgZm9yIHRoZSBjdXJyZW50IHVzZSBjYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxOToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVFVOJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlPTI0MD1jb25maWcgVEFSR0VUX0NQVVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlLTI2NC1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlOjI2NTpjb25maWcgVFVORV9DUFVcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlLTI2Ni1cdHN0cmluZ1xuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZz00NzE9Y2hvaWNlXG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnLTQ3NC1cbmFyY2gvcmlzY3YvS2NvbmZpZzo0NzU6Y29uZmlnIFRVTkVfR0VORVJJQ1xuYXJjaC9yaXNjdi9LY29uZmlnLTQ3Ni1cdGJvb2wgXCYjMzQ7Z2VuZXJpY1wmIzM0O1xuLS1cbmFyY2gvczM5MC9LY29uZmlnPTQ2MT1jaG9pY2Vcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy00NzEtXG5hcmNoL3MzOTAvS2NvbmZpZzo0NzI6Y29uZmlnIFRVTkVfREVGQVVMVFxuYXJjaC9zMzkwL0tjb25maWctNDczLVx0Ym9vbCBcJiMzNDtEZWZhdWx0XCYjMzQ7XG4tLVxuYXJjaC9zMzkwL0tjb25maWctNDc3LVxuYXJjaC9zMzkwL0tjb25maWc6NDc4OmNvbmZpZyBUVU5FX1oxMFxuYXJjaC9zMzkwL0tjb25maWctNDc5LVx0Ym9vbCBcJiMzNDtJQk0gU3lzdGVtIHoxMFwmIzM0O1xuYXJjaC9zMzkwL0tjb25maWctNDgwLVxuYXJjaC9zMzkwL0tjb25maWc6NDgxOmNvbmZpZyBUVU5FX1oxOTZcbmFyY2gvczM5MC9LY29uZmlnLTQ4Mi1cdGJvb2wgXCYjMzQ7SUJNIHpFbnRlcnByaXNlIDExNCBhbmQgMTk2XCYjMzQ7XG4tLVxuYXJjaC9zMzkwL0tjb25maWctNDg0LVxuYXJjaC9zMzkwL0tjb25maWc6NDg1OmNvbmZpZyBUVU5FX1pFQzEyXG5hcmNoL3MzOTAvS2NvbmZpZy00ODYtXHRib29sIFwmIzM0O0lCTSB6QkMxMiBhbmQgekVDMTJcJiMzNDtcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy00ODgtXG5hcmNoL3MzOTAvS2NvbmZpZzo0ODk6Y29uZmlnIFRVTkVfWjEzXG5hcmNoL3MzOTAvS2NvbmZpZy00OTAtXHRib29sIFwmIzM0O0lCTSB6MTNzIGFuZCB6MTNcJiMzNDtcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy00OTItXG5hcmNoL3MzOTAvS2NvbmZpZzo0OTM6Y29uZmlnIFRVTkVfWjE0XG5hcmNoL3MzOTAvS2NvbmZpZy00OTQtXHRib29sIFwmIzM0O0lCTSB6MTQgWlIxIGFuZCB6MTRcJiMzNDtcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy00OTYtXG5hcmNoL3MzOTAvS2NvbmZpZzo0OTc6Y29uZmlnIFRVTkVfWjE1XG5hcmNoL3MzOTAvS2NvbmZpZy00OTgtXHRib29sIFwmIzM0O0lCTSB6MTVcJiMzNDtcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy01MDAtXG5hcmNoL3MzOTAvS2NvbmZpZzo1MDE6Y29uZmlnIFRVTkVfWjE2XG5hcmNoL3MzOTAvS2NvbmZpZy01MDItXHRib29sIFwmIzM0O0lCTSB6MTZcJiMzNDtcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy01MDQtXG5hcmNoL3MzOTAvS2NvbmZpZzo1MDU6Y29uZmlnIFRVTkVfWjE3XG5hcmNoL3MzOTAvS2NvbmZpZy01MDYtXHRib29sIFwmIzM0O0lCTSB6MTdcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTM4Nj1jb25maWcgUklPTkVUX1JYX1NJWkVcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTM5MC1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzkxOmNvbmZpZyBUVU5cbmRyaXZlcnMvbmV0L0tjb25maWctMzkyLVx0dHJpc3RhdGUgXCYjMzQ7VW5pdmVyc2FsIFRVTi9UQVAgZGV2aWNlIGRyaXZlciBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz00MTU9Y29uZmlnIFRBUFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctNDIwLVxuZHJpdmVycy9uZXQvS2NvbmZpZzo0MjE6Y29uZmlnIFRVTl9WTkVUX0NST1NTX0xFXG5kcml2ZXJzL25ldC9LY29uZmlnLTQyMi1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgY3Jvc3MtZW5kaWFuIHZuZXQgaGVhZGVycyBvbiBsaXR0bGUtZW5kaWFuIGtlcm5lbHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTk6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk4NzIKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHRob3VnaCBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKktjb25maWcgRGl2ZSBmb3IgUEFDS0VUKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBvciBzZXR0aW5ncyByZWxhdGVkIHRvIHRoZSBgUEFDS0VUYCBmdW5jdGlvbmFsaXR5IGluIHRoaXMgcHJvamVjdC4gRmlyc3QsIG15IGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBgS2NvbmZpZ2AgZmlsZXMuIFRoYXQmIzM5O3MgdXN1YWxseSB0aGUgY2VudHJhbCBodWIgZm9yIGRlZmluaW5nIGFuZCBjb250cm9sbGluZyBrZXJuZWwgZmVhdHVyZXMsIGRyaXZlcnMsIGFuZCBvcHRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGxvY2F0ZSB0aGUgcmVsZXZhbnQgYEtjb25maWdgIGZpbGVzIOKAkyBwcm9iYWJseSBzdGFydGluZyB3aXRoIHRoZSBtb3JlIGdlbmVyYWwgb25lcyBhbmQgdGhlbiBkcmlsbGluZyBkb3duIGlmIG5lY2Vzc2FyeS4gVGhlIGdvYWwgaGVyZSBpcyB0byB1bmRlcnN0YW5kIHRoZSBkaWZmZXJlbnQgYFBBQ0tFVGAgcmVsYXRlZCBjb25maWd1cmF0aW9ucyBhdmFpbGFibGUsIHRoZWlyIGRlZmF1bHRzLCBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIHNldHRpbmdzLCBhbmQsIGNydWNpYWxseSwgaG93IHRvIGVuYWJsZSBvciBkaXNhYmxlIHRoZW0gd2l0aGluIHRoZSBidWlsZCBzeXN0ZW0uIEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc2ltcGxlIG1vZHVsZSwgc29tZXRoaW5nIG1vcmUgY29tcGxleCwgb3IgcGVyaGFwcyBhIHNldCBvZiByZWxhdGVkIG9wdGlvbnM/IExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQUNLRVQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3BhY2tldC9LY29uZmlnLTUtXG5uZXQvcGFja2V0L0tjb25maWc6Njpjb25maWcgUEFDS0VUXG5uZXQvcGFja2V0L0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O1BhY2tldCBzb2NrZXRcJiMzNDtcbi0tXG5uZXQvcGFja2V0L0tjb25maWctMTgtXG5uZXQvcGFja2V0L0tjb25maWc6MTk6Y29uZmlnIFBBQ0tFVF9ESUFHXG5uZXQvcGFja2V0L0tjb25maWctMjAtXHR0cmlzdGF0ZSBcJiMzNDtQYWNrZXQ6IHNvY2tldHMgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTk6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAxODcKCQkJCQkJCW91dHB1dDogMTg4CgkJCQkJCQl0aG91Z2h0czogMzA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLCBmb2N1c2luZyBvbiBuZXR3b3JrLXJlbGF0ZWQgY29kZS4gTXkgY29uZmlncyB0ZWxsIG1lIHRvIGNvbnNpZGVyIGBUVU5gLCBgTUFDVlRBUGAsIGBQQUNLRVRgLCBgVklSVElPX05FVGAsIGFuZCBgVEFQYC4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgYHNrYl9zZWdtZW50YCBpbiBgbmV0L2NvcmUvc2tidWZmLmNgIGlzIGFsd2F5cyBjb21waWxlZDsgSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLgoKSSYjMzk7dmUgaWRlbnRpZmllZCBhIGhhbmRmdWwgb2YgZnVuY3Rpb25zIHRoYXQgc2VlbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gVGhlc2UgaW5jbHVkZSBgc2tiX3NlZ21lbnRgLCBgdHVuX2dldF91c2VyYCwgYHRhcF9nZXRfdXNlcmAsIGBwYWNrZXRfc25kYCwgYHRwYWNrZXRfc25kYCwgYHJlY2VpdmVfYmlnYCwgYW5kIGByZWNlaXZlX21lcmdlYWJsZWAuIAoKSGFuZyBvbiwgYHJlY2VpdmVfYmlnYCBhbmQgYHJlY2VpdmVfbWVyZ2VhYmxlYCBhcmUgc3BlY2lmaWMgdG8gYHZpcnRpb19uZXRgLCByaWdodD8gQW5kIHRoZXkmIzM5O3JlIHN0YXRpYyBidXQgbm90IGlubGluZWQuIEdvb2QgdG8ga25vdy4gYHNrYl9zZWdtZW50YCBpcyBleHBvcnRlZCwgdGhhdCYjMzk7cyB1c2VmdWwuIEFuZCBhbGwgdGhlIG90aGVycywgYHR1bl9nZXRfdXNlcmAsIGB0YXBfZ2V0X3VzZXJgLCBgcGFja2V0X3NuZGAsIGFuZCBgdHBhY2tldF9zbmRgIGFyZSBzdGF0aWMuCgpUaGUga2V5IHF1ZXN0aW9uIGlzLCBhcmUgdGhleSBzdWl0YWJsZSBmb3IgZnV6emluZz8gQW5kIHRoZSBhbnN3ZXIgaXMgeWVzLCBhYnNvbHV0ZWx5ISBUaGVzZSBhcHBlYXIgdG8gYmUgZW50cnkgcG9pbnRzIHRoYXQgaGFuZGxlIHVzZXItcHJvdmlkZWQgZGF0YS4gYHR1bl9nZXRfdXNlcmAgaGFuZGxlcyBkYXRhIHdoZW4gd3JpdGluZyB0byBhIFRVTiBkZXZpY2UsIGB0YXBfZ2V0X3VzZXJgIHdoZW4gd3JpdGluZyB0byBhIFRBUCBkZXZpY2UuIFRoZW4gYHBhY2tldF9zbmRgIGFuZCBgdHBhY2tldF9zbmRgIGFyZSBpbnZvbHZlZCBpbiBzZW5kaW5nIHBhY2tldHMgdmlhIEFGX1BBQ0tFVCBzb2NrZXRzLiBBbmQgZmluYWxseSwgYHNrYl9zZWdtZW50YCBpcyB0aWVkIHRvIEdTTyBzZWdtZW50YXRpb24sIHNvIGl0IGRlZmluaXRlbHkgZGVhbHMgd2l0aCBwYWNrZXQgZGF0YS4KCkFscmlnaHQsIEkmIzM5O20gY29uZmlkZW50IGluIHRoZXNlIHRhcmdldHMuIFRpbWUgdG8gZmVlZCB0aGlzIGluZm9ybWF0aW9uIHRvIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgYW5kIG1vdmUgb24gdG8gdGhlIG5leHQgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTk6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RVTiYjMzQ7LAogICAgJiMzNDtUQVAmIzM0OywKICAgICYjMzQ7TUFDVlRBUCYjMzQ7LAogICAgJiMzNDtQQUNLRVQmIzM0OywKICAgICYjMzQ7VklSVElPX05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NrYl9zZWdtZW50JiMzNDssCiAgICAmIzM0O3R1bl9nZXRfdXNlciYjMzQ7LAogICAgJiMzNDt0YXBfZ2V0X3VzZXImIzM0OywKICAgICYjMzQ7cGFja2V0X3NuZCYjMzQ7LAogICAgJiMzNDt0cGFja2V0X3NuZCYjMzQ7LAogICAgJiMzNDtyZWNlaXZlX2JpZyYjMzQ7LAogICAgJiMzNDtyZWNlaXZlX21lcmdlYWJsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgbG9naWMgZm9yIEdTTyBzZWdtZW50YXRpb24gKGBza2Jfc2VnbWVudGApIGFuZCB2aXJ0aW8gbmV0IGhlYWRlciBwYXJzaW5nIChgX192aXJ0aW9fbmV0X2hkcl90b19za2JgKS4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaG93IHBhY2tldHMgYXJlIHNlZ21lbnRlZCBhbmQgaG93IHZpcnRpbyBoZWFkZXJzIGFyZSB2YWxpZGF0ZWQsIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIFRVTi9UQVAgZGV2aWNlcywgQUZfUEFDS0VUIHNvY2tldHMsIGFuZCB2aXJ0aW8tbmV0LiBUaGUgY2hhbmdlcyBoYXZlIGZ1bmN0aW9uYWwgaW1wYWN0IGFuZCBhcmUgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFVOJiMzNDssCiAgICAmIzM0O1RBUCYjMzQ7LAogICAgJiMzNDtNQUNWVEFQJiMzNDssCiAgICAmIzM0O1BBQ0tFVCYjMzQ7LAogICAgJiMzNDtWSVJUSU9fTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2tiX3NlZ21lbnQmIzM0OywKICAgICYjMzQ7dHVuX2dldF91c2VyJiMzNDssCiAgICAmIzM0O3RhcF9nZXRfdXNlciYjMzQ7LAogICAgJiMzNDtwYWNrZXRfc25kJiMzNDssCiAgICAmIzM0O3RwYWNrZXRfc25kJiMzNDssCiAgICAmIzM0O3JlY2VpdmVfYmlnJiMzNDssCiAgICAmIzM0O3JlY2VpdmVfbWVyZ2VhYmxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBsb2dpYyBmb3IgR1NPIHNlZ21lbnRhdGlvbiAoYHNrYl9zZWdtZW50YCkgYW5kIHZpcnRpbyBuZXQgaGVhZGVyIHBhcnNpbmcgKGBfX3ZpcnRpb19uZXRfaGRyX3RvX3NrYmApLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBob3cgcGFja2V0cyBhcmUgc2VnbWVudGVkIGFuZCBob3cgdmlydGlvIGhlYWRlcnMgYXJlIHZhbGlkYXRlZCwgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgVFVOL1RBUCBkZXZpY2VzLCBBRl9QQUNLRVQgc29ja2V0cywgYW5kIHZpcnRpby1uZXQuIFRoZSBjaGFuZ2VzIGhhdmUgZnVuY3Rpb25hbCBpbXBhY3QgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxOToyMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjIxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBwb3RlbnRpYWwgaXNzdWVzIHdpdGggR1NPIHNpemUgYW5kIHNlZ21lbnQgY2FsY3VsYXRpb25zLCBsaWtlbHkgcHJldmVudGluZyBpbnRlZ2VyIG92ZXJmbG93cywgZXhjZXNzaXZlIHNlZ21lbnQgY291bnRzLCBvciBkaXZpc2lvbiBieSB6ZXJvLiBJdCBlbmZvcmNlcyBhIG1pbmltdW0gYGdzb19zaXplYCBhbmQgbGltaXRzIGBwYXJ0aWFsX3NlZ3NgIHRvIGBHU09fTUFYX1NFR1NgLiBUaGVzZSBhcmUgYXJpdGhtZXRpYyBhbmQgYm91bmRzLWNoZWNraW5nIGZpeGVzLiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb2YgbmV3IGRhdGEgc3RydWN0dXJlcywgbm8gY2hhbmdlcyB0byBtZW1vcnkgaW5pdGlhbGl6YXRpb24sIGFuZCBubyByaXNrIG9mIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNpbmcgaXQgaW4gY29udHJvbCBmbG93LiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgY3Jhc2hlcyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTNiY2QwMTNhZmE1YTg0NDA2ZDJjYmMxNTZkNTYyNWJlYTBjMzhjNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDE5OjE5OjUxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaAppbmRleCBmMzZkMjFiNWJjMTllLi5jMzgxYjkxNmMxYjU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaApAQCAtNiw2ICYjNDM7Niw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvaXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pcHY2LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdWRwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC90Y3AuaCZndDsKICNpbmNsdWRlICZsdDt1YXBpL2xpbnV4L3RjcC5oJmd0OwogI2luY2x1ZGUgJmx0O3VhcGkvbGludXgvdmlydGlvX25ldC5oJmd0OwogCkBAIC0xNzksNiAmIzQzOzE4MCw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IF9fdmlydGlvX25ldF9oZHJfdG9fc2tiKHN0cnVjdCBza19idWZmICpza2IsCiAJCQlpZiAoc2tiLSZndDtpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCAmYW1wOyZhbXA7CiAJCQkgICAgc2tiLSZndDtjc3VtX29mZnNldCAhPSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjaykpCiAJCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CQkJQlVJTERfQlVHX09OKFRDUF9NSU5fR1NPX1NJWkUgKiBHU09fTUFYX1NFR1MgJmx0OyBHU09fTUFYX1NJWkUpOwomIzQzOwkJCWdzb19zaXplID0gbWF4KGdzb19zaXplLCBUQ1BfTUlOX0dTT19TSVpFKTsKIAkJCWJyZWFrOwogCQl9CiAKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmMKaW5kZXggYzgyYTE0NzJhNWVhOC4uNDM5Y2JmZWIwMmJkNiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc2tidWZmLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc2tidWZmLmMKQEAgLTQ4NjAsNyAmIzQzOzQ4NjAsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKmhlYWRfc2tiLAogCQkgKiBkb2VzbiYjMzk7dCBmaXQgaW50byBhbiBNU1Mgc2l6ZWQgYmxvY2ssIHNvIHRha2UgY2FyZSBvZiB0aGF0CiAJCSAqIG5vdy4KIAkJICovCi0JCXBhcnRpYWxfc2VncyA9IGxlbiAvIG1zczsKJiM0MzsJCXBhcnRpYWxfc2VncyA9IG1pbihsZW4gLyBtc3MsIEdTT19NQVhfU0VHUyk7CiAJCWlmIChwYXJ0aWFsX3NlZ3MgJmd0OyAxKQogCQkJbXNzICo9IHBhcnRpYWxfc2VnczsKIAkJZWxzZQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTk6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMxNAoJCQkJCQkJb3V0cHV0OiAxNTUKCQkJCQkJCXRob3VnaHRzOiA4MzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqR1NPIFNpemUgYW5kIFNlZ21lbnQgQm91bmRzIEZpeCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgdmlydGlvX25ldC5oYCBhbmQgYHNrYnVmZi5jYC4gTXkgaW5pdGlhbCByZWFkIGlzIHRoYXQgaXQmIzM5O3MgZGVhbGluZyB3aXRoIEdlbmVyYWxpemVkIFNlZ21lbnRhdGlvbiBPZmZsb2FkIChHU08pIGFuZCwgc3BlY2lmaWNhbGx5LCBob3cgdGhlIHNpemUgb2YgdGhvc2Ugc2VnbWVudHMgaXMgaGFuZGxlZC4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gaW52b2x2ZSBtYWtpbmcgc3VyZSB0aGUgR1NPIHNpemUgZG9lc24mIzM5O3QgYmVjb21lIHRvbyBzbWFsbCBhbmQgdGhlIG51bWJlciBvZiBzZWdtZW50cyBpc24mIzM5O3QgdW5ib3VuZGVkLCB0byBhdm9pZCBpbnRlZ2VyIG92ZXJmbG93cyBvciBkaXZpc2lvbiBieSB6ZXJvLgoKSW4gYF9fdmlydGlvX25ldF9oZHJfdG9fc2tiYCwgdGhlIGFkZGl0aW9uIG9mIGBnc29fc2l6ZSA9IG1heChnc29fc2l6ZSwgVENQX01JTl9HU09fU0laRSlgIGNhdWdodCBteSBleWUuICBUaGlzIGd1YXJhbnRlZXMgdGhhdCB0aGUgc2VnbWVudCBzaXplIHdpbGwgYXQgbGVhc3QgYmUgYFRDUF9NSU5fR1NPX1NJWkVgLCB3aGljaCBpcyBhIGdvb2Qgc2FuaXR5IGNoZWNrLiBUaGVuLCBpbiBgc2tiX3NlZ21lbnRgLCB0aGUgYHBhcnRpYWxfc2VncyA9IG1pbihsZW4gLyBtc3MsIEdTT19NQVhfU0VHUylgIG1vZGlmaWNhdGlvbiBpcyBzbWFydC4gQnkgbGltaXRpbmcgYHBhcnRpYWxfc2Vnc2AgdG8gYEdTT19NQVhfU0VHU2AsIHRoZSBjYWxjdWxhdGlvbiBvZiBgbXNzICogcGFydGlhbF9zZWdzYCBpcyBtYWRlIHNhZmVyLCBwcmV2ZW50aW5nIHRoYXQgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgSSBtZW50aW9uZWQgZWFybGllci4gSWYgYG1zc2AgYmVjYW1lIHRvbyBzbWFsbCwgdGhlIGRpdmlzaW9uIGNvdWxkIHByb2R1Y2UgZXhjZXNzaXZlbHkgbGFyZ2UgbnVtYmVycy4KCk15IGZpcnN0IHRob3VnaHQgd2FzLCAmIzM0O0lzIHRoaXMgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnk/JiMzNDsgR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGVzZSBjaGFuZ2Vz4oCUYWRqdXN0aW5nIGNhbGN1bGF0aW9ucywgZW5zdXJpbmcgYm91bmRzLCBhbmQgcHJvdGVjdGluZyBhZ2FpbnN0IGFyaXRobWV0aWMgaXNzdWVz4oCUaXQgKnNlZW1zKiB1bmxpa2VseS4gIEkgbWVhbiwgdGhpcyBoYXMgbW9yZSB0byBkbyB3aXRoIHBvdGVudGlhbGx5IGdvaW5nIG91dCBvZiBib3VuZHMsIGluZmluaXRlIGxvb3BzLCBhbmQgY3Jhc2hpbmcgZHVlIHRvIGluY29ycmVjdCBjYWxjdWxhdGlvbnMgb2YgR1NPLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSAqdmFsdWVzKiBoZXJlIGFuZCBob3cgdGhleeKAmXJlIHVzZWQsIG5vdCB3aGV0aGVyIHRob3NlIHZhbHVlcyBhcmUgaW5pdGlhbGl6ZWQuIEtBU0FOIHdvdWxkIGRlZmluaXRlbHkgcGljayB1cCBhbnkgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIEtNU0FOIGlzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeS4KCkxldCBtZSBkb3VibGUtY2hlY2suIFRoZSBgZ3NvX3NpemVgIGNvbWVzIGZyb20gYGhkci0mZ3Q7Z3NvX3NpemVgLCBhbmQgYGxlbmAgYW5kIGBtc3NgIGFyZSBkZXJpdmVkIGZyb20gdGhlIGBza2JgJiMzOTtzIHN0YXRlLiBObyBuZXcgYWxsb2NhdGlvbnMgb3IgY29waWVzIGludG8gdXNlciBzcGFjZSBhcmUgaW50cm9kdWNlZC4gVGhlc2UgYXJlIHB1cmVseSBib3VuZHMgY2hlY2tzIGFuZCBhcml0aG1ldGljIGFkanVzdG1lbnRzIG9uIGV4aXN0aW5nLCBpbml0aWFsaXplZCBkYXRhLiAgTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgaW52b2x2ZWQuICBUaGUgcmlzayBpcyBtb3JlIGFib3V0IG1ha2luZyBzdXJlIHRoZSBjYWxjdWxhdGlvbnMgcmVtYWluIHdpdGhpbiByZWFzb25hYmxlIGxpbWl0cyBhbmQgYXZvaWRpbmcgbmFzdHkgc2lkZSBlZmZlY3RzIGZyb20gb3ZlcmZsb3dpbmcgdmFyaWFibGVzIHVzZWQgaW4gY2FsY3VsYXRpb25zLiBNeSBjb25jbHVzaW9uOiBOZWVkc0tNU0FOID0gZmFsc2UuIFRoZSBmaXggaXMgYWJvdXQgc2FmZSBhcml0aG1ldGljLCBzZWdtZW50IGxpbWl0cywgYW5kIHByZXZlbnRpbmcgb3ZlcmZsb3dzLCBub3QgZGVhbGluZyB3aXRoIG1lbW9yeSBpbml0aWFsaXphdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTk6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBHU08gc2l6ZSBhbmQgc2VnbWVudCBjYWxjdWxhdGlvbnMsIGxpa2VseSBwcmV2ZW50aW5nIGludGVnZXIgb3ZlcmZsb3dzLCBleGNlc3NpdmUgc2VnbWVudCBjb3VudHMsIG9yIGRpdmlzaW9uIGJ5IHplcm8uIEl0IGVuZm9yY2VzIGEgbWluaW11bSBgZ3NvX3NpemVgIGFuZCBsaW1pdHMgYHBhcnRpYWxfc2Vnc2AgdG8gYEdTT19NQVhfU0VHU2AuIFRoZXNlIGFyZSBhcml0aG1ldGljIGFuZCBib3VuZHMtY2hlY2tpbmcgZml4ZXMuIFRoZXJlIGlzIG5vIGludHJvZHVjdGlvbiBvZiBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBubyBjaGFuZ2VzIHRvIG1lbW9yeSBpbml0aWFsaXphdGlvbiwgYW5kIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2luZyBpdCBpbiBjb250cm9sIGZsb3cuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBtZW1vcnkgY29ycnVwdGlvbiBvciBjcmFzaGVzIHJlbGF0ZWQgdG8gdGhlc2UgY2hhbmdlcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBHU08gc2l6ZSBhbmQgc2VnbWVudCBjYWxjdWxhdGlvbnMsIGxpa2VseSBwcmV2ZW50aW5nIGludGVnZXIgb3ZlcmZsb3dzLCBleGNlc3NpdmUgc2VnbWVudCBjb3VudHMsIG9yIGRpdmlzaW9uIGJ5IHplcm8uIEl0IGVuZm9yY2VzIGEgbWluaW11bSBgZ3NvX3NpemVgIGFuZCBsaW1pdHMgYHBhcnRpYWxfc2Vnc2AgdG8gYEdTT19NQVhfU0VHU2AuIFRoZXNlIGFyZSBhcml0aG1ldGljIGFuZCBib3VuZHMtY2hlY2tpbmcgZml4ZXMuIFRoZXJlIGlzIG5vIGludHJvZHVjdGlvbiBvZiBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBubyBjaGFuZ2VzIHRvIG1lbW9yeSBpbml0aWFsaXphdGlvbiwgYW5kIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2luZyBpdCBpbiBjb250cm9sIGZsb3cuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBtZW1vcnkgY29ycnVwdGlvbiBvciBjcmFzaGVzIHJlbGF0ZWQgdG8gdGhlc2UgY2hhbmdlcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxOToxOTo1Mi44NDkzNzE0OTdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjgwNTkzMjQxNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFVOXCIsXG4gICAgXCJUQVBcIixcbiAgICBcIk1BQ1ZUQVBcIixcbiAgICBcIlBBQ0tFVFwiLFxuICAgIFwiVklSVElPX05FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNrYl9zZWdtZW50XCIsXG4gICAgXCJ0dW5fZ2V0X3VzZXJcIixcbiAgICBcInRhcF9nZXRfdXNlclwiLFxuICAgIFwicGFja2V0X3NuZFwiLFxuICAgIFwidHBhY2tldF9zbmRcIixcbiAgICBcInJlY2VpdmVfYmlnXCIsXG4gICAgXCJyZWNlaXZlX21lcmdlYWJsZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBHU08gc2l6ZSBhbmQgc2VnbWVudCBjYWxjdWxhdGlvbnMsIGxpa2VseSBwcmV2ZW50aW5nIGludGVnZXIgb3ZlcmZsb3dzLCBleGNlc3NpdmUgc2VnbWVudCBjb3VudHMsIG9yIGRpdmlzaW9uIGJ5IHplcm8uIEl0IGVuZm9yY2VzIGEgbWluaW11bSBgZ3NvX3NpemVgIGFuZCBsaW1pdHMgYHBhcnRpYWxfc2Vnc2AgdG8gYEdTT19NQVhfU0VHU2AuIFRoZXNlIGFyZSBhcml0aG1ldGljIGFuZCBib3VuZHMtY2hlY2tpbmcgZml4ZXMuIFRoZXJlIGlzIG5vIGludHJvZHVjdGlvbiBvZiBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBubyBjaGFuZ2VzIHRvIG1lbW9yeSBpbml0aWFsaXphdGlvbiwgYW5kIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2luZyBpdCBpbiBjb250cm9sIGZsb3cuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBtZW1vcnkgY29ycnVwdGlvbiBvciBjcmFzaGVzIHJlbGF0ZWQgdG8gdGhlc2UgY2hhbmdlcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBsb2dpYyBmb3IgR1NPIHNlZ21lbnRhdGlvbiAoYHNrYl9zZWdtZW50YCkgYW5kIHZpcnRpbyBuZXQgaGVhZGVyIHBhcnNpbmcgKGBfX3ZpcnRpb19uZXRfaGRyX3RvX3NrYmApLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBob3cgcGFja2V0cyBhcmUgc2VnbWVudGVkIGFuZCBob3cgdmlydGlvIGhlYWRlcnMgYXJlIHZhbGlkYXRlZCwgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgVFVOL1RBUCBkZXZpY2VzLCBBRl9QQUNLRVQgc29ja2V0cywgYW5kIHZpcnRpby1uZXQuIFRoZSBjaGFuZ2VzIGhhdmUgZnVuY3Rpb25hbCBpbXBhY3QgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxOToxOTo1Mi44NDkzNzk4MDdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNDg5NTk1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGEzYmNkMDEzYWZhNWE4NDQwNmQyY2JjMTU2ZDU2MjViZWEwYzM4YzRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMTMgMTk6MTk6NTEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaFxcbmluZGV4IGYzNmQyMWI1YmMxOWUuLmMzODFiOTE2YzFiNTQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaFxcbkBAIC02LDYgKzYsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lwdjYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VkcC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L3RjcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC90Y3AuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3VhcGkvbGludXgvdmlydGlvX25ldC5oXFx1MDAzZVxcbiBcXG5AQCAtMTc5LDYgKzE4MCw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IF9fdmlydGlvX25ldF9oZHJfdG9fc2tiKHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdGlmIChza2ItXFx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdCAgICBza2ItXFx1MDAzZWNzdW1fb2Zmc2V0ICE9IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKSlcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRcXHRcXHRCVUlMRF9CVUdfT04oVENQX01JTl9HU09fU0laRSAqIEdTT19NQVhfU0VHUyBcXHUwMDNjIEdTT19NQVhfU0laRSk7XFxuK1xcdFxcdFxcdGdzb19zaXplID0gbWF4KGdzb19zaXplLCBUQ1BfTUlOX0dTT19TSVpFKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmNcXG5pbmRleCBjODJhMTQ3MmE1ZWE4Li40MzljYmZlYjAyYmQ2IDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL3NrYnVmZi5jXFxuKysrIGIvbmV0L2NvcmUvc2tidWZmLmNcXG5AQCAtNDg2MCw3ICs0ODYwLDcgQEAgc3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50KHN0cnVjdCBza19idWZmICpoZWFkX3NrYixcXG4gXFx0XFx0ICogZG9lc24ndCBmaXQgaW50byBhbiBNU1Mgc2l6ZWQgYmxvY2ssIHNvIHRha2UgY2FyZSBvZiB0aGF0XFxuIFxcdFxcdCAqIG5vdy5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdHBhcnRpYWxfc2VncyA9IGxlbiAvIG1zcztcXG4rXFx0XFx0cGFydGlhbF9zZWdzID0gbWluKGxlbiAvIG1zcywgR1NPX01BWF9TRUdTKTtcXG4gXFx0XFx0aWYgKHBhcnRpYWxfc2VncyBcXHUwMDNlIDEpXFxuIFxcdFxcdFxcdG1zcyAqPSBwYXJ0aWFsX3NlZ3M7XFxuIFxcdFxcdGVsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTk6MTk6NTMuMzc0OTg3NDEyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTE1Mzg3OTc5ODA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRVTlwiLFxuICAgIFwiVEFQXCIsXG4gICAgXCJNQUNWVEFQXCIsXG4gICAgXCJQQUNLRVRcIixcbiAgICBcIlZJUlRJT19ORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJza2Jfc2VnbWVudFwiLFxuICAgIFwidHVuX2dldF91c2VyXCIsXG4gICAgXCJ0YXBfZ2V0X3VzZXJcIixcbiAgICBcInBhY2tldF9zbmRcIixcbiAgICBcInRwYWNrZXRfc25kXCIsXG4gICAgXCJyZWNlaXZlX2JpZ1wiLFxuICAgIFwicmVjZWl2ZV9tZXJnZWFibGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgbG9naWMgZm9yIEdTTyBzZWdtZW50YXRpb24gKGBza2Jfc2VnbWVudGApIGFuZCB2aXJ0aW8gbmV0IGhlYWRlciBwYXJzaW5nIChgX192aXJ0aW9fbmV0X2hkcl90b19za2JgKS4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaG93IHBhY2tldHMgYXJlIHNlZ21lbnRlZCBhbmQgaG93IHZpcnRpbyBoZWFkZXJzIGFyZSB2YWxpZGF0ZWQsIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIFRVTi9UQVAgZGV2aWNlcywgQUZfUEFDS0VUIHNvY2tldHMsIGFuZCB2aXJ0aW8tbmV0LiBUaGUgY2hhbmdlcyBoYXZlIGZ1bmN0aW9uYWwgaW1wYWN0IGFuZCBhcmUgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTNiY2QwMTNhZmE1YTg0NDA2ZDJjYmMxNTZkNTYyNWJlYTBjMzhjNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDE5OjE5OjUxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaFxuaW5kZXggZjM2ZDIxYjViYzE5ZS4uYzM4MWI5MTZjMWI1NCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvX25ldC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaFxuQEAgLTYsNiArNiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwdjYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VkcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L3RjcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC90Y3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvdmlydGlvX25ldC5oXHUwMDNlXG4gXG5AQCAtMTc5LDYgKzE4MCw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IF9fdmlydGlvX25ldF9oZHJfdG9fc2tiKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0aWYgKHNrYi1cdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICAgc2tiLVx1MDAzZWNzdW1fb2Zmc2V0ICE9IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKSlcbiBcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0XHRcdEJVSUxEX0JVR19PTihUQ1BfTUlOX0dTT19TSVpFICogR1NPX01BWF9TRUdTIFx1MDAzYyBHU09fTUFYX1NJWkUpO1xuK1x0XHRcdGdzb19zaXplID0gbWF4KGdzb19zaXplLCBUQ1BfTUlOX0dTT19TSVpFKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmNcbmluZGV4IGM4MmExNDcyYTVlYTguLjQzOWNiZmViMDJiZDYgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9za2J1ZmYuY1xuKysrIGIvbmV0L2NvcmUvc2tidWZmLmNcbkBAIC00ODYwLDcgKzQ4NjAsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKmhlYWRfc2tiLFxuIFx0XHQgKiBkb2Vzbid0IGZpdCBpbnRvIGFuIE1TUyBzaXplZCBibG9jaywgc28gdGFrZSBjYXJlIG9mIHRoYXRcbiBcdFx0ICogbm93LlxuIFx0XHQgKi9cbi1cdFx0cGFydGlhbF9zZWdzID0gbGVuIC8gbXNzO1xuK1x0XHRwYXJ0aWFsX3NlZ3MgPSBtaW4obGVuIC8gbXNzLCBHU09fTUFYX1NFR1MpO1xuIFx0XHRpZiAocGFydGlhbF9zZWdzIFx1MDAzZSAxKVxuIFx0XHRcdG1zcyAqPSBwYXJ0aWFsX3NlZ3M7XG4gXHRcdGVsc2VcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE5OjE5OjUzLjM3NDk5NzUwMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwNjk5MzIxMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTmV0d29ya2luZyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0b3VjaGVzIHNvbWUgcHJldHR5IGZ1bmRhbWVudGFsIG5ldHdvcmtpbmcgY29kZS4gSXQncyB0b3VjaGluZyBgaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmhgIGFuZCBgbmV0L2NvcmUvc2tidWZmLmNgLCB3aGljaCBpbW1lZGlhdGVseSByYWlzZXMgbXkgZXllYnJvd3Mg4oCTIHRoYXQncyBjb3JlIHN0dWZmLiBTcGVjaWZpY2FsbHksIGl0IGFwcGVhcnMgdG8gYmUgbW9kaWZ5aW5nIGhvdyBUQ1Agc2VnbWVudGF0aW9uIG9mZmxvYWQgKFRTTykgaXMgaGFuZGxlZCwgZ2l2ZW4gdGhlIGNvbnRleHQgaW4gYF9fdmlydGlvX25ldF9oZHJfdG9fc2tiYCB3aXRoaW4gYHZpcnRpb19uZXQuaGAsIGFuZCBgc2tiX3NlZ21lbnRgIGluIGBuZXQvY29yZS9za2J1ZmYuY2AuXG5cbkkgY2FuIHNlZSBzb21lIHNpZ25pZmljYW50IGNoYW5nZXMgaGVyZS4gSW4gYGluY2x1ZGUvbGludXgvdmlydGlvX25ldC5oYCwgaXQgaW50cm9kdWNlcyBhIGBCVUlMRF9CVUdfT05gIGNoZWNrIGFuZCBtb2RpZmllcyB0aGUgYGdzb19zaXplYCBjYWxjdWxhdGlvbiwgc3BlY2lmaWNhbGx5IHVzaW5nIGBUQ1BfTUlOX0dTT19TSVpFYC4gVGhpcyBzdWdnZXN0cyB0aGV5J3JlIHRyeWluZyB0byBlbmZvcmNlIGEgbWluaW11bSBHU08gc2l6ZSwgbGlrZWx5IHRvIGFsaWduIHdpdGggc29tZSBoYXJkd2FyZSBjb25zdHJhaW50IG9yIG9wdGltaXphdGlvbi4gVGhlIGBtaW5gIGZ1bmN0aW9uIGluIGBuZXQvY29yZS9za2J1ZmYuY2AsIHN1Z2dlc3RzIHRoZXJlIGlzIGFuIHVwcGVyIGJvdW5kIG9uIGBsZW4gLyBtc3NgLCB3aGljaCBwcmV2ZW50cyBsYXJnZSBzZWdtZW50cyBmcm9tIGJlaW5nIGNyZWF0ZWQuIFRoaXMgbG9va3MgcmVsYXRlZCB0byBob3cgcGFja2V0cyBhcmUgZnJhZ21lbnRlZCBhbmQgcmVhc3NlbWJsZWQsIHdoaWNoIGlzIHdoZXJlIFRTTyBvZnRlbiBjb21lcyBpbnRvIHBsYXkuXG5cbkdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIGZ1bmN0aW9uYWwgY2hhbmdlcywgdGhpcyBwYXRjaCB3YXJyYW50cyB0aG9yb3VnaCBmdXp6aW5nLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gaWRlbnRpZnlpbmcgdGhlIGtleSBlbnRyeSBwb2ludHMuIGBza2Jfc2VnbWVudGAgaXMgYSBub24tc3RhdGljLCBleHBvcnRlZCBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgaXQncyBhIGRpcmVjdCBBUEkgZW50cnlwb2ludC4gVGhhdCdzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBgX192aXJ0aW9fbmV0X2hkcl90b19za2JgLCBvbiB0aGUgb3RoZXIgaGFuZCwgaXMgc3RhdGljIGFuZCBpbmxpbmUsIG1lYW5pbmcgaXQncyBpbmxpbmVkLiBUaGVyZWZvcmUsIEkgbmVlZCB0byB0cmFjZSBpdHMgdXNlcyB0byBmaW5kIHRoZSBhY3R1YWwgY2FsbCBzaXRlcyB0aGF0IEknbGwgbmVlZCB0byBmdXp6LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzE3LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDk2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTk6MjA6MDEuNDQ0OTMzNDA4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMjgwNDMzMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX192aXJ0aW9fbmV0X2hkcl90b19za2JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0Lmg9Mjk9c3RhdGljIGlubGluZSBpbnQgdmlydGlvX25ldF9oZHJfc2V0X3Byb3RvKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaC01MC1cXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaDo1MTpzdGF0aWMgaW5saW5lIGludCBfX3ZpcnRpb19uZXRfaGRyX3RvX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmluY2x1ZGUvbGludXgvdmlydGlvX25ldC5oLTUyLVxcdFxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IHZpcnRpb19uZXRfaGRyICpoZHIsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaD0yMDc9c3RhdGljIGlubGluZSBpbnQgdmlydGlvX25ldF9oZHJfdG9fc2tiKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaC0yMTAte1xcbmluY2x1ZGUvbGludXgvdmlydGlvX25ldC5oOjIxMTpcXHRyZXR1cm4gX192aXJ0aW9fbmV0X2hkcl90b19za2Ioc2tiLCBoZHIsIGxpdHRsZV9lbmRpYW4sIGhkci1cXHUwMDNlZ3NvX3R5cGUpO1xcbmluY2x1ZGUvbGludXgvdmlydGlvX25ldC5oLTIxMi19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaD0yOTY9dmlydGlvX25ldF9oZHJfdG5sX3RvX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmgtMzQ1LVxcdC8qIExldCB0aGUgYmFzaWMgcGFyc2luZyBkZWFsIHdpdGggcGxhaW4gR1NPIGZlYXR1cmVzLiAqL1xcbmluY2x1ZGUvbGludXgvdmlydGlvX25ldC5oOjM0NjpcXHRyZXQgPSBfX3ZpcnRpb19uZXRfaGRyX3RvX3NrYihza2IsIGhkciwgdHJ1ZSxcXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaC0zNDctXFx0XFx0XFx0XFx0ICAgICAgaGRyLVxcdTAwM2Vnc29fdHlwZSBcXHUwMDI2IH5nc29fdHVubmVsX3R5cGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxOToyMDowMy43NzI5ODQ1MjdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTg4Njc3OTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0IHByb2Nlc3NlczpcblxuKipBbmFseXppbmcgdmlydGlvX25ldCBIZWFkZXIgQ29udmVyc2lvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBgdmlydGlvX25ldF9oZHJfdG9fc2tiYCBhbmQgYHZpcnRpb19uZXRfaGRyX3RubF90b19za2JgIGZ1bmN0aW9ucywgYW5kIHRoZSBmYWN0IHRoYXQgdGhleSdyZSBib3RoIGRlY2xhcmVkIGFzIGBzdGF0aWMgaW5saW5lYCBpcyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZy4gVGhpcyBtZWFucyB0aGV5J3JlIGxpa2VseSBwZXJmb3JtYW5jZS1jcml0aWNhbCBhbmQgb3B0aW1pemVkIGZvciBpbmxpbmluZy4gTm93LCBteSBuZXh0IG1vdmUgaXMgY2xlYXI6IEkgbmVlZCB0byB0cmFjZSB0aGVpciB1c2FnZS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSAqd2hlcmUqIHRoZXkncmUgYmVpbmcgY2FsbGVkIHdpdGhpbiB0aGUgYnJvYWRlciB2aXJ0aW8tbmV0IGltcGxlbWVudGF0aW9uLiBGaW5kaW5nIHRoZWlyIGNhbGwgc2l0ZXMgd2lsbCBnaXZlIG1lIGNydWNpYWwgY29udGV4dC4gVGhpcyBzaG91bGQgdGVsbCBtZSB3aGF0IGRhdGEgaXMgYmVpbmcgdHJhbnNsYXRlZCwgd2hlbiBhbmQgYnkgd2hhdCBwYXJ0cyBvZiB0aGUgbmV0d29ya2luZyBzdGFjay4gVW5kZXJzdGFuZGluZyB0aGlzIGlzIGtleSB0byBmb3JtaW5nIGEgZnVsbGVyIHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2MjUsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxOToyMDowNy4zNjE2NjQ1NTlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ3NDY2MTI3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aXJ0aW9fbmV0X2hkcl90b19za2JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC91bS9kcml2ZXJzL3ZlY3Rvcl90cmFuc3BvcnRzLmM9MTk2PXN0YXRpYyBpbnQgcmF3X3ZlcmlmeV9oZWFkZXIoXFxuLS1cXG5hcmNoL3VtL2RyaXZlcnMvdmVjdG9yX3RyYW5zcG9ydHMuYy0yMTEtXFxuYXJjaC91bS9kcml2ZXJzL3ZlY3Rvcl90cmFuc3BvcnRzLmM6MjEyOlxcdHZpcnRpb19uZXRfaGRyX3RvX3NrYihza2IsIHZoZWFkZXIsIHZpcnRpb19sZWdhY3lfaXNfbGl0dGxlX2VuZGlhbigpKTtcXG5hcmNoL3VtL2RyaXZlcnMvdmVjdG9yX3RyYW5zcG9ydHMuYy0yMTMtXFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL25ldC90dW5fdm5ldC5oPTE4MD1zdGF0aWMgaW5saW5lIGludCB0dW5fdm5ldF9oZHJfdG9fc2tiKHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bl92bmV0LmgtMTgyLXtcXG5kcml2ZXJzL25ldC90dW5fdm5ldC5oOjE4MzpcXHRyZXR1cm4gdmlydGlvX25ldF9oZHJfdG9fc2tiKHNrYiwgaGRyLCB0dW5fdm5ldF9pc19saXR0bGVfZW5kaWFuKGZsYWdzKSk7XFxuZHJpdmVycy9uZXQvdHVuX3ZuZXQuaC0xODQtfVxcbi0tXFxuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jPTgzNj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnBhZ2VfdG9fc2tiKHN0cnVjdCB2aXJ0bmV0X2luZm8gKnZpLFxcbi0tXFxuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jLTg4OC1cXHQvKiBDb3B5IGFsbCBmcmFtZSBpZiBpdCBmaXRzIHNrYi1cXHUwMDNlaGVhZCwgb3RoZXJ3aXNlXFxuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jOjg4OTpcXHQgKiB3ZSBsZXQgdmlydGlvX25ldF9oZHJfdG9fc2tiKCkgYW5kIEdSTyBwdWxsIGhlYWRlcnMgYXMgbmVlZGVkLlxcbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYy04OTAtXFx0ICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaD0yOT1zdGF0aWMgaW5saW5lIGludCB2aXJ0aW9fbmV0X2hkcl9zZXRfcHJvdG8oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmluY2x1ZGUvbGludXgvdmlydGlvX25ldC5oLTUwLVxcbmluY2x1ZGUvbGludXgvdmlydGlvX25ldC5oOjUxOnN0YXRpYyBpbmxpbmUgaW50IF9fdmlydGlvX25ldF9oZHJfdG9fc2tiKHN0cnVjdCBza19idWZmICpza2IsXFxuaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmgtNTItXFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgdmlydGlvX25ldF9oZHIgKmhkcixcXG4tLVxcbmluY2x1ZGUvbGludXgvdmlydGlvX25ldC5oLTIwNi1cXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaDoyMDc6c3RhdGljIGlubGluZSBpbnQgdmlydGlvX25ldF9oZHJfdG9fc2tiKHN0cnVjdCBza19idWZmICpza2IsXFxuaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmgtMjA4LVxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCB2aXJ0aW9fbmV0X2hkciAqaGRyLFxcbi0tXFxuaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmgtMjEwLXtcXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaDoyMTE6XFx0cmV0dXJuIF9fdmlydGlvX25ldF9oZHJfdG9fc2tiKHNrYiwgaGRyLCBsaXR0bGVfZW5kaWFuLCBoZHItXFx1MDAzZWdzb190eXBlKTtcXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaC0yMTItfVxcbi0tXFxuaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0Lmg9Mjk2PXZpcnRpb19uZXRfaGRyX3RubF90b19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmluY2x1ZGUvbGludXgvdmlydGlvX25ldC5oLTMxMC1cXHRpZiAoIWdzb190dW5uZWxfdHlwZSlcXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaDozMTE6XFx0XFx0cmV0dXJuIHZpcnRpb19uZXRfaGRyX3RvX3NrYihza2IsIGhkciwgbGl0dGxlX2VuZGlhbik7XFxuaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmgtMzEyLVxcbi0tXFxuaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmgtMzQ1LVxcdC8qIExldCB0aGUgYmFzaWMgcGFyc2luZyBkZWFsIHdpdGggcGxhaW4gR1NPIGZlYXR1cmVzLiAqL1xcbmluY2x1ZGUvbGludXgvdmlydGlvX25ldC5oOjM0NjpcXHRyZXQgPSBfX3ZpcnRpb19uZXRfaGRyX3RvX3NrYihza2IsIGhkciwgdHJ1ZSxcXG5pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaC0zNDctXFx0XFx0XFx0XFx0ICAgICAgaGRyLVxcdTAwM2Vnc29fdHlwZSBcXHUwMDI2IH5nc29fdHVubmVsX3R5cGUpO1xcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yNzM2PXN0YXRpYyBpbnQgdHBhY2tldF9zbmQoc3RydWN0IHBhY2tldF9zb2NrICpwbywgc3RydWN0IG1zZ2hkciAqbXNnKVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yODk0LVxcdFxcdGlmIChoYXNfdm5ldF9oZHIpIHtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI4OTU6XFx0XFx0XFx0aWYgKHZpcnRpb19uZXRfaGRyX3RvX3NrYihza2IsIFxcdTAwMjZ2bmV0X2hkciwgdmlvX2xlKCkpKSB7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yODk2LVxcdFxcdFxcdFxcdHRwX2xlbiA9IC1FSU5WQUw7XFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTI5NjY9c3RhdGljIGludCBwYWNrZXRfc25kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzA5Ni1cXHRpZiAodm5ldF9oZHJfc3opIHtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjMwOTc6XFx0XFx0ZXJyID0gdmlydGlvX25ldF9oZHJfdG9fc2tiKHNrYiwgXFx1MDAyNnZuZXRfaGRyLCB2aW9fbGUoKSk7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMDk4LVxcdFxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE5OjIwOjA5LjgzNjMzNTk2NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NjcyNDY2NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5ldHdvcmsgSGVhZGVyIENvbnZlcnNpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHBhY2tldCBoZWFkZXJzIGFyZSBoYW5kbGVkIGFjcm9zcyBhIGZldyBkaWZmZXJlbnQgZHJpdmVycy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNhdGVnb3JpemUgYSBmZXcga2V5IGZ1bmN0aW9ucy4gYHR1bl92bmV0X2hkcl90b19za2JgIGlzIHVzZWQgc3BlY2lmaWNhbGx5IGluIHRoZSBgdHVuYCwgYG1hY3Z0YXBgLCBhbmQgYHRhcGAgZHJpdmVycyDigJMgYWxsIG9mIHdoaWNoIGFyZSBpbnZvbHZlZCBpbiB0dW5uZWxpbmcgb3IgYnJpZGdpbmcgbmV0d29yayB0cmFmZmljLiBUaGF0J3MgZ29vZCB0byBrbm93LCBmb2N1c2VzIG1lLlxuXG5UaGVuLCBJJ3ZlIGdvdCBgdmlydGlvX25ldF9oZHJfdG9fc2tiYCwgYW5kIEkgc2VlIHRoYXQgZnVuY3Rpb24gYXBwZWFyaW5nIGluIHRoZSBjb250ZXh0IG9mIGBhZl9wYWNrZXQuY2Ag4oCTIHNwZWNpZmljYWxseSB3aXRoaW4gYHRwYWNrZXRfc25kYCBhbmQgYHBhY2tldF9zbmRgLiBUaGlzIGZlZWxzIHZlcnkgc3BlY2lmaWMgdG8gdGhlIHBhY2tldCBzb2NrZXQgaW5mcmFzdHJ1Y3R1cmUsIHNvIGl0IHN1Z2dlc3RzIGEgZGlmZmVyZW50IHR5cGUgb2YgaGVhZGVyIGNvbnZlcnNpb24gcmVsYXRlZCB0byBwYWNrZXQgc29ja2V0IHNlbmQgb3BlcmF0aW9ucy5cblxuQW5kIGZpbmFsbHksIGBza2Jfc2VnbWVudGAsIHdoaWNoIEknbSBhbHJlYWR5IHF1aXRlIGZhbWlsaWFyIHdpdGguIEl0IGlzIGNvcmUgbmV0d29ya2luZyBhbmQgdXNlZCBhY3Jvc3MgbWFueSBhcmVhcywgc28gdGhhdCBmZWVscyBleHBlY3RlZC5cblxuRm9yIHRoaXMgYW5hbHlzaXMsIEknbGwgbm93IGZvY3VzIGluIG9uIGB0dW5fdm5ldF9oZHJfdG9fc2tiYCBhbmQgbG9vayBhdCBpdCBtb3JlIGNsb3NlbHksIGdpdmVuIG15IHByaW9yIHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwNDMsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTk6MjA6MTQuNzAzNTg2MzY3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3Mzc0MTA0MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHVuX3ZuZXRfaGRyX3RvX3NrYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC90YXAuYz01NzI9c3RhdGljIHNzaXplX3QgdGFwX2dldF91c2VyKHN0cnVjdCB0YXBfcXVldWUgKnEsIHZvaWQgKm1zZ19jb250cm9sLFxcbi0tXFxuZHJpdmVycy9uZXQvdGFwLmMtNjUwLVxcdGlmICh2bmV0X2hkcl9sZW4pIHtcXG5kcml2ZXJzL25ldC90YXAuYzo2NTE6XFx0XFx0ZXJyID0gdHVuX3ZuZXRfaGRyX3RvX3NrYihxLVxcdTAwM2VmbGFncywgc2tiLCBcXHUwMDI2dm5ldF9oZHIpO1xcbmRyaXZlcnMvbmV0L3RhcC5jLTY1Mi1cXHRcXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL25ldC90YXAuYz0xMDQ0PXN0YXRpYyBpbnQgdGFwX2dldF91c2VyX3hkcChzdHJ1Y3QgdGFwX3F1ZXVlICpxLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcXG4tLVxcbmRyaXZlcnMvbmV0L3RhcC5jLTEwODUtXFx0aWYgKHZuZXRfaGRyX2xlbikge1xcbmRyaXZlcnMvbmV0L3RhcC5jOjEwODY6XFx0XFx0ZXJyID0gdHVuX3ZuZXRfaGRyX3RvX3NrYihxLVxcdTAwM2VmbGFncywgc2tiLCBnc28pO1xcbmRyaXZlcnMvbmV0L3RhcC5jLTEwODctXFx0XFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuX3ZuZXQuaD0xNzQ9c3RhdGljIGlubGluZSBpbnQgdHVuX3ZuZXRfaGRyX3B1dChpbnQgc3osIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bl92bmV0LmgtMTc5LVxcbmRyaXZlcnMvbmV0L3R1bl92bmV0Lmg6MTgwOnN0YXRpYyBpbmxpbmUgaW50IHR1bl92bmV0X2hkcl90b19za2IodW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmRyaXZlcnMvbmV0L3R1bl92bmV0LmgtMTgxLVxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCB2aXJ0aW9fbmV0X2hkciAqaGRyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxOToyMDoxNy40NDEwMDM4MDVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTA2OTIyMjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuIEkgbmVlZCB0byB0cmFjayBkb3duIGB0dW5fdm5ldF9oZHJfdG9fc2tiYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgYHR1bi5jYCwgdGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCBpdC4gQnV0IHdhaXQgYSBtaW51dGUuLi4gaXQncyBub3QgdGhlcmUhIEFoLCByaWdodCwgdGhhdCdzIGl0LCBgdHVuX3ZuZXQuaGAgaXMgaW5jbHVkZWQgaW4gYHR1bi5jYC4gSSBuZWVkIHRvIGxvb2sgaW4gdGhhdCBoZWFkZXIgZmlsZSwgdGhhdCdzIHdoZXJlIHRoZSBkZWZpbml0aW9uIGlzIG1vc3QgbGlrZWx5LiBHb29kLCB0aGF0IHNhdmVzIG1lIHNvbWUgdGltZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTgyMywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE5OjIwOjIwLjU0NzkzMDM2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg2NzMyMTYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInR1bl92bmV0X2hkcl90b19za2JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdHVuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE5OjIwOjIwLjY2NjYxNDAyN1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjQ3ODYwMzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIEtlcm5lbCBDb2RlOiBBIFF1aWNrIENoZWNrKipcblxuUmlnaHQsIHNvIEkgc2VlIGEgbWVudGlvbiBvZiBgdHVuLmNgIGFuZCBgdHVuX3ZuZXRfaGRyX3RvX3NrYmAuIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJXYWl0LCBpcyB0aGF0IHdoZXJlIHRoZSBgdm5ldF9oZHJgIGludGVyYWN0aW9uIGhhcHBlbnM/XCIgQnV0IEknbSBub3QgZ29pbmcgdG8ganVtcCB0byBjb25jbHVzaW9ucy4gQmV0dGVyIHRvIHF1aWNrbHkgdmVyaWZ5IGJ5IGdvaW5nIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UuIExldCdzIGdldCB0aGUgY29udGV4dCByaWdodDogYSBkaXZlIGludG8gYHR1bi5jYCBpcyB3YXJyYW50ZWQgdG8gY29uZmlybSB3aGV0aGVyIGB2bmV0X2hkcmAgaXMgdXNlZCBpbiB0aGF0IHBhcnRpY3VsYXIgZnVuY3Rpb24uIEEgcXVpY2sgc2NhbiB3aWxsIHRlbGwgdGhlIHRhbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwNDEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxOToyMDoyNy4zMTQ0Nzc4NDZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2NzE1MDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZuZXRfaGRyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jPTE4Mj1zdHJ1Y3QgdHVuX3N0cnVjdCB7XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0xOTUtXFx0aW50XFx0XFx0XFx0YWxpZ247XFxuZHJpdmVycy9uZXQvdHVuLmM6MTk2OlxcdGludFxcdFxcdFxcdHZuZXRfaGRyX3N6O1xcbmRyaXZlcnMvbmV0L3R1bi5jLTE5Ny1cXHRpbnRcXHRcXHRcXHRzbmRidWY7XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0xNzc0PXN0YXRpYyBzc2l6ZV90IHR1bl9nZXRfdXNlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMTgxMi1cXHRpZiAodHVuLVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9WTkVUX0hEUikge1xcbmRyaXZlcnMvbmV0L3R1bi5jOjE4MTM6XFx0XFx0aW50IHZuZXRfaGRyX3N6ID0gUkVBRF9PTkNFKHR1bi1cXHUwMDNldm5ldF9oZHJfc3opO1xcbmRyaXZlcnMvbmV0L3R1bi5jLTE4MTQtXFxuZHJpdmVycy9uZXQvdHVuLmM6MTgxNTpcXHRcXHRmZWF0dXJlcyA9IHR1bl92bmV0X2hkcl9ndWVzdF9mZWF0dXJlcyh2bmV0X2hkcl9zeik7XFxuZHJpdmVycy9uZXQvdHVuLmM6MTgxNjpcXHRcXHRoZHJfbGVuID0gX190dW5fdm5ldF9oZHJfZ2V0KHZuZXRfaGRyX3N6LCB0dW4tXFx1MDAzZWZsYWdzLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTE4MTctXFx0XFx0XFx0XFx0XFx0ICAgICBmZWF0dXJlcywgZnJvbSwgZ3NvKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTE4MjAtXFxuZHJpdmVycy9uZXQvdHVuLmM6MTgyMTpcXHRcXHRsZW4gLT0gdm5ldF9oZHJfc3o7XFxuZHJpdmVycy9uZXQvdHVuLmMtMTgyMi1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0xODk0LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjE4OTU6XFx0aWYgKHR1bl92bmV0X2hkcl90bmxfdG9fc2tiKHR1bi1cXHUwMDNlZmxhZ3MsIGZlYXR1cmVzLCBza2IsIFxcdTAwMjZoZHIpKSB7XFxuZHJpdmVycy9uZXQvdHVuLmMtMTg5Ni1cXHRcXHRhdG9taWNfbG9uZ19pbmMoXFx1MDAyNnR1bi1cXHUwMDNlcnhfZnJhbWVfZXJyb3JzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTIwODY9c3RhdGljIHNzaXplX3QgdHVuX3B1dF91c2VyX3hkcChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjA5MC17XFxuZHJpdmVycy9uZXQvdHVuLmM6MjA5MTpcXHRpbnQgdm5ldF9oZHJfc3ogPSAwO1xcbmRyaXZlcnMvbmV0L3R1bi5jLTIwOTItXFx0c2l6ZV90IHNpemUgPSB4ZHBfZnJhbWUtXFx1MDAzZWxlbjtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTIwOTctXFxuZHJpdmVycy9uZXQvdHVuLmM6MjA5ODpcXHRcXHR2bmV0X2hkcl9zeiA9IFJFQURfT05DRSh0dW4tXFx1MDAzZXZuZXRfaGRyX3N6KTtcXG5kcml2ZXJzL25ldC90dW4uYzoyMDk5OlxcdFxcdHJldCA9IHR1bl92bmV0X2hkcl9wdXQodm5ldF9oZHJfc3osIGl0ZXIsIFxcdTAwMjZnc28pO1xcbmRyaXZlcnMvbmV0L3R1bi5jLTIxMDAtXFx0XFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTIxMDMtXFxuZHJpdmVycy9uZXQvdHVuLmM6MjEwNDpcXHRyZXQgPSBjb3B5X3RvX2l0ZXIoeGRwX2ZyYW1lLVxcdTAwM2VkYXRhLCBzaXplLCBpdGVyKSArIHZuZXRfaGRyX3N6O1xcbmRyaXZlcnMvbmV0L3R1bi5jLTIxMDUtXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0yMTE0PXN0YXRpYyBzc2l6ZV90IHR1bl9wdXRfdXNlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjEyMi1cXHRpbnQgdmxhbl9obGVuID0gMDtcXG5kcml2ZXJzL25ldC90dW4uYzoyMTIzOlxcdGludCB2bmV0X2hkcl9zeiA9IDA7XFxuZHJpdmVycy9uZXQvdHVuLmMtMjEyNC1cXHRpbnQgcmV0O1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjEyOS1cXHRpZiAodHVuLVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9WTkVUX0hEUilcXG5kcml2ZXJzL25ldC90dW4uYzoyMTMwOlxcdFxcdHZuZXRfaGRyX3N6ID0gUkVBRF9PTkNFKHR1bi1cXHUwMDNldm5ldF9oZHJfc3opO1xcbmRyaXZlcnMvbmV0L3R1bi5jLTIxMzEtXFxuZHJpdmVycy9uZXQvdHVuLmM6MjEzMjpcXHR0b3RhbCA9IHNrYi1cXHUwMDNlbGVuICsgdmxhbl9obGVuICsgdm5ldF9oZHJfc3o7XFxuZHJpdmVycy9uZXQvdHVuLmMtMjEzMy1cXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTIxNDctXFxuZHJpdmVycy9uZXQvdHVuLmM6MjE0ODpcXHRpZiAodm5ldF9oZHJfc3opIHtcXG5kcml2ZXJzL25ldC90dW4uYy0yMTQ5LVxcdFxcdHN0cnVjdCB2aXJ0aW9fbmV0X2hkcl92MV9oYXNoX3R1bm5lbCBoZHI7XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0yMTUyLVxcdFxcdG1lbXNldChcXHUwMDI2aGRyLCAwLCBzaXplb2YoaGRyKSk7XFxuZHJpdmVycy9uZXQvdHVuLmM6MjE1MzpcXHRcXHRyZXQgPSB0dW5fdm5ldF9oZHJfdG5sX2Zyb21fc2tiKHR1bi1cXHUwMDNlZmxhZ3MsIHR1bi1cXHUwMDNlZGV2LCBza2IsXFxuZHJpdmVycy9uZXQvdHVuLmMtMjE1NC1cXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2aGRyKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTIxNjItXFx0XFx0Z3NvID0gKHN0cnVjdCB2aXJ0aW9fbmV0X2hkciAqKVxcdTAwMjZoZHI7XFxuZHJpdmVycy9uZXQvdHVuLmM6MjE2MzpcXHRcXHRyZXQgPSBfX3R1bl92bmV0X2hkcl9wdXQodm5ldF9oZHJfc3osIHR1bi1cXHUwMDNlZGV2LVxcdTAwM2VmZWF0dXJlcyxcXG5kcml2ZXJzL25ldC90dW4uYy0yMTY0LVxcdFxcdFxcdFxcdFxcdCBpdGVyLCBnc28pO1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmM9MjUxMD1zdGF0aWMgaW50IHR1bl94ZHBfb25lKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0yNTg5LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjI1OTA6XFx0ZmVhdHVyZXMgPSB0dW5fdm5ldF9oZHJfZ3Vlc3RfZmVhdHVyZXMoUkVBRF9PTkNFKHR1bi1cXHUwMDNldm5ldF9oZHJfc3opKTtcXG5kcml2ZXJzL25ldC90dW4uYy0yNTkxLVxcdHRubF9oZHIgPSAoc3RydWN0IHZpcnRpb19uZXRfaGRyX3YxX2hhc2hfdHVubmVsICopZ3NvO1xcbmRyaXZlcnMvbmV0L3R1bi5jOjI1OTI6XFx0aWYgKHR1bl92bmV0X2hkcl90bmxfdG9fc2tiKHR1bi1cXHUwMDNlZmxhZ3MsIGZlYXR1cmVzLCBza2IsIHRubF9oZHIpKSB7XFxuZHJpdmVycy9uZXQvdHVuLmMtMjU5My1cXHRcXHRhdG9taWNfbG9uZ19pbmMoXFx1MDAyNnR1bi1cXHUwMDNlcnhfZnJhbWVfZXJyb3JzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTI4Mjk9c3RhdGljIGludCB0dW5fc2V0X2lmZihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgaWZyZXEgKmlmcilcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTI5MzEtXFx0XFx0dHVuLVxcdTAwM2V0eGZsdC5jb3VudCA9IDA7XFxuZHJpdmVycy9uZXQvdHVuLmM6MjkzMjpcXHRcXHR0dW4tXFx1MDAzZXZuZXRfaGRyX3N6ID0gc2l6ZW9mKHN0cnVjdCB2aXJ0aW9fbmV0X2hkcik7XFxuZHJpdmVycy9uZXQvdHVuLmMtMjkzMy1cXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTMxODA9c3RhdGljIGxvbmcgX190dW5fY2hyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzQ1OS1cXHRkZWZhdWx0OlxcbmRyaXZlcnMvbmV0L3R1bi5jOjM0NjA6XFx0XFx0cmV0ID0gdHVuX3ZuZXRfaW9jdGwoXFx1MDAyNnR1bi1cXHUwMDNldm5ldF9oZHJfc3osIFxcdTAwMjZ0dW4tXFx1MDAzZWZsYWdzLCBjbWQsIGFyZ3ApO1xcbmRyaXZlcnMvbmV0L3R1bi5jLTM0NjEtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE5OjIwOjI3LjM4MTE5Nzc5NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDgwMDE5NzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgYHR1bmAgRHJpdmVyKipcblxuT2theSwgc28gSSBzZWUgYHR1bl92bmV0X2hkcl90bmxfdG9fc2tiYCBnZXR0aW5nIGNhbGxlZCB3aXRoaW4gYHR1bi5jYC4gIEludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uIGJldHRlciB0byBncmFzcCBpdHMgcm9sZSBpbiB0aGUgZGF0YSBmbG93LiAgVGhlcmVmb3JlLCBsZXQncyBkaXZlIGludG8gdGhlIGRlZmluaXRpb24gb2YgYHR1bl92bmV0X2hkcl90bmxfdG9fc2tiYC4gU2luY2UgaXQncyBoZWFkZXIgcmVsYXRlZCwgbXkgaHVuY2ggaXMgdGhhdCBpdCdsbCBiZSBpbiBgZHJpdmVycy9uZXQvdHVuX3ZuZXQuaGAuIExldCdzIGNvbmZpcm0gdGhhdCBhbmQgZ2V0IGEgY2xvc2VyIGxvb2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5MTksIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxOToyMDozMC44NjEyMjA2MTlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MTgyNTUzMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHVuX3ZuZXRfaGRyX3RubF90b19za2JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdHVuLmM9MTc3ND1zdGF0aWMgc3NpemVfdCB0dW5fZ2V0X3VzZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTE4OTQtXFxuZHJpdmVycy9uZXQvdHVuLmM6MTg5NTpcXHRpZiAodHVuX3ZuZXRfaGRyX3RubF90b19za2IodHVuLVxcdTAwM2VmbGFncywgZmVhdHVyZXMsIHNrYiwgXFx1MDAyNmhkcikpIHtcXG5kcml2ZXJzL25ldC90dW4uYy0xODk2LVxcdFxcdGF0b21pY19sb25nX2luYyhcXHUwMDI2dHVuLVxcdTAwM2VyeF9mcmFtZV9lcnJvcnMpO1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmM9MjUxMD1zdGF0aWMgaW50IHR1bl94ZHBfb25lKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0yNTkxLVxcdHRubF9oZHIgPSAoc3RydWN0IHZpcnRpb19uZXRfaGRyX3YxX2hhc2hfdHVubmVsICopZ3NvO1xcbmRyaXZlcnMvbmV0L3R1bi5jOjI1OTI6XFx0aWYgKHR1bl92bmV0X2hkcl90bmxfdG9fc2tiKHR1bi1cXHUwMDNlZmxhZ3MsIGZlYXR1cmVzLCBza2IsIHRubF9oZHIpKSB7XFxuZHJpdmVycy9uZXQvdHVuLmMtMjU5My1cXHRcXHRhdG9taWNfbG9uZ19pbmMoXFx1MDAyNnR1bi1cXHUwMDNlcnhfZnJhbWVfZXJyb3JzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bl92bmV0Lmg9MTk3PXN0YXRpYyBpbmxpbmUgaW50XFxuZHJpdmVycy9uZXQvdHVuX3ZuZXQuaDoxOTg6dHVuX3ZuZXRfaGRyX3RubF90b19za2IodW5zaWduZWQgaW50IGZsYWdzLCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcyxcXG5kcml2ZXJzL25ldC90dW5fdm5ldC5oLTE5OS1cXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxOToyMDozMy4yNzk0ODA1NTZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg5Njc0MTkwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0d29yayBEcml2ZXIgRW50cnkgUG9pbnRzKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBtYXAgb3V0IHRoZSBrZXkgZW50cnkgcG9pbnRzIGZvciB0aGlzIG5ldHdvcmsgZHJpdmVyIHN0dWZmLiBGcm9tIHdoYXQgSSdtIHNlZWluZywgYHR1bl9nZXRfdXNlcmAgYW5kIGB0dW5feGRwX29uZWAgYXJlIHRoZSBjcnVjaWFsIHN0YXJ0aW5nIHBvaW50cyB0byB1bmRlcnN0YW5kIHRoZSBiZWhhdmlvciBvZiBgdHVuLmNgLiBGb3IgdGhlIGB0YXAuY2Agc2lkZSBvZiB0aGluZ3MsIGB0YXBfZ2V0X3VzZXJgIGFuZCBgdGFwX2dldF91c2VyX3hkcGAgc2VlbSB0byBiZSB0aGUgcHJpbWFyeSBob29rcy4gSSBhbHNvIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBob3cgYHRwYWNrZXRfc25kYCBhbmQgYHBhY2tldF9zbmRgIHdvcmsgd2l0aGluIGBhZl9wYWNrZXQuY2AuXG5cbk5vdywgYHNrYl9zZWdtZW50YCBpcyBzb21ldGhpbmcgSSBrbm93IHdlbGwsIHJlc2lkaW5nIGluIGBuZXQvY29yZS9za2J1ZmYuY2AsIGl0J3MgYmVlbiBleHBvcnRlZCwgYW5kIEkgcmVjYWxsIGl0IGJlaW5nIGEga2V5IHBsYXllciBpbiBHU08vVFNPIGZsb3dzLCBzbyB0aGlzIGlzIGltcG9ydGFudC4gSSB0aGluayBJJ2xsIGRpdmUgYSBsaXR0bGUgZGVlcGVyIGludG8gaXRzIHVzYWdlIG5vdyB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIGhvdyBldmVyeXRoaW5nIGZpdHMgdG9nZXRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1MjYsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTk6MjA6MzcuMTc2MjI0NzY4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjg3NDEyODQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl9zZWdtZW50XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9zZWdtZW50YXRpb24tb2ZmbG9hZHMucnN0PTIwNT1JbnN0ZWFkLCB0aGUgU0NUUCBwcm90b2NvbCBsYXllciBidWlsZHMgYW4gc2tiIHdpdGggdGhlIHNlZ21lbnRzIGNvcnJlY3RseVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9zZWdtZW50YXRpb24tb2ZmbG9hZHMucnN0OjIwNjpwYWRkZWQgYW5kIHN0b3JlZCBhcyBjaGFpbmVkIHNrYnMsIGFuZCBza2Jfc2VnbWVudCgpIHNwbGl0cyBiYXNlZCBvbiB0aG9zZS5cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc2VnbWVudGF0aW9uLW9mZmxvYWRzLnJzdC0yMDctVG8gc2lnbmFsIHRoaXMsIGdzb19zaXplIGlzIHNldCB0byB0aGUgc3BlY2lhbCB2YWx1ZSBHU09fQllfRlJBR1MuXFxuLS1cXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmM9Njg5MD1uZXRkZXZfZmVhdHVyZXNfdCBxZXRoX2ZlYXR1cmVzX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMtNjkzMS1cXHRpZiAobmV0aWZfbmVlZHNfZ3NvKHNrYiwgZmVhdHVyZXMpKSB7XFxuZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jOjY5MzI6XFx0XFx0LyogbWF0Y2ggc2tiX3NlZ21lbnQoKTogKi9cXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMtNjkzMy1cXHRcXHR1bnNpZ25lZCBpbnQgZG9mZnNldCA9IHNrYi1cXHUwMDNlZGF0YSAtIHNrYl9tYWNfaGVhZGVyKHNrYik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTM0OD1zdHJ1Y3Qgc2tfYnVmZjtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzU1LVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MzU2Oi8qIFNldCBza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWdzb19zaXplIHRvIHRoaXMgaW4gY2FzZSB5b3Ugd2FudCBza2Jfc2VnbWVudCB0b1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzU3LSAqIHNlZ21lbnQgdXNpbmcgaXRzIGN1cnJlbnQgc2VnbWVudGF0aW9uIGluc3RlYWQuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTQyNzU9dm9pZCBza2Jfc2NydWJfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgeG5ldCk7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo0Mjc2OnN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcyk7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo0Mjc3OnN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudF9saXN0KHN0cnVjdCBza19idWZmICpza2IsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzLFxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNDI3OC1cXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50IG9mZnNldCk7XFxuLS1cXG5pbmNsdWRlL25ldC91ZHAuaD01ODA9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqdWRwX3Jjdl9zZWdtZW50KHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbmluY2x1ZGUvbmV0L3VkcC5oLTU5NS1cXG5pbmNsdWRlL25ldC91ZHAuaDo1OTY6XFx0LyogQXZvaWQgY3N1bSByZWNhbGN1bGF0aW9uIGJ5IHNrYl9zZWdtZW50IHVubGVzcyB1c2Vyc3BhY2UgZXhwbGljaXRseVxcbmluY2x1ZGUvbmV0L3VkcC5oLTU5Ny1cXHQgKiBhc2tzIGZvciB0aGUgZmluYWwgY2hlY2tzdW0gdmFsdWVzXFxuLS1cXG5saWIvdGVzdF9icGYuYz0xNTIyMz1zdGF0aWMgX19pbml0IHN0cnVjdCBza19idWZmICpidWlsZF90ZXN0X3NrYl9saW5lYXJfbm9faGVhZF9mcmFnKHZvaWQpXFxuLS1cXG5saWIvdGVzdF9icGYuYy0xNTI3Ni1cXG5saWIvdGVzdF9icGYuYzoxNTI3NzpzdHJ1Y3Qgc2tiX3NlZ21lbnRfdGVzdCB7XFxubGliL3Rlc3RfYnBmLmMtMTUyNzgtXFx0Y29uc3QgY2hhciAqZGVzY3I7XFxuLS1cXG5saWIvdGVzdF9icGYuYy0xNTI4Mi1cXG5saWIvdGVzdF9icGYuYzoxNTI4MzpzdGF0aWMgc3RydWN0IHNrYl9zZWdtZW50X3Rlc3Qgc2tiX3NlZ21lbnRfdGVzdHNbXSBfX2luaXRjb25zdCA9IHtcXG5saWIvdGVzdF9icGYuYy0xNTI4NC1cXHR7XFxuLS1cXG5saWIvdGVzdF9icGYuYy0xNTI5OS1cXG5saWIvdGVzdF9icGYuYzoxNTMwMDpzdGF0aWMgX19pbml0IGludCB0ZXN0X3NrYl9zZWdtZW50X3NpbmdsZShjb25zdCBzdHJ1Y3Qgc2tiX3NlZ21lbnRfdGVzdCAqdGVzdClcXG5saWIvdGVzdF9icGYuYy0xNTMwMS17XFxuLS1cXG5saWIvdGVzdF9icGYuYy0xNTMxMC1cXG5saWIvdGVzdF9icGYuYzoxNTMxMTpcXHRzZWdzID0gc2tiX3NlZ21lbnQoc2tiLCB0ZXN0LVxcdTAwM2VmZWF0dXJlcyk7XFxubGliL3Rlc3RfYnBmLmMtMTUzMTItXFx0aWYgKCFJU19FUlIoc2VncykpIHtcXG4tLVxcbmxpYi90ZXN0X2JwZi5jLTE1MzIwLVxcbmxpYi90ZXN0X2JwZi5jOjE1MzIxOnN0YXRpYyBfX2luaXQgaW50IHRlc3Rfc2tiX3NlZ21lbnQodm9pZClcXG5saWIvdGVzdF9icGYuYy0xNTMyMi17XFxuLS1cXG5saWIvdGVzdF9icGYuYy0xNTMyNC1cXG5saWIvdGVzdF9icGYuYzoxNTMyNTpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShza2Jfc2VnbWVudF90ZXN0cyk7IGkrKykge1xcbmxpYi90ZXN0X2JwZi5jOjE1MzI2OlxcdFxcdGNvbnN0IHN0cnVjdCBza2Jfc2VnbWVudF90ZXN0ICp0ZXN0ID0gXFx1MDAyNnNrYl9zZWdtZW50X3Rlc3RzW2ldO1xcbmxpYi90ZXN0X2JwZi5jLTE1MzI3LVxcbi0tXFxubGliL3Rlc3RfYnBmLmMtMTUzMzMtXFxubGliL3Rlc3RfYnBmLmM6MTUzMzQ6XFx0XFx0aWYgKHRlc3Rfc2tiX3NlZ21lbnRfc2luZ2xlKHRlc3QpKSB7XFxubGliL3Rlc3RfYnBmLmMtMTUzMzUtXFx0XFx0XFx0cHJfY29udChcXFwiRkFJTFxcXFxuXFxcIik7XFxuLS1cXG5saWIvdGVzdF9icGYuYz0xNTc4OT1zdGF0aWMgX19pbml0IGludCBmaW5kX3Rlc3RfaW5kZXgoY29uc3QgY2hhciAqdGVzdF9uYW1lKVxcbi0tXFxubGliL3Rlc3RfYnBmLmMtMTU4MDYtXFxubGliL3Rlc3RfYnBmLmM6MTU4MDc6XFx0aWYgKCFzdHJjbXAodGVzdF9zdWl0ZSwgXFxcInRlc3Rfc2tiX3NlZ21lbnRcXFwiKSkge1xcbmxpYi90ZXN0X2JwZi5jOjE1ODA4OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHNrYl9zZWdtZW50X3Rlc3RzKTsgaSsrKSB7XFxubGliL3Rlc3RfYnBmLmM6MTU4MDk6XFx0XFx0XFx0aWYgKCFzdHJjbXAoc2tiX3NlZ21lbnRfdGVzdHNbaV0uZGVzY3IsIHRlc3RfbmFtZSkpXFxubGliL3Rlc3RfYnBmLmMtMTU4MTAtXFx0XFx0XFx0XFx0cmV0dXJuIGk7XFxuLS1cXG5saWIvdGVzdF9icGYuYz0xNTgxNz1zdGF0aWMgX19pbml0IGludCBwcmVwYXJlX3Rlc3RfcmFuZ2Uodm9pZClcXG4tLVxcbmxpYi90ZXN0X2JwZi5jLTE1ODI0LVxcdFxcdHZhbGlkX3JhbmdlID0gQVJSQVlfU0laRSh0YWlsX2NhbGxfdGVzdHMpO1xcbmxpYi90ZXN0X2JwZi5jOjE1ODI1OlxcdGVsc2UgaWYgKCFzdHJjbXAodGVzdF9zdWl0ZSwgXFxcInRlc3Rfc2tiX3NlZ21lbnRcXFwiKSlcXG5saWIvdGVzdF9icGYuYzoxNTgyNjpcXHRcXHR2YWxpZF9yYW5nZSA9IEFSUkFZX1NJWkUoc2tiX3NlZ21lbnRfdGVzdHMpO1xcbmxpYi90ZXN0X2JwZi5jLTE1ODI3LVxcdGVsc2VcXG4tLVxcbmxpYi90ZXN0X2JwZi5jPTE1ODc2PXN0YXRpYyBpbnQgX19pbml0IHRlc3RfYnBmX2luaXQodm9pZClcXG4tLVxcbmxpYi90ZXN0X2JwZi5jLTE1ODgzLVxcdCAgICBzdHJjbXAodGVzdF9zdWl0ZSwgXFxcInRlc3RfdGFpbF9jYWxsc1xcXCIpIFxcdTAwMjZcXHUwMDI2XFxubGliL3Rlc3RfYnBmLmM6MTU4ODQ6XFx0ICAgIHN0cmNtcCh0ZXN0X3N1aXRlLCBcXFwidGVzdF9za2Jfc2VnbWVudFxcXCIpKSB7XFxubGliL3Rlc3RfYnBmLmMtMTU4ODUtXFx0XFx0cHJfZXJyKFxcXCJ0ZXN0X2JwZjogaW52YWxpZCB0ZXN0X3N1aXRlICclcycgc3BlY2lmaWVkLlxcXFxuXFxcIiwgdGVzdF9zdWl0ZSk7XFxuLS1cXG5saWIvdGVzdF9icGYuYy0xNTkxOS1cXG5saWIvdGVzdF9icGYuYzoxNTkyMDpcXHRpZiAoIXN0cmxlbih0ZXN0X3N1aXRlKSB8fCAhc3RyY21wKHRlc3Rfc3VpdGUsIFxcXCJ0ZXN0X3NrYl9zZWdtZW50XFxcIikpXFxubGliL3Rlc3RfYnBmLmM6MTU5MjE6XFx0XFx0cmV0dXJuIHRlc3Rfc2tiX3NlZ21lbnQoKTtcXG5saWIvdGVzdF9icGYuYy0xNTkyMi1cXG4tLVxcbm5ldC9jb3JlL25ldF90ZXN0LmM9MTI9c3RhdGljIHZvaWQgX19pbml0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvbmV0X3Rlc3QuYy0xNi1cXG5uZXQvY29yZS9uZXRfdGVzdC5jOjE3OlxcdC8qIHNrYl9zZWdtZW50IGV4cGVjdHMgc2tiLVxcdTAwM2VkYXRhIGF0IHN0YXJ0IG9mIHBheWxvYWQgKi9cXG5uZXQvY29yZS9uZXRfdGVzdC5jLTE4LVxcdHNrYl9wdWxsKHNrYiwgc2l6ZW9mKGhkcikpO1xcbi0tXFxubmV0L2NvcmUvbmV0X3Rlc3QuYz0xNDc9c3RhdGljIHZvaWQgZ3NvX3Rlc3RfZnVuYyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5uZXQvY29yZS9uZXRfdGVzdC5jLTIyOC1cXG5uZXQvY29yZS9uZXRfdGVzdC5jOjIyOTpcXHRzZWdzID0gc2tiX3NlZ21lbnQoc2tiLCBmZWF0dXJlcyk7XFxubmV0L2NvcmUvbmV0X3Rlc3QuYy0yMzAtXFx0aWYgKElTX0VSUihzZWdzKSkge1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NDY2Mj1zdGF0aWMgaW5saW5lIHNrYl9mcmFnX3Qgc2tiX2hlYWRfZnJhZ190b19wYWdlX2Rlc2Moc3RydWN0IHNrX2J1ZmYgKmZyYWdfc2tiKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNDY3My1cXG5uZXQvY29yZS9za2J1ZmYuYzo0Njc0OnN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudF9saXN0KHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2NvcmUvc2tidWZmLmMtNDY3NS1cXHRcXHRcXHRcXHQgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMsXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy00NzY1LX1cXG5uZXQvY29yZS9za2J1ZmYuYzo0NzY2OkVYUE9SVF9TWU1CT0xfR1BMKHNrYl9zZWdtZW50X2xpc3QpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTQ3NjctXFxubmV0L2NvcmUvc2tidWZmLmMtNDc2OC0vKipcXG5uZXQvY29yZS9za2J1ZmYuYzo0NzY5OiAqXFx0c2tiX3NlZ21lbnQgLSBQZXJmb3JtIHByb3RvY29sIHNlZ21lbnRhdGlvbiBvbiBza2IuXFxubmV0L2NvcmUvc2tidWZmLmMtNDc3MC0gKlxcdEBoZWFkX3NrYjogYnVmZmVyIHRvIHNlZ21lbnRcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTQ3NzYtICovXFxubmV0L2NvcmUvc2tidWZmLmM6NDc3NzpzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKmhlYWRfc2tiLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTQ3NzgtXFx0XFx0XFx0ICAgIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNTAzMy1cXHRcXHRcXHRcXHRuZXRfd2Fybl9yYXRlbGltaXRlZChcXG5uZXQvY29yZS9za2J1ZmYuYzo1MDM0OlxcdFxcdFxcdFxcdFxcdFxcXCJza2Jfc2VnbWVudDogdG9vIG1hbnkgZnJhZ3M6ICV1ICV1XFxcXG5cXFwiLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTUwMzUtXFx0XFx0XFx0XFx0XFx0cG9zLCBtc3MpO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNTEyOS19XFxubmV0L2NvcmUvc2tidWZmLmM6NTEzMDpFWFBPUlRfU1lNQk9MX0dQTChza2Jfc2VnbWVudCk7XFxubmV0L2NvcmUvc2tidWZmLmMtNTEzMS1cXG4tLVxcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmM9ODg9c3RhdGljIHN0cnVjdCBza19idWZmICpfX3RjcDRfZ3NvX3NlZ21lbnRfbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwX29mZmxvYWQuYy05MC17XFxubmV0L2lwdjQvdGNwX29mZmxvYWQuYzo5MTpcXHRza2IgPSBza2Jfc2VnbWVudF9saXN0KHNrYiwgZmVhdHVyZXMsIHNrYl9tYWNfaGVhZGVyX2xlbihza2IpKTtcXG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jLTkyLVxcdGlmIChJU19FUlIoc2tiKSlcXG4tLVxcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmM9MTMzPXN0cnVjdCBza19idWZmICp0Y3BfZ3NvX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmMtMTgwLVxcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmM6MTgxOlxcdHNlZ3MgPSBza2Jfc2VnbWVudChza2IsIGZlYXR1cmVzKTtcXG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jLTE4Mi1cXHRpZiAoSVNfRVJSKHNlZ3MpKVxcbi0tXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYz00NjM9c3RhdGljIHN0cnVjdCBza19idWZmICpfX3VkcF9nc29fc2VnbWVudF9saXN0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTQ2OC1cXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jOjQ2OTpcXHRza2IgPSBza2Jfc2VnbWVudF9saXN0KHNrYiwgZmVhdHVyZXMsIHNrYl9tYWNfaGVhZGVyX2xlbihza2IpKTtcXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTQ3MC1cXHRpZiAoSVNfRVJSKHNrYikpXFxuLS1cXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jPTQ4MT1zdHJ1Y3Qgc2tfYnVmZiAqX191ZHBfZ3NvX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKmdzb19za2IsXFxuLS1cXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTUxNi1cXHRpZiAoc2tiX3NoaW5mbyhnc29fc2tiKS1cXHUwMDNlZ3NvX3R5cGUgXFx1MDAyNiBTS0JfR1NPX0ZSQUdMSVNUKSB7XFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYzo1MTc6XFx0XFx0IC8qIERldGVjdCBtb2RpZmllZCBnZW9tZXRyeSBhbmQgcGFzcyB0aG9zZSB0byBza2Jfc2VnbWVudC4gKi9cXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTUxOC1cXHRcXHRpZiAoKHNrYl9wYWdlbGVuKGdzb19za2IpIC0gc2l6ZW9mKCp1aCkgPT0gc2tiX3NoaW5mbyhnc29fc2tiKS1cXHUwMDNlZ3NvX3NpemUpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTU0My1cXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jOjU0NDpcXHQvKiBjbGVhciBkZXN0cnVjdG9yIHRvIGF2b2lkIHNrYl9zZWdtZW50IGFzc2lnbmluZyBpdCB0byB0YWlsICovXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy01NDUtXFx0Y29weV9kdG9yID0gZ3NvX3NrYi1cXHUwMDNlZGVzdHJ1Y3RvciA9PSBzb2NrX3dmcmVlO1xcbi0tXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy01NTAtXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYzo1NTE6XFx0c2VncyA9IHNrYl9zZWdtZW50KGdzb19za2IsIGZlYXR1cmVzKTtcXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTU1Mi1cXHRpZiAoSVNfRVJSX09SX05VTEwoc2VncykpIHtcXG4tLVxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM9NjMzPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdWRwNF91Zm9fZnJhZ21lbnQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtNjg3LVxcdCAqL1xcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM6Njg4OlxcdHNlZ3MgPSBza2Jfc2VnbWVudChza2IsIGZlYXR1cmVzKTtcXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTY4OS1vdXQ6XFxuLS1cXG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmM9MTQ3PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqX190Y3A2X2dzb19zZWdtZW50X2xpc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYy0xNDkte1xcbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYzoxNTA6XFx0c2tiID0gc2tiX3NlZ21lbnRfbGlzdChza2IsIGZlYXR1cmVzLCBza2JfbWFjX2hlYWRlcl9sZW4oc2tiKSk7XFxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jLTE1MS1cXHRpZiAoSVNfRVJSKHNrYikpXFxuLS1cXG5uZXQvaXB2Ni91ZHBfb2ZmbG9hZC5jPTE5PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdWRwNl91Zm9fZnJhZ21lbnQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L3VkcF9vZmZsb2FkLmMtMTA4LVxcdFxcdCAqL1xcbm5ldC9pcHY2L3VkcF9vZmZsb2FkLmM6MTA5OlxcdFxcdHNlZ3MgPSBza2Jfc2VnbWVudChza2IsIGZlYXR1cmVzKTtcXG5uZXQvaXB2Ni91ZHBfb2ZmbG9hZC5jLTExMC1cXHR9XFxuLS1cXG5uZXQvc2N0cC9vZmZsb2FkLmM9Mzk9c3RhdGljIHN0cnVjdCBza19idWZmICpzY3RwX2dzb19zZWdtZW50KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvc2N0cC9vZmZsb2FkLmMtNzEtXFxubmV0L3NjdHAvb2ZmbG9hZC5jOjcyOlxcdHNlZ3MgPSBza2Jfc2VnbWVudChza2IsIChmZWF0dXJlcyB8IE5FVElGX0ZfSFdfQ1NVTSkgXFx1MDAyNiB+TkVUSUZfRl9TRyk7XFxubmV0L3NjdHAvb2ZmbG9hZC5jLTczLVxcdGlmIChJU19FUlIoc2VncykpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE5OjIwOjM5LjQ2MzY0MzA1OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Nzk0MTgyNzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBTY29wZSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIEdTTyBzZWdtZW50YXRpb24sIHRoYXQgbXVjaCBpcyBjbGVhci4gVGhlIGtleSBwbGF5ZXJzIGhlcmUgc2VlbSB0byBiZSBgc2tiX3NlZ21lbnRgIOKAkyB0aGF0J3MgdGhlIGNvcmUgb2YgdGhlIHNlZ21lbnRhdGlvbiBsb2dpYywgc28gSSdsbCBuZWVkIHRvIGtlZXAgYSBjbG9zZSBleWUgb24gaXQg4oCTIGFuZCB0aGUgZnVuY3Rpb25zIGNhbGxpbmcgaXQ6IGB0Y3BfZ3NvX3NlZ21lbnRgLCBgX191ZHBfZ3NvX3NlZ21lbnRgLCB0aGUgVUZPIGZyYWdtZW50ZXJzLCBhbmQgYHNjdHBfZ3NvX3NlZ21lbnRgLiBUaG9zZSBhcmUgdHJpZ2dlcmVkIGJ5IHRoZSBsaWtlcyBvZiBgc2tiX21hY19nc29fc2VnbWVudGAgYW5kIGV2ZW50dWFsbHksIGBkZXZfaGFyZF9zdGFydF94bWl0YCwgc28gSSBjYW4gc2VlIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBkYXRhIHBhdGguXG5cbkJleW9uZCBHU08sIEkgc2VlIGl0IGFsc28gdG91Y2hlcyBgX192aXJ0aW9fbmV0X2hkcl90b19za2JgLCB3aGljaCBmbGFncyB1cCBgdHVuX2dldF91c2VyYCwgYHRhcF9nZXRfdXNlcmAsIGFuZCBgcGFja2V0X3NuZGAgYXMgcmVsZXZhbnQuIFNvIEkgaGF2ZSBhIGZlZWxpbmcgdGhlIHZpcnR1YWwgbmV0d29ya2luZyBzaWRlIGlzIGFsc28gaW4gcGxheS5cblxuVGhlcmVmb3JlLCBteSBpbml0aWFsIG1lbnRhbCBjaGVja2xpc3QgaXM6XG5cbiogICBgc2tiX3NlZ21lbnRgICh0aGUgY29yZSlcbiogICBgdHVuX2dldF91c2VyYFxuKiAgIGB0YXBfZ2V0X3VzZXJgXG4qICAgYHBhY2tldF9zbmRgXG4qICAgYHRwYWNrZXRfc25kYFxuXG5JIHNob3VsZCBzZWUgaWYgYW55IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcmVsZXZhbnQsIGJ1dCBgQ09ORklHX1RVTmAsIGBDT05GSUdfTUFDVlRBUGAsIGFuZCBgQ09ORklHX1BBQ0tFVGAgYXJlIHByZXR0eSBzdGFuZGFyZCBmYXJlIGluIG5ldHdvcmtpbmcgY29udGV4dHMsIGFuZCBzaW5jZSB0aGlzIHBhdGNoIGlzIG1vZGlmeWluZyBjb3JlIG5ldHdvcmtpbmcgY29kZSwgaXQncyB2ZXJ5IGxpa2VseSB0byBiZSBhbHdheXMgY29tcGlsZWQuXG5cblRpbWUgdG8gZGVsdmUgaW50byBgbmV0L2NvcmUvc2tidWZmLmNgIGFuZCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHNrYl9zZWdtZW50YC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1NjksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTk6MjA6NDUuMjU3ODI5ODI0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzMDkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0ODUwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0ODUwOlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gbm9ybWFsO1xcbjQ4NTE6XFx0XFxuNDg1MjpcXHRcXHRcXHRcXHRcXHRsZW4gLT0gaXRlci1cXHUwMDNlbGVuO1xcbjQ4NTM6XFx0XFx0XFx0XFx0fVxcbjQ4NTQ6XFx0XFxuNDg1NTpcXHRcXHRcXHRcXHRpZiAobGVuICE9IGZyYWdfbGVuKVxcbjQ4NTY6XFx0XFx0XFx0XFx0XFx0Z290byBub3JtYWw7XFxuNDg1NzpcXHRcXHRcXHR9XFxuNDg1ODpcXHRcXG40ODU5OlxcdFxcdFxcdC8qIEdTTyBwYXJ0aWFsIG9ubHkgcmVxdWlyZXMgdGhhdCB3ZSB0cmltIG9mZiBhbnkgZXhjZXNzIHRoYXRcXG40ODYwOlxcdFxcdFxcdCAqIGRvZXNuJ3QgZml0IGludG8gYW4gTVNTIHNpemVkIGJsb2NrLCBzbyB0YWtlIGNhcmUgb2YgdGhhdFxcbjQ4NjE6XFx0XFx0XFx0ICogbm93LlxcbjQ4NjI6XFx0XFx0XFx0ICovXFxuNDg2MzpcXHRcXHRcXHRwYXJ0aWFsX3NlZ3MgPSBtaW4obGVuIC8gbXNzLCBHU09fTUFYX1NFR1MpO1xcbjQ4NjQ6XFx0XFx0XFx0aWYgKHBhcnRpYWxfc2VncyBcXHUwMDNlIDEpXFxuNDg2NTpcXHRcXHRcXHRcXHRtc3MgKj0gcGFydGlhbF9zZWdzO1xcbjQ4NjY6XFx0XFx0XFx0ZWxzZVxcbjQ4Njc6XFx0XFx0XFx0XFx0cGFydGlhbF9zZWdzID0gMDtcXG40ODY4OlxcdFxcdH1cXG40ODY5OlxcdFxcbjQ4NzA6XFx0bm9ybWFsOlxcbjQ4NzE6XFx0XFx0aGVhZHJvb20gPSBza2JfaGVhZHJvb20oaGVhZF9za2IpO1xcbjQ4NzI6XFx0XFx0cG9zID0gc2tiX2hlYWRsZW4oaGVhZF9za2IpO1xcbjQ4NzM6XFx0XFxuNDg3NDpcXHRcXHRpZiAoc2tiX29ycGhhbl9mcmFncyhoZWFkX3NrYiwgR0ZQX0FUT01JQykpXFxuNDg3NTpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG40ODc2OlxcdFxcbjQ4Nzc6XFx0XFx0bmZyYWdzID0gc2tiX3NoaW5mbyhoZWFkX3NrYiktXFx1MDAzZW5yX2ZyYWdzO1xcbjQ4Nzg6XFx0XFx0ZnJhZyA9IHNrYl9zaGluZm8oaGVhZF9za2IpLVxcdTAwM2VmcmFncztcXG40ODc5OlxcdFxcdGZyYWdfc2tiID0gaGVhZF9za2I7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE5OjIwOjQ1LjI1ODE2NDY5NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTAxMTU1MTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFJlY2VudCBOZXR3b3JrIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIHRoZSBjb3JlIGNoYW5nZSB0aGF0IGp1bXBzIG91dCBpcyB0aGUgYWRqdXN0bWVudCB0byBob3cgd2UgY2FsY3VsYXRlIGBwYXJ0aWFsX3NlZ3NgIHdpdGhpbiB0aGUgYHNrYl9zZWdtZW50YCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCdzIGxpbWl0aW5nIHRoZSBgcGFydGlhbF9zZWdzYCBjYWxjdWxhdGlvbiB0byB0aGUgbWluaW11bSBvZiBgbGVuIC8gbXNzYCBhbmQgYEdTT19NQVhfU0VHU2AuIFRoaXMgaXMgYSBkZWZpbml0ZSBzYWZlZ3VhcmQgYWdhaW5zdCBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBvciBzb21lIG90aGVyIGVkZ2UtY2FzZSBzY2VuYXJpbyBpbiBzZWdtZW50YXRpb24sIHdoaWNoIGlzIGdvb2QuIFRoZSBwcmlvciBjYWxjdWxhdGlvbiwgd2hpbGUgc2VlbWluZ2x5IHN0cmFpZ2h0Zm9yd2FyZCwgY291bGQgcG90ZW50aWFsbHkgbGVhZCB0byBpc3N1ZXMgd2hlbiBkZWFsaW5nIHdpdGggcGFydGljdWxhcmx5IGxhcmdlIG9yIGZyYWdtZW50ZWQgcGFja2V0cy4gVGhpcyBtYWtlcyBwZXJmZWN0IHNlbnNlOyBib3VuZHMgY2hlY2tpbmcgaXMgYWx3YXlzIGEgcG9zaXRpdmUgdGhpbmcgaW4gbmV0d29yayBjb2RlLlxuXG5Ob3csIGdsYW5jaW5nIGF0IHRoZSBzZWNvbmQgY2hhbmdlLCB3aGljaCBpcyBpbiBgX192aXJ0aW9fbmV0X2hkcl90b19za2JgLCBJIHNlZSB0aGF0IGl0IGludm9sdmVzIGBnc29fc2l6ZWAuIEl0IGFwcGVhcnMgdGhlcmUncyBhIGd1YXJkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBgZ3NvX3NpemVgIHBhcmFtZXRlciBvZiB2aXJ0aW8gbmV0IGlzIGF0IGxlYXN0IGBUQ1BfTUlOX0dTT19TSVpFYCB3aGVuIGdlbmVyYXRpbmcgYSBoZWFkZXIuIFRoZSBgQlVJTERfQlVHX09OYCBzdGF0ZW1lbnQgY2F1Z2h0IG15IGV5ZSB0b28g4oCTIGl0IGFzc2VydHMgYSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgVENQX01JTl9HU09fU0laRWAgYW5kIGBHU09fTUFYX1NFR1NgIGFuZCBgR1NPX01BWF9TSVpFYC4gVGhpcyBzdWdnZXN0cyB0aGUgcGF0Y2ggaXMgYWltZWQgYXQgZW5zdXJpbmcgY29uc2lzdGVudCBHU08gYmVoYXZpb3IsIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIG1pbmltdW0gcGFja2V0IHNpemUgb3IgbGltaXRhdGlvbnMgaW1wb3NlZCBieSB0aGUgaGFyZHdhcmUgYW5kIHNvZnR3YXJlIG9uIEdTTyBjYXBhYmlsaXRpZXMuXG5cbkFscmlnaHQsIHNvIHRoZSBmb2N1cyBpcyByZWFsbHkgb24gc2VnbWVudGF0aW9uIGFuZCBHU08uIExldCdzIHNlZS4uLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBob3cgdGhpcyByZWxhdGVzIHRvIGEgZmV3IGZ1bmN0aW9ucy4gTXkgaW1tZWRpYXRlIGxpc3Qgb2YgaW50ZXJlc3RpbmcgZnVuY3Rpb25zIGluY2x1ZGVzIGBza2Jfc2VnbWVudGAg4oCTIG9idmlvdXNseSwgZ2l2ZW4gdGhlIGZpcnN0IGNoYW5nZSwgYW5kIEkgbmVlZCB0byBzZWUgaG93IGl0IHdvcmtzIGluIGNvbnRleHQg4oCTIGFuZCB0aGVuIGB0dW5fZ2V0X3VzZXJgLCBgdGFwX2dldF91c2VyYCwgYHBhY2tldF9zbmRgLCBhbmQgYHRwYWNrZXRfc25kYC4gVGhlc2UgYXJlIGFsbCBjcnVjaWFsIHBvaW50cyB3aGVyZSBuZXR3b3JrIHBhY2tldHMgYXJlIGhhbmRsZWQsIGFuZCBhIEdTTy9zZWdtZW50YXRpb24gaXNzdWUgY291bGQgbWFuaWZlc3QuIEknbGwgc3RhcnQgd2l0aCBgdHVuX2dldF91c2VyYCBpbiBgZHJpdmVycy9uZXQvdHVuLmNgIGFuZCBzZWUgaWYgdGhlIHBhdGNoIGRpcmVjdGx5IGFmZmVjdHMgYW55dGhpbmcgdGhlcmUsIHNpbmNlIGl0J3MgYSBjb21tb24gbmV0d29yayBpbnRlcmZhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjUwLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTk6MjA6NTEuMzU5MzIyNzNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MjU4NzIxNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHVuX2dldF91c2VyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jPTE2Nzc9c3RhdGljIHN0cnVjdCBza19idWZmICp0dW5fYnVpbGRfc2tiKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0xNzczLS8qIEdldCBwYWNrZXQgZnJvbSB1c2VyIHNwYWNlIGJ1ZmZlciAqL1xcbmRyaXZlcnMvbmV0L3R1bi5jOjE3NzQ6c3RhdGljIHNzaXplX3QgdHVuX2dldF91c2VyKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsXFxuZHJpdmVycy9uZXQvdHVuLmMtMTc3NS1cXHRcXHRcXHQgICAgdm9pZCAqbXNnX2NvbnRyb2wsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTIwNjY9c3RhdGljIHNzaXplX3QgdHVuX2Nocl93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjA3OS1cXG5kcml2ZXJzL25ldC90dW4uYzoyMDgwOlxcdHJlc3VsdCA9IHR1bl9nZXRfdXNlcih0dW4sIHRmaWxlLCBOVUxMLCBmcm9tLCBub2Jsb2NrLCBmYWxzZSk7XFxuZHJpdmVycy9uZXQvdHVuLmMtMjA4MS1cXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTI2NDY9c3RhdGljIGludCB0dW5fc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgdG90YWxfbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjY5Mi1cXG5kcml2ZXJzL25ldC90dW4uYzoyNjkzOlxcdHJldCA9IHR1bl9nZXRfdXNlcih0dW4sIHRmaWxlLCBjdGwgPyBjdGwtXFx1MDAzZXB0ciA6IE5VTEwsIFxcdTAwMjZtLVxcdTAwM2Vtc2dfaXRlcixcXG5kcml2ZXJzL25ldC90dW4uYy0yNjk0LVxcdFxcdFxcdCAgIG0tXFx1MDAzZW1zZ19mbGFncyBcXHUwMDI2IE1TR19ET05UV0FJVCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTk6MjA6NTMuNzg1MjAzMDI3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3OTkwNjQzNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucywgdGhpbmtpbmcgdGhyb3VnaCBpdCBpbiBhIHRlY2huaWNhbCBjb250ZXh0LlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogTmV0d29yayBEcml2ZXIgQ29uc2lkZXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBsb29raW5nIGF0IGB0dW5fZ2V0X3VzZXJgIGFuZCBgdGFwX2dldF91c2VyYCwgdGhlc2UgYXJlIGNsZWFybHkgcmVsZXZhbnQgZnVuY3Rpb25zIGZvciBuZXR3b3JrIGRyaXZlciBkZXZlbG9wbWVudCwgc3BlY2lmaWNhbGx5IGluIHRoZSBjb250ZXh0IG9mIFRVTi9UQVAgaW50ZXJmYWNlcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiWWVwLCB0aGF0IG1ha2VzIHNlbnNlLlwiIFRoZXNlIGFyZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3MuXG5cbmB0dW5fZ2V0X3VzZXJgIGlzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGV4YW1pbmluZyB0aGUgdXNlci1zcGFjZSBpbnRlcmFjdGlvbiB3aXRoIGEgVFVOIGRldmljZS4gSSdkIGV4cGVjdCBpdCBkZWFscyB3aXRoIHNldHRpbmcgdXAgdGhlIGludGVyZmFjZSdzIHBhcmFtZXRlcnMsIGhhbmRsaW5nIGRhdGEgdHJhbnNmZXIgYmV0d2VlbiB0aGUga2VybmVsIGFuZCB1c2VyIHNwYWNlLCBhbmQgcG9zc2libHkgbWFuYWdpbmcgdmlydHVhbCBJUCBhZGRyZXNzZXMgb3Igcm91dGluZyBjb25maWd1cmF0aW9ucy4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiwgYnV0IHRoZSBuYW1lIHN0cm9uZ2x5IHN1Z2dlc3RzIGl0cyByb2xlLiBJIHdvdWxkIGJlIGNvbnNpZGVyaW5nIGhvdyBpdCBoYW5kbGVzIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBuZXR3b3JrIHN0YWNrLCBhbmQgYW55IHNlY3VyaXR5IGltcGxpY2F0aW9ucy5cblxuU2ltaWxhcmx5LCBgdGFwX2dldF91c2VyYCBpcyBlcXVhbGx5IGltcG9ydGFudCwgcGFydGljdWxhcmx5IGdpdmVuIFRBUCdzIHJvbGUgYXMgYSBicmlkZ2luZyBpbnRlcmZhY2UuIEkgaW1hZ2luZSBpdCBtaXJyb3JzIG11Y2ggb2YgdGhlIHNhbWUgZnVuY3Rpb25hbGl0eSBhcyBUVU4sIGJ1dCB3aXRoIHRoZSBhZGRlZCBjb21wbGV4aXR5IG9mIEV0aGVybmV0IGZyYW1lIGhhbmRsaW5nIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb24gd2l0aCBhIGJyaWRnZSBkcml2ZXIuIEl0IHdpbGwgYmUgdmVyeSB1c2VmdWwgaW4gcmV2aWV3aW5nIGFueSBjb2RlIHdpdGggdGhlIHVzZSBvZiBhIFRBUCBpbnRlcmZhY2UsIGNvbnNpZGVyaW5nIHRoZSBudWFuY2VzIG9mIHRoZSBkcml2ZXIgYW5kIGl0cyBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgbGluayBsYXllci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3MjIsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxOToyMDo1Ny41ODQyNzAxNDJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMzM3MzE4NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGFwX2dldF91c2VyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3RhcC5jPTU0Mz1zdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICp0YXBfYWxsb2Nfc2tiKHN0cnVjdCBzb2NrICpzaywgc2l6ZV90IHByZXBhZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3RhcC5jLTU3MS0vKiBHZXQgcGFja2V0IGZyb20gdXNlciBzcGFjZSBidWZmZXIgKi9cXG5kcml2ZXJzL25ldC90YXAuYzo1NzI6c3RhdGljIHNzaXplX3QgdGFwX2dldF91c2VyKHN0cnVjdCB0YXBfcXVldWUgKnEsIHZvaWQgKm1zZ19jb250cm9sLFxcbmRyaXZlcnMvbmV0L3RhcC5jLTU3My1cXHRcXHRcXHQgICAgc3RydWN0IGlvdl9pdGVyICpmcm9tLCBpbnQgbm9ibG9jaylcXG4tLVxcbmRyaXZlcnMvbmV0L3RhcC5jPTY5MT1zdGF0aWMgc3NpemVfdCB0YXBfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4tLVxcbmRyaXZlcnMvbmV0L3RhcC5jLTY5OS1cXG5kcml2ZXJzL25ldC90YXAuYzo3MDA6XFx0cmV0dXJuIHRhcF9nZXRfdXNlcihxLCBOVUxMLCBmcm9tLCBub2Jsb2NrKTtcXG5kcml2ZXJzL25ldC90YXAuYy03MDEtfVxcbi0tXFxuZHJpdmVycy9uZXQvdGFwLmM9MTAzMz1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0YXBfZm9wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3RhcC5jLTEwNDMtXFxuZHJpdmVycy9uZXQvdGFwLmM6MTA0NDpzdGF0aWMgaW50IHRhcF9nZXRfdXNlcl94ZHAoc3RydWN0IHRhcF9xdWV1ZSAqcSwgc3RydWN0IHhkcF9idWZmICp4ZHApXFxuZHJpdmVycy9uZXQvdGFwLmMtMTA0NS17XFxuLS1cXG5kcml2ZXJzL25ldC90YXAuYz0xMTE1PXN0YXRpYyBpbnQgdGFwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSxcXG4tLVxcbmRyaXZlcnMvbmV0L3RhcC5jLTExMjYtXFx0XFx0XFx0eGRwID0gXFx1MDAyNigoc3RydWN0IHhkcF9idWZmICopY3RsLVxcdTAwM2VwdHIpW2ldO1xcbmRyaXZlcnMvbmV0L3RhcC5jOjExMjc6XFx0XFx0XFx0dGFwX2dldF91c2VyX3hkcChxLCB4ZHApO1xcbmRyaXZlcnMvbmV0L3RhcC5jLTExMjgtXFx0XFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvdGFwLmMtMTEzMS1cXG5kcml2ZXJzL25ldC90YXAuYzoxMTMyOlxcdHJldHVybiB0YXBfZ2V0X3VzZXIocSwgY3RsID8gY3RsLVxcdTAwM2VwdHIgOiBOVUxMLCBcXHUwMDI2bS1cXHUwMDNlbXNnX2l0ZXIsXFxuZHJpdmVycy9uZXQvdGFwLmMtMTEzMy1cXHRcXHRcXHQgICAgbS1cXHUwMDNlbXNnX2ZsYWdzIFxcdTAwMjYgTVNHX0RPTlRXQUlUKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTk6MjA6NTkuOTE4MDA4OTkxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNTc2OTIwNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNvbnNpZGVyaW5nIEZ1bmN0aW9uIERlc2lnbiBPcHRpb25zKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgbmV3IGZ1bmN0aW9uIGFuZCB0aGUgYmVzdCB3YXkgdG8gYXBwcm9hY2ggaXQuIGB0YXBfZ2V0X3VzZXJgIHNlZW1zIGxpa2UgYSBzb2xpZCBjYW5kaWRhdGUuIEl0J3MgZ290IHRoZSByaWdodCBmdW5jdGlvbmFsaXR5LCBhbmQgdGhlIGV4aXN0aW5nIHN0cnVjdHVyZSBpcyBwcm9iYWJseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEJ1dCwgYmVmb3JlIEkgZ2V0IHRvbyBhdHRhY2hlZCB0byB0aGF0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhIG1vcmUgZWxlZ2FudCBvciBlZmZpY2llbnQgc29sdXRpb24uXG5cbkxldCBtZSB0YWtlIGFub3RoZXIgbG9vay4uLiBobW0sIHdoYXQgYWJvdXQgc29tZXRoaW5nIGxpa2UgYHBhY2tldF9zbmRgPyBJJ20gY3VyaW91cy4gSSBtYXkgbmVlZCB0byBkaXZlIGludG8gdGhlIGNvZGViYXNlIGFuZCBhbmFseXplIGl0cyBpbnRlcm5hbCB3b3JraW5ncy4gSXQgbWF5IHJlcXVpcmUgYSBkZWVwZXIgYW5hbHlzaXMsIGJ1dCBpdCdzIHdvcnRoIGNoZWNraW5nLiBEZXBlbmRpbmcgb24gaG93IHRoZSBkYXRhIGlzIGhhbmRsZWQgaW4gdGhhdCBmdW5jdGlvbiwgdGhlcmUgbWlnaHQgYmUgc29tZSBjbGV2ZXIgaW50ZWdyYXRpb24gb3Bwb3J0dW5pdGllcyB0aGVyZS4gSSBuZWVkIHRvIHdlaWdoIHRoZSBwcm9zIGFuZCBjb25zIG9mIGJvdGggYXBwcm9hY2hlcyBiZWZvcmUgY29tbWl0dGluZyB0byBhIGZpbmFsIGRlc2lnbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1NjgsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxOToyMTowNC4xNzU3MDM3ODJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMjAyMTI1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFja2V0X3NuZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcGFja2V0L2FmX3BhY2tldC5jPTI1Mjg9c3RhdGljIHZvaWQgdHBhY2tldF9kZXN0cnVjdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjU0Ny1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jOjI1NDg6c3RhdGljIGludCBfX3BhY2tldF9zbmRfdm5ldF9wYXJzZShzdHJ1Y3QgdmlydGlvX25ldF9oZHIgKnZuZXRfaGRyLCBzaXplX3QgbGVuKVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjU0OS17XFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI1NjMtXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNTY0OnN0YXRpYyBpbnQgcGFja2V0X3NuZF92bmV0X3BhcnNlKHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90ICpsZW4sXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNTY1LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgdmlydGlvX25ldF9oZHIgKnZuZXRfaGRyLCBpbnQgdm5ldF9oZHJfc3opXFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI1NzUtXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNTc2OlxcdHJldCA9IF9fcGFja2V0X3NuZF92bmV0X3BhcnNlKHZuZXRfaGRyLCAqbGVuKTtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI1NzctXFx0aWYgKHJldClcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MjY2OD1zdGF0aWMgaW50IHRwYWNrZXRfcGFyc2VfaGVhZGVyKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHZvaWQgKmZyYW1lLFxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNzM1LVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjczNjpzdGF0aWMgaW50IHRwYWNrZXRfc25kKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBtc2doZHIgKm1zZylcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI3Mzcte1xcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yODQ5LVxcdFxcdFxcdG1lbWNweShcXHUwMDI2dm5ldF9oZHIsIGRhdGEgLSB2bmV0X2hkcl9zeiwgc2l6ZW9mKHZuZXRfaGRyKSk7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyODUwOlxcdFxcdFxcdGlmIChfX3BhY2tldF9zbmRfdm5ldF9wYXJzZShcXHUwMDI2dm5ldF9oZHIsIHRwX2xlbikpIHtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI4NTEtXFx0XFx0XFx0XFx0dHBfbGVuID0gLUVJTlZBTDtcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9Mjk0MD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnBhY2tldF9hbGxvY19za2Ioc3RydWN0IHNvY2sgKnNrLCBzaXplX3QgcHJlcGFkLFxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yOTY1LVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6Mjk2NjpzdGF0aWMgaW50IHBhY2tldF9zbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjk2Ny17XFxuLS1cXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMwMjMtXFx0aWYgKHZuZXRfaGRyX3N6KSB7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzozMDI0OlxcdFxcdGVyciA9IHBhY2tldF9zbmRfdm5ldF9wYXJzZShtc2csIFxcdTAwMjZsZW4sIFxcdTAwMjZ2bmV0X2hkciwgdm5ldF9oZHJfc3opO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzAyNS1cXHRcXHRpZiAoZXJyKVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0zMTI1PXN0YXRpYyBpbnQgcGFja2V0X3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMTMwLVxcdC8qIFJlYWRpbmcgdHhfcmluZy5wZ192ZWMgd2l0aG91dCBob2xkaW5nIHBnX3ZlY19sb2NrIGlzIHJhY3kuXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzozMTMxOlxcdCAqIHRwYWNrZXRfc25kKCkgd2lsbCByZWRvIHRoZSBjaGVjayBzYWZlbHkuXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0zMTMyLVxcdCAqL1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMzEzMy1cXHRpZiAoZGF0YV9yYWNlKHBvLVxcdTAwM2V0eF9yaW5nLnBnX3ZlYykpXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzozMTM0OlxcdFxcdHJldHVybiB0cGFja2V0X3NuZChwbywgbXNnKTtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMxMzUtXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzozMTM2OlxcdHJldHVybiBwYWNrZXRfc25kKHNvY2ssIG1zZywgbGVuKTtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTMxMzctfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxOToyMTowNi40OTU5MjI5MTJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI0MjQwNDkwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0d29yayBQYWNrZXQgVHJhbnNtaXNzaW9uIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHBhY2tldCB0cmFuc21pc3Npb24sIHRyeWluZyB0byBzZWUgd2hlcmUgdGhlIGNvcmUgbG9naWMgbGllcy4gR29vZCBuZXdzLCBgcGFja2V0X3NuZGAgYW5kIGB0cGFja2V0X3NuZGAgc2VlbSBwcm9taXNpbmcg4oCTIHRoZXkncmUgZGVmaW5pdGVseSBvbiB0aGUgcmlnaHQgdHJhY2suIEFuZCwgb2YgY291cnNlLCBJIGhhdmUgdG8gcmUtZmFtaWxpYXJpemUgbXlzZWxmIHdpdGggYHNrYl9zZWdtZW50YDsgaXQncyBhIHdvcmtob3JzZSwgdGhhdCBvbmUsIGFuZCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkga25vdyBob3cgaXQncyBiZWluZyBsZXZlcmFnZWQuIEl0cyB3aWRlc3ByZWFkIHVzZSwgY291cGxlZCB3aXRoIGl0cyBleHBvcnQgc3RhdHVzLCBzdWdnZXN0cyBpdCdzIGEga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUuXG5cbk5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGFyZSB0aGVyZSAqb3RoZXIqIGZ1bmN0aW9ucyBwbGF5aW5nIGEgcGl2b3RhbCByb2xlIGhlcmU/IEkgbmVlZCB0byBnZXQgYSBicm9hZGVyIHZpZXcgb2YgdGhlIGVjb3N5c3RlbS4gTGV0IG1lIGRpZyBhIGxpdHRsZSBkZWVwZXIuIEhtbSwgYHZpcnRpb19uZXRfaGRyX3RvX3NrYmAgc2VlbXMgdG8gYmUgcmVsZXZhbnQuIEl0J3MgdXNlZCB3aXRoaW4gYHR1bl9nZXRfdXNlcmAsIGB0YXBfZ2V0X3VzZXJgLCB0aGF0IHBhaXIgbWFrZXMgc2Vuc2UsIGl0IGlzIGFsc28gdXNlZCBpbiBgcGFja2V0X3NuZGAgYW5kIGB0cGFja2V0X3NuZGAsIHdoaWNoIGFyZSBhbHNvIGltcG9ydGFudCB0byB1bmRlcnN0YW5kaW5nLCBhbmQgZmluYWxseSBgcGFnZV90b19za2JgLCBpbiBgZHJpdmVycy9uZXQvdmlydGlvX25ldC5jYCwgd2hpY2ggbWFrZXMgbWUgdGhpbmsgaXQgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSBwYWdlIGFsbG9jYXRpb24gYXNwZWN0LiBUaGlzIGlzIGFuIGludGVyZXN0aW5nIHNldCBvZiBjb25uZWN0aW9ucyBhbmQgd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjc3NCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxOToyMToxMS43MzgzMzA1MDRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MjU0MDk5OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFnZV90b19za2JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdmlydGlvX25ldC5jPTgxOT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnZpcnRuZXRfYnVpbGRfc2tiKHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGJ1ZmxlbixcXG4tLVxcbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYy04MzUtLyogQ2FsbGVkIGZyb20gYm90dG9tIGhhbGYgY29udGV4dCAqL1xcbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYzo4MzY6c3RhdGljIHN0cnVjdCBza19idWZmICpwYWdlX3RvX3NrYihzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSxcXG5kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMtODM3LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCByZWNlaXZlX3F1ZXVlICpycSxcXG4tLVxcbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYz0xOTk0PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcmVjZWl2ZV9iaWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYy0yMDE2LVxcbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYzoyMDE3OlxcdHNrYiA9IHBhZ2VfdG9fc2tiKHZpLCBycSwgcGFnZSwgMCwgbGVuLCBQQUdFX1NJWkUsIDApO1xcbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYy0yMDE4LVxcdHU2NF9zdGF0c19hZGQoXFx1MDAyNnN0YXRzLVxcdTAwM2VieXRlcywgbGVuIC0gdmktXFx1MDAzZWhkcl9sZW4pO1xcbi0tXFxuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jPTIzNzY9c3RhdGljIHN0cnVjdCBza19idWZmICpyZWNlaXZlX21lcmdlYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jLTI0MTMtXFxuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jOjI0MTQ6XFx0aGVhZF9za2IgPSBwYWdlX3RvX3NrYih2aSwgcnEsIHBhZ2UsIG9mZnNldCwgbGVuLCB0cnVlc2l6ZSwgaGVhZHJvb20pO1xcbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYy0yNDE1LVxcdGN1cnJfc2tiID0gaGVhZF9za2I7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE5OjIxOjE0LjE2Mzc2NTQyMVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTM5NTY5MzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBWaXJ0aW8tTmV0IEdTTyBhbmQgUGFja2V0IEhhbmRsaW5nKipcblxuT2theSwgaGVyZSdzIHdoYXQncyBydW5uaW5nIHRocm91Z2ggbXkgaGVhZCBhcyBJIGxvb2sgYXQgdGhlc2UgZnVuY3Rpb25zIGFuZCBjb25maWd1cmF0aW9ucy4gYHJlY2VpdmVfYmlnYCBhbmQgYHJlY2VpdmVfbWVyZ2VhYmxlYCBpbiBgZHJpdmVycy9uZXQvdmlydGlvX25ldC5jYCBhcmUgc29saWQgc3RhcnRpbmcgcG9pbnRzLCBhcyB1c3VhbC4gTGV0J3MgZGlnIGRlZXBlciBpbnRvIHRoZSBHU08gaGFuZGxpbmcuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW1wbGVtZW50YXRpb24sIHNvIGxldCdzIHN0YXJ0IHdpdGggYF9fdmlydGlvX25ldF9oZHJfdG9fc2tiYCBpbiBgaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmhgLiBBaCwgeWVzLCB0aGVyZSBpdCBpczpcbmBgYGNcblx0XHRcdEJVSUxEX0JVR19PTihUQ1BfTUlOX0dTT19TSVpFICogR1NPX01BWF9TRUdTIFx1MDAzYyBHU09fTUFYX1NJWkUpO1xuXHRcdFx0Z3NvX3NpemUgPSBtYXgoZ3NvX3NpemUsIFRDUF9NSU5fR1NPX1NJWkUpO1xuYGBgXG5UaGF0IGBCVUlMRF9CVUdfT05gIGxvb2tzIGZhbWlsaWFyIOKAkyBpdCdzIGFkZHJlc3NpbmcgdGhhdCBwb3RlbnRpYWwgaXNzdWUgd2l0aCBHU08gc2l6ZS4gR29vZCBjYXRjaC4gQW5kIHRoZSBgZ3NvX3NpemUgPSBtYXgoZ3NvX3NpemUsIFRDUF9NSU5fR1NPX1NJWkUpYCBpcyBhbm90aGVyIGNyaXRpY2FsIHBpZWNlIG9mIHRoYXQgZml4OyBlbnN1cmluZyBhIHJlYXNvbmFibGUgbWluaW11bS5cblxuTW92aW5nIG9uLCB0aGUgb3RoZXIgY3J1Y2lhbCBzcG90IHNlZW1zIHRvIGJlIGluIGBza2Jfc2VnbWVudGA6XG5gYGBjXG5cdFx0cGFydGlhbF9zZWdzID0gbWluKGxlbiAvIG1zcywgR1NPX01BWF9TRUdTKTtcbmBgYFxuUmlnaHQsIHRoaXMgbG9va3MgbGlrZSBpdOKAmXMgdG8gcHJldmVudCBgcGFydGlhbF9zZWdzYCBmcm9tIG92ZXJmbG93aW5nIGBHU09fTUFYX1NFR1NgLiBDbGFzc2ljIEdTTyBzZWdtZW50YXRpb24gbGltaXQgcHJvdGVjdGlvbi5cblxuU28sIHRha2luZyBhIHN0ZXAgYmFjayB0byBvcmdhbml6ZSBteSB0aG91Z2h0cywgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBJIHdhbnQgdG8gdGhvcm91Z2hseSByZXZpZXcgYW5kIHRyYWNlIGFyZTpcbi0gYHNrYl9zZWdtZW50YCAob2J2aW91c2x5LCBnaXZlbiB0aGUgR1NPIGZvY3VzKVxuLSBgdHVuX2dldF91c2VyYFxuLSBgdGFwX2dldF91c2VyYFxuLSBgcGFja2V0X3NuZGBcbi0gYHRwYWNrZXRfc25kYFxuLSBgcmVjZWl2ZV9iaWdgXG4tIGByZWNlaXZlX21lcmdlYWJsZWBcblxuVGhvc2Ugc2VlbSBsaWtlIHRoZSBjcml0aWNhbCBwYXRocy4gTm93LCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSBjb250ZXh0LCB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSBpbnZvbHZlZD8gSSBrbm93IGBUVU5gLCBgTUFDVlRBUGAsIGBQQUNLRVRgLCBhbmQgYFZJUlRJT19ORVRgIGFyZSBhbGwgcmVsZXZhbnQgaGVyZS4gTm93IGxldCdzIHNlZSB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBzaXRzLCBJJ2xsIHRha2UgYSBsb29rIGF0IHRoZSBgS2NvbmZpZ2AgZm9yIGBWSVJUSU9fTkVUYCB0byBjaGVjayBpZiBJIGFtIG1pc3Npbmcgc29tZXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzU5OSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxOToyMToyMC43MDMzMzc4MTNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2ODIzMjA3MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZJUlRJT19ORVRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz00MzU9Y29uZmlnIFZFVEhcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctNDQyLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6NDQzOmNvbmZpZyBWSVJUSU9fTkVUXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00NDQtXFx0dHJpc3RhdGUgXFxcIlZpcnRpbyBuZXR3b3JrIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTk6MjE6MjMuMzg1NjY1MTcyWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MzEyODExOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBNQUNWVEFQIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIGBNQUNWVEFQYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBgS2NvbmZpZ2AgZmlsZXMuIFRoYXQncyB0aGUgZGVmaW5pdGl2ZSBzb3VyY2UgZm9yIHRoZXNlIHNvcnRzIG9mIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0uIEknbGwgbmVlZCB0byBzZWUgaG93IGBNQUNWVEFQYCBpcyBkZWZpbmVkLCB3aGljaCBzZXR0aW5ncyBjb250cm9sIGl0LCBhbmQgd2hhdCBvdGhlciBjb21wb25lbnRzIGl0IG1pZ2h0IGRlcGVuZCBvbi4gSG9wZWZ1bGx5LCB0aGUgcmVsZXZhbnQgYEtjb25maWdgIGVudHJ5IGlzIHdlbGwtY29tbWVudGVkIGFuZCBjbGVhci4gSSdtIGxvb2tpbmcgZm9yIGFueSBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBiZSByZWxldmFudCB0byB0aGUgaXNzdWUgSSdtIGRlYnVnZ2luZyBvciB0aGUgZmVhdHVyZSBJJ20gZW5hYmxpbmcuIEknbGwgYmUgZXhwZWN0aW5nIHRvIHNlZSBhIGJvb2xlYW4gY29uZmlndXJhdGlvbiBvcHRpb24gZGVmaW5lZCBzb21ld2hlcmUsIGFsb25nIHdpdGggbWF5YmUgc29tZSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgb24gb3RoZXIgbmV0d29yayBvciB2aXJ0dWFsaXphdGlvbiBtb2R1bGVzLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gc3BhY2UgYW5kIGRlY2lkZSBpZiB0aGlzIGlzIGFjdHVhbGx5IGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NTEzLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTk6MjE6MjcuMjE2OTUzMDk2WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzg1MjU4MTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNQUNWVEFQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9MTY1PWNvbmZpZyBNQUNWTEFOXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTE3OC1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjE3OTpjb25maWcgTUFDVlRBUFxcbmRyaXZlcnMvbmV0L0tjb25maWctMTgwLVxcdHRyaXN0YXRlIFxcXCJNQUMtVkxBTiBiYXNlZCB0YXAgZHJpdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxOToyMToyOS42MDIyMjM5MzRaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk3Njg1NDA5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQ2hlY2tpbmcgdGhlIFRVTiBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgYEtjb25maWdgIGZpbGVzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGBUVU5gIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBzaG91bGQgcXVpY2tseSB2ZXJpZnkgdGhlIHJlbGV2YW50IGRlcGVuZGVuY2llcyBhbmQgcG9zc2libGUgYnVpbGQgZmxhZ3MuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gd2hldGhlciBhbnkgcmVjZW50IGNoYW5nZXMgbWlnaHQgaGF2ZSBpbXBhY3RlZCB0aGUgZGVmYXVsdCBzZXR0aW5ncy4gSXQncyBiZXN0IHRvIGNvbmZpcm0gdGhlIGBUVU5gIGRldmljZSBpcyBlbmFibGVkLCBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYXMgZXhwZWN0ZWQgZm9yIHRoZSBjdXJyZW50IHVzZSBjYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODgyMiwiT3V0cHV0VG9rZW5zIjoxNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE5OjIxOjMyLjU3OTA4MTM2NFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4NTM4MzY1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVFVOXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlPTI0MD1jb25maWcgVEFSR0VUX0NQVVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGUtMjY0LVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlOjI2NTpjb25maWcgVFVORV9DUFVcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZS0yNjYtXFx0c3RyaW5nXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWc9NDcxPWNob2ljZVxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnLTQ3NC1cXG5hcmNoL3Jpc2N2L0tjb25maWc6NDc1OmNvbmZpZyBUVU5FX0dFTkVSSUNcXG5hcmNoL3Jpc2N2L0tjb25maWctNDc2LVxcdGJvb2wgXFxcImdlbmVyaWNcXFwiXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZz00NjE9Y2hvaWNlXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy00NzEtXFxuYXJjaC9zMzkwL0tjb25maWc6NDcyOmNvbmZpZyBUVU5FX0RFRkFVTFRcXG5hcmNoL3MzOTAvS2NvbmZpZy00NzMtXFx0Ym9vbCBcXFwiRGVmYXVsdFxcXCJcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTQ3Ny1cXG5hcmNoL3MzOTAvS2NvbmZpZzo0Nzg6Y29uZmlnIFRVTkVfWjEwXFxuYXJjaC9zMzkwL0tjb25maWctNDc5LVxcdGJvb2wgXFxcIklCTSBTeXN0ZW0gejEwXFxcIlxcbmFyY2gvczM5MC9LY29uZmlnLTQ4MC1cXG5hcmNoL3MzOTAvS2NvbmZpZzo0ODE6Y29uZmlnIFRVTkVfWjE5NlxcbmFyY2gvczM5MC9LY29uZmlnLTQ4Mi1cXHRib29sIFxcXCJJQk0gekVudGVycHJpc2UgMTE0IGFuZCAxOTZcXFwiXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy00ODQtXFxuYXJjaC9zMzkwL0tjb25maWc6NDg1OmNvbmZpZyBUVU5FX1pFQzEyXFxuYXJjaC9zMzkwL0tjb25maWctNDg2LVxcdGJvb2wgXFxcIklCTSB6QkMxMiBhbmQgekVDMTJcXFwiXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy00ODgtXFxuYXJjaC9zMzkwL0tjb25maWc6NDg5OmNvbmZpZyBUVU5FX1oxM1xcbmFyY2gvczM5MC9LY29uZmlnLTQ5MC1cXHRib29sIFxcXCJJQk0gejEzcyBhbmQgejEzXFxcIlxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctNDkyLVxcbmFyY2gvczM5MC9LY29uZmlnOjQ5Mzpjb25maWcgVFVORV9aMTRcXG5hcmNoL3MzOTAvS2NvbmZpZy00OTQtXFx0Ym9vbCBcXFwiSUJNIHoxNCBaUjEgYW5kIHoxNFxcXCJcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTQ5Ni1cXG5hcmNoL3MzOTAvS2NvbmZpZzo0OTc6Y29uZmlnIFRVTkVfWjE1XFxuYXJjaC9zMzkwL0tjb25maWctNDk4LVxcdGJvb2wgXFxcIklCTSB6MTVcXFwiXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy01MDAtXFxuYXJjaC9zMzkwL0tjb25maWc6NTAxOmNvbmZpZyBUVU5FX1oxNlxcbmFyY2gvczM5MC9LY29uZmlnLTUwMi1cXHRib29sIFxcXCJJQk0gejE2XFxcIlxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctNTA0LVxcbmFyY2gvczM5MC9LY29uZmlnOjUwNTpjb25maWcgVFVORV9aMTdcXG5hcmNoL3MzOTAvS2NvbmZpZy01MDYtXFx0Ym9vbCBcXFwiSUJNIHoxN1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9Mzg2PWNvbmZpZyBSSU9ORVRfUlhfU0laRVxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zOTAtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzozOTE6Y29uZmlnIFRVTlxcbmRyaXZlcnMvbmV0L0tjb25maWctMzkyLVxcdHRyaXN0YXRlIFxcXCJVbml2ZXJzYWwgVFVOL1RBUCBkZXZpY2UgZHJpdmVyIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTQxNT1jb25maWcgVEFQXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTQyMC1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjQyMTpjb25maWcgVFVOX1ZORVRfQ1JPU1NfTEVcXG5kcml2ZXJzL25ldC9LY29uZmlnLTQyMi1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBjcm9zcy1lbmRpYW4gdm5ldCBoZWFkZXJzIG9uIGxpdHRsZS1lbmRpYW4ga2VybmVsc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTk6MjE6MzQuNjY0NDcxODAxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMjk1MTA1MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHRob3VnaCBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqS2NvbmZpZyBEaXZlIGZvciBQQUNLRVQqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgb3Igc2V0dGluZ3MgcmVsYXRlZCB0byB0aGUgYFBBQ0tFVGAgZnVuY3Rpb25hbGl0eSBpbiB0aGlzIHByb2plY3QuIEZpcnN0LCBteSBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB0aGUgYEtjb25maWdgIGZpbGVzLiBUaGF0J3MgdXN1YWxseSB0aGUgY2VudHJhbCBodWIgZm9yIGRlZmluaW5nIGFuZCBjb250cm9sbGluZyBrZXJuZWwgZmVhdHVyZXMsIGRyaXZlcnMsIGFuZCBvcHRpb25zLiBJJ2xsIG5lZWQgdG8gbG9jYXRlIHRoZSByZWxldmFudCBgS2NvbmZpZ2AgZmlsZXMg4oCTIHByb2JhYmx5IHN0YXJ0aW5nIHdpdGggdGhlIG1vcmUgZ2VuZXJhbCBvbmVzIGFuZCB0aGVuIGRyaWxsaW5nIGRvd24gaWYgbmVjZXNzYXJ5LiBUaGUgZ29hbCBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGRpZmZlcmVudCBgUEFDS0VUYCByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGF2YWlsYWJsZSwgdGhlaXIgZGVmYXVsdHMsIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgc2V0dGluZ3MsIGFuZCwgY3J1Y2lhbGx5LCBob3cgdG8gZW5hYmxlIG9yIGRpc2FibGUgdGhlbSB3aXRoaW4gdGhlIGJ1aWxkIHN5c3RlbS4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzaW1wbGUgbW9kdWxlLCBzb21ldGhpbmcgbW9yZSBjb21wbGV4LCBvciBwZXJoYXBzIGEgc2V0IG9mIHJlbGF0ZWQgb3B0aW9ucz8gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTg3MiwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE5OjIxOjM3Ljg5Mzk4NjcxNFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM3NDgwNDA5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUEFDS0VUXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9wYWNrZXQvS2NvbmZpZy01LVxcbm5ldC9wYWNrZXQvS2NvbmZpZzo2OmNvbmZpZyBQQUNLRVRcXG5uZXQvcGFja2V0L0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiUGFja2V0IHNvY2tldFxcXCJcXG4tLVxcbm5ldC9wYWNrZXQvS2NvbmZpZy0xOC1cXG5uZXQvcGFja2V0L0tjb25maWc6MTk6Y29uZmlnIFBBQ0tFVF9ESUFHXFxubmV0L3BhY2tldC9LY29uZmlnLTIwLVxcdHRyaXN0YXRlIFxcXCJQYWNrZXQ6IHNvY2tldHMgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE5OjIxOjQwLjI2ODgyNzM5MloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MzM3MTYwOTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cywgZm9jdXNpbmcgb24gbmV0d29yay1yZWxhdGVkIGNvZGUuIE15IGNvbmZpZ3MgdGVsbCBtZSB0byBjb25zaWRlciBgVFVOYCwgYE1BQ1ZUQVBgLCBgUEFDS0VUYCwgYFZJUlRJT19ORVRgLCBhbmQgYFRBUGAuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGBza2Jfc2VnbWVudGAgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYCBpcyBhbHdheXMgY29tcGlsZWQ7IEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC5cblxuSSd2ZSBpZGVudGlmaWVkIGEgaGFuZGZ1bCBvZiBmdW5jdGlvbnMgdGhhdCBzZWVtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBUaGVzZSBpbmNsdWRlIGBza2Jfc2VnbWVudGAsIGB0dW5fZ2V0X3VzZXJgLCBgdGFwX2dldF91c2VyYCwgYHBhY2tldF9zbmRgLCBgdHBhY2tldF9zbmRgLCBgcmVjZWl2ZV9iaWdgLCBhbmQgYHJlY2VpdmVfbWVyZ2VhYmxlYC4gXG5cbkhhbmcgb24sIGByZWNlaXZlX2JpZ2AgYW5kIGByZWNlaXZlX21lcmdlYWJsZWAgYXJlIHNwZWNpZmljIHRvIGB2aXJ0aW9fbmV0YCwgcmlnaHQ/IEFuZCB0aGV5J3JlIHN0YXRpYyBidXQgbm90IGlubGluZWQuIEdvb2QgdG8ga25vdy4gYHNrYl9zZWdtZW50YCBpcyBleHBvcnRlZCwgdGhhdCdzIHVzZWZ1bC4gQW5kIGFsbCB0aGUgb3RoZXJzLCBgdHVuX2dldF91c2VyYCwgYHRhcF9nZXRfdXNlcmAsIGBwYWNrZXRfc25kYCwgYW5kIGB0cGFja2V0X3NuZGAgYXJlIHN0YXRpYy5cblxuVGhlIGtleSBxdWVzdGlvbiBpcywgYXJlIHRoZXkgc3VpdGFibGUgZm9yIGZ1enppbmc/IEFuZCB0aGUgYW5zd2VyIGlzIHllcywgYWJzb2x1dGVseSEgVGhlc2UgYXBwZWFyIHRvIGJlIGVudHJ5IHBvaW50cyB0aGF0IGhhbmRsZSB1c2VyLXByb3ZpZGVkIGRhdGEuIGB0dW5fZ2V0X3VzZXJgIGhhbmRsZXMgZGF0YSB3aGVuIHdyaXRpbmcgdG8gYSBUVU4gZGV2aWNlLCBgdGFwX2dldF91c2VyYCB3aGVuIHdyaXRpbmcgdG8gYSBUQVAgZGV2aWNlLiBUaGVuIGBwYWNrZXRfc25kYCBhbmQgYHRwYWNrZXRfc25kYCBhcmUgaW52b2x2ZWQgaW4gc2VuZGluZyBwYWNrZXRzIHZpYSBBRl9QQUNLRVQgc29ja2V0cy4gQW5kIGZpbmFsbHksIGBza2Jfc2VnbWVudGAgaXMgdGllZCB0byBHU08gc2VnbWVudGF0aW9uLCBzbyBpdCBkZWZpbml0ZWx5IGRlYWxzIHdpdGggcGFja2V0IGRhdGEuXG5cbkFscmlnaHQsIEknbSBjb25maWRlbnQgaW4gdGhlc2UgdGFyZ2V0cy4gVGltZSB0byBmZWVkIHRoaXMgaW5mb3JtYXRpb24gdG8gdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgbW92ZSBvbiB0byB0aGUgbmV4dCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDE4NywiT3V0cHV0VG9rZW5zIjoxODgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTk6MjE6NDguNjA1OTkxNDJaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTY5NzA4MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRVTlwiLFxuICAgIFwiVEFQXCIsXG4gICAgXCJNQUNWVEFQXCIsXG4gICAgXCJQQUNLRVRcIixcbiAgICBcIlZJUlRJT19ORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJza2Jfc2VnbWVudFwiLFxuICAgIFwidHVuX2dldF91c2VyXCIsXG4gICAgXCJ0YXBfZ2V0X3VzZXJcIixcbiAgICBcInBhY2tldF9zbmRcIixcbiAgICBcInRwYWNrZXRfc25kXCIsXG4gICAgXCJyZWNlaXZlX2JpZ1wiLFxuICAgIFwicmVjZWl2ZV9tZXJnZWFibGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgbG9naWMgZm9yIEdTTyBzZWdtZW50YXRpb24gKGBza2Jfc2VnbWVudGApIGFuZCB2aXJ0aW8gbmV0IGhlYWRlciBwYXJzaW5nIChgX192aXJ0aW9fbmV0X2hkcl90b19za2JgKS4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaG93IHBhY2tldHMgYXJlIHNlZ21lbnRlZCBhbmQgaG93IHZpcnRpbyBoZWFkZXJzIGFyZSB2YWxpZGF0ZWQsIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIFRVTi9UQVAgZGV2aWNlcywgQUZfUEFDS0VUIHNvY2tldHMsIGFuZCB2aXJ0aW8tbmV0LiBUaGUgY2hhbmdlcyBoYXZlIGZ1bmN0aW9uYWwgaW1wYWN0IGFuZCBhcmUgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUVU5cIixcbiAgICBcIlRBUFwiLFxuICAgIFwiTUFDVlRBUFwiLFxuICAgIFwiUEFDS0VUXCIsXG4gICAgXCJWSVJUSU9fTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2tiX3NlZ21lbnRcIixcbiAgICBcInR1bl9nZXRfdXNlclwiLFxuICAgIFwidGFwX2dldF91c2VyXCIsXG4gICAgXCJwYWNrZXRfc25kXCIsXG4gICAgXCJ0cGFja2V0X3NuZFwiLFxuICAgIFwicmVjZWl2ZV9iaWdcIixcbiAgICBcInJlY2VpdmVfbWVyZ2VhYmxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGxvZ2ljIGZvciBHU08gc2VnbWVudGF0aW9uIChgc2tiX3NlZ21lbnRgKSBhbmQgdmlydGlvIG5ldCBoZWFkZXIgcGFyc2luZyAoYF9fdmlydGlvX25ldF9oZHJfdG9fc2tiYCkuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGhvdyBwYWNrZXRzIGFyZSBzZWdtZW50ZWQgYW5kIGhvdyB2aXJ0aW8gaGVhZGVycyBhcmUgdmFsaWRhdGVkLCB3aGljaCBhcmUgcmVhY2hhYmxlIHZpYSBUVU4vVEFQIGRldmljZXMsIEFGX1BBQ0tFVCBzb2NrZXRzLCBhbmQgdmlydGlvLW5ldC4gVGhlIGNoYW5nZXMgaGF2ZSBmdW5jdGlvbmFsIGltcGFjdCBhbmQgYXJlIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE5OjIxOjQ4Ljc2Mjk3MjU4NVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxNDU3MDk1MTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxOToyMTo0OC43NjQwMjEyOTVaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTIxNDQ2NTUyNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBwb3RlbnRpYWwgaXNzdWVzIHdpdGggR1NPIHNpemUgYW5kIHNlZ21lbnQgY2FsY3VsYXRpb25zLCBsaWtlbHkgcHJldmVudGluZyBpbnRlZ2VyIG92ZXJmbG93cywgZXhjZXNzaXZlIHNlZ21lbnQgY291bnRzLCBvciBkaXZpc2lvbiBieSB6ZXJvLiBJdCBlbmZvcmNlcyBhIG1pbmltdW0gYGdzb19zaXplYCBhbmQgbGltaXRzIGBwYXJ0aWFsX3NlZ3NgIHRvIGBHU09fTUFYX1NFR1NgLiBUaGVzZSBhcmUgYXJpdGhtZXRpYyBhbmQgYm91bmRzLWNoZWNraW5nIGZpeGVzLiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb2YgbmV3IGRhdGEgc3RydWN0dXJlcywgbm8gY2hhbmdlcyB0byBtZW1vcnkgaW5pdGlhbGl6YXRpb24sIGFuZCBubyByaXNrIG9mIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNpbmcgaXQgaW4gY29udHJvbCBmbG93LiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgY3Jhc2hlcyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhM2JjZDAxM2FmYTVhODQ0MDZkMmNiYzE1NmQ1NjI1YmVhMGMzOGM0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMTk6MTk6NTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaCBiL2luY2x1ZGUvbGludXgvdmlydGlvX25ldC5oXG5pbmRleCBmMzZkMjFiNWJjMTllLi5jMzgxYjkxNmMxYjU0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmhcbisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX25ldC5oXG5AQCAtNiw2ICs2LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXB2Ni5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWRwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvdGNwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L3RjcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC92aXJ0aW9fbmV0LmhcdTAwM2VcbiBcbkBAIC0xNzksNiArMTgwLDkgQEAgc3RhdGljIGlubGluZSBpbnQgX192aXJ0aW9fbmV0X2hkcl90b19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRpZiAoc2tiLVx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICBza2ItXHUwMDNlY3N1bV9vZmZzZXQgIT0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spKVxuIFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdFx0QlVJTERfQlVHX09OKFRDUF9NSU5fR1NPX1NJWkUgKiBHU09fTUFYX1NFR1MgXHUwMDNjIEdTT19NQVhfU0laRSk7XG4rXHRcdFx0Z3NvX3NpemUgPSBtYXgoZ3NvX3NpemUsIFRDUF9NSU5fR1NPX1NJWkUpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuY1xuaW5kZXggYzgyYTE0NzJhNWVhOC4uNDM5Y2JmZWIwMmJkNiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NrYnVmZi5jXG4rKysgYi9uZXQvY29yZS9za2J1ZmYuY1xuQEAgLTQ4NjAsNyArNDg2MCw3IEBAIHN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqaGVhZF9za2IsXG4gXHRcdCAqIGRvZXNuJ3QgZml0IGludG8gYW4gTVNTIHNpemVkIGJsb2NrLCBzbyB0YWtlIGNhcmUgb2YgdGhhdFxuIFx0XHQgKiBub3cuXG4gXHRcdCAqL1xuLVx0XHRwYXJ0aWFsX3NlZ3MgPSBsZW4gLyBtc3M7XG4rXHRcdHBhcnRpYWxfc2VncyA9IG1pbihsZW4gLyBtc3MsIEdTT19NQVhfU0VHUyk7XG4gXHRcdGlmIChwYXJ0aWFsX3NlZ3MgXHUwMDNlIDEpXG4gXHRcdFx0bXNzICo9IHBhcnRpYWxfc2VncztcbiBcdFx0ZWxzZVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTk6MjE6NDguNzY0MDIyNzQ1WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMTQ0NjIyNjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkdTTyBTaXplIGFuZCBTZWdtZW50IEJvdW5kcyBGaXgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGB2aXJ0aW9fbmV0LmhgIGFuZCBgc2tidWZmLmNgLiBNeSBpbml0aWFsIHJlYWQgaXMgdGhhdCBpdCdzIGRlYWxpbmcgd2l0aCBHZW5lcmFsaXplZCBTZWdtZW50YXRpb24gT2ZmbG9hZCAoR1NPKSBhbmQsIHNwZWNpZmljYWxseSwgaG93IHRoZSBzaXplIG9mIHRob3NlIHNlZ21lbnRzIGlzIGhhbmRsZWQuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGludm9sdmUgbWFraW5nIHN1cmUgdGhlIEdTTyBzaXplIGRvZXNuJ3QgYmVjb21lIHRvbyBzbWFsbCBhbmQgdGhlIG51bWJlciBvZiBzZWdtZW50cyBpc24ndCB1bmJvdW5kZWQsIHRvIGF2b2lkIGludGVnZXIgb3ZlcmZsb3dzIG9yIGRpdmlzaW9uIGJ5IHplcm8uXG5cbkluIGBfX3ZpcnRpb19uZXRfaGRyX3RvX3NrYmAsIHRoZSBhZGRpdGlvbiBvZiBgZ3NvX3NpemUgPSBtYXgoZ3NvX3NpemUsIFRDUF9NSU5fR1NPX1NJWkUpYCBjYXVnaHQgbXkgZXllLiAgVGhpcyBndWFyYW50ZWVzIHRoYXQgdGhlIHNlZ21lbnQgc2l6ZSB3aWxsIGF0IGxlYXN0IGJlIGBUQ1BfTUlOX0dTT19TSVpFYCwgd2hpY2ggaXMgYSBnb29kIHNhbml0eSBjaGVjay4gVGhlbiwgaW4gYHNrYl9zZWdtZW50YCwgdGhlIGBwYXJ0aWFsX3NlZ3MgPSBtaW4obGVuIC8gbXNzLCBHU09fTUFYX1NFR1MpYCBtb2RpZmljYXRpb24gaXMgc21hcnQuIEJ5IGxpbWl0aW5nIGBwYXJ0aWFsX3NlZ3NgIHRvIGBHU09fTUFYX1NFR1NgLCB0aGUgY2FsY3VsYXRpb24gb2YgYG1zcyAqIHBhcnRpYWxfc2Vnc2AgaXMgbWFkZSBzYWZlciwgcHJldmVudGluZyB0aGF0IHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93IEkgbWVudGlvbmVkIGVhcmxpZXIuIElmIGBtc3NgIGJlY2FtZSB0b28gc21hbGwsIHRoZSBkaXZpc2lvbiBjb3VsZCBwcm9kdWNlIGV4Y2Vzc2l2ZWx5IGxhcmdlIG51bWJlcnMuXG5cbk15IGZpcnN0IHRob3VnaHQgd2FzLCBcIklzIHRoaXMgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnk/XCIgR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGVzZSBjaGFuZ2Vz4oCUYWRqdXN0aW5nIGNhbGN1bGF0aW9ucywgZW5zdXJpbmcgYm91bmRzLCBhbmQgcHJvdGVjdGluZyBhZ2FpbnN0IGFyaXRobWV0aWMgaXNzdWVz4oCUaXQgKnNlZW1zKiB1bmxpa2VseS4gIEkgbWVhbiwgdGhpcyBoYXMgbW9yZSB0byBkbyB3aXRoIHBvdGVudGlhbGx5IGdvaW5nIG91dCBvZiBib3VuZHMsIGluZmluaXRlIGxvb3BzLCBhbmQgY3Jhc2hpbmcgZHVlIHRvIGluY29ycmVjdCBjYWxjdWxhdGlvbnMgb2YgR1NPLiBJJ20gZm9jdXNpbmcgb24gdGhlICp2YWx1ZXMqIGhlcmUgYW5kIGhvdyB0aGV54oCZcmUgdXNlZCwgbm90IHdoZXRoZXIgdGhvc2UgdmFsdWVzIGFyZSBpbml0aWFsaXplZC4gS0FTQU4gd291bGQgZGVmaW5pdGVseSBwaWNrIHVwIGFueSBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gS01TQU4gaXMgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5MZXQgbWUgZG91YmxlLWNoZWNrLiBUaGUgYGdzb19zaXplYCBjb21lcyBmcm9tIGBoZHItXHUwMDNlZ3NvX3NpemVgLCBhbmQgYGxlbmAgYW5kIGBtc3NgIGFyZSBkZXJpdmVkIGZyb20gdGhlIGBza2JgJ3Mgc3RhdGUuIE5vIG5ldyBhbGxvY2F0aW9ucyBvciBjb3BpZXMgaW50byB1c2VyIHNwYWNlIGFyZSBpbnRyb2R1Y2VkLiBUaGVzZSBhcmUgcHVyZWx5IGJvdW5kcyBjaGVja3MgYW5kIGFyaXRobWV0aWMgYWRqdXN0bWVudHMgb24gZXhpc3RpbmcsIGluaXRpYWxpemVkIGRhdGEuICBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnZvbHZlZC4gIFRoZSByaXNrIGlzIG1vcmUgYWJvdXQgbWFraW5nIHN1cmUgdGhlIGNhbGN1bGF0aW9ucyByZW1haW4gd2l0aGluIHJlYXNvbmFibGUgbGltaXRzIGFuZCBhdm9pZGluZyBuYXN0eSBzaWRlIGVmZmVjdHMgZnJvbSBvdmVyZmxvd2luZyB2YXJpYWJsZXMgdXNlZCBpbiBjYWxjdWxhdGlvbnMuIE15IGNvbmNsdXNpb246IE5lZWRzS01TQU4gPSBmYWxzZS4gVGhlIGZpeCBpcyBhYm91dCBzYWZlIGFyaXRobWV0aWMsIHNlZ21lbnQgbGltaXRzLCBhbmQgcHJldmVudGluZyBvdmVyZmxvd3MsIG5vdCBkZWFsaW5nIHdpdGggbWVtb3J5IGluaXRpYWxpemF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzE0LCJPdXRwdXRUb2tlbnMiOjE1NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE5OjIyOjAwLjkwODY1MDM2OFoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBHU08gc2l6ZSBhbmQgc2VnbWVudCBjYWxjdWxhdGlvbnMsIGxpa2VseSBwcmV2ZW50aW5nIGludGVnZXIgb3ZlcmZsb3dzLCBleGNlc3NpdmUgc2VnbWVudCBjb3VudHMsIG9yIGRpdmlzaW9uIGJ5IHplcm8uIEl0IGVuZm9yY2VzIGEgbWluaW11bSBgZ3NvX3NpemVgIGFuZCBsaW1pdHMgYHBhcnRpYWxfc2Vnc2AgdG8gYEdTT19NQVhfU0VHU2AuIFRoZXNlIGFyZSBhcml0aG1ldGljIGFuZCBib3VuZHMtY2hlY2tpbmcgZml4ZXMuIFRoZXJlIGlzIG5vIGludHJvZHVjdGlvbiBvZiBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBubyBjaGFuZ2VzIHRvIG1lbW9yeSBpbml0aWFsaXphdGlvbiwgYW5kIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2luZyBpdCBpbiBjb250cm9sIGZsb3cuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBtZW1vcnkgY29ycnVwdGlvbiBvciBjcmFzaGVzIHJlbGF0ZWQgdG8gdGhlc2UgY2hhbmdlcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBwb3RlbnRpYWwgaXNzdWVzIHdpdGggR1NPIHNpemUgYW5kIHNlZ21lbnQgY2FsY3VsYXRpb25zLCBsaWtlbHkgcHJldmVudGluZyBpbnRlZ2VyIG92ZXJmbG93cywgZXhjZXNzaXZlIHNlZ21lbnQgY291bnRzLCBvciBkaXZpc2lvbiBieSB6ZXJvLiBJdCBlbmZvcmNlcyBhIG1pbmltdW0gYGdzb19zaXplYCBhbmQgbGltaXRzIGBwYXJ0aWFsX3NlZ3NgIHRvIGBHU09fTUFYX1NFR1NgLiBUaGVzZSBhcmUgYXJpdGhtZXRpYyBhbmQgYm91bmRzLWNoZWNraW5nIGZpeGVzLiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb2YgbmV3IGRhdGEgc3RydWN0dXJlcywgbm8gY2hhbmdlcyB0byBtZW1vcnkgaW5pdGlhbGl6YXRpb24sIGFuZCBubyByaXNrIG9mIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNpbmcgaXQgaW4gY29udHJvbCBmbG93LiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgY3Jhc2hlcyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow5mv5p[1] Phase: Succeeded StartedAt: 2026-08-13 19:22:12 +0000 UTC FinishedAt: 2026-08-13 19:22:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5mv5p[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-13 19:22:12 +0000 UTC FinishedAt: 2026-08-13 19:22:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5mv5p[2] Phase: Succeeded StartedAt: 2026-08-13 19:22:12 +0000 UTC FinishedAt: 2026-08-13 23:07:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5mv5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["skb_segment","tun_get_user","tap_get_user","packet_snd","tpacket_snd","receive_big","receive_mergeable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"ccf036e1-8494-4eab-b5ce-2a71352ea2a6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-13 19:22:12 +0000 UTC FinishedAt: 2026-08-13 23:07:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["skb_segment","tun_get_user","tap_get_user","packet_snd","tpacket_snd","receive_big","receive_mergeable"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"ccf036e1-8494-4eab-b5ce-2a71352ea2a6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow5mv5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["skb_segment","tun_get_user","tap_get_user","packet_snd","tpacket_snd","receive_big","receive_mergeable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"ccf036e1-8494-4eab-b5ce-2a71352ea2a6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-13 19:22:12 +0000 UTC FinishedAt: 2026-08-13 19:22:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5mv5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["skb_segment","tun_get_user","tap_get_user","packet_snd","tpacket_snd","receive_big","receive_mergeable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"ccf036e1-8494-4eab-b5ce-2a71352ea2a6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-13 19:22:12 +0000 UTC FinishedAt: 2026-08-13 19:22:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflow5mv5p/series-workflow5mv5p-convert-artifact-1090329305/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5mv5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["skb_segment","tun_get_user","tap_get_user","packet_snd","tpacket_snd","receive_big","receive_mergeable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"ccf036e1-8494-4eab-b5ce-2a71352ea2a6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-13 19:22:22 +0000 UTC FinishedAt: 2026-08-13 19:42:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5mv5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["skb_segment","tun_get_user","tap_get_user","packet_snd","tpacket_snd","receive_big","receive_mergeable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"ccf036e1-8494-4eab-b5ce-2a71352ea2a6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-13 19:22:22 +0000 UTC FinishedAt: 2026-08-13 19:42:42 +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:*7fe02d96-4ca7-472e-99d5-a55e2e74cb95,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-workflow5mv5p/series-workflow5mv5p-convert-artifact-1090329305/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": "d12c6ba8-5d6f-4bcb-bce2-910b1987021b", "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-workflow5mv5p/series-workflow5mv5p-build-action-2087795575/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5mv5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["skb_segment","tun_get_user","tap_get_user","packet_snd","tpacket_snd","receive_big","receive_mergeable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"ccf036e1-8494-4eab-b5ce-2a71352ea2a6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-13 19:22:22 +0000 UTC FinishedAt: 2026-08-13 19:42:32 +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:*7fe02d96-4ca7-472e-99d5-a55e2e74cb95,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-workflow5mv5p/series-workflow5mv5p-convert-artifact-1090329305/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": "d12c6ba8-5d6f-4bcb-bce2-910b1987021b", "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-workflow5mv5p/series-workflow5mv5p-build-action-2087795575/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5mv5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["skb_segment","tun_get_user","tap_get_user","packet_snd","tpacket_snd","receive_big","receive_mergeable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"ccf036e1-8494-4eab-b5ce-2a71352ea2a6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-13 19:42:42 +0000 UTC FinishedAt: 2026-08-13 19:42:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5mv5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["skb_segment","tun_get_user","tap_get_user","packet_snd","tpacket_snd","receive_big","receive_mergeable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"ccf036e1-8494-4eab-b5ce-2a71352ea2a6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-13 19:42:42 +0000 UTC FinishedAt: 2026-08-13 19:42:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5mv5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["skb_segment","tun_get_user","tap_get_user","packet_snd","tpacket_snd","receive_big","receive_mergeable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"ccf036e1-8494-4eab-b5ce-2a71352ea2a6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-13 19:42:42 +0000 UTC FinishedAt: 2026-08-13 19:42:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5mv5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["skb_segment","tun_get_user","tap_get_user","packet_snd","tpacket_snd","receive_big","receive_mergeable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"ccf036e1-8494-4eab-b5ce-2a71352ea2a6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-13 19:42:42 +0000 UTC FinishedAt: 2026-08-13 19:42:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"ccf036e1-8494-4eab-b5ce-2a71352ea2a6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflow5mv5p/series-workflow5mv5p-convert-artifact-258741164/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5mv5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["skb_segment","tun_get_user","tap_get_user","packet_snd","tpacket_snd","receive_big","receive_mergeable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"ccf036e1-8494-4eab-b5ce-2a71352ea2a6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-13 19:42:52 +0000 UTC FinishedAt: 2026-08-13 19:44:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5mv5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["skb_segment","tun_get_user","tap_get_user","packet_snd","tpacket_snd","receive_big","receive_mergeable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"ccf036e1-8494-4eab-b5ce-2a71352ea2a6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-13 19:42:52 +0000 UTC FinishedAt: 2026-08-13 19:44:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d12c6ba8-5d6f-4bcb-bce2-910b1987021b,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-workflow5mv5p/series-workflow5mv5p-build-action-2087795575/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-workflow5mv5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["skb_segment","tun_get_user","tap_get_user","packet_snd","tpacket_snd","receive_big","receive_mergeable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"ccf036e1-8494-4eab-b5ce-2a71352ea2a6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-13 19:44:47 +0000 UTC FinishedAt: 2026-08-13 19:44:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5mv5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["skb_segment","tun_get_user","tap_get_user","packet_snd","tpacket_snd","receive_big","receive_mergeable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"ccf036e1-8494-4eab-b5ce-2a71352ea2a6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-13 19:44:47 +0000 UTC FinishedAt: 2026-08-13 19:44:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5mv5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["skb_segment","tun_get_user","tap_get_user","packet_snd","tpacket_snd","receive_big","receive_mergeable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"ccf036e1-8494-4eab-b5ce-2a71352ea2a6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-13 19:44:47 +0000 UTC FinishedAt: 2026-08-13 20:01:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5mv5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["skb_segment","tun_get_user","tap_get_user","packet_snd","tpacket_snd","receive_big","receive_mergeable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"ccf036e1-8494-4eab-b5ce-2a71352ea2a6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-13 19:44:47 +0000 UTC FinishedAt: 2026-08-13 20:01:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*7fe02d96-4ca7-472e-99d5-a55e2e74cb95,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-workflow5mv5p/series-workflow5mv5p-convert-artifact-258741164/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": "1d31314a-63f1-4da7-a1a5-52c050423453", "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-workflow5mv5p/series-workflow5mv5p-build-action-2089654856/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5mv5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["skb_segment","tun_get_user","tap_get_user","packet_snd","tpacket_snd","receive_big","receive_mergeable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"ccf036e1-8494-4eab-b5ce-2a71352ea2a6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-13 19:44:47 +0000 UTC FinishedAt: 2026-08-13 20:01:25 +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:*7fe02d96-4ca7-472e-99d5-a55e2e74cb95,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-workflow5mv5p/series-workflow5mv5p-convert-artifact-258741164/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": "1d31314a-63f1-4da7-a1a5-52c050423453", "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-workflow5mv5p/series-workflow5mv5p-build-action-2089654856/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5mv5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["skb_segment","tun_get_user","tap_get_user","packet_snd","tpacket_snd","receive_big","receive_mergeable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"ccf036e1-8494-4eab-b5ce-2a71352ea2a6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-13 20:01:35 +0000 UTC FinishedAt: 2026-08-13 20:01:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5mv5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["skb_segment","tun_get_user","tap_get_user","packet_snd","tpacket_snd","receive_big","receive_mergeable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"ccf036e1-8494-4eab-b5ce-2a71352ea2a6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-13 20:01:35 +0000 UTC FinishedAt: 2026-08-13 20:01:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5mv5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["skb_segment","tun_get_user","tap_get_user","packet_snd","tpacket_snd","receive_big","receive_mergeable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"ccf036e1-8494-4eab-b5ce-2a71352ea2a6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-13 20:01:35 +0000 UTC FinishedAt: 2026-08-13 20:03:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5mv5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["skb_segment","tun_get_user","tap_get_user","packet_snd","tpacket_snd","receive_big","receive_mergeable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"ccf036e1-8494-4eab-b5ce-2a71352ea2a6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-13 20:01:35 +0000 UTC FinishedAt: 2026-08-13 20:03:31 +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:*1d31314a-63f1-4da7-a1a5-52c050423453,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-workflow5mv5p/series-workflow5mv5p-build-action-2089654856/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-workflow5mv5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["skb_segment","tun_get_user","tap_get_user","packet_snd","tpacket_snd","receive_big","receive_mergeable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"ccf036e1-8494-4eab-b5ce-2a71352ea2a6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-13 20:03:40 +0000 UTC FinishedAt: 2026-08-13 23:07:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5mv5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["skb_segment","tun_get_user","tap_get_user","packet_snd","tpacket_snd","receive_big","receive_mergeable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"ccf036e1-8494-4eab-b5ce-2a71352ea2a6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-13 20:03:40 +0000 UTC FinishedAt: 2026-08-13 23:07:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["skb_segment","tun_get_user","tap_get_user","packet_snd","tpacket_snd","receive_big","receive_mergeable"],"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:*d12c6ba8-5d6f-4bcb-bce2-910b1987021b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1d31314a-63f1-4da7-a1a5-52c050423453,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-workflow5mv5p/series-workflow5mv5p-build-action-2087795575/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-workflow5mv5p/series-workflow5mv5p-build-action-2089654856/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow5mv5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["skb_segment","tun_get_user","tap_get_user","packet_snd","tpacket_snd","receive_big","receive_mergeable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"ccf036e1-8494-4eab-b5ce-2a71352ea2a6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-13 20:03:40 +0000 UTC FinishedAt: 2026-08-13 20:03:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5mv5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["skb_segment","tun_get_user","tap_get_user","packet_snd","tpacket_snd","receive_big","receive_mergeable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"ccf036e1-8494-4eab-b5ce-2a71352ea2a6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-13 20:03:40 +0000 UTC FinishedAt: 2026-08-13 20:03:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["skb_segment","tun_get_user","tap_get_user","packet_snd","tpacket_snd","receive_big","receive_mergeable"],"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-workflow5mv5p/series-workflow5mv5p-convert-artifact-552825749/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5mv5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["skb_segment","tun_get_user","tap_get_user","packet_snd","tpacket_snd","receive_big","receive_mergeable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"ccf036e1-8494-4eab-b5ce-2a71352ea2a6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-13 20:03:40 +0000 UTC FinishedAt: 2026-08-13 20:03:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5mv5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["skb_segment","tun_get_user","tap_get_user","packet_snd","tpacket_snd","receive_big","receive_mergeable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"ccf036e1-8494-4eab-b5ce-2a71352ea2a6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-13 20:03:40 +0000 UTC FinishedAt: 2026-08-13 20:03:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5mv5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["skb_segment","tun_get_user","tap_get_user","packet_snd","tpacket_snd","receive_big","receive_mergeable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"ccf036e1-8494-4eab-b5ce-2a71352ea2a6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-13 20:03:40 +0000 UTC FinishedAt: 2026-08-13 20:03:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5mv5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["skb_segment","tun_get_user","tap_get_user","packet_snd","tpacket_snd","receive_big","receive_mergeable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"ccf036e1-8494-4eab-b5ce-2a71352ea2a6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-13 20:03:50 +0000 UTC FinishedAt: 2026-08-13 23:07:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5mv5p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["skb_segment","tun_get_user","tap_get_user","packet_snd","tpacket_snd","receive_big","receive_mergeable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3205699d79f262412c1be7fc1c04066610d3cd52","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","TAP","MACVTAP","PACKET","VIRTIO_NET"],"series_id":"ccf036e1-8494-4eab-b5ce-2a71352ea2a6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-13 20:03:50 +0000 UTC FinishedAt: 2026-08-13 23:07:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d12c6ba8-5d6f-4bcb-bce2-910b1987021b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1d31314a-63f1-4da7-a1a5-52c050423453,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-workflow5mv5p/series-workflow5mv5p-build-action-2087795575/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-workflow5mv5p/series-workflow5mv5p-build-action-2089654856/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-workflow5mv5p/series-workflow5mv5p-convert-artifact-552825749/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,}