Name: series-workflowbr5x5 Phase: Succeeded StartedAt: 2026-09-07 05:07:38 +0000 UTC FinishedAt: 2026-09-07 07:20:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr5x5[0] Phase: Succeeded StartedAt: 2026-09-07 05:07:38 +0000 UTC FinishedAt: 2026-09-07 05:47:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr5x5[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 05:07:38 +0000 UTC FinishedAt: 2026-09-07 05:47:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "6ebcf5074cff0402730c6981d2397139fee6322d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK", "NF_CONNTRACK_H323", "NETFILTER_ADVANCED" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "6ebcf5074cff0402730c6981d2397139fee6322d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK", "NF_CONNTRACK_H323", "NETFILTER_ADVANCED" ], "series_id": "bd796d7d-816b-4bf1-a4b1-3f6e79076e14" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "decode_enum", "DecodeRasMessage", "DecodeQ931", "DecodeMultimediaSystemControlMessage", "ras_help", "q931_help", "h245_help" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA1OjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfSDMyMyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfQURWQU5DRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkZWNvZGVfZW51bSYjMzQ7LAogICAgJiMzNDtEZWNvZGVSYXNNZXNzYWdlJiMzNDssCiAgICAmIzM0O0RlY29kZVE5MzEmIzM0OywKICAgICYjMzQ7RGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlJiMzNDssCiAgICAmIzM0O3Jhc19oZWxwJiMzNDssCiAgICAmIzM0O3E5MzFfaGVscCYjMzQ7LAogICAgJiMzNDtoMjQ1X2hlbHAmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbWlzc2luZyBib3VuZGFyeSBjaGVjayBgbmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgMSlgIHRvIGBkZWNvZGVfZW51bSgpYCBiZWZvcmUgcmVhZGluZyBhIGJpdCBmcm9tIHRoZSBBU04uMSBiaXRzdHJlYW0uIFByaW9yIHRvIHRoaXMgZml4LCBpZiBgYnMtXHUwMDNlY3VyYCB3YXMgYXQgYGJzLVx1MDAzZWVuZGAsIGBnZXRfYml0KGJzKWAgd291bGQgcGVyZm9ybSBhbiBvdXQtb2YtYm91bmRzIHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBwYWNrZXQgZGF0YSBidWZmZXIuIFxuXG5PdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyBhcmUgbWVtb3J5IHNhZmV0eSB2aW9sYXRpb25zIGRpcmVjdGx5IGNhdWdodCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgcGFkZGluZyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbWlzc2luZyBib3VuZGFyeSBjaGVjayBpbiBkZWNvZGVfZW51bSgpIGluIHRoZSBOZXRmaWx0ZXIgSC4zMjMgY29ubmVjdGlvbiB0cmFja2luZyBBU04uMSBkZWNvZGVyIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgd2hlbiByZWFkaW5nIGJpdHMgZnJvbSBtYWxmb3JtZWQgcGFja2V0cy4gVGhpcyBpcyByZWFjaGFibGUgdmlhIG5ldHdvcmsgcGFja2V0IHByb2Nlc3NpbmcgaGFuZGxlZCBieSB0aGUgSC4zMjMgY29ubnRyYWNrIGhlbHBlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNTo0NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDk4MTk4ZDY4M2VmNGM4MjY0NzM0MGUwNGE4NGFlNjQ4ZWNjYTE3ODBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDA1OjQ1OjE5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNcbmluZGV4IDY4MzBjOWRhMzUwN2MuLmJhNmNlMWYwNGUxZWQgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNcbkBAIC0zNjMsNiAmIzQzOzM2Myw4IEBAIHN0YXRpYyBpbnQgZGVjb2RlX2VudW0oc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuIHtcbiBcdFBSSU5UKFwmIzM0OyUqcyVzXFxuXCYjMzQ7LCBsZXZlbCAqIFRBQl9TSVpFLCBcJiMzNDsgXCYjMzQ7LCBmLVx1MDAzZW5hbWUpO1xuIFxuJiM0MztcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAxKSlcbiYjNDM7XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuIFx0aWYgKChmLVx1MDAzZWF0dHIgXHUwMDI2IEVYVCkgXHUwMDI2XHUwMDI2IGdldF9iaXQoYnMpKSB7XG4gXHRcdElOQ19CSVRTKGJzLCA3KTtcbiBcdH0gZWxzZSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDU6NDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19IMzIzJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9BRFZBTkNFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RlY29kZV9lbnVtJiMzNDssCiAgICAmIzM0O0RlY29kZVJhc01lc3NhZ2UmIzM0OywKICAgICYjMzQ7RGVjb2RlUTkzMSYjMzQ7LAogICAgJiMzNDtEZWNvZGVNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2UmIzM0OywKICAgICYjMzQ7cmFzX2hlbHAmIzM0OywKICAgICYjMzQ7cTkzMV9oZWxwJiMzNDssCiAgICAmIzM0O2gyNDVfaGVscCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbWlzc2luZyBib3VuZGFyeSBjaGVjayBpbiBkZWNvZGVfZW51bSgpIGluIHRoZSBOZXRmaWx0ZXIgSC4zMjMgY29ubmVjdGlvbiB0cmFja2luZyBBU04uMSBkZWNvZGVyIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgd2hlbiByZWFkaW5nIGJpdHMgZnJvbSBtYWxmb3JtZWQgcGFja2V0cy4gVGhpcyBpcyByZWFjaGFibGUgdmlhIG5ldHdvcmsgcGFja2V0IHByb2Nlc3NpbmcgaGFuZGxlZCBieSB0aGUgSC4zMjMgY29ubnRyYWNrIGhlbHBlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDk4MTk4ZDY4M2VmNGM4MjY0NzM0MGUwNGE4NGFlNjQ4ZWNjYTE3ODAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDA1OjQ1OjE5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYwppbmRleCA2ODMwYzlkYTM1MDdjLi5iYTZjZTFmMDRlMWVkIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYwpAQCAtMzYzLDYgJiM0MzszNjMsOCBAQCBzdGF0aWMgaW50IGRlY29kZV9lbnVtKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwKIHsKIAlQUklOVCgmIzM0OyUqcyVzXG4mIzM0OywgbGV2ZWwgKiBUQUJfU0laRSwgJiMzNDsgJiMzNDssIGYtJmd0O25hbWUpOwogCiYjNDM7CWlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAxKSkKJiM0MzsJCXJldHVybiBIMzIzX0VSUk9SX0JPVU5EOwogCWlmICgoZi0mZ3Q7YXR0ciAmYW1wOyBFWFQpICZhbXA7JmFtcDsgZ2V0X2JpdChicykpIHsKIAkJSU5DX0JJVFMoYnMsIDcpOwogCX0gZWxzZSB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA1OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MjcKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAzNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgSC4zMjMgQ29ubmVjdGlvbiBUcmFja2luZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0JiMzOTtzIHRvdWNoaW5nIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBjaGFuZ2VzIHRvIHNlZSB3aGF0JiMzOTtzIGJlaW5nIHR3ZWFrZWQgaW4gdGhlIEguMzIzIEFTTi4xIGRlY29kZXIuIEkgc2VlIHRoZSBkaWZmIGludHJvZHVjZXMgYSBuZXcgY2hlY2sgd2l0aGluIHRoZSBgZGVjb2RlX2VudW1gIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGEgY2FsbCB0byBgbmZfaDMyM19lcnJvcl9ib3VuZGFyeWAgaXMgYWRkZWQgYmVmb3JlIHRoZSBoYW5kbGluZyBvZiB0aGUgYEVYVGAgYXR0cmlidXRlLiBJbnRyaWd1aW5nLi4uIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGhlcmUuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZ2V0IHRoZSBiaWdnZXIgcGljdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2UuIEkmIzM5O2xsIHJlYWQgdGhlIGNvZGUgYXJvdW5kIGxpbmUgMzYzIHRvIGdldCB0aGUgZnVuY3Rpb24mIzM5O3Mgc3Vycm91bmRpbmdzIGFuZCBpdHMgb3ZlcmFsbCBwdXJwb3NlLiBUaGVuLCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGNhbGxlciBmdW5jdGlvbnMgdG8gc2VlIHdoZXJlIGBkZWNvZGVfZW51bWAgaXMgdXNlZCBhbmQgaG93IHRoaXMgbmV3IGNoZWNrIHdpbGwgaW1wYWN0IHRob3NlIGZsb3dzLiBGaW5hbGx5LCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY29kZSBpcyBldmVuIGVuYWJsZWQgaW4gdGhlIHN5c3RlbSBJJiMzOTttIGludGVyZXN0ZWQgaW4uIFRoaXMgd2lsbCBnaXZlIG1lIGEgcHJvcGVyIGNvbnRleHQgYXJvdW5kIHRoZSBmdW5jdGlvbiBpbiBnZW5lcmFsIGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNTA6XHRcdFx0SU5DX0JJVFMoYnMsIGYtXHUwMDNlc3opO1xuIDM1MTpcdFx0XHRicmVhaztcbiAzNTI6XHRcdH1cbiAzNTM6XHRcbiAzNTQ6XHRcdFBSSU5UKFwmIzM0O1xcblwmIzM0Oyk7XG4gMzU1Olx0XG4gMzU2Olx0XHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgMCkpXG4gMzU3Olx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuIDM1ODpcdFx0cmV0dXJuIEgzMjNfRVJST1JfTk9ORTtcbiAzNTk6XHR9XG4gMzYwOlx0XG4gMzYxOlx0c3RhdGljIGludCBkZWNvZGVfZW51bShzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXG4gMzYyOlx0ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXG4gMzYzOlx0e1xuIDM2NDpcdFx0UFJJTlQoXCYjMzQ7JSpzJXNcXG5cJiMzNDssIGxldmVsICogVEFCX1NJWkUsIFwmIzM0OyBcJiMzNDssIGYtXHUwMDNlbmFtZSk7XG4gMzY1Olx0XG4gMzY2Olx0XHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgMSkpXG4gMzY3Olx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuIDM2ODpcdFx0aWYgKChmLVx1MDAzZWF0dHIgXHUwMDI2IEVYVCkgXHUwMDI2XHUwMDI2IGdldF9iaXQoYnMpKSB7XG4gMzY5Olx0XHRcdElOQ19CSVRTKGJzLCA3KTtcbiAzNzA6XHRcdH0gZWxzZSB7XG4gMzcxOlx0XHRcdElOQ19CSVRTKGJzLCBmLVx1MDAzZXN6KTtcbiAzNzI6XHRcdH1cbiAzNzM6XHRcbiAzNzQ6XHRcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAwKSlcbiAzNzU6XHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4gMzc2Olx0XHRyZXR1cm4gSDMyM19FUlJPUl9OT05FO1xuIDM3NzpcdH1cbiAzNzg6XHRcbiAzNzk6XHRzdGF0aWMgaW50IGRlY29kZV9iaXRzdHIoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuIDM4MDpcdCAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXG4gMzgxOlx0e1xuIDM4MjpcdFx0dW5zaWduZWQgaW50IGxlbjtcbiAzODM6XHRcbiAzODQ6XHRcdFBSSU5UKFwmIzM0OyUqcyVzXFxuXCYjMzQ7LCBsZXZlbCAqIFRBQl9TSVpFLCBcJiMzNDsgXCYjMzQ7LCBmLVx1MDAzZW5hbWUpO1xuIDM4NTpcdFxuIDM4NjpcdFx0QllURV9BTElHTihicyk7XG4gMzg3Olx0XHRzd2l0Y2ggKGYtXHUwMDNlc3opIHtcbiAzODg6XHRcdGNhc2UgRklYRDpcdFx0LyogZml4ZWQgbGVuZ3RoIFx1MDAzZSAxNiAqL1xuIDM4OTpcdFx0XHRsZW4gPSBmLVx1MDAzZWxiO1xuIDM5MDpcdFx0XHRicmVhaztcbiAzOTE6XHRcdGNhc2UgV09SRDpcdFx0LyogMi1ieXRlIGxlbmd0aCAqL1xuIDM5MjpcdFx0XHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMiwgMCkpXG4gMzkzOlx0XHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4gMzk0Olx0XHRcdGxlbiA9ICgqYnMtXHUwMDNlY3VyJiM0MzsmIzQzOykgXHUwMDNjXHUwMDNjIDg7XG4gMzk1Olx0XHRcdGxlbiAmIzQzOz0gKCpicy1cdTAwM2VjdXImIzQzOyYjNDM7KSAmIzQzOyBmLVx1MDAzZWxiO1xuIDM5NjpcdFx0XHRicmVhaztcbiAzOTc6XHRcdGNhc2UgU0VNSTpcbiAzOTg6XHRcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDIsIDApKVxuIDM5OTpcdFx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA1OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNjAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gZXhhbWluaW5nIHRoZSBgbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYCBjb2RlLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIE1ha2VmaWxlIGFuZCBLY29uZmlnOgoKKipEZWVwIERpdmU6IGBuZl9jb25udHJhY2tfaDMyM19hc24xLmNgIGFuZCBpdHMgQnVpbGQgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgSC4zMjMgQVNOLjEgbW9kdWxlIGZpdHMgaW50byB0aGUgYnJvYWRlciBuZXRmaWx0ZXIgZnJhbWV3b3JrLiBGaXJzdCwgdGhlIE1ha2VmaWxlLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBidWlsZCBydWxlcywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHNwZWNpYWwgZmxhZ3Mgb3IgaW5jbHVkZXMgcmVsZXZhbnQgdG8gdGhpcyBzcGVjaWZpYyBmaWxlLiBJJiMzOTtsbCBiZSBjaGVja2luZyB0byBzZWUgd2hhdCBvdGhlciBtb2R1bGVzIG9yIGxpYnJhcmllcyBpdCBsaW5rcyBhZ2FpbnN0LCBhbmQgaG93IHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtIGRldGVybWluZXMgd2hlbiBhbmQgaG93IHRvIGNvbXBpbGUgaXQuIEFyZSB0aGVyZSBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyB0aGF0IG1pZ2h0IGNvbnRyb2wgaXRzIGluY2x1c2lvbiBiYXNlZCBvbiBrZXJuZWwgY29uZmlndXJhdGlvbj8gQXJlIHRoZXJlIGFueSBtb2R1bGUtc3BlY2lmaWMgb3B0aW9ucz8KCk5vdywgdGhlIEtjb25maWcgZmlsZS4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBpbnRlcmVzdGluZyBzdHVmZiBpcy4gSSB3YW50IHRvIHNlZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgY29udHJvbCB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgbW9kdWxlIGluIHRoZSBrZXJuZWwuIFdoYXQgZGVwZW5kZW5jaWVzIGFyZSBzcGVjaWZpZWQ/IERvZXMgaXQgZGVwZW5kIG9uIG90aGVyIG5ldGZpbHRlciBjb21wb25lbnRzIGJlaW5nIGVuYWJsZWQ/IFdoYXQmIzM5O3MgdGhlIGRlZmF1bHQgc3RhdGUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIChidWlsdC1pbiwgbW9kdWxhciwgb3IgZGlzYWJsZWQpPyBBcmUgdGhlcmUgYW55IGhlbHAgdGV4dHMgb3IgZGVzY3JpcHRpb25zIHRoYXQgZ2l2ZSBjbHVlcyBhYm91dCB0aGUgcHVycG9zZSBvZiB0aGlzIG1vZHVsZSBhbmQgdGhlIHNjZW5hcmlvcyB3aGVyZSBpdCBzaG91bGQgYmUgZW5hYmxlZD8gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGNoZWNraW5nIGZvciBkZXBlbmRlbmNpZXMgb24gQVNOLjEgcGFyc2luZyBsaWJyYXJpZXMsIG90aGVyIEguMzIzLXJlbGF0ZWQgbW9kdWxlcywgb3IgYW55dGhpbmcgdGhhdCB3b3VsZCBpbmRpY2F0ZSBob3cgZGVlcGx5IGludGVncmF0ZWQgaXQgaXMgd2l0aGluIHRoZSBvdmVyYWxsIGNvbm50cmFjayBpbXBsZW1lbnRhdGlvbiBmb3IgSC4zMjMuIEkmIzM5O20gYWxzbyBnb2luZyB0byBjaGVjayBmb3IgYW55IHBvdGVudGlhbCBjb25mbGljdHMgd2l0aCBvdGhlciBtb2R1bGVzLCBhcyB3ZWxsIGFzIGFueSBkZXBlbmRlbmNpZXMgb24gdXNlci1zcGFjZSBhcHBsaWNhdGlvbnMgb3IgbGlicmFyaWVzIHRoYXQgbWlnaHQgYmUgcmVxdWlyZWQuIEkmIzM5O20gYWxzbyBsb29raW5nIGZvciBhbnkgc3BlY2lmaWMgaGFyZHdhcmUgcmVxdWlyZW1lbnRzIG9yIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zIHRoYXQgbWlnaHQgaW5mbHVlbmNlIGl0cyBjb25maWd1cmF0aW9uLiBCeSB1bmRlcnN0YW5kaW5nIHRoZSBLY29uZmlnIG9wdGlvbnMsIEkgY2FuIGZpZ3VyZSBvdXQgdGhlIGludGVuZGVkIHVzZSBjYXNlcyBmb3IgdGhpcyBtb2R1bGUgYW5kIGhvdyB0byBwcm9wZXJseSBlbmFibGUgb3IgZGlzYWJsZSBpdCBmb3IgZGlmZmVyZW50IGtlcm5lbCBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9jb25udHJhY2tfaDMyMyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT0zOT1vYmotJChDT05GSUdfTkZfQ1RfTkVUTElOS19IRUxQRVIpICYjNDM7PSBuZm5ldGxpbmtfY3RoZWxwZXIub1xuLS1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNDEtIyBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnNcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NDI6bmZfY29ubnRyYWNrX2gzMjMtb2JqcyA6PSBuZl9jb25udHJhY2tfaDMyM19tYWluLm8gbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTQzLVxuLS1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9NDU9b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19GVFApICYjNDM7PSBuZl9jb25udHJhY2tfZnRwLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NDY6b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19IMzIzKSAmIzQzOz0gbmZfY29ubnRyYWNrX2gzMjMub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS00Ny1vYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX0lSQykgJiM0Mzs9IG5mX2Nvbm50cmFja19pcmMub1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTE0LSNlbmRpZlxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTU6I2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuaFx1MDAzZVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTYtXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9MTIzPXN0YXRpYyBjb25zdCBkZWNvZGVyX3QgRGVjb2RlcnNbXSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0xNDAtICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxNDE6I2luY2x1ZGUgXCYjMzQ7bmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuY1wmIzM0O1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTQyLVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTM1LSNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3pvbmVzLmhcdTAwM2Vcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjM2OiNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyMy5oXHUwMDNlXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0zNy1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYz0xNzU1PXN0YXRpYyB2b2lkIF9fZXhpdCBoMzIzX2hlbHBlcl9leGl0KHZvaWQpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTc2My1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjE3NjQ6c3RhdGljIHZvaWQgX19leGl0IG5mX2Nvbm50cmFja19oMzIzX2Zpbmkodm9pZClcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3NjUte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3NzAtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxNzcxOnN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19oMzIzX2luaXQodm9pZClcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3NzIte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3ODktXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxNzkwOm1vZHVsZV9pbml0KG5mX2Nvbm50cmFja19oMzIzX2luaXQpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MTc5MTptb2R1bGVfZXhpdChuZl9jb25udHJhY2tfaDMyM19maW5pKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3OTItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDU6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc5MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIHlvdXIgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gS2NvbmZpZyBmb3IgSC4zMjMgQ29ubmVjdGlvbiBUcmFja2luZyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgS2NvbmZpZyBlbnRyaWVzIHJlbGF0ZWQgdG8gYE5GX0NPTk5UUkFDS19IMzIzYC4gVGhpcyBpc24mIzM5O3QganVzdCBhIHNpbXBsZSBrZXl3b3JkIHNlYXJjaCwgdGhvdWdoLiBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBzdHJ1Y3R1cmVkIHdpdGhpbiB0aGUgb3ZlcmFsbCBOZXRmaWx0ZXIgZnJhbWV3b3JrLiBXaGVyZSB3b3VsZCBJICpleHBlY3QqIHRvIGZpbmQgaXQ/IExpa2VseSB1bmRlciBjb25uZWN0aW9uIHRyYWNraW5nLCBuYXR1cmFsbHkuIEJ1dCBpcyBpdCBhIHRvcC1sZXZlbCBvcHRpb24sIG9yIGlzIGl0IG5lc3RlZCB3aXRoaW4gYSBtb3JlIGdlbmVyYWwgSC4zMjMgc3VwcG9ydCBtb2R1bGU/IEFyZSB0aGVyZSBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGNvbnNpZGVyPyBGb3IgZXhhbXBsZSwgaXMgdGhlcmUgYSBnZW5lcmFsIHNldHRpbmcgZm9yIGVuYWJsaW5nIE5ldGZpbHRlciYjMzk7cyBjb25uZWN0aW9uIHRyYWNraW5nIHRoYXQgbmVlZHMgdG8gYmUgZW5hYmxlZCBiZWZvcmUgSSBjYW4gc2VlIHRoaXMgSC4zMjMgc3BlY2lmaWMgb3B0aW9uPyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgZ3JlcCBhY3Jvc3MgdGhlIEtjb25maWcgZmlsZXMsIGJ1dCBJJiMzOTtsbCBuZWVkIHRvIGJlIG1pbmRmdWwgb2YgcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gY2hlY2sgZm9yIGFueSBoaWRkZW4gZGVwZW5kZW5jaWVzIHdpdGhpbiB0aGUgY29tbWVudHMgdG9vLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA1OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05GX0NPTk5UUkFDS19IMzIzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz0yMjc9Y29uZmlnIE5GX0NPTk5UUkFDS19GVFBcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjM4LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjIzOTpjb25maWcgTkZfQ09OTlRSQUNLX0gzMjNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNDAtXHR0cmlzdGF0ZSBcJiMzNDtILjMyMyBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDU6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjE1OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBORl9DT05OVFJBQ0tfSDMyMyBLY29uZmlnKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIEtjb25maWcgZm9yIGBORl9DT05OVFJBQ0tfSDMyM2AuIE15IGluaXRpYWwgZm9jdXMsIGFzIGFsd2F5cywgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzLiBXaGF0IG90aGVyIG1vZHVsZXMgb3IgZmVhdHVyZXMgaXMgdGhpcyBjb25uZWN0ZWQgdG8/IEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGBkZXBlbmRzIG9uYCwgYHNlbGVjdGAsIGFuZCBwb3RlbnRpYWxseSBgaW1wbHlgIHN0YXRlbWVudHMuIEkgd2FudCB0byBidWlsZCBhIHF1aWNrIG1lbnRhbCBtYXAgb2YgaXRzIHBsYWNlIGluIHRoZSBvdmVyYWxsIG5ldGZpbHRlciBhbmQgY29ubmVjdGlvbiB0cmFja2luZyBhcmNoaXRlY3R1cmUuCgpUaGVuLCBJJiMzOTttIGNoZWNraW5nIHRoZSBoZWxwIHRleHQuIERvZXMgaXQgY2xlYXJseSBleHBsYWluIHRoZSByb2xlIG9mIHRoaXMgbW9kdWxlPyBJcyBpdCBzcGVjaWZpYyBhYm91dCB0aGUgSC4zMjMgcHJvdG9jb2wgYXNwZWN0cyBpdCBjb3ZlcnM/IEEgY29uY2lzZSBkZXNjcmlwdGlvbiBpcyBrZXkuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBzdXBwb3J0ZWQgSC4zMjMgc2lnbmFsaW5nIHByb3RvY29scywgbGlrZSBILjIyNSwgSC4yNDUsIG9yIHBlcmhhcHMgZXZlbiBuZXdlciBhZGRpdGlvbnMgaWYgdGhpcyBjb25maWcgaXMgcmVjZW50LiBBbnkgbWVudGlvbiBvZiBOQVQgdHJhdmVyc2FsIG9yIFNJUC9ILjMyMyBpbnRlcndvcmtpbmcgaXMgYWx3YXlzIG9mIHBhcnRpY3VsYXIgaW50ZXJlc3QuCgpOZXh0LCBJJiMzOTtsbCBzY2FuIGZvciBhbnkgZGVmYXVsdCBzZXR0aW5ncy4gSXMgaXQgZW5hYmxlZCBieSBkZWZhdWx0LCBvciBpcyBpdCBhIG1vZHVsYXIgZmVhdHVyZT8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgZGVmYXVsdD8gRG9lcyBpdCBwcm92aWRlIGFueSBoaW50cyBhYm91dCB0aGUgdXNlIGNhc2VzIHRoZSBrZXJuZWwgZGV2ZWxvcGVycyBoYWQgaW4gbWluZD8gQW55IHJlbGV2YW50IHRyaXN0YXRlIHZhbHVlcyBvciBjb25maWcgb3B0aW9ucyB3aWxsIGJlIGNhcmVmdWxseSBjb25zaWRlcmVkLgoKRmluYWxseSwgSSYjMzk7bGwgbWVudGFsbHkgY29tcGFyZSB0aGlzIHdpdGggbXkgZXhpc3Rpbmcga25vd2xlZGdlIG9mIG90aGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgbW9kdWxlcy4gRG9lcyB0aGlzIEtjb25maWcgc2VlbSBjb21wbGV0ZSBpbiBzY29wZSwgb3IgYXJlIHRoZXJlIGFzcGVjdHMgSSYjMzk7ZCBleHBlY3QgdG8gc2VlLCBidXQgYXJlIG1pc3Npbmc/IERvZXMgdGhpcyBjb25maWd1cmF0aW9uIHJlZmxlY3QgdGhlIGN1cnJlbnQgc3RhdGUgb2YgSC4zMjMgc3VwcG9ydCBpbiB0aGUga2VybmVsLCBvciBpcyBpdCBwb3RlbnRpYWxseSBhbiBhcmVhIGZvciBmdXR1cmUgd29yaz8gQW55IGluY29uc2lzdGVuY2llcyB3b3VsZCBwcm9tcHQgZnVydGhlciBpbnZlc3RpZ2F0aW9uIGludG8gdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDU6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIzNTpcdFx0ICBUaGlzIGlzIEZUUCBzdXBwb3J0IG9uIExheWVyIDMgaW5kZXBlbmRlbnQgY29ubmVjdGlvbiB0cmFja2luZy5cbiAyMzY6XHRcbiAyMzc6XHRcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXG4gMjM4Olx0XG4gMjM5Olx0Y29uZmlnIE5GX0NPTk5UUkFDS19IMzIzXG4gMjQwOlx0XHR0cmlzdGF0ZSBcJiMzNDtILjMyMyBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4gMjQxOlx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxuIDI0MjpcdFx0aGVscFxuIDI0MzpcdFx0ICBILjMyMyBpcyBhIFZvSVAgc2lnbmFsbGluZyBwcm90b2NvbCBmcm9tIElUVS1ULiBBcyBvbmUgb2YgdGhlIG1vc3RcbiAyNDQ6XHRcdCAgaW1wb3J0YW50IFZvSVAgcHJvdG9jb2xzLCBpdCBpcyB3aWRlbHkgdXNlZCBieSB2b2ljZSBoYXJkd2FyZSBhbmRcbiAyNDU6XHRcdCAgc29mdHdhcmUgaW5jbHVkaW5nIHZvaWNlIGdhdGV3YXlzLCBJUCBwaG9uZXMsIE5ldG1lZXRpbmcsIE9wZW5QaG9uZSxcbiAyNDY6XHRcdCAgR25vbWVtZWV0aW5nLCBldGMuXG4gMjQ3Olx0XG4gMjQ4Olx0XHQgIFdpdGggdGhpcyBtb2R1bGUgeW91IGNhbiBzdXBwb3J0IEguMzIzIG9uIGEgY29ubmVjdGlvbiB0cmFja2luZy9OQVRcbiAyNDk6XHRcdCAgZmlyZXdhbGwuXG4gMjUwOlx0XG4gMjUxOlx0XHQgIFRoaXMgbW9kdWxlIHN1cHBvcnRzIFJBUywgRmFzdCBTdGFydCwgSC4yNDUgVHVubmVsbGluZywgQ2FsbFxuIDI1MjpcdFx0ICBGb3J3YXJkaW5nLCBSVFAvUlRDUCBhbmQgVC4xMjAgYmFzZWQgYXVkaW8sIHZpZGVvLCBmYXgsIGNoYXQsXG4gMjUzOlx0XHQgIHdoaXRlYm9hcmQsIGZpbGUgdHJhbnNmZXIsIGV0Yy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZVxuIDI1NDpcdFx0ICB2aXNpdCBodHRwOi8vbmF0aDMyMy5zb3VyY2Vmb3JnZS5uZXQvLlxuIDI1NTpcdFxuIDI1NjpcdFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi5cbiAyNTc6XHRcbiAyNTg6XHRjb25maWcgTkZfQ09OTlRSQUNLX0lSQ1xuIDI1OTpcdFx0dHJpc3RhdGUgXCYjMzQ7SVJDIERDQyBwcm90b2NvbCBzdXBwb3J0IChvYnNvbGV0ZSlcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDU6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzAyMQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHdoYXQgSSYjMzk7bSBsb29raW5nIGF0LCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZToKCioqSW52ZXN0aWdhdGluZyBORl9DT05OVFJBQ0sgRGVwZW5kZW5jaWVzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gTXkgZmlyc3QgbW92ZSBpcyB0byBpZGVudGlmeSB0aGUgZGVwZW5kZW5jaWVzIG9mIGBORl9DT05OVFJBQ0tgIHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMuIEkmIzM5O20gZ29pbmcgc3RyYWlnaHQgdG8gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgYW5kIGBuZXQvS2NvbmZpZ2AgdG8gdHJhY2UgaXRzIGRlcGVuZGVuY2llcy4gVGhlc2UgS2NvbmZpZyBmaWxlcyBhcmUgdGhlIGhlYXJ0IG9mIHRoZSBrZXJuZWwmIzM5O3MgYnVpbGQgc3lzdGVtLCBhbmQgdGhleSBjb250YWluIHRoZSBsb2dpY2FsIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB2YXJpb3VzIGZlYXR1cmVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIGtlcm5lbCBjb21wb25lbnRzIGFyZSByZXF1aXJlZCBmb3IgY29ubmVjdGlvbiB0cmFja2luZyB0byBmdW5jdGlvbi4gVGhpcyBpcyBjcml0aWNhbCBmb3IgZGVidWdnaW5nLCBvcHRpbWl6YXRpb24sIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgZnVuY3Rpb25hbGl0eS4gS25vd2luZyB0aGUgZGVwZW5kZW5jaWVzIHdpbGwgaGVscCBtZSBmaWd1cmUgb3V0IHdoYXQgZWxzZSBJIG5lZWQgdG8gZW5hYmxlIG9yIGRpc2FibGUgaWYgSSYjMzk7bSBmaWRkbGluZyB3aXRoIGNvbm5lY3Rpb24gdHJhY2tpbmcsIGFuZCBhdm9pZCBhbnkgbmFzdHkgc3VycHJpc2VzLiBJdCBhbHNvIGFsbG93cyBtZSB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGNvZGUgaXMgaW50ZWdyYXRlZCBpbnRvIHRoZSByZXN0IG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbnVjb25maWcgTkZfQ09OTlRSQUNLJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA1OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyODYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgTmV0ZmlsdGVyIENvbm5lY3Rpb24gVHJhY2tpbmcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgTmV0ZmlsdGVyJiMzOTtzIGNvbm5lY3Rpb24gdHJhY2tpbmcgbW9kdWxlLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUga2VybmVsJiMzOTtzIEtjb25maWcgZmlsZXMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBmaW5kIHdoYXQgSSBuZWVkIHdpdGhpbiB0aGUgYG5ldC9uZXRmaWx0ZXJgIGRpcmVjdG9yeS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBzZWFyY2ggZm9yIGBjb25maWcgTkZfQ09OTlRSQUNLYCB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gc3ltYm9scyBhbmQgZGVzY3JpcHRpb25zIGZvciB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBmdW5jdGlvbmFsaXR5IHNob3VsZCBiZSBkZWZpbmVkLiBIb3BlZnVsbHksIHRoYXQgd2lsbCBnaXZlIG1lIGEgcm9hZG1hcCBvZiBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgdG8gdW5kZXJzdGFuZCBob3cgY29ubmVjdGlvbiB0cmFja2luZyBpcyBoYW5kbGVkIGFuZCBwb3RlbnRpYWxseSBtb2RpZnkgdGhlIGtlcm5lbCYjMzk7cyBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDU6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0NPTk5UUkFDS1xcYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTc0PWNvbmZpZyBORVRGSUxURVJfTkVUTElOS19PU0Zcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODEtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6ODI6Y29uZmlnIE5GX0NPTk5UUkFDS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTgzLVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTg0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIE5ldGZpbHRlciBDb25uZWN0aW9uIFRyYWNraW5nIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBzdXJyb3VuZGluZyBgY29uZmlnIE5GX0NPTk5UUkFDS2AuIEkmIzM5O20gaW1tZWRpYXRlbHkgbG9va2luZyBmb3IgaXRzIGRlcGVuZGVuY2llcywgd2hhdCBvdGhlciBmZWF0dXJlcyBpdCBlbmFibGVzIG9yIGRpc2FibGVzLCBhbmQgYW55IGhlbHAgdGV4dCBhc3NvY2lhdGVkIHdpdGggaXQuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgdGhlIHN1cnJvdW5kaW5nIGBpZmAgc3RhdGVtZW50cywgb3IgYW55IGRlcGVuZGVuY2llcyBsaWtlIGBORVRGSUxURVJgIG9yIHNwZWNpZmljIHByb3RvY29scy4gS25vd2luZyB0aGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBncmFzcCBvZiB3aGVyZSB0aGlzIHBhcnRpY3VsYXIgb3B0aW9uIGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgdGhlIE5ldGZpbHRlciBmcmFtZXdvcmssIGFuZCBob3cgaXQmIzM5O3MgZGVzaWduZWQuIEkmIzM5O20gYWxzbyBpbnRlcmVzdGVkIGluIGl0cyBkZWZhdWx0IHN0YXRlIOKAkyBpcyBpdCBidWlsdC1pbiwgYSBtb2R1bGUsIG9yIGRpc2FibGVkIGJ5IGRlZmF1bHQ/IFRoYXQmIzM5O2xsIGdpdmUgbWUgY2x1ZXMgYWJvdXQgaXRzIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBhbmQgdGhlIGxpa2VsaWhvb2Qgb2YgaXQgYmVpbmcgZW5hYmxlZCBpbiB2YXJpb3VzIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSYjMzk7bGwgcGF5IGF0dGVudGlvbiB0byBhbnkgd2FybmluZ3Mgb3IgY29tbWVudHMgYWJvdXQgZW5hYmxpbmcgdGhpcyBmZWF0dXJlLCBlc3BlY2lhbGx5IGluIHNjZW5hcmlvcyB3aXRoIGhpZ2ggY29ubmVjdGlvbiByYXRlcywgb3Igd2l0aCBzcGVjaWZpYyB0eXBlcyBvZiB0cmFmZmljIHRoYXQgbWlnaHQgbm90IHBsYXkgd2VsbCB3aXRoIHN0YXRlZnVsIGluc3BlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA1OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA3NTpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIE9TRiBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcJiMzNDtcbiAgNzY6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG4gIDc3Olx0XHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcbiAgNzg6XHRcdGhlbHBcbiAgNzk6XHRcdCAgSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgdGhlIGtlcm5lbCB3aWxsIGluY2x1ZGUgc3VwcG9ydFxuICA4MDpcdFx0ICBmb3IgcGFzc2l2ZSBPUyBmaW5nZXJwcmludCB2aWEgTkZORVRMSU5LLlxuICA4MTpcdFxuICA4MjpcdGNvbmZpZyBORl9DT05OVFJBQ0tcbiAgODM6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIHN1cHBvcnRcJiMzNDtcbiAgODQ6XHRcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxuICA4NTpcdFx0c2VsZWN0IE5GX0RFRlJBR19JUFY0XG4gIDg2Olx0XHRzZWxlY3QgTkZfREVGUkFHX0lQVjYgaWYgSVBWNiAhPSBuXG4gIDg3Olx0XHRoZWxwXG4gIDg4Olx0XHQgIENvbm5lY3Rpb24gdHJhY2tpbmcga2VlcHMgYSByZWNvcmQgb2Ygd2hhdCBwYWNrZXRzIGhhdmUgcGFzc2VkXG4gIDg5Olx0XHQgIHRocm91Z2ggeW91ciBtYWNoaW5lLCBpbiBvcmRlciB0byBmaWd1cmUgb3V0IGhvdyB0aGV5IGFyZSByZWxhdGVkXG4gIDkwOlx0XHQgIGludG8gY29ubmVjdGlvbnMuXG4gIDkxOlx0XG4gIDkyOlx0XHQgIFRoaXMgaXMgcmVxdWlyZWQgdG8gZG8gTWFzcXVlcmFkaW5nIG9yIG90aGVyIGtpbmRzIG9mIE5ldHdvcmtcbiAgOTM6XHRcdCAgQWRkcmVzcyBUcmFuc2xhdGlvbi4gIEl0IGNhbiBhbHNvIGJlIHVzZWQgdG8gZW5oYW5jZSBwYWNrZXRcbiAgOTQ6XHRcdCAgZmlsdGVyaW5nIChzZWUgYENvbm5lY3Rpb24gc3RhdGUgbWF0Y2ggc3VwcG9ydCYjMzk7IGJlbG93KS5cbiAgOTU6XHRcbiAgOTY6XHRcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXG4gIDk3Olx0XG4gIDk4Olx0Y29uZmlnIE5GX0xPR19TWVNMT0dcbiAgOTk6XHRcdHRyaXN0YXRlIFwmIzM0O1N5c2xvZyBwYWNrZXQgbG9nZ2luZ1wmIzM0O1xuIDEwMDpcdFx0ZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uXG4gMTAxOlx0XHRoZWxwXG4gMTAyOlx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZSBzdXBwb3J0IGZvciBwYWNrZXQgbG9nZ2luZyB2aWEgc3lzbG9nLlxuIDEwMzpcdFx0ICBJdCBzdXBwb3J0cyBJUHY0LCBJUFY2LCBBUlAgYW5kIGNvbW1vbiB0cmFuc3BvcnQgcHJvdG9jb2xzIHN1Y2hcbiAxMDQ6XHRcdCAgYXMgVENQIGFuZCBVRFAuXG4gMTA1Olx0XHQgIFRoaXMgaXMgYSBzaW1wbGVyIGJ1dCBsZXNzIGZsZXhpYmxlIGxvZ2dpbmcgbWV0aG9kIGNvbXBhcmVkIHRvXG4gMTA2Olx0XHQgIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0cuXG4gMTA3Olx0XHQgIElmIGJvdGggYXJlIGVuYWJsZWQgdGhlIGJhY2tlbmQgdG8gdXNlIGNhbiBiZSBjb25maWd1cmVkIGF0IHJ1bi10aW1lXG4gMTA4Olx0XHQgIGJ5IG1lYW5zIG9mIHBlci1hZGRyZXNzLWZhbWlseSBzeXNjdGwgdHVuYWJsZXMuXG4gMTA5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA1OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0MDgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byB0aGUgTmV0ZmlsdGVyIEtjb25maWcqKgoKT2theSwgdGltZSB0byBnZXQgc3RhcnRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIGZvciBuZXRmaWx0ZXIuIFRoZSBiZXN0IHBsYWNlIHRvIGJlZ2luIGlzIGFsbW9zdCBhbHdheXMgdGhlIGBLY29uZmlnYCBmaWxlIGluIHRoZSByZWxldmFudCBkaXJlY3RvcnkuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgbmF2aWdhdGUgb3ZlciB0byBgbmV0L25ldGZpbHRlci9LY29uZmlnYCB0byBnZXQgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBtZW51IHN0cnVjdHVyZSBhbmQgdGhlIGRlcGVuZGVuY2llcy4gVGhpcyBzaG91bGQgaW1tZWRpYXRlbHkgZ2l2ZSBtZSBhIHNlbnNlIG9mIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byBlYWNoIG90aGVyIHdpdGhpbiB0aGUgbmV0ZmlsdGVyIGZyYW1ld29yay4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZm91bmRhdGlvbiBJIG5lZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA1OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0bWVudSBcJiMzNDtDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uXCYjMzQ7XG4gICAzOlx0XHRkZXBlbmRzIG9uIElORVQgXHUwMDI2XHUwMDI2IE5FVEZJTFRFUlxuICAgNDpcdFxuICAgNTpcdGNvbmZpZyBORVRGSUxURVJfSU5HUkVTU1xuICAgNjpcdFx0Ym9vbCBcJiMzNDtOZXRmaWx0ZXIgaW5ncmVzcyBzdXBwb3J0XCYjMzQ7XG4gICA3Olx0XHRkZWZhdWx0IHlcbiAgIDg6XHRcdHNlbGVjdCBORVRfSU5HUkVTU1xuICAgOTpcdFx0aGVscFxuICAxMDpcdFx0ICBUaGlzIGFsbG93cyB5b3UgdG8gY2xhc3NpZnkgcGFja2V0cyBmcm9tIGluZ3Jlc3MgdXNpbmcgdGhlIE5ldGZpbHRlclxuICAxMTpcdFx0ICBpbmZyYXN0cnVjdHVyZS5cbiAgMTI6XHRcbiAgMTM6XHRjb25maWcgTkVURklMVEVSX0VHUkVTU1xuICAxNDpcdFx0Ym9vbCBcJiMzNDtOZXRmaWx0ZXIgZWdyZXNzIHN1cHBvcnRcJiMzNDtcbiAgMTU6XHRcdGRlZmF1bHQgeVxuICAxNjpcdFx0c2VsZWN0IE5FVF9FR1JFU1NcbiAgMTc6XHRcdGhlbHBcbiAgMTg6XHRcdCAgVGhpcyBhbGxvd3MgeW91IHRvIGNsYXNzaWZ5IHBhY2tldHMgYmVmb3JlIHRyYW5zbWlzc2lvbiB1c2luZyB0aGVcbiAgMTk6XHRcdCAgTmV0ZmlsdGVyIGluZnJhc3RydWN0dXJlLlxuICAyMDpcdFxuICAyMTpcdGNvbmZpZyBORVRGSUxURVJfU0tJUF9FR1JFU1NcbiAgMjI6XHRcdGRlZl9ib29sIE5FVEZJTFRFUl9FR1JFU1MgXHUwMDI2XHUwMDI2IChORVRfQ0xTX0FDVCB8fCBJRkIpXG4gIDIzOlx0XG4gIDI0Olx0Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LXG4gIDI1Olx0XHRib29sXG4gIDI2Olx0XG4gIDI3Olx0Y29uZmlnIE5FVEZJTFRFUl9GQU1JTFlfQlJJREdFXG4gIDI4Olx0XHRib29sXG4gIDI5Olx0XG4gIDMwOlx0Y29uZmlnIE5FVEZJTFRFUl9GQU1JTFlfQVJQXG4gIDMxOlx0XHRib29sXG4gIDMyOlx0XG4gIDMzOlx0Y29uZmlnIE5FVEZJTFRFUl9CUEZfTElOS1xuICAzNDpcdFx0ZGVmX2Jvb2wgQlBGX1NZU0NBTExcbiAgMzU6XHRcbiAgMzY6XHRjb25maWcgTkVURklMVEVSX05FVExJTktfSE9PS1xuICAzNzpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIGJhc2UgaG9vayBkdW1wIHN1cHBvcnRcJiMzNDtcbiAgMzg6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG4gIDM5Olx0XHRkZXBlbmRzIG9uIE5GX1RBQkxFU1xuICA0MDpcdFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA1OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwNDgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBILjMyMyBDb25uZWN0aW9uIFRyYWNraW5nIE1vZHVsZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYE5GX0NPTk5UUkFDS19IMzIzYCBtb2R1bGUuIFRoZSBwcmVyZXF1aXNpdGVzIGFyZSBwcmV0dHkgY2xlYXI6IGBORVRGSUxURVJgLCBgSU5FVGAsIGBORVRGSUxURVJfQURWQU5DRURgLCBgTkZfQ09OTlRSQUNLYCwgYW5kLCBvZiBjb3Vyc2UsIGBORl9DT05OVFJBQ0tfSDMyM2AgaXRzZWxmLiBNYWtlcyBzZW5zZSwgZ2l2ZW4gaXQmIzM5O3MgYnVpbHQgb24gTmV0ZmlsdGVyIGFuZCBoYW5kbGVzIElQLWJhc2VkIGNvbm5lY3Rpb25zLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVjb2RpbmcgcHJvY2Vzcy4gSSBuZWVkIHRvIGZvY3VzIG9uIGhvdyBgZGVjb2RlX2VudW1gIGFuZCB0aGUgQVNOLjEgcGFyc2VyIGFyZSBhY3R1YWxseSAqdXNlZCogd2l0aGluIHRoaXMgbW9kdWxlLiBTcGVjaWZpY2FsbHksIGluIGBuZl9jb25udHJhY2tfaDMyM19hc24xLmNgLiBTbyBteSBuZXh0IHN0ZXAgaXMgY2xlYXIuCgpJJiMzOTtsbCBiZSBzZWFyY2hpbmcgZm9yIGhvdyBgZGVjb2RlX2VudW1gIGlzIGNhbGxlZCwgYW5kIGdlbmVyYWxseSBob3cgQVNOLjEgZGVjb2RpbmcgaGFwcGVucyB3aXRoaW4gYm90aCBgbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYCBhbmQgYG5mX2Nvbm50cmFja19oMzIzX21haW4uY2AuIEkgbmVlZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRhdGEgZmxvdyBhbmQgaG93IHRoZSBBU04uMSBkYXRhIGlzIGhhbmRsZWQuIFRoaXMgaXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBhY3R1YWxseSB3b3JrcyBmb3IgSC4zMjMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA1OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlY29kZV9lbnVtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9MTExPXN0YXRpYyBpbnQgZGVjb2RlX2ludChzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMTI6c3RhdGljIGludCBkZWNvZGVfZW51bShzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0xMTMtc3RhdGljIGludCBkZWNvZGVfYml0c3RyKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz0xMjM9c3RhdGljIGNvbnN0IGRlY29kZXJfdCBEZWNvZGVyc1tdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTEyNy1cdGRlY29kZV9pbnQsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMjg6XHRkZWNvZGVfZW51bSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTEyOS1cdGRlY29kZV9iaXRzdHIsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9MzEyPXN0YXRpYyBpbnQgZGVjb2RlX2ludChzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMzYwLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MzYxOnN0YXRpYyBpbnQgZGVjb2RlX2VudW0oc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMzYyLSAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmFzZSwgaW50IGxldmVsKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTMzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEguMzIzIENvbm5lY3Rpb24gVHJhY2tpbmcgQ29kZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IHJlbGF0ZWQgdG8gSC4zMjMgY29ubmVjdGlvbiB0cmFja2luZy4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgYG5mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AgZmlsZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGl0cyBmdW5jdGlvbnMgYXJlIGludm9rZWQsIHNvIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGVudHJ5IHBvaW50cyDigJMgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBkaXJlY3RseSBjYWxsZWQgZnJvbSBlbHNld2hlcmUuIFRoZW4sIEkgbmVlZCB0byBzZWUgKndoZXJlKiB0aG9zZSBlbnRyeSBwb2ludHMgYXJlIGNhbGxlZCBmcm9tLiBUaGUgb2J2aW91cyBwbGFjZSB0byBsb29rIGZvciB0aGF0IGluaXRpYWwgY2FsbCBpcyBpbiBgbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jYCwgYXMgdGhlIG5hbWUgc3VnZ2VzdHMgaXQmIzM5O3MgdGhlIGNlbnRyYWwgaHViLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiBob3cgdGhlIEFTTi4xLXJlbGF0ZWQgZnVuY3Rpb25hbGl0eSBmaXRzIGludG8gdGhlIGJyb2FkZXIgY29ubmVjdGlvbiB0cmFja2luZyBwcm9jZXNzIGZvciBILjMyMyB0cmFmZmljLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHdpbGwgbGlrZWx5IHNob3cgdGhlIGZ1bmN0aW9uIGNhbGxzIHRoYXQgaGFuZGxlIHRoZSBBU04uMSBkZWNvZGluZyBhbmQgY29ubmVjdGlvbiBzdGF0ZSBtb2RpZmljYXRpb25zLiBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IEkgY2FuIHRoZW4gdHJhY2UgdGhlIGNvbnRyb2wgZmxvdyBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuIHRoZXNlIGZpbGVzIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIHRoaXMgbW9kdWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0RlY29kZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDU6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyNjYKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBILjMyMyBjb25uZWN0aW9uIHRyYWNraW5nIG1vZHVsZS4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJJiMzOTtsbCBleGFtaW5lIHRoZSBoZWFkZXIgZmlsZSwgc3BlY2lmaWNhbGx5IGBpbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmhgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIGRlY2xhcmF0aW9ucyBmb3IgdGhpcyBwYXJ0IG9mIHRoZSBOZXRmaWx0ZXIgc3Vic3lzdGVtIHNob3VsZCByZXNpZGUuIE15IHByaW1hcnkgZ29hbCBoZXJlIGlzIHRvIGlkZW50aWZ5IGV4YWN0bHkgd2hhdCBmdW5jdGlvbmFsaXR5IGlzIGV4cG9zZWQ6IFdoYXQgZnVuY3Rpb25zIGFyZSAqZXhwb3J0ZWQqIOKAkyB0aG9zZSBhcmUgdGhlIGVudHJ5IHBvaW50cyBJJiMzOTtsbCBiZSB3b3JraW5nIHdpdGgg4oCTIGFuZCB3aGF0JiMzOTtzICpkZWNsYXJlZCogd2l0aGluIHRoYXQgY29udGV4dD8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhlIHN0cnVjdHVyZXMsIGVudW1lcmF0aW9ucywgYW5kIGZ1bmN0aW9uIHByb3RvdHlwZXMgdGhhdCBhcmUgZGVmaW5lZC4gVW5kZXJzdGFuZGluZyB0aGUgZXhwb3J0ZWQgQVBJIGlzIGFic29sdXRlbHkgY3J1Y2lhbCBmb3IgYW55IGludGVncmF0aW9uIG9yIGludGVyYWN0aW9uIHdpdGggdGhpcyBtb2R1bGUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBhcmNoaXRlY3R1cmUgYW5kIGhvdyB0byB3b3JrIHdpdGggaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA1OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBEZWNvZGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5oPTQ0PXR5cGVkZWYgc3RydWN0IHtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmgtOTAtXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmg6OTE6aW50IERlY29kZVJhc01lc3NhZ2UodW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3Qgc3osIFJhc01lc3NhZ2UgKiByYXMpO1xuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5oOjkyOmludCBEZWNvZGVROTMxKHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IHN6LCBROTMxICogcTkzMSk7XG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmg6OTM6aW50IERlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZSh1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBzeixcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuaC05NC1cdFx0XHRcdFx0IE11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZSAqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA1OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzc0CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGF0IGFuYWx5c2lzLCBhcyBpZiBpdCB3ZXJlIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEguMzIzIENvbm50cmFjayBNb2R1bGUqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgd2l0aGluIHRoaXMgSC4zMjMgY29ubnRyYWNrIG1vZHVsZSwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgdGhlIHBhcnNpbmcgb2YgdGhvc2UgSC4yMjUgYW5kIEguMjQ1IG1lc3NhZ2VzLiBNeSBnb2FsIGlzIHRvIHNlZSBleGFjdGx5IHdoZXJlIGBEZWNvZGVSYXNNZXNzYWdlYCwgYERlY29kZVE5MzFgLCBhbmQgYERlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZWAgYXJlIGludm9rZWQgd2l0aGluIGBuZl9jb25udHJhY2tfaDMyM19tYWluLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZW50cnkgcG9pbnRzIGFuZCB0aGUgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgdGhlc2UgbWVzc2FnZSBkZWNvZGVycy4gVGhpcyB3aWxsIGhlbHAgbWUgZ3Jhc3AgaG93IHRoZSBtb2R1bGUgcHJvY2Vzc2VzIGFuZCBleHRyYWN0cyBpbmZvcm1hdGlvbiBmcm9tIEguMzIzIHNpZ25hbGluZy4gSSBhbnRpY2lwYXRlIHRoZXJlJiMzOTtsbCBiZSBhIGZ1bmN0aW9uIHRoYXQgZG9lcyB0aGUgaW5pdGlhbCBtZXNzYWdlIHR5cGUgZGV0ZWN0aW9uLCBhbmQgdGhlbiBjYWxscyB0aGUgYXBwcm9wcmlhdGUgZGVjb2RlIGZ1bmN0aW9uIGJhc2VkIG9uIHRoYXQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIG9uIGhvdyB0aGUgSC4zMjMgc3RhdGUgbWFjaGluZSBpcyByZXByZXNlbnRlZC4gSXQgd291bGQgYWxzbyBiZSBncmVhdCB0byB1bmRlcnN0YW5kIGhvdyBlcnJvcnMgYXJlIGhhbmRsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA1OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0RlY29kZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTUyOT1zdGF0aWMgaW50IGgyNDVfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy01NTEtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzo1NTI6XHRcdC8qIERlY29kZSBILjI0NSBzaWduYWwgKi9cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjU1MzpcdFx0cmV0ID0gRGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlKGRhdGEsIGRhdGFsZW4sXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy01NTQtXHRcdFx0XHRcdFx0XHQgICBcdTAwMjZtc2NtKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYz0xMDg5PXN0YXRpYyBpbnQgcTkzMV9oZWxwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTExMTEtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxMTEyOlx0XHQvKiBEZWNvZGUgUS45MzEgc2lnbmFsICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxMTEzOlx0XHRyZXQgPSBEZWNvZGVROTMxKGRhdGEsIGRhdGFsZW4sIFx1MDAyNnE5MzEpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTExNC1cdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTE2NjQ9c3RhdGljIGludCByYXNfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNjgyLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MTY4MzpcdC8qIERlY29kZSBSQVMgbWVzc2FnZSAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MTY4NDpcdHJldCA9IERlY29kZVJhc01lc3NhZ2UoZGF0YSwgZGF0YWxlbiwgXHUwMDI2cmFzKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE2ODUtXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA1OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjU3CgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBIZWFydCBvZiBILjMyMyBDb25uZWN0aW9uIFRyYWNraW5nKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgSC4zMjMgY29ubmVjdGlvbiB0cmFja2luZyBtb2R1bGUgd29ya3MgaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGhvdyBpdCBkZWNvZGVzIHRoZSBBU04uMSBtZXNzYWdlcy4gVGhlIGRlZmluaXRpb25zIGZvciBgRGVjb2RlUmFzTWVzc2FnZWAsIGBEZWNvZGVROTMxYCwgYW5kIHRoZSBvdGhlciBkZWNvZGluZyBmdW5jdGlvbnMgYXJlIGJ1cmllZCBzb21ld2hlcmUgd2l0aGluIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AuIEJlc3QgdG8ganVzdCBqdW1wIHJpZ2h0IHRvIHRoZSBlbmQgb2YgdGhhdCBmaWxlIGFuZCBjaGVjayB0aGVtIG91dC4gSSBuZWVkIHRvIHNlZSB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgdGhlc2UgY3JpdGljYWwgZnVuY3Rpb25zLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIGxvZ2ljIGlzLCBub3QganVzdCB0aGUgZGVjbGFyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MDA6XHRcdFx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbiA4MDE6XHRcdFx0aWYgKCFiYXNlIHx8ICEoc29uLVx1MDAzZWF0dHIgXHUwMDI2IERFQ09ERSkpIHtcbiA4MDI6XHRcdFx0XHRQUklOVChcJiMzNDslKnMlc1xcblwmIzM0OywgKGxldmVsICYjNDM7IDEpICogVEFCX1NJWkUsIFwmIzM0OyBcJiMzNDssXG4gODAzOlx0XHRcdFx0ICAgICAgc29uLVx1MDAzZW5hbWUpO1xuIDgwNDpcdFx0XHRcdGJzLVx1MDAzZWN1ciAmIzQzOz0gbGVuO1xuIDgwNTpcdFx0XHRcdHJldHVybiBIMzIzX0VSUk9SX05PTkU7XG4gODA2Olx0XHRcdH1cbiA4MDc6XHRcdFx0YmVnID0gYnMtXHUwMDNlY3VyO1xuIDgwODpcdFxuIDgwOTpcdFx0XHRpZiAoKGVyciA9IChEZWNvZGVyc1tzb24tXHUwMDNldHlwZV0pIChicywgc29uLCBiYXNlLCBsZXZlbCAmIzQzOyAxKSkgXHUwMDNjXG4gODEwOlx0XHRcdCAgICBIMzIzX0VSUk9SX05PTkUpXG4gODExOlx0XHRcdFx0cmV0dXJuIGVycjtcbiA4MTI6XHRcbiA4MTM6XHRcdFx0YnMtXHUwMDNlY3VyID0gYmVnICYjNDM7IGxlbjtcbiA4MTQ6XHRcdFx0YnMtXHUwMDNlYml0ID0gMDtcbiA4MTU6XHRcdH0gZWxzZSBpZiAoKGVyciA9IChEZWNvZGVyc1tzb24tXHUwMDNldHlwZV0pIChicywgc29uLCBiYXNlLCBsZXZlbCAmIzQzOyAxKSkgXHUwMDNjXG4gODE2Olx0XHRcdCAgIEgzMjNfRVJST1JfTk9ORSlcbiA4MTc6XHRcdFx0cmV0dXJuIGVycjtcbiA4MTg6XHRcbiA4MTk6XHRcdHJldHVybiBIMzIzX0VSUk9SX05PTkU7XG4gODIwOlx0fVxuIDgyMTpcdFxuIDgyMjpcdGludCBEZWNvZGVSYXNNZXNzYWdlKHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IHN6LCBSYXNNZXNzYWdlICpyYXMpXG4gODIzOlx0e1xuIDgyNDpcdFx0c3RhdGljIGNvbnN0IHN0cnVjdCBmaWVsZF90IHJhc19tZXNzYWdlID0ge1xuIDgyNTpcdFx0XHRGTkFNRShcJiMzNDtSYXNNZXNzYWdlXCYjMzQ7KSBDSE9JQ0UsIDUsIDI0LCAzMiwgREVDT0RFIHwgRVhULFxuIDgyNjpcdFx0XHQwLCBfUmFzTWVzc2FnZVxuIDgyNzpcdFx0fTtcbiA4Mjg6XHRcdHN0cnVjdCBiaXRzdHIgYnM7XG4gODI5Olx0XG4gODMwOlx0XHRicy5idWYgPSBicy5iZWcgPSBicy5jdXIgPSBidWY7XG4gODMxOlx0XHRicy5lbmQgPSBidWYgJiM0Mzsgc3o7XG4gODMyOlx0XHRicy5iaXQgPSAwO1xuIDgzMzpcdFxuIDgzNDpcdFx0cmV0dXJuIGRlY29kZV9jaG9pY2UoXHUwMDI2YnMsIFx1MDAyNnJhc19tZXNzYWdlLCAoY2hhciAqKSByYXMsIDApO1xuIDgzNTpcdH1cbiA4MzY6XHRcbiA4Mzc6XHRzdGF0aWMgaW50IERlY29kZUgzMjNfVXNlckluZm9ybWF0aW9uKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgY2hhciAqYmVnLFxuIDgzODpcdFx0XHRcdFx0ICAgICAgc2l6ZV90IHN6LCBIMzIzX1VzZXJJbmZvcm1hdGlvbiAqdXVpZSlcbiA4Mzk6XHR7XG4gODQwOlx0XHRzdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgaDMyM191c2VyaW5mb3JtYXRpb24gPSB7XG4gODQxOlx0XHRcdEZOQU1FKFwmIzM0O0gzMjMtVXNlckluZm9ybWF0aW9uXCYjMzQ7KSBTRVEsIDEsIDIsIDIsIERFQ09ERSB8IEVYVCxcbiA4NDI6XHRcdFx0MCwgX0gzMjNfVXNlckluZm9ybWF0aW9uXG4gODQzOlx0XHR9O1xuIDg0NDpcdFx0c3RydWN0IGJpdHN0ciBicztcbiA4NDU6XHRcbiA4NDY6XHRcdGJzLmJ1ZiA9IGJ1ZjtcbiA4NDc6XHRcdGJzLmJlZyA9IGJzLmN1ciA9IGJlZztcbiA4NDg6XHRcdGJzLmVuZCA9IGJlZyAmIzQzOyBzejtcbiA4NDk6XHRcdGJzLmJpdCA9IDA7XG4gODUwOlx0XG4gODUxOlx0XHRyZXR1cm4gZGVjb2RlX3NlcShcdTAwMjZicywgXHUwMDI2aDMyM191c2VyaW5mb3JtYXRpb24sIChjaGFyICopIHV1aWUsIDApO1xuIDg1MjpcdH1cbiA4NTM6XHRcbiA4NTQ6XHRpbnQgRGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlKHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IHN6LFxuIDg1NTpcdFx0XHRcdFx0XHQgTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlICpcbiA4NTY6XHRcdFx0XHRcdFx0IG1zY20pXG4gODU3Olx0e1xuIDg1ODpcdFx0c3RhdGljIGNvbnN0IHN0cnVjdCBmaWVsZF90IG11bHRpbWVkaWFzeXN0ZW1jb250cm9sbWVzc2FnZSA9IHtcbiA4NTk6XHRcdFx0Rk5BTUUoXCYjMzQ7TXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlXCYjMzQ7KSBDSE9JQ0UsIDIsIDQsIDQsXG4gODYwOlx0XHRcdERFQ09ERSB8IEVYVCwgMCwgX011bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZVxuIDg2MTpcdFx0fTtcbiA4NjI6XHRcdHN0cnVjdCBiaXRzdHIgYnM7XG4gODYzOlx0XG4gODY0Olx0XHRicy5idWYgPSBicy5iZWcgPSBicy5jdXIgPSBidWY7XG4gODY1Olx0XHRicy5lbmQgPSBidWYgJiM0Mzsgc3o7XG4gODY2Olx0XHRicy5iaXQgPSAwO1xuIDg2NzpcdFxuIDg2ODpcdFx0cmV0dXJuIGRlY29kZV9jaG9pY2UoXHUwMDI2YnMsIFx1MDAyNm11bHRpbWVkaWFzeXN0ZW1jb250cm9sbWVzc2FnZSxcbiA4Njk6XHRcdFx0XHQgICAgIChjaGFyICopIG1zY20sIDApO1xuIDg3MDpcdH1cbiA4NzE6XHRcbiA4NzI6XHRpbnQgRGVjb2RlUTkzMSh1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBzeiwgUTkzMSAqcTkzMSlcbiA4NzM6XHR7XG4gODc0Olx0XHR1bnNpZ25lZCBjaGFyICpwID0gYnVmO1xuIDg3NTpcdFx0aW50IGxlbjtcbiA4NzY6XHRcbiA4Nzc6XHRcdGlmICghcCB8fCBzeiBcdTAwM2MgMSlcbiA4Nzg6XHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4gODc5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA1OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTE4CgkJCQkJCQlvdXRwdXQ6IDE3MQoJCQkJCQkJdGhvdWdodHM6IDExNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgSC4zMjMgQ29ubnRyYWNrIEhlbHBlciBWdWxuZXJhYmlsaXR5IEZpeCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYGRlY29kZV9lbnVtYCBpbiBgbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYCBoYXMgYmVlbiBtb2RpZmllZC4gVGhpcyBpcyBhIHN0YXRpYyBmdW5jdGlvbiB1c2VkIHdpdGhpbiB0aGUgSC4zMjMgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXIsIGFjY2Vzc2VkIHZpYSB0aGUgYERlY29kZXJzYCB0YWJsZSBmb3IgQVNOLjEgZGVjb2RpbmcuIFRoZSBjaGFuZ2UgaW50cm9kdWNlcyBhIGJvdW5kcyBjaGVjaywgYG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDEpYCwgKmJlZm9yZSogcmVhZGluZyB0aGUgYml0LiBUaGlzIGlzIGEgY2xhc3NpYyBidWZmZXIgb3ZlcnJ1biBwcmV2ZW50aW9uIHN0cmF0ZWd5IHdoZW4gcGFyc2luZyBBU04uMSBlbnVtIGZpZWxkcywgbWl0aWdhdGluZyBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGluIG1hbGZvcm1lZCBILjMyMyBwYWNrZXRzLgoKSXMgdGhpcyByZWFjaGFibGUgYW5kIHdvcnRoIHRhcmdldGluZyBmb3IgZnV6emluZz8gQWJzb2x1dGVseSwgeWVzLiBUaGUgY29kZSByZXNpZGVzIHdpdGhpbiB0aGUgYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYCBmaWxlLiBUaGlzIG1lYW5zIHRoaXMgY29kZSBwYXRoIGlzIGludm9sdmVkIGluIGFuYWx5emluZyBpbmNvbWluZyBhbmQgb3V0Z29pbmcgSC4zMjMgdHJhZmZpYywgaW5jbHVkaW5nIFJBUywgUS45MzEsIGFuZCBILjI0NSBwYWNrZXRzLCBhbmQgYW55dGhpbmcgc2VudCB0aHJvdWdoIHJhdyBzb2NrZXRzLCBsb29wYmFjaywgdHVuLCB0YXAsIGFuZCBuZXRsaW5rIGN0IGhlbHBlci4gQW55IGZ1enppbmcgZWZmb3J0IHRhcmdldGVkIGF0IHRoaXMgd291bGQgbW9kaWZ5IHRoZSBjb2RlIGZvciB0aGUgbmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyLCB3aGljaCBpcyB2ZXJ5IGhpZ2ggdmFsdWUuIFRoZSBwcmVzZW5jZSBvZiBgV29ydGhGdXp6aW5nPXRydWVgIGNvbmZpcm1zIHRoaXMgaW5pdGlhbCBhc3Nlc3NtZW50LgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gZW5zdXJlIGBORl9DT05OVFJBQ0tgIGFuZCBgTkZfQ09OTlRSQUNLX0gzMjNgIGFyZSBlbmFibGVkLiBGdXJ0aGVybW9yZSwgYWNjb3JkaW5nIHRvIHRoZSBgS2NvbmZpZ2AgZmlsZSBpbiB0aGUgbmV0ZmlsdGVyIGRpcmVjdG9yeSwgYE5GX0NPTk5UUkFDS19IMzIzYCBkZXBlbmRzIG9uIGBORVRGSUxURVJfQURWQU5DRURgLiBDb3JlIE5ldGZpbHRlciBmdW5jdGlvbmFsaXR5IGRlcGVuZHMgb24gYElORVRgIGFuZCBgTkVURklMVEVSYC4gVGhlc2UgY29uZmlncyBhcmUgc3RyYWlnaHRmb3J3YXJkIGFuZCBjb21tb24uCgpUaGUgY3JpdGljYWwgcXVlc3Rpb24gbm93IGlzIHdoYXQgc3ltYm9scyBzaG91bGQgSSB0YXJnZXQ/IGBkZWNvZGVfZW51bWAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgcmVjZWl2ZWQgdGhlIGNoYW5nZSwgYW5kIGlzIGRlZmluZWQgaW4gdGhlIGBuZl9jb25udHJhY2tfaDMyM19hc24xLmNgLiBXaGlsZSBpdCBpcyBgc3RhdGljYCBJIGNhbiBkZWZpbml0ZWx5IHRhcmdldCBpdCwgZXNwZWNpYWxseSBpZiBJIGNhbiBwcm92aWRlIGl0cyBjYWxsZXJzIGFzIGVudHJ5IHBvaW50cy4gSSBoYXZlIHRvIGJlIGNhcmVmdWwgd2l0aCBzcGVsbGluZy4gSSYjMzk7bSBnb2luZyB0byBsaXN0IG91dCBldmVyeSBzeW1ib2wsIG5vbi1zdGF0aWMsIGluIHRoZSBmaWxlIHRoYXQgY291bGQgcG90ZW50aWFsbHkgY2FsbCBkZWNvZGVfZW51bToKLSBgRGVjb2RlUmFzTWVzc2FnZWAKLSBgRGVjb2RlUTkzMWAKLSBgRGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlYAotIGBkZWNvZGVfZW51bWAKLSBgcmFzX2hlbHBgCi0gYHE5MzFfaGVscGAKLSBgaDI0NV9oZWxwYAoKQWZ0ZXIgY2hlY2tpbmcgYG5mX2Nvbm50cmFja19oMzIzX21haW4uY2AgaGVscGVyIGZ1bmN0aW9ucywgSSBoYXZlIGNvbmZpcm1lZCB0aGUgZXhhY3Qgc3BlbGxpbmcgb2YgdGhlc2UgZnVuY3Rpb25zOgotIGBkZWNvZGVfZW51bWAKLSBgRGVjb2RlUmFzTWVzc2FnZWAKLSBgRGVjb2RlUTkzMWAKLSBgRGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlYAotIGByYXNfaGVscGAKLSBgcTkzMV9oZWxwYAotIGBoMjQ1X2hlbHBgCgpJJiMzOTt2ZSBhbHNvIHZlcmlmaWVkIHRoYXQgb25seSBgbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYCB3YXMgdG91Y2hlZCBpbiB0aGlzIGNvbW1pdC4KClNvLCBmb3IgYHNldC1yZXN1bHRzYCwgSSYjMzk7bGwgc3RydWN0dXJlIGl0IGxpa2UgdGhpczoKCi0gICBgV29ydGhGdXp6aW5nYDogdHJ1ZQotICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIHRvIGBkZWNvZGVfZW51bWAgaW4gdGhlIEguMzIzIGNvbm50cmFjayBBU04uMSBwYXJzZXIgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIGFjY2VzcyB3aGVuIHBhcnNpbmcgbWFsZm9ybWVkIEguMzIzIG5ldHdvcmsgcGFja2V0cywgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBILjMyMyBjb25udHJhY2sgaGVscGVycy4KLSAgIGBGb2N1c1N5bWJvbHNgOiBcWyYjMzQ7ZGVjb2RlXF9lbnVtJiMzNDssICYjMzQ7RGVjb2RlUmFzTWVzc2FnZSYjMzQ7LCAmIzM0O0RlY29kZVE5MzEmIzM0OywgJiMzNDtEZWNvZGVNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2UmIzM0OywgJiMzNDtyYXNcX2hlbHAmIzM0OywgJiMzNDtxOTMxXF9oZWxwJiMzNDssICYjMzQ7aDI0NVxfaGVscCYjMzQ7XQotICAgYEVuYWJsZUNvbmZpZ3NgOiBcWyYjMzQ7TkZcX0NPTk5UUkFDSyYjMzQ7LCAmIzM0O05GXF9DT05OVFJBQ0tcX0gzMjMmIzM0OywgJiMzNDtORVRGSUxURVJcX0FEVkFOQ0VEJiMzNDtdCgpUaGUgY29uZmlncyBhcmUgY29ycmVjdCBhbmQgdGhlIHN5bWJvbHMgYXJlIHRoZSBleGFjdCBuYW1lcy4gT2theSwgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA1OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX0gzMjMmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0FEVkFOQ0VEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGVjb2RlX2VudW0mIzM0OywKICAgICYjMzQ7RGVjb2RlUmFzTWVzc2FnZSYjMzQ7LAogICAgJiMzNDtEZWNvZGVROTMxJiMzNDssCiAgICAmIzM0O0RlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZSYjMzQ7LAogICAgJiMzNDtyYXNfaGVscCYjMzQ7LAogICAgJiMzNDtxOTMxX2hlbHAmIzM0OywKICAgICYjMzQ7aDI0NV9oZWxwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBtaXNzaW5nIGJvdW5kYXJ5IGNoZWNrIGluIGRlY29kZV9lbnVtKCkgaW4gdGhlIE5ldGZpbHRlciBILjMyMyBjb25uZWN0aW9uIHRyYWNraW5nIEFTTi4xIGRlY29kZXIgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIGFjY2VzcyB3aGVuIHJlYWRpbmcgYml0cyBmcm9tIG1hbGZvcm1lZCBwYWNrZXRzLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgbmV0d29yayBwYWNrZXQgcHJvY2Vzc2luZyBoYW5kbGVkIGJ5IHRoZSBILjMyMyBjb25udHJhY2sgaGVscGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX0gzMjMmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0FEVkFOQ0VEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGVjb2RlX2VudW0mIzM0OywKICAgICYjMzQ7RGVjb2RlUmFzTWVzc2FnZSYjMzQ7LAogICAgJiMzNDtEZWNvZGVROTMxJiMzNDssCiAgICAmIzM0O0RlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZSYjMzQ7LAogICAgJiMzNDtyYXNfaGVscCYjMzQ7LAogICAgJiMzNDtxOTMxX2hlbHAmIzM0OywKICAgICYjMzQ7aDI0NV9oZWxwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBtaXNzaW5nIGJvdW5kYXJ5IGNoZWNrIGluIGRlY29kZV9lbnVtKCkgaW4gdGhlIE5ldGZpbHRlciBILjMyMyBjb25uZWN0aW9uIHRyYWNraW5nIEFTTi4xIGRlY29kZXIgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIGFjY2VzcyB3aGVuIHJlYWRpbmcgYml0cyBmcm9tIG1hbGZvcm1lZCBwYWNrZXRzLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgbmV0d29yayBwYWNrZXQgcHJvY2Vzc2luZyBoYW5kbGVkIGJ5IHRoZSBILjMyMyBjb25udHJhY2sgaGVscGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNTo0NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA1OjQ2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG1pc3NpbmcgYm91bmRhcnkgY2hlY2sgYG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDEpYCB0byBgZGVjb2RlX2VudW0oKWAgYmVmb3JlIHJlYWRpbmcgYSBiaXQgZnJvbSB0aGUgQVNOLjEgYml0c3RyZWFtLiBQcmlvciB0byB0aGlzIGZpeCwgaWYgYGJzLVx1MDAzZWN1cmAgd2FzIGF0IGBicy1cdTAwM2VlbmRgLCBgZ2V0X2JpdChicylgIHdvdWxkIHBlcmZvcm0gYW4gb3V0LW9mLWJvdW5kcyByZWFkIHBhc3QgdGhlIGVuZCBvZiB0aGUgcGFja2V0IGRhdGEgYnVmZmVyLiBcblxuT3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgYXJlIG1lbW9yeSBzYWZldHkgdmlvbGF0aW9ucyBkaXJlY3RseSBjYXVnaHQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgc3RydWN0dXJlIHBhZGRpbmcgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDk4MTk4ZDY4M2VmNGM4MjY0NzM0MGUwNGE4NGFlNjQ4ZWNjYTE3ODAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDA1OjQ1OjE5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYwppbmRleCA2ODMwYzlkYTM1MDdjLi5iYTZjZTFmMDRlMWVkIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYwpAQCAtMzYzLDYgJiM0MzszNjMsOCBAQCBzdGF0aWMgaW50IGRlY29kZV9lbnVtKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwKIHsKIAlQUklOVCgmIzM0OyUqcyVzXG4mIzM0OywgbGV2ZWwgKiBUQUJfU0laRSwgJiMzNDsgJiMzNDssIGYtJmd0O25hbWUpOwogCiYjNDM7CWlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAxKSkKJiM0MzsJCXJldHVybiBIMzIzX0VSUk9SX0JPVU5EOwogCWlmICgoZi0mZ3Q7YXR0ciAmYW1wOyBFWFQpICZhbXA7JmFtcDsgZ2V0X2JpdChicykpIHsKIAkJSU5DX0JJVFMoYnMsIDcpOwogCX0gZWxzZSB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTM5CgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBILjMyMyBBU04uMSBDb25udHJhY2sgQ29kZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhpcy4gVGhlIHBhdGNoIGluIHF1ZXN0aW9uIGludm9sdmVzIHRoZSBILjMyMyBBU04uMSBjb25udHJhY2sgY29kZSwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0IGludGltYXRlbHkuIE15IGZpcnN0IHN0ZXAgaXMgdG8gemVybyBpbiBvbiBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNgLiBJJiMzOTtsbCB1c2UgYHJlYWQtZmlsZWAgbm93IHRvIHB1bGwgdGhhdCBzcGVjaWZpYyBmaWxlIGludG8gdmlldyBhbmQgSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiB0byB0aGUgYXJlYSBhcm91bmQgbGluZSAzNjMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbnRleHR1YWwgZm91bmRhdGlvbiBJIG5lZWQgdG8gcHJvcGVybHkgZ3Jhc3AgdGhlIHBhdGNoJiMzOTtzIHB1cnBvc2UgYW5kIGl0cyBpbXBsaWNhdGlvbnMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdGhlcmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDU6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzUwOlx0XHRcdElOQ19CSVRTKGJzLCBmLVx1MDAzZXN6KTtcbiAzNTE6XHRcdFx0YnJlYWs7XG4gMzUyOlx0XHR9XG4gMzUzOlx0XG4gMzU0Olx0XHRQUklOVChcJiMzNDtcXG5cJiMzNDspO1xuIDM1NTpcdFxuIDM1NjpcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDApKVxuIDM1NzpcdFx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbiAzNTg6XHRcdHJldHVybiBIMzIzX0VSUk9SX05PTkU7XG4gMzU5Olx0fVxuIDM2MDpcdFxuIDM2MTpcdHN0YXRpYyBpbnQgZGVjb2RlX2VudW0oc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuIDM2MjpcdCAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmFzZSwgaW50IGxldmVsKVxuIDM2MzpcdHtcbiAzNjQ6XHRcdFBSSU5UKFwmIzM0OyUqcyVzXFxuXCYjMzQ7LCBsZXZlbCAqIFRBQl9TSVpFLCBcJiMzNDsgXCYjMzQ7LCBmLVx1MDAzZW5hbWUpO1xuIDM2NTpcdFxuIDM2NjpcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDEpKVxuIDM2NzpcdFx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbiAzNjg6XHRcdGlmICgoZi1cdTAwM2VhdHRyIFx1MDAyNiBFWFQpIFx1MDAyNlx1MDAyNiBnZXRfYml0KGJzKSkge1xuIDM2OTpcdFx0XHRJTkNfQklUUyhicywgNyk7XG4gMzcwOlx0XHR9IGVsc2Uge1xuIDM3MTpcdFx0XHRJTkNfQklUUyhicywgZi1cdTAwM2Vzeik7XG4gMzcyOlx0XHR9XG4gMzczOlx0XG4gMzc0Olx0XHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgMCkpXG4gMzc1Olx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuIDM3NjpcdFx0cmV0dXJuIEgzMjNfRVJST1JfTk9ORTtcbiAzNzc6XHR9XG4gMzc4Olx0XG4gMzc5Olx0c3RhdGljIGludCBkZWNvZGVfYml0c3RyKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcbiAzODA6XHQgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmFzZSwgaW50IGxldmVsKVxuIDM4MTpcdHtcbiAzODI6XHRcdHVuc2lnbmVkIGludCBsZW47XG4gMzgzOlx0XG4gMzg0Olx0XHRQUklOVChcJiMzNDslKnMlc1xcblwmIzM0OywgbGV2ZWwgKiBUQUJfU0laRSwgXCYjMzQ7IFwmIzM0OywgZi1cdTAwM2VuYW1lKTtcbiAzODU6XHRcbiAzODY6XHRcdEJZVEVfQUxJR04oYnMpO1xuIDM4NzpcdFx0c3dpdGNoIChmLVx1MDAzZXN6KSB7XG4gMzg4Olx0XHRjYXNlIEZJWEQ6XHRcdC8qIGZpeGVkIGxlbmd0aCBcdTAwM2UgMTYgKi9cbiAzODk6XHRcdFx0bGVuID0gZi1cdTAwM2VsYjtcbiAzOTA6XHRcdFx0YnJlYWs7XG4gMzkxOlx0XHRjYXNlIFdPUkQ6XHRcdC8qIDItYnl0ZSBsZW5ndGggKi9cbiAzOTI6XHRcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDIsIDApKVxuIDM5MzpcdFx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuIDM5NDpcdFx0XHRsZW4gPSAoKmJzLVx1MDAzZWN1ciYjNDM7JiM0MzspIFx1MDAzY1x1MDAzYyA4O1xuIDM5NTpcdFx0XHRsZW4gJiM0Mzs9ICgqYnMtXHUwMDNlY3VyJiM0MzsmIzQzOykgJiM0MzsgZi1cdTAwM2VsYjtcbiAzOTY6XHRcdFx0YnJlYWs7XG4gMzk3Olx0XHRjYXNlIFNFTUk6XG4gMzk4Olx0XHRcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAyLCAwKSlcbiAzOTk6XHRcdFx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDU6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIwMwoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggaXQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgQml0c3RyZWFtIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBoYXBwZW5pbmcuIEZpcnN0LCBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZXNlIGZvdXIgdGhpbmdzOiBgbmZfaDMyM19lcnJvcl9ib3VuZGFyeWAsIGBnZXRfYml0YCwgYElOQ19CSVRTYCwgYW5kIGBzdHJ1Y3QgYml0c3RyYC4gVGhlc2UgbmFtZXMgc3VnZ2VzdCB0aGF0IHRoZXkmIzM5O3JlIGFsbCByZWxhdGVkIHRvIGhhbmRsaW5nIGJpdHN0cmVhbXMsIGxpa2VseSBpbiB0aGUgY29udGV4dCBvZiBILjMyMyAoTmV0d29yayBGaWxlIFN5c3RlbT8pLgoKSSBrbm93IHRoaXMgaXMgd2hlcmUgdGhlIGludGVyZXN0aW5nIHN0dWZmIGlzLiBMZXQgbWUgYmFjayB1cCBhIGJpdCBhbmQgc2VlIGhvdyB0aGVzZSB0aGluZ3MgYXJlIGRlZmluZWQgYW5kIHVzZWQuIEkmIzM5O2xsIHJlYWQgZWFybGllciBpbiB0aGUgZmlsZSB0byBnZXQgc29tZSBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmUgYW5kIG9wZXJhdGlvbnMsIHdoZXJlIHRoZSBib3VuZGFyaWVzIGFyZSBkcmF3biwgYW5kIGhvdyB0aGUgYml0cyBhcmUgcHJvY2Vzc2VkLiBUaGlzIHNob3VsZCBoZWxwIG1lIHB1dCBhbGwgdGhlIHBpZWNlcyB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDU6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0LypcbiAgIDM6XHQgKiBCRVIgYW5kIFBFUiBkZWNvZGluZyBsaWJyYXJ5IGZvciBILjMyMyBjb25udHJhY2svTkFUIG1vZHVsZS5cbiAgIDQ6XHQgKlxuICAgNTpcdCAqIENvcHlyaWdodCAoYykgMjAwNiBieSBKaW5nIE1pbiBaaGFvIFx1MDAzY3poYW9qaW5nbWluQHVzZXJzLnNvdXJjZWZvcmdlLm5ldFx1MDAzZVxuICAgNjpcdCAqXG4gICA3Olx0ICogU2VlIG5mX2Nvbm50cmFja19oZWxwZXJfaDMyM19hc24xLmggZm9yIGRldGFpbHMuXG4gICA4Olx0ICovXG4gICA5Olx0XG4gIDEwOlx0I2lmZGVmIF9fS0VSTkVMX19cbiAgMTE6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICAxMjpcdCNlbHNlXG4gIDEzOlx0I2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuICAxNDpcdCNlbmRpZlxuICAxNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmhcdTAwM2VcbiAgMTY6XHRcbiAgMTc6XHQvKiBUcmFjZSBGbGFnICovXG4gIDE4Olx0I2lmbmRlZiBIMzIzX1RSQUNFXG4gIDE5Olx0I2RlZmluZSBIMzIzX1RSQUNFIDBcbiAgMjA6XHQjZW5kaWZcbiAgMjE6XHRcbiAgMjI6XHQjaWYgSDMyM19UUkFDRVxuICAyMzpcdCNkZWZpbmUgVEFCX1NJWkUgNFxuICAyNDpcdCNpZmRlZiBfX0tFUk5FTF9fXG4gIDI1Olx0I2RlZmluZSBQUklOVCBwcmludGtcbiAgMjY6XHQjZWxzZVxuICAyNzpcdCNkZWZpbmUgUFJJTlQgcHJpbnRmXG4gIDI4Olx0I2VuZGlmXG4gIDI5Olx0I2RlZmluZSBGTkFNRShuYW1lKSBuYW1lLFxuICAzMDpcdCNlbHNlXG4gIDMxOlx0I2RlZmluZSBQUklOVChmbXQsIGFyZ3MuLi4pXG4gIDMyOlx0I2RlZmluZSBGTkFNRShuYW1lKVxuICAzMzpcdCNlbmRpZlxuICAzNDpcdFxuICAzNTpcdC8qIEFTTi4xIFR5cGVzICovXG4gIDM2Olx0I2RlZmluZSBOVUwgMFxuICAzNzpcdCNkZWZpbmUgQk9PTCAxXG4gIDM4Olx0I2RlZmluZSBPSUQgMlxuICAzOTpcdCNkZWZpbmUgSU5UIDNcbiAgNDA6XHQjZGVmaW5lIEVOVU0gNFxuICA0MTpcdCNkZWZpbmUgQklUU1RSIDVcbiAgNDI6XHQjZGVmaW5lIE5VTVNUUiA2XG4gIDQzOlx0I2RlZmluZSBOVU1ER1QgNlxuICA0NDpcdCNkZWZpbmUgVEJDRFNUUiA2XG4gIDQ1Olx0I2RlZmluZSBPQ1RTVFIgN1xuICA0NjpcdCNkZWZpbmUgUFJUU1RSIDdcbiAgNDc6XHQjZGVmaW5lIElBNVNUUiA3XG4gIDQ4Olx0I2RlZmluZSBHRU5TVFIgN1xuICA0OTpcdCNkZWZpbmUgQk1QU1RSIDhcbiAgNTA6XHQjZGVmaW5lIFNFUSA5XG4gIDUxOlx0I2RlZmluZSBTRVQgOVxuICA1MjpcdCNkZWZpbmUgU0VRT0YgMTBcbiAgNTM6XHQjZGVmaW5lIFNFVE9GIDEwXG4gIDU0Olx0I2RlZmluZSBDSE9JQ0UgMTFcbiAgNTU6XHRcbiAgNTY6XHQvKiBDb25zdHJhaW50IFR5cGVzICovXG4gIDU3Olx0I2RlZmluZSBGSVhEIDBcbiAgNTg6XHQvKiAjZGVmaW5lIEJJVFMgMS04ICovXG4gIDU5Olx0I2RlZmluZSBCWVRFIDlcbiAgNjA6XHQjZGVmaW5lIFdPUkQgMTBcbiAgNjE6XHQjZGVmaW5lIENPTlMgMTFcbiAgNjI6XHQjZGVmaW5lIFNFTUkgMTJcbiAgNjM6XHQjZGVmaW5lIFVOQ08gMTNcbiAgNjQ6XHRcbiAgNjU6XHQvKiBBU04uMSBUeXBlIEF0dHJpYnV0ZXMgKi9cbiAgNjY6XHQjZGVmaW5lIFNLSVAgMFxuICA2NzpcdCNkZWZpbmUgU1RPUCAxXG4gIDY4Olx0I2RlZmluZSBERUNPREUgMlxuICA2OTpcdCNkZWZpbmUgRVhUIDRcbiAgNzA6XHQjZGVmaW5lIE9QRU4gOFxuICA3MTpcdCNkZWZpbmUgT1BUIDE2XG4gIDcyOlx0XG4gIDczOlx0XG4gIDc0Olx0LyogQVNOLjEgRmllbGQgU3RydWN0dXJlICovXG4gIDc1Olx0dHlwZWRlZiBzdHJ1Y3QgZmllbGRfdCB7XG4gIDc2Olx0I2lmIEgzMjNfVFJBQ0VcbiAgNzc6XHRcdGNoYXIgKm5hbWU7XG4gIDc4Olx0I2VuZGlmXG4gIDc5Olx0XHR1bnNpZ25lZCBjaGFyIHR5cGU7XG4gIDgwOlx0XHR1bnNpZ25lZCBjaGFyIHN6O1xuICA4MTpcdFx0dW5zaWduZWQgY2hhciBsYjtcbiAgODI6XHRcdHVuc2lnbmVkIGNoYXIgdWI7XG4gIDgzOlx0XHR1bnNpZ25lZCBzaG9ydCBhdHRyO1xuICA4NDpcdFx0dW5zaWduZWQgc2hvcnQgb2Zmc2V0O1xuICA4NTpcdFx0Y29uc3Qgc3RydWN0IGZpZWxkX3QgKmZpZWxkcztcbiAgODY6XHR9IGZpZWxkX3Q7XG4gIDg3Olx0XG4gIDg4Olx0LyogQml0IFN0cmVhbSAqL1xuICA4OTpcdHN0cnVjdCBiaXRzdHIge1xuICA5MDpcdFx0dW5zaWduZWQgY2hhciAqYnVmO1xuICA5MTpcdFx0dW5zaWduZWQgY2hhciAqYmVnO1xuICA5MjpcdFx0dW5zaWduZWQgY2hhciAqZW5kO1xuICA5MzpcdFx0dW5zaWduZWQgY2hhciAqY3VyO1xuICA5NDpcdFx0dW5zaWduZWQgaW50IGJpdDtcbiAgOTU6XHR9O1xuICA5NjpcdFxuICA5NzpcdC8qIFRvb2wgRnVuY3Rpb25zICovXG4gIDk4Olx0I2RlZmluZSBJTkNfQklUKGJzKSBpZigoJiM0MzsmIzQzOyhicyktXHUwMDNlYml0KVx1MDAzZTcpeyhicyktXHUwMDNlY3VyJiM0MzsmIzQzOzsoYnMpLVx1MDAzZWJpdD0wO31cbiAgOTk6XHQjZGVmaW5lIElOQ19CSVRTKGJzLGIpIGlmKCgoYnMpLVx1MDAzZWJpdCYjNDM7PShiKSlcdTAwM2U3KXsoYnMpLVx1MDAzZWN1ciYjNDM7PShicyktXHUwMDNlYml0XHUwMDNlXHUwMDNlMzsoYnMpLVx1MDAzZWJpdFx1MDAyNj03O31cbiAxMDA6XHQjZGVmaW5lIEJZVEVfQUxJR04oYnMpIGlmKChicyktXHUwMDNlYml0KXsoYnMpLVx1MDAzZWN1ciYjNDM7JiM0Mzs7KGJzKS1cdTAwM2ViaXQ9MDt9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA1OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3MjAKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYCBmb3IgQm91bmRhcnkgQ29uZGl0aW9ucyoqCgpPa2F5LCBJIG5lZWQgdG8gemVybyBpbiBvbiBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IG9yIG9wdGltaXphdGlvbiBvcHBvcnR1bml0eSB3aXRoaW4gdGhlIEguMzIzIGNvbm5lY3Rpb24gdHJhY2tpbmcgY29kZS4gTXkgaHVuY2ggaXMgdGhhdCBlcnJvcnMgb3IgZWRnZSBjYXNlcyBpbiBob3cgdGhlIEFTTi4xIGRhdGEgaXMgcGFyc2VkIG1pZ2h0IGJlIGEgZ29vZCBwbGFjZSB0byBzdGFydC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBib3VuZGFyeSBjb25kaXRpb25zIHdoZXJlIHRoZSBkYXRhIGNvdWxkIGJlIG1hbGZvcm1lZCBvciBtYW5pcHVsYXRlZC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNgIGZpbGUuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gbGluZXMgMTAxIHRocm91Z2ggMjAwLCBhcyB0aGlzIHNob3VsZCBjb250YWluIHRoZSByZWxldmFudCBmdW5jdGlvbnMgSSYjMzk7bSBpbnRlcmVzdGVkIGluLiBJIGtub3cgdGhhdCB0aGUgYG5mX2gzMjNfZXJyb3JfYm91bmRhcnlgIGZ1bmN0aW9uIHNob3VsZCBoYW5kbGUgc29tZSBvZiB0aGVzZSBib3VuZGFyeSBpc3N1ZXMsIHNvIEkmIzM5O2xsIHNlZSBob3cgcm9idXN0IGl0IGlzLiBXaGlsZSBJJiMzOTttIHRoZXJlLCBJIHNob3VsZCBhbHNvIGNoZWNrIG91dCBgZ2V0X2JpdGAsIGFzIHRoaXMgbG93LWxldmVsIGJpdCBtYW5pcHVsYXRpb24gaXMgb2Z0ZW4gYSBzb3VyY2Ugb2Ygc3VidGxlIGJ1Z3Mgd2hlbiBkZWFsaW5nIHdpdGggQVNOLjEgZGF0YS4gTXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBoYW5kbGUgaW52YWxpZCBvciB1bmV4cGVjdGVkIGRhdGEgYW5kIHNlZSBpZiBJIGNhbiBmaW5kIGFuIGV4cGxvaXRhYmxlIGZsYXcsIG9yIGlmIHRoZXJlIGlzIHJvb20gZm9yIGltcHJvdmVtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDE6XHRzdGF0aWMgdW5zaWduZWQgaW50IGdldF9sZW4oc3RydWN0IGJpdHN0ciAqYnMpO1xuIDEwMjpcdHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2JpdChzdHJ1Y3QgYml0c3RyICpicyk7XG4gMTAzOlx0c3RhdGljIHVuc2lnbmVkIGludCBnZXRfYml0cyhzdHJ1Y3QgYml0c3RyICpicywgdW5zaWduZWQgaW50IGIpO1xuIDEwNDpcdHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2JpdG1hcChzdHJ1Y3QgYml0c3RyICpicywgdW5zaWduZWQgaW50IGIpO1xuIDEwNTpcdHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3VpbnQoc3RydWN0IGJpdHN0ciAqYnMsIGludCBiKTtcbiAxMDY6XHRcbiAxMDc6XHQvKiBEZWNvZGVyIEZ1bmN0aW9ucyAqL1xuIDEwODpcdHN0YXRpYyBpbnQgZGVjb2RlX251bChzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XG4gMTA5Olx0c3RhdGljIGludCBkZWNvZGVfYm9vbChzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XG4gMTEwOlx0c3RhdGljIGludCBkZWNvZGVfb2lkKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcbiAxMTE6XHRzdGF0aWMgaW50IGRlY29kZV9pbnQoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLCBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpO1xuIDExMjpcdHN0YXRpYyBpbnQgZGVjb2RlX2VudW0oc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLCBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpO1xuIDExMzpcdHN0YXRpYyBpbnQgZGVjb2RlX2JpdHN0cihzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XG4gMTE0Olx0c3RhdGljIGludCBkZWNvZGVfbnVtc3RyKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcbiAxMTU6XHRzdGF0aWMgaW50IGRlY29kZV9vY3RzdHIoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLCBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpO1xuIDExNjpcdHN0YXRpYyBpbnQgZGVjb2RlX2JtcHN0cihzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XG4gMTE3Olx0c3RhdGljIGludCBkZWNvZGVfc2VxKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcbiAxMTg6XHRzdGF0aWMgaW50IGRlY29kZV9zZXFvZihzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XG4gMTE5Olx0c3RhdGljIGludCBkZWNvZGVfY2hvaWNlKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcbiAxMjA6XHRcbiAxMjE6XHQvKiBEZWNvZGVyIEZ1bmN0aW9ucyBWZWN0b3IgKi9cbiAxMjI6XHR0eXBlZGVmIGludCAoKmRlY29kZXJfdCkoc3RydWN0IGJpdHN0ciAqLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqLCBjaGFyICosIGludCk7XG4gMTIzOlx0c3RhdGljIGNvbnN0IGRlY29kZXJfdCBEZWNvZGVyc1tdID0ge1xuIDEyNDpcdFx0ZGVjb2RlX251bCxcbiAxMjU6XHRcdGRlY29kZV9ib29sLFxuIDEyNjpcdFx0ZGVjb2RlX29pZCxcbiAxMjc6XHRcdGRlY29kZV9pbnQsXG4gMTI4Olx0XHRkZWNvZGVfZW51bSxcbiAxMjk6XHRcdGRlY29kZV9iaXRzdHIsXG4gMTMwOlx0XHRkZWNvZGVfbnVtc3RyLFxuIDEzMTpcdFx0ZGVjb2RlX29jdHN0cixcbiAxMzI6XHRcdGRlY29kZV9ibXBzdHIsXG4gMTMzOlx0XHRkZWNvZGVfc2VxLFxuIDEzNDpcdFx0ZGVjb2RlX3NlcW9mLFxuIDEzNTpcdFx0ZGVjb2RlX2Nob2ljZSxcbiAxMzY6XHR9O1xuIDEzNzpcdFxuIDEzODpcdC8qXG4gMTM5Olx0ICogSC4zMjMgVHlwZXNcbiAxNDA6XHQgKi9cbiAxNDE6XHQjaW5jbHVkZSBcJiMzNDtuZl9jb25udHJhY2tfaDMyM190eXBlcy5jXCYjMzQ7XG4gMTQyOlx0XG4gMTQzOlx0LypcbiAxNDQ6XHQgKiBGdW5jdGlvbnNcbiAxNDU6XHQgKi9cbiAxNDY6XHRcbiAxNDc6XHQvKiBBc3N1bWUgYnMgaXMgYWxpZ25lZCBcdTAwMjZcdTAwMjYgdiBcdTAwM2MgMTYzODQgKi9cbiAxNDg6XHRzdGF0aWMgdW5zaWduZWQgaW50IGdldF9sZW4oc3RydWN0IGJpdHN0ciAqYnMpXG4gMTQ5Olx0e1xuIDE1MDpcdFx0dW5zaWduZWQgaW50IHY7XG4gMTUxOlx0XG4gMTUyOlx0XHR2ID0gKmJzLVx1MDAzZWN1ciYjNDM7JiM0Mzs7XG4gMTUzOlx0XG4gMTU0Olx0XHRpZiAodiBcdTAwMjYgMHg4MCkge1xuIDE1NTpcdFx0XHR2IFx1MDAyNj0gMHgzZjtcbiAxNTY6XHRcdFx0diBcdTAwM2NcdTAwM2M9IDg7XG4gMTU3Olx0XHRcdHYgJiM0Mzs9ICpicy1cdTAwM2VjdXImIzQzOyYjNDM7O1xuIDE1ODpcdFx0fVxuIDE1OTpcdFxuIDE2MDpcdFx0cmV0dXJuIHY7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA1OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxMzgKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucy4uLgoKKipEZWx2aW5nIGludG8gdGhlIEguMzIzIEFTTi4xIENvbm50cmFjayBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGhhbmRsaW5nIG9mIEguMzIzIHRyYWZmaWMgd2l0aGluIHRoZSBjb25udHJhY2sgc3lzdGVtLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZm9jdXNpbmcgb24gYGdldF9iaXRgIGFuZCBgbmZfaDMyM19lcnJvcl9ib3VuZGFyeWAuCgpgZ2V0X2JpdGAg4oCTIGl0JiMzOTtzIGEgYmFzaWMgYml0LWZpZWxkIHJldHJpZXZhbCBmdW5jdGlvbiwgbm8gZG91YnQuIFByb2JhYmx5IHVzZWQgdG8gcGFyc2UgZW5jb2RlZCBBU04uMSBzdHJ1Y3R1cmVzIGFuZCBleHRyYWN0IGluZGl2aWR1YWwgZmxhZ3Mgb3IgdmFsdWVzIHdpdGhpbiBhIGxhcmdlciBmaWVsZC4gSeKAmWxsIGJldCBpdCYjMzk7cyBpbXBsZW1lbnRlZCBlZmZpY2llbnRseSwgcGVyaGFwcyB3aXRoIHNvbWUgcHJlLWNhbGN1bGF0ZWQgbG9va3VwIHRhYmxlcyBvciBiaXQtbWFza2luZyBvcHRpbWl6YXRpb24gdGVjaG5pcXVlcy4gSSBzaG91bGQgcmV2aWV3IGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzLgoKVGhlbiB0aGVyZeKAmXMgYG5mX2gzMjNfZXJyb3JfYm91bmRhcnlgLiBUaGlzIGxvb2tzIGxpa2UgdGhlIGNydWNpYWwgZnVuY3Rpb24gZm9yIG1hbmFnaW5nIGVycm9yIGNvbmRpdGlvbnMuIEdpdmVuIHRoZSBpbmhlcmVudCBjb21wbGV4aXR5IGFuZCBzb21ldGltZXMgZmxha3kgbmF0dXJlIG9mIEguMzIzIHNpZ25hbGluZywgZXJyb3IgaGFuZGxpbmcgaXMgcGFyYW1vdW50LiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGRldGVjdGluZyBhbmQgZ3JhY2VmdWxseSBoYW5kbGluZyBtYWxmb3JtZWQgb3IgaW52YWxpZCBBU04uMSBkYXRhLCBwb3RlbnRpYWxseSB0cmlnZ2VyZWQgYnkgbWFsaWNpb3VzIHBhY2tldHMgb3IgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24gYnVncy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHN0cmF0ZWd5IGZvciBwcmV2ZW50aW5nIGRlbmlhbC1vZi1zZXJ2aWNlIGF0dGFja3MgYnkgY2FyZWZ1bGx5IGJvdW5kaW5nIHJlc291cmNlIGNvbnN1bXB0aW9uIGluIHRoZSBmYWNlIG9mIGJhZCBpbnB1dC4gSSB3b25kZXIgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBvdmVyYWxsIGNvbm50cmFjayBmcmFtZXdvcmsg4oCTIGRvZXMgaXQgbWFyayB0aGUgY29ubmVjdGlvbiBhcyBpbnZhbGlkLCBsb2cgdGhlIGV2ZW50LCBvciBwb3NzaWJseSB0YWtlIG1vcmUgYWdncmVzc2l2ZSBhY3Rpb24gbGlrZSBkcm9wcGluZyB0aGUgb2ZmZW5kaW5nIHBhY2tldCBpbW1lZGlhdGVseT8gSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBlc3BlY2lhbGx5IGJ1ZmZlciBvdmVyZmxvd3Mgb3IgaW50ZWdlciBvdmVyZmxvd3MsIHRvIG1ha2Ugc3VyZSB0aGlzIGNvZGUgaXMgcm9idXN0IGFnYWluc3QgcG90ZW50aWFsIGF0dGFja3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA1OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE2MTpcdH1cbiAxNjI6XHRcbiAxNjM6XHRzdGF0aWMgaW50IG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoc3RydWN0IGJpdHN0ciAqYnMsIHNpemVfdCBieXRlcywgc2l6ZV90IGJpdHMpXG4gMTY0Olx0e1xuIDE2NTpcdFx0Yml0cyAmIzQzOz0gYnMtXHUwMDNlYml0O1xuIDE2NjpcdFx0Ynl0ZXMgJiM0Mzs9IGJpdHMgLyBCSVRTX1BFUl9CWVRFO1xuIDE2NzpcdFx0aWYgKGJpdHMgJSBCSVRTX1BFUl9CWVRFIFx1MDAzZSAwKVxuIDE2ODpcdFx0XHRieXRlcyYjNDM7JiM0Mzs7XG4gMTY5Olx0XG4gMTcwOlx0XHRpZiAoYnMtXHUwMDNlY3VyICYjNDM7IGJ5dGVzIFx1MDAzZSBicy1cdTAwM2VlbmQpXG4gMTcxOlx0XHRcdHJldHVybiAxO1xuIDE3MjpcdFxuIDE3MzpcdFx0cmV0dXJuIDA7XG4gMTc0Olx0fVxuIDE3NTpcdFxuIDE3NjpcdHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2JpdChzdHJ1Y3QgYml0c3RyICpicylcbiAxNzc6XHR7XG4gMTc4Olx0XHR1bnNpZ25lZCBpbnQgYiA9ICgqYnMtXHUwMDNlY3VyKSBcdTAwMjYgKDB4ODAgXHUwMDNlXHUwMDNlIGJzLVx1MDAzZWJpdCk7XG4gMTc5Olx0XG4gMTgwOlx0XHRJTkNfQklUKGJzKTtcbiAxODE6XHRcbiAxODI6XHRcdHJldHVybiBiO1xuIDE4MzpcdH1cbiAxODQ6XHRcbiAxODU6XHQvKiBBc3N1bWUgYiBcdTAwM2M9IDggKi9cbiAxODY6XHRzdGF0aWMgdW5zaWduZWQgaW50IGdldF9iaXRzKHN0cnVjdCBiaXRzdHIgKmJzLCB1bnNpZ25lZCBpbnQgYilcbiAxODc6XHR7XG4gMTg4Olx0XHR1bnNpZ25lZCBpbnQgdiwgbDtcbiAxODk6XHRcbiAxOTA6XHRcdHYgPSAoKmJzLVx1MDAzZWN1cikgXHUwMDI2ICgweGZmVSBcdTAwM2VcdTAwM2UgYnMtXHUwMDNlYml0KTtcbiAxOTE6XHRcdGwgPSBiICYjNDM7IGJzLVx1MDAzZWJpdDtcbiAxOTI6XHRcbiAxOTM6XHRcdGlmIChsIFx1MDAzYyA4KSB7XG4gMTk0Olx0XHRcdHYgXHUwMDNlXHUwMDNlPSA4IC0gbDtcbiAxOTU6XHRcdFx0YnMtXHUwMDNlYml0ID0gbDtcbiAxOTY6XHRcdH0gZWxzZSBpZiAobCA9PSA4KSB7XG4gMTk3Olx0XHRcdGJzLVx1MDAzZWN1ciYjNDM7JiM0Mzs7XG4gMTk4Olx0XHRcdGJzLVx1MDAzZWJpdCA9IDA7XG4gMTk5Olx0XHR9IGVsc2Uge1x0XHQvKiBsIFx1MDAzZSA4ICovXG4gMjAwOlx0XG4gMjAxOlx0XHRcdHYgXHUwMDNjXHUwMDNjPSA4O1xuIDIwMjpcdFx0XHR2ICYjNDM7PSAqKCYjNDM7JiM0Mzticy1cdTAwM2VjdXIpO1xuIDIwMzpcdFx0XHR2IFx1MDAzZVx1MDAzZT0gMTYgLSBsO1xuIDIwNDpcdFx0XHRicy1cdTAwM2ViaXQgPSBsIC0gODtcbiAyMDU6XHRcdH1cbiAyMDY6XHRcbiAyMDc6XHRcdHJldHVybiB2O1xuIDIwODpcdH1cbiAyMDk6XHRcbiAyMTA6XHQvKiBBc3N1bWUgYiBcdTAwM2M9IDMyICovXG4gMjExOlx0c3RhdGljIHVuc2lnbmVkIGludCBnZXRfYml0bWFwKHN0cnVjdCBiaXRzdHIgKmJzLCB1bnNpZ25lZCBpbnQgYilcbiAyMTI6XHR7XG4gMjEzOlx0XHR1bnNpZ25lZCBpbnQgdiwgbCwgc2hpZnQsIGJ5dGVzO1xuIDIxNDpcdFxuIDIxNTpcdFx0aWYgKCFiKVxuIDIxNjpcdFx0XHRyZXR1cm4gMDtcbiAyMTc6XHRcbiAyMTg6XHRcdGwgPSBicy1cdTAwM2ViaXQgJiM0MzsgYjtcbiAyMTk6XHRcbiAyMjA6XHRcdGlmIChsIFx1MDAzYyA4KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA1OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNTQKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiA1NzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgZGVjb2RlX2VudW1gIEZ1bmN0aW9uIGFuZCBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0aWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgYGRlY29kZV9lbnVtYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2UgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIGFueSBpc3N1ZXMuICBJdCBhcHBlYXJzIHRvIGJlIHBhcnQgb2YgdGhlIG5ldGZpbHRlciBILjMyMyBjb25udHJhY2sgaGVscGVyLCBkZWFsaW5nIHdpdGggQVNOLjEgZGVjb2RpbmcuIFRoZSBjb2RlIHNuaXBwZXQgc2hvd3MgYSBjcnVjaWFsIGltcHJvdmVtZW50LgoKUHJldmlvdXNseSwgaWYgYGYtJmd0O2F0dHIgJmFtcDsgRVhUYCB3YXMgdHJ1ZSwgdGhlIGZ1bmN0aW9uIHdvdWxkIGNhbGwgYGdldF9iaXQoYnMpYC4gRGl2aW5nIGludG8gYGdldF9iaXQoYnMpYCwgaXQgcGVyZm9ybXMgYSBiaXR3aXNlIG9wZXJhdGlvbiBvbiBgYnMtJmd0O2N1cmAgKHdoaWNoLCBiYXNlZCBvbiB0aGUgY29udGV4dCwgbGlrZWx5IHBvaW50cyB0byBhIGJ5dGUgd2l0aGluIHRoZSBwYWNrZXQgZGF0YSBidWZmZXIpIGFuZCBhZHZhbmNlcyB0aGUgYml0IHBvaW50ZXIuIFRoZSBjcml0aWNhbCB2dWxuZXJhYmlsaXR5IHN0ZW1tZWQgZnJvbSB0aGUgcG9zc2liaWxpdHkgdGhhdCBpZiBgYnMtJmd0O2N1cmAgd2FzIGVxdWFsIHRvIGBicy0mZ3Q7ZW5kYCwgdGhlbiBhIGRpcmVjdCBhY2Nlc3MgdG8gYCpicy0mZ3Q7Y3VyYCB3b3VsZCBjb25zdGl0dXRlIGFuIG91dC1vZi1ib3VuZHMgcmVhZC4gVGhpcyBtZWFucyB0aGUgY29kZSB3YXMgYXR0ZW1wdGluZyB0byByZWFkIGJleW9uZCB0aGUgYWxsb2NhdGVkIGJ1ZmZlciwgcHVsbGluZyBkYXRhIGZyb20gYW4gYXJlYSBpdCBzaG91bGRuJiMzOTt0IGFjY2Vzcy4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgb3V0LW9mLWJvdW5kcyByZWFkLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGEgY3Jhc2ggb3IsIHdvcnNlLCBpbmZvcm1hdGlvbiBsZWFrYWdlLgoKTm93LCB3aXRoIHRoZSBhZGRpdGlvbiBvZiBgaWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDEpKSByZXR1cm4gSDMyM19FUlJPUl9CT1VORDtgLCB0aGUgY29kZSBzZWVtcyB0byBjaGVjayBpZiBhdCBsZWFzdCBvbmUgYml0IGlzIHJlbWFpbmluZyBpbiB0aGUgYnVmZmVyIGJlZm9yZSBhdHRlbXB0aW5nIHRoZSByZWFkLiBUaGlzIGlzIGEgZ29vZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgbWVhc3VyZS4gIEl0IGFwcGVhcnMgdG8gcHJldmVudCB0aGUgb3V0LW9mLWJvdW5kcyByZWFkIHdoZW4gdGhlcmUgaXNuJiMzOTt0IGVub3VnaCBkYXRhLgoKTXkgbmV4dCBsaW5lIG9mIHRoaW5raW5nIGlzLCBldmVuIHRob3VnaCBpdCBmaXhlZCB0aGUgT09CLCB3aGF0IGFib3V0IHRoZSBuYXR1cmUgb2YgdGhlIGRhdGEgaW52b2x2ZWQ/ICBUaGVyZSYjMzk7cyBubyBpbmRpY2F0aW9uIGhlcmUgdGhhdCBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYWxsb2NhdGVkIG9yIHJlYWQuIFRoZSBidWZmZXIgYGJzYCBpcyB0aWVkIHRvIHRoZSBwYWNrZXQgcGF5bG9hZCBkYXRhIGZyb20gdGhlIHNrYiwgYmVpbmcgcGFyc2VkIGJ5IG5ldGZpbHRlci4gVGhpcyBtZWFucyB0aGUgbWVtb3J5IGlzICpleHBlY3RlZCogdG8gYmUgcG9wdWxhdGVkLCBzbyB0aGF0IHJ1bGVzIG91dCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gQnV0IHRoaXMgbWVhbnMgdGhlIGRhdGEgYmVpbmcgcmVhZCBoZXJlICppcyogdGhlIHBhY2tldCBkYXRhLCB3aGljaCBuZWVkcyB0byBiZSBwYXJzZWQgc2VjdXJlbHkgdG8gcHJldmVudCBhIG1pcy1pbnRlcnByZXRhdGlvbiBvZiB0aGUgcGFja2V0IChlLmcuIGludGVnZXIgb3ZlcmZsb3csIGV0YykuCgpUaGUgY29ycmVjdGlvbiBmb2N1c2VzIG9uIHByZXZlbnRpbmcgdGhlIE9PQiBpc3N1ZSwgc3BlY2lmaWNhbGx5IGJ5IGNoZWNraW5nIHRoZSBidWZmZXIgYm91bmRhcnkuIEhvd2V2ZXIsIGEgZnVsbCBzZWN1cml0eSBhc3Nlc3NtZW50IG5lY2Vzc2l0YXRlcyBleGFtaW5pbmcgb3RoZXIgYXNwZWN0cy4gSSBuZWVkIHRvIGxvb2sgYXQgaG93IGBkZWNvZGVfZW51bWAgaXMgY2FsbGVkIHdpdGhpbiB0aGUgbGFyZ2VyIGNvbnRleHQgYW5kIGFuYWx5emUgdGhlIHN0cnVjdHVyZSBvZiB0aGUgb3RoZXIgYGRlY29kZV8qYCBmdW5jdGlvbnMgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYC4gQXJlIHRoZXJlIHNpbWlsYXIgcGF0dGVybnM/IEFyZSB0aGVyZSBvdGhlciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gYnVmZmVyIHNpemVzLCBkYXRhIGludGVycHJldGF0aW9uLCBvciBlcnJvciBoYW5kbGluZz8gQSBjb21wcmVoZW5zaXZlIHJldmlldyBpcyBuZWVkZWQgdG8gY29uZmlybSB0aGUgb3ZlcmFsbCByb2J1c3RuZXNzIG9mIHRoZSBBU04uMSBkZWNvZGluZyB3aXRoaW4gdGhpcyBoZWxwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA1OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMyMDpcdFx0Y2FzZSBCWVRFOlx0XHQvKiBSYW5nZSA9PSAyNTYgKi9cbiAzMjE6XHRcdFx0QllURV9BTElHTihicyk7XG4gMzIyOlx0XHRcdGJzLVx1MDAzZWN1ciYjNDM7JiM0Mzs7XG4gMzIzOlx0XHRcdGJyZWFrO1xuIDMyNDpcdFx0Y2FzZSBXT1JEOlx0XHQvKiAyNTcgXHUwMDNjPSBSYW5nZSBcdTAwM2M9IDY0SyAqL1xuIDMyNTpcdFx0XHRCWVRFX0FMSUdOKGJzKTtcbiAzMjY6XHRcdFx0YnMtXHUwMDNlY3VyICYjNDM7PSAyO1xuIDMyNzpcdFx0XHRicmVhaztcbiAzMjg6XHRcdGNhc2UgQ09OUzpcdFx0LyogNjRLIFx1MDAzYyBSYW5nZSBcdTAwM2MgNEcgKi9cbiAzMjk6XHRcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDIpKVxuIDMzMDpcdFx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuIDMzMTpcdFx0XHRsZW4gPSBnZXRfYml0cyhicywgMikgJiM0MzsgMTtcbiAzMzI6XHRcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIGxlbiwgMCkpXG4gMzMzOlx0XHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4gMzM0Olx0XHRcdEJZVEVfQUxJR04oYnMpO1xuIDMzNTpcdFx0XHRpZiAoYmFzZSBcdTAwMjZcdTAwMjYgKGYtXHUwMDNlYXR0ciBcdTAwMjYgREVDT0RFKSkge1x0LyogdGltZVRvTGl2ZSAqL1xuIDMzNjpcdFx0XHRcdHVuc2lnbmVkIGludCB2ID0gZ2V0X3VpbnQoYnMsIGxlbikgJiM0MzsgZi1cdTAwM2VsYjtcbiAzMzc6XHRcdFx0XHRQUklOVChcJiMzNDsgPSAldVwmIzM0Oywgdik7XG4gMzM4Olx0XHRcdFx0KigodW5zaWduZWQgaW50ICopKGJhc2UgJiM0MzsgZi1cdTAwM2VvZmZzZXQpKSA9IHY7XG4gMzM5Olx0XHRcdH1cbiAzNDA6XHRcdFx0YnMtXHUwMDNlY3VyICYjNDM7PSBsZW47XG4gMzQxOlx0XHRcdGJyZWFrO1xuIDM0MjpcdFx0Y2FzZSBVTkNPOlxuIDM0MzpcdFx0XHRCWVRFX0FMSUdOKGJzKTtcbiAzNDQ6XHRcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDIsIDApKVxuIDM0NTpcdFx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuIDM0NjpcdFx0XHRsZW4gPSBnZXRfbGVuKGJzKTtcbiAzNDc6XHRcdFx0YnMtXHUwMDNlY3VyICYjNDM7PSBsZW47XG4gMzQ4Olx0XHRcdGJyZWFrO1xuIDM0OTpcdFx0ZGVmYXVsdDpcdFx0LyogMiBcdTAwM2M9IFJhbmdlIFx1MDAzYz0gMjU1ICovXG4gMzUwOlx0XHRcdElOQ19CSVRTKGJzLCBmLVx1MDAzZXN6KTtcbiAzNTE6XHRcdFx0YnJlYWs7XG4gMzUyOlx0XHR9XG4gMzUzOlx0XG4gMzU0Olx0XHRQUklOVChcJiMzNDtcXG5cJiMzNDspO1xuIDM1NTpcdFxuIDM1NjpcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDApKVxuIDM1NzpcdFx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbiAzNTg6XHRcdHJldHVybiBIMzIzX0VSUk9SX05PTkU7XG4gMzU5Olx0fVxuIDM2MDpcdFxuIDM2MTpcdHN0YXRpYyBpbnQgZGVjb2RlX2VudW0oc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuIDM2MjpcdCAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmFzZSwgaW50IGxldmVsKVxuIDM2MzpcdHtcbiAzNjQ6XHRcdFBSSU5UKFwmIzM0OyUqcyVzXFxuXCYjMzQ7LCBsZXZlbCAqIFRBQl9TSVpFLCBcJiMzNDsgXCYjMzQ7LCBmLVx1MDAzZW5hbWUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjgxCgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZSwgdXNpbmcgYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmU6CgoqKkRlYnVnZ2luZyB0aGUgYG5mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AgTW9kdWxlKioKCkFscmlnaHQsIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYG5mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AgbW9kdWxlIGFnYWluLiBUaW1lIHRvIGdldCBhIGdyaXAgb24gd2hhdCYjMzk7cyBnb2luZyBvbi4gRmlyc3QsIGJlZm9yZSBJIHN0YXJ0IHBva2luZyBhcm91bmQgd2l0aCBhIGRlYnVnZ2VyLCBJIG5lZWQgc29tZSBjb250ZXh0LiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBtb3N0IGVmZmljaWVudCB0aGluZyB0byBkbyByaWdodCBub3cgaXMgcHJvYmFibHkgdG8gc3RhcnQgd2l0aCB0aGUgY29tbWl0IGhpc3RvcnkuIEkmIzM5O2xsIG9wZW4gdXAgYGdpdCBsb2dgLCBmb2N1c2luZyBvbiB0aGlzIHNwZWNpZmljIGZpbGUsIG9yIGF0IGxlYXN0IGxvb2tpbmcgYXQgYW55IGNvbW1pdCBtZXNzYWdlcyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IGZvciB0aGlzIGFyZWEgb2YgdGhlIGNvZGUuCgpJIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgcmVjZW50IGNoYW5nZXMsIGJ1ZyBmaXhlcywgb3IgZXZlbiBqdXN0IGNvbW1lbnRzIHRoYXQgbWlnaHQgZ2l2ZSBtZSBhIGNsdWUgYWJvdXQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgb3Igd2hhdCBzb21lb25lIGVsc2Ugd2FzIHRoaW5raW5nIHdoZW4gdGhleSBsYXN0IHRvdWNoZWQgdGhpcy4gTWF5YmUgc29tZW9uZSBlbHNlIHdvcmtlZCBvbiBzb21lIHNpbWlsYXIgY29kZSBhbmQgSSBjYW4gZ2V0IGEgY2x1ZSB0aGVyZS4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBJIGFtIG5vdCBmYW1pbGlhciB3aXRoIHRoaXMgY29kZSBhbmQgbmVlZCB0byBrZWVwIGFuIG9wZW4gbWluZCBmb3IgYW55IHBvc3NpYmxlIGNhdXNlcy4KCklmIHRoYXQmIzM5O3Mgbm90IGZydWl0ZnVsLCBJIG1pZ2h0IGJyYW5jaCBvdXQgYW5kIGxvb2sgYXQgc2ltaWxhciBjb21taXRzIGluIHRoZSBzdXJyb3VuZGluZyBmaWxlcyBvciBldmVuIHdpdGhpbiB0aGUgY29ubnRyYWNrIGNvcmUgaXRzZWxmLiBTb21ldGltZXMsIHRoZSBmaXggb3IgdGhlIGludHJvZHVjdGlvbiBvZiBhIG5ldyBpc3N1ZSBtaWdodCBiZSB0YW5nZW50aWFsbHkgcmVsYXRlZC4gSSBhbSBjb25maWRlbnQgSSB3aWxsIGZpbmQgc29tZXRoaW5nIHRvIGdldCBtZSBnb2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDU6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfaDMyM19lcnJvcl9ib3VuZGFyeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTE0OD1zdGF0aWMgdW5zaWduZWQgaW50IGdldF9sZW4oc3RydWN0IGJpdHN0ciAqYnMpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTYyLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTYzOnN0YXRpYyBpbnQgbmZfaDMyM19lcnJvcl9ib3VuZGFyeShzdHJ1Y3QgYml0c3RyICpicywgc2l6ZV90IGJ5dGVzLCBzaXplX3QgYml0cylcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTE2NC17XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9MjgyPXN0YXRpYyBpbnQgZGVjb2RlX2Jvb2woc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTI4Ny1cdElOQ19CSVQoYnMpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6Mjg4Olx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDApKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMjg5LVx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz0yOTM9c3RhdGljIGludCBkZWNvZGVfb2lkKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0zMDAtXHRCWVRFX0FMSUdOKGJzKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjMwMTpcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAxLCAwKSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTMwMi1cdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMzA1LVx0YnMtXHUwMDNlY3VyICYjNDM7PSBsZW47XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzozMDY6XHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgMCkpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0zMDctXHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTMxMj1zdGF0aWMgaW50IGRlY29kZV9pbnQoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTMyOC1cdGNhc2UgQ09OUzpcdFx0LyogNjRLIFx1MDAzYyBSYW5nZSBcdTAwM2MgNEcgKi9cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjMyOTpcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDIpKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMzMwLVx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMzMxLVx0XHRsZW4gPSBnZXRfYml0cyhicywgMikgJiM0MzsgMTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjMzMjpcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIGxlbiwgMCkpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0zMzMtXHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMzQzLVx0XHRCWVRFX0FMSUdOKGJzKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjM0NDpcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDIsIDApKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMzQ1LVx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTM1NS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjM1NjpcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAwKSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTM1Ny1cdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9MzYxPXN0YXRpYyBpbnQgZGVjb2RlX2VudW0oc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTM2NS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjM2NjpcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAxKSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTM2Ny1cdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMzczLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6Mzc0Olx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDApKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMzc1LVx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz0zNzk9c3RhdGljIGludCBkZWNvZGVfYml0c3RyKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0zOTEtXHRjYXNlIFdPUkQ6XHRcdC8qIDItYnl0ZSBsZW5ndGggKi9cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjM5MjpcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDIsIDApKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMzkzLVx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTM5Ny1cdGNhc2UgU0VNSTpcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjM5ODpcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDIsIDApKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMzk5LVx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTQwOS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjQxMDpcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAwKSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTQxMS1cdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9NDE1PXN0YXRpYyBpbnQgZGVjb2RlX251bXN0cihzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNDIyLVx0LyogMiBcdTAwM2M9IFJhbmdlIFx1MDAzYz0gMjU1ICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo0MjM6XHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgZi1cdTAwM2VzeikpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy00MjQtXHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTQyOS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjQzMDpcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAwKSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTQzMS1cdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9NDM1PXN0YXRpYyBpbnQgZGVjb2RlX29jdHN0cihzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNDU1LVx0XHRCWVRFX0FMSUdOKGJzKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjQ1NjpcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDEsIDApKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNDU3LVx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTQ2MS1cdFx0QllURV9BTElHTihicyk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo0NjI6XHRcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAyLCAwKSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTQ2My1cdFx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy00NjYtXHRkZWZhdWx0Olx0XHQvKiAyIFx1MDAzYz0gUmFuZ2UgXHUwMDNjPSAyNTUgKi9cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjQ2NzpcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIGYtXHUwMDNlc3opKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNDY4LVx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTQ3Ny1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjQ3ODpcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAwKSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTQ3OS1cdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9NDgzPXN0YXRpYyBpbnQgZGVjb2RlX2JtcHN0cihzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNDkyLVx0XHRCWVRFX0FMSUdOKGJzKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjQ5MzpcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDEsIDApKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNDk0LVx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTQ5Ny1cdGRlZmF1bHQ6XHRcdC8qIDIgXHUwMDNjPSBSYW5nZSBcdTAwM2M9IDI1NSAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NDk4Olx0XHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgZi1cdTAwM2VzeikpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy00OTktXHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTA2LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NTA3Olx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDApKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTA4LVx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz01MTI9c3RhdGljIGludCBkZWNvZGVfc2VxKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy01MjUtXHQvKiBFeHRlbnNpYmxlPyAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NTI2Olx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDEpKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTI3LVx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy01MzAtXHQvKiBHZXQgZmllbGRzIGJpdG1hcCAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NTMxOlx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIGYtXHUwMDNlc3opKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTMyLVx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy01NTMtXHRcdGlmIChzb24tXHUwMDNlYXR0ciBcdTAwMjYgT1BFTikge1x0LyogT3BlbiBmaWVsZCAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NTU0Olx0XHRcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAyLCAwKSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTU1NS1cdFx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTU2LVx0XHRcdGxlbiA9IGdldF9sZW4oYnMpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NTU3Olx0XHRcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCBsZW4sIDApKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTU4LVx0XHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTg1LVx0LyogR2V0IHRoZSBleHRlbnNpb24gYml0bWFwICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo1ODY6XHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgNykpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy01ODctXHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTg4LVx0Ym1wMl9sZW4gPSBnZXRfYml0cyhicywgNykgJiM0MzsgMTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjU4OTpcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCBibXAyX2xlbikpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy01OTAtXHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTYwMi1cdFx0aWYgKGkgXHUwMDNlPSBmLVx1MDAzZXViKSB7XHQvKiBOZXdlciBWZXJzaW9uPyAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NjAzOlx0XHRcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAyLCAwKSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTYwNC1cdFx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNjA1LVx0XHRcdGxlbiA9IGdldF9sZW4oYnMpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NjA2Olx0XHRcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCBsZW4sIDApKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNjA3LVx0XHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNjIwLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NjIxOlx0XHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMiwgMCkpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy02MjItXHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy02MjMtXHRcdGxlbiA9IGdldF9sZW4oYnMpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NjI0Olx0XHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgbGVuLCAwKSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTYyNS1cdFx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz02NDU9c3RhdGljIGludCBkZWNvZGVfc2Vxb2Yoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTY2MS1cdFx0QllURV9BTElHTihicyk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo2NjI6XHRcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAxLCAwKSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTY2My1cdFx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy02NjctXHRcdEJZVEVfQUxJR04oYnMpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NjY4Olx0XHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMiwgMCkpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy02NjktXHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNjc1LVx0XHRCWVRFX0FMSUdOKGJzKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjY3NjpcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDIsIDApKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNjc3LVx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTY4MC1cdGRlZmF1bHQ6XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo2ODE6XHRcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCBmLVx1MDAzZXN6KSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTY4Mi1cdFx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03MDEtXHRcdFx0QllURV9BTElHTihicyk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo3MDI6XHRcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDIsIDApKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzAzLVx0XHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03MDQtXHRcdFx0bGVuID0gZ2V0X2xlbihicyk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo3MDU6XHRcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIGxlbiwgMCkpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03MDYtXHRcdFx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz03NDE9c3RhdGljIGludCBkZWNvZGVfY2hvaWNlKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03NTQtXHQvKiBEZWNvZGUgdGhlIGNob2ljZSBpbmRleCBudW1iZXIgKi9cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjc1NTpcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAxKSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTc1Ni1cdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzU4LVx0XHRleHQgPSAxO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NzU5Olx0XHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgNykpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03NjAtXHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzYzLVx0XHRleHQgPSAwO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NzY0Olx0XHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgZi1cdTAwM2VzeikpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03NjUtXHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzc3LVx0XHRCWVRFX0FMSUdOKGJzKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjc3ODpcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDIsIDApKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzc5LVx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzgwLVx0XHRsZW4gPSBnZXRfbGVuKGJzKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjc4MTpcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIGxlbiwgMCkpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03ODItXHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzk1LVx0XHRCWVRFX0FMSUdOKGJzKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjc5NjpcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDIsIDApKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzk3LVx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzk4LVx0XHRsZW4gPSBnZXRfbGVuKGJzKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjc5OTpcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIGxlbiwgMCkpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04MDAtXHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA1OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NjUyCgkJCQkJCQlvdXRwdXQ6IDE3NAoJCQkJCQkJdGhvdWdodHM6IDI4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlIENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgb3ZlciB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBmaXguIEl0IGxvb2tzIGxpa2UgdGhlIG90aGVyIGRlY29kaW5nIGZ1bmN0aW9ucywgbGlrZSBgZGVjb2RlX2Nob2ljZWAgYW5kIGBkZWNvZGVfc2VxYCwgYWxsIGluY2x1ZGUgYSBib3VuZGFyeSBjaGVjayB3aXRoIGBuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAxKWAgKmJlZm9yZSogYWNjZXNzaW5nIGJpdHMgd2l0aCBgZ2V0X2JpdChicylgIG9yIGNoZWNraW5nIGV4dGVuc2libGUgYml0cy4gVGhlIHByb2JsZW0gd2FzIHRoYXQgYGRlY29kZV9lbnVtYCB3YXMgbWlzc2luZyB0aGF0IGNydWNpYWwgYm91bmRhcnkgY2hlY2suIFRoaXMgcGF0Y2ggc2ltcGx5IGFkZHMgaXQgaW4uIEVzc2VudGlhbGx5LCB0aGlzIGlzIGEgc2FmZXR5IG5ldCB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMsIGFuIE9PQiByZWFkIHZ1bG5lcmFiaWxpdHkuCgpOb3csIGxldCYjMzk7cyB0aGluayBhYm91dCB3aGV0aGVyIHdlIG5lZWQgdG8gYnJpbmcgaW4gdGhlIEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyIChLTVNBTikgZm9yIHRoaXMuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0JiMzOTtzIHVubmVjZXNzYXJ5LCBidXQgbGV0JiMzOTtzIGJyZWFrIGl0IGRvd246CgoqICAgKipLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZT8qKiBOb3BlLCBub3QgcmVsZXZhbnQgaGVyZS4gVGhpcyBwYXRjaCBpc24mIzM5O3QgdG91Y2hpbmcgdGhhdC4KKiAgICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/KiogTm8sIG5vdGhpbmcgbGlrZSB0aGF0LgoqICAgKipBbGxvY2F0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHM/KiogQWxzbyBuby4KKiAgICoqQ2hhbmdlZCBib3VuZHMgY2hlY2tzIGxlYWRpbmcgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzPyoqIFdlbGwsIHllcyBhbmQgbm8uIEl0ICppcyogY2hhbmdpbmcgYm91bmRzIGNoZWNrcywgYnV0IGl0JiMzOTtzICphZGRpbmcqIGEgY2hlY2sgdG8gKnByZXZlbnQqIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBvZiB0aGUgbmV0d29yayBza2IgcGF5bG9hZCwgbm90IGVuYWJsaW5nIG9uZS4KKiAgICoqT3V0LW9mLWJvdW5kcyByZWFkcyBkaXJlY3RseSBkZXRlY3RhYmxlIGJ5IEtBU0FOPyoqIFllcywgZXhhY3RseSEgS0FTQU4gaXMgcGVyZmVjdGx5IHN1aXRlZCB0byBoYW5kbGUgdGhpcyB0eXBlIG9mIGlzc3VlLgoKR2l2ZW4gYWxsIG9mIHRoYXQsIGl0IHNlZW1zIGNsZWFyIHRoYXQgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC4KCkp1c3QgdG8gYmUgdGhvcm91Z2gsIGxldCYjMzk7cyB2ZXJpZnkgdGhlIHNldC1yZXN1bHRzIHBhcmFtZXRlcnM6Ck5lZWRzS01TQU46IGZhbHNlCktNU0FOUmVhc29uaW5nOiBEZXRhaWxlZCBleHBsYW5hdGlvbiBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTi4KCk9rYXksIGFsbCBjaGVja3Mgb3V0LiBOb3cgSSBjYW4gY29uZmlkZW50bHkgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbWlzc2luZyBib3VuZGFyeSBjaGVjayBgbmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgMSlgIHRvIGBkZWNvZGVfZW51bSgpYCBiZWZvcmUgcmVhZGluZyBhIGJpdCBmcm9tIHRoZSBBU04uMSBiaXRzdHJlYW0uIFByaW9yIHRvIHRoaXMgZml4LCBpZiBgYnMtXHUwMDNlY3VyYCB3YXMgYXQgYGJzLVx1MDAzZWVuZGAsIGBnZXRfYml0KGJzKWAgd291bGQgcGVyZm9ybSBhbiBvdXQtb2YtYm91bmRzIHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBwYWNrZXQgZGF0YSBidWZmZXIuIFxuXG5PdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyBhcmUgbWVtb3J5IHNhZmV0eSB2aW9sYXRpb25zIGRpcmVjdGx5IGNhdWdodCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgcGFkZGluZyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG1pc3NpbmcgYm91bmRhcnkgY2hlY2sgYG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDEpYCB0byBgZGVjb2RlX2VudW0oKWAgYmVmb3JlIHJlYWRpbmcgYSBiaXQgZnJvbSB0aGUgQVNOLjEgYml0c3RyZWFtLiBQcmlvciB0byB0aGlzIGZpeCwgaWYgYGJzLVx1MDAzZWN1cmAgd2FzIGF0IGBicy1cdTAwM2VlbmRgLCBgZ2V0X2JpdChicylgIHdvdWxkIHBlcmZvcm0gYW4gb3V0LW9mLWJvdW5kcyByZWFkIHBhc3QgdGhlIGVuZCBvZiB0aGUgcGFja2V0IGRhdGEgYnVmZmVyLiBcblxuT3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgYXJlIG1lbW9yeSBzYWZldHkgdmlvbGF0aW9ucyBkaXJlY3RseSBjYXVnaHQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgc3RydWN0dXJlIHBhZGRpbmcgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDdUMDU6NDU6MjAuNzAwODA0Nzc4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg3NTM1Mjk1ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfSDMyM1wiLFxuICAgIFwiTkVURklMVEVSX0FEVkFOQ0VEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGVjb2RlX2VudW1cIixcbiAgICBcIkRlY29kZVJhc01lc3NhZ2VcIixcbiAgICBcIkRlY29kZVE5MzFcIixcbiAgICBcIkRlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZVwiLFxuICAgIFwicmFzX2hlbHBcIixcbiAgICBcInE5MzFfaGVscFwiLFxuICAgIFwiaDI0NV9oZWxwXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbWlzc2luZyBib3VuZGFyeSBjaGVjayBgbmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgMSlgIHRvIGBkZWNvZGVfZW51bSgpYCBiZWZvcmUgcmVhZGluZyBhIGJpdCBmcm9tIHRoZSBBU04uMSBiaXRzdHJlYW0uIFByaW9yIHRvIHRoaXMgZml4LCBpZiBgYnMtXFx1MDAzZWN1cmAgd2FzIGF0IGBicy1cXHUwMDNlZW5kYCwgYGdldF9iaXQoYnMpYCB3b3VsZCBwZXJmb3JtIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIHBhY2tldCBkYXRhIGJ1ZmZlci4gXFxuXFxuT3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgYXJlIG1lbW9yeSBzYWZldHkgdmlvbGF0aW9ucyBkaXJlY3RseSBjYXVnaHQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgc3RydWN0dXJlIHBhZGRpbmcgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbWlzc2luZyBib3VuZGFyeSBjaGVjayBpbiBkZWNvZGVfZW51bSgpIGluIHRoZSBOZXRmaWx0ZXIgSC4zMjMgY29ubmVjdGlvbiB0cmFja2luZyBBU04uMSBkZWNvZGVyIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgd2hlbiByZWFkaW5nIGJpdHMgZnJvbSBtYWxmb3JtZWQgcGFja2V0cy4gVGhpcyBpcyByZWFjaGFibGUgdmlhIG5ldHdvcmsgcGFja2V0IHByb2Nlc3NpbmcgaGFuZGxlZCBieSB0aGUgSC4zMjMgY29ubnRyYWNrIGhlbHBlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDU6NDU6MjAuNzAwODA5OTk4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDY4NTYyMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5ODE5OGQ2ODNlZjRjODI2NDczNDBlMDRhODRhZTY0OGVjY2ExNzgwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDcgMDU6NDU6MTkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY1xcbmluZGV4IDY4MzBjOWRhMzUwN2MuLmJhNmNlMWYwNGUxZWQgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY1xcbkBAIC0zNjMsNiArMzYzLDggQEAgc3RhdGljIGludCBkZWNvZGVfZW51bShzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXFxuIHtcXG4gXFx0UFJJTlQoXFxcIiUqcyVzXFxcXG5cXFwiLCBsZXZlbCAqIFRBQl9TSVpFLCBcXFwiIFxcXCIsIGYtXFx1MDAzZW5hbWUpO1xcbiBcXG4rXFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDEpKVxcbitcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4gXFx0aWYgKChmLVxcdTAwM2VhdHRyIFxcdTAwMjYgRVhUKSBcXHUwMDI2XFx1MDAyNiBnZXRfYml0KGJzKSkge1xcbiBcXHRcXHRJTkNfQklUUyhicywgNyk7XFxuIFxcdH0gZWxzZSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA1OjQ1OjIxLjIwODQ3NzI2OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTI5ODk1MDM2MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfSDMyM1wiLFxuICAgIFwiTkVURklMVEVSX0FEVkFOQ0VEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGVjb2RlX2VudW1cIixcbiAgICBcIkRlY29kZVJhc01lc3NhZ2VcIixcbiAgICBcIkRlY29kZVE5MzFcIixcbiAgICBcIkRlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZVwiLFxuICAgIFwicmFzX2hlbHBcIixcbiAgICBcInE5MzFfaGVscFwiLFxuICAgIFwiaDI0NV9oZWxwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG1pc3NpbmcgYm91bmRhcnkgY2hlY2sgaW4gZGVjb2RlX2VudW0oKSBpbiB0aGUgTmV0ZmlsdGVyIEguMzIzIGNvbm5lY3Rpb24gdHJhY2tpbmcgQVNOLjEgZGVjb2RlciB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzIHdoZW4gcmVhZGluZyBiaXRzIGZyb20gbWFsZm9ybWVkIHBhY2tldHMuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBuZXR3b3JrIHBhY2tldCBwcm9jZXNzaW5nIGhhbmRsZWQgYnkgdGhlIEguMzIzIGNvbm50cmFjayBoZWxwZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTgxOThkNjgzZWY0YzgyNjQ3MzQwZTA0YTg0YWU2NDhlY2NhMTc4MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMDU6NDU6MTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jXG5pbmRleCA2ODMwYzlkYTM1MDdjLi5iYTZjZTFmMDRlMWVkIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jXG5AQCAtMzYzLDYgKzM2Myw4IEBAIHN0YXRpYyBpbnQgZGVjb2RlX2VudW0oc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuIHtcbiBcdFBSSU5UKFwiJSpzJXNcXG5cIiwgbGV2ZWwgKiBUQUJfU0laRSwgXCIgXCIsIGYtXHUwMDNlbmFtZSk7XG4gXG4rXHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgMSkpXG4rXHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuIFx0aWYgKChmLVx1MDAzZWF0dHIgXHUwMDI2IEVYVCkgXHUwMDI2XHUwMDI2IGdldF9iaXQoYnMpKSB7XG4gXHRcdElOQ19CSVRTKGJzLCA3KTtcbiBcdH0gZWxzZSB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNTo0NToyMS4yMDg0Nzg2NTlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTg1OTUzMTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEguMzIzIENvbm5lY3Rpb24gVHJhY2tpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyB0b3VjaGluZyBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgY2hhbmdlcyB0byBzZWUgd2hhdCdzIGJlaW5nIHR3ZWFrZWQgaW4gdGhlIEguMzIzIEFTTi4xIGRlY29kZXIuIEkgc2VlIHRoZSBkaWZmIGludHJvZHVjZXMgYSBuZXcgY2hlY2sgd2l0aGluIHRoZSBgZGVjb2RlX2VudW1gIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGEgY2FsbCB0byBgbmZfaDMyM19lcnJvcl9ib3VuZGFyeWAgaXMgYWRkZWQgYmVmb3JlIHRoZSBoYW5kbGluZyBvZiB0aGUgYEVYVGAgYXR0cmlidXRlLiBJbnRyaWd1aW5nLi4uIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgaGVyZS5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGdldCB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgY2hhbmdlLiBJJ2xsIHJlYWQgdGhlIGNvZGUgYXJvdW5kIGxpbmUgMzYzIHRvIGdldCB0aGUgZnVuY3Rpb24ncyBzdXJyb3VuZGluZ3MgYW5kIGl0cyBvdmVyYWxsIHB1cnBvc2UuIFRoZW4sIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgY2FsbGVyIGZ1bmN0aW9ucyB0byBzZWUgd2hlcmUgYGRlY29kZV9lbnVtYCBpcyB1c2VkIGFuZCBob3cgdGhpcyBuZXcgY2hlY2sgd2lsbCBpbXBhY3QgdGhvc2UgZmxvd3MuIEZpbmFsbHksIEknbGwgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIHRvIGRldGVybWluZSBpZiB0aGlzIGNvZGUgaXMgZXZlbiBlbmFibGVkIGluIHRoZSBzeXN0ZW0gSSdtIGludGVyZXN0ZWQgaW4uIFRoaXMgd2lsbCBnaXZlIG1lIGEgcHJvcGVyIGNvbnRleHQgYXJvdW5kIHRoZSBmdW5jdGlvbiBpbiBnZW5lcmFsIGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkyNywiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA1OjQ1OjI1LjE5NDQzMzkzM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2NzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM1MDpcXHRcXHRcXHRJTkNfQklUUyhicywgZi1cXHUwMDNlc3opO1xcbiAzNTE6XFx0XFx0XFx0YnJlYWs7XFxuIDM1MjpcXHRcXHR9XFxuIDM1MzpcXHRcXG4gMzU0OlxcdFxcdFBSSU5UKFxcXCJcXFxcblxcXCIpO1xcbiAzNTU6XFx0XFxuIDM1NjpcXHRcXHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgMCkpXFxuIDM1NzpcXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4gMzU4OlxcdFxcdHJldHVybiBIMzIzX0VSUk9SX05PTkU7XFxuIDM1OTpcXHR9XFxuIDM2MDpcXHRcXG4gMzYxOlxcdHN0YXRpYyBpbnQgZGVjb2RlX2VudW0oc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxcbiAzNjI6XFx0ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXFxuIDM2MzpcXHR7XFxuIDM2NDpcXHRcXHRQUklOVChcXFwiJSpzJXNcXFxcblxcXCIsIGxldmVsICogVEFCX1NJWkUsIFxcXCIgXFxcIiwgZi1cXHUwMDNlbmFtZSk7XFxuIDM2NTpcXHRcXG4gMzY2OlxcdFxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAxKSlcXG4gMzY3OlxcdFxcdFxcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xcbiAzNjg6XFx0XFx0aWYgKChmLVxcdTAwM2VhdHRyIFxcdTAwMjYgRVhUKSBcXHUwMDI2XFx1MDAyNiBnZXRfYml0KGJzKSkge1xcbiAzNjk6XFx0XFx0XFx0SU5DX0JJVFMoYnMsIDcpO1xcbiAzNzA6XFx0XFx0fSBlbHNlIHtcXG4gMzcxOlxcdFxcdFxcdElOQ19CSVRTKGJzLCBmLVxcdTAwM2Vzeik7XFxuIDM3MjpcXHRcXHR9XFxuIDM3MzpcXHRcXG4gMzc0OlxcdFxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAwKSlcXG4gMzc1OlxcdFxcdFxcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xcbiAzNzY6XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfTk9ORTtcXG4gMzc3OlxcdH1cXG4gMzc4OlxcdFxcbiAzNzk6XFx0c3RhdGljIGludCBkZWNvZGVfYml0c3RyKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG4gMzgwOlxcdCAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXFxuIDM4MTpcXHR7XFxuIDM4MjpcXHRcXHR1bnNpZ25lZCBpbnQgbGVuO1xcbiAzODM6XFx0XFxuIDM4NDpcXHRcXHRQUklOVChcXFwiJSpzJXNcXFxcblxcXCIsIGxldmVsICogVEFCX1NJWkUsIFxcXCIgXFxcIiwgZi1cXHUwMDNlbmFtZSk7XFxuIDM4NTpcXHRcXG4gMzg2OlxcdFxcdEJZVEVfQUxJR04oYnMpO1xcbiAzODc6XFx0XFx0c3dpdGNoIChmLVxcdTAwM2Vzeikge1xcbiAzODg6XFx0XFx0Y2FzZSBGSVhEOlxcdFxcdC8qIGZpeGVkIGxlbmd0aCBcXHUwMDNlIDE2ICovXFxuIDM4OTpcXHRcXHRcXHRsZW4gPSBmLVxcdTAwM2VsYjtcXG4gMzkwOlxcdFxcdFxcdGJyZWFrO1xcbiAzOTE6XFx0XFx0Y2FzZSBXT1JEOlxcdFxcdC8qIDItYnl0ZSBsZW5ndGggKi9cXG4gMzkyOlxcdFxcdFxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAyLCAwKSlcXG4gMzkzOlxcdFxcdFxcdFxcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xcbiAzOTQ6XFx0XFx0XFx0bGVuID0gKCpicy1cXHUwMDNlY3VyKyspIFxcdTAwM2NcXHUwMDNjIDg7XFxuIDM5NTpcXHRcXHRcXHRsZW4gKz0gKCpicy1cXHUwMDNlY3VyKyspICsgZi1cXHUwMDNlbGI7XFxuIDM5NjpcXHRcXHRcXHRicmVhaztcXG4gMzk3OlxcdFxcdGNhc2UgU0VNSTpcXG4gMzk4OlxcdFxcdFxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAyLCAwKSlcXG4gMzk5OlxcdFxcdFxcdFxcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNTo0NToyNS4xOTQ1MzI4NDNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTI1NTUyNjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gZXhhbWluaW5nIHRoZSBgbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYCBjb2RlLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIE1ha2VmaWxlIGFuZCBLY29uZmlnOlxuXG4qKkRlZXAgRGl2ZTogYG5mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AgYW5kIGl0cyBCdWlsZCBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIEguMzIzIEFTTi4xIG1vZHVsZSBmaXRzIGludG8gdGhlIGJyb2FkZXIgbmV0ZmlsdGVyIGZyYW1ld29yay4gRmlyc3QsIHRoZSBNYWtlZmlsZS4gSSdtIGxvb2tpbmcgZm9yIHRoZSBidWlsZCBydWxlcywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHNwZWNpYWwgZmxhZ3Mgb3IgaW5jbHVkZXMgcmVsZXZhbnQgdG8gdGhpcyBzcGVjaWZpYyBmaWxlLiBJJ2xsIGJlIGNoZWNraW5nIHRvIHNlZSB3aGF0IG90aGVyIG1vZHVsZXMgb3IgbGlicmFyaWVzIGl0IGxpbmtzIGFnYWluc3QsIGFuZCBob3cgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gZGV0ZXJtaW5lcyB3aGVuIGFuZCBob3cgdG8gY29tcGlsZSBpdC4gQXJlIHRoZXJlIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzIHRoYXQgbWlnaHQgY29udHJvbCBpdHMgaW5jbHVzaW9uIGJhc2VkIG9uIGtlcm5lbCBjb25maWd1cmF0aW9uPyBBcmUgdGhlcmUgYW55IG1vZHVsZS1zcGVjaWZpYyBvcHRpb25zP1xuXG5Ob3csIHRoZSBLY29uZmlnIGZpbGUuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgaW50ZXJlc3Rpbmcgc3R1ZmYgaXMuIEkgd2FudCB0byBzZWUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGNvbnRyb2wgdGhlIGluY2x1c2lvbiBvZiB0aGlzIG1vZHVsZSBpbiB0aGUga2VybmVsLiBXaGF0IGRlcGVuZGVuY2llcyBhcmUgc3BlY2lmaWVkPyBEb2VzIGl0IGRlcGVuZCBvbiBvdGhlciBuZXRmaWx0ZXIgY29tcG9uZW50cyBiZWluZyBlbmFibGVkPyBXaGF0J3MgdGhlIGRlZmF1bHQgc3RhdGUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIChidWlsdC1pbiwgbW9kdWxhciwgb3IgZGlzYWJsZWQpPyBBcmUgdGhlcmUgYW55IGhlbHAgdGV4dHMgb3IgZGVzY3JpcHRpb25zIHRoYXQgZ2l2ZSBjbHVlcyBhYm91dCB0aGUgcHVycG9zZSBvZiB0aGlzIG1vZHVsZSBhbmQgdGhlIHNjZW5hcmlvcyB3aGVyZSBpdCBzaG91bGQgYmUgZW5hYmxlZD8gU3BlY2lmaWNhbGx5LCBJJ20gY2hlY2tpbmcgZm9yIGRlcGVuZGVuY2llcyBvbiBBU04uMSBwYXJzaW5nIGxpYnJhcmllcywgb3RoZXIgSC4zMjMtcmVsYXRlZCBtb2R1bGVzLCBvciBhbnl0aGluZyB0aGF0IHdvdWxkIGluZGljYXRlIGhvdyBkZWVwbHkgaW50ZWdyYXRlZCBpdCBpcyB3aXRoaW4gdGhlIG92ZXJhbGwgY29ubnRyYWNrIGltcGxlbWVudGF0aW9uIGZvciBILjMyMy4gSSdtIGFsc28gZ29pbmcgdG8gY2hlY2sgZm9yIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIHdpdGggb3RoZXIgbW9kdWxlcywgYXMgd2VsbCBhcyBhbnkgZGVwZW5kZW5jaWVzIG9uIHVzZXItc3BhY2UgYXBwbGljYXRpb25zIG9yIGxpYnJhcmllcyB0aGF0IG1pZ2h0IGJlIHJlcXVpcmVkLiBJJ20gYWxzbyBsb29raW5nIGZvciBhbnkgc3BlY2lmaWMgaGFyZHdhcmUgcmVxdWlyZW1lbnRzIG9yIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zIHRoYXQgbWlnaHQgaW5mbHVlbmNlIGl0cyBjb25maWd1cmF0aW9uLiBCeSB1bmRlcnN0YW5kaW5nIHRoZSBLY29uZmlnIG9wdGlvbnMsIEkgY2FuIGZpZ3VyZSBvdXQgdGhlIGludGVuZGVkIHVzZSBjYXNlcyBmb3IgdGhpcyBtb2R1bGUgYW5kIGhvdyB0byBwcm9wZXJseSBlbmFibGUgb3IgZGlzYWJsZSBpdCBmb3IgZGlmZmVyZW50IGtlcm5lbCBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM2MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDU6NDU6MjguMTIwMDg4NTQ0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MTc4NTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Nvbm50cmFja19oMzIzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZT0zOT1vYmotJChDT05GSUdfTkZfQ1RfTkVUTElOS19IRUxQRVIpICs9IG5mbmV0bGlua19jdGhlbHBlci5vXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTQxLSMgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJzXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo0MjpuZl9jb25udHJhY2tfaDMyMy1vYmpzIDo9IG5mX2Nvbm50cmFja19oMzIzX21haW4ubyBuZl9jb25udHJhY2tfaDMyM19hc24xLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTQzLVxcbi0tXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZT00NT1vYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX0ZUUCkgKz0gbmZfY29ubnRyYWNrX2Z0cC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo0NjpvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX0gzMjMpICs9IG5mX2Nvbm50cmFja19oMzIzLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTQ3LW9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfSVJDKSArPSBuZl9jb25udHJhY2tfaXJjLm9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTE0LSNlbmRpZlxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjE1OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5oXFx1MDAzZVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTE2LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9MTIzPXN0YXRpYyBjb25zdCBkZWNvZGVyX3QgRGVjb2RlcnNbXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTE0MC0gKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxNDE6I2luY2x1ZGUgXFxcIm5mX2Nvbm50cmFja19oMzIzX3R5cGVzLmNcXFwiXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTQyLVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMzUtI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3pvbmVzLmhcXHUwMDNlXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MzY6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyMy5oXFx1MDAzZVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTM3LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9MTc1NT1zdGF0aWMgdm9pZCBfX2V4aXQgaDMyM19oZWxwZXJfZXhpdCh2b2lkKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTc2My1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxNzY0OnN0YXRpYyB2b2lkIF9fZXhpdCBuZl9jb25udHJhY2tfaDMyM19maW5pKHZvaWQpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTc2NS17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNzcwLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjE3NzE6c3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX2gzMjNfaW5pdCh2b2lkKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3NzIte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTc4OS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxNzkwOm1vZHVsZV9pbml0KG5mX2Nvbm50cmFja19oMzIzX2luaXQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjE3OTE6bW9kdWxlX2V4aXQobmZfY29ubnRyYWNrX2gzMjNfZmluaSk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTc5Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDU6NDU6MjguMTc5Mjc0NjkzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDE2NTMzMDQ0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIHlvdXIgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byBLY29uZmlnIGZvciBILjMyMyBDb25uZWN0aW9uIFRyYWNraW5nKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIEtjb25maWcgZW50cmllcyByZWxhdGVkIHRvIGBORl9DT05OVFJBQ0tfSDMyM2AuIFRoaXMgaXNuJ3QganVzdCBhIHNpbXBsZSBrZXl3b3JkIHNlYXJjaCwgdGhvdWdoLiBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBzdHJ1Y3R1cmVkIHdpdGhpbiB0aGUgb3ZlcmFsbCBOZXRmaWx0ZXIgZnJhbWV3b3JrLiBXaGVyZSB3b3VsZCBJICpleHBlY3QqIHRvIGZpbmQgaXQ/IExpa2VseSB1bmRlciBjb25uZWN0aW9uIHRyYWNraW5nLCBuYXR1cmFsbHkuIEJ1dCBpcyBpdCBhIHRvcC1sZXZlbCBvcHRpb24sIG9yIGlzIGl0IG5lc3RlZCB3aXRoaW4gYSBtb3JlIGdlbmVyYWwgSC4zMjMgc3VwcG9ydCBtb2R1bGU/IEFyZSB0aGVyZSBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGNvbnNpZGVyPyBGb3IgZXhhbXBsZSwgaXMgdGhlcmUgYSBnZW5lcmFsIHNldHRpbmcgZm9yIGVuYWJsaW5nIE5ldGZpbHRlcidzIGNvbm5lY3Rpb24gdHJhY2tpbmcgdGhhdCBuZWVkcyB0byBiZSBlbmFibGVkIGJlZm9yZSBJIGNhbiBzZWUgdGhpcyBILjMyMyBzcGVjaWZpYyBvcHRpb24/IEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCBhIGdyZXAgYWNyb3NzIHRoZSBLY29uZmlnIGZpbGVzLCBidXQgSSdsbCBuZWVkIHRvIGJlIG1pbmRmdWwgb2YgcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBjaGVjayBmb3IgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBjb21tZW50cyB0b28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3OTMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNTo0NTozMi4zNDQ2MDc3MDRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA1NTY5NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkZfQ09OTlRSQUNLX0gzMjNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0yMjc9Y29uZmlnIE5GX0NPTk5UUkFDS19GVFBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMzgtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjIzOTpjb25maWcgTkZfQ09OTlRSQUNLX0gzMjNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjQwLVxcdHRyaXN0YXRlIFxcXCJILjMyMyBwcm90b2NvbCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNTo0NTozMi4zOTUxOTM4MTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTMxMzYwNzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgTkZfQ09OTlRSQUNLX0gzMjMgS2NvbmZpZyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmb3IgYE5GX0NPTk5UUkFDS19IMzIzYC4gTXkgaW5pdGlhbCBmb2N1cywgYXMgYWx3YXlzLCBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMuIFdoYXQgb3RoZXIgbW9kdWxlcyBvciBmZWF0dXJlcyBpcyB0aGlzIGNvbm5lY3RlZCB0bz8gSSdsbCBiZSBsb29raW5nIGZvciBgZGVwZW5kcyBvbmAsIGBzZWxlY3RgLCBhbmQgcG90ZW50aWFsbHkgYGltcGx5YCBzdGF0ZW1lbnRzLiBJIHdhbnQgdG8gYnVpbGQgYSBxdWljayBtZW50YWwgbWFwIG9mIGl0cyBwbGFjZSBpbiB0aGUgb3ZlcmFsbCBuZXRmaWx0ZXIgYW5kIGNvbm5lY3Rpb24gdHJhY2tpbmcgYXJjaGl0ZWN0dXJlLlxuXG5UaGVuLCBJJ20gY2hlY2tpbmcgdGhlIGhlbHAgdGV4dC4gRG9lcyBpdCBjbGVhcmx5IGV4cGxhaW4gdGhlIHJvbGUgb2YgdGhpcyBtb2R1bGU/IElzIGl0IHNwZWNpZmljIGFib3V0IHRoZSBILjMyMyBwcm90b2NvbCBhc3BlY3RzIGl0IGNvdmVycz8gQSBjb25jaXNlIGRlc2NyaXB0aW9uIGlzIGtleS4gSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgc3VwcG9ydGVkIEguMzIzIHNpZ25hbGluZyBwcm90b2NvbHMsIGxpa2UgSC4yMjUsIEguMjQ1LCBvciBwZXJoYXBzIGV2ZW4gbmV3ZXIgYWRkaXRpb25zIGlmIHRoaXMgY29uZmlnIGlzIHJlY2VudC4gQW55IG1lbnRpb24gb2YgTkFUIHRyYXZlcnNhbCBvciBTSVAvSC4zMjMgaW50ZXJ3b3JraW5nIGlzIGFsd2F5cyBvZiBwYXJ0aWN1bGFyIGludGVyZXN0LlxuXG5OZXh0LCBJJ2xsIHNjYW4gZm9yIGFueSBkZWZhdWx0IHNldHRpbmdzLiBJcyBpdCBlbmFibGVkIGJ5IGRlZmF1bHQsIG9yIGlzIGl0IGEgbW9kdWxhciBmZWF0dXJlPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBkZWZhdWx0PyBEb2VzIGl0IHByb3ZpZGUgYW55IGhpbnRzIGFib3V0IHRoZSB1c2UgY2FzZXMgdGhlIGtlcm5lbCBkZXZlbG9wZXJzIGhhZCBpbiBtaW5kPyBBbnkgcmVsZXZhbnQgdHJpc3RhdGUgdmFsdWVzIG9yIGNvbmZpZyBvcHRpb25zIHdpbGwgYmUgY2FyZWZ1bGx5IGNvbnNpZGVyZWQuXG5cbkZpbmFsbHksIEknbGwgbWVudGFsbHkgY29tcGFyZSB0aGlzIHdpdGggbXkgZXhpc3Rpbmcga25vd2xlZGdlIG9mIG90aGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgbW9kdWxlcy4gRG9lcyB0aGlzIEtjb25maWcgc2VlbSBjb21wbGV0ZSBpbiBzY29wZSwgb3IgYXJlIHRoZXJlIGFzcGVjdHMgSSdkIGV4cGVjdCB0byBzZWUsIGJ1dCBhcmUgbWlzc2luZz8gRG9lcyB0aGlzIGNvbmZpZ3VyYXRpb24gcmVmbGVjdCB0aGUgY3VycmVudCBzdGF0ZSBvZiBILjMyMyBzdXBwb3J0IGluIHRoZSBrZXJuZWwsIG9yIGlzIGl0IHBvdGVudGlhbGx5IGFuIGFyZWEgZm9yIGZ1dHVyZSB3b3JrPyBBbnkgaW5jb25zaXN0ZW5jaWVzIHdvdWxkIHByb21wdCBmdXJ0aGVyIGludmVzdGlnYXRpb24gaW50byB0aGUgcmVsZXZhbnQgc291cmNlIGZpbGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTU5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDU6NDU6MzUuMzI2NTU4MTQ1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTY4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjM1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjM1OlxcdFxcdCAgVGhpcyBpcyBGVFAgc3VwcG9ydCBvbiBMYXllciAzIGluZGVwZW5kZW50IGNvbm5lY3Rpb24gdHJhY2tpbmcuXFxuIDIzNjpcXHRcXG4gMjM3OlxcdFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXFxuIDIzODpcXHRcXG4gMjM5OlxcdGNvbmZpZyBORl9DT05OVFJBQ0tfSDMyM1xcbiAyNDA6XFx0XFx0dHJpc3RhdGUgXFxcIkguMzIzIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuIDI0MTpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxcbiAyNDI6XFx0XFx0aGVscFxcbiAyNDM6XFx0XFx0ICBILjMyMyBpcyBhIFZvSVAgc2lnbmFsbGluZyBwcm90b2NvbCBmcm9tIElUVS1ULiBBcyBvbmUgb2YgdGhlIG1vc3RcXG4gMjQ0OlxcdFxcdCAgaW1wb3J0YW50IFZvSVAgcHJvdG9jb2xzLCBpdCBpcyB3aWRlbHkgdXNlZCBieSB2b2ljZSBoYXJkd2FyZSBhbmRcXG4gMjQ1OlxcdFxcdCAgc29mdHdhcmUgaW5jbHVkaW5nIHZvaWNlIGdhdGV3YXlzLCBJUCBwaG9uZXMsIE5ldG1lZXRpbmcsIE9wZW5QaG9uZSxcXG4gMjQ2OlxcdFxcdCAgR25vbWVtZWV0aW5nLCBldGMuXFxuIDI0NzpcXHRcXG4gMjQ4OlxcdFxcdCAgV2l0aCB0aGlzIG1vZHVsZSB5b3UgY2FuIHN1cHBvcnQgSC4zMjMgb24gYSBjb25uZWN0aW9uIHRyYWNraW5nL05BVFxcbiAyNDk6XFx0XFx0ICBmaXJld2FsbC5cXG4gMjUwOlxcdFxcbiAyNTE6XFx0XFx0ICBUaGlzIG1vZHVsZSBzdXBwb3J0cyBSQVMsIEZhc3QgU3RhcnQsIEguMjQ1IFR1bm5lbGxpbmcsIENhbGxcXG4gMjUyOlxcdFxcdCAgRm9yd2FyZGluZywgUlRQL1JUQ1AgYW5kIFQuMTIwIGJhc2VkIGF1ZGlvLCB2aWRlbywgZmF4LCBjaGF0LFxcbiAyNTM6XFx0XFx0ICB3aGl0ZWJvYXJkLCBmaWxlIHRyYW5zZmVyLCBldGMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2VcXG4gMjU0OlxcdFxcdCAgdmlzaXQgaHR0cDovL25hdGgzMjMuc291cmNlZm9yZ2UubmV0Ly5cXG4gMjU1OlxcdFxcbiAyNTY6XFx0XFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMjU3OlxcdFxcbiAyNTg6XFx0Y29uZmlnIE5GX0NPTk5UUkFDS19JUkNcXG4gMjU5OlxcdFxcdHRyaXN0YXRlIFxcXCJJUkMgRENDIHByb3RvY29sIHN1cHBvcnQgKG9ic29sZXRlKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDU6NDU6MzUuMzI2NjcxMjM1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU2OTg3OTQ1NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB3aGF0IEknbSBsb29raW5nIGF0LCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipJbnZlc3RpZ2F0aW5nIE5GX0NPTk5UUkFDSyBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gTXkgZmlyc3QgbW92ZSBpcyB0byBpZGVudGlmeSB0aGUgZGVwZW5kZW5jaWVzIG9mIGBORl9DT05OVFJBQ0tgIHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMuIEknbSBnb2luZyBzdHJhaWdodCB0byBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBhbmQgYG5ldC9LY29uZmlnYCB0byB0cmFjZSBpdHMgZGVwZW5kZW5jaWVzLiBUaGVzZSBLY29uZmlnIGZpbGVzIGFyZSB0aGUgaGVhcnQgb2YgdGhlIGtlcm5lbCdzIGJ1aWxkIHN5c3RlbSwgYW5kIHRoZXkgY29udGFpbiB0aGUgbG9naWNhbCByZWxhdGlvbnNoaXBzIGJldHdlZW4gdmFyaW91cyBmZWF0dXJlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBrZXJuZWwgY29tcG9uZW50cyBhcmUgcmVxdWlyZWQgZm9yIGNvbm5lY3Rpb24gdHJhY2tpbmcgdG8gZnVuY3Rpb24uIFRoaXMgaXMgY3JpdGljYWwgZm9yIGRlYnVnZ2luZywgb3B0aW1pemF0aW9uLCBhbmQgdW5kZXJzdGFuZGluZyB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzIGZ1bmN0aW9uYWxpdHkuIEtub3dpbmcgdGhlIGRlcGVuZGVuY2llcyB3aWxsIGhlbHAgbWUgZmlndXJlIG91dCB3aGF0IGVsc2UgSSBuZWVkIHRvIGVuYWJsZSBvciBkaXNhYmxlIGlmIEknbSBmaWRkbGluZyB3aXRoIGNvbm5lY3Rpb24gdHJhY2tpbmcsIGFuZCBhdm9pZCBhbnkgbmFzdHkgc3VycHJpc2VzLiBJdCBhbHNvIGFsbG93cyBtZSB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGNvZGUgaXMgaW50ZWdyYXRlZCBpbnRvIHRoZSByZXN0IG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDIxLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNTo0NTo0MS4wMjU0NjgxNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA5NzIzMzgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbnVjb25maWcgTkZfQ09OTlRSQUNLXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA1OjQ1OjQxLjEwNjQ1MDU0OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NzY2MTA2MjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgTmV0ZmlsdGVyIENvbm5lY3Rpb24gVHJhY2tpbmcgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBOZXRmaWx0ZXIncyBjb25uZWN0aW9uIHRyYWNraW5nIG1vZHVsZS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGtlcm5lbCdzIEtjb25maWcgZmlsZXMuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIEknbGwgZmluZCB3aGF0IEkgbmVlZCB3aXRoaW4gdGhlIGBuZXQvbmV0ZmlsdGVyYCBkaXJlY3RvcnkuIExldCdzIHN0YXJ0IHdpdGggYSBzZWFyY2ggZm9yIGBjb25maWcgTkZfQ09OTlRSQUNLYCB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBzeW1ib2xzIGFuZCBkZXNjcmlwdGlvbnMgZm9yIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGZ1bmN0aW9uYWxpdHkgc2hvdWxkIGJlIGRlZmluZWQuIEhvcGVmdWxseSwgdGhhdCB3aWxsIGdpdmUgbWUgYSByb2FkbWFwIG9mIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyB0byB1bmRlcnN0YW5kIGhvdyBjb25uZWN0aW9uIHRyYWNraW5nIGlzIGhhbmRsZWQgYW5kIHBvdGVudGlhbGx5IG1vZGlmeSB0aGUga2VybmVsJ3MgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyODYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNTo0NTo0OC44NzI1Njc0MTlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMDI1Nzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9DT05OVFJBQ0tcXFxcYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz03ND1jb25maWcgTkVURklMVEVSX05FVExJTktfT1NGXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODEtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjgyOmNvbmZpZyBORl9DT05OVFJBQ0tcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODMtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA1OjQ1OjQ4Ljk1MzYwMjY1OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjczODE4ODQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgTmV0ZmlsdGVyIENvbm5lY3Rpb24gVHJhY2tpbmcgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBzdXJyb3VuZGluZyBgY29uZmlnIE5GX0NPTk5UUkFDS2AuIEknbSBpbW1lZGlhdGVseSBsb29raW5nIGZvciBpdHMgZGVwZW5kZW5jaWVzLCB3aGF0IG90aGVyIGZlYXR1cmVzIGl0IGVuYWJsZXMgb3IgZGlzYWJsZXMsIGFuZCBhbnkgaGVscCB0ZXh0IGFzc29jaWF0ZWQgd2l0aCBpdC4gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIHRoZSBzdXJyb3VuZGluZyBgaWZgIHN0YXRlbWVudHMsIG9yIGFueSBkZXBlbmRlbmNpZXMgbGlrZSBgTkVURklMVEVSYCBvciBzcGVjaWZpYyBwcm90b2NvbHMuIEtub3dpbmcgdGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgZ3Jhc3Agb2Ygd2hlcmUgdGhpcyBwYXJ0aWN1bGFyIG9wdGlvbiBmaXRzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHRoZSBOZXRmaWx0ZXIgZnJhbWV3b3JrLCBhbmQgaG93IGl0J3MgZGVzaWduZWQuIEknbSBhbHNvIGludGVyZXN0ZWQgaW4gaXRzIGRlZmF1bHQgc3RhdGUg4oCTIGlzIGl0IGJ1aWx0LWluLCBhIG1vZHVsZSwgb3IgZGlzYWJsZWQgYnkgZGVmYXVsdD8gVGhhdCdsbCBnaXZlIG1lIGNsdWVzIGFib3V0IGl0cyBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgYW5kIHRoZSBsaWtlbGlob29kIG9mIGl0IGJlaW5nIGVuYWJsZWQgaW4gdmFyaW91cyBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEknbGwgcGF5IGF0dGVudGlvbiB0byBhbnkgd2FybmluZ3Mgb3IgY29tbWVudHMgYWJvdXQgZW5hYmxpbmcgdGhpcyBmZWF0dXJlLCBlc3BlY2lhbGx5IGluIHNjZW5hcmlvcyB3aXRoIGhpZ2ggY29ubmVjdGlvbiByYXRlcywgb3Igd2l0aCBzcGVjaWZpYyB0eXBlcyBvZiB0cmFmZmljIHRoYXQgbWlnaHQgbm90IHBsYXkgd2VsbCB3aXRoIHN0YXRlZnVsIGluc3BlY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1ODQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNTo0NTo1MS4yMjc0MjQxN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTY4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDc1OlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgT1NGIG92ZXIgTkZORVRMSU5LIGludGVyZmFjZVxcXCJcXG4gIDc2OlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXFxuICA3NzpcXHRcXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcXG4gIDc4OlxcdFxcdGhlbHBcXG4gIDc5OlxcdFxcdCAgSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgdGhlIGtlcm5lbCB3aWxsIGluY2x1ZGUgc3VwcG9ydFxcbiAgODA6XFx0XFx0ICBmb3IgcGFzc2l2ZSBPUyBmaW5nZXJwcmludCB2aWEgTkZORVRMSU5LLlxcbiAgODE6XFx0XFxuICA4MjpcXHRjb25maWcgTkZfQ09OTlRSQUNLXFxuICA4MzpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3VwcG9ydFxcXCJcXG4gIDg0OlxcdFxcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxcbiAgODU6XFx0XFx0c2VsZWN0IE5GX0RFRlJBR19JUFY0XFxuICA4NjpcXHRcXHRzZWxlY3QgTkZfREVGUkFHX0lQVjYgaWYgSVBWNiAhPSBuXFxuICA4NzpcXHRcXHRoZWxwXFxuICA4ODpcXHRcXHQgIENvbm5lY3Rpb24gdHJhY2tpbmcga2VlcHMgYSByZWNvcmQgb2Ygd2hhdCBwYWNrZXRzIGhhdmUgcGFzc2VkXFxuICA4OTpcXHRcXHQgIHRocm91Z2ggeW91ciBtYWNoaW5lLCBpbiBvcmRlciB0byBmaWd1cmUgb3V0IGhvdyB0aGV5IGFyZSByZWxhdGVkXFxuICA5MDpcXHRcXHQgIGludG8gY29ubmVjdGlvbnMuXFxuICA5MTpcXHRcXG4gIDkyOlxcdFxcdCAgVGhpcyBpcyByZXF1aXJlZCB0byBkbyBNYXNxdWVyYWRpbmcgb3Igb3RoZXIga2luZHMgb2YgTmV0d29ya1xcbiAgOTM6XFx0XFx0ICBBZGRyZXNzIFRyYW5zbGF0aW9uLiAgSXQgY2FuIGFsc28gYmUgdXNlZCB0byBlbmhhbmNlIHBhY2tldFxcbiAgOTQ6XFx0XFx0ICBmaWx0ZXJpbmcgKHNlZSBgQ29ubmVjdGlvbiBzdGF0ZSBtYXRjaCBzdXBwb3J0JyBiZWxvdykuXFxuICA5NTpcXHRcXG4gIDk2OlxcdFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXFxuICA5NzpcXHRcXG4gIDk4OlxcdGNvbmZpZyBORl9MT0dfU1lTTE9HXFxuICA5OTpcXHRcXHR0cmlzdGF0ZSBcXFwiU3lzbG9nIHBhY2tldCBsb2dnaW5nXFxcIlxcbiAxMDA6XFx0XFx0ZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uXFxuIDEwMTpcXHRcXHRoZWxwXFxuIDEwMjpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZSBzdXBwb3J0IGZvciBwYWNrZXQgbG9nZ2luZyB2aWEgc3lzbG9nLlxcbiAxMDM6XFx0XFx0ICBJdCBzdXBwb3J0cyBJUHY0LCBJUFY2LCBBUlAgYW5kIGNvbW1vbiB0cmFuc3BvcnQgcHJvdG9jb2xzIHN1Y2hcXG4gMTA0OlxcdFxcdCAgYXMgVENQIGFuZCBVRFAuXFxuIDEwNTpcXHRcXHQgIFRoaXMgaXMgYSBzaW1wbGVyIGJ1dCBsZXNzIGZsZXhpYmxlIGxvZ2dpbmcgbWV0aG9kIGNvbXBhcmVkIHRvXFxuIDEwNjpcXHRcXHQgIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0cuXFxuIDEwNzpcXHRcXHQgIElmIGJvdGggYXJlIGVuYWJsZWQgdGhlIGJhY2tlbmQgdG8gdXNlIGNhbiBiZSBjb25maWd1cmVkIGF0IHJ1bi10aW1lXFxuIDEwODpcXHRcXHQgIGJ5IG1lYW5zIG9mIHBlci1hZGRyZXNzLWZhbWlseSBzeXNjdGwgdHVuYWJsZXMuXFxuIDEwOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDU6NDU6NTEuMjI3NTQyNzFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTY3Nzk3NjI1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIE5ldGZpbHRlciBLY29uZmlnKipcblxuT2theSwgdGltZSB0byBnZXQgc3RhcnRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIGZvciBuZXRmaWx0ZXIuIFRoZSBiZXN0IHBsYWNlIHRvIGJlZ2luIGlzIGFsbW9zdCBhbHdheXMgdGhlIGBLY29uZmlnYCBmaWxlIGluIHRoZSByZWxldmFudCBkaXJlY3RvcnkuIFNwZWNpZmljYWxseSwgSSdsbCBuYXZpZ2F0ZSBvdmVyIHRvIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIHRvIGdldCBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIG1lbnUgc3RydWN0dXJlIGFuZCB0aGUgZGVwZW5kZW5jaWVzLiBUaGlzIHNob3VsZCBpbW1lZGlhdGVseSBnaXZlIG1lIGEgc2Vuc2Ugb2YgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIGVhY2ggb3RoZXIgd2l0aGluIHRoZSBuZXRmaWx0ZXIgZnJhbWV3b3JrLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBmb3VuZGF0aW9uIEkgbmVlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQwOCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDU6NDU6NTIuOTA1NTIxNzMyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDQxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdG1lbnUgXFxcIkNvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb25cXFwiXFxuICAgMzpcXHRcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgTkVURklMVEVSXFxuICAgNDpcXHRcXG4gICA1OlxcdGNvbmZpZyBORVRGSUxURVJfSU5HUkVTU1xcbiAgIDY6XFx0XFx0Ym9vbCBcXFwiTmV0ZmlsdGVyIGluZ3Jlc3Mgc3VwcG9ydFxcXCJcXG4gICA3OlxcdFxcdGRlZmF1bHQgeVxcbiAgIDg6XFx0XFx0c2VsZWN0IE5FVF9JTkdSRVNTXFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIFRoaXMgYWxsb3dzIHlvdSB0byBjbGFzc2lmeSBwYWNrZXRzIGZyb20gaW5ncmVzcyB1c2luZyB0aGUgTmV0ZmlsdGVyXFxuICAxMTpcXHRcXHQgIGluZnJhc3RydWN0dXJlLlxcbiAgMTI6XFx0XFxuICAxMzpcXHRjb25maWcgTkVURklMVEVSX0VHUkVTU1xcbiAgMTQ6XFx0XFx0Ym9vbCBcXFwiTmV0ZmlsdGVyIGVncmVzcyBzdXBwb3J0XFxcIlxcbiAgMTU6XFx0XFx0ZGVmYXVsdCB5XFxuICAxNjpcXHRcXHRzZWxlY3QgTkVUX0VHUkVTU1xcbiAgMTc6XFx0XFx0aGVscFxcbiAgMTg6XFx0XFx0ICBUaGlzIGFsbG93cyB5b3UgdG8gY2xhc3NpZnkgcGFja2V0cyBiZWZvcmUgdHJhbnNtaXNzaW9uIHVzaW5nIHRoZVxcbiAgMTk6XFx0XFx0ICBOZXRmaWx0ZXIgaW5mcmFzdHJ1Y3R1cmUuXFxuICAyMDpcXHRcXG4gIDIxOlxcdGNvbmZpZyBORVRGSUxURVJfU0tJUF9FR1JFU1NcXG4gIDIyOlxcdFxcdGRlZl9ib29sIE5FVEZJTFRFUl9FR1JFU1MgXFx1MDAyNlxcdTAwMjYgKE5FVF9DTFNfQUNUIHx8IElGQilcXG4gIDIzOlxcdFxcbiAgMjQ6XFx0Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LXFxuICAyNTpcXHRcXHRib29sXFxuICAyNjpcXHRcXG4gIDI3OlxcdGNvbmZpZyBORVRGSUxURVJfRkFNSUxZX0JSSURHRVxcbiAgMjg6XFx0XFx0Ym9vbFxcbiAgMjk6XFx0XFxuICAzMDpcXHRjb25maWcgTkVURklMVEVSX0ZBTUlMWV9BUlBcXG4gIDMxOlxcdFxcdGJvb2xcXG4gIDMyOlxcdFxcbiAgMzM6XFx0Y29uZmlnIE5FVEZJTFRFUl9CUEZfTElOS1xcbiAgMzQ6XFx0XFx0ZGVmX2Jvb2wgQlBGX1NZU0NBTExcXG4gIDM1OlxcdFxcbiAgMzY6XFx0Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0hPT0tcXG4gIDM3OlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgYmFzZSBob29rIGR1bXAgc3VwcG9ydFxcXCJcXG4gIDM4OlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXFxuICAzOTpcXHRcXHRkZXBlbmRzIG9uIE5GX1RBQkxFU1xcbiAgNDA6XFx0XFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA1OjQ1OjUyLjkwNTY1MDQ4MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzAwODg0NzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSC4zMjMgQ29ubmVjdGlvbiBUcmFja2luZyBNb2R1bGUqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgTkZfQ09OTlRSQUNLX0gzMjNgIG1vZHVsZS4gVGhlIHByZXJlcXVpc2l0ZXMgYXJlIHByZXR0eSBjbGVhcjogYE5FVEZJTFRFUmAsIGBJTkVUYCwgYE5FVEZJTFRFUl9BRFZBTkNFRGAsIGBORl9DT05OVFJBQ0tgLCBhbmQsIG9mIGNvdXJzZSwgYE5GX0NPTk5UUkFDS19IMzIzYCBpdHNlbGYuIE1ha2VzIHNlbnNlLCBnaXZlbiBpdCdzIGJ1aWx0IG9uIE5ldGZpbHRlciBhbmQgaGFuZGxlcyBJUC1iYXNlZCBjb25uZWN0aW9ucy5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVjb2RpbmcgcHJvY2Vzcy4gSSBuZWVkIHRvIGZvY3VzIG9uIGhvdyBgZGVjb2RlX2VudW1gIGFuZCB0aGUgQVNOLjEgcGFyc2VyIGFyZSBhY3R1YWxseSAqdXNlZCogd2l0aGluIHRoaXMgbW9kdWxlLiBTcGVjaWZpY2FsbHksIGluIGBuZl9jb25udHJhY2tfaDMyM19hc24xLmNgLiBTbyBteSBuZXh0IHN0ZXAgaXMgY2xlYXIuXG5cbkknbGwgYmUgc2VhcmNoaW5nIGZvciBob3cgYGRlY29kZV9lbnVtYCBpcyBjYWxsZWQsIGFuZCBnZW5lcmFsbHkgaG93IEFTTi4xIGRlY29kaW5nIGhhcHBlbnMgd2l0aGluIGJvdGggYG5mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AgYW5kIGBuZl9jb25udHJhY2tfaDMyM19tYWluLmNgLiBJIG5lZWQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkYXRhIGZsb3cgYW5kIGhvdyB0aGUgQVNOLjEgZGF0YSBpcyBoYW5kbGVkLiBUaGlzIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgYWN0dWFsbHkgd29ya3MgZm9yIEguMzIzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDQ4LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDU6NDU6NTUuMjA2NTM3NTM0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDE1NzkxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZWNvZGVfZW51bVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz0xMTE9c3RhdGljIGludCBkZWNvZGVfaW50KHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMTI6c3RhdGljIGludCBkZWNvZGVfZW51bShzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTEzLXN0YXRpYyBpbnQgZGVjb2RlX2JpdHN0cihzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz0xMjM9c3RhdGljIGNvbnN0IGRlY29kZXJfdCBEZWNvZGVyc1tdID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTI3LVxcdGRlY29kZV9pbnQsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTI4OlxcdGRlY29kZV9lbnVtLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTEyOS1cXHRkZWNvZGVfYml0c3RyLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9MzEyPXN0YXRpYyBpbnQgZGVjb2RlX2ludChzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0zNjAtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MzYxOnN0YXRpYyBpbnQgZGVjb2RlX2VudW0oc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTM2Mi0gICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDU6NDU6NTUuMjYwNzAxMTEzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzOTU5Njg1NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBILjMyMyBDb25uZWN0aW9uIFRyYWNraW5nIENvZGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IHJlbGF0ZWQgdG8gSC4zMjMgY29ubmVjdGlvbiB0cmFja2luZy4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgYG5mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AgZmlsZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGl0cyBmdW5jdGlvbnMgYXJlIGludm9rZWQsIHNvIEknbGwgYmUgbG9va2luZyBmb3IgZW50cnkgcG9pbnRzIOKAkyB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIGRpcmVjdGx5IGNhbGxlZCBmcm9tIGVsc2V3aGVyZS4gVGhlbiwgSSBuZWVkIHRvIHNlZSAqd2hlcmUqIHRob3NlIGVudHJ5IHBvaW50cyBhcmUgY2FsbGVkIGZyb20uIFRoZSBvYnZpb3VzIHBsYWNlIHRvIGxvb2sgZm9yIHRoYXQgaW5pdGlhbCBjYWxsIGlzIGluIGBuZl9jb25udHJhY2tfaDMyM19tYWluLmNgLCBhcyB0aGUgbmFtZSBzdWdnZXN0cyBpdCdzIHRoZSBjZW50cmFsIGh1Yi4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgaG93IHRoZSBBU04uMS1yZWxhdGVkIGZ1bmN0aW9uYWxpdHkgZml0cyBpbnRvIHRoZSBicm9hZGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgcHJvY2VzcyBmb3IgSC4zMjMgdHJhZmZpYy4gSSdtIGV4cGVjdGluZyB0aGlzIHdpbGwgbGlrZWx5IHNob3cgdGhlIGZ1bmN0aW9uIGNhbGxzIHRoYXQgaGFuZGxlIHRoZSBBU04uMSBkZWNvZGluZyBhbmQgY29ubmVjdGlvbiBzdGF0ZSBtb2RpZmljYXRpb25zLiBJJ20gYW50aWNpcGF0aW5nIHRoYXQgSSBjYW4gdGhlbiB0cmFjZSB0aGUgY29udHJvbCBmbG93IGJhY2sgYW5kIGZvcnRoIGJldHdlZW4gdGhlc2UgZmlsZXMgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgdGhpcyBtb2R1bGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MzMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNTo0NTo1Ny42NTY2NzM3MjRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNDMyNzE5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJEZWNvZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA1OjQ1OjU3LjcwODEyMjU3M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDQ5NDU2OTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgSC4zMjMgY29ubmVjdGlvbiB0cmFja2luZyBtb2R1bGUuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSdsbCBleGFtaW5lIHRoZSBoZWFkZXIgZmlsZSwgc3BlY2lmaWNhbGx5IGBpbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmhgLiBUaGF0J3Mgd2hlcmUgdGhlIGNvcmUgZGVjbGFyYXRpb25zIGZvciB0aGlzIHBhcnQgb2YgdGhlIE5ldGZpbHRlciBzdWJzeXN0ZW0gc2hvdWxkIHJlc2lkZS4gTXkgcHJpbWFyeSBnb2FsIGhlcmUgaXMgdG8gaWRlbnRpZnkgZXhhY3RseSB3aGF0IGZ1bmN0aW9uYWxpdHkgaXMgZXhwb3NlZDogV2hhdCBmdW5jdGlvbnMgYXJlICpleHBvcnRlZCog4oCTIHRob3NlIGFyZSB0aGUgZW50cnkgcG9pbnRzIEknbGwgYmUgd29ya2luZyB3aXRoIOKAkyBhbmQgd2hhdCdzICpkZWNsYXJlZCogd2l0aGluIHRoYXQgY29udGV4dD8gSSdsbCBiZSBsb29raW5nIGZvciB0aGUgc3RydWN0dXJlcywgZW51bWVyYXRpb25zLCBhbmQgZnVuY3Rpb24gcHJvdG90eXBlcyB0aGF0IGFyZSBkZWZpbmVkLiBVbmRlcnN0YW5kaW5nIHRoZSBleHBvcnRlZCBBUEkgaXMgYWJzb2x1dGVseSBjcnVjaWFsIGZvciBhbnkgaW50ZWdyYXRpb24gb3IgaW50ZXJhY3Rpb24gd2l0aCB0aGlzIG1vZHVsZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGFyY2hpdGVjdHVyZSBhbmQgaG93IHRvIHdvcmsgd2l0aCBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyNjYsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNTo0NTo1OS43NTc1ODIyMDlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMTcwMDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBEZWNvZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuaD00ND10eXBlZGVmIHN0cnVjdCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmgtOTAtXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5oOjkxOmludCBEZWNvZGVSYXNNZXNzYWdlKHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IHN6LCBSYXNNZXNzYWdlICogcmFzKTtcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmg6OTI6aW50IERlY29kZVE5MzEodW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3Qgc3osIFE5MzEgKiBxOTMxKTtcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmg6OTM6aW50IERlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZSh1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBzeixcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmgtOTQtXFx0XFx0XFx0XFx0XFx0IE11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZSAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA1OjQ1OjU5LjgwOTc1Nzc5OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTIzMDQ0OTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhhdCBhbmFseXNpcywgYXMgaWYgaXQgd2VyZSBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEguMzIzIENvbm50cmFjayBNb2R1bGUqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyB3aXRoaW4gdGhpcyBILjMyMyBjb25udHJhY2sgbW9kdWxlLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyB0aGUgcGFyc2luZyBvZiB0aG9zZSBILjIyNSBhbmQgSC4yNDUgbWVzc2FnZXMuIE15IGdvYWwgaXMgdG8gc2VlIGV4YWN0bHkgd2hlcmUgYERlY29kZVJhc01lc3NhZ2VgLCBgRGVjb2RlUTkzMWAsIGFuZCBgRGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlYCBhcmUgaW52b2tlZCB3aXRoaW4gYG5mX2Nvbm50cmFja19oMzIzX21haW4uY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBlbnRyeSBwb2ludHMgYW5kIHRoZSBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciB0aGVzZSBtZXNzYWdlIGRlY29kZXJzLiBUaGlzIHdpbGwgaGVscCBtZSBncmFzcCBob3cgdGhlIG1vZHVsZSBwcm9jZXNzZXMgYW5kIGV4dHJhY3RzIGluZm9ybWF0aW9uIGZyb20gSC4zMjMgc2lnbmFsaW5nLiBJIGFudGljaXBhdGUgdGhlcmUnbGwgYmUgYSBmdW5jdGlvbiB0aGF0IGRvZXMgdGhlIGluaXRpYWwgbWVzc2FnZSB0eXBlIGRldGVjdGlvbiwgYW5kIHRoZW4gY2FsbHMgdGhlIGFwcHJvcHJpYXRlIGRlY29kZSBmdW5jdGlvbiBiYXNlZCBvbiB0aGF0LiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIG9uIGhvdyB0aGUgSC4zMjMgc3RhdGUgbWFjaGluZSBpcyByZXByZXNlbnRlZC4gSXQgd291bGQgYWxzbyBiZSBncmVhdCB0byB1bmRlcnN0YW5kIGhvdyBlcnJvcnMgYXJlIGhhbmRsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzc0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDU6NDY6MDQuMzMyODA1NzgyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTczNzkzMTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRGVjb2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTUyOT1zdGF0aWMgaW50IGgyNDVfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTU1MS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzo1NTI6XFx0XFx0LyogRGVjb2RlIEguMjQ1IHNpZ25hbCAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjU1MzpcXHRcXHRyZXQgPSBEZWNvZGVNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2UoZGF0YSwgZGF0YWxlbixcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy01NTQtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNm1zY20pO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9MTA4OT1zdGF0aWMgaW50IHE5MzFfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTExMTEtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MTExMjpcXHRcXHQvKiBEZWNvZGUgUS45MzEgc2lnbmFsICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MTExMzpcXHRcXHRyZXQgPSBEZWNvZGVROTMxKGRhdGEsIGRhdGFsZW4sIFxcdTAwMjZxOTMxKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xMTE0LVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYz0xNjY0PXN0YXRpYyBpbnQgcmFzX2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNjgyLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjE2ODM6XFx0LyogRGVjb2RlIFJBUyBtZXNzYWdlICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MTY4NDpcXHRyZXQgPSBEZWNvZGVSYXNNZXNzYWdlKGRhdGEsIGRhdGFsZW4sIFxcdTAwMjZyYXMpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE2ODUtXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDU6NDY6MDQuODUwMTkyNjkzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3NzgyOTczNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgSGVhcnQgb2YgSC4zMjMgQ29ubmVjdGlvbiBUcmFja2luZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgSC4zMjMgY29ubmVjdGlvbiB0cmFja2luZyBtb2R1bGUgd29ya3MgaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGhvdyBpdCBkZWNvZGVzIHRoZSBBU04uMSBtZXNzYWdlcy4gVGhlIGRlZmluaXRpb25zIGZvciBgRGVjb2RlUmFzTWVzc2FnZWAsIGBEZWNvZGVROTMxYCwgYW5kIHRoZSBvdGhlciBkZWNvZGluZyBmdW5jdGlvbnMgYXJlIGJ1cmllZCBzb21ld2hlcmUgd2l0aGluIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AuIEJlc3QgdG8ganVzdCBqdW1wIHJpZ2h0IHRvIHRoZSBlbmQgb2YgdGhhdCBmaWxlIGFuZCBjaGVjayB0aGVtIG91dC4gSSBuZWVkIHRvIHNlZSB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgdGhlc2UgY3JpdGljYWwgZnVuY3Rpb25zLiBUaGF0J3Mgd2hlcmUgdGhlIHJlYWwgbG9naWMgaXMsIG5vdCBqdXN0IHRoZSBkZWNsYXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjU3LCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDU6NDY6MDYuNjI4NDk0Njk0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MDAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MDA6XFx0XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuIDgwMTpcXHRcXHRcXHRpZiAoIWJhc2UgfHwgIShzb24tXFx1MDAzZWF0dHIgXFx1MDAyNiBERUNPREUpKSB7XFxuIDgwMjpcXHRcXHRcXHRcXHRQUklOVChcXFwiJSpzJXNcXFxcblxcXCIsIChsZXZlbCArIDEpICogVEFCX1NJWkUsIFxcXCIgXFxcIixcXG4gODAzOlxcdFxcdFxcdFxcdCAgICAgIHNvbi1cXHUwMDNlbmFtZSk7XFxuIDgwNDpcXHRcXHRcXHRcXHRicy1cXHUwMDNlY3VyICs9IGxlbjtcXG4gODA1OlxcdFxcdFxcdFxcdHJldHVybiBIMzIzX0VSUk9SX05PTkU7XFxuIDgwNjpcXHRcXHRcXHR9XFxuIDgwNzpcXHRcXHRcXHRiZWcgPSBicy1cXHUwMDNlY3VyO1xcbiA4MDg6XFx0XFxuIDgwOTpcXHRcXHRcXHRpZiAoKGVyciA9IChEZWNvZGVyc1tzb24tXFx1MDAzZXR5cGVdKSAoYnMsIHNvbiwgYmFzZSwgbGV2ZWwgKyAxKSkgXFx1MDAzY1xcbiA4MTA6XFx0XFx0XFx0ICAgIEgzMjNfRVJST1JfTk9ORSlcXG4gODExOlxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDgxMjpcXHRcXG4gODEzOlxcdFxcdFxcdGJzLVxcdTAwM2VjdXIgPSBiZWcgKyBsZW47XFxuIDgxNDpcXHRcXHRcXHRicy1cXHUwMDNlYml0ID0gMDtcXG4gODE1OlxcdFxcdH0gZWxzZSBpZiAoKGVyciA9IChEZWNvZGVyc1tzb24tXFx1MDAzZXR5cGVdKSAoYnMsIHNvbiwgYmFzZSwgbGV2ZWwgKyAxKSkgXFx1MDAzY1xcbiA4MTY6XFx0XFx0XFx0ICAgSDMyM19FUlJPUl9OT05FKVxcbiA4MTc6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gODE4OlxcdFxcbiA4MTk6XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfTk9ORTtcXG4gODIwOlxcdH1cXG4gODIxOlxcdFxcbiA4MjI6XFx0aW50IERlY29kZVJhc01lc3NhZ2UodW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3Qgc3osIFJhc01lc3NhZ2UgKnJhcylcXG4gODIzOlxcdHtcXG4gODI0OlxcdFxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmllbGRfdCByYXNfbWVzc2FnZSA9IHtcXG4gODI1OlxcdFxcdFxcdEZOQU1FKFxcXCJSYXNNZXNzYWdlXFxcIikgQ0hPSUNFLCA1LCAyNCwgMzIsIERFQ09ERSB8IEVYVCxcXG4gODI2OlxcdFxcdFxcdDAsIF9SYXNNZXNzYWdlXFxuIDgyNzpcXHRcXHR9O1xcbiA4Mjg6XFx0XFx0c3RydWN0IGJpdHN0ciBicztcXG4gODI5OlxcdFxcbiA4MzA6XFx0XFx0YnMuYnVmID0gYnMuYmVnID0gYnMuY3VyID0gYnVmO1xcbiA4MzE6XFx0XFx0YnMuZW5kID0gYnVmICsgc3o7XFxuIDgzMjpcXHRcXHRicy5iaXQgPSAwO1xcbiA4MzM6XFx0XFxuIDgzNDpcXHRcXHRyZXR1cm4gZGVjb2RlX2Nob2ljZShcXHUwMDI2YnMsIFxcdTAwMjZyYXNfbWVzc2FnZSwgKGNoYXIgKikgcmFzLCAwKTtcXG4gODM1OlxcdH1cXG4gODM2OlxcdFxcbiA4Mzc6XFx0c3RhdGljIGludCBEZWNvZGVIMzIzX1VzZXJJbmZvcm1hdGlvbih1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGNoYXIgKmJlZyxcXG4gODM4OlxcdFxcdFxcdFxcdFxcdCAgICAgIHNpemVfdCBzeiwgSDMyM19Vc2VySW5mb3JtYXRpb24gKnV1aWUpXFxuIDgzOTpcXHR7XFxuIDg0MDpcXHRcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgaDMyM191c2VyaW5mb3JtYXRpb24gPSB7XFxuIDg0MTpcXHRcXHRcXHRGTkFNRShcXFwiSDMyMy1Vc2VySW5mb3JtYXRpb25cXFwiKSBTRVEsIDEsIDIsIDIsIERFQ09ERSB8IEVYVCxcXG4gODQyOlxcdFxcdFxcdDAsIF9IMzIzX1VzZXJJbmZvcm1hdGlvblxcbiA4NDM6XFx0XFx0fTtcXG4gODQ0OlxcdFxcdHN0cnVjdCBiaXRzdHIgYnM7XFxuIDg0NTpcXHRcXG4gODQ2OlxcdFxcdGJzLmJ1ZiA9IGJ1ZjtcXG4gODQ3OlxcdFxcdGJzLmJlZyA9IGJzLmN1ciA9IGJlZztcXG4gODQ4OlxcdFxcdGJzLmVuZCA9IGJlZyArIHN6O1xcbiA4NDk6XFx0XFx0YnMuYml0ID0gMDtcXG4gODUwOlxcdFxcbiA4NTE6XFx0XFx0cmV0dXJuIGRlY29kZV9zZXEoXFx1MDAyNmJzLCBcXHUwMDI2aDMyM191c2VyaW5mb3JtYXRpb24sIChjaGFyICopIHV1aWUsIDApO1xcbiA4NTI6XFx0fVxcbiA4NTM6XFx0XFxuIDg1NDpcXHRpbnQgRGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlKHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IHN6LFxcbiA4NTU6XFx0XFx0XFx0XFx0XFx0XFx0IE11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZSAqXFxuIDg1NjpcXHRcXHRcXHRcXHRcXHRcXHQgbXNjbSlcXG4gODU3OlxcdHtcXG4gODU4OlxcdFxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmllbGRfdCBtdWx0aW1lZGlhc3lzdGVtY29udHJvbG1lc3NhZ2UgPSB7XFxuIDg1OTpcXHRcXHRcXHRGTkFNRShcXFwiTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlXFxcIikgQ0hPSUNFLCAyLCA0LCA0LFxcbiA4NjA6XFx0XFx0XFx0REVDT0RFIHwgRVhULCAwLCBfTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlXFxuIDg2MTpcXHRcXHR9O1xcbiA4NjI6XFx0XFx0c3RydWN0IGJpdHN0ciBicztcXG4gODYzOlxcdFxcbiA4NjQ6XFx0XFx0YnMuYnVmID0gYnMuYmVnID0gYnMuY3VyID0gYnVmO1xcbiA4NjU6XFx0XFx0YnMuZW5kID0gYnVmICsgc3o7XFxuIDg2NjpcXHRcXHRicy5iaXQgPSAwO1xcbiA4Njc6XFx0XFxuIDg2ODpcXHRcXHRyZXR1cm4gZGVjb2RlX2Nob2ljZShcXHUwMDI2YnMsIFxcdTAwMjZtdWx0aW1lZGlhc3lzdGVtY29udHJvbG1lc3NhZ2UsXFxuIDg2OTpcXHRcXHRcXHRcXHQgICAgIChjaGFyICopIG1zY20sIDApO1xcbiA4NzA6XFx0fVxcbiA4NzE6XFx0XFxuIDg3MjpcXHRpbnQgRGVjb2RlUTkzMSh1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBzeiwgUTkzMSAqcTkzMSlcXG4gODczOlxcdHtcXG4gODc0OlxcdFxcdHVuc2lnbmVkIGNoYXIgKnAgPSBidWY7XFxuIDg3NTpcXHRcXHRpbnQgbGVuO1xcbiA4NzY6XFx0XFxuIDg3NzpcXHRcXHRpZiAoIXAgfHwgc3ogXFx1MDAzYyAxKVxcbiA4Nzg6XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuIDg3OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDU6NDY6MDYuNjI4NTk5MDY0WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc0ODYxNDI3NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgSC4zMjMgQ29ubnRyYWNrIEhlbHBlciBWdWxuZXJhYmlsaXR5IEZpeCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGBkZWNvZGVfZW51bWAgaW4gYG5mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AgaGFzIGJlZW4gbW9kaWZpZWQuIFRoaXMgaXMgYSBzdGF0aWMgZnVuY3Rpb24gdXNlZCB3aXRoaW4gdGhlIEguMzIzIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyLCBhY2Nlc3NlZCB2aWEgdGhlIGBEZWNvZGVyc2AgdGFibGUgZm9yIEFTTi4xIGRlY29kaW5nLiBUaGUgY2hhbmdlIGludHJvZHVjZXMgYSBib3VuZHMgY2hlY2ssIGBuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAxKWAsICpiZWZvcmUqIHJlYWRpbmcgdGhlIGJpdC4gVGhpcyBpcyBhIGNsYXNzaWMgYnVmZmVyIG92ZXJydW4gcHJldmVudGlvbiBzdHJhdGVneSB3aGVuIHBhcnNpbmcgQVNOLjEgZW51bSBmaWVsZHMsIG1pdGlnYXRpbmcgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBpbiBtYWxmb3JtZWQgSC4zMjMgcGFja2V0cy5cblxuSXMgdGhpcyByZWFjaGFibGUgYW5kIHdvcnRoIHRhcmdldGluZyBmb3IgZnV6emluZz8gQWJzb2x1dGVseSwgeWVzLiBUaGUgY29kZSByZXNpZGVzIHdpdGhpbiB0aGUgYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYCBmaWxlLiBUaGlzIG1lYW5zIHRoaXMgY29kZSBwYXRoIGlzIGludm9sdmVkIGluIGFuYWx5emluZyBpbmNvbWluZyBhbmQgb3V0Z29pbmcgSC4zMjMgdHJhZmZpYywgaW5jbHVkaW5nIFJBUywgUS45MzEsIGFuZCBILjI0NSBwYWNrZXRzLCBhbmQgYW55dGhpbmcgc2VudCB0aHJvdWdoIHJhdyBzb2NrZXRzLCBsb29wYmFjaywgdHVuLCB0YXAsIGFuZCBuZXRsaW5rIGN0IGhlbHBlci4gQW55IGZ1enppbmcgZWZmb3J0IHRhcmdldGVkIGF0IHRoaXMgd291bGQgbW9kaWZ5IHRoZSBjb2RlIGZvciB0aGUgbmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyLCB3aGljaCBpcyB2ZXJ5IGhpZ2ggdmFsdWUuIFRoZSBwcmVzZW5jZSBvZiBgV29ydGhGdXp6aW5nPXRydWVgIGNvbmZpcm1zIHRoaXMgaW5pdGlhbCBhc3Nlc3NtZW50LlxuXG5Ob3csIGxldCdzIGNvbmZpcm0gdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIGVuc3VyZSBgTkZfQ09OTlRSQUNLYCBhbmQgYE5GX0NPTk5UUkFDS19IMzIzYCBhcmUgZW5hYmxlZC4gRnVydGhlcm1vcmUsIGFjY29yZGluZyB0byB0aGUgYEtjb25maWdgIGZpbGUgaW4gdGhlIG5ldGZpbHRlciBkaXJlY3RvcnksIGBORl9DT05OVFJBQ0tfSDMyM2AgZGVwZW5kcyBvbiBgTkVURklMVEVSX0FEVkFOQ0VEYC4gQ29yZSBOZXRmaWx0ZXIgZnVuY3Rpb25hbGl0eSBkZXBlbmRzIG9uIGBJTkVUYCBhbmQgYE5FVEZJTFRFUmAuIFRoZXNlIGNvbmZpZ3MgYXJlIHN0cmFpZ2h0Zm9yd2FyZCBhbmQgY29tbW9uLlxuXG5UaGUgY3JpdGljYWwgcXVlc3Rpb24gbm93IGlzIHdoYXQgc3ltYm9scyBzaG91bGQgSSB0YXJnZXQ/IGBkZWNvZGVfZW51bWAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgcmVjZWl2ZWQgdGhlIGNoYW5nZSwgYW5kIGlzIGRlZmluZWQgaW4gdGhlIGBuZl9jb25udHJhY2tfaDMyM19hc24xLmNgLiBXaGlsZSBpdCBpcyBgc3RhdGljYCBJIGNhbiBkZWZpbml0ZWx5IHRhcmdldCBpdCwgZXNwZWNpYWxseSBpZiBJIGNhbiBwcm92aWRlIGl0cyBjYWxsZXJzIGFzIGVudHJ5IHBvaW50cy4gSSBoYXZlIHRvIGJlIGNhcmVmdWwgd2l0aCBzcGVsbGluZy4gSSdtIGdvaW5nIHRvIGxpc3Qgb3V0IGV2ZXJ5IHN5bWJvbCwgbm9uLXN0YXRpYywgaW4gdGhlIGZpbGUgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBjYWxsIGRlY29kZV9lbnVtOlxuLSBgRGVjb2RlUmFzTWVzc2FnZWBcbi0gYERlY29kZVE5MzFgXG4tIGBEZWNvZGVNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2VgXG4tIGBkZWNvZGVfZW51bWBcbi0gYHJhc19oZWxwYFxuLSBgcTkzMV9oZWxwYFxuLSBgaDI0NV9oZWxwYFxuXG5BZnRlciBjaGVja2luZyBgbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jYCBoZWxwZXIgZnVuY3Rpb25zLCBJIGhhdmUgY29uZmlybWVkIHRoZSBleGFjdCBzcGVsbGluZyBvZiB0aGVzZSBmdW5jdGlvbnM6XG4tIGBkZWNvZGVfZW51bWBcbi0gYERlY29kZVJhc01lc3NhZ2VgXG4tIGBEZWNvZGVROTMxYFxuLSBgRGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlYFxuLSBgcmFzX2hlbHBgXG4tIGBxOTMxX2hlbHBgXG4tIGBoMjQ1X2hlbHBgXG5cbkkndmUgYWxzbyB2ZXJpZmllZCB0aGF0IG9ubHkgYG5mX2Nvbm50cmFja19oMzIzX2FzbjEuY2Agd2FzIHRvdWNoZWQgaW4gdGhpcyBjb21taXQuXG5cblNvLCBmb3IgYHNldC1yZXN1bHRzYCwgSSdsbCBzdHJ1Y3R1cmUgaXQgbGlrZSB0aGlzOlxuXG4tICAgYFdvcnRoRnV6emluZ2A6IHRydWVcbi0gICBgUmVhc29uaW5nYDogVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgdG8gYGRlY29kZV9lbnVtYCBpbiB0aGUgSC4zMjMgY29ubnRyYWNrIEFTTi4xIHBhcnNlciB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzIHdoZW4gcGFyc2luZyBtYWxmb3JtZWQgSC4zMjMgbmV0d29yayBwYWNrZXRzLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIEguMzIzIGNvbm50cmFjayBoZWxwZXJzLlxuLSAgIGBGb2N1c1N5bWJvbHNgOiBcXFtcImRlY29kZVxcX2VudW1cIiwgXCJEZWNvZGVSYXNNZXNzYWdlXCIsIFwiRGVjb2RlUTkzMVwiLCBcIkRlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZVwiLCBcInJhc1xcX2hlbHBcIiwgXCJxOTMxXFxfaGVscFwiLCBcImgyNDVcXF9oZWxwXCJdXG4tICAgYEVuYWJsZUNvbmZpZ3NgOiBcXFtcIk5GXFxfQ09OTlRSQUNLXCIsIFwiTkZcXF9DT05OVFJBQ0tcXF9IMzIzXCIsIFwiTkVURklMVEVSXFxfQURWQU5DRURcIl1cblxuVGhlIGNvbmZpZ3MgYXJlIGNvcnJlY3QgYW5kIHRoZSBzeW1ib2xzIGFyZSB0aGUgZXhhY3QgbmFtZXMuIE9rYXksIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzExOCwiT3V0cHV0VG9rZW5zIjoxNzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTQ4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDU6NDY6MTQuMTE0NzQ0MDdaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzIzMzcwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfSDMyM1wiLFxuICAgIFwiTkVURklMVEVSX0FEVkFOQ0VEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGVjb2RlX2VudW1cIixcbiAgICBcIkRlY29kZVJhc01lc3NhZ2VcIixcbiAgICBcIkRlY29kZVE5MzFcIixcbiAgICBcIkRlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZVwiLFxuICAgIFwicmFzX2hlbHBcIixcbiAgICBcInE5MzFfaGVscFwiLFxuICAgIFwiaDI0NV9oZWxwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG1pc3NpbmcgYm91bmRhcnkgY2hlY2sgaW4gZGVjb2RlX2VudW0oKSBpbiB0aGUgTmV0ZmlsdGVyIEguMzIzIGNvbm5lY3Rpb24gdHJhY2tpbmcgQVNOLjEgZGVjb2RlciB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzIHdoZW4gcmVhZGluZyBiaXRzIGZyb20gbWFsZm9ybWVkIHBhY2tldHMuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBuZXR3b3JrIHBhY2tldCBwcm9jZXNzaW5nIGhhbmRsZWQgYnkgdGhlIEguMzIzIGNvbm50cmFjayBoZWxwZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfSDMyM1wiLFxuICAgIFwiTkVURklMVEVSX0FEVkFOQ0VEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGVjb2RlX2VudW1cIixcbiAgICBcIkRlY29kZVJhc01lc3NhZ2VcIixcbiAgICBcIkRlY29kZVE5MzFcIixcbiAgICBcIkRlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZVwiLFxuICAgIFwicmFzX2hlbHBcIixcbiAgICBcInE5MzFfaGVscFwiLFxuICAgIFwiaDI0NV9oZWxwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG1pc3NpbmcgYm91bmRhcnkgY2hlY2sgaW4gZGVjb2RlX2VudW0oKSBpbiB0aGUgTmV0ZmlsdGVyIEguMzIzIGNvbm5lY3Rpb24gdHJhY2tpbmcgQVNOLjEgZGVjb2RlciB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzIHdoZW4gcmVhZGluZyBiaXRzIGZyb20gbWFsZm9ybWVkIHBhY2tldHMuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBuZXR3b3JrIHBhY2tldCBwcm9jZXNzaW5nIGhhbmRsZWQgYnkgdGhlIEguMzIzIGNvbm50cmFjayBoZWxwZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA1OjQ2OjE0LjE5Nzk4NTczOVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUyNTYzMzYyMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNTo0NjoxNC4xOTg2NzY3MDhaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0NTI1NTY0MDI2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG1pc3NpbmcgYm91bmRhcnkgY2hlY2sgYG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDEpYCB0byBgZGVjb2RlX2VudW0oKWAgYmVmb3JlIHJlYWRpbmcgYSBiaXQgZnJvbSB0aGUgQVNOLjEgYml0c3RyZWFtLiBQcmlvciB0byB0aGlzIGZpeCwgaWYgYGJzLVxcdTAwM2VjdXJgIHdhcyBhdCBgYnMtXFx1MDAzZWVuZGAsIGBnZXRfYml0KGJzKWAgd291bGQgcGVyZm9ybSBhbiBvdXQtb2YtYm91bmRzIHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBwYWNrZXQgZGF0YSBidWZmZXIuIFxcblxcbk91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIGFyZSBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMgZGlyZWN0bHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBwYWRkaW5nIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTgxOThkNjgzZWY0YzgyNjQ3MzQwZTA0YTg0YWU2NDhlY2NhMTc4MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMDU6NDU6MTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jXG5pbmRleCA2ODMwYzlkYTM1MDdjLi5iYTZjZTFmMDRlMWVkIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jXG5AQCAtMzYzLDYgKzM2Myw4IEBAIHN0YXRpYyBpbnQgZGVjb2RlX2VudW0oc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuIHtcbiBcdFBSSU5UKFwiJSpzJXNcXG5cIiwgbGV2ZWwgKiBUQUJfU0laRSwgXCIgXCIsIGYtXHUwMDNlbmFtZSk7XG4gXG4rXHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgMSkpXG4rXHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuIFx0aWYgKChmLVx1MDAzZWF0dHIgXHUwMDI2IEVYVCkgXHUwMDI2XHUwMDI2IGdldF9iaXQoYnMpKSB7XG4gXHRcdElOQ19CSVRTKGJzLCA3KTtcbiBcdH0gZWxzZSB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNTo0NjoxNC4xOTg2Nzc5MTlaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTE0MzYwMjIyMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBILjMyMyBBU04uMSBDb25udHJhY2sgQ29kZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGlzLiBUaGUgcGF0Y2ggaW4gcXVlc3Rpb24gaW52b2x2ZXMgdGhlIEguMzIzIEFTTi4xIGNvbm50cmFjayBjb2RlLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXQgaW50aW1hdGVseS4gTXkgZmlyc3Qgc3RlcCBpcyB0byB6ZXJvIGluIG9uIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AuIEknbGwgdXNlIGByZWFkLWZpbGVgIG5vdyB0byBwdWxsIHRoYXQgc3BlY2lmaWMgZmlsZSBpbnRvIHZpZXcgYW5kIEkgbmVlZCB0byBxdWlja2x5IHNjYW4gdG8gdGhlIGFyZWEgYXJvdW5kIGxpbmUgMzYzLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb250ZXh0dWFsIGZvdW5kYXRpb24gSSBuZWVkIHRvIHByb3Blcmx5IGdyYXNwIHRoZSBwYXRjaCdzIHB1cnBvc2UgYW5kIGl0cyBpbXBsaWNhdGlvbnMuIExldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHRoZXJlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMzksIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA1OjQ2OjI1LjYzNDcwNDU0MVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDUzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzUwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzUwOlxcdFxcdFxcdElOQ19CSVRTKGJzLCBmLVxcdTAwM2Vzeik7XFxuIDM1MTpcXHRcXHRcXHRicmVhaztcXG4gMzUyOlxcdFxcdH1cXG4gMzUzOlxcdFxcbiAzNTQ6XFx0XFx0UFJJTlQoXFxcIlxcXFxuXFxcIik7XFxuIDM1NTpcXHRcXG4gMzU2OlxcdFxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAwKSlcXG4gMzU3OlxcdFxcdFxcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xcbiAzNTg6XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfTk9ORTtcXG4gMzU5OlxcdH1cXG4gMzYwOlxcdFxcbiAzNjE6XFx0c3RhdGljIGludCBkZWNvZGVfZW51bShzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXFxuIDM2MjpcXHQgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcXG4gMzYzOlxcdHtcXG4gMzY0OlxcdFxcdFBSSU5UKFxcXCIlKnMlc1xcXFxuXFxcIiwgbGV2ZWwgKiBUQUJfU0laRSwgXFxcIiBcXFwiLCBmLVxcdTAwM2VuYW1lKTtcXG4gMzY1OlxcdFxcbiAzNjY6XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDEpKVxcbiAzNjc6XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuIDM2ODpcXHRcXHRpZiAoKGYtXFx1MDAzZWF0dHIgXFx1MDAyNiBFWFQpIFxcdTAwMjZcXHUwMDI2IGdldF9iaXQoYnMpKSB7XFxuIDM2OTpcXHRcXHRcXHRJTkNfQklUUyhicywgNyk7XFxuIDM3MDpcXHRcXHR9IGVsc2Uge1xcbiAzNzE6XFx0XFx0XFx0SU5DX0JJVFMoYnMsIGYtXFx1MDAzZXN6KTtcXG4gMzcyOlxcdFxcdH1cXG4gMzczOlxcdFxcbiAzNzQ6XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDApKVxcbiAzNzU6XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuIDM3NjpcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9OT05FO1xcbiAzNzc6XFx0fVxcbiAzNzg6XFx0XFxuIDM3OTpcXHRzdGF0aWMgaW50IGRlY29kZV9iaXRzdHIoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxcbiAzODA6XFx0ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcXG4gMzgxOlxcdHtcXG4gMzgyOlxcdFxcdHVuc2lnbmVkIGludCBsZW47XFxuIDM4MzpcXHRcXG4gMzg0OlxcdFxcdFBSSU5UKFxcXCIlKnMlc1xcXFxuXFxcIiwgbGV2ZWwgKiBUQUJfU0laRSwgXFxcIiBcXFwiLCBmLVxcdTAwM2VuYW1lKTtcXG4gMzg1OlxcdFxcbiAzODY6XFx0XFx0QllURV9BTElHTihicyk7XFxuIDM4NzpcXHRcXHRzd2l0Y2ggKGYtXFx1MDAzZXN6KSB7XFxuIDM4ODpcXHRcXHRjYXNlIEZJWEQ6XFx0XFx0LyogZml4ZWQgbGVuZ3RoIFxcdTAwM2UgMTYgKi9cXG4gMzg5OlxcdFxcdFxcdGxlbiA9IGYtXFx1MDAzZWxiO1xcbiAzOTA6XFx0XFx0XFx0YnJlYWs7XFxuIDM5MTpcXHRcXHRjYXNlIFdPUkQ6XFx0XFx0LyogMi1ieXRlIGxlbmd0aCAqL1xcbiAzOTI6XFx0XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDIsIDApKVxcbiAzOTM6XFx0XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuIDM5NDpcXHRcXHRcXHRsZW4gPSAoKmJzLVxcdTAwM2VjdXIrKykgXFx1MDAzY1xcdTAwM2MgODtcXG4gMzk1OlxcdFxcdFxcdGxlbiArPSAoKmJzLVxcdTAwM2VjdXIrKykgKyBmLVxcdTAwM2VsYjtcXG4gMzk2OlxcdFxcdFxcdGJyZWFrO1xcbiAzOTc6XFx0XFx0Y2FzZSBTRU1JOlxcbiAzOTg6XFx0XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDIsIDApKVxcbiAzOTk6XFx0XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA1OjQ2OjI1LjYzNDgxMjMwMVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODQzOTc1NjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIGl0OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgQml0c3RyZWFtIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQncyBoYXBwZW5pbmcuIEZpcnN0LCBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlc2UgZm91ciB0aGluZ3M6IGBuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5YCwgYGdldF9iaXRgLCBgSU5DX0JJVFNgLCBhbmQgYHN0cnVjdCBiaXRzdHJgLiBUaGVzZSBuYW1lcyBzdWdnZXN0IHRoYXQgdGhleSdyZSBhbGwgcmVsYXRlZCB0byBoYW5kbGluZyBiaXRzdHJlYW1zLCBsaWtlbHkgaW4gdGhlIGNvbnRleHQgb2YgSC4zMjMgKE5ldHdvcmsgRmlsZSBTeXN0ZW0/KS5cblxuSSBrbm93IHRoaXMgaXMgd2hlcmUgdGhlIGludGVyZXN0aW5nIHN0dWZmIGlzLiBMZXQgbWUgYmFjayB1cCBhIGJpdCBhbmQgc2VlIGhvdyB0aGVzZSB0aGluZ3MgYXJlIGRlZmluZWQgYW5kIHVzZWQuIEknbGwgcmVhZCBlYXJsaWVyIGluIHRoZSBmaWxlIHRvIGdldCBzb21lIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIHN0cnVjdHVyZSBhbmQgb3BlcmF0aW9ucywgd2hlcmUgdGhlIGJvdW5kYXJpZXMgYXJlIGRyYXduLCBhbmQgaG93IHRoZSBiaXRzIGFyZSBwcm9jZXNzZWQuIFRoaXMgc2hvdWxkIGhlbHAgbWUgcHV0IGFsbCB0aGUgcGllY2VzIHRvZ2V0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjAzLCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNTo0NjoyNy40Nzg3OTA3NzFaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiBCRVIgYW5kIFBFUiBkZWNvZGluZyBsaWJyYXJ5IGZvciBILjMyMyBjb25udHJhY2svTkFUIG1vZHVsZS5cXG4gICA0OlxcdCAqXFxuICAgNTpcXHQgKiBDb3B5cmlnaHQgKGMpIDIwMDYgYnkgSmluZyBNaW4gWmhhbyBcXHUwMDNjemhhb2ppbmdtaW5AdXNlcnMuc291cmNlZm9yZ2UubmV0XFx1MDAzZVxcbiAgIDY6XFx0ICpcXG4gICA3OlxcdCAqIFNlZSBuZl9jb25udHJhY2tfaGVscGVyX2gzMjNfYXNuMS5oIGZvciBkZXRhaWxzLlxcbiAgIDg6XFx0ICovXFxuICAgOTpcXHRcXG4gIDEwOlxcdCNpZmRlZiBfX0tFUk5FTF9fXFxuICAxMTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuICAxMjpcXHQjZWxzZVxcbiAgMTM6XFx0I2luY2x1ZGUgXFx1MDAzY3N0ZGlvLmhcXHUwMDNlXFxuICAxNDpcXHQjZW5kaWZcXG4gIDE1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5oXFx1MDAzZVxcbiAgMTY6XFx0XFxuICAxNzpcXHQvKiBUcmFjZSBGbGFnICovXFxuICAxODpcXHQjaWZuZGVmIEgzMjNfVFJBQ0VcXG4gIDE5OlxcdCNkZWZpbmUgSDMyM19UUkFDRSAwXFxuICAyMDpcXHQjZW5kaWZcXG4gIDIxOlxcdFxcbiAgMjI6XFx0I2lmIEgzMjNfVFJBQ0VcXG4gIDIzOlxcdCNkZWZpbmUgVEFCX1NJWkUgNFxcbiAgMjQ6XFx0I2lmZGVmIF9fS0VSTkVMX19cXG4gIDI1OlxcdCNkZWZpbmUgUFJJTlQgcHJpbnRrXFxuICAyNjpcXHQjZWxzZVxcbiAgMjc6XFx0I2RlZmluZSBQUklOVCBwcmludGZcXG4gIDI4OlxcdCNlbmRpZlxcbiAgMjk6XFx0I2RlZmluZSBGTkFNRShuYW1lKSBuYW1lLFxcbiAgMzA6XFx0I2Vsc2VcXG4gIDMxOlxcdCNkZWZpbmUgUFJJTlQoZm10LCBhcmdzLi4uKVxcbiAgMzI6XFx0I2RlZmluZSBGTkFNRShuYW1lKVxcbiAgMzM6XFx0I2VuZGlmXFxuICAzNDpcXHRcXG4gIDM1OlxcdC8qIEFTTi4xIFR5cGVzICovXFxuICAzNjpcXHQjZGVmaW5lIE5VTCAwXFxuICAzNzpcXHQjZGVmaW5lIEJPT0wgMVxcbiAgMzg6XFx0I2RlZmluZSBPSUQgMlxcbiAgMzk6XFx0I2RlZmluZSBJTlQgM1xcbiAgNDA6XFx0I2RlZmluZSBFTlVNIDRcXG4gIDQxOlxcdCNkZWZpbmUgQklUU1RSIDVcXG4gIDQyOlxcdCNkZWZpbmUgTlVNU1RSIDZcXG4gIDQzOlxcdCNkZWZpbmUgTlVNREdUIDZcXG4gIDQ0OlxcdCNkZWZpbmUgVEJDRFNUUiA2XFxuICA0NTpcXHQjZGVmaW5lIE9DVFNUUiA3XFxuICA0NjpcXHQjZGVmaW5lIFBSVFNUUiA3XFxuICA0NzpcXHQjZGVmaW5lIElBNVNUUiA3XFxuICA0ODpcXHQjZGVmaW5lIEdFTlNUUiA3XFxuICA0OTpcXHQjZGVmaW5lIEJNUFNUUiA4XFxuICA1MDpcXHQjZGVmaW5lIFNFUSA5XFxuICA1MTpcXHQjZGVmaW5lIFNFVCA5XFxuICA1MjpcXHQjZGVmaW5lIFNFUU9GIDEwXFxuICA1MzpcXHQjZGVmaW5lIFNFVE9GIDEwXFxuICA1NDpcXHQjZGVmaW5lIENIT0lDRSAxMVxcbiAgNTU6XFx0XFxuICA1NjpcXHQvKiBDb25zdHJhaW50IFR5cGVzICovXFxuICA1NzpcXHQjZGVmaW5lIEZJWEQgMFxcbiAgNTg6XFx0LyogI2RlZmluZSBCSVRTIDEtOCAqL1xcbiAgNTk6XFx0I2RlZmluZSBCWVRFIDlcXG4gIDYwOlxcdCNkZWZpbmUgV09SRCAxMFxcbiAgNjE6XFx0I2RlZmluZSBDT05TIDExXFxuICA2MjpcXHQjZGVmaW5lIFNFTUkgMTJcXG4gIDYzOlxcdCNkZWZpbmUgVU5DTyAxM1xcbiAgNjQ6XFx0XFxuICA2NTpcXHQvKiBBU04uMSBUeXBlIEF0dHJpYnV0ZXMgKi9cXG4gIDY2OlxcdCNkZWZpbmUgU0tJUCAwXFxuICA2NzpcXHQjZGVmaW5lIFNUT1AgMVxcbiAgNjg6XFx0I2RlZmluZSBERUNPREUgMlxcbiAgNjk6XFx0I2RlZmluZSBFWFQgNFxcbiAgNzA6XFx0I2RlZmluZSBPUEVOIDhcXG4gIDcxOlxcdCNkZWZpbmUgT1BUIDE2XFxuICA3MjpcXHRcXG4gIDczOlxcdFxcbiAgNzQ6XFx0LyogQVNOLjEgRmllbGQgU3RydWN0dXJlICovXFxuICA3NTpcXHR0eXBlZGVmIHN0cnVjdCBmaWVsZF90IHtcXG4gIDc2OlxcdCNpZiBIMzIzX1RSQUNFXFxuICA3NzpcXHRcXHRjaGFyICpuYW1lO1xcbiAgNzg6XFx0I2VuZGlmXFxuICA3OTpcXHRcXHR1bnNpZ25lZCBjaGFyIHR5cGU7XFxuICA4MDpcXHRcXHR1bnNpZ25lZCBjaGFyIHN6O1xcbiAgODE6XFx0XFx0dW5zaWduZWQgY2hhciBsYjtcXG4gIDgyOlxcdFxcdHVuc2lnbmVkIGNoYXIgdWI7XFxuICA4MzpcXHRcXHR1bnNpZ25lZCBzaG9ydCBhdHRyO1xcbiAgODQ6XFx0XFx0dW5zaWduZWQgc2hvcnQgb2Zmc2V0O1xcbiAgODU6XFx0XFx0Y29uc3Qgc3RydWN0IGZpZWxkX3QgKmZpZWxkcztcXG4gIDg2OlxcdH0gZmllbGRfdDtcXG4gIDg3OlxcdFxcbiAgODg6XFx0LyogQml0IFN0cmVhbSAqL1xcbiAgODk6XFx0c3RydWN0IGJpdHN0ciB7XFxuICA5MDpcXHRcXHR1bnNpZ25lZCBjaGFyICpidWY7XFxuICA5MTpcXHRcXHR1bnNpZ25lZCBjaGFyICpiZWc7XFxuICA5MjpcXHRcXHR1bnNpZ25lZCBjaGFyICplbmQ7XFxuICA5MzpcXHRcXHR1bnNpZ25lZCBjaGFyICpjdXI7XFxuICA5NDpcXHRcXHR1bnNpZ25lZCBpbnQgYml0O1xcbiAgOTU6XFx0fTtcXG4gIDk2OlxcdFxcbiAgOTc6XFx0LyogVG9vbCBGdW5jdGlvbnMgKi9cXG4gIDk4OlxcdCNkZWZpbmUgSU5DX0JJVChicykgaWYoKCsrKGJzKS1cXHUwMDNlYml0KVxcdTAwM2U3KXsoYnMpLVxcdTAwM2VjdXIrKzsoYnMpLVxcdTAwM2ViaXQ9MDt9XFxuICA5OTpcXHQjZGVmaW5lIElOQ19CSVRTKGJzLGIpIGlmKCgoYnMpLVxcdTAwM2ViaXQrPShiKSlcXHUwMDNlNyl7KGJzKS1cXHUwMDNlY3VyKz0oYnMpLVxcdTAwM2ViaXRcXHUwMDNlXFx1MDAzZTM7KGJzKS1cXHUwMDNlYml0XFx1MDAyNj03O31cXG4gMTAwOlxcdCNkZWZpbmUgQllURV9BTElHTihicykgaWYoKGJzKS1cXHUwMDNlYml0KXsoYnMpLVxcdTAwM2VjdXIrKzsoYnMpLVxcdTAwM2ViaXQ9MDt9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA1OjQ2OjI3LjQ3ODkxNzY4MVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjU2NDk2MTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYCBmb3IgQm91bmRhcnkgQ29uZGl0aW9ucyoqXG5cbk9rYXksIEkgbmVlZCB0byB6ZXJvIGluIG9uIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXR5IHdpdGhpbiB0aGUgSC4zMjMgY29ubmVjdGlvbiB0cmFja2luZyBjb2RlLiBNeSBodW5jaCBpcyB0aGF0IGVycm9ycyBvciBlZGdlIGNhc2VzIGluIGhvdyB0aGUgQVNOLjEgZGF0YSBpcyBwYXJzZWQgbWlnaHQgYmUgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUgYm91bmRhcnkgY29uZGl0aW9ucyB3aGVyZSB0aGUgZGF0YSBjb3VsZCBiZSBtYWxmb3JtZWQgb3IgbWFuaXB1bGF0ZWQuIExldCdzIGRpZyBpbnRvIHRoZSBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNgIGZpbGUuIEknbSBnb2luZyB0byBmb2N1cyBvbiBsaW5lcyAxMDEgdGhyb3VnaCAyMDAsIGFzIHRoaXMgc2hvdWxkIGNvbnRhaW4gdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyBJJ20gaW50ZXJlc3RlZCBpbi4gSSBrbm93IHRoYXQgdGhlIGBuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5YCBmdW5jdGlvbiBzaG91bGQgaGFuZGxlIHNvbWUgb2YgdGhlc2UgYm91bmRhcnkgaXNzdWVzLCBzbyBJJ2xsIHNlZSBob3cgcm9idXN0IGl0IGlzLiBXaGlsZSBJJ20gdGhlcmUsIEkgc2hvdWxkIGFsc28gY2hlY2sgb3V0IGBnZXRfYml0YCwgYXMgdGhpcyBsb3ctbGV2ZWwgYml0IG1hbmlwdWxhdGlvbiBpcyBvZnRlbiBhIHNvdXJjZSBvZiBzdWJ0bGUgYnVncyB3aGVuIGRlYWxpbmcgd2l0aCBBU04uMSBkYXRhLiBNeSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGhhbmRsZSBpbnZhbGlkIG9yIHVuZXhwZWN0ZWQgZGF0YSBhbmQgc2VlIGlmIEkgY2FuIGZpbmQgYW4gZXhwbG9pdGFibGUgZmxhdywgb3IgaWYgdGhlcmUgaXMgcm9vbSBmb3IgaW1wcm92ZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MjAsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA1OjQ2OjI5LjczNTQxNzc2NFoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDIzMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTAxLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAxOlxcdHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2xlbihzdHJ1Y3QgYml0c3RyICpicyk7XFxuIDEwMjpcXHRzdGF0aWMgdW5zaWduZWQgaW50IGdldF9iaXQoc3RydWN0IGJpdHN0ciAqYnMpO1xcbiAxMDM6XFx0c3RhdGljIHVuc2lnbmVkIGludCBnZXRfYml0cyhzdHJ1Y3QgYml0c3RyICpicywgdW5zaWduZWQgaW50IGIpO1xcbiAxMDQ6XFx0c3RhdGljIHVuc2lnbmVkIGludCBnZXRfYml0bWFwKHN0cnVjdCBiaXRzdHIgKmJzLCB1bnNpZ25lZCBpbnQgYik7XFxuIDEwNTpcXHRzdGF0aWMgdW5zaWduZWQgaW50IGdldF91aW50KHN0cnVjdCBiaXRzdHIgKmJzLCBpbnQgYik7XFxuIDEwNjpcXHRcXG4gMTA3OlxcdC8qIERlY29kZXIgRnVuY3Rpb25zICovXFxuIDEwODpcXHRzdGF0aWMgaW50IGRlY29kZV9udWwoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLCBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpO1xcbiAxMDk6XFx0c3RhdGljIGludCBkZWNvZGVfYm9vbChzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XFxuIDExMDpcXHRzdGF0aWMgaW50IGRlY29kZV9vaWQoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLCBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpO1xcbiAxMTE6XFx0c3RhdGljIGludCBkZWNvZGVfaW50KHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcXG4gMTEyOlxcdHN0YXRpYyBpbnQgZGVjb2RlX2VudW0oc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLCBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpO1xcbiAxMTM6XFx0c3RhdGljIGludCBkZWNvZGVfYml0c3RyKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcXG4gMTE0OlxcdHN0YXRpYyBpbnQgZGVjb2RlX251bXN0cihzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XFxuIDExNTpcXHRzdGF0aWMgaW50IGRlY29kZV9vY3RzdHIoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLCBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpO1xcbiAxMTY6XFx0c3RhdGljIGludCBkZWNvZGVfYm1wc3RyKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcXG4gMTE3OlxcdHN0YXRpYyBpbnQgZGVjb2RlX3NlcShzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XFxuIDExODpcXHRzdGF0aWMgaW50IGRlY29kZV9zZXFvZihzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XFxuIDExOTpcXHRzdGF0aWMgaW50IGRlY29kZV9jaG9pY2Uoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLCBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpO1xcbiAxMjA6XFx0XFxuIDEyMTpcXHQvKiBEZWNvZGVyIEZ1bmN0aW9ucyBWZWN0b3IgKi9cXG4gMTIyOlxcdHR5cGVkZWYgaW50ICgqZGVjb2Rlcl90KShzdHJ1Y3QgYml0c3RyICosIGNvbnN0IHN0cnVjdCBmaWVsZF90ICosIGNoYXIgKiwgaW50KTtcXG4gMTIzOlxcdHN0YXRpYyBjb25zdCBkZWNvZGVyX3QgRGVjb2RlcnNbXSA9IHtcXG4gMTI0OlxcdFxcdGRlY29kZV9udWwsXFxuIDEyNTpcXHRcXHRkZWNvZGVfYm9vbCxcXG4gMTI2OlxcdFxcdGRlY29kZV9vaWQsXFxuIDEyNzpcXHRcXHRkZWNvZGVfaW50LFxcbiAxMjg6XFx0XFx0ZGVjb2RlX2VudW0sXFxuIDEyOTpcXHRcXHRkZWNvZGVfYml0c3RyLFxcbiAxMzA6XFx0XFx0ZGVjb2RlX251bXN0cixcXG4gMTMxOlxcdFxcdGRlY29kZV9vY3RzdHIsXFxuIDEzMjpcXHRcXHRkZWNvZGVfYm1wc3RyLFxcbiAxMzM6XFx0XFx0ZGVjb2RlX3NlcSxcXG4gMTM0OlxcdFxcdGRlY29kZV9zZXFvZixcXG4gMTM1OlxcdFxcdGRlY29kZV9jaG9pY2UsXFxuIDEzNjpcXHR9O1xcbiAxMzc6XFx0XFxuIDEzODpcXHQvKlxcbiAxMzk6XFx0ICogSC4zMjMgVHlwZXNcXG4gMTQwOlxcdCAqL1xcbiAxNDE6XFx0I2luY2x1ZGUgXFxcIm5mX2Nvbm50cmFja19oMzIzX3R5cGVzLmNcXFwiXFxuIDE0MjpcXHRcXG4gMTQzOlxcdC8qXFxuIDE0NDpcXHQgKiBGdW5jdGlvbnNcXG4gMTQ1OlxcdCAqL1xcbiAxNDY6XFx0XFxuIDE0NzpcXHQvKiBBc3N1bWUgYnMgaXMgYWxpZ25lZCBcXHUwMDI2XFx1MDAyNiB2IFxcdTAwM2MgMTYzODQgKi9cXG4gMTQ4OlxcdHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2xlbihzdHJ1Y3QgYml0c3RyICpicylcXG4gMTQ5OlxcdHtcXG4gMTUwOlxcdFxcdHVuc2lnbmVkIGludCB2O1xcbiAxNTE6XFx0XFxuIDE1MjpcXHRcXHR2ID0gKmJzLVxcdTAwM2VjdXIrKztcXG4gMTUzOlxcdFxcbiAxNTQ6XFx0XFx0aWYgKHYgXFx1MDAyNiAweDgwKSB7XFxuIDE1NTpcXHRcXHRcXHR2IFxcdTAwMjY9IDB4M2Y7XFxuIDE1NjpcXHRcXHRcXHR2IFxcdTAwM2NcXHUwMDNjPSA4O1xcbiAxNTc6XFx0XFx0XFx0diArPSAqYnMtXFx1MDAzZWN1cisrO1xcbiAxNTg6XFx0XFx0fVxcbiAxNTk6XFx0XFxuIDE2MDpcXHRcXHRyZXR1cm4gdjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDU6NDY6MjkuNzM1NTIxNjM0WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NTkzNzAzNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucy4uLlxuXG4qKkRlbHZpbmcgaW50byB0aGUgSC4zMjMgQVNOLjEgQ29ubnRyYWNrIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGhhbmRsaW5nIG9mIEguMzIzIHRyYWZmaWMgd2l0aGluIHRoZSBjb25udHJhY2sgc3lzdGVtLiBTcGVjaWZpY2FsbHksIEknbSBmb2N1c2luZyBvbiBgZ2V0X2JpdGAgYW5kIGBuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5YC5cblxuYGdldF9iaXRgIOKAkyBpdCdzIGEgYmFzaWMgYml0LWZpZWxkIHJldHJpZXZhbCBmdW5jdGlvbiwgbm8gZG91YnQuIFByb2JhYmx5IHVzZWQgdG8gcGFyc2UgZW5jb2RlZCBBU04uMSBzdHJ1Y3R1cmVzIGFuZCBleHRyYWN0IGluZGl2aWR1YWwgZmxhZ3Mgb3IgdmFsdWVzIHdpdGhpbiBhIGxhcmdlciBmaWVsZC4gSeKAmWxsIGJldCBpdCdzIGltcGxlbWVudGVkIGVmZmljaWVudGx5LCBwZXJoYXBzIHdpdGggc29tZSBwcmUtY2FsY3VsYXRlZCBsb29rdXAgdGFibGVzIG9yIGJpdC1tYXNraW5nIG9wdGltaXphdGlvbiB0ZWNobmlxdWVzLiBJIHNob3VsZCByZXZpZXcgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMuXG5cblRoZW4gdGhlcmXigJlzIGBuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5YC4gVGhpcyBsb29rcyBsaWtlIHRoZSBjcnVjaWFsIGZ1bmN0aW9uIGZvciBtYW5hZ2luZyBlcnJvciBjb25kaXRpb25zLiBHaXZlbiB0aGUgaW5oZXJlbnQgY29tcGxleGl0eSBhbmQgc29tZXRpbWVzIGZsYWt5IG5hdHVyZSBvZiBILjMyMyBzaWduYWxpbmcsIGVycm9yIGhhbmRsaW5nIGlzIHBhcmFtb3VudC4gSSdtIGd1ZXNzaW5nIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGRldGVjdGluZyBhbmQgZ3JhY2VmdWxseSBoYW5kbGluZyBtYWxmb3JtZWQgb3IgaW52YWxpZCBBU04uMSBkYXRhLCBwb3RlbnRpYWxseSB0cmlnZ2VyZWQgYnkgbWFsaWNpb3VzIHBhY2tldHMgb3IgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24gYnVncy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHN0cmF0ZWd5IGZvciBwcmV2ZW50aW5nIGRlbmlhbC1vZi1zZXJ2aWNlIGF0dGFja3MgYnkgY2FyZWZ1bGx5IGJvdW5kaW5nIHJlc291cmNlIGNvbnN1bXB0aW9uIGluIHRoZSBmYWNlIG9mIGJhZCBpbnB1dC4gSSB3b25kZXIgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBvdmVyYWxsIGNvbm50cmFjayBmcmFtZXdvcmsg4oCTIGRvZXMgaXQgbWFyayB0aGUgY29ubmVjdGlvbiBhcyBpbnZhbGlkLCBsb2cgdGhlIGV2ZW50LCBvciBwb3NzaWJseSB0YWtlIG1vcmUgYWdncmVzc2l2ZSBhY3Rpb24gbGlrZSBkcm9wcGluZyB0aGUgb2ZmZW5kaW5nIHBhY2tldCBpbW1lZGlhdGVseT8gSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBlc3BlY2lhbGx5IGJ1ZmZlciBvdmVyZmxvd3Mgb3IgaW50ZWdlciBvdmVyZmxvd3MsIHRvIG1ha2Ugc3VyZSB0aGlzIGNvZGUgaXMgcm9idXN0IGFnYWluc3QgcG90ZW50aWFsIGF0dGFja3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMzgsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA1OjQ2OjMyLjU5NDg5NDcwNloiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDU2MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTYxLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTYxOlxcdH1cXG4gMTYyOlxcdFxcbiAxNjM6XFx0c3RhdGljIGludCBuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KHN0cnVjdCBiaXRzdHIgKmJzLCBzaXplX3QgYnl0ZXMsIHNpemVfdCBiaXRzKVxcbiAxNjQ6XFx0e1xcbiAxNjU6XFx0XFx0Yml0cyArPSBicy1cXHUwMDNlYml0O1xcbiAxNjY6XFx0XFx0Ynl0ZXMgKz0gYml0cyAvIEJJVFNfUEVSX0JZVEU7XFxuIDE2NzpcXHRcXHRpZiAoYml0cyAlIEJJVFNfUEVSX0JZVEUgXFx1MDAzZSAwKVxcbiAxNjg6XFx0XFx0XFx0Ynl0ZXMrKztcXG4gMTY5OlxcdFxcbiAxNzA6XFx0XFx0aWYgKGJzLVxcdTAwM2VjdXIgKyBieXRlcyBcXHUwMDNlIGJzLVxcdTAwM2VlbmQpXFxuIDE3MTpcXHRcXHRcXHRyZXR1cm4gMTtcXG4gMTcyOlxcdFxcbiAxNzM6XFx0XFx0cmV0dXJuIDA7XFxuIDE3NDpcXHR9XFxuIDE3NTpcXHRcXG4gMTc2OlxcdHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2JpdChzdHJ1Y3QgYml0c3RyICpicylcXG4gMTc3OlxcdHtcXG4gMTc4OlxcdFxcdHVuc2lnbmVkIGludCBiID0gKCpicy1cXHUwMDNlY3VyKSBcXHUwMDI2ICgweDgwIFxcdTAwM2VcXHUwMDNlIGJzLVxcdTAwM2ViaXQpO1xcbiAxNzk6XFx0XFxuIDE4MDpcXHRcXHRJTkNfQklUKGJzKTtcXG4gMTgxOlxcdFxcbiAxODI6XFx0XFx0cmV0dXJuIGI7XFxuIDE4MzpcXHR9XFxuIDE4NDpcXHRcXG4gMTg1OlxcdC8qIEFzc3VtZSBiIFxcdTAwM2M9IDggKi9cXG4gMTg2OlxcdHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2JpdHMoc3RydWN0IGJpdHN0ciAqYnMsIHVuc2lnbmVkIGludCBiKVxcbiAxODc6XFx0e1xcbiAxODg6XFx0XFx0dW5zaWduZWQgaW50IHYsIGw7XFxuIDE4OTpcXHRcXG4gMTkwOlxcdFxcdHYgPSAoKmJzLVxcdTAwM2VjdXIpIFxcdTAwMjYgKDB4ZmZVIFxcdTAwM2VcXHUwMDNlIGJzLVxcdTAwM2ViaXQpO1xcbiAxOTE6XFx0XFx0bCA9IGIgKyBicy1cXHUwMDNlYml0O1xcbiAxOTI6XFx0XFxuIDE5MzpcXHRcXHRpZiAobCBcXHUwMDNjIDgpIHtcXG4gMTk0OlxcdFxcdFxcdHYgXFx1MDAzZVxcdTAwM2U9IDggLSBsO1xcbiAxOTU6XFx0XFx0XFx0YnMtXFx1MDAzZWJpdCA9IGw7XFxuIDE5NjpcXHRcXHR9IGVsc2UgaWYgKGwgPT0gOCkge1xcbiAxOTc6XFx0XFx0XFx0YnMtXFx1MDAzZWN1cisrO1xcbiAxOTg6XFx0XFx0XFx0YnMtXFx1MDAzZWJpdCA9IDA7XFxuIDE5OTpcXHRcXHR9IGVsc2Uge1xcdFxcdC8qIGwgXFx1MDAzZSA4ICovXFxuIDIwMDpcXHRcXG4gMjAxOlxcdFxcdFxcdHYgXFx1MDAzY1xcdTAwM2M9IDg7XFxuIDIwMjpcXHRcXHRcXHR2ICs9ICooKyticy1cXHUwMDNlY3VyKTtcXG4gMjAzOlxcdFxcdFxcdHYgXFx1MDAzZVxcdTAwM2U9IDE2IC0gbDtcXG4gMjA0OlxcdFxcdFxcdGJzLVxcdTAwM2ViaXQgPSBsIC0gODtcXG4gMjA1OlxcdFxcdH1cXG4gMjA2OlxcdFxcbiAyMDc6XFx0XFx0cmV0dXJuIHY7XFxuIDIwODpcXHR9XFxuIDIwOTpcXHRcXG4gMjEwOlxcdC8qIEFzc3VtZSBiIFxcdTAwM2M9IDMyICovXFxuIDIxMTpcXHRzdGF0aWMgdW5zaWduZWQgaW50IGdldF9iaXRtYXAoc3RydWN0IGJpdHN0ciAqYnMsIHVuc2lnbmVkIGludCBiKVxcbiAyMTI6XFx0e1xcbiAyMTM6XFx0XFx0dW5zaWduZWQgaW50IHYsIGwsIHNoaWZ0LCBieXRlcztcXG4gMjE0OlxcdFxcbiAyMTU6XFx0XFx0aWYgKCFiKVxcbiAyMTY6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDIxNzpcXHRcXG4gMjE4OlxcdFxcdGwgPSBicy1cXHUwMDNlYml0ICsgYjtcXG4gMjE5OlxcdFxcbiAyMjA6XFx0XFx0aWYgKGwgXFx1MDAzYyA4KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA1OjQ2OjMyLjU5NTAwNjc2NloiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTgwNjE4MTQzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBkZWNvZGVfZW51bWAgRnVuY3Rpb24gYW5kIFBvdGVudGlhbCBWdWxuZXJhYmlsaXRpZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgYGRlY29kZV9lbnVtYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2UgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIGFueSBpc3N1ZXMuICBJdCBhcHBlYXJzIHRvIGJlIHBhcnQgb2YgdGhlIG5ldGZpbHRlciBILjMyMyBjb25udHJhY2sgaGVscGVyLCBkZWFsaW5nIHdpdGggQVNOLjEgZGVjb2RpbmcuIFRoZSBjb2RlIHNuaXBwZXQgc2hvd3MgYSBjcnVjaWFsIGltcHJvdmVtZW50LlxuXG5QcmV2aW91c2x5LCBpZiBgZi1cdTAwM2VhdHRyIFx1MDAyNiBFWFRgIHdhcyB0cnVlLCB0aGUgZnVuY3Rpb24gd291bGQgY2FsbCBgZ2V0X2JpdChicylgLiBEaXZpbmcgaW50byBgZ2V0X2JpdChicylgLCBpdCBwZXJmb3JtcyBhIGJpdHdpc2Ugb3BlcmF0aW9uIG9uIGBicy1cdTAwM2VjdXJgICh3aGljaCwgYmFzZWQgb24gdGhlIGNvbnRleHQsIGxpa2VseSBwb2ludHMgdG8gYSBieXRlIHdpdGhpbiB0aGUgcGFja2V0IGRhdGEgYnVmZmVyKSBhbmQgYWR2YW5jZXMgdGhlIGJpdCBwb2ludGVyLiBUaGUgY3JpdGljYWwgdnVsbmVyYWJpbGl0eSBzdGVtbWVkIGZyb20gdGhlIHBvc3NpYmlsaXR5IHRoYXQgaWYgYGJzLVx1MDAzZWN1cmAgd2FzIGVxdWFsIHRvIGBicy1cdTAwM2VlbmRgLCB0aGVuIGEgZGlyZWN0IGFjY2VzcyB0byBgKmJzLVx1MDAzZWN1cmAgd291bGQgY29uc3RpdHV0ZSBhbiBvdXQtb2YtYm91bmRzIHJlYWQuIFRoaXMgbWVhbnMgdGhlIGNvZGUgd2FzIGF0dGVtcHRpbmcgdG8gcmVhZCBiZXlvbmQgdGhlIGFsbG9jYXRlZCBidWZmZXIsIHB1bGxpbmcgZGF0YSBmcm9tIGFuIGFyZWEgaXQgc2hvdWxkbid0IGFjY2Vzcy4gVGhhdCdzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHJlYWQsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gYSBjcmFzaCBvciwgd29yc2UsIGluZm9ybWF0aW9uIGxlYWthZ2UuXG5cbk5vdywgd2l0aCB0aGUgYWRkaXRpb24gb2YgYGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAxKSkgcmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7YCwgdGhlIGNvZGUgc2VlbXMgdG8gY2hlY2sgaWYgYXQgbGVhc3Qgb25lIGJpdCBpcyByZW1haW5pbmcgaW4gdGhlIGJ1ZmZlciBiZWZvcmUgYXR0ZW1wdGluZyB0aGUgcmVhZC4gVGhpcyBpcyBhIGdvb2QgZGVmZW5zaXZlIHByb2dyYW1taW5nIG1lYXN1cmUuICBJdCBhcHBlYXJzIHRvIHByZXZlbnQgdGhlIG91dC1vZi1ib3VuZHMgcmVhZCB3aGVuIHRoZXJlIGlzbid0IGVub3VnaCBkYXRhLlxuXG5NeSBuZXh0IGxpbmUgb2YgdGhpbmtpbmcgaXMsIGV2ZW4gdGhvdWdoIGl0IGZpeGVkIHRoZSBPT0IsIHdoYXQgYWJvdXQgdGhlIG5hdHVyZSBvZiB0aGUgZGF0YSBpbnZvbHZlZD8gIFRoZXJlJ3Mgbm8gaW5kaWNhdGlvbiBoZXJlIHRoYXQgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGFsbG9jYXRlZCBvciByZWFkLiBUaGUgYnVmZmVyIGBic2AgaXMgdGllZCB0byB0aGUgcGFja2V0IHBheWxvYWQgZGF0YSBmcm9tIHRoZSBza2IsIGJlaW5nIHBhcnNlZCBieSBuZXRmaWx0ZXIuIFRoaXMgbWVhbnMgdGhlIG1lbW9yeSBpcyAqZXhwZWN0ZWQqIHRvIGJlIHBvcHVsYXRlZCwgc28gdGhhdCBydWxlcyBvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEJ1dCB0aGlzIG1lYW5zIHRoZSBkYXRhIGJlaW5nIHJlYWQgaGVyZSAqaXMqIHRoZSBwYWNrZXQgZGF0YSwgd2hpY2ggbmVlZHMgdG8gYmUgcGFyc2VkIHNlY3VyZWx5IHRvIHByZXZlbnQgYSBtaXMtaW50ZXJwcmV0YXRpb24gb2YgdGhlIHBhY2tldCAoZS5nLiBpbnRlZ2VyIG92ZXJmbG93LCBldGMpLlxuXG5UaGUgY29ycmVjdGlvbiBmb2N1c2VzIG9uIHByZXZlbnRpbmcgdGhlIE9PQiBpc3N1ZSwgc3BlY2lmaWNhbGx5IGJ5IGNoZWNraW5nIHRoZSBidWZmZXIgYm91bmRhcnkuIEhvd2V2ZXIsIGEgZnVsbCBzZWN1cml0eSBhc3Nlc3NtZW50IG5lY2Vzc2l0YXRlcyBleGFtaW5pbmcgb3RoZXIgYXNwZWN0cy4gSSBuZWVkIHRvIGxvb2sgYXQgaG93IGBkZWNvZGVfZW51bWAgaXMgY2FsbGVkIHdpdGhpbiB0aGUgbGFyZ2VyIGNvbnRleHQgYW5kIGFuYWx5emUgdGhlIHN0cnVjdHVyZSBvZiB0aGUgb3RoZXIgYGRlY29kZV8qYCBmdW5jdGlvbnMgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYC4gQXJlIHRoZXJlIHNpbWlsYXIgcGF0dGVybnM/IEFyZSB0aGVyZSBvdGhlciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gYnVmZmVyIHNpemVzLCBkYXRhIGludGVycHJldGF0aW9uLCBvciBlcnJvciBoYW5kbGluZz8gQSBjb21wcmVoZW5zaXZlIHJldmlldyBpcyBuZWVkZWQgdG8gY29uZmlybSB0aGUgb3ZlcmFsbCByb2J1c3RuZXNzIG9mIHRoZSBBU04uMSBkZWNvZGluZyB3aXRoaW4gdGhpcyBoZWxwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNTQsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNTo0Njo0NC40MDExOTEzMjNaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyMCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMyMDpcXHRcXHRjYXNlIEJZVEU6XFx0XFx0LyogUmFuZ2UgPT0gMjU2ICovXFxuIDMyMTpcXHRcXHRcXHRCWVRFX0FMSUdOKGJzKTtcXG4gMzIyOlxcdFxcdFxcdGJzLVxcdTAwM2VjdXIrKztcXG4gMzIzOlxcdFxcdFxcdGJyZWFrO1xcbiAzMjQ6XFx0XFx0Y2FzZSBXT1JEOlxcdFxcdC8qIDI1NyBcXHUwMDNjPSBSYW5nZSBcXHUwMDNjPSA2NEsgKi9cXG4gMzI1OlxcdFxcdFxcdEJZVEVfQUxJR04oYnMpO1xcbiAzMjY6XFx0XFx0XFx0YnMtXFx1MDAzZWN1ciArPSAyO1xcbiAzMjc6XFx0XFx0XFx0YnJlYWs7XFxuIDMyODpcXHRcXHRjYXNlIENPTlM6XFx0XFx0LyogNjRLIFxcdTAwM2MgUmFuZ2UgXFx1MDAzYyA0RyAqL1xcbiAzMjk6XFx0XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDIpKVxcbiAzMzA6XFx0XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuIDMzMTpcXHRcXHRcXHRsZW4gPSBnZXRfYml0cyhicywgMikgKyAxO1xcbiAzMzI6XFx0XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIGxlbiwgMCkpXFxuIDMzMzpcXHRcXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4gMzM0OlxcdFxcdFxcdEJZVEVfQUxJR04oYnMpO1xcbiAzMzU6XFx0XFx0XFx0aWYgKGJhc2UgXFx1MDAyNlxcdTAwMjYgKGYtXFx1MDAzZWF0dHIgXFx1MDAyNiBERUNPREUpKSB7XFx0LyogdGltZVRvTGl2ZSAqL1xcbiAzMzY6XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IHYgPSBnZXRfdWludChicywgbGVuKSArIGYtXFx1MDAzZWxiO1xcbiAzMzc6XFx0XFx0XFx0XFx0UFJJTlQoXFxcIiA9ICV1XFxcIiwgdik7XFxuIDMzODpcXHRcXHRcXHRcXHQqKCh1bnNpZ25lZCBpbnQgKikoYmFzZSArIGYtXFx1MDAzZW9mZnNldCkpID0gdjtcXG4gMzM5OlxcdFxcdFxcdH1cXG4gMzQwOlxcdFxcdFxcdGJzLVxcdTAwM2VjdXIgKz0gbGVuO1xcbiAzNDE6XFx0XFx0XFx0YnJlYWs7XFxuIDM0MjpcXHRcXHRjYXNlIFVOQ086XFxuIDM0MzpcXHRcXHRcXHRCWVRFX0FMSUdOKGJzKTtcXG4gMzQ0OlxcdFxcdFxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAyLCAwKSlcXG4gMzQ1OlxcdFxcdFxcdFxcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xcbiAzNDY6XFx0XFx0XFx0bGVuID0gZ2V0X2xlbihicyk7XFxuIDM0NzpcXHRcXHRcXHRicy1cXHUwMDNlY3VyICs9IGxlbjtcXG4gMzQ4OlxcdFxcdFxcdGJyZWFrO1xcbiAzNDk6XFx0XFx0ZGVmYXVsdDpcXHRcXHQvKiAyIFxcdTAwM2M9IFJhbmdlIFxcdTAwM2M9IDI1NSAqL1xcbiAzNTA6XFx0XFx0XFx0SU5DX0JJVFMoYnMsIGYtXFx1MDAzZXN6KTtcXG4gMzUxOlxcdFxcdFxcdGJyZWFrO1xcbiAzNTI6XFx0XFx0fVxcbiAzNTM6XFx0XFxuIDM1NDpcXHRcXHRQUklOVChcXFwiXFxcXG5cXFwiKTtcXG4gMzU1OlxcdFxcbiAzNTY6XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDApKVxcbiAzNTc6XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuIDM1ODpcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9OT05FO1xcbiAzNTk6XFx0fVxcbiAzNjA6XFx0XFxuIDM2MTpcXHRzdGF0aWMgaW50IGRlY29kZV9lbnVtKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG4gMzYyOlxcdCAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmFzZSwgaW50IGxldmVsKVxcbiAzNjM6XFx0e1xcbiAzNjQ6XFx0XFx0UFJJTlQoXFxcIiUqcyVzXFxcXG5cXFwiLCBsZXZlbCAqIFRBQl9TSVpFLCBcXFwiIFxcXCIsIGYtXFx1MDAzZW5hbWUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNTo0Njo0NC40MDEzMDc0NTNaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQ3MTMwMDY2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZSwgdXNpbmcgYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmU6XG5cbioqRGVidWdnaW5nIHRoZSBgbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYCBNb2R1bGUqKlxuXG5BbHJpZ2h0LCBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYG5mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AgbW9kdWxlIGFnYWluLiBUaW1lIHRvIGdldCBhIGdyaXAgb24gd2hhdCdzIGdvaW5nIG9uLiBGaXJzdCwgYmVmb3JlIEkgc3RhcnQgcG9raW5nIGFyb3VuZCB3aXRoIGEgZGVidWdnZXIsIEkgbmVlZCBzb21lIGNvbnRleHQuIExldCdzIHNlZS4uLiB0aGUgbW9zdCBlZmZpY2llbnQgdGhpbmcgdG8gZG8gcmlnaHQgbm93IGlzIHByb2JhYmx5IHRvIHN0YXJ0IHdpdGggdGhlIGNvbW1pdCBoaXN0b3J5LiBJJ2xsIG9wZW4gdXAgYGdpdCBsb2dgLCBmb2N1c2luZyBvbiB0aGlzIHNwZWNpZmljIGZpbGUsIG9yIGF0IGxlYXN0IGxvb2tpbmcgYXQgYW55IGNvbW1pdCBtZXNzYWdlcyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IGZvciB0aGlzIGFyZWEgb2YgdGhlIGNvZGUuXG5cbkkgbmVlZCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSByZWNlbnQgY2hhbmdlcywgYnVnIGZpeGVzLCBvciBldmVuIGp1c3QgY29tbWVudHMgdGhhdCBtaWdodCBnaXZlIG1lIGEgY2x1ZSBhYm91dCB3aGF0J3MgaGFwcGVuaW5nIG9yIHdoYXQgc29tZW9uZSBlbHNlIHdhcyB0aGlua2luZyB3aGVuIHRoZXkgbGFzdCB0b3VjaGVkIHRoaXMuIE1heWJlIHNvbWVvbmUgZWxzZSB3b3JrZWQgb24gc29tZSBzaW1pbGFyIGNvZGUgYW5kIEkgY2FuIGdldCBhIGNsdWUgdGhlcmUuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgSSBhbSBub3QgZmFtaWxpYXIgd2l0aCB0aGlzIGNvZGUgYW5kIG5lZWQgdG8ga2VlcCBhbiBvcGVuIG1pbmQgZm9yIGFueSBwb3NzaWJsZSBjYXVzZXMuXG5cbklmIHRoYXQncyBub3QgZnJ1aXRmdWwsIEkgbWlnaHQgYnJhbmNoIG91dCBhbmQgbG9vayBhdCBzaW1pbGFyIGNvbW1pdHMgaW4gdGhlIHN1cnJvdW5kaW5nIGZpbGVzIG9yIGV2ZW4gd2l0aGluIHRoZSBjb25udHJhY2sgY29yZSBpdHNlbGYuIFNvbWV0aW1lcywgdGhlIGZpeCBvciB0aGUgaW50cm9kdWN0aW9uIG9mIGEgbmV3IGlzc3VlIG1pZ2h0IGJlIHRhbmdlbnRpYWxseSByZWxhdGVkLiBJIGFtIGNvbmZpZGVudCBJIHdpbGwgZmluZCBzb21ldGhpbmcgdG8gZ2V0IG1lIGdvaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjgxLCJPdXRwdXRUb2tlbnMiOjUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNTo0Njo0Ny44NzI2MTE4NzZaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MjQ4Mjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2gzMjNfZXJyb3JfYm91bmRhcnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9MTQ4PXN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2xlbihzdHJ1Y3QgYml0c3RyICpicylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTE2Mi1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxNjM6c3RhdGljIGludCBuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KHN0cnVjdCBiaXRzdHIgKmJzLCBzaXplX3QgYnl0ZXMsIHNpemVfdCBiaXRzKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTE2NC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz0yODI9c3RhdGljIGludCBkZWNvZGVfYm9vbChzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0yODctXFx0SU5DX0JJVChicyk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6Mjg4OlxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAwKSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0yODktXFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz0yOTM9c3RhdGljIGludCBkZWNvZGVfb2lkKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTMwMC1cXHRCWVRFX0FMSUdOKGJzKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzozMDE6XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDEsIDApKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTMwMi1cXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTMwNS1cXHRicy1cXHUwMDNlY3VyICs9IGxlbjtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzozMDY6XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDApKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTMwNy1cXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTMxMj1zdGF0aWMgaW50IGRlY29kZV9pbnQoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMzI4LVxcdGNhc2UgQ09OUzpcXHRcXHQvKiA2NEsgXFx1MDAzYyBSYW5nZSBcXHUwMDNjIDRHICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MzI5OlxcdFxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAyKSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0zMzAtXFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMzMxLVxcdFxcdGxlbiA9IGdldF9iaXRzKGJzLCAyKSArIDE7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MzMyOlxcdFxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCBsZW4sIDApKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTMzMy1cXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTM0My1cXHRcXHRCWVRFX0FMSUdOKGJzKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzozNDQ6XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDIsIDApKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTM0NS1cXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTM1NS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzozNTY6XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDApKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTM1Ny1cXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTM2MT1zdGF0aWMgaW50IGRlY29kZV9lbnVtKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTM2NS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzozNjY6XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDEpKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTM2Ny1cXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTM3My1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzozNzQ6XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDApKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTM3NS1cXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTM3OT1zdGF0aWMgaW50IGRlY29kZV9iaXRzdHIoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMzkxLVxcdGNhc2UgV09SRDpcXHRcXHQvKiAyLWJ5dGUgbGVuZ3RoICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MzkyOlxcdFxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAyLCAwKSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0zOTMtXFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0zOTctXFx0Y2FzZSBTRU1JOlxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjM5ODpcXHRcXHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMiwgMCkpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMzk5LVxcdFxcdFxcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNDA5LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjQxMDpcXHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgMCkpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNDExLVxcdFxcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9NDE1PXN0YXRpYyBpbnQgZGVjb2RlX251bXN0cihzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy00MjItXFx0LyogMiBcXHUwMDNjPSBSYW5nZSBcXHUwMDNjPSAyNTUgKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo0MjM6XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIGYtXFx1MDAzZXN6KSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy00MjQtXFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy00MjktXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NDMwOlxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAwKSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy00MzEtXFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz00MzU9c3RhdGljIGludCBkZWNvZGVfb2N0c3RyKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTQ1NS1cXHRcXHRCWVRFX0FMSUdOKGJzKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo0NTY6XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDEsIDApKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTQ1Ny1cXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTQ2MS1cXHRcXHRCWVRFX0FMSUdOKGJzKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo0NjI6XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDIsIDApKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTQ2My1cXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTQ2Ni1cXHRkZWZhdWx0OlxcdFxcdC8qIDIgXFx1MDAzYz0gUmFuZ2UgXFx1MDAzYz0gMjU1ICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NDY3OlxcdFxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCBmLVxcdTAwM2VzeikpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNDY4LVxcdFxcdFxcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNDc3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjQ3ODpcXHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgMCkpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNDc5LVxcdFxcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9NDgzPXN0YXRpYyBpbnQgZGVjb2RlX2JtcHN0cihzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy00OTItXFx0XFx0QllURV9BTElHTihicyk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NDkzOlxcdFxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAxLCAwKSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy00OTQtXFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy00OTctXFx0ZGVmYXVsdDpcXHRcXHQvKiAyIFxcdTAwM2M9IFJhbmdlIFxcdTAwM2M9IDI1NSAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjQ5ODpcXHRcXHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgZi1cXHUwMDNlc3opKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTQ5OS1cXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTUwNi1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo1MDc6XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDApKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTUwOC1cXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTUxMj1zdGF0aWMgaW50IGRlY29kZV9zZXEoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTI1LVxcdC8qIEV4dGVuc2libGU/ICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NTI2OlxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAxKSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy01MjctXFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy01MzAtXFx0LyogR2V0IGZpZWxkcyBiaXRtYXAgKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo1MzE6XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIGYtXFx1MDAzZXN6KSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy01MzItXFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy01NTMtXFx0XFx0aWYgKHNvbi1cXHUwMDNlYXR0ciBcXHUwMDI2IE9QRU4pIHtcXHQvKiBPcGVuIGZpZWxkICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NTU0OlxcdFxcdFxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAyLCAwKSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy01NTUtXFx0XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTU2LVxcdFxcdFxcdGxlbiA9IGdldF9sZW4oYnMpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjU1NzpcXHRcXHRcXHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgbGVuLCAwKSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy01NTgtXFx0XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy01ODUtXFx0LyogR2V0IHRoZSBleHRlbnNpb24gYml0bWFwICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NTg2OlxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCA3KSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy01ODctXFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTg4LVxcdGJtcDJfbGVuID0gZ2V0X2JpdHMoYnMsIDcpICsgMTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo1ODk6XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIGJtcDJfbGVuKSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy01OTAtXFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy02MDItXFx0XFx0aWYgKGkgXFx1MDAzZT0gZi1cXHUwMDNldWIpIHtcXHQvKiBOZXdlciBWZXJzaW9uPyAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjYwMzpcXHRcXHRcXHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMiwgMCkpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNjA0LVxcdFxcdFxcdFxcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTYwNS1cXHRcXHRcXHRsZW4gPSBnZXRfbGVuKGJzKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo2MDY6XFx0XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIGxlbiwgMCkpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNjA3LVxcdFxcdFxcdFxcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNjIwLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjYyMTpcXHRcXHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMiwgMCkpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNjIyLVxcdFxcdFxcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTYyMy1cXHRcXHRsZW4gPSBnZXRfbGVuKGJzKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo2MjQ6XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIGxlbiwgMCkpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNjI1LVxcdFxcdFxcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9NjQ1PXN0YXRpYyBpbnQgZGVjb2RlX3NlcW9mKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTY2MS1cXHRcXHRCWVRFX0FMSUdOKGJzKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo2NjI6XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDEsIDApKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTY2My1cXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTY2Ny1cXHRcXHRCWVRFX0FMSUdOKGJzKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo2Njg6XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDIsIDApKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTY2OS1cXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTY3NS1cXHRcXHRCWVRFX0FMSUdOKGJzKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo2NzY6XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDIsIDApKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTY3Ny1cXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTY4MC1cXHRkZWZhdWx0Olxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjY4MTpcXHRcXHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgZi1cXHUwMDNlc3opKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTY4Mi1cXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTcwMS1cXHRcXHRcXHRCWVRFX0FMSUdOKGJzKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo3MDI6XFx0XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDIsIDApKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTcwMy1cXHRcXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03MDQtXFx0XFx0XFx0bGVuID0gZ2V0X2xlbihicyk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NzA1OlxcdFxcdFxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCBsZW4sIDApKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTcwNi1cXHRcXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTc0MT1zdGF0aWMgaW50IGRlY29kZV9jaG9pY2Uoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzU0LVxcdC8qIERlY29kZSB0aGUgY2hvaWNlIGluZGV4IG51bWJlciAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjc1NTpcXHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgMSkpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzU2LVxcdFxcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzU4LVxcdFxcdGV4dCA9IDE7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NzU5OlxcdFxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCA3KSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03NjAtXFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03NjMtXFx0XFx0ZXh0ID0gMDtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo3NjQ6XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIGYtXFx1MDAzZXN6KSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03NjUtXFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03NzctXFx0XFx0QllURV9BTElHTihicyk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6Nzc4OlxcdFxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAyLCAwKSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03NzktXFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzgwLVxcdFxcdGxlbiA9IGdldF9sZW4oYnMpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjc4MTpcXHRcXHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgbGVuLCAwKSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03ODItXFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03OTUtXFx0XFx0QllURV9BTElHTihicyk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6Nzk2OlxcdFxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAyLCAwKSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03OTctXFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzk4LVxcdFxcdGxlbiA9IGdldF9sZW4oYnMpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjc5OTpcXHRcXHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgbGVuLCAwKSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04MDAtXFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA1OjQ2OjQ3Ljk1MTg2NTYxNVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTUwMjQyNTA1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlIENoYW5nZSoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIG92ZXIgdGhpcyBwYXRjaCBhbmQgaXQncyBhIHN0cmFpZ2h0Zm9yd2FyZCBmaXguIEl0IGxvb2tzIGxpa2UgdGhlIG90aGVyIGRlY29kaW5nIGZ1bmN0aW9ucywgbGlrZSBgZGVjb2RlX2Nob2ljZWAgYW5kIGBkZWNvZGVfc2VxYCwgYWxsIGluY2x1ZGUgYSBib3VuZGFyeSBjaGVjayB3aXRoIGBuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAxKWAgKmJlZm9yZSogYWNjZXNzaW5nIGJpdHMgd2l0aCBgZ2V0X2JpdChicylgIG9yIGNoZWNraW5nIGV4dGVuc2libGUgYml0cy4gVGhlIHByb2JsZW0gd2FzIHRoYXQgYGRlY29kZV9lbnVtYCB3YXMgbWlzc2luZyB0aGF0IGNydWNpYWwgYm91bmRhcnkgY2hlY2suIFRoaXMgcGF0Y2ggc2ltcGx5IGFkZHMgaXQgaW4uIEVzc2VudGlhbGx5LCB0aGlzIGlzIGEgc2FmZXR5IG5ldCB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMsIGFuIE9PQiByZWFkIHZ1bG5lcmFiaWxpdHkuXG5cbk5vdywgbGV0J3MgdGhpbmsgYWJvdXQgd2hldGhlciB3ZSBuZWVkIHRvIGJyaW5nIGluIHRoZSBLZXJuZWwgTWVtb3J5IFNhbml0aXplciAoS01TQU4pIGZvciB0aGlzLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCdzIHVubmVjZXNzYXJ5LCBidXQgbGV0J3MgYnJlYWsgaXQgZG93bjpcblxuKiAgICoqS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2U/KiogTm9wZSwgbm90IHJlbGV2YW50IGhlcmUuIFRoaXMgcGF0Y2ggaXNuJ3QgdG91Y2hpbmcgdGhhdC5cbiogICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyoqIE5vLCBub3RoaW5nIGxpa2UgdGhhdC5cbiogICAqKkFsbG9jYXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcz8qKiBBbHNvIG5vLlxuKiAgICoqQ2hhbmdlZCBib3VuZHMgY2hlY2tzIGxlYWRpbmcgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzPyoqIFdlbGwsIHllcyBhbmQgbm8uIEl0ICppcyogY2hhbmdpbmcgYm91bmRzIGNoZWNrcywgYnV0IGl0J3MgKmFkZGluZyogYSBjaGVjayB0byAqcHJldmVudCogYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9mIHRoZSBuZXR3b3JrIHNrYiBwYXlsb2FkLCBub3QgZW5hYmxpbmcgb25lLlxuKiAgICoqT3V0LW9mLWJvdW5kcyByZWFkcyBkaXJlY3RseSBkZXRlY3RhYmxlIGJ5IEtBU0FOPyoqIFllcywgZXhhY3RseSEgS0FTQU4gaXMgcGVyZmVjdGx5IHN1aXRlZCB0byBoYW5kbGUgdGhpcyB0eXBlIG9mIGlzc3VlLlxuXG5HaXZlbiBhbGwgb2YgdGhhdCwgaXQgc2VlbXMgY2xlYXIgdGhhdCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLlxuXG5KdXN0IHRvIGJlIHRob3JvdWdoLCBsZXQncyB2ZXJpZnkgdGhlIHNldC1yZXN1bHRzIHBhcmFtZXRlcnM6XG5OZWVkc0tNU0FOOiBmYWxzZVxuS01TQU5SZWFzb25pbmc6IERldGFpbGVkIGV4cGxhbmF0aW9uIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOLlxuXG5Pa2F5LCBhbGwgY2hlY2tzIG91dC4gTm93IEkgY2FuIGNvbmZpZGVudGx5IGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2NTIsIk91dHB1dFRva2VucyI6MTc0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA1OjQ2OjU5LjQ1NDI5NDU4NVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG1pc3NpbmcgYm91bmRhcnkgY2hlY2sgYG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDEpYCB0byBgZGVjb2RlX2VudW0oKWAgYmVmb3JlIHJlYWRpbmcgYSBiaXQgZnJvbSB0aGUgQVNOLjEgYml0c3RyZWFtLiBQcmlvciB0byB0aGlzIGZpeCwgaWYgYGJzLVxcdTAwM2VjdXJgIHdhcyBhdCBgYnMtXFx1MDAzZWVuZGAsIGBnZXRfYml0KGJzKWAgd291bGQgcGVyZm9ybSBhbiBvdXQtb2YtYm91bmRzIHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBwYWNrZXQgZGF0YSBidWZmZXIuIFxcblxcbk91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIGFyZSBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMgZGlyZWN0bHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBwYWRkaW5nIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG1pc3NpbmcgYm91bmRhcnkgY2hlY2sgYG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDEpYCB0byBgZGVjb2RlX2VudW0oKWAgYmVmb3JlIHJlYWRpbmcgYSBiaXQgZnJvbSB0aGUgQVNOLjEgYml0c3RyZWFtLiBQcmlvciB0byB0aGlzIGZpeCwgaWYgYGJzLVxcdTAwM2VjdXJgIHdhcyBhdCBgYnMtXFx1MDAzZWVuZGAsIGBnZXRfYml0KGJzKWAgd291bGQgcGVyZm9ybSBhbiBvdXQtb2YtYm91bmRzIHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBwYWNrZXQgZGF0YSBidWZmZXIuIFxcblxcbk91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIGFyZSBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMgZGlyZWN0bHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBwYWRkaW5nIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbr5x5[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 05:07:38 +0000 UTC FinishedAt: 2026-09-07 05:47:01 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "6ebcf5074cff0402730c6981d2397139fee6322d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK", "NF_CONNTRACK_H323", "NETFILTER_ADVANCED" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "6ebcf5074cff0402730c6981d2397139fee6322d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK", "NF_CONNTRACK_H323", "NETFILTER_ADVANCED" ], "series_id": "bd796d7d-816b-4bf1-a4b1-3f6e79076e14" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "decode_enum", "DecodeRasMessage", "DecodeQ931", "DecodeMultimediaSystemControlMessage", "ras_help", "q931_help", "h245_help" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA1OjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfSDMyMyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfQURWQU5DRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkZWNvZGVfZW51bSYjMzQ7LAogICAgJiMzNDtEZWNvZGVSYXNNZXNzYWdlJiMzNDssCiAgICAmIzM0O0RlY29kZVE5MzEmIzM0OywKICAgICYjMzQ7RGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlJiMzNDssCiAgICAmIzM0O3Jhc19oZWxwJiMzNDssCiAgICAmIzM0O3E5MzFfaGVscCYjMzQ7LAogICAgJiMzNDtoMjQ1X2hlbHAmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbWlzc2luZyBib3VuZGFyeSBjaGVjayBgbmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgMSlgIHRvIGBkZWNvZGVfZW51bSgpYCBiZWZvcmUgcmVhZGluZyBhIGJpdCBmcm9tIHRoZSBBU04uMSBiaXRzdHJlYW0uIFByaW9yIHRvIHRoaXMgZml4LCBpZiBgYnMtXHUwMDNlY3VyYCB3YXMgYXQgYGJzLVx1MDAzZWVuZGAsIGBnZXRfYml0KGJzKWAgd291bGQgcGVyZm9ybSBhbiBvdXQtb2YtYm91bmRzIHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBwYWNrZXQgZGF0YSBidWZmZXIuIFxuXG5PdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyBhcmUgbWVtb3J5IHNhZmV0eSB2aW9sYXRpb25zIGRpcmVjdGx5IGNhdWdodCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgcGFkZGluZyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbWlzc2luZyBib3VuZGFyeSBjaGVjayBpbiBkZWNvZGVfZW51bSgpIGluIHRoZSBOZXRmaWx0ZXIgSC4zMjMgY29ubmVjdGlvbiB0cmFja2luZyBBU04uMSBkZWNvZGVyIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgd2hlbiByZWFkaW5nIGJpdHMgZnJvbSBtYWxmb3JtZWQgcGFja2V0cy4gVGhpcyBpcyByZWFjaGFibGUgdmlhIG5ldHdvcmsgcGFja2V0IHByb2Nlc3NpbmcgaGFuZGxlZCBieSB0aGUgSC4zMjMgY29ubnRyYWNrIGhlbHBlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNTo0NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDk4MTk4ZDY4M2VmNGM4MjY0NzM0MGUwNGE4NGFlNjQ4ZWNjYTE3ODBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDA1OjQ1OjE5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNcbmluZGV4IDY4MzBjOWRhMzUwN2MuLmJhNmNlMWYwNGUxZWQgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNcbkBAIC0zNjMsNiAmIzQzOzM2Myw4IEBAIHN0YXRpYyBpbnQgZGVjb2RlX2VudW0oc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuIHtcbiBcdFBSSU5UKFwmIzM0OyUqcyVzXFxuXCYjMzQ7LCBsZXZlbCAqIFRBQl9TSVpFLCBcJiMzNDsgXCYjMzQ7LCBmLVx1MDAzZW5hbWUpO1xuIFxuJiM0MztcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAxKSlcbiYjNDM7XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuIFx0aWYgKChmLVx1MDAzZWF0dHIgXHUwMDI2IEVYVCkgXHUwMDI2XHUwMDI2IGdldF9iaXQoYnMpKSB7XG4gXHRcdElOQ19CSVRTKGJzLCA3KTtcbiBcdH0gZWxzZSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDU6NDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19IMzIzJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9BRFZBTkNFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RlY29kZV9lbnVtJiMzNDssCiAgICAmIzM0O0RlY29kZVJhc01lc3NhZ2UmIzM0OywKICAgICYjMzQ7RGVjb2RlUTkzMSYjMzQ7LAogICAgJiMzNDtEZWNvZGVNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2UmIzM0OywKICAgICYjMzQ7cmFzX2hlbHAmIzM0OywKICAgICYjMzQ7cTkzMV9oZWxwJiMzNDssCiAgICAmIzM0O2gyNDVfaGVscCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbWlzc2luZyBib3VuZGFyeSBjaGVjayBpbiBkZWNvZGVfZW51bSgpIGluIHRoZSBOZXRmaWx0ZXIgSC4zMjMgY29ubmVjdGlvbiB0cmFja2luZyBBU04uMSBkZWNvZGVyIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgd2hlbiByZWFkaW5nIGJpdHMgZnJvbSBtYWxmb3JtZWQgcGFja2V0cy4gVGhpcyBpcyByZWFjaGFibGUgdmlhIG5ldHdvcmsgcGFja2V0IHByb2Nlc3NpbmcgaGFuZGxlZCBieSB0aGUgSC4zMjMgY29ubnRyYWNrIGhlbHBlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDk4MTk4ZDY4M2VmNGM4MjY0NzM0MGUwNGE4NGFlNjQ4ZWNjYTE3ODAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDA1OjQ1OjE5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYwppbmRleCA2ODMwYzlkYTM1MDdjLi5iYTZjZTFmMDRlMWVkIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYwpAQCAtMzYzLDYgJiM0MzszNjMsOCBAQCBzdGF0aWMgaW50IGRlY29kZV9lbnVtKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwKIHsKIAlQUklOVCgmIzM0OyUqcyVzXG4mIzM0OywgbGV2ZWwgKiBUQUJfU0laRSwgJiMzNDsgJiMzNDssIGYtJmd0O25hbWUpOwogCiYjNDM7CWlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAxKSkKJiM0MzsJCXJldHVybiBIMzIzX0VSUk9SX0JPVU5EOwogCWlmICgoZi0mZ3Q7YXR0ciAmYW1wOyBFWFQpICZhbXA7JmFtcDsgZ2V0X2JpdChicykpIHsKIAkJSU5DX0JJVFMoYnMsIDcpOwogCX0gZWxzZSB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA1OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MjcKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAzNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgSC4zMjMgQ29ubmVjdGlvbiBUcmFja2luZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0JiMzOTtzIHRvdWNoaW5nIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBjaGFuZ2VzIHRvIHNlZSB3aGF0JiMzOTtzIGJlaW5nIHR3ZWFrZWQgaW4gdGhlIEguMzIzIEFTTi4xIGRlY29kZXIuIEkgc2VlIHRoZSBkaWZmIGludHJvZHVjZXMgYSBuZXcgY2hlY2sgd2l0aGluIHRoZSBgZGVjb2RlX2VudW1gIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGEgY2FsbCB0byBgbmZfaDMyM19lcnJvcl9ib3VuZGFyeWAgaXMgYWRkZWQgYmVmb3JlIHRoZSBoYW5kbGluZyBvZiB0aGUgYEVYVGAgYXR0cmlidXRlLiBJbnRyaWd1aW5nLi4uIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGhlcmUuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZ2V0IHRoZSBiaWdnZXIgcGljdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2UuIEkmIzM5O2xsIHJlYWQgdGhlIGNvZGUgYXJvdW5kIGxpbmUgMzYzIHRvIGdldCB0aGUgZnVuY3Rpb24mIzM5O3Mgc3Vycm91bmRpbmdzIGFuZCBpdHMgb3ZlcmFsbCBwdXJwb3NlLiBUaGVuLCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGNhbGxlciBmdW5jdGlvbnMgdG8gc2VlIHdoZXJlIGBkZWNvZGVfZW51bWAgaXMgdXNlZCBhbmQgaG93IHRoaXMgbmV3IGNoZWNrIHdpbGwgaW1wYWN0IHRob3NlIGZsb3dzLiBGaW5hbGx5LCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY29kZSBpcyBldmVuIGVuYWJsZWQgaW4gdGhlIHN5c3RlbSBJJiMzOTttIGludGVyZXN0ZWQgaW4uIFRoaXMgd2lsbCBnaXZlIG1lIGEgcHJvcGVyIGNvbnRleHQgYXJvdW5kIHRoZSBmdW5jdGlvbiBpbiBnZW5lcmFsIGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNTA6XHRcdFx0SU5DX0JJVFMoYnMsIGYtXHUwMDNlc3opO1xuIDM1MTpcdFx0XHRicmVhaztcbiAzNTI6XHRcdH1cbiAzNTM6XHRcbiAzNTQ6XHRcdFBSSU5UKFwmIzM0O1xcblwmIzM0Oyk7XG4gMzU1Olx0XG4gMzU2Olx0XHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgMCkpXG4gMzU3Olx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuIDM1ODpcdFx0cmV0dXJuIEgzMjNfRVJST1JfTk9ORTtcbiAzNTk6XHR9XG4gMzYwOlx0XG4gMzYxOlx0c3RhdGljIGludCBkZWNvZGVfZW51bShzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXG4gMzYyOlx0ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXG4gMzYzOlx0e1xuIDM2NDpcdFx0UFJJTlQoXCYjMzQ7JSpzJXNcXG5cJiMzNDssIGxldmVsICogVEFCX1NJWkUsIFwmIzM0OyBcJiMzNDssIGYtXHUwMDNlbmFtZSk7XG4gMzY1Olx0XG4gMzY2Olx0XHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgMSkpXG4gMzY3Olx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuIDM2ODpcdFx0aWYgKChmLVx1MDAzZWF0dHIgXHUwMDI2IEVYVCkgXHUwMDI2XHUwMDI2IGdldF9iaXQoYnMpKSB7XG4gMzY5Olx0XHRcdElOQ19CSVRTKGJzLCA3KTtcbiAzNzA6XHRcdH0gZWxzZSB7XG4gMzcxOlx0XHRcdElOQ19CSVRTKGJzLCBmLVx1MDAzZXN6KTtcbiAzNzI6XHRcdH1cbiAzNzM6XHRcbiAzNzQ6XHRcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAwKSlcbiAzNzU6XHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4gMzc2Olx0XHRyZXR1cm4gSDMyM19FUlJPUl9OT05FO1xuIDM3NzpcdH1cbiAzNzg6XHRcbiAzNzk6XHRzdGF0aWMgaW50IGRlY29kZV9iaXRzdHIoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuIDM4MDpcdCAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXG4gMzgxOlx0e1xuIDM4MjpcdFx0dW5zaWduZWQgaW50IGxlbjtcbiAzODM6XHRcbiAzODQ6XHRcdFBSSU5UKFwmIzM0OyUqcyVzXFxuXCYjMzQ7LCBsZXZlbCAqIFRBQl9TSVpFLCBcJiMzNDsgXCYjMzQ7LCBmLVx1MDAzZW5hbWUpO1xuIDM4NTpcdFxuIDM4NjpcdFx0QllURV9BTElHTihicyk7XG4gMzg3Olx0XHRzd2l0Y2ggKGYtXHUwMDNlc3opIHtcbiAzODg6XHRcdGNhc2UgRklYRDpcdFx0LyogZml4ZWQgbGVuZ3RoIFx1MDAzZSAxNiAqL1xuIDM4OTpcdFx0XHRsZW4gPSBmLVx1MDAzZWxiO1xuIDM5MDpcdFx0XHRicmVhaztcbiAzOTE6XHRcdGNhc2UgV09SRDpcdFx0LyogMi1ieXRlIGxlbmd0aCAqL1xuIDM5MjpcdFx0XHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMiwgMCkpXG4gMzkzOlx0XHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4gMzk0Olx0XHRcdGxlbiA9ICgqYnMtXHUwMDNlY3VyJiM0MzsmIzQzOykgXHUwMDNjXHUwMDNjIDg7XG4gMzk1Olx0XHRcdGxlbiAmIzQzOz0gKCpicy1cdTAwM2VjdXImIzQzOyYjNDM7KSAmIzQzOyBmLVx1MDAzZWxiO1xuIDM5NjpcdFx0XHRicmVhaztcbiAzOTc6XHRcdGNhc2UgU0VNSTpcbiAzOTg6XHRcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDIsIDApKVxuIDM5OTpcdFx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA1OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNjAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gZXhhbWluaW5nIHRoZSBgbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYCBjb2RlLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIE1ha2VmaWxlIGFuZCBLY29uZmlnOgoKKipEZWVwIERpdmU6IGBuZl9jb25udHJhY2tfaDMyM19hc24xLmNgIGFuZCBpdHMgQnVpbGQgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgSC4zMjMgQVNOLjEgbW9kdWxlIGZpdHMgaW50byB0aGUgYnJvYWRlciBuZXRmaWx0ZXIgZnJhbWV3b3JrLiBGaXJzdCwgdGhlIE1ha2VmaWxlLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBidWlsZCBydWxlcywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHNwZWNpYWwgZmxhZ3Mgb3IgaW5jbHVkZXMgcmVsZXZhbnQgdG8gdGhpcyBzcGVjaWZpYyBmaWxlLiBJJiMzOTtsbCBiZSBjaGVja2luZyB0byBzZWUgd2hhdCBvdGhlciBtb2R1bGVzIG9yIGxpYnJhcmllcyBpdCBsaW5rcyBhZ2FpbnN0LCBhbmQgaG93IHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtIGRldGVybWluZXMgd2hlbiBhbmQgaG93IHRvIGNvbXBpbGUgaXQuIEFyZSB0aGVyZSBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyB0aGF0IG1pZ2h0IGNvbnRyb2wgaXRzIGluY2x1c2lvbiBiYXNlZCBvbiBrZXJuZWwgY29uZmlndXJhdGlvbj8gQXJlIHRoZXJlIGFueSBtb2R1bGUtc3BlY2lmaWMgb3B0aW9ucz8KCk5vdywgdGhlIEtjb25maWcgZmlsZS4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBpbnRlcmVzdGluZyBzdHVmZiBpcy4gSSB3YW50IHRvIHNlZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgY29udHJvbCB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgbW9kdWxlIGluIHRoZSBrZXJuZWwuIFdoYXQgZGVwZW5kZW5jaWVzIGFyZSBzcGVjaWZpZWQ/IERvZXMgaXQgZGVwZW5kIG9uIG90aGVyIG5ldGZpbHRlciBjb21wb25lbnRzIGJlaW5nIGVuYWJsZWQ/IFdoYXQmIzM5O3MgdGhlIGRlZmF1bHQgc3RhdGUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIChidWlsdC1pbiwgbW9kdWxhciwgb3IgZGlzYWJsZWQpPyBBcmUgdGhlcmUgYW55IGhlbHAgdGV4dHMgb3IgZGVzY3JpcHRpb25zIHRoYXQgZ2l2ZSBjbHVlcyBhYm91dCB0aGUgcHVycG9zZSBvZiB0aGlzIG1vZHVsZSBhbmQgdGhlIHNjZW5hcmlvcyB3aGVyZSBpdCBzaG91bGQgYmUgZW5hYmxlZD8gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGNoZWNraW5nIGZvciBkZXBlbmRlbmNpZXMgb24gQVNOLjEgcGFyc2luZyBsaWJyYXJpZXMsIG90aGVyIEguMzIzLXJlbGF0ZWQgbW9kdWxlcywgb3IgYW55dGhpbmcgdGhhdCB3b3VsZCBpbmRpY2F0ZSBob3cgZGVlcGx5IGludGVncmF0ZWQgaXQgaXMgd2l0aGluIHRoZSBvdmVyYWxsIGNvbm50cmFjayBpbXBsZW1lbnRhdGlvbiBmb3IgSC4zMjMuIEkmIzM5O20gYWxzbyBnb2luZyB0byBjaGVjayBmb3IgYW55IHBvdGVudGlhbCBjb25mbGljdHMgd2l0aCBvdGhlciBtb2R1bGVzLCBhcyB3ZWxsIGFzIGFueSBkZXBlbmRlbmNpZXMgb24gdXNlci1zcGFjZSBhcHBsaWNhdGlvbnMgb3IgbGlicmFyaWVzIHRoYXQgbWlnaHQgYmUgcmVxdWlyZWQuIEkmIzM5O20gYWxzbyBsb29raW5nIGZvciBhbnkgc3BlY2lmaWMgaGFyZHdhcmUgcmVxdWlyZW1lbnRzIG9yIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zIHRoYXQgbWlnaHQgaW5mbHVlbmNlIGl0cyBjb25maWd1cmF0aW9uLiBCeSB1bmRlcnN0YW5kaW5nIHRoZSBLY29uZmlnIG9wdGlvbnMsIEkgY2FuIGZpZ3VyZSBvdXQgdGhlIGludGVuZGVkIHVzZSBjYXNlcyBmb3IgdGhpcyBtb2R1bGUgYW5kIGhvdyB0byBwcm9wZXJseSBlbmFibGUgb3IgZGlzYWJsZSBpdCBmb3IgZGlmZmVyZW50IGtlcm5lbCBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9jb25udHJhY2tfaDMyMyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT0zOT1vYmotJChDT05GSUdfTkZfQ1RfTkVUTElOS19IRUxQRVIpICYjNDM7PSBuZm5ldGxpbmtfY3RoZWxwZXIub1xuLS1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNDEtIyBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnNcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NDI6bmZfY29ubnRyYWNrX2gzMjMtb2JqcyA6PSBuZl9jb25udHJhY2tfaDMyM19tYWluLm8gbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTQzLVxuLS1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9NDU9b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19GVFApICYjNDM7PSBuZl9jb25udHJhY2tfZnRwLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NDY6b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19IMzIzKSAmIzQzOz0gbmZfY29ubnRyYWNrX2gzMjMub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS00Ny1vYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX0lSQykgJiM0Mzs9IG5mX2Nvbm50cmFja19pcmMub1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTE0LSNlbmRpZlxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTU6I2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuaFx1MDAzZVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTYtXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9MTIzPXN0YXRpYyBjb25zdCBkZWNvZGVyX3QgRGVjb2RlcnNbXSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0xNDAtICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxNDE6I2luY2x1ZGUgXCYjMzQ7bmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuY1wmIzM0O1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTQyLVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTM1LSNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3pvbmVzLmhcdTAwM2Vcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjM2OiNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyMy5oXHUwMDNlXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0zNy1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYz0xNzU1PXN0YXRpYyB2b2lkIF9fZXhpdCBoMzIzX2hlbHBlcl9leGl0KHZvaWQpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTc2My1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjE3NjQ6c3RhdGljIHZvaWQgX19leGl0IG5mX2Nvbm50cmFja19oMzIzX2Zpbmkodm9pZClcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3NjUte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3NzAtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxNzcxOnN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19oMzIzX2luaXQodm9pZClcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3NzIte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3ODktXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxNzkwOm1vZHVsZV9pbml0KG5mX2Nvbm50cmFja19oMzIzX2luaXQpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MTc5MTptb2R1bGVfZXhpdChuZl9jb25udHJhY2tfaDMyM19maW5pKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3OTItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDU6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc5MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIHlvdXIgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gS2NvbmZpZyBmb3IgSC4zMjMgQ29ubmVjdGlvbiBUcmFja2luZyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgS2NvbmZpZyBlbnRyaWVzIHJlbGF0ZWQgdG8gYE5GX0NPTk5UUkFDS19IMzIzYC4gVGhpcyBpc24mIzM5O3QganVzdCBhIHNpbXBsZSBrZXl3b3JkIHNlYXJjaCwgdGhvdWdoLiBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBzdHJ1Y3R1cmVkIHdpdGhpbiB0aGUgb3ZlcmFsbCBOZXRmaWx0ZXIgZnJhbWV3b3JrLiBXaGVyZSB3b3VsZCBJICpleHBlY3QqIHRvIGZpbmQgaXQ/IExpa2VseSB1bmRlciBjb25uZWN0aW9uIHRyYWNraW5nLCBuYXR1cmFsbHkuIEJ1dCBpcyBpdCBhIHRvcC1sZXZlbCBvcHRpb24sIG9yIGlzIGl0IG5lc3RlZCB3aXRoaW4gYSBtb3JlIGdlbmVyYWwgSC4zMjMgc3VwcG9ydCBtb2R1bGU/IEFyZSB0aGVyZSBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGNvbnNpZGVyPyBGb3IgZXhhbXBsZSwgaXMgdGhlcmUgYSBnZW5lcmFsIHNldHRpbmcgZm9yIGVuYWJsaW5nIE5ldGZpbHRlciYjMzk7cyBjb25uZWN0aW9uIHRyYWNraW5nIHRoYXQgbmVlZHMgdG8gYmUgZW5hYmxlZCBiZWZvcmUgSSBjYW4gc2VlIHRoaXMgSC4zMjMgc3BlY2lmaWMgb3B0aW9uPyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgZ3JlcCBhY3Jvc3MgdGhlIEtjb25maWcgZmlsZXMsIGJ1dCBJJiMzOTtsbCBuZWVkIHRvIGJlIG1pbmRmdWwgb2YgcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gY2hlY2sgZm9yIGFueSBoaWRkZW4gZGVwZW5kZW5jaWVzIHdpdGhpbiB0aGUgY29tbWVudHMgdG9vLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA1OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05GX0NPTk5UUkFDS19IMzIzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz0yMjc9Y29uZmlnIE5GX0NPTk5UUkFDS19GVFBcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjM4LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjIzOTpjb25maWcgTkZfQ09OTlRSQUNLX0gzMjNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNDAtXHR0cmlzdGF0ZSBcJiMzNDtILjMyMyBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDU6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjE1OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBORl9DT05OVFJBQ0tfSDMyMyBLY29uZmlnKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIEtjb25maWcgZm9yIGBORl9DT05OVFJBQ0tfSDMyM2AuIE15IGluaXRpYWwgZm9jdXMsIGFzIGFsd2F5cywgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzLiBXaGF0IG90aGVyIG1vZHVsZXMgb3IgZmVhdHVyZXMgaXMgdGhpcyBjb25uZWN0ZWQgdG8/IEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGBkZXBlbmRzIG9uYCwgYHNlbGVjdGAsIGFuZCBwb3RlbnRpYWxseSBgaW1wbHlgIHN0YXRlbWVudHMuIEkgd2FudCB0byBidWlsZCBhIHF1aWNrIG1lbnRhbCBtYXAgb2YgaXRzIHBsYWNlIGluIHRoZSBvdmVyYWxsIG5ldGZpbHRlciBhbmQgY29ubmVjdGlvbiB0cmFja2luZyBhcmNoaXRlY3R1cmUuCgpUaGVuLCBJJiMzOTttIGNoZWNraW5nIHRoZSBoZWxwIHRleHQuIERvZXMgaXQgY2xlYXJseSBleHBsYWluIHRoZSByb2xlIG9mIHRoaXMgbW9kdWxlPyBJcyBpdCBzcGVjaWZpYyBhYm91dCB0aGUgSC4zMjMgcHJvdG9jb2wgYXNwZWN0cyBpdCBjb3ZlcnM/IEEgY29uY2lzZSBkZXNjcmlwdGlvbiBpcyBrZXkuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBzdXBwb3J0ZWQgSC4zMjMgc2lnbmFsaW5nIHByb3RvY29scywgbGlrZSBILjIyNSwgSC4yNDUsIG9yIHBlcmhhcHMgZXZlbiBuZXdlciBhZGRpdGlvbnMgaWYgdGhpcyBjb25maWcgaXMgcmVjZW50LiBBbnkgbWVudGlvbiBvZiBOQVQgdHJhdmVyc2FsIG9yIFNJUC9ILjMyMyBpbnRlcndvcmtpbmcgaXMgYWx3YXlzIG9mIHBhcnRpY3VsYXIgaW50ZXJlc3QuCgpOZXh0LCBJJiMzOTtsbCBzY2FuIGZvciBhbnkgZGVmYXVsdCBzZXR0aW5ncy4gSXMgaXQgZW5hYmxlZCBieSBkZWZhdWx0LCBvciBpcyBpdCBhIG1vZHVsYXIgZmVhdHVyZT8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgZGVmYXVsdD8gRG9lcyBpdCBwcm92aWRlIGFueSBoaW50cyBhYm91dCB0aGUgdXNlIGNhc2VzIHRoZSBrZXJuZWwgZGV2ZWxvcGVycyBoYWQgaW4gbWluZD8gQW55IHJlbGV2YW50IHRyaXN0YXRlIHZhbHVlcyBvciBjb25maWcgb3B0aW9ucyB3aWxsIGJlIGNhcmVmdWxseSBjb25zaWRlcmVkLgoKRmluYWxseSwgSSYjMzk7bGwgbWVudGFsbHkgY29tcGFyZSB0aGlzIHdpdGggbXkgZXhpc3Rpbmcga25vd2xlZGdlIG9mIG90aGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgbW9kdWxlcy4gRG9lcyB0aGlzIEtjb25maWcgc2VlbSBjb21wbGV0ZSBpbiBzY29wZSwgb3IgYXJlIHRoZXJlIGFzcGVjdHMgSSYjMzk7ZCBleHBlY3QgdG8gc2VlLCBidXQgYXJlIG1pc3Npbmc/IERvZXMgdGhpcyBjb25maWd1cmF0aW9uIHJlZmxlY3QgdGhlIGN1cnJlbnQgc3RhdGUgb2YgSC4zMjMgc3VwcG9ydCBpbiB0aGUga2VybmVsLCBvciBpcyBpdCBwb3RlbnRpYWxseSBhbiBhcmVhIGZvciBmdXR1cmUgd29yaz8gQW55IGluY29uc2lzdGVuY2llcyB3b3VsZCBwcm9tcHQgZnVydGhlciBpbnZlc3RpZ2F0aW9uIGludG8gdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDU6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIzNTpcdFx0ICBUaGlzIGlzIEZUUCBzdXBwb3J0IG9uIExheWVyIDMgaW5kZXBlbmRlbnQgY29ubmVjdGlvbiB0cmFja2luZy5cbiAyMzY6XHRcbiAyMzc6XHRcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXG4gMjM4Olx0XG4gMjM5Olx0Y29uZmlnIE5GX0NPTk5UUkFDS19IMzIzXG4gMjQwOlx0XHR0cmlzdGF0ZSBcJiMzNDtILjMyMyBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4gMjQxOlx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxuIDI0MjpcdFx0aGVscFxuIDI0MzpcdFx0ICBILjMyMyBpcyBhIFZvSVAgc2lnbmFsbGluZyBwcm90b2NvbCBmcm9tIElUVS1ULiBBcyBvbmUgb2YgdGhlIG1vc3RcbiAyNDQ6XHRcdCAgaW1wb3J0YW50IFZvSVAgcHJvdG9jb2xzLCBpdCBpcyB3aWRlbHkgdXNlZCBieSB2b2ljZSBoYXJkd2FyZSBhbmRcbiAyNDU6XHRcdCAgc29mdHdhcmUgaW5jbHVkaW5nIHZvaWNlIGdhdGV3YXlzLCBJUCBwaG9uZXMsIE5ldG1lZXRpbmcsIE9wZW5QaG9uZSxcbiAyNDY6XHRcdCAgR25vbWVtZWV0aW5nLCBldGMuXG4gMjQ3Olx0XG4gMjQ4Olx0XHQgIFdpdGggdGhpcyBtb2R1bGUgeW91IGNhbiBzdXBwb3J0IEguMzIzIG9uIGEgY29ubmVjdGlvbiB0cmFja2luZy9OQVRcbiAyNDk6XHRcdCAgZmlyZXdhbGwuXG4gMjUwOlx0XG4gMjUxOlx0XHQgIFRoaXMgbW9kdWxlIHN1cHBvcnRzIFJBUywgRmFzdCBTdGFydCwgSC4yNDUgVHVubmVsbGluZywgQ2FsbFxuIDI1MjpcdFx0ICBGb3J3YXJkaW5nLCBSVFAvUlRDUCBhbmQgVC4xMjAgYmFzZWQgYXVkaW8sIHZpZGVvLCBmYXgsIGNoYXQsXG4gMjUzOlx0XHQgIHdoaXRlYm9hcmQsIGZpbGUgdHJhbnNmZXIsIGV0Yy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZVxuIDI1NDpcdFx0ICB2aXNpdCBodHRwOi8vbmF0aDMyMy5zb3VyY2Vmb3JnZS5uZXQvLlxuIDI1NTpcdFxuIDI1NjpcdFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi5cbiAyNTc6XHRcbiAyNTg6XHRjb25maWcgTkZfQ09OTlRSQUNLX0lSQ1xuIDI1OTpcdFx0dHJpc3RhdGUgXCYjMzQ7SVJDIERDQyBwcm90b2NvbCBzdXBwb3J0IChvYnNvbGV0ZSlcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDU6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzAyMQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHdoYXQgSSYjMzk7bSBsb29raW5nIGF0LCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZToKCioqSW52ZXN0aWdhdGluZyBORl9DT05OVFJBQ0sgRGVwZW5kZW5jaWVzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gTXkgZmlyc3QgbW92ZSBpcyB0byBpZGVudGlmeSB0aGUgZGVwZW5kZW5jaWVzIG9mIGBORl9DT05OVFJBQ0tgIHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMuIEkmIzM5O20gZ29pbmcgc3RyYWlnaHQgdG8gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgYW5kIGBuZXQvS2NvbmZpZ2AgdG8gdHJhY2UgaXRzIGRlcGVuZGVuY2llcy4gVGhlc2UgS2NvbmZpZyBmaWxlcyBhcmUgdGhlIGhlYXJ0IG9mIHRoZSBrZXJuZWwmIzM5O3MgYnVpbGQgc3lzdGVtLCBhbmQgdGhleSBjb250YWluIHRoZSBsb2dpY2FsIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB2YXJpb3VzIGZlYXR1cmVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIGtlcm5lbCBjb21wb25lbnRzIGFyZSByZXF1aXJlZCBmb3IgY29ubmVjdGlvbiB0cmFja2luZyB0byBmdW5jdGlvbi4gVGhpcyBpcyBjcml0aWNhbCBmb3IgZGVidWdnaW5nLCBvcHRpbWl6YXRpb24sIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgZnVuY3Rpb25hbGl0eS4gS25vd2luZyB0aGUgZGVwZW5kZW5jaWVzIHdpbGwgaGVscCBtZSBmaWd1cmUgb3V0IHdoYXQgZWxzZSBJIG5lZWQgdG8gZW5hYmxlIG9yIGRpc2FibGUgaWYgSSYjMzk7bSBmaWRkbGluZyB3aXRoIGNvbm5lY3Rpb24gdHJhY2tpbmcsIGFuZCBhdm9pZCBhbnkgbmFzdHkgc3VycHJpc2VzLiBJdCBhbHNvIGFsbG93cyBtZSB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGNvZGUgaXMgaW50ZWdyYXRlZCBpbnRvIHRoZSByZXN0IG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbnVjb25maWcgTkZfQ09OTlRSQUNLJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA1OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyODYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgTmV0ZmlsdGVyIENvbm5lY3Rpb24gVHJhY2tpbmcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgTmV0ZmlsdGVyJiMzOTtzIGNvbm5lY3Rpb24gdHJhY2tpbmcgbW9kdWxlLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUga2VybmVsJiMzOTtzIEtjb25maWcgZmlsZXMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBmaW5kIHdoYXQgSSBuZWVkIHdpdGhpbiB0aGUgYG5ldC9uZXRmaWx0ZXJgIGRpcmVjdG9yeS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBzZWFyY2ggZm9yIGBjb25maWcgTkZfQ09OTlRSQUNLYCB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gc3ltYm9scyBhbmQgZGVzY3JpcHRpb25zIGZvciB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBmdW5jdGlvbmFsaXR5IHNob3VsZCBiZSBkZWZpbmVkLiBIb3BlZnVsbHksIHRoYXQgd2lsbCBnaXZlIG1lIGEgcm9hZG1hcCBvZiBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgdG8gdW5kZXJzdGFuZCBob3cgY29ubmVjdGlvbiB0cmFja2luZyBpcyBoYW5kbGVkIGFuZCBwb3RlbnRpYWxseSBtb2RpZnkgdGhlIGtlcm5lbCYjMzk7cyBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDU6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0NPTk5UUkFDS1xcYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTc0PWNvbmZpZyBORVRGSUxURVJfTkVUTElOS19PU0Zcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODEtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6ODI6Y29uZmlnIE5GX0NPTk5UUkFDS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTgzLVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTg0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIE5ldGZpbHRlciBDb25uZWN0aW9uIFRyYWNraW5nIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBzdXJyb3VuZGluZyBgY29uZmlnIE5GX0NPTk5UUkFDS2AuIEkmIzM5O20gaW1tZWRpYXRlbHkgbG9va2luZyBmb3IgaXRzIGRlcGVuZGVuY2llcywgd2hhdCBvdGhlciBmZWF0dXJlcyBpdCBlbmFibGVzIG9yIGRpc2FibGVzLCBhbmQgYW55IGhlbHAgdGV4dCBhc3NvY2lhdGVkIHdpdGggaXQuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgdGhlIHN1cnJvdW5kaW5nIGBpZmAgc3RhdGVtZW50cywgb3IgYW55IGRlcGVuZGVuY2llcyBsaWtlIGBORVRGSUxURVJgIG9yIHNwZWNpZmljIHByb3RvY29scy4gS25vd2luZyB0aGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBncmFzcCBvZiB3aGVyZSB0aGlzIHBhcnRpY3VsYXIgb3B0aW9uIGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgdGhlIE5ldGZpbHRlciBmcmFtZXdvcmssIGFuZCBob3cgaXQmIzM5O3MgZGVzaWduZWQuIEkmIzM5O20gYWxzbyBpbnRlcmVzdGVkIGluIGl0cyBkZWZhdWx0IHN0YXRlIOKAkyBpcyBpdCBidWlsdC1pbiwgYSBtb2R1bGUsIG9yIGRpc2FibGVkIGJ5IGRlZmF1bHQ/IFRoYXQmIzM5O2xsIGdpdmUgbWUgY2x1ZXMgYWJvdXQgaXRzIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBhbmQgdGhlIGxpa2VsaWhvb2Qgb2YgaXQgYmVpbmcgZW5hYmxlZCBpbiB2YXJpb3VzIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSYjMzk7bGwgcGF5IGF0dGVudGlvbiB0byBhbnkgd2FybmluZ3Mgb3IgY29tbWVudHMgYWJvdXQgZW5hYmxpbmcgdGhpcyBmZWF0dXJlLCBlc3BlY2lhbGx5IGluIHNjZW5hcmlvcyB3aXRoIGhpZ2ggY29ubmVjdGlvbiByYXRlcywgb3Igd2l0aCBzcGVjaWZpYyB0eXBlcyBvZiB0cmFmZmljIHRoYXQgbWlnaHQgbm90IHBsYXkgd2VsbCB3aXRoIHN0YXRlZnVsIGluc3BlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA1OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA3NTpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIE9TRiBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcJiMzNDtcbiAgNzY6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG4gIDc3Olx0XHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcbiAgNzg6XHRcdGhlbHBcbiAgNzk6XHRcdCAgSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgdGhlIGtlcm5lbCB3aWxsIGluY2x1ZGUgc3VwcG9ydFxuICA4MDpcdFx0ICBmb3IgcGFzc2l2ZSBPUyBmaW5nZXJwcmludCB2aWEgTkZORVRMSU5LLlxuICA4MTpcdFxuICA4MjpcdGNvbmZpZyBORl9DT05OVFJBQ0tcbiAgODM6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIHN1cHBvcnRcJiMzNDtcbiAgODQ6XHRcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxuICA4NTpcdFx0c2VsZWN0IE5GX0RFRlJBR19JUFY0XG4gIDg2Olx0XHRzZWxlY3QgTkZfREVGUkFHX0lQVjYgaWYgSVBWNiAhPSBuXG4gIDg3Olx0XHRoZWxwXG4gIDg4Olx0XHQgIENvbm5lY3Rpb24gdHJhY2tpbmcga2VlcHMgYSByZWNvcmQgb2Ygd2hhdCBwYWNrZXRzIGhhdmUgcGFzc2VkXG4gIDg5Olx0XHQgIHRocm91Z2ggeW91ciBtYWNoaW5lLCBpbiBvcmRlciB0byBmaWd1cmUgb3V0IGhvdyB0aGV5IGFyZSByZWxhdGVkXG4gIDkwOlx0XHQgIGludG8gY29ubmVjdGlvbnMuXG4gIDkxOlx0XG4gIDkyOlx0XHQgIFRoaXMgaXMgcmVxdWlyZWQgdG8gZG8gTWFzcXVlcmFkaW5nIG9yIG90aGVyIGtpbmRzIG9mIE5ldHdvcmtcbiAgOTM6XHRcdCAgQWRkcmVzcyBUcmFuc2xhdGlvbi4gIEl0IGNhbiBhbHNvIGJlIHVzZWQgdG8gZW5oYW5jZSBwYWNrZXRcbiAgOTQ6XHRcdCAgZmlsdGVyaW5nIChzZWUgYENvbm5lY3Rpb24gc3RhdGUgbWF0Y2ggc3VwcG9ydCYjMzk7IGJlbG93KS5cbiAgOTU6XHRcbiAgOTY6XHRcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXG4gIDk3Olx0XG4gIDk4Olx0Y29uZmlnIE5GX0xPR19TWVNMT0dcbiAgOTk6XHRcdHRyaXN0YXRlIFwmIzM0O1N5c2xvZyBwYWNrZXQgbG9nZ2luZ1wmIzM0O1xuIDEwMDpcdFx0ZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uXG4gMTAxOlx0XHRoZWxwXG4gMTAyOlx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZSBzdXBwb3J0IGZvciBwYWNrZXQgbG9nZ2luZyB2aWEgc3lzbG9nLlxuIDEwMzpcdFx0ICBJdCBzdXBwb3J0cyBJUHY0LCBJUFY2LCBBUlAgYW5kIGNvbW1vbiB0cmFuc3BvcnQgcHJvdG9jb2xzIHN1Y2hcbiAxMDQ6XHRcdCAgYXMgVENQIGFuZCBVRFAuXG4gMTA1Olx0XHQgIFRoaXMgaXMgYSBzaW1wbGVyIGJ1dCBsZXNzIGZsZXhpYmxlIGxvZ2dpbmcgbWV0aG9kIGNvbXBhcmVkIHRvXG4gMTA2Olx0XHQgIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0cuXG4gMTA3Olx0XHQgIElmIGJvdGggYXJlIGVuYWJsZWQgdGhlIGJhY2tlbmQgdG8gdXNlIGNhbiBiZSBjb25maWd1cmVkIGF0IHJ1bi10aW1lXG4gMTA4Olx0XHQgIGJ5IG1lYW5zIG9mIHBlci1hZGRyZXNzLWZhbWlseSBzeXNjdGwgdHVuYWJsZXMuXG4gMTA5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA1OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0MDgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byB0aGUgTmV0ZmlsdGVyIEtjb25maWcqKgoKT2theSwgdGltZSB0byBnZXQgc3RhcnRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIGZvciBuZXRmaWx0ZXIuIFRoZSBiZXN0IHBsYWNlIHRvIGJlZ2luIGlzIGFsbW9zdCBhbHdheXMgdGhlIGBLY29uZmlnYCBmaWxlIGluIHRoZSByZWxldmFudCBkaXJlY3RvcnkuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgbmF2aWdhdGUgb3ZlciB0byBgbmV0L25ldGZpbHRlci9LY29uZmlnYCB0byBnZXQgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBtZW51IHN0cnVjdHVyZSBhbmQgdGhlIGRlcGVuZGVuY2llcy4gVGhpcyBzaG91bGQgaW1tZWRpYXRlbHkgZ2l2ZSBtZSBhIHNlbnNlIG9mIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byBlYWNoIG90aGVyIHdpdGhpbiB0aGUgbmV0ZmlsdGVyIGZyYW1ld29yay4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZm91bmRhdGlvbiBJIG5lZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA1OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0bWVudSBcJiMzNDtDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uXCYjMzQ7XG4gICAzOlx0XHRkZXBlbmRzIG9uIElORVQgXHUwMDI2XHUwMDI2IE5FVEZJTFRFUlxuICAgNDpcdFxuICAgNTpcdGNvbmZpZyBORVRGSUxURVJfSU5HUkVTU1xuICAgNjpcdFx0Ym9vbCBcJiMzNDtOZXRmaWx0ZXIgaW5ncmVzcyBzdXBwb3J0XCYjMzQ7XG4gICA3Olx0XHRkZWZhdWx0IHlcbiAgIDg6XHRcdHNlbGVjdCBORVRfSU5HUkVTU1xuICAgOTpcdFx0aGVscFxuICAxMDpcdFx0ICBUaGlzIGFsbG93cyB5b3UgdG8gY2xhc3NpZnkgcGFja2V0cyBmcm9tIGluZ3Jlc3MgdXNpbmcgdGhlIE5ldGZpbHRlclxuICAxMTpcdFx0ICBpbmZyYXN0cnVjdHVyZS5cbiAgMTI6XHRcbiAgMTM6XHRjb25maWcgTkVURklMVEVSX0VHUkVTU1xuICAxNDpcdFx0Ym9vbCBcJiMzNDtOZXRmaWx0ZXIgZWdyZXNzIHN1cHBvcnRcJiMzNDtcbiAgMTU6XHRcdGRlZmF1bHQgeVxuICAxNjpcdFx0c2VsZWN0IE5FVF9FR1JFU1NcbiAgMTc6XHRcdGhlbHBcbiAgMTg6XHRcdCAgVGhpcyBhbGxvd3MgeW91IHRvIGNsYXNzaWZ5IHBhY2tldHMgYmVmb3JlIHRyYW5zbWlzc2lvbiB1c2luZyB0aGVcbiAgMTk6XHRcdCAgTmV0ZmlsdGVyIGluZnJhc3RydWN0dXJlLlxuICAyMDpcdFxuICAyMTpcdGNvbmZpZyBORVRGSUxURVJfU0tJUF9FR1JFU1NcbiAgMjI6XHRcdGRlZl9ib29sIE5FVEZJTFRFUl9FR1JFU1MgXHUwMDI2XHUwMDI2IChORVRfQ0xTX0FDVCB8fCBJRkIpXG4gIDIzOlx0XG4gIDI0Olx0Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LXG4gIDI1Olx0XHRib29sXG4gIDI2Olx0XG4gIDI3Olx0Y29uZmlnIE5FVEZJTFRFUl9GQU1JTFlfQlJJREdFXG4gIDI4Olx0XHRib29sXG4gIDI5Olx0XG4gIDMwOlx0Y29uZmlnIE5FVEZJTFRFUl9GQU1JTFlfQVJQXG4gIDMxOlx0XHRib29sXG4gIDMyOlx0XG4gIDMzOlx0Y29uZmlnIE5FVEZJTFRFUl9CUEZfTElOS1xuICAzNDpcdFx0ZGVmX2Jvb2wgQlBGX1NZU0NBTExcbiAgMzU6XHRcbiAgMzY6XHRjb25maWcgTkVURklMVEVSX05FVExJTktfSE9PS1xuICAzNzpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIGJhc2UgaG9vayBkdW1wIHN1cHBvcnRcJiMzNDtcbiAgMzg6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG4gIDM5Olx0XHRkZXBlbmRzIG9uIE5GX1RBQkxFU1xuICA0MDpcdFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA1OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwNDgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBILjMyMyBDb25uZWN0aW9uIFRyYWNraW5nIE1vZHVsZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYE5GX0NPTk5UUkFDS19IMzIzYCBtb2R1bGUuIFRoZSBwcmVyZXF1aXNpdGVzIGFyZSBwcmV0dHkgY2xlYXI6IGBORVRGSUxURVJgLCBgSU5FVGAsIGBORVRGSUxURVJfQURWQU5DRURgLCBgTkZfQ09OTlRSQUNLYCwgYW5kLCBvZiBjb3Vyc2UsIGBORl9DT05OVFJBQ0tfSDMyM2AgaXRzZWxmLiBNYWtlcyBzZW5zZSwgZ2l2ZW4gaXQmIzM5O3MgYnVpbHQgb24gTmV0ZmlsdGVyIGFuZCBoYW5kbGVzIElQLWJhc2VkIGNvbm5lY3Rpb25zLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVjb2RpbmcgcHJvY2Vzcy4gSSBuZWVkIHRvIGZvY3VzIG9uIGhvdyBgZGVjb2RlX2VudW1gIGFuZCB0aGUgQVNOLjEgcGFyc2VyIGFyZSBhY3R1YWxseSAqdXNlZCogd2l0aGluIHRoaXMgbW9kdWxlLiBTcGVjaWZpY2FsbHksIGluIGBuZl9jb25udHJhY2tfaDMyM19hc24xLmNgLiBTbyBteSBuZXh0IHN0ZXAgaXMgY2xlYXIuCgpJJiMzOTtsbCBiZSBzZWFyY2hpbmcgZm9yIGhvdyBgZGVjb2RlX2VudW1gIGlzIGNhbGxlZCwgYW5kIGdlbmVyYWxseSBob3cgQVNOLjEgZGVjb2RpbmcgaGFwcGVucyB3aXRoaW4gYm90aCBgbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYCBhbmQgYG5mX2Nvbm50cmFja19oMzIzX21haW4uY2AuIEkgbmVlZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRhdGEgZmxvdyBhbmQgaG93IHRoZSBBU04uMSBkYXRhIGlzIGhhbmRsZWQuIFRoaXMgaXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBhY3R1YWxseSB3b3JrcyBmb3IgSC4zMjMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA1OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlY29kZV9lbnVtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9MTExPXN0YXRpYyBpbnQgZGVjb2RlX2ludChzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMTI6c3RhdGljIGludCBkZWNvZGVfZW51bShzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0xMTMtc3RhdGljIGludCBkZWNvZGVfYml0c3RyKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz0xMjM9c3RhdGljIGNvbnN0IGRlY29kZXJfdCBEZWNvZGVyc1tdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTEyNy1cdGRlY29kZV9pbnQsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMjg6XHRkZWNvZGVfZW51bSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTEyOS1cdGRlY29kZV9iaXRzdHIsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9MzEyPXN0YXRpYyBpbnQgZGVjb2RlX2ludChzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMzYwLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MzYxOnN0YXRpYyBpbnQgZGVjb2RlX2VudW0oc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMzYyLSAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmFzZSwgaW50IGxldmVsKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTMzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEguMzIzIENvbm5lY3Rpb24gVHJhY2tpbmcgQ29kZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IHJlbGF0ZWQgdG8gSC4zMjMgY29ubmVjdGlvbiB0cmFja2luZy4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgYG5mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AgZmlsZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGl0cyBmdW5jdGlvbnMgYXJlIGludm9rZWQsIHNvIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGVudHJ5IHBvaW50cyDigJMgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBkaXJlY3RseSBjYWxsZWQgZnJvbSBlbHNld2hlcmUuIFRoZW4sIEkgbmVlZCB0byBzZWUgKndoZXJlKiB0aG9zZSBlbnRyeSBwb2ludHMgYXJlIGNhbGxlZCBmcm9tLiBUaGUgb2J2aW91cyBwbGFjZSB0byBsb29rIGZvciB0aGF0IGluaXRpYWwgY2FsbCBpcyBpbiBgbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jYCwgYXMgdGhlIG5hbWUgc3VnZ2VzdHMgaXQmIzM5O3MgdGhlIGNlbnRyYWwgaHViLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiBob3cgdGhlIEFTTi4xLXJlbGF0ZWQgZnVuY3Rpb25hbGl0eSBmaXRzIGludG8gdGhlIGJyb2FkZXIgY29ubmVjdGlvbiB0cmFja2luZyBwcm9jZXNzIGZvciBILjMyMyB0cmFmZmljLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHdpbGwgbGlrZWx5IHNob3cgdGhlIGZ1bmN0aW9uIGNhbGxzIHRoYXQgaGFuZGxlIHRoZSBBU04uMSBkZWNvZGluZyBhbmQgY29ubmVjdGlvbiBzdGF0ZSBtb2RpZmljYXRpb25zLiBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IEkgY2FuIHRoZW4gdHJhY2UgdGhlIGNvbnRyb2wgZmxvdyBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuIHRoZXNlIGZpbGVzIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIHRoaXMgbW9kdWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0RlY29kZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDU6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyNjYKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBILjMyMyBjb25uZWN0aW9uIHRyYWNraW5nIG1vZHVsZS4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJJiMzOTtsbCBleGFtaW5lIHRoZSBoZWFkZXIgZmlsZSwgc3BlY2lmaWNhbGx5IGBpbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmhgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIGRlY2xhcmF0aW9ucyBmb3IgdGhpcyBwYXJ0IG9mIHRoZSBOZXRmaWx0ZXIgc3Vic3lzdGVtIHNob3VsZCByZXNpZGUuIE15IHByaW1hcnkgZ29hbCBoZXJlIGlzIHRvIGlkZW50aWZ5IGV4YWN0bHkgd2hhdCBmdW5jdGlvbmFsaXR5IGlzIGV4cG9zZWQ6IFdoYXQgZnVuY3Rpb25zIGFyZSAqZXhwb3J0ZWQqIOKAkyB0aG9zZSBhcmUgdGhlIGVudHJ5IHBvaW50cyBJJiMzOTtsbCBiZSB3b3JraW5nIHdpdGgg4oCTIGFuZCB3aGF0JiMzOTtzICpkZWNsYXJlZCogd2l0aGluIHRoYXQgY29udGV4dD8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhlIHN0cnVjdHVyZXMsIGVudW1lcmF0aW9ucywgYW5kIGZ1bmN0aW9uIHByb3RvdHlwZXMgdGhhdCBhcmUgZGVmaW5lZC4gVW5kZXJzdGFuZGluZyB0aGUgZXhwb3J0ZWQgQVBJIGlzIGFic29sdXRlbHkgY3J1Y2lhbCBmb3IgYW55IGludGVncmF0aW9uIG9yIGludGVyYWN0aW9uIHdpdGggdGhpcyBtb2R1bGUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBhcmNoaXRlY3R1cmUgYW5kIGhvdyB0byB3b3JrIHdpdGggaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA1OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBEZWNvZGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5oPTQ0PXR5cGVkZWYgc3RydWN0IHtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmgtOTAtXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmg6OTE6aW50IERlY29kZVJhc01lc3NhZ2UodW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3Qgc3osIFJhc01lc3NhZ2UgKiByYXMpO1xuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5oOjkyOmludCBEZWNvZGVROTMxKHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IHN6LCBROTMxICogcTkzMSk7XG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmg6OTM6aW50IERlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZSh1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBzeixcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuaC05NC1cdFx0XHRcdFx0IE11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZSAqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA1OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzc0CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGF0IGFuYWx5c2lzLCBhcyBpZiBpdCB3ZXJlIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEguMzIzIENvbm50cmFjayBNb2R1bGUqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgd2l0aGluIHRoaXMgSC4zMjMgY29ubnRyYWNrIG1vZHVsZSwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgdGhlIHBhcnNpbmcgb2YgdGhvc2UgSC4yMjUgYW5kIEguMjQ1IG1lc3NhZ2VzLiBNeSBnb2FsIGlzIHRvIHNlZSBleGFjdGx5IHdoZXJlIGBEZWNvZGVSYXNNZXNzYWdlYCwgYERlY29kZVE5MzFgLCBhbmQgYERlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZWAgYXJlIGludm9rZWQgd2l0aGluIGBuZl9jb25udHJhY2tfaDMyM19tYWluLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZW50cnkgcG9pbnRzIGFuZCB0aGUgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgdGhlc2UgbWVzc2FnZSBkZWNvZGVycy4gVGhpcyB3aWxsIGhlbHAgbWUgZ3Jhc3AgaG93IHRoZSBtb2R1bGUgcHJvY2Vzc2VzIGFuZCBleHRyYWN0cyBpbmZvcm1hdGlvbiBmcm9tIEguMzIzIHNpZ25hbGluZy4gSSBhbnRpY2lwYXRlIHRoZXJlJiMzOTtsbCBiZSBhIGZ1bmN0aW9uIHRoYXQgZG9lcyB0aGUgaW5pdGlhbCBtZXNzYWdlIHR5cGUgZGV0ZWN0aW9uLCBhbmQgdGhlbiBjYWxscyB0aGUgYXBwcm9wcmlhdGUgZGVjb2RlIGZ1bmN0aW9uIGJhc2VkIG9uIHRoYXQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIG9uIGhvdyB0aGUgSC4zMjMgc3RhdGUgbWFjaGluZSBpcyByZXByZXNlbnRlZC4gSXQgd291bGQgYWxzbyBiZSBncmVhdCB0byB1bmRlcnN0YW5kIGhvdyBlcnJvcnMgYXJlIGhhbmRsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA1OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0RlY29kZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTUyOT1zdGF0aWMgaW50IGgyNDVfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy01NTEtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzo1NTI6XHRcdC8qIERlY29kZSBILjI0NSBzaWduYWwgKi9cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjU1MzpcdFx0cmV0ID0gRGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlKGRhdGEsIGRhdGFsZW4sXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy01NTQtXHRcdFx0XHRcdFx0XHQgICBcdTAwMjZtc2NtKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYz0xMDg5PXN0YXRpYyBpbnQgcTkzMV9oZWxwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTExMTEtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxMTEyOlx0XHQvKiBEZWNvZGUgUS45MzEgc2lnbmFsICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxMTEzOlx0XHRyZXQgPSBEZWNvZGVROTMxKGRhdGEsIGRhdGFsZW4sIFx1MDAyNnE5MzEpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTExNC1cdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTE2NjQ9c3RhdGljIGludCByYXNfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNjgyLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MTY4MzpcdC8qIERlY29kZSBSQVMgbWVzc2FnZSAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MTY4NDpcdHJldCA9IERlY29kZVJhc01lc3NhZ2UoZGF0YSwgZGF0YWxlbiwgXHUwMDI2cmFzKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE2ODUtXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA1OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjU3CgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBIZWFydCBvZiBILjMyMyBDb25uZWN0aW9uIFRyYWNraW5nKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgSC4zMjMgY29ubmVjdGlvbiB0cmFja2luZyBtb2R1bGUgd29ya3MgaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGhvdyBpdCBkZWNvZGVzIHRoZSBBU04uMSBtZXNzYWdlcy4gVGhlIGRlZmluaXRpb25zIGZvciBgRGVjb2RlUmFzTWVzc2FnZWAsIGBEZWNvZGVROTMxYCwgYW5kIHRoZSBvdGhlciBkZWNvZGluZyBmdW5jdGlvbnMgYXJlIGJ1cmllZCBzb21ld2hlcmUgd2l0aGluIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AuIEJlc3QgdG8ganVzdCBqdW1wIHJpZ2h0IHRvIHRoZSBlbmQgb2YgdGhhdCBmaWxlIGFuZCBjaGVjayB0aGVtIG91dC4gSSBuZWVkIHRvIHNlZSB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgdGhlc2UgY3JpdGljYWwgZnVuY3Rpb25zLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIGxvZ2ljIGlzLCBub3QganVzdCB0aGUgZGVjbGFyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MDA6XHRcdFx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbiA4MDE6XHRcdFx0aWYgKCFiYXNlIHx8ICEoc29uLVx1MDAzZWF0dHIgXHUwMDI2IERFQ09ERSkpIHtcbiA4MDI6XHRcdFx0XHRQUklOVChcJiMzNDslKnMlc1xcblwmIzM0OywgKGxldmVsICYjNDM7IDEpICogVEFCX1NJWkUsIFwmIzM0OyBcJiMzNDssXG4gODAzOlx0XHRcdFx0ICAgICAgc29uLVx1MDAzZW5hbWUpO1xuIDgwNDpcdFx0XHRcdGJzLVx1MDAzZWN1ciAmIzQzOz0gbGVuO1xuIDgwNTpcdFx0XHRcdHJldHVybiBIMzIzX0VSUk9SX05PTkU7XG4gODA2Olx0XHRcdH1cbiA4MDc6XHRcdFx0YmVnID0gYnMtXHUwMDNlY3VyO1xuIDgwODpcdFxuIDgwOTpcdFx0XHRpZiAoKGVyciA9IChEZWNvZGVyc1tzb24tXHUwMDNldHlwZV0pIChicywgc29uLCBiYXNlLCBsZXZlbCAmIzQzOyAxKSkgXHUwMDNjXG4gODEwOlx0XHRcdCAgICBIMzIzX0VSUk9SX05PTkUpXG4gODExOlx0XHRcdFx0cmV0dXJuIGVycjtcbiA4MTI6XHRcbiA4MTM6XHRcdFx0YnMtXHUwMDNlY3VyID0gYmVnICYjNDM7IGxlbjtcbiA4MTQ6XHRcdFx0YnMtXHUwMDNlYml0ID0gMDtcbiA4MTU6XHRcdH0gZWxzZSBpZiAoKGVyciA9IChEZWNvZGVyc1tzb24tXHUwMDNldHlwZV0pIChicywgc29uLCBiYXNlLCBsZXZlbCAmIzQzOyAxKSkgXHUwMDNjXG4gODE2Olx0XHRcdCAgIEgzMjNfRVJST1JfTk9ORSlcbiA4MTc6XHRcdFx0cmV0dXJuIGVycjtcbiA4MTg6XHRcbiA4MTk6XHRcdHJldHVybiBIMzIzX0VSUk9SX05PTkU7XG4gODIwOlx0fVxuIDgyMTpcdFxuIDgyMjpcdGludCBEZWNvZGVSYXNNZXNzYWdlKHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IHN6LCBSYXNNZXNzYWdlICpyYXMpXG4gODIzOlx0e1xuIDgyNDpcdFx0c3RhdGljIGNvbnN0IHN0cnVjdCBmaWVsZF90IHJhc19tZXNzYWdlID0ge1xuIDgyNTpcdFx0XHRGTkFNRShcJiMzNDtSYXNNZXNzYWdlXCYjMzQ7KSBDSE9JQ0UsIDUsIDI0LCAzMiwgREVDT0RFIHwgRVhULFxuIDgyNjpcdFx0XHQwLCBfUmFzTWVzc2FnZVxuIDgyNzpcdFx0fTtcbiA4Mjg6XHRcdHN0cnVjdCBiaXRzdHIgYnM7XG4gODI5Olx0XG4gODMwOlx0XHRicy5idWYgPSBicy5iZWcgPSBicy5jdXIgPSBidWY7XG4gODMxOlx0XHRicy5lbmQgPSBidWYgJiM0Mzsgc3o7XG4gODMyOlx0XHRicy5iaXQgPSAwO1xuIDgzMzpcdFxuIDgzNDpcdFx0cmV0dXJuIGRlY29kZV9jaG9pY2UoXHUwMDI2YnMsIFx1MDAyNnJhc19tZXNzYWdlLCAoY2hhciAqKSByYXMsIDApO1xuIDgzNTpcdH1cbiA4MzY6XHRcbiA4Mzc6XHRzdGF0aWMgaW50IERlY29kZUgzMjNfVXNlckluZm9ybWF0aW9uKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgY2hhciAqYmVnLFxuIDgzODpcdFx0XHRcdFx0ICAgICAgc2l6ZV90IHN6LCBIMzIzX1VzZXJJbmZvcm1hdGlvbiAqdXVpZSlcbiA4Mzk6XHR7XG4gODQwOlx0XHRzdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgaDMyM191c2VyaW5mb3JtYXRpb24gPSB7XG4gODQxOlx0XHRcdEZOQU1FKFwmIzM0O0gzMjMtVXNlckluZm9ybWF0aW9uXCYjMzQ7KSBTRVEsIDEsIDIsIDIsIERFQ09ERSB8IEVYVCxcbiA4NDI6XHRcdFx0MCwgX0gzMjNfVXNlckluZm9ybWF0aW9uXG4gODQzOlx0XHR9O1xuIDg0NDpcdFx0c3RydWN0IGJpdHN0ciBicztcbiA4NDU6XHRcbiA4NDY6XHRcdGJzLmJ1ZiA9IGJ1ZjtcbiA4NDc6XHRcdGJzLmJlZyA9IGJzLmN1ciA9IGJlZztcbiA4NDg6XHRcdGJzLmVuZCA9IGJlZyAmIzQzOyBzejtcbiA4NDk6XHRcdGJzLmJpdCA9IDA7XG4gODUwOlx0XG4gODUxOlx0XHRyZXR1cm4gZGVjb2RlX3NlcShcdTAwMjZicywgXHUwMDI2aDMyM191c2VyaW5mb3JtYXRpb24sIChjaGFyICopIHV1aWUsIDApO1xuIDg1MjpcdH1cbiA4NTM6XHRcbiA4NTQ6XHRpbnQgRGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlKHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IHN6LFxuIDg1NTpcdFx0XHRcdFx0XHQgTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlICpcbiA4NTY6XHRcdFx0XHRcdFx0IG1zY20pXG4gODU3Olx0e1xuIDg1ODpcdFx0c3RhdGljIGNvbnN0IHN0cnVjdCBmaWVsZF90IG11bHRpbWVkaWFzeXN0ZW1jb250cm9sbWVzc2FnZSA9IHtcbiA4NTk6XHRcdFx0Rk5BTUUoXCYjMzQ7TXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlXCYjMzQ7KSBDSE9JQ0UsIDIsIDQsIDQsXG4gODYwOlx0XHRcdERFQ09ERSB8IEVYVCwgMCwgX011bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZVxuIDg2MTpcdFx0fTtcbiA4NjI6XHRcdHN0cnVjdCBiaXRzdHIgYnM7XG4gODYzOlx0XG4gODY0Olx0XHRicy5idWYgPSBicy5iZWcgPSBicy5jdXIgPSBidWY7XG4gODY1Olx0XHRicy5lbmQgPSBidWYgJiM0Mzsgc3o7XG4gODY2Olx0XHRicy5iaXQgPSAwO1xuIDg2NzpcdFxuIDg2ODpcdFx0cmV0dXJuIGRlY29kZV9jaG9pY2UoXHUwMDI2YnMsIFx1MDAyNm11bHRpbWVkaWFzeXN0ZW1jb250cm9sbWVzc2FnZSxcbiA4Njk6XHRcdFx0XHQgICAgIChjaGFyICopIG1zY20sIDApO1xuIDg3MDpcdH1cbiA4NzE6XHRcbiA4NzI6XHRpbnQgRGVjb2RlUTkzMSh1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBzeiwgUTkzMSAqcTkzMSlcbiA4NzM6XHR7XG4gODc0Olx0XHR1bnNpZ25lZCBjaGFyICpwID0gYnVmO1xuIDg3NTpcdFx0aW50IGxlbjtcbiA4NzY6XHRcbiA4Nzc6XHRcdGlmICghcCB8fCBzeiBcdTAwM2MgMSlcbiA4Nzg6XHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4gODc5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA1OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTE4CgkJCQkJCQlvdXRwdXQ6IDE3MQoJCQkJCQkJdGhvdWdodHM6IDExNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgSC4zMjMgQ29ubnRyYWNrIEhlbHBlciBWdWxuZXJhYmlsaXR5IEZpeCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYGRlY29kZV9lbnVtYCBpbiBgbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYCBoYXMgYmVlbiBtb2RpZmllZC4gVGhpcyBpcyBhIHN0YXRpYyBmdW5jdGlvbiB1c2VkIHdpdGhpbiB0aGUgSC4zMjMgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXIsIGFjY2Vzc2VkIHZpYSB0aGUgYERlY29kZXJzYCB0YWJsZSBmb3IgQVNOLjEgZGVjb2RpbmcuIFRoZSBjaGFuZ2UgaW50cm9kdWNlcyBhIGJvdW5kcyBjaGVjaywgYG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDEpYCwgKmJlZm9yZSogcmVhZGluZyB0aGUgYml0LiBUaGlzIGlzIGEgY2xhc3NpYyBidWZmZXIgb3ZlcnJ1biBwcmV2ZW50aW9uIHN0cmF0ZWd5IHdoZW4gcGFyc2luZyBBU04uMSBlbnVtIGZpZWxkcywgbWl0aWdhdGluZyBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGluIG1hbGZvcm1lZCBILjMyMyBwYWNrZXRzLgoKSXMgdGhpcyByZWFjaGFibGUgYW5kIHdvcnRoIHRhcmdldGluZyBmb3IgZnV6emluZz8gQWJzb2x1dGVseSwgeWVzLiBUaGUgY29kZSByZXNpZGVzIHdpdGhpbiB0aGUgYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYCBmaWxlLiBUaGlzIG1lYW5zIHRoaXMgY29kZSBwYXRoIGlzIGludm9sdmVkIGluIGFuYWx5emluZyBpbmNvbWluZyBhbmQgb3V0Z29pbmcgSC4zMjMgdHJhZmZpYywgaW5jbHVkaW5nIFJBUywgUS45MzEsIGFuZCBILjI0NSBwYWNrZXRzLCBhbmQgYW55dGhpbmcgc2VudCB0aHJvdWdoIHJhdyBzb2NrZXRzLCBsb29wYmFjaywgdHVuLCB0YXAsIGFuZCBuZXRsaW5rIGN0IGhlbHBlci4gQW55IGZ1enppbmcgZWZmb3J0IHRhcmdldGVkIGF0IHRoaXMgd291bGQgbW9kaWZ5IHRoZSBjb2RlIGZvciB0aGUgbmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyLCB3aGljaCBpcyB2ZXJ5IGhpZ2ggdmFsdWUuIFRoZSBwcmVzZW5jZSBvZiBgV29ydGhGdXp6aW5nPXRydWVgIGNvbmZpcm1zIHRoaXMgaW5pdGlhbCBhc3Nlc3NtZW50LgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gZW5zdXJlIGBORl9DT05OVFJBQ0tgIGFuZCBgTkZfQ09OTlRSQUNLX0gzMjNgIGFyZSBlbmFibGVkLiBGdXJ0aGVybW9yZSwgYWNjb3JkaW5nIHRvIHRoZSBgS2NvbmZpZ2AgZmlsZSBpbiB0aGUgbmV0ZmlsdGVyIGRpcmVjdG9yeSwgYE5GX0NPTk5UUkFDS19IMzIzYCBkZXBlbmRzIG9uIGBORVRGSUxURVJfQURWQU5DRURgLiBDb3JlIE5ldGZpbHRlciBmdW5jdGlvbmFsaXR5IGRlcGVuZHMgb24gYElORVRgIGFuZCBgTkVURklMVEVSYC4gVGhlc2UgY29uZmlncyBhcmUgc3RyYWlnaHRmb3J3YXJkIGFuZCBjb21tb24uCgpUaGUgY3JpdGljYWwgcXVlc3Rpb24gbm93IGlzIHdoYXQgc3ltYm9scyBzaG91bGQgSSB0YXJnZXQ/IGBkZWNvZGVfZW51bWAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgcmVjZWl2ZWQgdGhlIGNoYW5nZSwgYW5kIGlzIGRlZmluZWQgaW4gdGhlIGBuZl9jb25udHJhY2tfaDMyM19hc24xLmNgLiBXaGlsZSBpdCBpcyBgc3RhdGljYCBJIGNhbiBkZWZpbml0ZWx5IHRhcmdldCBpdCwgZXNwZWNpYWxseSBpZiBJIGNhbiBwcm92aWRlIGl0cyBjYWxsZXJzIGFzIGVudHJ5IHBvaW50cy4gSSBoYXZlIHRvIGJlIGNhcmVmdWwgd2l0aCBzcGVsbGluZy4gSSYjMzk7bSBnb2luZyB0byBsaXN0IG91dCBldmVyeSBzeW1ib2wsIG5vbi1zdGF0aWMsIGluIHRoZSBmaWxlIHRoYXQgY291bGQgcG90ZW50aWFsbHkgY2FsbCBkZWNvZGVfZW51bToKLSBgRGVjb2RlUmFzTWVzc2FnZWAKLSBgRGVjb2RlUTkzMWAKLSBgRGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlYAotIGBkZWNvZGVfZW51bWAKLSBgcmFzX2hlbHBgCi0gYHE5MzFfaGVscGAKLSBgaDI0NV9oZWxwYAoKQWZ0ZXIgY2hlY2tpbmcgYG5mX2Nvbm50cmFja19oMzIzX21haW4uY2AgaGVscGVyIGZ1bmN0aW9ucywgSSBoYXZlIGNvbmZpcm1lZCB0aGUgZXhhY3Qgc3BlbGxpbmcgb2YgdGhlc2UgZnVuY3Rpb25zOgotIGBkZWNvZGVfZW51bWAKLSBgRGVjb2RlUmFzTWVzc2FnZWAKLSBgRGVjb2RlUTkzMWAKLSBgRGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlYAotIGByYXNfaGVscGAKLSBgcTkzMV9oZWxwYAotIGBoMjQ1X2hlbHBgCgpJJiMzOTt2ZSBhbHNvIHZlcmlmaWVkIHRoYXQgb25seSBgbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYCB3YXMgdG91Y2hlZCBpbiB0aGlzIGNvbW1pdC4KClNvLCBmb3IgYHNldC1yZXN1bHRzYCwgSSYjMzk7bGwgc3RydWN0dXJlIGl0IGxpa2UgdGhpczoKCi0gICBgV29ydGhGdXp6aW5nYDogdHJ1ZQotICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIHRvIGBkZWNvZGVfZW51bWAgaW4gdGhlIEguMzIzIGNvbm50cmFjayBBU04uMSBwYXJzZXIgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIGFjY2VzcyB3aGVuIHBhcnNpbmcgbWFsZm9ybWVkIEguMzIzIG5ldHdvcmsgcGFja2V0cywgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBILjMyMyBjb25udHJhY2sgaGVscGVycy4KLSAgIGBGb2N1c1N5bWJvbHNgOiBcWyYjMzQ7ZGVjb2RlXF9lbnVtJiMzNDssICYjMzQ7RGVjb2RlUmFzTWVzc2FnZSYjMzQ7LCAmIzM0O0RlY29kZVE5MzEmIzM0OywgJiMzNDtEZWNvZGVNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2UmIzM0OywgJiMzNDtyYXNcX2hlbHAmIzM0OywgJiMzNDtxOTMxXF9oZWxwJiMzNDssICYjMzQ7aDI0NVxfaGVscCYjMzQ7XQotICAgYEVuYWJsZUNvbmZpZ3NgOiBcWyYjMzQ7TkZcX0NPTk5UUkFDSyYjMzQ7LCAmIzM0O05GXF9DT05OVFJBQ0tcX0gzMjMmIzM0OywgJiMzNDtORVRGSUxURVJcX0FEVkFOQ0VEJiMzNDtdCgpUaGUgY29uZmlncyBhcmUgY29ycmVjdCBhbmQgdGhlIHN5bWJvbHMgYXJlIHRoZSBleGFjdCBuYW1lcy4gT2theSwgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA1OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX0gzMjMmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0FEVkFOQ0VEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGVjb2RlX2VudW0mIzM0OywKICAgICYjMzQ7RGVjb2RlUmFzTWVzc2FnZSYjMzQ7LAogICAgJiMzNDtEZWNvZGVROTMxJiMzNDssCiAgICAmIzM0O0RlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZSYjMzQ7LAogICAgJiMzNDtyYXNfaGVscCYjMzQ7LAogICAgJiMzNDtxOTMxX2hlbHAmIzM0OywKICAgICYjMzQ7aDI0NV9oZWxwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBtaXNzaW5nIGJvdW5kYXJ5IGNoZWNrIGluIGRlY29kZV9lbnVtKCkgaW4gdGhlIE5ldGZpbHRlciBILjMyMyBjb25uZWN0aW9uIHRyYWNraW5nIEFTTi4xIGRlY29kZXIgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIGFjY2VzcyB3aGVuIHJlYWRpbmcgYml0cyBmcm9tIG1hbGZvcm1lZCBwYWNrZXRzLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgbmV0d29yayBwYWNrZXQgcHJvY2Vzc2luZyBoYW5kbGVkIGJ5IHRoZSBILjMyMyBjb25udHJhY2sgaGVscGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX0gzMjMmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0FEVkFOQ0VEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGVjb2RlX2VudW0mIzM0OywKICAgICYjMzQ7RGVjb2RlUmFzTWVzc2FnZSYjMzQ7LAogICAgJiMzNDtEZWNvZGVROTMxJiMzNDssCiAgICAmIzM0O0RlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZSYjMzQ7LAogICAgJiMzNDtyYXNfaGVscCYjMzQ7LAogICAgJiMzNDtxOTMxX2hlbHAmIzM0OywKICAgICYjMzQ7aDI0NV9oZWxwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBtaXNzaW5nIGJvdW5kYXJ5IGNoZWNrIGluIGRlY29kZV9lbnVtKCkgaW4gdGhlIE5ldGZpbHRlciBILjMyMyBjb25uZWN0aW9uIHRyYWNraW5nIEFTTi4xIGRlY29kZXIgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIGFjY2VzcyB3aGVuIHJlYWRpbmcgYml0cyBmcm9tIG1hbGZvcm1lZCBwYWNrZXRzLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgbmV0d29yayBwYWNrZXQgcHJvY2Vzc2luZyBoYW5kbGVkIGJ5IHRoZSBILjMyMyBjb25udHJhY2sgaGVscGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNTo0NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA1OjQ2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG1pc3NpbmcgYm91bmRhcnkgY2hlY2sgYG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDEpYCB0byBgZGVjb2RlX2VudW0oKWAgYmVmb3JlIHJlYWRpbmcgYSBiaXQgZnJvbSB0aGUgQVNOLjEgYml0c3RyZWFtLiBQcmlvciB0byB0aGlzIGZpeCwgaWYgYGJzLVx1MDAzZWN1cmAgd2FzIGF0IGBicy1cdTAwM2VlbmRgLCBgZ2V0X2JpdChicylgIHdvdWxkIHBlcmZvcm0gYW4gb3V0LW9mLWJvdW5kcyByZWFkIHBhc3QgdGhlIGVuZCBvZiB0aGUgcGFja2V0IGRhdGEgYnVmZmVyLiBcblxuT3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgYXJlIG1lbW9yeSBzYWZldHkgdmlvbGF0aW9ucyBkaXJlY3RseSBjYXVnaHQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgc3RydWN0dXJlIHBhZGRpbmcgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDk4MTk4ZDY4M2VmNGM4MjY0NzM0MGUwNGE4NGFlNjQ4ZWNjYTE3ODAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDA1OjQ1OjE5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYwppbmRleCA2ODMwYzlkYTM1MDdjLi5iYTZjZTFmMDRlMWVkIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYwpAQCAtMzYzLDYgJiM0MzszNjMsOCBAQCBzdGF0aWMgaW50IGRlY29kZV9lbnVtKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwKIHsKIAlQUklOVCgmIzM0OyUqcyVzXG4mIzM0OywgbGV2ZWwgKiBUQUJfU0laRSwgJiMzNDsgJiMzNDssIGYtJmd0O25hbWUpOwogCiYjNDM7CWlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAxKSkKJiM0MzsJCXJldHVybiBIMzIzX0VSUk9SX0JPVU5EOwogCWlmICgoZi0mZ3Q7YXR0ciAmYW1wOyBFWFQpICZhbXA7JmFtcDsgZ2V0X2JpdChicykpIHsKIAkJSU5DX0JJVFMoYnMsIDcpOwogCX0gZWxzZSB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTM5CgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBILjMyMyBBU04uMSBDb25udHJhY2sgQ29kZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhpcy4gVGhlIHBhdGNoIGluIHF1ZXN0aW9uIGludm9sdmVzIHRoZSBILjMyMyBBU04uMSBjb25udHJhY2sgY29kZSwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0IGludGltYXRlbHkuIE15IGZpcnN0IHN0ZXAgaXMgdG8gemVybyBpbiBvbiBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNgLiBJJiMzOTtsbCB1c2UgYHJlYWQtZmlsZWAgbm93IHRvIHB1bGwgdGhhdCBzcGVjaWZpYyBmaWxlIGludG8gdmlldyBhbmQgSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiB0byB0aGUgYXJlYSBhcm91bmQgbGluZSAzNjMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbnRleHR1YWwgZm91bmRhdGlvbiBJIG5lZWQgdG8gcHJvcGVybHkgZ3Jhc3AgdGhlIHBhdGNoJiMzOTtzIHB1cnBvc2UgYW5kIGl0cyBpbXBsaWNhdGlvbnMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdGhlcmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDU6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzUwOlx0XHRcdElOQ19CSVRTKGJzLCBmLVx1MDAzZXN6KTtcbiAzNTE6XHRcdFx0YnJlYWs7XG4gMzUyOlx0XHR9XG4gMzUzOlx0XG4gMzU0Olx0XHRQUklOVChcJiMzNDtcXG5cJiMzNDspO1xuIDM1NTpcdFxuIDM1NjpcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDApKVxuIDM1NzpcdFx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbiAzNTg6XHRcdHJldHVybiBIMzIzX0VSUk9SX05PTkU7XG4gMzU5Olx0fVxuIDM2MDpcdFxuIDM2MTpcdHN0YXRpYyBpbnQgZGVjb2RlX2VudW0oc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuIDM2MjpcdCAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmFzZSwgaW50IGxldmVsKVxuIDM2MzpcdHtcbiAzNjQ6XHRcdFBSSU5UKFwmIzM0OyUqcyVzXFxuXCYjMzQ7LCBsZXZlbCAqIFRBQl9TSVpFLCBcJiMzNDsgXCYjMzQ7LCBmLVx1MDAzZW5hbWUpO1xuIDM2NTpcdFxuIDM2NjpcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDEpKVxuIDM2NzpcdFx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbiAzNjg6XHRcdGlmICgoZi1cdTAwM2VhdHRyIFx1MDAyNiBFWFQpIFx1MDAyNlx1MDAyNiBnZXRfYml0KGJzKSkge1xuIDM2OTpcdFx0XHRJTkNfQklUUyhicywgNyk7XG4gMzcwOlx0XHR9IGVsc2Uge1xuIDM3MTpcdFx0XHRJTkNfQklUUyhicywgZi1cdTAwM2Vzeik7XG4gMzcyOlx0XHR9XG4gMzczOlx0XG4gMzc0Olx0XHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgMCkpXG4gMzc1Olx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuIDM3NjpcdFx0cmV0dXJuIEgzMjNfRVJST1JfTk9ORTtcbiAzNzc6XHR9XG4gMzc4Olx0XG4gMzc5Olx0c3RhdGljIGludCBkZWNvZGVfYml0c3RyKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcbiAzODA6XHQgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmFzZSwgaW50IGxldmVsKVxuIDM4MTpcdHtcbiAzODI6XHRcdHVuc2lnbmVkIGludCBsZW47XG4gMzgzOlx0XG4gMzg0Olx0XHRQUklOVChcJiMzNDslKnMlc1xcblwmIzM0OywgbGV2ZWwgKiBUQUJfU0laRSwgXCYjMzQ7IFwmIzM0OywgZi1cdTAwM2VuYW1lKTtcbiAzODU6XHRcbiAzODY6XHRcdEJZVEVfQUxJR04oYnMpO1xuIDM4NzpcdFx0c3dpdGNoIChmLVx1MDAzZXN6KSB7XG4gMzg4Olx0XHRjYXNlIEZJWEQ6XHRcdC8qIGZpeGVkIGxlbmd0aCBcdTAwM2UgMTYgKi9cbiAzODk6XHRcdFx0bGVuID0gZi1cdTAwM2VsYjtcbiAzOTA6XHRcdFx0YnJlYWs7XG4gMzkxOlx0XHRjYXNlIFdPUkQ6XHRcdC8qIDItYnl0ZSBsZW5ndGggKi9cbiAzOTI6XHRcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDIsIDApKVxuIDM5MzpcdFx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuIDM5NDpcdFx0XHRsZW4gPSAoKmJzLVx1MDAzZWN1ciYjNDM7JiM0MzspIFx1MDAzY1x1MDAzYyA4O1xuIDM5NTpcdFx0XHRsZW4gJiM0Mzs9ICgqYnMtXHUwMDNlY3VyJiM0MzsmIzQzOykgJiM0MzsgZi1cdTAwM2VsYjtcbiAzOTY6XHRcdFx0YnJlYWs7XG4gMzk3Olx0XHRjYXNlIFNFTUk6XG4gMzk4Olx0XHRcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAyLCAwKSlcbiAzOTk6XHRcdFx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDU6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIwMwoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggaXQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgQml0c3RyZWFtIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBoYXBwZW5pbmcuIEZpcnN0LCBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZXNlIGZvdXIgdGhpbmdzOiBgbmZfaDMyM19lcnJvcl9ib3VuZGFyeWAsIGBnZXRfYml0YCwgYElOQ19CSVRTYCwgYW5kIGBzdHJ1Y3QgYml0c3RyYC4gVGhlc2UgbmFtZXMgc3VnZ2VzdCB0aGF0IHRoZXkmIzM5O3JlIGFsbCByZWxhdGVkIHRvIGhhbmRsaW5nIGJpdHN0cmVhbXMsIGxpa2VseSBpbiB0aGUgY29udGV4dCBvZiBILjMyMyAoTmV0d29yayBGaWxlIFN5c3RlbT8pLgoKSSBrbm93IHRoaXMgaXMgd2hlcmUgdGhlIGludGVyZXN0aW5nIHN0dWZmIGlzLiBMZXQgbWUgYmFjayB1cCBhIGJpdCBhbmQgc2VlIGhvdyB0aGVzZSB0aGluZ3MgYXJlIGRlZmluZWQgYW5kIHVzZWQuIEkmIzM5O2xsIHJlYWQgZWFybGllciBpbiB0aGUgZmlsZSB0byBnZXQgc29tZSBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmUgYW5kIG9wZXJhdGlvbnMsIHdoZXJlIHRoZSBib3VuZGFyaWVzIGFyZSBkcmF3biwgYW5kIGhvdyB0aGUgYml0cyBhcmUgcHJvY2Vzc2VkLiBUaGlzIHNob3VsZCBoZWxwIG1lIHB1dCBhbGwgdGhlIHBpZWNlcyB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDU6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0LypcbiAgIDM6XHQgKiBCRVIgYW5kIFBFUiBkZWNvZGluZyBsaWJyYXJ5IGZvciBILjMyMyBjb25udHJhY2svTkFUIG1vZHVsZS5cbiAgIDQ6XHQgKlxuICAgNTpcdCAqIENvcHlyaWdodCAoYykgMjAwNiBieSBKaW5nIE1pbiBaaGFvIFx1MDAzY3poYW9qaW5nbWluQHVzZXJzLnNvdXJjZWZvcmdlLm5ldFx1MDAzZVxuICAgNjpcdCAqXG4gICA3Olx0ICogU2VlIG5mX2Nvbm50cmFja19oZWxwZXJfaDMyM19hc24xLmggZm9yIGRldGFpbHMuXG4gICA4Olx0ICovXG4gICA5Olx0XG4gIDEwOlx0I2lmZGVmIF9fS0VSTkVMX19cbiAgMTE6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICAxMjpcdCNlbHNlXG4gIDEzOlx0I2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuICAxNDpcdCNlbmRpZlxuICAxNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmhcdTAwM2VcbiAgMTY6XHRcbiAgMTc6XHQvKiBUcmFjZSBGbGFnICovXG4gIDE4Olx0I2lmbmRlZiBIMzIzX1RSQUNFXG4gIDE5Olx0I2RlZmluZSBIMzIzX1RSQUNFIDBcbiAgMjA6XHQjZW5kaWZcbiAgMjE6XHRcbiAgMjI6XHQjaWYgSDMyM19UUkFDRVxuICAyMzpcdCNkZWZpbmUgVEFCX1NJWkUgNFxuICAyNDpcdCNpZmRlZiBfX0tFUk5FTF9fXG4gIDI1Olx0I2RlZmluZSBQUklOVCBwcmludGtcbiAgMjY6XHQjZWxzZVxuICAyNzpcdCNkZWZpbmUgUFJJTlQgcHJpbnRmXG4gIDI4Olx0I2VuZGlmXG4gIDI5Olx0I2RlZmluZSBGTkFNRShuYW1lKSBuYW1lLFxuICAzMDpcdCNlbHNlXG4gIDMxOlx0I2RlZmluZSBQUklOVChmbXQsIGFyZ3MuLi4pXG4gIDMyOlx0I2RlZmluZSBGTkFNRShuYW1lKVxuICAzMzpcdCNlbmRpZlxuICAzNDpcdFxuICAzNTpcdC8qIEFTTi4xIFR5cGVzICovXG4gIDM2Olx0I2RlZmluZSBOVUwgMFxuICAzNzpcdCNkZWZpbmUgQk9PTCAxXG4gIDM4Olx0I2RlZmluZSBPSUQgMlxuICAzOTpcdCNkZWZpbmUgSU5UIDNcbiAgNDA6XHQjZGVmaW5lIEVOVU0gNFxuICA0MTpcdCNkZWZpbmUgQklUU1RSIDVcbiAgNDI6XHQjZGVmaW5lIE5VTVNUUiA2XG4gIDQzOlx0I2RlZmluZSBOVU1ER1QgNlxuICA0NDpcdCNkZWZpbmUgVEJDRFNUUiA2XG4gIDQ1Olx0I2RlZmluZSBPQ1RTVFIgN1xuICA0NjpcdCNkZWZpbmUgUFJUU1RSIDdcbiAgNDc6XHQjZGVmaW5lIElBNVNUUiA3XG4gIDQ4Olx0I2RlZmluZSBHRU5TVFIgN1xuICA0OTpcdCNkZWZpbmUgQk1QU1RSIDhcbiAgNTA6XHQjZGVmaW5lIFNFUSA5XG4gIDUxOlx0I2RlZmluZSBTRVQgOVxuICA1MjpcdCNkZWZpbmUgU0VRT0YgMTBcbiAgNTM6XHQjZGVmaW5lIFNFVE9GIDEwXG4gIDU0Olx0I2RlZmluZSBDSE9JQ0UgMTFcbiAgNTU6XHRcbiAgNTY6XHQvKiBDb25zdHJhaW50IFR5cGVzICovXG4gIDU3Olx0I2RlZmluZSBGSVhEIDBcbiAgNTg6XHQvKiAjZGVmaW5lIEJJVFMgMS04ICovXG4gIDU5Olx0I2RlZmluZSBCWVRFIDlcbiAgNjA6XHQjZGVmaW5lIFdPUkQgMTBcbiAgNjE6XHQjZGVmaW5lIENPTlMgMTFcbiAgNjI6XHQjZGVmaW5lIFNFTUkgMTJcbiAgNjM6XHQjZGVmaW5lIFVOQ08gMTNcbiAgNjQ6XHRcbiAgNjU6XHQvKiBBU04uMSBUeXBlIEF0dHJpYnV0ZXMgKi9cbiAgNjY6XHQjZGVmaW5lIFNLSVAgMFxuICA2NzpcdCNkZWZpbmUgU1RPUCAxXG4gIDY4Olx0I2RlZmluZSBERUNPREUgMlxuICA2OTpcdCNkZWZpbmUgRVhUIDRcbiAgNzA6XHQjZGVmaW5lIE9QRU4gOFxuICA3MTpcdCNkZWZpbmUgT1BUIDE2XG4gIDcyOlx0XG4gIDczOlx0XG4gIDc0Olx0LyogQVNOLjEgRmllbGQgU3RydWN0dXJlICovXG4gIDc1Olx0dHlwZWRlZiBzdHJ1Y3QgZmllbGRfdCB7XG4gIDc2Olx0I2lmIEgzMjNfVFJBQ0VcbiAgNzc6XHRcdGNoYXIgKm5hbWU7XG4gIDc4Olx0I2VuZGlmXG4gIDc5Olx0XHR1bnNpZ25lZCBjaGFyIHR5cGU7XG4gIDgwOlx0XHR1bnNpZ25lZCBjaGFyIHN6O1xuICA4MTpcdFx0dW5zaWduZWQgY2hhciBsYjtcbiAgODI6XHRcdHVuc2lnbmVkIGNoYXIgdWI7XG4gIDgzOlx0XHR1bnNpZ25lZCBzaG9ydCBhdHRyO1xuICA4NDpcdFx0dW5zaWduZWQgc2hvcnQgb2Zmc2V0O1xuICA4NTpcdFx0Y29uc3Qgc3RydWN0IGZpZWxkX3QgKmZpZWxkcztcbiAgODY6XHR9IGZpZWxkX3Q7XG4gIDg3Olx0XG4gIDg4Olx0LyogQml0IFN0cmVhbSAqL1xuICA4OTpcdHN0cnVjdCBiaXRzdHIge1xuICA5MDpcdFx0dW5zaWduZWQgY2hhciAqYnVmO1xuICA5MTpcdFx0dW5zaWduZWQgY2hhciAqYmVnO1xuICA5MjpcdFx0dW5zaWduZWQgY2hhciAqZW5kO1xuICA5MzpcdFx0dW5zaWduZWQgY2hhciAqY3VyO1xuICA5NDpcdFx0dW5zaWduZWQgaW50IGJpdDtcbiAgOTU6XHR9O1xuICA5NjpcdFxuICA5NzpcdC8qIFRvb2wgRnVuY3Rpb25zICovXG4gIDk4Olx0I2RlZmluZSBJTkNfQklUKGJzKSBpZigoJiM0MzsmIzQzOyhicyktXHUwMDNlYml0KVx1MDAzZTcpeyhicyktXHUwMDNlY3VyJiM0MzsmIzQzOzsoYnMpLVx1MDAzZWJpdD0wO31cbiAgOTk6XHQjZGVmaW5lIElOQ19CSVRTKGJzLGIpIGlmKCgoYnMpLVx1MDAzZWJpdCYjNDM7PShiKSlcdTAwM2U3KXsoYnMpLVx1MDAzZWN1ciYjNDM7PShicyktXHUwMDNlYml0XHUwMDNlXHUwMDNlMzsoYnMpLVx1MDAzZWJpdFx1MDAyNj03O31cbiAxMDA6XHQjZGVmaW5lIEJZVEVfQUxJR04oYnMpIGlmKChicyktXHUwMDNlYml0KXsoYnMpLVx1MDAzZWN1ciYjNDM7JiM0Mzs7KGJzKS1cdTAwM2ViaXQ9MDt9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA1OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3MjAKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYCBmb3IgQm91bmRhcnkgQ29uZGl0aW9ucyoqCgpPa2F5LCBJIG5lZWQgdG8gemVybyBpbiBvbiBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IG9yIG9wdGltaXphdGlvbiBvcHBvcnR1bml0eSB3aXRoaW4gdGhlIEguMzIzIGNvbm5lY3Rpb24gdHJhY2tpbmcgY29kZS4gTXkgaHVuY2ggaXMgdGhhdCBlcnJvcnMgb3IgZWRnZSBjYXNlcyBpbiBob3cgdGhlIEFTTi4xIGRhdGEgaXMgcGFyc2VkIG1pZ2h0IGJlIGEgZ29vZCBwbGFjZSB0byBzdGFydC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBib3VuZGFyeSBjb25kaXRpb25zIHdoZXJlIHRoZSBkYXRhIGNvdWxkIGJlIG1hbGZvcm1lZCBvciBtYW5pcHVsYXRlZC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNgIGZpbGUuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gbGluZXMgMTAxIHRocm91Z2ggMjAwLCBhcyB0aGlzIHNob3VsZCBjb250YWluIHRoZSByZWxldmFudCBmdW5jdGlvbnMgSSYjMzk7bSBpbnRlcmVzdGVkIGluLiBJIGtub3cgdGhhdCB0aGUgYG5mX2gzMjNfZXJyb3JfYm91bmRhcnlgIGZ1bmN0aW9uIHNob3VsZCBoYW5kbGUgc29tZSBvZiB0aGVzZSBib3VuZGFyeSBpc3N1ZXMsIHNvIEkmIzM5O2xsIHNlZSBob3cgcm9idXN0IGl0IGlzLiBXaGlsZSBJJiMzOTttIHRoZXJlLCBJIHNob3VsZCBhbHNvIGNoZWNrIG91dCBgZ2V0X2JpdGAsIGFzIHRoaXMgbG93LWxldmVsIGJpdCBtYW5pcHVsYXRpb24gaXMgb2Z0ZW4gYSBzb3VyY2Ugb2Ygc3VidGxlIGJ1Z3Mgd2hlbiBkZWFsaW5nIHdpdGggQVNOLjEgZGF0YS4gTXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBoYW5kbGUgaW52YWxpZCBvciB1bmV4cGVjdGVkIGRhdGEgYW5kIHNlZSBpZiBJIGNhbiBmaW5kIGFuIGV4cGxvaXRhYmxlIGZsYXcsIG9yIGlmIHRoZXJlIGlzIHJvb20gZm9yIGltcHJvdmVtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDE6XHRzdGF0aWMgdW5zaWduZWQgaW50IGdldF9sZW4oc3RydWN0IGJpdHN0ciAqYnMpO1xuIDEwMjpcdHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2JpdChzdHJ1Y3QgYml0c3RyICpicyk7XG4gMTAzOlx0c3RhdGljIHVuc2lnbmVkIGludCBnZXRfYml0cyhzdHJ1Y3QgYml0c3RyICpicywgdW5zaWduZWQgaW50IGIpO1xuIDEwNDpcdHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2JpdG1hcChzdHJ1Y3QgYml0c3RyICpicywgdW5zaWduZWQgaW50IGIpO1xuIDEwNTpcdHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3VpbnQoc3RydWN0IGJpdHN0ciAqYnMsIGludCBiKTtcbiAxMDY6XHRcbiAxMDc6XHQvKiBEZWNvZGVyIEZ1bmN0aW9ucyAqL1xuIDEwODpcdHN0YXRpYyBpbnQgZGVjb2RlX251bChzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XG4gMTA5Olx0c3RhdGljIGludCBkZWNvZGVfYm9vbChzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XG4gMTEwOlx0c3RhdGljIGludCBkZWNvZGVfb2lkKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcbiAxMTE6XHRzdGF0aWMgaW50IGRlY29kZV9pbnQoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLCBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpO1xuIDExMjpcdHN0YXRpYyBpbnQgZGVjb2RlX2VudW0oc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLCBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpO1xuIDExMzpcdHN0YXRpYyBpbnQgZGVjb2RlX2JpdHN0cihzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XG4gMTE0Olx0c3RhdGljIGludCBkZWNvZGVfbnVtc3RyKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcbiAxMTU6XHRzdGF0aWMgaW50IGRlY29kZV9vY3RzdHIoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLCBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpO1xuIDExNjpcdHN0YXRpYyBpbnQgZGVjb2RlX2JtcHN0cihzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XG4gMTE3Olx0c3RhdGljIGludCBkZWNvZGVfc2VxKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcbiAxMTg6XHRzdGF0aWMgaW50IGRlY29kZV9zZXFvZihzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XG4gMTE5Olx0c3RhdGljIGludCBkZWNvZGVfY2hvaWNlKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcbiAxMjA6XHRcbiAxMjE6XHQvKiBEZWNvZGVyIEZ1bmN0aW9ucyBWZWN0b3IgKi9cbiAxMjI6XHR0eXBlZGVmIGludCAoKmRlY29kZXJfdCkoc3RydWN0IGJpdHN0ciAqLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqLCBjaGFyICosIGludCk7XG4gMTIzOlx0c3RhdGljIGNvbnN0IGRlY29kZXJfdCBEZWNvZGVyc1tdID0ge1xuIDEyNDpcdFx0ZGVjb2RlX251bCxcbiAxMjU6XHRcdGRlY29kZV9ib29sLFxuIDEyNjpcdFx0ZGVjb2RlX29pZCxcbiAxMjc6XHRcdGRlY29kZV9pbnQsXG4gMTI4Olx0XHRkZWNvZGVfZW51bSxcbiAxMjk6XHRcdGRlY29kZV9iaXRzdHIsXG4gMTMwOlx0XHRkZWNvZGVfbnVtc3RyLFxuIDEzMTpcdFx0ZGVjb2RlX29jdHN0cixcbiAxMzI6XHRcdGRlY29kZV9ibXBzdHIsXG4gMTMzOlx0XHRkZWNvZGVfc2VxLFxuIDEzNDpcdFx0ZGVjb2RlX3NlcW9mLFxuIDEzNTpcdFx0ZGVjb2RlX2Nob2ljZSxcbiAxMzY6XHR9O1xuIDEzNzpcdFxuIDEzODpcdC8qXG4gMTM5Olx0ICogSC4zMjMgVHlwZXNcbiAxNDA6XHQgKi9cbiAxNDE6XHQjaW5jbHVkZSBcJiMzNDtuZl9jb25udHJhY2tfaDMyM190eXBlcy5jXCYjMzQ7XG4gMTQyOlx0XG4gMTQzOlx0LypcbiAxNDQ6XHQgKiBGdW5jdGlvbnNcbiAxNDU6XHQgKi9cbiAxNDY6XHRcbiAxNDc6XHQvKiBBc3N1bWUgYnMgaXMgYWxpZ25lZCBcdTAwMjZcdTAwMjYgdiBcdTAwM2MgMTYzODQgKi9cbiAxNDg6XHRzdGF0aWMgdW5zaWduZWQgaW50IGdldF9sZW4oc3RydWN0IGJpdHN0ciAqYnMpXG4gMTQ5Olx0e1xuIDE1MDpcdFx0dW5zaWduZWQgaW50IHY7XG4gMTUxOlx0XG4gMTUyOlx0XHR2ID0gKmJzLVx1MDAzZWN1ciYjNDM7JiM0Mzs7XG4gMTUzOlx0XG4gMTU0Olx0XHRpZiAodiBcdTAwMjYgMHg4MCkge1xuIDE1NTpcdFx0XHR2IFx1MDAyNj0gMHgzZjtcbiAxNTY6XHRcdFx0diBcdTAwM2NcdTAwM2M9IDg7XG4gMTU3Olx0XHRcdHYgJiM0Mzs9ICpicy1cdTAwM2VjdXImIzQzOyYjNDM7O1xuIDE1ODpcdFx0fVxuIDE1OTpcdFxuIDE2MDpcdFx0cmV0dXJuIHY7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA1OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxMzgKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucy4uLgoKKipEZWx2aW5nIGludG8gdGhlIEguMzIzIEFTTi4xIENvbm50cmFjayBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGhhbmRsaW5nIG9mIEguMzIzIHRyYWZmaWMgd2l0aGluIHRoZSBjb25udHJhY2sgc3lzdGVtLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZm9jdXNpbmcgb24gYGdldF9iaXRgIGFuZCBgbmZfaDMyM19lcnJvcl9ib3VuZGFyeWAuCgpgZ2V0X2JpdGAg4oCTIGl0JiMzOTtzIGEgYmFzaWMgYml0LWZpZWxkIHJldHJpZXZhbCBmdW5jdGlvbiwgbm8gZG91YnQuIFByb2JhYmx5IHVzZWQgdG8gcGFyc2UgZW5jb2RlZCBBU04uMSBzdHJ1Y3R1cmVzIGFuZCBleHRyYWN0IGluZGl2aWR1YWwgZmxhZ3Mgb3IgdmFsdWVzIHdpdGhpbiBhIGxhcmdlciBmaWVsZC4gSeKAmWxsIGJldCBpdCYjMzk7cyBpbXBsZW1lbnRlZCBlZmZpY2llbnRseSwgcGVyaGFwcyB3aXRoIHNvbWUgcHJlLWNhbGN1bGF0ZWQgbG9va3VwIHRhYmxlcyBvciBiaXQtbWFza2luZyBvcHRpbWl6YXRpb24gdGVjaG5pcXVlcy4gSSBzaG91bGQgcmV2aWV3IGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzLgoKVGhlbiB0aGVyZeKAmXMgYG5mX2gzMjNfZXJyb3JfYm91bmRhcnlgLiBUaGlzIGxvb2tzIGxpa2UgdGhlIGNydWNpYWwgZnVuY3Rpb24gZm9yIG1hbmFnaW5nIGVycm9yIGNvbmRpdGlvbnMuIEdpdmVuIHRoZSBpbmhlcmVudCBjb21wbGV4aXR5IGFuZCBzb21ldGltZXMgZmxha3kgbmF0dXJlIG9mIEguMzIzIHNpZ25hbGluZywgZXJyb3IgaGFuZGxpbmcgaXMgcGFyYW1vdW50LiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGRldGVjdGluZyBhbmQgZ3JhY2VmdWxseSBoYW5kbGluZyBtYWxmb3JtZWQgb3IgaW52YWxpZCBBU04uMSBkYXRhLCBwb3RlbnRpYWxseSB0cmlnZ2VyZWQgYnkgbWFsaWNpb3VzIHBhY2tldHMgb3IgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24gYnVncy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHN0cmF0ZWd5IGZvciBwcmV2ZW50aW5nIGRlbmlhbC1vZi1zZXJ2aWNlIGF0dGFja3MgYnkgY2FyZWZ1bGx5IGJvdW5kaW5nIHJlc291cmNlIGNvbnN1bXB0aW9uIGluIHRoZSBmYWNlIG9mIGJhZCBpbnB1dC4gSSB3b25kZXIgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBvdmVyYWxsIGNvbm50cmFjayBmcmFtZXdvcmsg4oCTIGRvZXMgaXQgbWFyayB0aGUgY29ubmVjdGlvbiBhcyBpbnZhbGlkLCBsb2cgdGhlIGV2ZW50LCBvciBwb3NzaWJseSB0YWtlIG1vcmUgYWdncmVzc2l2ZSBhY3Rpb24gbGlrZSBkcm9wcGluZyB0aGUgb2ZmZW5kaW5nIHBhY2tldCBpbW1lZGlhdGVseT8gSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBlc3BlY2lhbGx5IGJ1ZmZlciBvdmVyZmxvd3Mgb3IgaW50ZWdlciBvdmVyZmxvd3MsIHRvIG1ha2Ugc3VyZSB0aGlzIGNvZGUgaXMgcm9idXN0IGFnYWluc3QgcG90ZW50aWFsIGF0dGFja3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA1OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE2MTpcdH1cbiAxNjI6XHRcbiAxNjM6XHRzdGF0aWMgaW50IG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoc3RydWN0IGJpdHN0ciAqYnMsIHNpemVfdCBieXRlcywgc2l6ZV90IGJpdHMpXG4gMTY0Olx0e1xuIDE2NTpcdFx0Yml0cyAmIzQzOz0gYnMtXHUwMDNlYml0O1xuIDE2NjpcdFx0Ynl0ZXMgJiM0Mzs9IGJpdHMgLyBCSVRTX1BFUl9CWVRFO1xuIDE2NzpcdFx0aWYgKGJpdHMgJSBCSVRTX1BFUl9CWVRFIFx1MDAzZSAwKVxuIDE2ODpcdFx0XHRieXRlcyYjNDM7JiM0Mzs7XG4gMTY5Olx0XG4gMTcwOlx0XHRpZiAoYnMtXHUwMDNlY3VyICYjNDM7IGJ5dGVzIFx1MDAzZSBicy1cdTAwM2VlbmQpXG4gMTcxOlx0XHRcdHJldHVybiAxO1xuIDE3MjpcdFxuIDE3MzpcdFx0cmV0dXJuIDA7XG4gMTc0Olx0fVxuIDE3NTpcdFxuIDE3NjpcdHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2JpdChzdHJ1Y3QgYml0c3RyICpicylcbiAxNzc6XHR7XG4gMTc4Olx0XHR1bnNpZ25lZCBpbnQgYiA9ICgqYnMtXHUwMDNlY3VyKSBcdTAwMjYgKDB4ODAgXHUwMDNlXHUwMDNlIGJzLVx1MDAzZWJpdCk7XG4gMTc5Olx0XG4gMTgwOlx0XHRJTkNfQklUKGJzKTtcbiAxODE6XHRcbiAxODI6XHRcdHJldHVybiBiO1xuIDE4MzpcdH1cbiAxODQ6XHRcbiAxODU6XHQvKiBBc3N1bWUgYiBcdTAwM2M9IDggKi9cbiAxODY6XHRzdGF0aWMgdW5zaWduZWQgaW50IGdldF9iaXRzKHN0cnVjdCBiaXRzdHIgKmJzLCB1bnNpZ25lZCBpbnQgYilcbiAxODc6XHR7XG4gMTg4Olx0XHR1bnNpZ25lZCBpbnQgdiwgbDtcbiAxODk6XHRcbiAxOTA6XHRcdHYgPSAoKmJzLVx1MDAzZWN1cikgXHUwMDI2ICgweGZmVSBcdTAwM2VcdTAwM2UgYnMtXHUwMDNlYml0KTtcbiAxOTE6XHRcdGwgPSBiICYjNDM7IGJzLVx1MDAzZWJpdDtcbiAxOTI6XHRcbiAxOTM6XHRcdGlmIChsIFx1MDAzYyA4KSB7XG4gMTk0Olx0XHRcdHYgXHUwMDNlXHUwMDNlPSA4IC0gbDtcbiAxOTU6XHRcdFx0YnMtXHUwMDNlYml0ID0gbDtcbiAxOTY6XHRcdH0gZWxzZSBpZiAobCA9PSA4KSB7XG4gMTk3Olx0XHRcdGJzLVx1MDAzZWN1ciYjNDM7JiM0Mzs7XG4gMTk4Olx0XHRcdGJzLVx1MDAzZWJpdCA9IDA7XG4gMTk5Olx0XHR9IGVsc2Uge1x0XHQvKiBsIFx1MDAzZSA4ICovXG4gMjAwOlx0XG4gMjAxOlx0XHRcdHYgXHUwMDNjXHUwMDNjPSA4O1xuIDIwMjpcdFx0XHR2ICYjNDM7PSAqKCYjNDM7JiM0Mzticy1cdTAwM2VjdXIpO1xuIDIwMzpcdFx0XHR2IFx1MDAzZVx1MDAzZT0gMTYgLSBsO1xuIDIwNDpcdFx0XHRicy1cdTAwM2ViaXQgPSBsIC0gODtcbiAyMDU6XHRcdH1cbiAyMDY6XHRcbiAyMDc6XHRcdHJldHVybiB2O1xuIDIwODpcdH1cbiAyMDk6XHRcbiAyMTA6XHQvKiBBc3N1bWUgYiBcdTAwM2M9IDMyICovXG4gMjExOlx0c3RhdGljIHVuc2lnbmVkIGludCBnZXRfYml0bWFwKHN0cnVjdCBiaXRzdHIgKmJzLCB1bnNpZ25lZCBpbnQgYilcbiAyMTI6XHR7XG4gMjEzOlx0XHR1bnNpZ25lZCBpbnQgdiwgbCwgc2hpZnQsIGJ5dGVzO1xuIDIxNDpcdFxuIDIxNTpcdFx0aWYgKCFiKVxuIDIxNjpcdFx0XHRyZXR1cm4gMDtcbiAyMTc6XHRcbiAyMTg6XHRcdGwgPSBicy1cdTAwM2ViaXQgJiM0MzsgYjtcbiAyMTk6XHRcbiAyMjA6XHRcdGlmIChsIFx1MDAzYyA4KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA1OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNTQKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiA1NzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgZGVjb2RlX2VudW1gIEZ1bmN0aW9uIGFuZCBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0aWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgYGRlY29kZV9lbnVtYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2UgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIGFueSBpc3N1ZXMuICBJdCBhcHBlYXJzIHRvIGJlIHBhcnQgb2YgdGhlIG5ldGZpbHRlciBILjMyMyBjb25udHJhY2sgaGVscGVyLCBkZWFsaW5nIHdpdGggQVNOLjEgZGVjb2RpbmcuIFRoZSBjb2RlIHNuaXBwZXQgc2hvd3MgYSBjcnVjaWFsIGltcHJvdmVtZW50LgoKUHJldmlvdXNseSwgaWYgYGYtJmd0O2F0dHIgJmFtcDsgRVhUYCB3YXMgdHJ1ZSwgdGhlIGZ1bmN0aW9uIHdvdWxkIGNhbGwgYGdldF9iaXQoYnMpYC4gRGl2aW5nIGludG8gYGdldF9iaXQoYnMpYCwgaXQgcGVyZm9ybXMgYSBiaXR3aXNlIG9wZXJhdGlvbiBvbiBgYnMtJmd0O2N1cmAgKHdoaWNoLCBiYXNlZCBvbiB0aGUgY29udGV4dCwgbGlrZWx5IHBvaW50cyB0byBhIGJ5dGUgd2l0aGluIHRoZSBwYWNrZXQgZGF0YSBidWZmZXIpIGFuZCBhZHZhbmNlcyB0aGUgYml0IHBvaW50ZXIuIFRoZSBjcml0aWNhbCB2dWxuZXJhYmlsaXR5IHN0ZW1tZWQgZnJvbSB0aGUgcG9zc2liaWxpdHkgdGhhdCBpZiBgYnMtJmd0O2N1cmAgd2FzIGVxdWFsIHRvIGBicy0mZ3Q7ZW5kYCwgdGhlbiBhIGRpcmVjdCBhY2Nlc3MgdG8gYCpicy0mZ3Q7Y3VyYCB3b3VsZCBjb25zdGl0dXRlIGFuIG91dC1vZi1ib3VuZHMgcmVhZC4gVGhpcyBtZWFucyB0aGUgY29kZSB3YXMgYXR0ZW1wdGluZyB0byByZWFkIGJleW9uZCB0aGUgYWxsb2NhdGVkIGJ1ZmZlciwgcHVsbGluZyBkYXRhIGZyb20gYW4gYXJlYSBpdCBzaG91bGRuJiMzOTt0IGFjY2Vzcy4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgb3V0LW9mLWJvdW5kcyByZWFkLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGEgY3Jhc2ggb3IsIHdvcnNlLCBpbmZvcm1hdGlvbiBsZWFrYWdlLgoKTm93LCB3aXRoIHRoZSBhZGRpdGlvbiBvZiBgaWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDEpKSByZXR1cm4gSDMyM19FUlJPUl9CT1VORDtgLCB0aGUgY29kZSBzZWVtcyB0byBjaGVjayBpZiBhdCBsZWFzdCBvbmUgYml0IGlzIHJlbWFpbmluZyBpbiB0aGUgYnVmZmVyIGJlZm9yZSBhdHRlbXB0aW5nIHRoZSByZWFkLiBUaGlzIGlzIGEgZ29vZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgbWVhc3VyZS4gIEl0IGFwcGVhcnMgdG8gcHJldmVudCB0aGUgb3V0LW9mLWJvdW5kcyByZWFkIHdoZW4gdGhlcmUgaXNuJiMzOTt0IGVub3VnaCBkYXRhLgoKTXkgbmV4dCBsaW5lIG9mIHRoaW5raW5nIGlzLCBldmVuIHRob3VnaCBpdCBmaXhlZCB0aGUgT09CLCB3aGF0IGFib3V0IHRoZSBuYXR1cmUgb2YgdGhlIGRhdGEgaW52b2x2ZWQ/ICBUaGVyZSYjMzk7cyBubyBpbmRpY2F0aW9uIGhlcmUgdGhhdCBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYWxsb2NhdGVkIG9yIHJlYWQuIFRoZSBidWZmZXIgYGJzYCBpcyB0aWVkIHRvIHRoZSBwYWNrZXQgcGF5bG9hZCBkYXRhIGZyb20gdGhlIHNrYiwgYmVpbmcgcGFyc2VkIGJ5IG5ldGZpbHRlci4gVGhpcyBtZWFucyB0aGUgbWVtb3J5IGlzICpleHBlY3RlZCogdG8gYmUgcG9wdWxhdGVkLCBzbyB0aGF0IHJ1bGVzIG91dCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gQnV0IHRoaXMgbWVhbnMgdGhlIGRhdGEgYmVpbmcgcmVhZCBoZXJlICppcyogdGhlIHBhY2tldCBkYXRhLCB3aGljaCBuZWVkcyB0byBiZSBwYXJzZWQgc2VjdXJlbHkgdG8gcHJldmVudCBhIG1pcy1pbnRlcnByZXRhdGlvbiBvZiB0aGUgcGFja2V0IChlLmcuIGludGVnZXIgb3ZlcmZsb3csIGV0YykuCgpUaGUgY29ycmVjdGlvbiBmb2N1c2VzIG9uIHByZXZlbnRpbmcgdGhlIE9PQiBpc3N1ZSwgc3BlY2lmaWNhbGx5IGJ5IGNoZWNraW5nIHRoZSBidWZmZXIgYm91bmRhcnkuIEhvd2V2ZXIsIGEgZnVsbCBzZWN1cml0eSBhc3Nlc3NtZW50IG5lY2Vzc2l0YXRlcyBleGFtaW5pbmcgb3RoZXIgYXNwZWN0cy4gSSBuZWVkIHRvIGxvb2sgYXQgaG93IGBkZWNvZGVfZW51bWAgaXMgY2FsbGVkIHdpdGhpbiB0aGUgbGFyZ2VyIGNvbnRleHQgYW5kIGFuYWx5emUgdGhlIHN0cnVjdHVyZSBvZiB0aGUgb3RoZXIgYGRlY29kZV8qYCBmdW5jdGlvbnMgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYC4gQXJlIHRoZXJlIHNpbWlsYXIgcGF0dGVybnM/IEFyZSB0aGVyZSBvdGhlciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gYnVmZmVyIHNpemVzLCBkYXRhIGludGVycHJldGF0aW9uLCBvciBlcnJvciBoYW5kbGluZz8gQSBjb21wcmVoZW5zaXZlIHJldmlldyBpcyBuZWVkZWQgdG8gY29uZmlybSB0aGUgb3ZlcmFsbCByb2J1c3RuZXNzIG9mIHRoZSBBU04uMSBkZWNvZGluZyB3aXRoaW4gdGhpcyBoZWxwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA1OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMyMDpcdFx0Y2FzZSBCWVRFOlx0XHQvKiBSYW5nZSA9PSAyNTYgKi9cbiAzMjE6XHRcdFx0QllURV9BTElHTihicyk7XG4gMzIyOlx0XHRcdGJzLVx1MDAzZWN1ciYjNDM7JiM0Mzs7XG4gMzIzOlx0XHRcdGJyZWFrO1xuIDMyNDpcdFx0Y2FzZSBXT1JEOlx0XHQvKiAyNTcgXHUwMDNjPSBSYW5nZSBcdTAwM2M9IDY0SyAqL1xuIDMyNTpcdFx0XHRCWVRFX0FMSUdOKGJzKTtcbiAzMjY6XHRcdFx0YnMtXHUwMDNlY3VyICYjNDM7PSAyO1xuIDMyNzpcdFx0XHRicmVhaztcbiAzMjg6XHRcdGNhc2UgQ09OUzpcdFx0LyogNjRLIFx1MDAzYyBSYW5nZSBcdTAwM2MgNEcgKi9cbiAzMjk6XHRcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDIpKVxuIDMzMDpcdFx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuIDMzMTpcdFx0XHRsZW4gPSBnZXRfYml0cyhicywgMikgJiM0MzsgMTtcbiAzMzI6XHRcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIGxlbiwgMCkpXG4gMzMzOlx0XHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4gMzM0Olx0XHRcdEJZVEVfQUxJR04oYnMpO1xuIDMzNTpcdFx0XHRpZiAoYmFzZSBcdTAwMjZcdTAwMjYgKGYtXHUwMDNlYXR0ciBcdTAwMjYgREVDT0RFKSkge1x0LyogdGltZVRvTGl2ZSAqL1xuIDMzNjpcdFx0XHRcdHVuc2lnbmVkIGludCB2ID0gZ2V0X3VpbnQoYnMsIGxlbikgJiM0MzsgZi1cdTAwM2VsYjtcbiAzMzc6XHRcdFx0XHRQUklOVChcJiMzNDsgPSAldVwmIzM0Oywgdik7XG4gMzM4Olx0XHRcdFx0KigodW5zaWduZWQgaW50ICopKGJhc2UgJiM0MzsgZi1cdTAwM2VvZmZzZXQpKSA9IHY7XG4gMzM5Olx0XHRcdH1cbiAzNDA6XHRcdFx0YnMtXHUwMDNlY3VyICYjNDM7PSBsZW47XG4gMzQxOlx0XHRcdGJyZWFrO1xuIDM0MjpcdFx0Y2FzZSBVTkNPOlxuIDM0MzpcdFx0XHRCWVRFX0FMSUdOKGJzKTtcbiAzNDQ6XHRcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDIsIDApKVxuIDM0NTpcdFx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuIDM0NjpcdFx0XHRsZW4gPSBnZXRfbGVuKGJzKTtcbiAzNDc6XHRcdFx0YnMtXHUwMDNlY3VyICYjNDM7PSBsZW47XG4gMzQ4Olx0XHRcdGJyZWFrO1xuIDM0OTpcdFx0ZGVmYXVsdDpcdFx0LyogMiBcdTAwM2M9IFJhbmdlIFx1MDAzYz0gMjU1ICovXG4gMzUwOlx0XHRcdElOQ19CSVRTKGJzLCBmLVx1MDAzZXN6KTtcbiAzNTE6XHRcdFx0YnJlYWs7XG4gMzUyOlx0XHR9XG4gMzUzOlx0XG4gMzU0Olx0XHRQUklOVChcJiMzNDtcXG5cJiMzNDspO1xuIDM1NTpcdFxuIDM1NjpcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDApKVxuIDM1NzpcdFx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbiAzNTg6XHRcdHJldHVybiBIMzIzX0VSUk9SX05PTkU7XG4gMzU5Olx0fVxuIDM2MDpcdFxuIDM2MTpcdHN0YXRpYyBpbnQgZGVjb2RlX2VudW0oc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuIDM2MjpcdCAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmFzZSwgaW50IGxldmVsKVxuIDM2MzpcdHtcbiAzNjQ6XHRcdFBSSU5UKFwmIzM0OyUqcyVzXFxuXCYjMzQ7LCBsZXZlbCAqIFRBQl9TSVpFLCBcJiMzNDsgXCYjMzQ7LCBmLVx1MDAzZW5hbWUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjgxCgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZSwgdXNpbmcgYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmU6CgoqKkRlYnVnZ2luZyB0aGUgYG5mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AgTW9kdWxlKioKCkFscmlnaHQsIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYG5mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AgbW9kdWxlIGFnYWluLiBUaW1lIHRvIGdldCBhIGdyaXAgb24gd2hhdCYjMzk7cyBnb2luZyBvbi4gRmlyc3QsIGJlZm9yZSBJIHN0YXJ0IHBva2luZyBhcm91bmQgd2l0aCBhIGRlYnVnZ2VyLCBJIG5lZWQgc29tZSBjb250ZXh0LiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBtb3N0IGVmZmljaWVudCB0aGluZyB0byBkbyByaWdodCBub3cgaXMgcHJvYmFibHkgdG8gc3RhcnQgd2l0aCB0aGUgY29tbWl0IGhpc3RvcnkuIEkmIzM5O2xsIG9wZW4gdXAgYGdpdCBsb2dgLCBmb2N1c2luZyBvbiB0aGlzIHNwZWNpZmljIGZpbGUsIG9yIGF0IGxlYXN0IGxvb2tpbmcgYXQgYW55IGNvbW1pdCBtZXNzYWdlcyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IGZvciB0aGlzIGFyZWEgb2YgdGhlIGNvZGUuCgpJIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgcmVjZW50IGNoYW5nZXMsIGJ1ZyBmaXhlcywgb3IgZXZlbiBqdXN0IGNvbW1lbnRzIHRoYXQgbWlnaHQgZ2l2ZSBtZSBhIGNsdWUgYWJvdXQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgb3Igd2hhdCBzb21lb25lIGVsc2Ugd2FzIHRoaW5raW5nIHdoZW4gdGhleSBsYXN0IHRvdWNoZWQgdGhpcy4gTWF5YmUgc29tZW9uZSBlbHNlIHdvcmtlZCBvbiBzb21lIHNpbWlsYXIgY29kZSBhbmQgSSBjYW4gZ2V0IGEgY2x1ZSB0aGVyZS4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBJIGFtIG5vdCBmYW1pbGlhciB3aXRoIHRoaXMgY29kZSBhbmQgbmVlZCB0byBrZWVwIGFuIG9wZW4gbWluZCBmb3IgYW55IHBvc3NpYmxlIGNhdXNlcy4KCklmIHRoYXQmIzM5O3Mgbm90IGZydWl0ZnVsLCBJIG1pZ2h0IGJyYW5jaCBvdXQgYW5kIGxvb2sgYXQgc2ltaWxhciBjb21taXRzIGluIHRoZSBzdXJyb3VuZGluZyBmaWxlcyBvciBldmVuIHdpdGhpbiB0aGUgY29ubnRyYWNrIGNvcmUgaXRzZWxmLiBTb21ldGltZXMsIHRoZSBmaXggb3IgdGhlIGludHJvZHVjdGlvbiBvZiBhIG5ldyBpc3N1ZSBtaWdodCBiZSB0YW5nZW50aWFsbHkgcmVsYXRlZC4gSSBhbSBjb25maWRlbnQgSSB3aWxsIGZpbmQgc29tZXRoaW5nIHRvIGdldCBtZSBnb2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDU6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfaDMyM19lcnJvcl9ib3VuZGFyeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTE0OD1zdGF0aWMgdW5zaWduZWQgaW50IGdldF9sZW4oc3RydWN0IGJpdHN0ciAqYnMpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTYyLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTYzOnN0YXRpYyBpbnQgbmZfaDMyM19lcnJvcl9ib3VuZGFyeShzdHJ1Y3QgYml0c3RyICpicywgc2l6ZV90IGJ5dGVzLCBzaXplX3QgYml0cylcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTE2NC17XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9MjgyPXN0YXRpYyBpbnQgZGVjb2RlX2Jvb2woc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTI4Ny1cdElOQ19CSVQoYnMpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6Mjg4Olx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDApKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMjg5LVx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz0yOTM9c3RhdGljIGludCBkZWNvZGVfb2lkKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0zMDAtXHRCWVRFX0FMSUdOKGJzKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjMwMTpcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAxLCAwKSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTMwMi1cdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMzA1LVx0YnMtXHUwMDNlY3VyICYjNDM7PSBsZW47XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzozMDY6XHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgMCkpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0zMDctXHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTMxMj1zdGF0aWMgaW50IGRlY29kZV9pbnQoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTMyOC1cdGNhc2UgQ09OUzpcdFx0LyogNjRLIFx1MDAzYyBSYW5nZSBcdTAwM2MgNEcgKi9cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjMyOTpcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDIpKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMzMwLVx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMzMxLVx0XHRsZW4gPSBnZXRfYml0cyhicywgMikgJiM0MzsgMTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjMzMjpcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIGxlbiwgMCkpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0zMzMtXHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMzQzLVx0XHRCWVRFX0FMSUdOKGJzKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjM0NDpcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDIsIDApKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMzQ1LVx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTM1NS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjM1NjpcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAwKSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTM1Ny1cdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9MzYxPXN0YXRpYyBpbnQgZGVjb2RlX2VudW0oc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTM2NS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjM2NjpcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAxKSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTM2Ny1cdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMzczLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6Mzc0Olx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDApKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMzc1LVx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz0zNzk9c3RhdGljIGludCBkZWNvZGVfYml0c3RyKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0zOTEtXHRjYXNlIFdPUkQ6XHRcdC8qIDItYnl0ZSBsZW5ndGggKi9cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjM5MjpcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDIsIDApKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMzkzLVx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTM5Ny1cdGNhc2UgU0VNSTpcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjM5ODpcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDIsIDApKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMzk5LVx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTQwOS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjQxMDpcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAwKSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTQxMS1cdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9NDE1PXN0YXRpYyBpbnQgZGVjb2RlX251bXN0cihzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNDIyLVx0LyogMiBcdTAwM2M9IFJhbmdlIFx1MDAzYz0gMjU1ICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo0MjM6XHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgZi1cdTAwM2VzeikpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy00MjQtXHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTQyOS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjQzMDpcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAwKSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTQzMS1cdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9NDM1PXN0YXRpYyBpbnQgZGVjb2RlX29jdHN0cihzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNDU1LVx0XHRCWVRFX0FMSUdOKGJzKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjQ1NjpcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDEsIDApKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNDU3LVx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTQ2MS1cdFx0QllURV9BTElHTihicyk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo0NjI6XHRcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAyLCAwKSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTQ2My1cdFx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy00NjYtXHRkZWZhdWx0Olx0XHQvKiAyIFx1MDAzYz0gUmFuZ2UgXHUwMDNjPSAyNTUgKi9cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjQ2NzpcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIGYtXHUwMDNlc3opKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNDY4LVx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTQ3Ny1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjQ3ODpcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAwKSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTQ3OS1cdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9NDgzPXN0YXRpYyBpbnQgZGVjb2RlX2JtcHN0cihzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNDkyLVx0XHRCWVRFX0FMSUdOKGJzKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjQ5MzpcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDEsIDApKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNDk0LVx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTQ5Ny1cdGRlZmF1bHQ6XHRcdC8qIDIgXHUwMDNjPSBSYW5nZSBcdTAwM2M9IDI1NSAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NDk4Olx0XHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgZi1cdTAwM2VzeikpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy00OTktXHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTA2LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NTA3Olx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDApKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTA4LVx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz01MTI9c3RhdGljIGludCBkZWNvZGVfc2VxKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy01MjUtXHQvKiBFeHRlbnNpYmxlPyAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NTI2Olx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDEpKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTI3LVx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy01MzAtXHQvKiBHZXQgZmllbGRzIGJpdG1hcCAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NTMxOlx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIGYtXHUwMDNlc3opKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTMyLVx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy01NTMtXHRcdGlmIChzb24tXHUwMDNlYXR0ciBcdTAwMjYgT1BFTikge1x0LyogT3BlbiBmaWVsZCAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NTU0Olx0XHRcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAyLCAwKSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTU1NS1cdFx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTU2LVx0XHRcdGxlbiA9IGdldF9sZW4oYnMpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NTU3Olx0XHRcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCBsZW4sIDApKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTU4LVx0XHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTg1LVx0LyogR2V0IHRoZSBleHRlbnNpb24gYml0bWFwICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo1ODY6XHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgNykpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy01ODctXHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTg4LVx0Ym1wMl9sZW4gPSBnZXRfYml0cyhicywgNykgJiM0MzsgMTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjU4OTpcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCBibXAyX2xlbikpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy01OTAtXHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTYwMi1cdFx0aWYgKGkgXHUwMDNlPSBmLVx1MDAzZXViKSB7XHQvKiBOZXdlciBWZXJzaW9uPyAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NjAzOlx0XHRcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAyLCAwKSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTYwNC1cdFx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNjA1LVx0XHRcdGxlbiA9IGdldF9sZW4oYnMpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NjA2Olx0XHRcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCBsZW4sIDApKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNjA3LVx0XHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNjIwLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NjIxOlx0XHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMiwgMCkpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy02MjItXHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy02MjMtXHRcdGxlbiA9IGdldF9sZW4oYnMpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NjI0Olx0XHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgbGVuLCAwKSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTYyNS1cdFx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz02NDU9c3RhdGljIGludCBkZWNvZGVfc2Vxb2Yoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTY2MS1cdFx0QllURV9BTElHTihicyk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo2NjI6XHRcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAxLCAwKSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTY2My1cdFx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy02NjctXHRcdEJZVEVfQUxJR04oYnMpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NjY4Olx0XHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMiwgMCkpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy02NjktXHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNjc1LVx0XHRCWVRFX0FMSUdOKGJzKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjY3NjpcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDIsIDApKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNjc3LVx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTY4MC1cdGRlZmF1bHQ6XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo2ODE6XHRcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCBmLVx1MDAzZXN6KSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTY4Mi1cdFx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03MDEtXHRcdFx0QllURV9BTElHTihicyk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo3MDI6XHRcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDIsIDApKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzAzLVx0XHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03MDQtXHRcdFx0bGVuID0gZ2V0X2xlbihicyk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo3MDU6XHRcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIGxlbiwgMCkpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03MDYtXHRcdFx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz03NDE9c3RhdGljIGludCBkZWNvZGVfY2hvaWNlKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03NTQtXHQvKiBEZWNvZGUgdGhlIGNob2ljZSBpbmRleCBudW1iZXIgKi9cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjc1NTpcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAxKSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTc1Ni1cdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzU4LVx0XHRleHQgPSAxO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NzU5Olx0XHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgNykpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03NjAtXHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzYzLVx0XHRleHQgPSAwO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NzY0Olx0XHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgZi1cdTAwM2VzeikpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03NjUtXHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzc3LVx0XHRCWVRFX0FMSUdOKGJzKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjc3ODpcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDIsIDApKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzc5LVx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzgwLVx0XHRsZW4gPSBnZXRfbGVuKGJzKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjc4MTpcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIGxlbiwgMCkpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03ODItXHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzk1LVx0XHRCWVRFX0FMSUdOKGJzKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjc5NjpcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDIsIDApKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzk3LVx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzk4LVx0XHRsZW4gPSBnZXRfbGVuKGJzKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjc5OTpcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIGxlbiwgMCkpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04MDAtXHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA1OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NjUyCgkJCQkJCQlvdXRwdXQ6IDE3NAoJCQkJCQkJdGhvdWdodHM6IDI4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlIENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgb3ZlciB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBmaXguIEl0IGxvb2tzIGxpa2UgdGhlIG90aGVyIGRlY29kaW5nIGZ1bmN0aW9ucywgbGlrZSBgZGVjb2RlX2Nob2ljZWAgYW5kIGBkZWNvZGVfc2VxYCwgYWxsIGluY2x1ZGUgYSBib3VuZGFyeSBjaGVjayB3aXRoIGBuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAxKWAgKmJlZm9yZSogYWNjZXNzaW5nIGJpdHMgd2l0aCBgZ2V0X2JpdChicylgIG9yIGNoZWNraW5nIGV4dGVuc2libGUgYml0cy4gVGhlIHByb2JsZW0gd2FzIHRoYXQgYGRlY29kZV9lbnVtYCB3YXMgbWlzc2luZyB0aGF0IGNydWNpYWwgYm91bmRhcnkgY2hlY2suIFRoaXMgcGF0Y2ggc2ltcGx5IGFkZHMgaXQgaW4uIEVzc2VudGlhbGx5LCB0aGlzIGlzIGEgc2FmZXR5IG5ldCB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMsIGFuIE9PQiByZWFkIHZ1bG5lcmFiaWxpdHkuCgpOb3csIGxldCYjMzk7cyB0aGluayBhYm91dCB3aGV0aGVyIHdlIG5lZWQgdG8gYnJpbmcgaW4gdGhlIEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyIChLTVNBTikgZm9yIHRoaXMuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0JiMzOTtzIHVubmVjZXNzYXJ5LCBidXQgbGV0JiMzOTtzIGJyZWFrIGl0IGRvd246CgoqICAgKipLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZT8qKiBOb3BlLCBub3QgcmVsZXZhbnQgaGVyZS4gVGhpcyBwYXRjaCBpc24mIzM5O3QgdG91Y2hpbmcgdGhhdC4KKiAgICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/KiogTm8sIG5vdGhpbmcgbGlrZSB0aGF0LgoqICAgKipBbGxvY2F0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHM/KiogQWxzbyBuby4KKiAgICoqQ2hhbmdlZCBib3VuZHMgY2hlY2tzIGxlYWRpbmcgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzPyoqIFdlbGwsIHllcyBhbmQgbm8uIEl0ICppcyogY2hhbmdpbmcgYm91bmRzIGNoZWNrcywgYnV0IGl0JiMzOTtzICphZGRpbmcqIGEgY2hlY2sgdG8gKnByZXZlbnQqIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBvZiB0aGUgbmV0d29yayBza2IgcGF5bG9hZCwgbm90IGVuYWJsaW5nIG9uZS4KKiAgICoqT3V0LW9mLWJvdW5kcyByZWFkcyBkaXJlY3RseSBkZXRlY3RhYmxlIGJ5IEtBU0FOPyoqIFllcywgZXhhY3RseSEgS0FTQU4gaXMgcGVyZmVjdGx5IHN1aXRlZCB0byBoYW5kbGUgdGhpcyB0eXBlIG9mIGlzc3VlLgoKR2l2ZW4gYWxsIG9mIHRoYXQsIGl0IHNlZW1zIGNsZWFyIHRoYXQgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC4KCkp1c3QgdG8gYmUgdGhvcm91Z2gsIGxldCYjMzk7cyB2ZXJpZnkgdGhlIHNldC1yZXN1bHRzIHBhcmFtZXRlcnM6Ck5lZWRzS01TQU46IGZhbHNlCktNU0FOUmVhc29uaW5nOiBEZXRhaWxlZCBleHBsYW5hdGlvbiBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTi4KCk9rYXksIGFsbCBjaGVja3Mgb3V0LiBOb3cgSSBjYW4gY29uZmlkZW50bHkgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbWlzc2luZyBib3VuZGFyeSBjaGVjayBgbmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgMSlgIHRvIGBkZWNvZGVfZW51bSgpYCBiZWZvcmUgcmVhZGluZyBhIGJpdCBmcm9tIHRoZSBBU04uMSBiaXRzdHJlYW0uIFByaW9yIHRvIHRoaXMgZml4LCBpZiBgYnMtXHUwMDNlY3VyYCB3YXMgYXQgYGJzLVx1MDAzZWVuZGAsIGBnZXRfYml0KGJzKWAgd291bGQgcGVyZm9ybSBhbiBvdXQtb2YtYm91bmRzIHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBwYWNrZXQgZGF0YSBidWZmZXIuIFxuXG5PdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyBhcmUgbWVtb3J5IHNhZmV0eSB2aW9sYXRpb25zIGRpcmVjdGx5IGNhdWdodCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgcGFkZGluZyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG1pc3NpbmcgYm91bmRhcnkgY2hlY2sgYG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDEpYCB0byBgZGVjb2RlX2VudW0oKWAgYmVmb3JlIHJlYWRpbmcgYSBiaXQgZnJvbSB0aGUgQVNOLjEgYml0c3RyZWFtLiBQcmlvciB0byB0aGlzIGZpeCwgaWYgYGJzLVx1MDAzZWN1cmAgd2FzIGF0IGBicy1cdTAwM2VlbmRgLCBgZ2V0X2JpdChicylgIHdvdWxkIHBlcmZvcm0gYW4gb3V0LW9mLWJvdW5kcyByZWFkIHBhc3QgdGhlIGVuZCBvZiB0aGUgcGFja2V0IGRhdGEgYnVmZmVyLiBcblxuT3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgYXJlIG1lbW9yeSBzYWZldHkgdmlvbGF0aW9ucyBkaXJlY3RseSBjYXVnaHQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgc3RydWN0dXJlIHBhZGRpbmcgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDdUMDU6NDU6MjAuNzAwODA0Nzc4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg3NTM1Mjk1ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfSDMyM1wiLFxuICAgIFwiTkVURklMVEVSX0FEVkFOQ0VEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGVjb2RlX2VudW1cIixcbiAgICBcIkRlY29kZVJhc01lc3NhZ2VcIixcbiAgICBcIkRlY29kZVE5MzFcIixcbiAgICBcIkRlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZVwiLFxuICAgIFwicmFzX2hlbHBcIixcbiAgICBcInE5MzFfaGVscFwiLFxuICAgIFwiaDI0NV9oZWxwXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbWlzc2luZyBib3VuZGFyeSBjaGVjayBgbmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgMSlgIHRvIGBkZWNvZGVfZW51bSgpYCBiZWZvcmUgcmVhZGluZyBhIGJpdCBmcm9tIHRoZSBBU04uMSBiaXRzdHJlYW0uIFByaW9yIHRvIHRoaXMgZml4LCBpZiBgYnMtXFx1MDAzZWN1cmAgd2FzIGF0IGBicy1cXHUwMDNlZW5kYCwgYGdldF9iaXQoYnMpYCB3b3VsZCBwZXJmb3JtIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIHBhY2tldCBkYXRhIGJ1ZmZlci4gXFxuXFxuT3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgYXJlIG1lbW9yeSBzYWZldHkgdmlvbGF0aW9ucyBkaXJlY3RseSBjYXVnaHQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgc3RydWN0dXJlIHBhZGRpbmcgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbWlzc2luZyBib3VuZGFyeSBjaGVjayBpbiBkZWNvZGVfZW51bSgpIGluIHRoZSBOZXRmaWx0ZXIgSC4zMjMgY29ubmVjdGlvbiB0cmFja2luZyBBU04uMSBkZWNvZGVyIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgd2hlbiByZWFkaW5nIGJpdHMgZnJvbSBtYWxmb3JtZWQgcGFja2V0cy4gVGhpcyBpcyByZWFjaGFibGUgdmlhIG5ldHdvcmsgcGFja2V0IHByb2Nlc3NpbmcgaGFuZGxlZCBieSB0aGUgSC4zMjMgY29ubnRyYWNrIGhlbHBlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDU6NDU6MjAuNzAwODA5OTk4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDY4NTYyMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5ODE5OGQ2ODNlZjRjODI2NDczNDBlMDRhODRhZTY0OGVjY2ExNzgwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDcgMDU6NDU6MTkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY1xcbmluZGV4IDY4MzBjOWRhMzUwN2MuLmJhNmNlMWYwNGUxZWQgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY1xcbkBAIC0zNjMsNiArMzYzLDggQEAgc3RhdGljIGludCBkZWNvZGVfZW51bShzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXFxuIHtcXG4gXFx0UFJJTlQoXFxcIiUqcyVzXFxcXG5cXFwiLCBsZXZlbCAqIFRBQl9TSVpFLCBcXFwiIFxcXCIsIGYtXFx1MDAzZW5hbWUpO1xcbiBcXG4rXFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDEpKVxcbitcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4gXFx0aWYgKChmLVxcdTAwM2VhdHRyIFxcdTAwMjYgRVhUKSBcXHUwMDI2XFx1MDAyNiBnZXRfYml0KGJzKSkge1xcbiBcXHRcXHRJTkNfQklUUyhicywgNyk7XFxuIFxcdH0gZWxzZSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA1OjQ1OjIxLjIwODQ3NzI2OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTI5ODk1MDM2MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfSDMyM1wiLFxuICAgIFwiTkVURklMVEVSX0FEVkFOQ0VEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGVjb2RlX2VudW1cIixcbiAgICBcIkRlY29kZVJhc01lc3NhZ2VcIixcbiAgICBcIkRlY29kZVE5MzFcIixcbiAgICBcIkRlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZVwiLFxuICAgIFwicmFzX2hlbHBcIixcbiAgICBcInE5MzFfaGVscFwiLFxuICAgIFwiaDI0NV9oZWxwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG1pc3NpbmcgYm91bmRhcnkgY2hlY2sgaW4gZGVjb2RlX2VudW0oKSBpbiB0aGUgTmV0ZmlsdGVyIEguMzIzIGNvbm5lY3Rpb24gdHJhY2tpbmcgQVNOLjEgZGVjb2RlciB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzIHdoZW4gcmVhZGluZyBiaXRzIGZyb20gbWFsZm9ybWVkIHBhY2tldHMuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBuZXR3b3JrIHBhY2tldCBwcm9jZXNzaW5nIGhhbmRsZWQgYnkgdGhlIEguMzIzIGNvbm50cmFjayBoZWxwZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTgxOThkNjgzZWY0YzgyNjQ3MzQwZTA0YTg0YWU2NDhlY2NhMTc4MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMDU6NDU6MTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jXG5pbmRleCA2ODMwYzlkYTM1MDdjLi5iYTZjZTFmMDRlMWVkIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jXG5AQCAtMzYzLDYgKzM2Myw4IEBAIHN0YXRpYyBpbnQgZGVjb2RlX2VudW0oc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuIHtcbiBcdFBSSU5UKFwiJSpzJXNcXG5cIiwgbGV2ZWwgKiBUQUJfU0laRSwgXCIgXCIsIGYtXHUwMDNlbmFtZSk7XG4gXG4rXHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgMSkpXG4rXHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuIFx0aWYgKChmLVx1MDAzZWF0dHIgXHUwMDI2IEVYVCkgXHUwMDI2XHUwMDI2IGdldF9iaXQoYnMpKSB7XG4gXHRcdElOQ19CSVRTKGJzLCA3KTtcbiBcdH0gZWxzZSB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNTo0NToyMS4yMDg0Nzg2NTlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTg1OTUzMTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEguMzIzIENvbm5lY3Rpb24gVHJhY2tpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyB0b3VjaGluZyBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgY2hhbmdlcyB0byBzZWUgd2hhdCdzIGJlaW5nIHR3ZWFrZWQgaW4gdGhlIEguMzIzIEFTTi4xIGRlY29kZXIuIEkgc2VlIHRoZSBkaWZmIGludHJvZHVjZXMgYSBuZXcgY2hlY2sgd2l0aGluIHRoZSBgZGVjb2RlX2VudW1gIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGEgY2FsbCB0byBgbmZfaDMyM19lcnJvcl9ib3VuZGFyeWAgaXMgYWRkZWQgYmVmb3JlIHRoZSBoYW5kbGluZyBvZiB0aGUgYEVYVGAgYXR0cmlidXRlLiBJbnRyaWd1aW5nLi4uIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgaGVyZS5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGdldCB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgY2hhbmdlLiBJJ2xsIHJlYWQgdGhlIGNvZGUgYXJvdW5kIGxpbmUgMzYzIHRvIGdldCB0aGUgZnVuY3Rpb24ncyBzdXJyb3VuZGluZ3MgYW5kIGl0cyBvdmVyYWxsIHB1cnBvc2UuIFRoZW4sIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgY2FsbGVyIGZ1bmN0aW9ucyB0byBzZWUgd2hlcmUgYGRlY29kZV9lbnVtYCBpcyB1c2VkIGFuZCBob3cgdGhpcyBuZXcgY2hlY2sgd2lsbCBpbXBhY3QgdGhvc2UgZmxvd3MuIEZpbmFsbHksIEknbGwgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIHRvIGRldGVybWluZSBpZiB0aGlzIGNvZGUgaXMgZXZlbiBlbmFibGVkIGluIHRoZSBzeXN0ZW0gSSdtIGludGVyZXN0ZWQgaW4uIFRoaXMgd2lsbCBnaXZlIG1lIGEgcHJvcGVyIGNvbnRleHQgYXJvdW5kIHRoZSBmdW5jdGlvbiBpbiBnZW5lcmFsIGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkyNywiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA1OjQ1OjI1LjE5NDQzMzkzM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2NzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM1MDpcXHRcXHRcXHRJTkNfQklUUyhicywgZi1cXHUwMDNlc3opO1xcbiAzNTE6XFx0XFx0XFx0YnJlYWs7XFxuIDM1MjpcXHRcXHR9XFxuIDM1MzpcXHRcXG4gMzU0OlxcdFxcdFBSSU5UKFxcXCJcXFxcblxcXCIpO1xcbiAzNTU6XFx0XFxuIDM1NjpcXHRcXHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgMCkpXFxuIDM1NzpcXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4gMzU4OlxcdFxcdHJldHVybiBIMzIzX0VSUk9SX05PTkU7XFxuIDM1OTpcXHR9XFxuIDM2MDpcXHRcXG4gMzYxOlxcdHN0YXRpYyBpbnQgZGVjb2RlX2VudW0oc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxcbiAzNjI6XFx0ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXFxuIDM2MzpcXHR7XFxuIDM2NDpcXHRcXHRQUklOVChcXFwiJSpzJXNcXFxcblxcXCIsIGxldmVsICogVEFCX1NJWkUsIFxcXCIgXFxcIiwgZi1cXHUwMDNlbmFtZSk7XFxuIDM2NTpcXHRcXG4gMzY2OlxcdFxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAxKSlcXG4gMzY3OlxcdFxcdFxcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xcbiAzNjg6XFx0XFx0aWYgKChmLVxcdTAwM2VhdHRyIFxcdTAwMjYgRVhUKSBcXHUwMDI2XFx1MDAyNiBnZXRfYml0KGJzKSkge1xcbiAzNjk6XFx0XFx0XFx0SU5DX0JJVFMoYnMsIDcpO1xcbiAzNzA6XFx0XFx0fSBlbHNlIHtcXG4gMzcxOlxcdFxcdFxcdElOQ19CSVRTKGJzLCBmLVxcdTAwM2Vzeik7XFxuIDM3MjpcXHRcXHR9XFxuIDM3MzpcXHRcXG4gMzc0OlxcdFxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAwKSlcXG4gMzc1OlxcdFxcdFxcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xcbiAzNzY6XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfTk9ORTtcXG4gMzc3OlxcdH1cXG4gMzc4OlxcdFxcbiAzNzk6XFx0c3RhdGljIGludCBkZWNvZGVfYml0c3RyKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG4gMzgwOlxcdCAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXFxuIDM4MTpcXHR7XFxuIDM4MjpcXHRcXHR1bnNpZ25lZCBpbnQgbGVuO1xcbiAzODM6XFx0XFxuIDM4NDpcXHRcXHRQUklOVChcXFwiJSpzJXNcXFxcblxcXCIsIGxldmVsICogVEFCX1NJWkUsIFxcXCIgXFxcIiwgZi1cXHUwMDNlbmFtZSk7XFxuIDM4NTpcXHRcXG4gMzg2OlxcdFxcdEJZVEVfQUxJR04oYnMpO1xcbiAzODc6XFx0XFx0c3dpdGNoIChmLVxcdTAwM2Vzeikge1xcbiAzODg6XFx0XFx0Y2FzZSBGSVhEOlxcdFxcdC8qIGZpeGVkIGxlbmd0aCBcXHUwMDNlIDE2ICovXFxuIDM4OTpcXHRcXHRcXHRsZW4gPSBmLVxcdTAwM2VsYjtcXG4gMzkwOlxcdFxcdFxcdGJyZWFrO1xcbiAzOTE6XFx0XFx0Y2FzZSBXT1JEOlxcdFxcdC8qIDItYnl0ZSBsZW5ndGggKi9cXG4gMzkyOlxcdFxcdFxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAyLCAwKSlcXG4gMzkzOlxcdFxcdFxcdFxcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xcbiAzOTQ6XFx0XFx0XFx0bGVuID0gKCpicy1cXHUwMDNlY3VyKyspIFxcdTAwM2NcXHUwMDNjIDg7XFxuIDM5NTpcXHRcXHRcXHRsZW4gKz0gKCpicy1cXHUwMDNlY3VyKyspICsgZi1cXHUwMDNlbGI7XFxuIDM5NjpcXHRcXHRcXHRicmVhaztcXG4gMzk3OlxcdFxcdGNhc2UgU0VNSTpcXG4gMzk4OlxcdFxcdFxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAyLCAwKSlcXG4gMzk5OlxcdFxcdFxcdFxcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNTo0NToyNS4xOTQ1MzI4NDNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTI1NTUyNjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gZXhhbWluaW5nIHRoZSBgbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYCBjb2RlLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIE1ha2VmaWxlIGFuZCBLY29uZmlnOlxuXG4qKkRlZXAgRGl2ZTogYG5mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AgYW5kIGl0cyBCdWlsZCBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIEguMzIzIEFTTi4xIG1vZHVsZSBmaXRzIGludG8gdGhlIGJyb2FkZXIgbmV0ZmlsdGVyIGZyYW1ld29yay4gRmlyc3QsIHRoZSBNYWtlZmlsZS4gSSdtIGxvb2tpbmcgZm9yIHRoZSBidWlsZCBydWxlcywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHNwZWNpYWwgZmxhZ3Mgb3IgaW5jbHVkZXMgcmVsZXZhbnQgdG8gdGhpcyBzcGVjaWZpYyBmaWxlLiBJJ2xsIGJlIGNoZWNraW5nIHRvIHNlZSB3aGF0IG90aGVyIG1vZHVsZXMgb3IgbGlicmFyaWVzIGl0IGxpbmtzIGFnYWluc3QsIGFuZCBob3cgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gZGV0ZXJtaW5lcyB3aGVuIGFuZCBob3cgdG8gY29tcGlsZSBpdC4gQXJlIHRoZXJlIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzIHRoYXQgbWlnaHQgY29udHJvbCBpdHMgaW5jbHVzaW9uIGJhc2VkIG9uIGtlcm5lbCBjb25maWd1cmF0aW9uPyBBcmUgdGhlcmUgYW55IG1vZHVsZS1zcGVjaWZpYyBvcHRpb25zP1xuXG5Ob3csIHRoZSBLY29uZmlnIGZpbGUuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgaW50ZXJlc3Rpbmcgc3R1ZmYgaXMuIEkgd2FudCB0byBzZWUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGNvbnRyb2wgdGhlIGluY2x1c2lvbiBvZiB0aGlzIG1vZHVsZSBpbiB0aGUga2VybmVsLiBXaGF0IGRlcGVuZGVuY2llcyBhcmUgc3BlY2lmaWVkPyBEb2VzIGl0IGRlcGVuZCBvbiBvdGhlciBuZXRmaWx0ZXIgY29tcG9uZW50cyBiZWluZyBlbmFibGVkPyBXaGF0J3MgdGhlIGRlZmF1bHQgc3RhdGUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIChidWlsdC1pbiwgbW9kdWxhciwgb3IgZGlzYWJsZWQpPyBBcmUgdGhlcmUgYW55IGhlbHAgdGV4dHMgb3IgZGVzY3JpcHRpb25zIHRoYXQgZ2l2ZSBjbHVlcyBhYm91dCB0aGUgcHVycG9zZSBvZiB0aGlzIG1vZHVsZSBhbmQgdGhlIHNjZW5hcmlvcyB3aGVyZSBpdCBzaG91bGQgYmUgZW5hYmxlZD8gU3BlY2lmaWNhbGx5LCBJJ20gY2hlY2tpbmcgZm9yIGRlcGVuZGVuY2llcyBvbiBBU04uMSBwYXJzaW5nIGxpYnJhcmllcywgb3RoZXIgSC4zMjMtcmVsYXRlZCBtb2R1bGVzLCBvciBhbnl0aGluZyB0aGF0IHdvdWxkIGluZGljYXRlIGhvdyBkZWVwbHkgaW50ZWdyYXRlZCBpdCBpcyB3aXRoaW4gdGhlIG92ZXJhbGwgY29ubnRyYWNrIGltcGxlbWVudGF0aW9uIGZvciBILjMyMy4gSSdtIGFsc28gZ29pbmcgdG8gY2hlY2sgZm9yIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIHdpdGggb3RoZXIgbW9kdWxlcywgYXMgd2VsbCBhcyBhbnkgZGVwZW5kZW5jaWVzIG9uIHVzZXItc3BhY2UgYXBwbGljYXRpb25zIG9yIGxpYnJhcmllcyB0aGF0IG1pZ2h0IGJlIHJlcXVpcmVkLiBJJ20gYWxzbyBsb29raW5nIGZvciBhbnkgc3BlY2lmaWMgaGFyZHdhcmUgcmVxdWlyZW1lbnRzIG9yIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zIHRoYXQgbWlnaHQgaW5mbHVlbmNlIGl0cyBjb25maWd1cmF0aW9uLiBCeSB1bmRlcnN0YW5kaW5nIHRoZSBLY29uZmlnIG9wdGlvbnMsIEkgY2FuIGZpZ3VyZSBvdXQgdGhlIGludGVuZGVkIHVzZSBjYXNlcyBmb3IgdGhpcyBtb2R1bGUgYW5kIGhvdyB0byBwcm9wZXJseSBlbmFibGUgb3IgZGlzYWJsZSBpdCBmb3IgZGlmZmVyZW50IGtlcm5lbCBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM2MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDU6NDU6MjguMTIwMDg4NTQ0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MTc4NTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Nvbm50cmFja19oMzIzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZT0zOT1vYmotJChDT05GSUdfTkZfQ1RfTkVUTElOS19IRUxQRVIpICs9IG5mbmV0bGlua19jdGhlbHBlci5vXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTQxLSMgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJzXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo0MjpuZl9jb25udHJhY2tfaDMyMy1vYmpzIDo9IG5mX2Nvbm50cmFja19oMzIzX21haW4ubyBuZl9jb25udHJhY2tfaDMyM19hc24xLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTQzLVxcbi0tXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZT00NT1vYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX0ZUUCkgKz0gbmZfY29ubnRyYWNrX2Z0cC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo0NjpvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX0gzMjMpICs9IG5mX2Nvbm50cmFja19oMzIzLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTQ3LW9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfSVJDKSArPSBuZl9jb25udHJhY2tfaXJjLm9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTE0LSNlbmRpZlxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjE1OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5oXFx1MDAzZVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTE2LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9MTIzPXN0YXRpYyBjb25zdCBkZWNvZGVyX3QgRGVjb2RlcnNbXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTE0MC0gKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxNDE6I2luY2x1ZGUgXFxcIm5mX2Nvbm50cmFja19oMzIzX3R5cGVzLmNcXFwiXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTQyLVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMzUtI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3pvbmVzLmhcXHUwMDNlXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MzY6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyMy5oXFx1MDAzZVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTM3LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9MTc1NT1zdGF0aWMgdm9pZCBfX2V4aXQgaDMyM19oZWxwZXJfZXhpdCh2b2lkKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTc2My1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxNzY0OnN0YXRpYyB2b2lkIF9fZXhpdCBuZl9jb25udHJhY2tfaDMyM19maW5pKHZvaWQpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTc2NS17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNzcwLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjE3NzE6c3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX2gzMjNfaW5pdCh2b2lkKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3NzIte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTc4OS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxNzkwOm1vZHVsZV9pbml0KG5mX2Nvbm50cmFja19oMzIzX2luaXQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjE3OTE6bW9kdWxlX2V4aXQobmZfY29ubnRyYWNrX2gzMjNfZmluaSk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTc5Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDU6NDU6MjguMTc5Mjc0NjkzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDE2NTMzMDQ0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIHlvdXIgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byBLY29uZmlnIGZvciBILjMyMyBDb25uZWN0aW9uIFRyYWNraW5nKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIEtjb25maWcgZW50cmllcyByZWxhdGVkIHRvIGBORl9DT05OVFJBQ0tfSDMyM2AuIFRoaXMgaXNuJ3QganVzdCBhIHNpbXBsZSBrZXl3b3JkIHNlYXJjaCwgdGhvdWdoLiBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBzdHJ1Y3R1cmVkIHdpdGhpbiB0aGUgb3ZlcmFsbCBOZXRmaWx0ZXIgZnJhbWV3b3JrLiBXaGVyZSB3b3VsZCBJICpleHBlY3QqIHRvIGZpbmQgaXQ/IExpa2VseSB1bmRlciBjb25uZWN0aW9uIHRyYWNraW5nLCBuYXR1cmFsbHkuIEJ1dCBpcyBpdCBhIHRvcC1sZXZlbCBvcHRpb24sIG9yIGlzIGl0IG5lc3RlZCB3aXRoaW4gYSBtb3JlIGdlbmVyYWwgSC4zMjMgc3VwcG9ydCBtb2R1bGU/IEFyZSB0aGVyZSBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGNvbnNpZGVyPyBGb3IgZXhhbXBsZSwgaXMgdGhlcmUgYSBnZW5lcmFsIHNldHRpbmcgZm9yIGVuYWJsaW5nIE5ldGZpbHRlcidzIGNvbm5lY3Rpb24gdHJhY2tpbmcgdGhhdCBuZWVkcyB0byBiZSBlbmFibGVkIGJlZm9yZSBJIGNhbiBzZWUgdGhpcyBILjMyMyBzcGVjaWZpYyBvcHRpb24/IEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCBhIGdyZXAgYWNyb3NzIHRoZSBLY29uZmlnIGZpbGVzLCBidXQgSSdsbCBuZWVkIHRvIGJlIG1pbmRmdWwgb2YgcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBjaGVjayBmb3IgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBjb21tZW50cyB0b28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3OTMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNTo0NTozMi4zNDQ2MDc3MDRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA1NTY5NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkZfQ09OTlRSQUNLX0gzMjNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0yMjc9Y29uZmlnIE5GX0NPTk5UUkFDS19GVFBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMzgtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjIzOTpjb25maWcgTkZfQ09OTlRSQUNLX0gzMjNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjQwLVxcdHRyaXN0YXRlIFxcXCJILjMyMyBwcm90b2NvbCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNTo0NTozMi4zOTUxOTM4MTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTMxMzYwNzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgTkZfQ09OTlRSQUNLX0gzMjMgS2NvbmZpZyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmb3IgYE5GX0NPTk5UUkFDS19IMzIzYC4gTXkgaW5pdGlhbCBmb2N1cywgYXMgYWx3YXlzLCBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMuIFdoYXQgb3RoZXIgbW9kdWxlcyBvciBmZWF0dXJlcyBpcyB0aGlzIGNvbm5lY3RlZCB0bz8gSSdsbCBiZSBsb29raW5nIGZvciBgZGVwZW5kcyBvbmAsIGBzZWxlY3RgLCBhbmQgcG90ZW50aWFsbHkgYGltcGx5YCBzdGF0ZW1lbnRzLiBJIHdhbnQgdG8gYnVpbGQgYSBxdWljayBtZW50YWwgbWFwIG9mIGl0cyBwbGFjZSBpbiB0aGUgb3ZlcmFsbCBuZXRmaWx0ZXIgYW5kIGNvbm5lY3Rpb24gdHJhY2tpbmcgYXJjaGl0ZWN0dXJlLlxuXG5UaGVuLCBJJ20gY2hlY2tpbmcgdGhlIGhlbHAgdGV4dC4gRG9lcyBpdCBjbGVhcmx5IGV4cGxhaW4gdGhlIHJvbGUgb2YgdGhpcyBtb2R1bGU/IElzIGl0IHNwZWNpZmljIGFib3V0IHRoZSBILjMyMyBwcm90b2NvbCBhc3BlY3RzIGl0IGNvdmVycz8gQSBjb25jaXNlIGRlc2NyaXB0aW9uIGlzIGtleS4gSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgc3VwcG9ydGVkIEguMzIzIHNpZ25hbGluZyBwcm90b2NvbHMsIGxpa2UgSC4yMjUsIEguMjQ1LCBvciBwZXJoYXBzIGV2ZW4gbmV3ZXIgYWRkaXRpb25zIGlmIHRoaXMgY29uZmlnIGlzIHJlY2VudC4gQW55IG1lbnRpb24gb2YgTkFUIHRyYXZlcnNhbCBvciBTSVAvSC4zMjMgaW50ZXJ3b3JraW5nIGlzIGFsd2F5cyBvZiBwYXJ0aWN1bGFyIGludGVyZXN0LlxuXG5OZXh0LCBJJ2xsIHNjYW4gZm9yIGFueSBkZWZhdWx0IHNldHRpbmdzLiBJcyBpdCBlbmFibGVkIGJ5IGRlZmF1bHQsIG9yIGlzIGl0IGEgbW9kdWxhciBmZWF0dXJlPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBkZWZhdWx0PyBEb2VzIGl0IHByb3ZpZGUgYW55IGhpbnRzIGFib3V0IHRoZSB1c2UgY2FzZXMgdGhlIGtlcm5lbCBkZXZlbG9wZXJzIGhhZCBpbiBtaW5kPyBBbnkgcmVsZXZhbnQgdHJpc3RhdGUgdmFsdWVzIG9yIGNvbmZpZyBvcHRpb25zIHdpbGwgYmUgY2FyZWZ1bGx5IGNvbnNpZGVyZWQuXG5cbkZpbmFsbHksIEknbGwgbWVudGFsbHkgY29tcGFyZSB0aGlzIHdpdGggbXkgZXhpc3Rpbmcga25vd2xlZGdlIG9mIG90aGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgbW9kdWxlcy4gRG9lcyB0aGlzIEtjb25maWcgc2VlbSBjb21wbGV0ZSBpbiBzY29wZSwgb3IgYXJlIHRoZXJlIGFzcGVjdHMgSSdkIGV4cGVjdCB0byBzZWUsIGJ1dCBhcmUgbWlzc2luZz8gRG9lcyB0aGlzIGNvbmZpZ3VyYXRpb24gcmVmbGVjdCB0aGUgY3VycmVudCBzdGF0ZSBvZiBILjMyMyBzdXBwb3J0IGluIHRoZSBrZXJuZWwsIG9yIGlzIGl0IHBvdGVudGlhbGx5IGFuIGFyZWEgZm9yIGZ1dHVyZSB3b3JrPyBBbnkgaW5jb25zaXN0ZW5jaWVzIHdvdWxkIHByb21wdCBmdXJ0aGVyIGludmVzdGlnYXRpb24gaW50byB0aGUgcmVsZXZhbnQgc291cmNlIGZpbGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTU5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDU6NDU6MzUuMzI2NTU4MTQ1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTY4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjM1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjM1OlxcdFxcdCAgVGhpcyBpcyBGVFAgc3VwcG9ydCBvbiBMYXllciAzIGluZGVwZW5kZW50IGNvbm5lY3Rpb24gdHJhY2tpbmcuXFxuIDIzNjpcXHRcXG4gMjM3OlxcdFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXFxuIDIzODpcXHRcXG4gMjM5OlxcdGNvbmZpZyBORl9DT05OVFJBQ0tfSDMyM1xcbiAyNDA6XFx0XFx0dHJpc3RhdGUgXFxcIkguMzIzIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuIDI0MTpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxcbiAyNDI6XFx0XFx0aGVscFxcbiAyNDM6XFx0XFx0ICBILjMyMyBpcyBhIFZvSVAgc2lnbmFsbGluZyBwcm90b2NvbCBmcm9tIElUVS1ULiBBcyBvbmUgb2YgdGhlIG1vc3RcXG4gMjQ0OlxcdFxcdCAgaW1wb3J0YW50IFZvSVAgcHJvdG9jb2xzLCBpdCBpcyB3aWRlbHkgdXNlZCBieSB2b2ljZSBoYXJkd2FyZSBhbmRcXG4gMjQ1OlxcdFxcdCAgc29mdHdhcmUgaW5jbHVkaW5nIHZvaWNlIGdhdGV3YXlzLCBJUCBwaG9uZXMsIE5ldG1lZXRpbmcsIE9wZW5QaG9uZSxcXG4gMjQ2OlxcdFxcdCAgR25vbWVtZWV0aW5nLCBldGMuXFxuIDI0NzpcXHRcXG4gMjQ4OlxcdFxcdCAgV2l0aCB0aGlzIG1vZHVsZSB5b3UgY2FuIHN1cHBvcnQgSC4zMjMgb24gYSBjb25uZWN0aW9uIHRyYWNraW5nL05BVFxcbiAyNDk6XFx0XFx0ICBmaXJld2FsbC5cXG4gMjUwOlxcdFxcbiAyNTE6XFx0XFx0ICBUaGlzIG1vZHVsZSBzdXBwb3J0cyBSQVMsIEZhc3QgU3RhcnQsIEguMjQ1IFR1bm5lbGxpbmcsIENhbGxcXG4gMjUyOlxcdFxcdCAgRm9yd2FyZGluZywgUlRQL1JUQ1AgYW5kIFQuMTIwIGJhc2VkIGF1ZGlvLCB2aWRlbywgZmF4LCBjaGF0LFxcbiAyNTM6XFx0XFx0ICB3aGl0ZWJvYXJkLCBmaWxlIHRyYW5zZmVyLCBldGMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2VcXG4gMjU0OlxcdFxcdCAgdmlzaXQgaHR0cDovL25hdGgzMjMuc291cmNlZm9yZ2UubmV0Ly5cXG4gMjU1OlxcdFxcbiAyNTY6XFx0XFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMjU3OlxcdFxcbiAyNTg6XFx0Y29uZmlnIE5GX0NPTk5UUkFDS19JUkNcXG4gMjU5OlxcdFxcdHRyaXN0YXRlIFxcXCJJUkMgRENDIHByb3RvY29sIHN1cHBvcnQgKG9ic29sZXRlKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDU6NDU6MzUuMzI2NjcxMjM1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU2OTg3OTQ1NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB3aGF0IEknbSBsb29raW5nIGF0LCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipJbnZlc3RpZ2F0aW5nIE5GX0NPTk5UUkFDSyBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gTXkgZmlyc3QgbW92ZSBpcyB0byBpZGVudGlmeSB0aGUgZGVwZW5kZW5jaWVzIG9mIGBORl9DT05OVFJBQ0tgIHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMuIEknbSBnb2luZyBzdHJhaWdodCB0byBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBhbmQgYG5ldC9LY29uZmlnYCB0byB0cmFjZSBpdHMgZGVwZW5kZW5jaWVzLiBUaGVzZSBLY29uZmlnIGZpbGVzIGFyZSB0aGUgaGVhcnQgb2YgdGhlIGtlcm5lbCdzIGJ1aWxkIHN5c3RlbSwgYW5kIHRoZXkgY29udGFpbiB0aGUgbG9naWNhbCByZWxhdGlvbnNoaXBzIGJldHdlZW4gdmFyaW91cyBmZWF0dXJlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBrZXJuZWwgY29tcG9uZW50cyBhcmUgcmVxdWlyZWQgZm9yIGNvbm5lY3Rpb24gdHJhY2tpbmcgdG8gZnVuY3Rpb24uIFRoaXMgaXMgY3JpdGljYWwgZm9yIGRlYnVnZ2luZywgb3B0aW1pemF0aW9uLCBhbmQgdW5kZXJzdGFuZGluZyB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzIGZ1bmN0aW9uYWxpdHkuIEtub3dpbmcgdGhlIGRlcGVuZGVuY2llcyB3aWxsIGhlbHAgbWUgZmlndXJlIG91dCB3aGF0IGVsc2UgSSBuZWVkIHRvIGVuYWJsZSBvciBkaXNhYmxlIGlmIEknbSBmaWRkbGluZyB3aXRoIGNvbm5lY3Rpb24gdHJhY2tpbmcsIGFuZCBhdm9pZCBhbnkgbmFzdHkgc3VycHJpc2VzLiBJdCBhbHNvIGFsbG93cyBtZSB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGNvZGUgaXMgaW50ZWdyYXRlZCBpbnRvIHRoZSByZXN0IG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDIxLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNTo0NTo0MS4wMjU0NjgxNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA5NzIzMzgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbnVjb25maWcgTkZfQ09OTlRSQUNLXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA1OjQ1OjQxLjEwNjQ1MDU0OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NzY2MTA2MjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgTmV0ZmlsdGVyIENvbm5lY3Rpb24gVHJhY2tpbmcgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBOZXRmaWx0ZXIncyBjb25uZWN0aW9uIHRyYWNraW5nIG1vZHVsZS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGtlcm5lbCdzIEtjb25maWcgZmlsZXMuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIEknbGwgZmluZCB3aGF0IEkgbmVlZCB3aXRoaW4gdGhlIGBuZXQvbmV0ZmlsdGVyYCBkaXJlY3RvcnkuIExldCdzIHN0YXJ0IHdpdGggYSBzZWFyY2ggZm9yIGBjb25maWcgTkZfQ09OTlRSQUNLYCB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBzeW1ib2xzIGFuZCBkZXNjcmlwdGlvbnMgZm9yIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGZ1bmN0aW9uYWxpdHkgc2hvdWxkIGJlIGRlZmluZWQuIEhvcGVmdWxseSwgdGhhdCB3aWxsIGdpdmUgbWUgYSByb2FkbWFwIG9mIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyB0byB1bmRlcnN0YW5kIGhvdyBjb25uZWN0aW9uIHRyYWNraW5nIGlzIGhhbmRsZWQgYW5kIHBvdGVudGlhbGx5IG1vZGlmeSB0aGUga2VybmVsJ3MgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyODYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNTo0NTo0OC44NzI1Njc0MTlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMDI1Nzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9DT05OVFJBQ0tcXFxcYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz03ND1jb25maWcgTkVURklMVEVSX05FVExJTktfT1NGXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODEtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjgyOmNvbmZpZyBORl9DT05OVFJBQ0tcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODMtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA1OjQ1OjQ4Ljk1MzYwMjY1OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjczODE4ODQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgTmV0ZmlsdGVyIENvbm5lY3Rpb24gVHJhY2tpbmcgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBzdXJyb3VuZGluZyBgY29uZmlnIE5GX0NPTk5UUkFDS2AuIEknbSBpbW1lZGlhdGVseSBsb29raW5nIGZvciBpdHMgZGVwZW5kZW5jaWVzLCB3aGF0IG90aGVyIGZlYXR1cmVzIGl0IGVuYWJsZXMgb3IgZGlzYWJsZXMsIGFuZCBhbnkgaGVscCB0ZXh0IGFzc29jaWF0ZWQgd2l0aCBpdC4gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIHRoZSBzdXJyb3VuZGluZyBgaWZgIHN0YXRlbWVudHMsIG9yIGFueSBkZXBlbmRlbmNpZXMgbGlrZSBgTkVURklMVEVSYCBvciBzcGVjaWZpYyBwcm90b2NvbHMuIEtub3dpbmcgdGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgZ3Jhc3Agb2Ygd2hlcmUgdGhpcyBwYXJ0aWN1bGFyIG9wdGlvbiBmaXRzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHRoZSBOZXRmaWx0ZXIgZnJhbWV3b3JrLCBhbmQgaG93IGl0J3MgZGVzaWduZWQuIEknbSBhbHNvIGludGVyZXN0ZWQgaW4gaXRzIGRlZmF1bHQgc3RhdGUg4oCTIGlzIGl0IGJ1aWx0LWluLCBhIG1vZHVsZSwgb3IgZGlzYWJsZWQgYnkgZGVmYXVsdD8gVGhhdCdsbCBnaXZlIG1lIGNsdWVzIGFib3V0IGl0cyBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgYW5kIHRoZSBsaWtlbGlob29kIG9mIGl0IGJlaW5nIGVuYWJsZWQgaW4gdmFyaW91cyBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEknbGwgcGF5IGF0dGVudGlvbiB0byBhbnkgd2FybmluZ3Mgb3IgY29tbWVudHMgYWJvdXQgZW5hYmxpbmcgdGhpcyBmZWF0dXJlLCBlc3BlY2lhbGx5IGluIHNjZW5hcmlvcyB3aXRoIGhpZ2ggY29ubmVjdGlvbiByYXRlcywgb3Igd2l0aCBzcGVjaWZpYyB0eXBlcyBvZiB0cmFmZmljIHRoYXQgbWlnaHQgbm90IHBsYXkgd2VsbCB3aXRoIHN0YXRlZnVsIGluc3BlY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1ODQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNTo0NTo1MS4yMjc0MjQxN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTY4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDc1OlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgT1NGIG92ZXIgTkZORVRMSU5LIGludGVyZmFjZVxcXCJcXG4gIDc2OlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXFxuICA3NzpcXHRcXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcXG4gIDc4OlxcdFxcdGhlbHBcXG4gIDc5OlxcdFxcdCAgSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgdGhlIGtlcm5lbCB3aWxsIGluY2x1ZGUgc3VwcG9ydFxcbiAgODA6XFx0XFx0ICBmb3IgcGFzc2l2ZSBPUyBmaW5nZXJwcmludCB2aWEgTkZORVRMSU5LLlxcbiAgODE6XFx0XFxuICA4MjpcXHRjb25maWcgTkZfQ09OTlRSQUNLXFxuICA4MzpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3VwcG9ydFxcXCJcXG4gIDg0OlxcdFxcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxcbiAgODU6XFx0XFx0c2VsZWN0IE5GX0RFRlJBR19JUFY0XFxuICA4NjpcXHRcXHRzZWxlY3QgTkZfREVGUkFHX0lQVjYgaWYgSVBWNiAhPSBuXFxuICA4NzpcXHRcXHRoZWxwXFxuICA4ODpcXHRcXHQgIENvbm5lY3Rpb24gdHJhY2tpbmcga2VlcHMgYSByZWNvcmQgb2Ygd2hhdCBwYWNrZXRzIGhhdmUgcGFzc2VkXFxuICA4OTpcXHRcXHQgIHRocm91Z2ggeW91ciBtYWNoaW5lLCBpbiBvcmRlciB0byBmaWd1cmUgb3V0IGhvdyB0aGV5IGFyZSByZWxhdGVkXFxuICA5MDpcXHRcXHQgIGludG8gY29ubmVjdGlvbnMuXFxuICA5MTpcXHRcXG4gIDkyOlxcdFxcdCAgVGhpcyBpcyByZXF1aXJlZCB0byBkbyBNYXNxdWVyYWRpbmcgb3Igb3RoZXIga2luZHMgb2YgTmV0d29ya1xcbiAgOTM6XFx0XFx0ICBBZGRyZXNzIFRyYW5zbGF0aW9uLiAgSXQgY2FuIGFsc28gYmUgdXNlZCB0byBlbmhhbmNlIHBhY2tldFxcbiAgOTQ6XFx0XFx0ICBmaWx0ZXJpbmcgKHNlZSBgQ29ubmVjdGlvbiBzdGF0ZSBtYXRjaCBzdXBwb3J0JyBiZWxvdykuXFxuICA5NTpcXHRcXG4gIDk2OlxcdFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXFxuICA5NzpcXHRcXG4gIDk4OlxcdGNvbmZpZyBORl9MT0dfU1lTTE9HXFxuICA5OTpcXHRcXHR0cmlzdGF0ZSBcXFwiU3lzbG9nIHBhY2tldCBsb2dnaW5nXFxcIlxcbiAxMDA6XFx0XFx0ZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uXFxuIDEwMTpcXHRcXHRoZWxwXFxuIDEwMjpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZSBzdXBwb3J0IGZvciBwYWNrZXQgbG9nZ2luZyB2aWEgc3lzbG9nLlxcbiAxMDM6XFx0XFx0ICBJdCBzdXBwb3J0cyBJUHY0LCBJUFY2LCBBUlAgYW5kIGNvbW1vbiB0cmFuc3BvcnQgcHJvdG9jb2xzIHN1Y2hcXG4gMTA0OlxcdFxcdCAgYXMgVENQIGFuZCBVRFAuXFxuIDEwNTpcXHRcXHQgIFRoaXMgaXMgYSBzaW1wbGVyIGJ1dCBsZXNzIGZsZXhpYmxlIGxvZ2dpbmcgbWV0aG9kIGNvbXBhcmVkIHRvXFxuIDEwNjpcXHRcXHQgIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0cuXFxuIDEwNzpcXHRcXHQgIElmIGJvdGggYXJlIGVuYWJsZWQgdGhlIGJhY2tlbmQgdG8gdXNlIGNhbiBiZSBjb25maWd1cmVkIGF0IHJ1bi10aW1lXFxuIDEwODpcXHRcXHQgIGJ5IG1lYW5zIG9mIHBlci1hZGRyZXNzLWZhbWlseSBzeXNjdGwgdHVuYWJsZXMuXFxuIDEwOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDU6NDU6NTEuMjI3NTQyNzFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTY3Nzk3NjI1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIE5ldGZpbHRlciBLY29uZmlnKipcblxuT2theSwgdGltZSB0byBnZXQgc3RhcnRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIGZvciBuZXRmaWx0ZXIuIFRoZSBiZXN0IHBsYWNlIHRvIGJlZ2luIGlzIGFsbW9zdCBhbHdheXMgdGhlIGBLY29uZmlnYCBmaWxlIGluIHRoZSByZWxldmFudCBkaXJlY3RvcnkuIFNwZWNpZmljYWxseSwgSSdsbCBuYXZpZ2F0ZSBvdmVyIHRvIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIHRvIGdldCBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIG1lbnUgc3RydWN0dXJlIGFuZCB0aGUgZGVwZW5kZW5jaWVzLiBUaGlzIHNob3VsZCBpbW1lZGlhdGVseSBnaXZlIG1lIGEgc2Vuc2Ugb2YgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIGVhY2ggb3RoZXIgd2l0aGluIHRoZSBuZXRmaWx0ZXIgZnJhbWV3b3JrLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBmb3VuZGF0aW9uIEkgbmVlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQwOCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDU6NDU6NTIuOTA1NTIxNzMyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDQxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdG1lbnUgXFxcIkNvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb25cXFwiXFxuICAgMzpcXHRcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgTkVURklMVEVSXFxuICAgNDpcXHRcXG4gICA1OlxcdGNvbmZpZyBORVRGSUxURVJfSU5HUkVTU1xcbiAgIDY6XFx0XFx0Ym9vbCBcXFwiTmV0ZmlsdGVyIGluZ3Jlc3Mgc3VwcG9ydFxcXCJcXG4gICA3OlxcdFxcdGRlZmF1bHQgeVxcbiAgIDg6XFx0XFx0c2VsZWN0IE5FVF9JTkdSRVNTXFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIFRoaXMgYWxsb3dzIHlvdSB0byBjbGFzc2lmeSBwYWNrZXRzIGZyb20gaW5ncmVzcyB1c2luZyB0aGUgTmV0ZmlsdGVyXFxuICAxMTpcXHRcXHQgIGluZnJhc3RydWN0dXJlLlxcbiAgMTI6XFx0XFxuICAxMzpcXHRjb25maWcgTkVURklMVEVSX0VHUkVTU1xcbiAgMTQ6XFx0XFx0Ym9vbCBcXFwiTmV0ZmlsdGVyIGVncmVzcyBzdXBwb3J0XFxcIlxcbiAgMTU6XFx0XFx0ZGVmYXVsdCB5XFxuICAxNjpcXHRcXHRzZWxlY3QgTkVUX0VHUkVTU1xcbiAgMTc6XFx0XFx0aGVscFxcbiAgMTg6XFx0XFx0ICBUaGlzIGFsbG93cyB5b3UgdG8gY2xhc3NpZnkgcGFja2V0cyBiZWZvcmUgdHJhbnNtaXNzaW9uIHVzaW5nIHRoZVxcbiAgMTk6XFx0XFx0ICBOZXRmaWx0ZXIgaW5mcmFzdHJ1Y3R1cmUuXFxuICAyMDpcXHRcXG4gIDIxOlxcdGNvbmZpZyBORVRGSUxURVJfU0tJUF9FR1JFU1NcXG4gIDIyOlxcdFxcdGRlZl9ib29sIE5FVEZJTFRFUl9FR1JFU1MgXFx1MDAyNlxcdTAwMjYgKE5FVF9DTFNfQUNUIHx8IElGQilcXG4gIDIzOlxcdFxcbiAgMjQ6XFx0Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LXFxuICAyNTpcXHRcXHRib29sXFxuICAyNjpcXHRcXG4gIDI3OlxcdGNvbmZpZyBORVRGSUxURVJfRkFNSUxZX0JSSURHRVxcbiAgMjg6XFx0XFx0Ym9vbFxcbiAgMjk6XFx0XFxuICAzMDpcXHRjb25maWcgTkVURklMVEVSX0ZBTUlMWV9BUlBcXG4gIDMxOlxcdFxcdGJvb2xcXG4gIDMyOlxcdFxcbiAgMzM6XFx0Y29uZmlnIE5FVEZJTFRFUl9CUEZfTElOS1xcbiAgMzQ6XFx0XFx0ZGVmX2Jvb2wgQlBGX1NZU0NBTExcXG4gIDM1OlxcdFxcbiAgMzY6XFx0Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0hPT0tcXG4gIDM3OlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgYmFzZSBob29rIGR1bXAgc3VwcG9ydFxcXCJcXG4gIDM4OlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXFxuICAzOTpcXHRcXHRkZXBlbmRzIG9uIE5GX1RBQkxFU1xcbiAgNDA6XFx0XFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA1OjQ1OjUyLjkwNTY1MDQ4MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzAwODg0NzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSC4zMjMgQ29ubmVjdGlvbiBUcmFja2luZyBNb2R1bGUqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgTkZfQ09OTlRSQUNLX0gzMjNgIG1vZHVsZS4gVGhlIHByZXJlcXVpc2l0ZXMgYXJlIHByZXR0eSBjbGVhcjogYE5FVEZJTFRFUmAsIGBJTkVUYCwgYE5FVEZJTFRFUl9BRFZBTkNFRGAsIGBORl9DT05OVFJBQ0tgLCBhbmQsIG9mIGNvdXJzZSwgYE5GX0NPTk5UUkFDS19IMzIzYCBpdHNlbGYuIE1ha2VzIHNlbnNlLCBnaXZlbiBpdCdzIGJ1aWx0IG9uIE5ldGZpbHRlciBhbmQgaGFuZGxlcyBJUC1iYXNlZCBjb25uZWN0aW9ucy5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVjb2RpbmcgcHJvY2Vzcy4gSSBuZWVkIHRvIGZvY3VzIG9uIGhvdyBgZGVjb2RlX2VudW1gIGFuZCB0aGUgQVNOLjEgcGFyc2VyIGFyZSBhY3R1YWxseSAqdXNlZCogd2l0aGluIHRoaXMgbW9kdWxlLiBTcGVjaWZpY2FsbHksIGluIGBuZl9jb25udHJhY2tfaDMyM19hc24xLmNgLiBTbyBteSBuZXh0IHN0ZXAgaXMgY2xlYXIuXG5cbkknbGwgYmUgc2VhcmNoaW5nIGZvciBob3cgYGRlY29kZV9lbnVtYCBpcyBjYWxsZWQsIGFuZCBnZW5lcmFsbHkgaG93IEFTTi4xIGRlY29kaW5nIGhhcHBlbnMgd2l0aGluIGJvdGggYG5mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AgYW5kIGBuZl9jb25udHJhY2tfaDMyM19tYWluLmNgLiBJIG5lZWQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkYXRhIGZsb3cgYW5kIGhvdyB0aGUgQVNOLjEgZGF0YSBpcyBoYW5kbGVkLiBUaGlzIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgYWN0dWFsbHkgd29ya3MgZm9yIEguMzIzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDQ4LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDU6NDU6NTUuMjA2NTM3NTM0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDE1NzkxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZWNvZGVfZW51bVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz0xMTE9c3RhdGljIGludCBkZWNvZGVfaW50KHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMTI6c3RhdGljIGludCBkZWNvZGVfZW51bShzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTEzLXN0YXRpYyBpbnQgZGVjb2RlX2JpdHN0cihzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz0xMjM9c3RhdGljIGNvbnN0IGRlY29kZXJfdCBEZWNvZGVyc1tdID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTI3LVxcdGRlY29kZV9pbnQsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTI4OlxcdGRlY29kZV9lbnVtLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTEyOS1cXHRkZWNvZGVfYml0c3RyLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9MzEyPXN0YXRpYyBpbnQgZGVjb2RlX2ludChzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0zNjAtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MzYxOnN0YXRpYyBpbnQgZGVjb2RlX2VudW0oc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTM2Mi0gICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDU6NDU6NTUuMjYwNzAxMTEzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzOTU5Njg1NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBILjMyMyBDb25uZWN0aW9uIFRyYWNraW5nIENvZGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IHJlbGF0ZWQgdG8gSC4zMjMgY29ubmVjdGlvbiB0cmFja2luZy4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgYG5mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AgZmlsZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGl0cyBmdW5jdGlvbnMgYXJlIGludm9rZWQsIHNvIEknbGwgYmUgbG9va2luZyBmb3IgZW50cnkgcG9pbnRzIOKAkyB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIGRpcmVjdGx5IGNhbGxlZCBmcm9tIGVsc2V3aGVyZS4gVGhlbiwgSSBuZWVkIHRvIHNlZSAqd2hlcmUqIHRob3NlIGVudHJ5IHBvaW50cyBhcmUgY2FsbGVkIGZyb20uIFRoZSBvYnZpb3VzIHBsYWNlIHRvIGxvb2sgZm9yIHRoYXQgaW5pdGlhbCBjYWxsIGlzIGluIGBuZl9jb25udHJhY2tfaDMyM19tYWluLmNgLCBhcyB0aGUgbmFtZSBzdWdnZXN0cyBpdCdzIHRoZSBjZW50cmFsIGh1Yi4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgaG93IHRoZSBBU04uMS1yZWxhdGVkIGZ1bmN0aW9uYWxpdHkgZml0cyBpbnRvIHRoZSBicm9hZGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgcHJvY2VzcyBmb3IgSC4zMjMgdHJhZmZpYy4gSSdtIGV4cGVjdGluZyB0aGlzIHdpbGwgbGlrZWx5IHNob3cgdGhlIGZ1bmN0aW9uIGNhbGxzIHRoYXQgaGFuZGxlIHRoZSBBU04uMSBkZWNvZGluZyBhbmQgY29ubmVjdGlvbiBzdGF0ZSBtb2RpZmljYXRpb25zLiBJJ20gYW50aWNpcGF0aW5nIHRoYXQgSSBjYW4gdGhlbiB0cmFjZSB0aGUgY29udHJvbCBmbG93IGJhY2sgYW5kIGZvcnRoIGJldHdlZW4gdGhlc2UgZmlsZXMgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgdGhpcyBtb2R1bGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MzMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNTo0NTo1Ny42NTY2NzM3MjRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNDMyNzE5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJEZWNvZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA1OjQ1OjU3LjcwODEyMjU3M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDQ5NDU2OTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgSC4zMjMgY29ubmVjdGlvbiB0cmFja2luZyBtb2R1bGUuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSdsbCBleGFtaW5lIHRoZSBoZWFkZXIgZmlsZSwgc3BlY2lmaWNhbGx5IGBpbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmhgLiBUaGF0J3Mgd2hlcmUgdGhlIGNvcmUgZGVjbGFyYXRpb25zIGZvciB0aGlzIHBhcnQgb2YgdGhlIE5ldGZpbHRlciBzdWJzeXN0ZW0gc2hvdWxkIHJlc2lkZS4gTXkgcHJpbWFyeSBnb2FsIGhlcmUgaXMgdG8gaWRlbnRpZnkgZXhhY3RseSB3aGF0IGZ1bmN0aW9uYWxpdHkgaXMgZXhwb3NlZDogV2hhdCBmdW5jdGlvbnMgYXJlICpleHBvcnRlZCog4oCTIHRob3NlIGFyZSB0aGUgZW50cnkgcG9pbnRzIEknbGwgYmUgd29ya2luZyB3aXRoIOKAkyBhbmQgd2hhdCdzICpkZWNsYXJlZCogd2l0aGluIHRoYXQgY29udGV4dD8gSSdsbCBiZSBsb29raW5nIGZvciB0aGUgc3RydWN0dXJlcywgZW51bWVyYXRpb25zLCBhbmQgZnVuY3Rpb24gcHJvdG90eXBlcyB0aGF0IGFyZSBkZWZpbmVkLiBVbmRlcnN0YW5kaW5nIHRoZSBleHBvcnRlZCBBUEkgaXMgYWJzb2x1dGVseSBjcnVjaWFsIGZvciBhbnkgaW50ZWdyYXRpb24gb3IgaW50ZXJhY3Rpb24gd2l0aCB0aGlzIG1vZHVsZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGFyY2hpdGVjdHVyZSBhbmQgaG93IHRvIHdvcmsgd2l0aCBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyNjYsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNTo0NTo1OS43NTc1ODIyMDlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMTcwMDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBEZWNvZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuaD00ND10eXBlZGVmIHN0cnVjdCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmgtOTAtXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5oOjkxOmludCBEZWNvZGVSYXNNZXNzYWdlKHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IHN6LCBSYXNNZXNzYWdlICogcmFzKTtcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmg6OTI6aW50IERlY29kZVE5MzEodW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3Qgc3osIFE5MzEgKiBxOTMxKTtcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmg6OTM6aW50IERlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZSh1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBzeixcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmgtOTQtXFx0XFx0XFx0XFx0XFx0IE11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZSAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA1OjQ1OjU5LjgwOTc1Nzc5OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTIzMDQ0OTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhhdCBhbmFseXNpcywgYXMgaWYgaXQgd2VyZSBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEguMzIzIENvbm50cmFjayBNb2R1bGUqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyB3aXRoaW4gdGhpcyBILjMyMyBjb25udHJhY2sgbW9kdWxlLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyB0aGUgcGFyc2luZyBvZiB0aG9zZSBILjIyNSBhbmQgSC4yNDUgbWVzc2FnZXMuIE15IGdvYWwgaXMgdG8gc2VlIGV4YWN0bHkgd2hlcmUgYERlY29kZVJhc01lc3NhZ2VgLCBgRGVjb2RlUTkzMWAsIGFuZCBgRGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlYCBhcmUgaW52b2tlZCB3aXRoaW4gYG5mX2Nvbm50cmFja19oMzIzX21haW4uY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBlbnRyeSBwb2ludHMgYW5kIHRoZSBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciB0aGVzZSBtZXNzYWdlIGRlY29kZXJzLiBUaGlzIHdpbGwgaGVscCBtZSBncmFzcCBob3cgdGhlIG1vZHVsZSBwcm9jZXNzZXMgYW5kIGV4dHJhY3RzIGluZm9ybWF0aW9uIGZyb20gSC4zMjMgc2lnbmFsaW5nLiBJIGFudGljaXBhdGUgdGhlcmUnbGwgYmUgYSBmdW5jdGlvbiB0aGF0IGRvZXMgdGhlIGluaXRpYWwgbWVzc2FnZSB0eXBlIGRldGVjdGlvbiwgYW5kIHRoZW4gY2FsbHMgdGhlIGFwcHJvcHJpYXRlIGRlY29kZSBmdW5jdGlvbiBiYXNlZCBvbiB0aGF0LiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIG9uIGhvdyB0aGUgSC4zMjMgc3RhdGUgbWFjaGluZSBpcyByZXByZXNlbnRlZC4gSXQgd291bGQgYWxzbyBiZSBncmVhdCB0byB1bmRlcnN0YW5kIGhvdyBlcnJvcnMgYXJlIGhhbmRsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzc0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDU6NDY6MDQuMzMyODA1NzgyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTczNzkzMTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRGVjb2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTUyOT1zdGF0aWMgaW50IGgyNDVfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTU1MS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzo1NTI6XFx0XFx0LyogRGVjb2RlIEguMjQ1IHNpZ25hbCAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjU1MzpcXHRcXHRyZXQgPSBEZWNvZGVNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2UoZGF0YSwgZGF0YWxlbixcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy01NTQtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNm1zY20pO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9MTA4OT1zdGF0aWMgaW50IHE5MzFfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTExMTEtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MTExMjpcXHRcXHQvKiBEZWNvZGUgUS45MzEgc2lnbmFsICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MTExMzpcXHRcXHRyZXQgPSBEZWNvZGVROTMxKGRhdGEsIGRhdGFsZW4sIFxcdTAwMjZxOTMxKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xMTE0LVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYz0xNjY0PXN0YXRpYyBpbnQgcmFzX2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNjgyLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjE2ODM6XFx0LyogRGVjb2RlIFJBUyBtZXNzYWdlICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MTY4NDpcXHRyZXQgPSBEZWNvZGVSYXNNZXNzYWdlKGRhdGEsIGRhdGFsZW4sIFxcdTAwMjZyYXMpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE2ODUtXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDU6NDY6MDQuODUwMTkyNjkzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3NzgyOTczNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgSGVhcnQgb2YgSC4zMjMgQ29ubmVjdGlvbiBUcmFja2luZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgSC4zMjMgY29ubmVjdGlvbiB0cmFja2luZyBtb2R1bGUgd29ya3MgaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGhvdyBpdCBkZWNvZGVzIHRoZSBBU04uMSBtZXNzYWdlcy4gVGhlIGRlZmluaXRpb25zIGZvciBgRGVjb2RlUmFzTWVzc2FnZWAsIGBEZWNvZGVROTMxYCwgYW5kIHRoZSBvdGhlciBkZWNvZGluZyBmdW5jdGlvbnMgYXJlIGJ1cmllZCBzb21ld2hlcmUgd2l0aGluIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AuIEJlc3QgdG8ganVzdCBqdW1wIHJpZ2h0IHRvIHRoZSBlbmQgb2YgdGhhdCBmaWxlIGFuZCBjaGVjayB0aGVtIG91dC4gSSBuZWVkIHRvIHNlZSB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgdGhlc2UgY3JpdGljYWwgZnVuY3Rpb25zLiBUaGF0J3Mgd2hlcmUgdGhlIHJlYWwgbG9naWMgaXMsIG5vdCBqdXN0IHRoZSBkZWNsYXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjU3LCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDU6NDY6MDYuNjI4NDk0Njk0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MDAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MDA6XFx0XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuIDgwMTpcXHRcXHRcXHRpZiAoIWJhc2UgfHwgIShzb24tXFx1MDAzZWF0dHIgXFx1MDAyNiBERUNPREUpKSB7XFxuIDgwMjpcXHRcXHRcXHRcXHRQUklOVChcXFwiJSpzJXNcXFxcblxcXCIsIChsZXZlbCArIDEpICogVEFCX1NJWkUsIFxcXCIgXFxcIixcXG4gODAzOlxcdFxcdFxcdFxcdCAgICAgIHNvbi1cXHUwMDNlbmFtZSk7XFxuIDgwNDpcXHRcXHRcXHRcXHRicy1cXHUwMDNlY3VyICs9IGxlbjtcXG4gODA1OlxcdFxcdFxcdFxcdHJldHVybiBIMzIzX0VSUk9SX05PTkU7XFxuIDgwNjpcXHRcXHRcXHR9XFxuIDgwNzpcXHRcXHRcXHRiZWcgPSBicy1cXHUwMDNlY3VyO1xcbiA4MDg6XFx0XFxuIDgwOTpcXHRcXHRcXHRpZiAoKGVyciA9IChEZWNvZGVyc1tzb24tXFx1MDAzZXR5cGVdKSAoYnMsIHNvbiwgYmFzZSwgbGV2ZWwgKyAxKSkgXFx1MDAzY1xcbiA4MTA6XFx0XFx0XFx0ICAgIEgzMjNfRVJST1JfTk9ORSlcXG4gODExOlxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDgxMjpcXHRcXG4gODEzOlxcdFxcdFxcdGJzLVxcdTAwM2VjdXIgPSBiZWcgKyBsZW47XFxuIDgxNDpcXHRcXHRcXHRicy1cXHUwMDNlYml0ID0gMDtcXG4gODE1OlxcdFxcdH0gZWxzZSBpZiAoKGVyciA9IChEZWNvZGVyc1tzb24tXFx1MDAzZXR5cGVdKSAoYnMsIHNvbiwgYmFzZSwgbGV2ZWwgKyAxKSkgXFx1MDAzY1xcbiA4MTY6XFx0XFx0XFx0ICAgSDMyM19FUlJPUl9OT05FKVxcbiA4MTc6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gODE4OlxcdFxcbiA4MTk6XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfTk9ORTtcXG4gODIwOlxcdH1cXG4gODIxOlxcdFxcbiA4MjI6XFx0aW50IERlY29kZVJhc01lc3NhZ2UodW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3Qgc3osIFJhc01lc3NhZ2UgKnJhcylcXG4gODIzOlxcdHtcXG4gODI0OlxcdFxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmllbGRfdCByYXNfbWVzc2FnZSA9IHtcXG4gODI1OlxcdFxcdFxcdEZOQU1FKFxcXCJSYXNNZXNzYWdlXFxcIikgQ0hPSUNFLCA1LCAyNCwgMzIsIERFQ09ERSB8IEVYVCxcXG4gODI2OlxcdFxcdFxcdDAsIF9SYXNNZXNzYWdlXFxuIDgyNzpcXHRcXHR9O1xcbiA4Mjg6XFx0XFx0c3RydWN0IGJpdHN0ciBicztcXG4gODI5OlxcdFxcbiA4MzA6XFx0XFx0YnMuYnVmID0gYnMuYmVnID0gYnMuY3VyID0gYnVmO1xcbiA4MzE6XFx0XFx0YnMuZW5kID0gYnVmICsgc3o7XFxuIDgzMjpcXHRcXHRicy5iaXQgPSAwO1xcbiA4MzM6XFx0XFxuIDgzNDpcXHRcXHRyZXR1cm4gZGVjb2RlX2Nob2ljZShcXHUwMDI2YnMsIFxcdTAwMjZyYXNfbWVzc2FnZSwgKGNoYXIgKikgcmFzLCAwKTtcXG4gODM1OlxcdH1cXG4gODM2OlxcdFxcbiA4Mzc6XFx0c3RhdGljIGludCBEZWNvZGVIMzIzX1VzZXJJbmZvcm1hdGlvbih1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGNoYXIgKmJlZyxcXG4gODM4OlxcdFxcdFxcdFxcdFxcdCAgICAgIHNpemVfdCBzeiwgSDMyM19Vc2VySW5mb3JtYXRpb24gKnV1aWUpXFxuIDgzOTpcXHR7XFxuIDg0MDpcXHRcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgaDMyM191c2VyaW5mb3JtYXRpb24gPSB7XFxuIDg0MTpcXHRcXHRcXHRGTkFNRShcXFwiSDMyMy1Vc2VySW5mb3JtYXRpb25cXFwiKSBTRVEsIDEsIDIsIDIsIERFQ09ERSB8IEVYVCxcXG4gODQyOlxcdFxcdFxcdDAsIF9IMzIzX1VzZXJJbmZvcm1hdGlvblxcbiA4NDM6XFx0XFx0fTtcXG4gODQ0OlxcdFxcdHN0cnVjdCBiaXRzdHIgYnM7XFxuIDg0NTpcXHRcXG4gODQ2OlxcdFxcdGJzLmJ1ZiA9IGJ1ZjtcXG4gODQ3OlxcdFxcdGJzLmJlZyA9IGJzLmN1ciA9IGJlZztcXG4gODQ4OlxcdFxcdGJzLmVuZCA9IGJlZyArIHN6O1xcbiA4NDk6XFx0XFx0YnMuYml0ID0gMDtcXG4gODUwOlxcdFxcbiA4NTE6XFx0XFx0cmV0dXJuIGRlY29kZV9zZXEoXFx1MDAyNmJzLCBcXHUwMDI2aDMyM191c2VyaW5mb3JtYXRpb24sIChjaGFyICopIHV1aWUsIDApO1xcbiA4NTI6XFx0fVxcbiA4NTM6XFx0XFxuIDg1NDpcXHRpbnQgRGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlKHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IHN6LFxcbiA4NTU6XFx0XFx0XFx0XFx0XFx0XFx0IE11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZSAqXFxuIDg1NjpcXHRcXHRcXHRcXHRcXHRcXHQgbXNjbSlcXG4gODU3OlxcdHtcXG4gODU4OlxcdFxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmllbGRfdCBtdWx0aW1lZGlhc3lzdGVtY29udHJvbG1lc3NhZ2UgPSB7XFxuIDg1OTpcXHRcXHRcXHRGTkFNRShcXFwiTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlXFxcIikgQ0hPSUNFLCAyLCA0LCA0LFxcbiA4NjA6XFx0XFx0XFx0REVDT0RFIHwgRVhULCAwLCBfTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlXFxuIDg2MTpcXHRcXHR9O1xcbiA4NjI6XFx0XFx0c3RydWN0IGJpdHN0ciBicztcXG4gODYzOlxcdFxcbiA4NjQ6XFx0XFx0YnMuYnVmID0gYnMuYmVnID0gYnMuY3VyID0gYnVmO1xcbiA4NjU6XFx0XFx0YnMuZW5kID0gYnVmICsgc3o7XFxuIDg2NjpcXHRcXHRicy5iaXQgPSAwO1xcbiA4Njc6XFx0XFxuIDg2ODpcXHRcXHRyZXR1cm4gZGVjb2RlX2Nob2ljZShcXHUwMDI2YnMsIFxcdTAwMjZtdWx0aW1lZGlhc3lzdGVtY29udHJvbG1lc3NhZ2UsXFxuIDg2OTpcXHRcXHRcXHRcXHQgICAgIChjaGFyICopIG1zY20sIDApO1xcbiA4NzA6XFx0fVxcbiA4NzE6XFx0XFxuIDg3MjpcXHRpbnQgRGVjb2RlUTkzMSh1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBzeiwgUTkzMSAqcTkzMSlcXG4gODczOlxcdHtcXG4gODc0OlxcdFxcdHVuc2lnbmVkIGNoYXIgKnAgPSBidWY7XFxuIDg3NTpcXHRcXHRpbnQgbGVuO1xcbiA4NzY6XFx0XFxuIDg3NzpcXHRcXHRpZiAoIXAgfHwgc3ogXFx1MDAzYyAxKVxcbiA4Nzg6XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuIDg3OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDU6NDY6MDYuNjI4NTk5MDY0WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc0ODYxNDI3NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgSC4zMjMgQ29ubnRyYWNrIEhlbHBlciBWdWxuZXJhYmlsaXR5IEZpeCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGBkZWNvZGVfZW51bWAgaW4gYG5mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AgaGFzIGJlZW4gbW9kaWZpZWQuIFRoaXMgaXMgYSBzdGF0aWMgZnVuY3Rpb24gdXNlZCB3aXRoaW4gdGhlIEguMzIzIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyLCBhY2Nlc3NlZCB2aWEgdGhlIGBEZWNvZGVyc2AgdGFibGUgZm9yIEFTTi4xIGRlY29kaW5nLiBUaGUgY2hhbmdlIGludHJvZHVjZXMgYSBib3VuZHMgY2hlY2ssIGBuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAxKWAsICpiZWZvcmUqIHJlYWRpbmcgdGhlIGJpdC4gVGhpcyBpcyBhIGNsYXNzaWMgYnVmZmVyIG92ZXJydW4gcHJldmVudGlvbiBzdHJhdGVneSB3aGVuIHBhcnNpbmcgQVNOLjEgZW51bSBmaWVsZHMsIG1pdGlnYXRpbmcgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBpbiBtYWxmb3JtZWQgSC4zMjMgcGFja2V0cy5cblxuSXMgdGhpcyByZWFjaGFibGUgYW5kIHdvcnRoIHRhcmdldGluZyBmb3IgZnV6emluZz8gQWJzb2x1dGVseSwgeWVzLiBUaGUgY29kZSByZXNpZGVzIHdpdGhpbiB0aGUgYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYCBmaWxlLiBUaGlzIG1lYW5zIHRoaXMgY29kZSBwYXRoIGlzIGludm9sdmVkIGluIGFuYWx5emluZyBpbmNvbWluZyBhbmQgb3V0Z29pbmcgSC4zMjMgdHJhZmZpYywgaW5jbHVkaW5nIFJBUywgUS45MzEsIGFuZCBILjI0NSBwYWNrZXRzLCBhbmQgYW55dGhpbmcgc2VudCB0aHJvdWdoIHJhdyBzb2NrZXRzLCBsb29wYmFjaywgdHVuLCB0YXAsIGFuZCBuZXRsaW5rIGN0IGhlbHBlci4gQW55IGZ1enppbmcgZWZmb3J0IHRhcmdldGVkIGF0IHRoaXMgd291bGQgbW9kaWZ5IHRoZSBjb2RlIGZvciB0aGUgbmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyLCB3aGljaCBpcyB2ZXJ5IGhpZ2ggdmFsdWUuIFRoZSBwcmVzZW5jZSBvZiBgV29ydGhGdXp6aW5nPXRydWVgIGNvbmZpcm1zIHRoaXMgaW5pdGlhbCBhc3Nlc3NtZW50LlxuXG5Ob3csIGxldCdzIGNvbmZpcm0gdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIGVuc3VyZSBgTkZfQ09OTlRSQUNLYCBhbmQgYE5GX0NPTk5UUkFDS19IMzIzYCBhcmUgZW5hYmxlZC4gRnVydGhlcm1vcmUsIGFjY29yZGluZyB0byB0aGUgYEtjb25maWdgIGZpbGUgaW4gdGhlIG5ldGZpbHRlciBkaXJlY3RvcnksIGBORl9DT05OVFJBQ0tfSDMyM2AgZGVwZW5kcyBvbiBgTkVURklMVEVSX0FEVkFOQ0VEYC4gQ29yZSBOZXRmaWx0ZXIgZnVuY3Rpb25hbGl0eSBkZXBlbmRzIG9uIGBJTkVUYCBhbmQgYE5FVEZJTFRFUmAuIFRoZXNlIGNvbmZpZ3MgYXJlIHN0cmFpZ2h0Zm9yd2FyZCBhbmQgY29tbW9uLlxuXG5UaGUgY3JpdGljYWwgcXVlc3Rpb24gbm93IGlzIHdoYXQgc3ltYm9scyBzaG91bGQgSSB0YXJnZXQ/IGBkZWNvZGVfZW51bWAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgcmVjZWl2ZWQgdGhlIGNoYW5nZSwgYW5kIGlzIGRlZmluZWQgaW4gdGhlIGBuZl9jb25udHJhY2tfaDMyM19hc24xLmNgLiBXaGlsZSBpdCBpcyBgc3RhdGljYCBJIGNhbiBkZWZpbml0ZWx5IHRhcmdldCBpdCwgZXNwZWNpYWxseSBpZiBJIGNhbiBwcm92aWRlIGl0cyBjYWxsZXJzIGFzIGVudHJ5IHBvaW50cy4gSSBoYXZlIHRvIGJlIGNhcmVmdWwgd2l0aCBzcGVsbGluZy4gSSdtIGdvaW5nIHRvIGxpc3Qgb3V0IGV2ZXJ5IHN5bWJvbCwgbm9uLXN0YXRpYywgaW4gdGhlIGZpbGUgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBjYWxsIGRlY29kZV9lbnVtOlxuLSBgRGVjb2RlUmFzTWVzc2FnZWBcbi0gYERlY29kZVE5MzFgXG4tIGBEZWNvZGVNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2VgXG4tIGBkZWNvZGVfZW51bWBcbi0gYHJhc19oZWxwYFxuLSBgcTkzMV9oZWxwYFxuLSBgaDI0NV9oZWxwYFxuXG5BZnRlciBjaGVja2luZyBgbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jYCBoZWxwZXIgZnVuY3Rpb25zLCBJIGhhdmUgY29uZmlybWVkIHRoZSBleGFjdCBzcGVsbGluZyBvZiB0aGVzZSBmdW5jdGlvbnM6XG4tIGBkZWNvZGVfZW51bWBcbi0gYERlY29kZVJhc01lc3NhZ2VgXG4tIGBEZWNvZGVROTMxYFxuLSBgRGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlYFxuLSBgcmFzX2hlbHBgXG4tIGBxOTMxX2hlbHBgXG4tIGBoMjQ1X2hlbHBgXG5cbkkndmUgYWxzbyB2ZXJpZmllZCB0aGF0IG9ubHkgYG5mX2Nvbm50cmFja19oMzIzX2FzbjEuY2Agd2FzIHRvdWNoZWQgaW4gdGhpcyBjb21taXQuXG5cblNvLCBmb3IgYHNldC1yZXN1bHRzYCwgSSdsbCBzdHJ1Y3R1cmUgaXQgbGlrZSB0aGlzOlxuXG4tICAgYFdvcnRoRnV6emluZ2A6IHRydWVcbi0gICBgUmVhc29uaW5nYDogVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgdG8gYGRlY29kZV9lbnVtYCBpbiB0aGUgSC4zMjMgY29ubnRyYWNrIEFTTi4xIHBhcnNlciB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzIHdoZW4gcGFyc2luZyBtYWxmb3JtZWQgSC4zMjMgbmV0d29yayBwYWNrZXRzLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIEguMzIzIGNvbm50cmFjayBoZWxwZXJzLlxuLSAgIGBGb2N1c1N5bWJvbHNgOiBcXFtcImRlY29kZVxcX2VudW1cIiwgXCJEZWNvZGVSYXNNZXNzYWdlXCIsIFwiRGVjb2RlUTkzMVwiLCBcIkRlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZVwiLCBcInJhc1xcX2hlbHBcIiwgXCJxOTMxXFxfaGVscFwiLCBcImgyNDVcXF9oZWxwXCJdXG4tICAgYEVuYWJsZUNvbmZpZ3NgOiBcXFtcIk5GXFxfQ09OTlRSQUNLXCIsIFwiTkZcXF9DT05OVFJBQ0tcXF9IMzIzXCIsIFwiTkVURklMVEVSXFxfQURWQU5DRURcIl1cblxuVGhlIGNvbmZpZ3MgYXJlIGNvcnJlY3QgYW5kIHRoZSBzeW1ib2xzIGFyZSB0aGUgZXhhY3QgbmFtZXMuIE9rYXksIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzExOCwiT3V0cHV0VG9rZW5zIjoxNzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTQ4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDU6NDY6MTQuMTE0NzQ0MDdaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzIzMzcwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfSDMyM1wiLFxuICAgIFwiTkVURklMVEVSX0FEVkFOQ0VEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGVjb2RlX2VudW1cIixcbiAgICBcIkRlY29kZVJhc01lc3NhZ2VcIixcbiAgICBcIkRlY29kZVE5MzFcIixcbiAgICBcIkRlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZVwiLFxuICAgIFwicmFzX2hlbHBcIixcbiAgICBcInE5MzFfaGVscFwiLFxuICAgIFwiaDI0NV9oZWxwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG1pc3NpbmcgYm91bmRhcnkgY2hlY2sgaW4gZGVjb2RlX2VudW0oKSBpbiB0aGUgTmV0ZmlsdGVyIEguMzIzIGNvbm5lY3Rpb24gdHJhY2tpbmcgQVNOLjEgZGVjb2RlciB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzIHdoZW4gcmVhZGluZyBiaXRzIGZyb20gbWFsZm9ybWVkIHBhY2tldHMuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBuZXR3b3JrIHBhY2tldCBwcm9jZXNzaW5nIGhhbmRsZWQgYnkgdGhlIEguMzIzIGNvbm50cmFjayBoZWxwZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfSDMyM1wiLFxuICAgIFwiTkVURklMVEVSX0FEVkFOQ0VEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGVjb2RlX2VudW1cIixcbiAgICBcIkRlY29kZVJhc01lc3NhZ2VcIixcbiAgICBcIkRlY29kZVE5MzFcIixcbiAgICBcIkRlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZVwiLFxuICAgIFwicmFzX2hlbHBcIixcbiAgICBcInE5MzFfaGVscFwiLFxuICAgIFwiaDI0NV9oZWxwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG1pc3NpbmcgYm91bmRhcnkgY2hlY2sgaW4gZGVjb2RlX2VudW0oKSBpbiB0aGUgTmV0ZmlsdGVyIEguMzIzIGNvbm5lY3Rpb24gdHJhY2tpbmcgQVNOLjEgZGVjb2RlciB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzIHdoZW4gcmVhZGluZyBiaXRzIGZyb20gbWFsZm9ybWVkIHBhY2tldHMuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBuZXR3b3JrIHBhY2tldCBwcm9jZXNzaW5nIGhhbmRsZWQgYnkgdGhlIEguMzIzIGNvbm50cmFjayBoZWxwZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA1OjQ2OjE0LjE5Nzk4NTczOVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUyNTYzMzYyMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNTo0NjoxNC4xOTg2NzY3MDhaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0NTI1NTY0MDI2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG1pc3NpbmcgYm91bmRhcnkgY2hlY2sgYG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDEpYCB0byBgZGVjb2RlX2VudW0oKWAgYmVmb3JlIHJlYWRpbmcgYSBiaXQgZnJvbSB0aGUgQVNOLjEgYml0c3RyZWFtLiBQcmlvciB0byB0aGlzIGZpeCwgaWYgYGJzLVxcdTAwM2VjdXJgIHdhcyBhdCBgYnMtXFx1MDAzZWVuZGAsIGBnZXRfYml0KGJzKWAgd291bGQgcGVyZm9ybSBhbiBvdXQtb2YtYm91bmRzIHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBwYWNrZXQgZGF0YSBidWZmZXIuIFxcblxcbk91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIGFyZSBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMgZGlyZWN0bHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBwYWRkaW5nIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTgxOThkNjgzZWY0YzgyNjQ3MzQwZTA0YTg0YWU2NDhlY2NhMTc4MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMDU6NDU6MTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jXG5pbmRleCA2ODMwYzlkYTM1MDdjLi5iYTZjZTFmMDRlMWVkIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jXG5AQCAtMzYzLDYgKzM2Myw4IEBAIHN0YXRpYyBpbnQgZGVjb2RlX2VudW0oc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuIHtcbiBcdFBSSU5UKFwiJSpzJXNcXG5cIiwgbGV2ZWwgKiBUQUJfU0laRSwgXCIgXCIsIGYtXHUwMDNlbmFtZSk7XG4gXG4rXHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgMSkpXG4rXHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuIFx0aWYgKChmLVx1MDAzZWF0dHIgXHUwMDI2IEVYVCkgXHUwMDI2XHUwMDI2IGdldF9iaXQoYnMpKSB7XG4gXHRcdElOQ19CSVRTKGJzLCA3KTtcbiBcdH0gZWxzZSB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNTo0NjoxNC4xOTg2Nzc5MTlaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTE0MzYwMjIyMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBILjMyMyBBU04uMSBDb25udHJhY2sgQ29kZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGlzLiBUaGUgcGF0Y2ggaW4gcXVlc3Rpb24gaW52b2x2ZXMgdGhlIEguMzIzIEFTTi4xIGNvbm50cmFjayBjb2RlLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXQgaW50aW1hdGVseS4gTXkgZmlyc3Qgc3RlcCBpcyB0byB6ZXJvIGluIG9uIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AuIEknbGwgdXNlIGByZWFkLWZpbGVgIG5vdyB0byBwdWxsIHRoYXQgc3BlY2lmaWMgZmlsZSBpbnRvIHZpZXcgYW5kIEkgbmVlZCB0byBxdWlja2x5IHNjYW4gdG8gdGhlIGFyZWEgYXJvdW5kIGxpbmUgMzYzLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb250ZXh0dWFsIGZvdW5kYXRpb24gSSBuZWVkIHRvIHByb3Blcmx5IGdyYXNwIHRoZSBwYXRjaCdzIHB1cnBvc2UgYW5kIGl0cyBpbXBsaWNhdGlvbnMuIExldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHRoZXJlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMzksIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA1OjQ2OjI1LjYzNDcwNDU0MVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDUzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzUwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzUwOlxcdFxcdFxcdElOQ19CSVRTKGJzLCBmLVxcdTAwM2Vzeik7XFxuIDM1MTpcXHRcXHRcXHRicmVhaztcXG4gMzUyOlxcdFxcdH1cXG4gMzUzOlxcdFxcbiAzNTQ6XFx0XFx0UFJJTlQoXFxcIlxcXFxuXFxcIik7XFxuIDM1NTpcXHRcXG4gMzU2OlxcdFxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAwKSlcXG4gMzU3OlxcdFxcdFxcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xcbiAzNTg6XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfTk9ORTtcXG4gMzU5OlxcdH1cXG4gMzYwOlxcdFxcbiAzNjE6XFx0c3RhdGljIGludCBkZWNvZGVfZW51bShzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXFxuIDM2MjpcXHQgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcXG4gMzYzOlxcdHtcXG4gMzY0OlxcdFxcdFBSSU5UKFxcXCIlKnMlc1xcXFxuXFxcIiwgbGV2ZWwgKiBUQUJfU0laRSwgXFxcIiBcXFwiLCBmLVxcdTAwM2VuYW1lKTtcXG4gMzY1OlxcdFxcbiAzNjY6XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDEpKVxcbiAzNjc6XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuIDM2ODpcXHRcXHRpZiAoKGYtXFx1MDAzZWF0dHIgXFx1MDAyNiBFWFQpIFxcdTAwMjZcXHUwMDI2IGdldF9iaXQoYnMpKSB7XFxuIDM2OTpcXHRcXHRcXHRJTkNfQklUUyhicywgNyk7XFxuIDM3MDpcXHRcXHR9IGVsc2Uge1xcbiAzNzE6XFx0XFx0XFx0SU5DX0JJVFMoYnMsIGYtXFx1MDAzZXN6KTtcXG4gMzcyOlxcdFxcdH1cXG4gMzczOlxcdFxcbiAzNzQ6XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDApKVxcbiAzNzU6XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuIDM3NjpcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9OT05FO1xcbiAzNzc6XFx0fVxcbiAzNzg6XFx0XFxuIDM3OTpcXHRzdGF0aWMgaW50IGRlY29kZV9iaXRzdHIoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxcbiAzODA6XFx0ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcXG4gMzgxOlxcdHtcXG4gMzgyOlxcdFxcdHVuc2lnbmVkIGludCBsZW47XFxuIDM4MzpcXHRcXG4gMzg0OlxcdFxcdFBSSU5UKFxcXCIlKnMlc1xcXFxuXFxcIiwgbGV2ZWwgKiBUQUJfU0laRSwgXFxcIiBcXFwiLCBmLVxcdTAwM2VuYW1lKTtcXG4gMzg1OlxcdFxcbiAzODY6XFx0XFx0QllURV9BTElHTihicyk7XFxuIDM4NzpcXHRcXHRzd2l0Y2ggKGYtXFx1MDAzZXN6KSB7XFxuIDM4ODpcXHRcXHRjYXNlIEZJWEQ6XFx0XFx0LyogZml4ZWQgbGVuZ3RoIFxcdTAwM2UgMTYgKi9cXG4gMzg5OlxcdFxcdFxcdGxlbiA9IGYtXFx1MDAzZWxiO1xcbiAzOTA6XFx0XFx0XFx0YnJlYWs7XFxuIDM5MTpcXHRcXHRjYXNlIFdPUkQ6XFx0XFx0LyogMi1ieXRlIGxlbmd0aCAqL1xcbiAzOTI6XFx0XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDIsIDApKVxcbiAzOTM6XFx0XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuIDM5NDpcXHRcXHRcXHRsZW4gPSAoKmJzLVxcdTAwM2VjdXIrKykgXFx1MDAzY1xcdTAwM2MgODtcXG4gMzk1OlxcdFxcdFxcdGxlbiArPSAoKmJzLVxcdTAwM2VjdXIrKykgKyBmLVxcdTAwM2VsYjtcXG4gMzk2OlxcdFxcdFxcdGJyZWFrO1xcbiAzOTc6XFx0XFx0Y2FzZSBTRU1JOlxcbiAzOTg6XFx0XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDIsIDApKVxcbiAzOTk6XFx0XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA1OjQ2OjI1LjYzNDgxMjMwMVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODQzOTc1NjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIGl0OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgQml0c3RyZWFtIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQncyBoYXBwZW5pbmcuIEZpcnN0LCBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlc2UgZm91ciB0aGluZ3M6IGBuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5YCwgYGdldF9iaXRgLCBgSU5DX0JJVFNgLCBhbmQgYHN0cnVjdCBiaXRzdHJgLiBUaGVzZSBuYW1lcyBzdWdnZXN0IHRoYXQgdGhleSdyZSBhbGwgcmVsYXRlZCB0byBoYW5kbGluZyBiaXRzdHJlYW1zLCBsaWtlbHkgaW4gdGhlIGNvbnRleHQgb2YgSC4zMjMgKE5ldHdvcmsgRmlsZSBTeXN0ZW0/KS5cblxuSSBrbm93IHRoaXMgaXMgd2hlcmUgdGhlIGludGVyZXN0aW5nIHN0dWZmIGlzLiBMZXQgbWUgYmFjayB1cCBhIGJpdCBhbmQgc2VlIGhvdyB0aGVzZSB0aGluZ3MgYXJlIGRlZmluZWQgYW5kIHVzZWQuIEknbGwgcmVhZCBlYXJsaWVyIGluIHRoZSBmaWxlIHRvIGdldCBzb21lIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIHN0cnVjdHVyZSBhbmQgb3BlcmF0aW9ucywgd2hlcmUgdGhlIGJvdW5kYXJpZXMgYXJlIGRyYXduLCBhbmQgaG93IHRoZSBiaXRzIGFyZSBwcm9jZXNzZWQuIFRoaXMgc2hvdWxkIGhlbHAgbWUgcHV0IGFsbCB0aGUgcGllY2VzIHRvZ2V0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjAzLCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNTo0NjoyNy40Nzg3OTA3NzFaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiBCRVIgYW5kIFBFUiBkZWNvZGluZyBsaWJyYXJ5IGZvciBILjMyMyBjb25udHJhY2svTkFUIG1vZHVsZS5cXG4gICA0OlxcdCAqXFxuICAgNTpcXHQgKiBDb3B5cmlnaHQgKGMpIDIwMDYgYnkgSmluZyBNaW4gWmhhbyBcXHUwMDNjemhhb2ppbmdtaW5AdXNlcnMuc291cmNlZm9yZ2UubmV0XFx1MDAzZVxcbiAgIDY6XFx0ICpcXG4gICA3OlxcdCAqIFNlZSBuZl9jb25udHJhY2tfaGVscGVyX2gzMjNfYXNuMS5oIGZvciBkZXRhaWxzLlxcbiAgIDg6XFx0ICovXFxuICAgOTpcXHRcXG4gIDEwOlxcdCNpZmRlZiBfX0tFUk5FTF9fXFxuICAxMTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuICAxMjpcXHQjZWxzZVxcbiAgMTM6XFx0I2luY2x1ZGUgXFx1MDAzY3N0ZGlvLmhcXHUwMDNlXFxuICAxNDpcXHQjZW5kaWZcXG4gIDE1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5oXFx1MDAzZVxcbiAgMTY6XFx0XFxuICAxNzpcXHQvKiBUcmFjZSBGbGFnICovXFxuICAxODpcXHQjaWZuZGVmIEgzMjNfVFJBQ0VcXG4gIDE5OlxcdCNkZWZpbmUgSDMyM19UUkFDRSAwXFxuICAyMDpcXHQjZW5kaWZcXG4gIDIxOlxcdFxcbiAgMjI6XFx0I2lmIEgzMjNfVFJBQ0VcXG4gIDIzOlxcdCNkZWZpbmUgVEFCX1NJWkUgNFxcbiAgMjQ6XFx0I2lmZGVmIF9fS0VSTkVMX19cXG4gIDI1OlxcdCNkZWZpbmUgUFJJTlQgcHJpbnRrXFxuICAyNjpcXHQjZWxzZVxcbiAgMjc6XFx0I2RlZmluZSBQUklOVCBwcmludGZcXG4gIDI4OlxcdCNlbmRpZlxcbiAgMjk6XFx0I2RlZmluZSBGTkFNRShuYW1lKSBuYW1lLFxcbiAgMzA6XFx0I2Vsc2VcXG4gIDMxOlxcdCNkZWZpbmUgUFJJTlQoZm10LCBhcmdzLi4uKVxcbiAgMzI6XFx0I2RlZmluZSBGTkFNRShuYW1lKVxcbiAgMzM6XFx0I2VuZGlmXFxuICAzNDpcXHRcXG4gIDM1OlxcdC8qIEFTTi4xIFR5cGVzICovXFxuICAzNjpcXHQjZGVmaW5lIE5VTCAwXFxuICAzNzpcXHQjZGVmaW5lIEJPT0wgMVxcbiAgMzg6XFx0I2RlZmluZSBPSUQgMlxcbiAgMzk6XFx0I2RlZmluZSBJTlQgM1xcbiAgNDA6XFx0I2RlZmluZSBFTlVNIDRcXG4gIDQxOlxcdCNkZWZpbmUgQklUU1RSIDVcXG4gIDQyOlxcdCNkZWZpbmUgTlVNU1RSIDZcXG4gIDQzOlxcdCNkZWZpbmUgTlVNREdUIDZcXG4gIDQ0OlxcdCNkZWZpbmUgVEJDRFNUUiA2XFxuICA0NTpcXHQjZGVmaW5lIE9DVFNUUiA3XFxuICA0NjpcXHQjZGVmaW5lIFBSVFNUUiA3XFxuICA0NzpcXHQjZGVmaW5lIElBNVNUUiA3XFxuICA0ODpcXHQjZGVmaW5lIEdFTlNUUiA3XFxuICA0OTpcXHQjZGVmaW5lIEJNUFNUUiA4XFxuICA1MDpcXHQjZGVmaW5lIFNFUSA5XFxuICA1MTpcXHQjZGVmaW5lIFNFVCA5XFxuICA1MjpcXHQjZGVmaW5lIFNFUU9GIDEwXFxuICA1MzpcXHQjZGVmaW5lIFNFVE9GIDEwXFxuICA1NDpcXHQjZGVmaW5lIENIT0lDRSAxMVxcbiAgNTU6XFx0XFxuICA1NjpcXHQvKiBDb25zdHJhaW50IFR5cGVzICovXFxuICA1NzpcXHQjZGVmaW5lIEZJWEQgMFxcbiAgNTg6XFx0LyogI2RlZmluZSBCSVRTIDEtOCAqL1xcbiAgNTk6XFx0I2RlZmluZSBCWVRFIDlcXG4gIDYwOlxcdCNkZWZpbmUgV09SRCAxMFxcbiAgNjE6XFx0I2RlZmluZSBDT05TIDExXFxuICA2MjpcXHQjZGVmaW5lIFNFTUkgMTJcXG4gIDYzOlxcdCNkZWZpbmUgVU5DTyAxM1xcbiAgNjQ6XFx0XFxuICA2NTpcXHQvKiBBU04uMSBUeXBlIEF0dHJpYnV0ZXMgKi9cXG4gIDY2OlxcdCNkZWZpbmUgU0tJUCAwXFxuICA2NzpcXHQjZGVmaW5lIFNUT1AgMVxcbiAgNjg6XFx0I2RlZmluZSBERUNPREUgMlxcbiAgNjk6XFx0I2RlZmluZSBFWFQgNFxcbiAgNzA6XFx0I2RlZmluZSBPUEVOIDhcXG4gIDcxOlxcdCNkZWZpbmUgT1BUIDE2XFxuICA3MjpcXHRcXG4gIDczOlxcdFxcbiAgNzQ6XFx0LyogQVNOLjEgRmllbGQgU3RydWN0dXJlICovXFxuICA3NTpcXHR0eXBlZGVmIHN0cnVjdCBmaWVsZF90IHtcXG4gIDc2OlxcdCNpZiBIMzIzX1RSQUNFXFxuICA3NzpcXHRcXHRjaGFyICpuYW1lO1xcbiAgNzg6XFx0I2VuZGlmXFxuICA3OTpcXHRcXHR1bnNpZ25lZCBjaGFyIHR5cGU7XFxuICA4MDpcXHRcXHR1bnNpZ25lZCBjaGFyIHN6O1xcbiAgODE6XFx0XFx0dW5zaWduZWQgY2hhciBsYjtcXG4gIDgyOlxcdFxcdHVuc2lnbmVkIGNoYXIgdWI7XFxuICA4MzpcXHRcXHR1bnNpZ25lZCBzaG9ydCBhdHRyO1xcbiAgODQ6XFx0XFx0dW5zaWduZWQgc2hvcnQgb2Zmc2V0O1xcbiAgODU6XFx0XFx0Y29uc3Qgc3RydWN0IGZpZWxkX3QgKmZpZWxkcztcXG4gIDg2OlxcdH0gZmllbGRfdDtcXG4gIDg3OlxcdFxcbiAgODg6XFx0LyogQml0IFN0cmVhbSAqL1xcbiAgODk6XFx0c3RydWN0IGJpdHN0ciB7XFxuICA5MDpcXHRcXHR1bnNpZ25lZCBjaGFyICpidWY7XFxuICA5MTpcXHRcXHR1bnNpZ25lZCBjaGFyICpiZWc7XFxuICA5MjpcXHRcXHR1bnNpZ25lZCBjaGFyICplbmQ7XFxuICA5MzpcXHRcXHR1bnNpZ25lZCBjaGFyICpjdXI7XFxuICA5NDpcXHRcXHR1bnNpZ25lZCBpbnQgYml0O1xcbiAgOTU6XFx0fTtcXG4gIDk2OlxcdFxcbiAgOTc6XFx0LyogVG9vbCBGdW5jdGlvbnMgKi9cXG4gIDk4OlxcdCNkZWZpbmUgSU5DX0JJVChicykgaWYoKCsrKGJzKS1cXHUwMDNlYml0KVxcdTAwM2U3KXsoYnMpLVxcdTAwM2VjdXIrKzsoYnMpLVxcdTAwM2ViaXQ9MDt9XFxuICA5OTpcXHQjZGVmaW5lIElOQ19CSVRTKGJzLGIpIGlmKCgoYnMpLVxcdTAwM2ViaXQrPShiKSlcXHUwMDNlNyl7KGJzKS1cXHUwMDNlY3VyKz0oYnMpLVxcdTAwM2ViaXRcXHUwMDNlXFx1MDAzZTM7KGJzKS1cXHUwMDNlYml0XFx1MDAyNj03O31cXG4gMTAwOlxcdCNkZWZpbmUgQllURV9BTElHTihicykgaWYoKGJzKS1cXHUwMDNlYml0KXsoYnMpLVxcdTAwM2VjdXIrKzsoYnMpLVxcdTAwM2ViaXQ9MDt9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA1OjQ2OjI3LjQ3ODkxNzY4MVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjU2NDk2MTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYCBmb3IgQm91bmRhcnkgQ29uZGl0aW9ucyoqXG5cbk9rYXksIEkgbmVlZCB0byB6ZXJvIGluIG9uIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXR5IHdpdGhpbiB0aGUgSC4zMjMgY29ubmVjdGlvbiB0cmFja2luZyBjb2RlLiBNeSBodW5jaCBpcyB0aGF0IGVycm9ycyBvciBlZGdlIGNhc2VzIGluIGhvdyB0aGUgQVNOLjEgZGF0YSBpcyBwYXJzZWQgbWlnaHQgYmUgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUgYm91bmRhcnkgY29uZGl0aW9ucyB3aGVyZSB0aGUgZGF0YSBjb3VsZCBiZSBtYWxmb3JtZWQgb3IgbWFuaXB1bGF0ZWQuIExldCdzIGRpZyBpbnRvIHRoZSBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNgIGZpbGUuIEknbSBnb2luZyB0byBmb2N1cyBvbiBsaW5lcyAxMDEgdGhyb3VnaCAyMDAsIGFzIHRoaXMgc2hvdWxkIGNvbnRhaW4gdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyBJJ20gaW50ZXJlc3RlZCBpbi4gSSBrbm93IHRoYXQgdGhlIGBuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5YCBmdW5jdGlvbiBzaG91bGQgaGFuZGxlIHNvbWUgb2YgdGhlc2UgYm91bmRhcnkgaXNzdWVzLCBzbyBJJ2xsIHNlZSBob3cgcm9idXN0IGl0IGlzLiBXaGlsZSBJJ20gdGhlcmUsIEkgc2hvdWxkIGFsc28gY2hlY2sgb3V0IGBnZXRfYml0YCwgYXMgdGhpcyBsb3ctbGV2ZWwgYml0IG1hbmlwdWxhdGlvbiBpcyBvZnRlbiBhIHNvdXJjZSBvZiBzdWJ0bGUgYnVncyB3aGVuIGRlYWxpbmcgd2l0aCBBU04uMSBkYXRhLiBNeSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGhhbmRsZSBpbnZhbGlkIG9yIHVuZXhwZWN0ZWQgZGF0YSBhbmQgc2VlIGlmIEkgY2FuIGZpbmQgYW4gZXhwbG9pdGFibGUgZmxhdywgb3IgaWYgdGhlcmUgaXMgcm9vbSBmb3IgaW1wcm92ZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MjAsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA1OjQ2OjI5LjczNTQxNzc2NFoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDIzMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTAxLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAxOlxcdHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2xlbihzdHJ1Y3QgYml0c3RyICpicyk7XFxuIDEwMjpcXHRzdGF0aWMgdW5zaWduZWQgaW50IGdldF9iaXQoc3RydWN0IGJpdHN0ciAqYnMpO1xcbiAxMDM6XFx0c3RhdGljIHVuc2lnbmVkIGludCBnZXRfYml0cyhzdHJ1Y3QgYml0c3RyICpicywgdW5zaWduZWQgaW50IGIpO1xcbiAxMDQ6XFx0c3RhdGljIHVuc2lnbmVkIGludCBnZXRfYml0bWFwKHN0cnVjdCBiaXRzdHIgKmJzLCB1bnNpZ25lZCBpbnQgYik7XFxuIDEwNTpcXHRzdGF0aWMgdW5zaWduZWQgaW50IGdldF91aW50KHN0cnVjdCBiaXRzdHIgKmJzLCBpbnQgYik7XFxuIDEwNjpcXHRcXG4gMTA3OlxcdC8qIERlY29kZXIgRnVuY3Rpb25zICovXFxuIDEwODpcXHRzdGF0aWMgaW50IGRlY29kZV9udWwoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLCBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpO1xcbiAxMDk6XFx0c3RhdGljIGludCBkZWNvZGVfYm9vbChzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XFxuIDExMDpcXHRzdGF0aWMgaW50IGRlY29kZV9vaWQoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLCBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpO1xcbiAxMTE6XFx0c3RhdGljIGludCBkZWNvZGVfaW50KHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcXG4gMTEyOlxcdHN0YXRpYyBpbnQgZGVjb2RlX2VudW0oc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLCBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpO1xcbiAxMTM6XFx0c3RhdGljIGludCBkZWNvZGVfYml0c3RyKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcXG4gMTE0OlxcdHN0YXRpYyBpbnQgZGVjb2RlX251bXN0cihzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XFxuIDExNTpcXHRzdGF0aWMgaW50IGRlY29kZV9vY3RzdHIoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLCBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpO1xcbiAxMTY6XFx0c3RhdGljIGludCBkZWNvZGVfYm1wc3RyKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcXG4gMTE3OlxcdHN0YXRpYyBpbnQgZGVjb2RlX3NlcShzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XFxuIDExODpcXHRzdGF0aWMgaW50IGRlY29kZV9zZXFvZihzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XFxuIDExOTpcXHRzdGF0aWMgaW50IGRlY29kZV9jaG9pY2Uoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLCBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpO1xcbiAxMjA6XFx0XFxuIDEyMTpcXHQvKiBEZWNvZGVyIEZ1bmN0aW9ucyBWZWN0b3IgKi9cXG4gMTIyOlxcdHR5cGVkZWYgaW50ICgqZGVjb2Rlcl90KShzdHJ1Y3QgYml0c3RyICosIGNvbnN0IHN0cnVjdCBmaWVsZF90ICosIGNoYXIgKiwgaW50KTtcXG4gMTIzOlxcdHN0YXRpYyBjb25zdCBkZWNvZGVyX3QgRGVjb2RlcnNbXSA9IHtcXG4gMTI0OlxcdFxcdGRlY29kZV9udWwsXFxuIDEyNTpcXHRcXHRkZWNvZGVfYm9vbCxcXG4gMTI2OlxcdFxcdGRlY29kZV9vaWQsXFxuIDEyNzpcXHRcXHRkZWNvZGVfaW50LFxcbiAxMjg6XFx0XFx0ZGVjb2RlX2VudW0sXFxuIDEyOTpcXHRcXHRkZWNvZGVfYml0c3RyLFxcbiAxMzA6XFx0XFx0ZGVjb2RlX251bXN0cixcXG4gMTMxOlxcdFxcdGRlY29kZV9vY3RzdHIsXFxuIDEzMjpcXHRcXHRkZWNvZGVfYm1wc3RyLFxcbiAxMzM6XFx0XFx0ZGVjb2RlX3NlcSxcXG4gMTM0OlxcdFxcdGRlY29kZV9zZXFvZixcXG4gMTM1OlxcdFxcdGRlY29kZV9jaG9pY2UsXFxuIDEzNjpcXHR9O1xcbiAxMzc6XFx0XFxuIDEzODpcXHQvKlxcbiAxMzk6XFx0ICogSC4zMjMgVHlwZXNcXG4gMTQwOlxcdCAqL1xcbiAxNDE6XFx0I2luY2x1ZGUgXFxcIm5mX2Nvbm50cmFja19oMzIzX3R5cGVzLmNcXFwiXFxuIDE0MjpcXHRcXG4gMTQzOlxcdC8qXFxuIDE0NDpcXHQgKiBGdW5jdGlvbnNcXG4gMTQ1OlxcdCAqL1xcbiAxNDY6XFx0XFxuIDE0NzpcXHQvKiBBc3N1bWUgYnMgaXMgYWxpZ25lZCBcXHUwMDI2XFx1MDAyNiB2IFxcdTAwM2MgMTYzODQgKi9cXG4gMTQ4OlxcdHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2xlbihzdHJ1Y3QgYml0c3RyICpicylcXG4gMTQ5OlxcdHtcXG4gMTUwOlxcdFxcdHVuc2lnbmVkIGludCB2O1xcbiAxNTE6XFx0XFxuIDE1MjpcXHRcXHR2ID0gKmJzLVxcdTAwM2VjdXIrKztcXG4gMTUzOlxcdFxcbiAxNTQ6XFx0XFx0aWYgKHYgXFx1MDAyNiAweDgwKSB7XFxuIDE1NTpcXHRcXHRcXHR2IFxcdTAwMjY9IDB4M2Y7XFxuIDE1NjpcXHRcXHRcXHR2IFxcdTAwM2NcXHUwMDNjPSA4O1xcbiAxNTc6XFx0XFx0XFx0diArPSAqYnMtXFx1MDAzZWN1cisrO1xcbiAxNTg6XFx0XFx0fVxcbiAxNTk6XFx0XFxuIDE2MDpcXHRcXHRyZXR1cm4gdjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDU6NDY6MjkuNzM1NTIxNjM0WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NTkzNzAzNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucy4uLlxuXG4qKkRlbHZpbmcgaW50byB0aGUgSC4zMjMgQVNOLjEgQ29ubnRyYWNrIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGhhbmRsaW5nIG9mIEguMzIzIHRyYWZmaWMgd2l0aGluIHRoZSBjb25udHJhY2sgc3lzdGVtLiBTcGVjaWZpY2FsbHksIEknbSBmb2N1c2luZyBvbiBgZ2V0X2JpdGAgYW5kIGBuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5YC5cblxuYGdldF9iaXRgIOKAkyBpdCdzIGEgYmFzaWMgYml0LWZpZWxkIHJldHJpZXZhbCBmdW5jdGlvbiwgbm8gZG91YnQuIFByb2JhYmx5IHVzZWQgdG8gcGFyc2UgZW5jb2RlZCBBU04uMSBzdHJ1Y3R1cmVzIGFuZCBleHRyYWN0IGluZGl2aWR1YWwgZmxhZ3Mgb3IgdmFsdWVzIHdpdGhpbiBhIGxhcmdlciBmaWVsZC4gSeKAmWxsIGJldCBpdCdzIGltcGxlbWVudGVkIGVmZmljaWVudGx5LCBwZXJoYXBzIHdpdGggc29tZSBwcmUtY2FsY3VsYXRlZCBsb29rdXAgdGFibGVzIG9yIGJpdC1tYXNraW5nIG9wdGltaXphdGlvbiB0ZWNobmlxdWVzLiBJIHNob3VsZCByZXZpZXcgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMuXG5cblRoZW4gdGhlcmXigJlzIGBuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5YC4gVGhpcyBsb29rcyBsaWtlIHRoZSBjcnVjaWFsIGZ1bmN0aW9uIGZvciBtYW5hZ2luZyBlcnJvciBjb25kaXRpb25zLiBHaXZlbiB0aGUgaW5oZXJlbnQgY29tcGxleGl0eSBhbmQgc29tZXRpbWVzIGZsYWt5IG5hdHVyZSBvZiBILjMyMyBzaWduYWxpbmcsIGVycm9yIGhhbmRsaW5nIGlzIHBhcmFtb3VudC4gSSdtIGd1ZXNzaW5nIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGRldGVjdGluZyBhbmQgZ3JhY2VmdWxseSBoYW5kbGluZyBtYWxmb3JtZWQgb3IgaW52YWxpZCBBU04uMSBkYXRhLCBwb3RlbnRpYWxseSB0cmlnZ2VyZWQgYnkgbWFsaWNpb3VzIHBhY2tldHMgb3IgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24gYnVncy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHN0cmF0ZWd5IGZvciBwcmV2ZW50aW5nIGRlbmlhbC1vZi1zZXJ2aWNlIGF0dGFja3MgYnkgY2FyZWZ1bGx5IGJvdW5kaW5nIHJlc291cmNlIGNvbnN1bXB0aW9uIGluIHRoZSBmYWNlIG9mIGJhZCBpbnB1dC4gSSB3b25kZXIgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBvdmVyYWxsIGNvbm50cmFjayBmcmFtZXdvcmsg4oCTIGRvZXMgaXQgbWFyayB0aGUgY29ubmVjdGlvbiBhcyBpbnZhbGlkLCBsb2cgdGhlIGV2ZW50LCBvciBwb3NzaWJseSB0YWtlIG1vcmUgYWdncmVzc2l2ZSBhY3Rpb24gbGlrZSBkcm9wcGluZyB0aGUgb2ZmZW5kaW5nIHBhY2tldCBpbW1lZGlhdGVseT8gSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBlc3BlY2lhbGx5IGJ1ZmZlciBvdmVyZmxvd3Mgb3IgaW50ZWdlciBvdmVyZmxvd3MsIHRvIG1ha2Ugc3VyZSB0aGlzIGNvZGUgaXMgcm9idXN0IGFnYWluc3QgcG90ZW50aWFsIGF0dGFja3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMzgsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA1OjQ2OjMyLjU5NDg5NDcwNloiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDU2MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTYxLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTYxOlxcdH1cXG4gMTYyOlxcdFxcbiAxNjM6XFx0c3RhdGljIGludCBuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KHN0cnVjdCBiaXRzdHIgKmJzLCBzaXplX3QgYnl0ZXMsIHNpemVfdCBiaXRzKVxcbiAxNjQ6XFx0e1xcbiAxNjU6XFx0XFx0Yml0cyArPSBicy1cXHUwMDNlYml0O1xcbiAxNjY6XFx0XFx0Ynl0ZXMgKz0gYml0cyAvIEJJVFNfUEVSX0JZVEU7XFxuIDE2NzpcXHRcXHRpZiAoYml0cyAlIEJJVFNfUEVSX0JZVEUgXFx1MDAzZSAwKVxcbiAxNjg6XFx0XFx0XFx0Ynl0ZXMrKztcXG4gMTY5OlxcdFxcbiAxNzA6XFx0XFx0aWYgKGJzLVxcdTAwM2VjdXIgKyBieXRlcyBcXHUwMDNlIGJzLVxcdTAwM2VlbmQpXFxuIDE3MTpcXHRcXHRcXHRyZXR1cm4gMTtcXG4gMTcyOlxcdFxcbiAxNzM6XFx0XFx0cmV0dXJuIDA7XFxuIDE3NDpcXHR9XFxuIDE3NTpcXHRcXG4gMTc2OlxcdHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2JpdChzdHJ1Y3QgYml0c3RyICpicylcXG4gMTc3OlxcdHtcXG4gMTc4OlxcdFxcdHVuc2lnbmVkIGludCBiID0gKCpicy1cXHUwMDNlY3VyKSBcXHUwMDI2ICgweDgwIFxcdTAwM2VcXHUwMDNlIGJzLVxcdTAwM2ViaXQpO1xcbiAxNzk6XFx0XFxuIDE4MDpcXHRcXHRJTkNfQklUKGJzKTtcXG4gMTgxOlxcdFxcbiAxODI6XFx0XFx0cmV0dXJuIGI7XFxuIDE4MzpcXHR9XFxuIDE4NDpcXHRcXG4gMTg1OlxcdC8qIEFzc3VtZSBiIFxcdTAwM2M9IDggKi9cXG4gMTg2OlxcdHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2JpdHMoc3RydWN0IGJpdHN0ciAqYnMsIHVuc2lnbmVkIGludCBiKVxcbiAxODc6XFx0e1xcbiAxODg6XFx0XFx0dW5zaWduZWQgaW50IHYsIGw7XFxuIDE4OTpcXHRcXG4gMTkwOlxcdFxcdHYgPSAoKmJzLVxcdTAwM2VjdXIpIFxcdTAwMjYgKDB4ZmZVIFxcdTAwM2VcXHUwMDNlIGJzLVxcdTAwM2ViaXQpO1xcbiAxOTE6XFx0XFx0bCA9IGIgKyBicy1cXHUwMDNlYml0O1xcbiAxOTI6XFx0XFxuIDE5MzpcXHRcXHRpZiAobCBcXHUwMDNjIDgpIHtcXG4gMTk0OlxcdFxcdFxcdHYgXFx1MDAzZVxcdTAwM2U9IDggLSBsO1xcbiAxOTU6XFx0XFx0XFx0YnMtXFx1MDAzZWJpdCA9IGw7XFxuIDE5NjpcXHRcXHR9IGVsc2UgaWYgKGwgPT0gOCkge1xcbiAxOTc6XFx0XFx0XFx0YnMtXFx1MDAzZWN1cisrO1xcbiAxOTg6XFx0XFx0XFx0YnMtXFx1MDAzZWJpdCA9IDA7XFxuIDE5OTpcXHRcXHR9IGVsc2Uge1xcdFxcdC8qIGwgXFx1MDAzZSA4ICovXFxuIDIwMDpcXHRcXG4gMjAxOlxcdFxcdFxcdHYgXFx1MDAzY1xcdTAwM2M9IDg7XFxuIDIwMjpcXHRcXHRcXHR2ICs9ICooKyticy1cXHUwMDNlY3VyKTtcXG4gMjAzOlxcdFxcdFxcdHYgXFx1MDAzZVxcdTAwM2U9IDE2IC0gbDtcXG4gMjA0OlxcdFxcdFxcdGJzLVxcdTAwM2ViaXQgPSBsIC0gODtcXG4gMjA1OlxcdFxcdH1cXG4gMjA2OlxcdFxcbiAyMDc6XFx0XFx0cmV0dXJuIHY7XFxuIDIwODpcXHR9XFxuIDIwOTpcXHRcXG4gMjEwOlxcdC8qIEFzc3VtZSBiIFxcdTAwM2M9IDMyICovXFxuIDIxMTpcXHRzdGF0aWMgdW5zaWduZWQgaW50IGdldF9iaXRtYXAoc3RydWN0IGJpdHN0ciAqYnMsIHVuc2lnbmVkIGludCBiKVxcbiAyMTI6XFx0e1xcbiAyMTM6XFx0XFx0dW5zaWduZWQgaW50IHYsIGwsIHNoaWZ0LCBieXRlcztcXG4gMjE0OlxcdFxcbiAyMTU6XFx0XFx0aWYgKCFiKVxcbiAyMTY6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDIxNzpcXHRcXG4gMjE4OlxcdFxcdGwgPSBicy1cXHUwMDNlYml0ICsgYjtcXG4gMjE5OlxcdFxcbiAyMjA6XFx0XFx0aWYgKGwgXFx1MDAzYyA4KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA1OjQ2OjMyLjU5NTAwNjc2NloiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTgwNjE4MTQzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBkZWNvZGVfZW51bWAgRnVuY3Rpb24gYW5kIFBvdGVudGlhbCBWdWxuZXJhYmlsaXRpZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgYGRlY29kZV9lbnVtYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2UgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIGFueSBpc3N1ZXMuICBJdCBhcHBlYXJzIHRvIGJlIHBhcnQgb2YgdGhlIG5ldGZpbHRlciBILjMyMyBjb25udHJhY2sgaGVscGVyLCBkZWFsaW5nIHdpdGggQVNOLjEgZGVjb2RpbmcuIFRoZSBjb2RlIHNuaXBwZXQgc2hvd3MgYSBjcnVjaWFsIGltcHJvdmVtZW50LlxuXG5QcmV2aW91c2x5LCBpZiBgZi1cdTAwM2VhdHRyIFx1MDAyNiBFWFRgIHdhcyB0cnVlLCB0aGUgZnVuY3Rpb24gd291bGQgY2FsbCBgZ2V0X2JpdChicylgLiBEaXZpbmcgaW50byBgZ2V0X2JpdChicylgLCBpdCBwZXJmb3JtcyBhIGJpdHdpc2Ugb3BlcmF0aW9uIG9uIGBicy1cdTAwM2VjdXJgICh3aGljaCwgYmFzZWQgb24gdGhlIGNvbnRleHQsIGxpa2VseSBwb2ludHMgdG8gYSBieXRlIHdpdGhpbiB0aGUgcGFja2V0IGRhdGEgYnVmZmVyKSBhbmQgYWR2YW5jZXMgdGhlIGJpdCBwb2ludGVyLiBUaGUgY3JpdGljYWwgdnVsbmVyYWJpbGl0eSBzdGVtbWVkIGZyb20gdGhlIHBvc3NpYmlsaXR5IHRoYXQgaWYgYGJzLVx1MDAzZWN1cmAgd2FzIGVxdWFsIHRvIGBicy1cdTAwM2VlbmRgLCB0aGVuIGEgZGlyZWN0IGFjY2VzcyB0byBgKmJzLVx1MDAzZWN1cmAgd291bGQgY29uc3RpdHV0ZSBhbiBvdXQtb2YtYm91bmRzIHJlYWQuIFRoaXMgbWVhbnMgdGhlIGNvZGUgd2FzIGF0dGVtcHRpbmcgdG8gcmVhZCBiZXlvbmQgdGhlIGFsbG9jYXRlZCBidWZmZXIsIHB1bGxpbmcgZGF0YSBmcm9tIGFuIGFyZWEgaXQgc2hvdWxkbid0IGFjY2Vzcy4gVGhhdCdzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHJlYWQsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gYSBjcmFzaCBvciwgd29yc2UsIGluZm9ybWF0aW9uIGxlYWthZ2UuXG5cbk5vdywgd2l0aCB0aGUgYWRkaXRpb24gb2YgYGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAxKSkgcmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7YCwgdGhlIGNvZGUgc2VlbXMgdG8gY2hlY2sgaWYgYXQgbGVhc3Qgb25lIGJpdCBpcyByZW1haW5pbmcgaW4gdGhlIGJ1ZmZlciBiZWZvcmUgYXR0ZW1wdGluZyB0aGUgcmVhZC4gVGhpcyBpcyBhIGdvb2QgZGVmZW5zaXZlIHByb2dyYW1taW5nIG1lYXN1cmUuICBJdCBhcHBlYXJzIHRvIHByZXZlbnQgdGhlIG91dC1vZi1ib3VuZHMgcmVhZCB3aGVuIHRoZXJlIGlzbid0IGVub3VnaCBkYXRhLlxuXG5NeSBuZXh0IGxpbmUgb2YgdGhpbmtpbmcgaXMsIGV2ZW4gdGhvdWdoIGl0IGZpeGVkIHRoZSBPT0IsIHdoYXQgYWJvdXQgdGhlIG5hdHVyZSBvZiB0aGUgZGF0YSBpbnZvbHZlZD8gIFRoZXJlJ3Mgbm8gaW5kaWNhdGlvbiBoZXJlIHRoYXQgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGFsbG9jYXRlZCBvciByZWFkLiBUaGUgYnVmZmVyIGBic2AgaXMgdGllZCB0byB0aGUgcGFja2V0IHBheWxvYWQgZGF0YSBmcm9tIHRoZSBza2IsIGJlaW5nIHBhcnNlZCBieSBuZXRmaWx0ZXIuIFRoaXMgbWVhbnMgdGhlIG1lbW9yeSBpcyAqZXhwZWN0ZWQqIHRvIGJlIHBvcHVsYXRlZCwgc28gdGhhdCBydWxlcyBvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEJ1dCB0aGlzIG1lYW5zIHRoZSBkYXRhIGJlaW5nIHJlYWQgaGVyZSAqaXMqIHRoZSBwYWNrZXQgZGF0YSwgd2hpY2ggbmVlZHMgdG8gYmUgcGFyc2VkIHNlY3VyZWx5IHRvIHByZXZlbnQgYSBtaXMtaW50ZXJwcmV0YXRpb24gb2YgdGhlIHBhY2tldCAoZS5nLiBpbnRlZ2VyIG92ZXJmbG93LCBldGMpLlxuXG5UaGUgY29ycmVjdGlvbiBmb2N1c2VzIG9uIHByZXZlbnRpbmcgdGhlIE9PQiBpc3N1ZSwgc3BlY2lmaWNhbGx5IGJ5IGNoZWNraW5nIHRoZSBidWZmZXIgYm91bmRhcnkuIEhvd2V2ZXIsIGEgZnVsbCBzZWN1cml0eSBhc3Nlc3NtZW50IG5lY2Vzc2l0YXRlcyBleGFtaW5pbmcgb3RoZXIgYXNwZWN0cy4gSSBuZWVkIHRvIGxvb2sgYXQgaG93IGBkZWNvZGVfZW51bWAgaXMgY2FsbGVkIHdpdGhpbiB0aGUgbGFyZ2VyIGNvbnRleHQgYW5kIGFuYWx5emUgdGhlIHN0cnVjdHVyZSBvZiB0aGUgb3RoZXIgYGRlY29kZV8qYCBmdW5jdGlvbnMgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYC4gQXJlIHRoZXJlIHNpbWlsYXIgcGF0dGVybnM/IEFyZSB0aGVyZSBvdGhlciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gYnVmZmVyIHNpemVzLCBkYXRhIGludGVycHJldGF0aW9uLCBvciBlcnJvciBoYW5kbGluZz8gQSBjb21wcmVoZW5zaXZlIHJldmlldyBpcyBuZWVkZWQgdG8gY29uZmlybSB0aGUgb3ZlcmFsbCByb2J1c3RuZXNzIG9mIHRoZSBBU04uMSBkZWNvZGluZyB3aXRoaW4gdGhpcyBoZWxwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNTQsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNTo0Njo0NC40MDExOTEzMjNaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyMCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMyMDpcXHRcXHRjYXNlIEJZVEU6XFx0XFx0LyogUmFuZ2UgPT0gMjU2ICovXFxuIDMyMTpcXHRcXHRcXHRCWVRFX0FMSUdOKGJzKTtcXG4gMzIyOlxcdFxcdFxcdGJzLVxcdTAwM2VjdXIrKztcXG4gMzIzOlxcdFxcdFxcdGJyZWFrO1xcbiAzMjQ6XFx0XFx0Y2FzZSBXT1JEOlxcdFxcdC8qIDI1NyBcXHUwMDNjPSBSYW5nZSBcXHUwMDNjPSA2NEsgKi9cXG4gMzI1OlxcdFxcdFxcdEJZVEVfQUxJR04oYnMpO1xcbiAzMjY6XFx0XFx0XFx0YnMtXFx1MDAzZWN1ciArPSAyO1xcbiAzMjc6XFx0XFx0XFx0YnJlYWs7XFxuIDMyODpcXHRcXHRjYXNlIENPTlM6XFx0XFx0LyogNjRLIFxcdTAwM2MgUmFuZ2UgXFx1MDAzYyA0RyAqL1xcbiAzMjk6XFx0XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDIpKVxcbiAzMzA6XFx0XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuIDMzMTpcXHRcXHRcXHRsZW4gPSBnZXRfYml0cyhicywgMikgKyAxO1xcbiAzMzI6XFx0XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIGxlbiwgMCkpXFxuIDMzMzpcXHRcXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4gMzM0OlxcdFxcdFxcdEJZVEVfQUxJR04oYnMpO1xcbiAzMzU6XFx0XFx0XFx0aWYgKGJhc2UgXFx1MDAyNlxcdTAwMjYgKGYtXFx1MDAzZWF0dHIgXFx1MDAyNiBERUNPREUpKSB7XFx0LyogdGltZVRvTGl2ZSAqL1xcbiAzMzY6XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IHYgPSBnZXRfdWludChicywgbGVuKSArIGYtXFx1MDAzZWxiO1xcbiAzMzc6XFx0XFx0XFx0XFx0UFJJTlQoXFxcIiA9ICV1XFxcIiwgdik7XFxuIDMzODpcXHRcXHRcXHRcXHQqKCh1bnNpZ25lZCBpbnQgKikoYmFzZSArIGYtXFx1MDAzZW9mZnNldCkpID0gdjtcXG4gMzM5OlxcdFxcdFxcdH1cXG4gMzQwOlxcdFxcdFxcdGJzLVxcdTAwM2VjdXIgKz0gbGVuO1xcbiAzNDE6XFx0XFx0XFx0YnJlYWs7XFxuIDM0MjpcXHRcXHRjYXNlIFVOQ086XFxuIDM0MzpcXHRcXHRcXHRCWVRFX0FMSUdOKGJzKTtcXG4gMzQ0OlxcdFxcdFxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAyLCAwKSlcXG4gMzQ1OlxcdFxcdFxcdFxcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xcbiAzNDY6XFx0XFx0XFx0bGVuID0gZ2V0X2xlbihicyk7XFxuIDM0NzpcXHRcXHRcXHRicy1cXHUwMDNlY3VyICs9IGxlbjtcXG4gMzQ4OlxcdFxcdFxcdGJyZWFrO1xcbiAzNDk6XFx0XFx0ZGVmYXVsdDpcXHRcXHQvKiAyIFxcdTAwM2M9IFJhbmdlIFxcdTAwM2M9IDI1NSAqL1xcbiAzNTA6XFx0XFx0XFx0SU5DX0JJVFMoYnMsIGYtXFx1MDAzZXN6KTtcXG4gMzUxOlxcdFxcdFxcdGJyZWFrO1xcbiAzNTI6XFx0XFx0fVxcbiAzNTM6XFx0XFxuIDM1NDpcXHRcXHRQUklOVChcXFwiXFxcXG5cXFwiKTtcXG4gMzU1OlxcdFxcbiAzNTY6XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDApKVxcbiAzNTc6XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuIDM1ODpcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9OT05FO1xcbiAzNTk6XFx0fVxcbiAzNjA6XFx0XFxuIDM2MTpcXHRzdGF0aWMgaW50IGRlY29kZV9lbnVtKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG4gMzYyOlxcdCAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmFzZSwgaW50IGxldmVsKVxcbiAzNjM6XFx0e1xcbiAzNjQ6XFx0XFx0UFJJTlQoXFxcIiUqcyVzXFxcXG5cXFwiLCBsZXZlbCAqIFRBQl9TSVpFLCBcXFwiIFxcXCIsIGYtXFx1MDAzZW5hbWUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNTo0Njo0NC40MDEzMDc0NTNaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQ3MTMwMDY2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZSwgdXNpbmcgYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmU6XG5cbioqRGVidWdnaW5nIHRoZSBgbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYCBNb2R1bGUqKlxuXG5BbHJpZ2h0LCBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYG5mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AgbW9kdWxlIGFnYWluLiBUaW1lIHRvIGdldCBhIGdyaXAgb24gd2hhdCdzIGdvaW5nIG9uLiBGaXJzdCwgYmVmb3JlIEkgc3RhcnQgcG9raW5nIGFyb3VuZCB3aXRoIGEgZGVidWdnZXIsIEkgbmVlZCBzb21lIGNvbnRleHQuIExldCdzIHNlZS4uLiB0aGUgbW9zdCBlZmZpY2llbnQgdGhpbmcgdG8gZG8gcmlnaHQgbm93IGlzIHByb2JhYmx5IHRvIHN0YXJ0IHdpdGggdGhlIGNvbW1pdCBoaXN0b3J5LiBJJ2xsIG9wZW4gdXAgYGdpdCBsb2dgLCBmb2N1c2luZyBvbiB0aGlzIHNwZWNpZmljIGZpbGUsIG9yIGF0IGxlYXN0IGxvb2tpbmcgYXQgYW55IGNvbW1pdCBtZXNzYWdlcyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IGZvciB0aGlzIGFyZWEgb2YgdGhlIGNvZGUuXG5cbkkgbmVlZCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSByZWNlbnQgY2hhbmdlcywgYnVnIGZpeGVzLCBvciBldmVuIGp1c3QgY29tbWVudHMgdGhhdCBtaWdodCBnaXZlIG1lIGEgY2x1ZSBhYm91dCB3aGF0J3MgaGFwcGVuaW5nIG9yIHdoYXQgc29tZW9uZSBlbHNlIHdhcyB0aGlua2luZyB3aGVuIHRoZXkgbGFzdCB0b3VjaGVkIHRoaXMuIE1heWJlIHNvbWVvbmUgZWxzZSB3b3JrZWQgb24gc29tZSBzaW1pbGFyIGNvZGUgYW5kIEkgY2FuIGdldCBhIGNsdWUgdGhlcmUuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgSSBhbSBub3QgZmFtaWxpYXIgd2l0aCB0aGlzIGNvZGUgYW5kIG5lZWQgdG8ga2VlcCBhbiBvcGVuIG1pbmQgZm9yIGFueSBwb3NzaWJsZSBjYXVzZXMuXG5cbklmIHRoYXQncyBub3QgZnJ1aXRmdWwsIEkgbWlnaHQgYnJhbmNoIG91dCBhbmQgbG9vayBhdCBzaW1pbGFyIGNvbW1pdHMgaW4gdGhlIHN1cnJvdW5kaW5nIGZpbGVzIG9yIGV2ZW4gd2l0aGluIHRoZSBjb25udHJhY2sgY29yZSBpdHNlbGYuIFNvbWV0aW1lcywgdGhlIGZpeCBvciB0aGUgaW50cm9kdWN0aW9uIG9mIGEgbmV3IGlzc3VlIG1pZ2h0IGJlIHRhbmdlbnRpYWxseSByZWxhdGVkLiBJIGFtIGNvbmZpZGVudCBJIHdpbGwgZmluZCBzb21ldGhpbmcgdG8gZ2V0IG1lIGdvaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjgxLCJPdXRwdXRUb2tlbnMiOjUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNTo0Njo0Ny44NzI2MTE4NzZaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MjQ4Mjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2gzMjNfZXJyb3JfYm91bmRhcnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9MTQ4PXN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2xlbihzdHJ1Y3QgYml0c3RyICpicylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTE2Mi1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxNjM6c3RhdGljIGludCBuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KHN0cnVjdCBiaXRzdHIgKmJzLCBzaXplX3QgYnl0ZXMsIHNpemVfdCBiaXRzKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTE2NC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz0yODI9c3RhdGljIGludCBkZWNvZGVfYm9vbChzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0yODctXFx0SU5DX0JJVChicyk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6Mjg4OlxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAwKSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0yODktXFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz0yOTM9c3RhdGljIGludCBkZWNvZGVfb2lkKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTMwMC1cXHRCWVRFX0FMSUdOKGJzKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzozMDE6XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDEsIDApKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTMwMi1cXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTMwNS1cXHRicy1cXHUwMDNlY3VyICs9IGxlbjtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzozMDY6XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDApKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTMwNy1cXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTMxMj1zdGF0aWMgaW50IGRlY29kZV9pbnQoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMzI4LVxcdGNhc2UgQ09OUzpcXHRcXHQvKiA2NEsgXFx1MDAzYyBSYW5nZSBcXHUwMDNjIDRHICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MzI5OlxcdFxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAyKSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0zMzAtXFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMzMxLVxcdFxcdGxlbiA9IGdldF9iaXRzKGJzLCAyKSArIDE7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MzMyOlxcdFxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCBsZW4sIDApKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTMzMy1cXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTM0My1cXHRcXHRCWVRFX0FMSUdOKGJzKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzozNDQ6XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDIsIDApKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTM0NS1cXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTM1NS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzozNTY6XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDApKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTM1Ny1cXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTM2MT1zdGF0aWMgaW50IGRlY29kZV9lbnVtKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTM2NS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzozNjY6XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDEpKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTM2Ny1cXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTM3My1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzozNzQ6XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDApKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTM3NS1cXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTM3OT1zdGF0aWMgaW50IGRlY29kZV9iaXRzdHIoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMzkxLVxcdGNhc2UgV09SRDpcXHRcXHQvKiAyLWJ5dGUgbGVuZ3RoICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MzkyOlxcdFxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAyLCAwKSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0zOTMtXFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0zOTctXFx0Y2FzZSBTRU1JOlxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjM5ODpcXHRcXHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMiwgMCkpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMzk5LVxcdFxcdFxcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNDA5LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjQxMDpcXHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgMCkpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNDExLVxcdFxcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9NDE1PXN0YXRpYyBpbnQgZGVjb2RlX251bXN0cihzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy00MjItXFx0LyogMiBcXHUwMDNjPSBSYW5nZSBcXHUwMDNjPSAyNTUgKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo0MjM6XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIGYtXFx1MDAzZXN6KSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy00MjQtXFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy00MjktXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NDMwOlxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAwKSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy00MzEtXFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz00MzU9c3RhdGljIGludCBkZWNvZGVfb2N0c3RyKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTQ1NS1cXHRcXHRCWVRFX0FMSUdOKGJzKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo0NTY6XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDEsIDApKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTQ1Ny1cXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTQ2MS1cXHRcXHRCWVRFX0FMSUdOKGJzKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo0NjI6XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDIsIDApKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTQ2My1cXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTQ2Ni1cXHRkZWZhdWx0OlxcdFxcdC8qIDIgXFx1MDAzYz0gUmFuZ2UgXFx1MDAzYz0gMjU1ICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NDY3OlxcdFxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCBmLVxcdTAwM2VzeikpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNDY4LVxcdFxcdFxcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNDc3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjQ3ODpcXHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgMCkpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNDc5LVxcdFxcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9NDgzPXN0YXRpYyBpbnQgZGVjb2RlX2JtcHN0cihzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy00OTItXFx0XFx0QllURV9BTElHTihicyk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NDkzOlxcdFxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAxLCAwKSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy00OTQtXFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy00OTctXFx0ZGVmYXVsdDpcXHRcXHQvKiAyIFxcdTAwM2M9IFJhbmdlIFxcdTAwM2M9IDI1NSAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjQ5ODpcXHRcXHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgZi1cXHUwMDNlc3opKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTQ5OS1cXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTUwNi1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo1MDc6XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDApKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTUwOC1cXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTUxMj1zdGF0aWMgaW50IGRlY29kZV9zZXEoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTI1LVxcdC8qIEV4dGVuc2libGU/ICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NTI2OlxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAxKSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy01MjctXFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy01MzAtXFx0LyogR2V0IGZpZWxkcyBiaXRtYXAgKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo1MzE6XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIGYtXFx1MDAzZXN6KSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy01MzItXFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy01NTMtXFx0XFx0aWYgKHNvbi1cXHUwMDNlYXR0ciBcXHUwMDI2IE9QRU4pIHtcXHQvKiBPcGVuIGZpZWxkICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NTU0OlxcdFxcdFxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAyLCAwKSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy01NTUtXFx0XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTU2LVxcdFxcdFxcdGxlbiA9IGdldF9sZW4oYnMpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjU1NzpcXHRcXHRcXHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgbGVuLCAwKSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy01NTgtXFx0XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy01ODUtXFx0LyogR2V0IHRoZSBleHRlbnNpb24gYml0bWFwICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NTg2OlxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCA3KSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy01ODctXFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTg4LVxcdGJtcDJfbGVuID0gZ2V0X2JpdHMoYnMsIDcpICsgMTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo1ODk6XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIGJtcDJfbGVuKSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy01OTAtXFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy02MDItXFx0XFx0aWYgKGkgXFx1MDAzZT0gZi1cXHUwMDNldWIpIHtcXHQvKiBOZXdlciBWZXJzaW9uPyAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjYwMzpcXHRcXHRcXHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMiwgMCkpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNjA0LVxcdFxcdFxcdFxcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTYwNS1cXHRcXHRcXHRsZW4gPSBnZXRfbGVuKGJzKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo2MDY6XFx0XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIGxlbiwgMCkpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNjA3LVxcdFxcdFxcdFxcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNjIwLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjYyMTpcXHRcXHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMiwgMCkpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNjIyLVxcdFxcdFxcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTYyMy1cXHRcXHRsZW4gPSBnZXRfbGVuKGJzKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo2MjQ6XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIGxlbiwgMCkpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNjI1LVxcdFxcdFxcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9NjQ1PXN0YXRpYyBpbnQgZGVjb2RlX3NlcW9mKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTY2MS1cXHRcXHRCWVRFX0FMSUdOKGJzKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo2NjI6XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDEsIDApKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTY2My1cXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTY2Ny1cXHRcXHRCWVRFX0FMSUdOKGJzKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo2Njg6XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDIsIDApKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTY2OS1cXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTY3NS1cXHRcXHRCWVRFX0FMSUdOKGJzKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo2NzY6XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDIsIDApKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTY3Ny1cXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTY4MC1cXHRkZWZhdWx0Olxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjY4MTpcXHRcXHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgZi1cXHUwMDNlc3opKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTY4Mi1cXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTcwMS1cXHRcXHRcXHRCWVRFX0FMSUdOKGJzKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo3MDI6XFx0XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDIsIDApKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTcwMy1cXHRcXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03MDQtXFx0XFx0XFx0bGVuID0gZ2V0X2xlbihicyk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NzA1OlxcdFxcdFxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCBsZW4sIDApKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTcwNi1cXHRcXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTc0MT1zdGF0aWMgaW50IGRlY29kZV9jaG9pY2Uoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzU0LVxcdC8qIERlY29kZSB0aGUgY2hvaWNlIGluZGV4IG51bWJlciAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjc1NTpcXHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgMSkpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzU2LVxcdFxcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzU4LVxcdFxcdGV4dCA9IDE7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NzU5OlxcdFxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCA3KSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03NjAtXFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03NjMtXFx0XFx0ZXh0ID0gMDtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo3NjQ6XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIGYtXFx1MDAzZXN6KSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03NjUtXFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03NzctXFx0XFx0QllURV9BTElHTihicyk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6Nzc4OlxcdFxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAyLCAwKSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03NzktXFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzgwLVxcdFxcdGxlbiA9IGdldF9sZW4oYnMpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjc4MTpcXHRcXHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgbGVuLCAwKSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03ODItXFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03OTUtXFx0XFx0QllURV9BTElHTihicyk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6Nzk2OlxcdFxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAyLCAwKSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03OTctXFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzk4LVxcdFxcdGxlbiA9IGdldF9sZW4oYnMpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjc5OTpcXHRcXHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgbGVuLCAwKSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04MDAtXFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA1OjQ2OjQ3Ljk1MTg2NTYxNVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTUwMjQyNTA1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlIENoYW5nZSoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIG92ZXIgdGhpcyBwYXRjaCBhbmQgaXQncyBhIHN0cmFpZ2h0Zm9yd2FyZCBmaXguIEl0IGxvb2tzIGxpa2UgdGhlIG90aGVyIGRlY29kaW5nIGZ1bmN0aW9ucywgbGlrZSBgZGVjb2RlX2Nob2ljZWAgYW5kIGBkZWNvZGVfc2VxYCwgYWxsIGluY2x1ZGUgYSBib3VuZGFyeSBjaGVjayB3aXRoIGBuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAxKWAgKmJlZm9yZSogYWNjZXNzaW5nIGJpdHMgd2l0aCBgZ2V0X2JpdChicylgIG9yIGNoZWNraW5nIGV4dGVuc2libGUgYml0cy4gVGhlIHByb2JsZW0gd2FzIHRoYXQgYGRlY29kZV9lbnVtYCB3YXMgbWlzc2luZyB0aGF0IGNydWNpYWwgYm91bmRhcnkgY2hlY2suIFRoaXMgcGF0Y2ggc2ltcGx5IGFkZHMgaXQgaW4uIEVzc2VudGlhbGx5LCB0aGlzIGlzIGEgc2FmZXR5IG5ldCB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMsIGFuIE9PQiByZWFkIHZ1bG5lcmFiaWxpdHkuXG5cbk5vdywgbGV0J3MgdGhpbmsgYWJvdXQgd2hldGhlciB3ZSBuZWVkIHRvIGJyaW5nIGluIHRoZSBLZXJuZWwgTWVtb3J5IFNhbml0aXplciAoS01TQU4pIGZvciB0aGlzLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCdzIHVubmVjZXNzYXJ5LCBidXQgbGV0J3MgYnJlYWsgaXQgZG93bjpcblxuKiAgICoqS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2U/KiogTm9wZSwgbm90IHJlbGV2YW50IGhlcmUuIFRoaXMgcGF0Y2ggaXNuJ3QgdG91Y2hpbmcgdGhhdC5cbiogICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyoqIE5vLCBub3RoaW5nIGxpa2UgdGhhdC5cbiogICAqKkFsbG9jYXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcz8qKiBBbHNvIG5vLlxuKiAgICoqQ2hhbmdlZCBib3VuZHMgY2hlY2tzIGxlYWRpbmcgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzPyoqIFdlbGwsIHllcyBhbmQgbm8uIEl0ICppcyogY2hhbmdpbmcgYm91bmRzIGNoZWNrcywgYnV0IGl0J3MgKmFkZGluZyogYSBjaGVjayB0byAqcHJldmVudCogYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9mIHRoZSBuZXR3b3JrIHNrYiBwYXlsb2FkLCBub3QgZW5hYmxpbmcgb25lLlxuKiAgICoqT3V0LW9mLWJvdW5kcyByZWFkcyBkaXJlY3RseSBkZXRlY3RhYmxlIGJ5IEtBU0FOPyoqIFllcywgZXhhY3RseSEgS0FTQU4gaXMgcGVyZmVjdGx5IHN1aXRlZCB0byBoYW5kbGUgdGhpcyB0eXBlIG9mIGlzc3VlLlxuXG5HaXZlbiBhbGwgb2YgdGhhdCwgaXQgc2VlbXMgY2xlYXIgdGhhdCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLlxuXG5KdXN0IHRvIGJlIHRob3JvdWdoLCBsZXQncyB2ZXJpZnkgdGhlIHNldC1yZXN1bHRzIHBhcmFtZXRlcnM6XG5OZWVkc0tNU0FOOiBmYWxzZVxuS01TQU5SZWFzb25pbmc6IERldGFpbGVkIGV4cGxhbmF0aW9uIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOLlxuXG5Pa2F5LCBhbGwgY2hlY2tzIG91dC4gTm93IEkgY2FuIGNvbmZpZGVudGx5IGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2NTIsIk91dHB1dFRva2VucyI6MTc0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA1OjQ2OjU5LjQ1NDI5NDU4NVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG1pc3NpbmcgYm91bmRhcnkgY2hlY2sgYG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDEpYCB0byBgZGVjb2RlX2VudW0oKWAgYmVmb3JlIHJlYWRpbmcgYSBiaXQgZnJvbSB0aGUgQVNOLjEgYml0c3RyZWFtLiBQcmlvciB0byB0aGlzIGZpeCwgaWYgYGJzLVxcdTAwM2VjdXJgIHdhcyBhdCBgYnMtXFx1MDAzZWVuZGAsIGBnZXRfYml0KGJzKWAgd291bGQgcGVyZm9ybSBhbiBvdXQtb2YtYm91bmRzIHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBwYWNrZXQgZGF0YSBidWZmZXIuIFxcblxcbk91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIGFyZSBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMgZGlyZWN0bHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBwYWRkaW5nIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG1pc3NpbmcgYm91bmRhcnkgY2hlY2sgYG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDEpYCB0byBgZGVjb2RlX2VudW0oKWAgYmVmb3JlIHJlYWRpbmcgYSBiaXQgZnJvbSB0aGUgQVNOLjEgYml0c3RyZWFtLiBQcmlvciB0byB0aGlzIGZpeCwgaWYgYGJzLVxcdTAwM2VjdXJgIHdhcyBhdCBgYnMtXFx1MDAzZWVuZGAsIGBnZXRfYml0KGJzKWAgd291bGQgcGVyZm9ybSBhbiBvdXQtb2YtYm91bmRzIHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBwYWNrZXQgZGF0YSBidWZmZXIuIFxcblxcbk91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIGFyZSBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMgZGlyZWN0bHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBwYWRkaW5nIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbr5x5[1] Phase: Succeeded StartedAt: 2026-09-07 05:47:11 +0000 UTC FinishedAt: 2026-09-07 05:47:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr5x5[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-07 05:47:11 +0000 UTC FinishedAt: 2026-09-07 05:47:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr5x5[2] Phase: Succeeded StartedAt: 2026-09-07 05:47:11 +0000 UTC FinishedAt: 2026-09-07 07:20:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr5x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["decode_enum","DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"bd796d7d-816b-4bf1-a4b1-3f6e79076e14","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-07 05:47:11 +0000 UTC FinishedAt: 2026-09-07 07:20:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["decode_enum","DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","ras_help","q931_help","h245_help"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"bd796d7d-816b-4bf1-a4b1-3f6e79076e14","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowbr5x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["decode_enum","DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"bd796d7d-816b-4bf1-a4b1-3f6e79076e14","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-07 05:47:11 +0000 UTC FinishedAt: 2026-09-07 05:47:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr5x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["decode_enum","DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"bd796d7d-816b-4bf1-a4b1-3f6e79076e14","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-07 05:47:11 +0000 UTC FinishedAt: 2026-09-07 05:47:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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-workflowbr5x5/series-workflowbr5x5-convert-artifact-3459316109/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbr5x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["decode_enum","DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"bd796d7d-816b-4bf1-a4b1-3f6e79076e14","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-07 05:47:21 +0000 UTC FinishedAt: 2026-09-07 06:04:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr5x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["decode_enum","DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"bd796d7d-816b-4bf1-a4b1-3f6e79076e14","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-07 05:47:21 +0000 UTC FinishedAt: 2026-09-07 06:04:25 +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:*ba9c6db4-21bb-494b-8b44-2dd5ca01e9f2,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-workflowbr5x5/series-workflowbr5x5-convert-artifact-3459316109/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": "14ff75ad-a57c-4e51-ad92-4e44839dcb9c", "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-workflowbr5x5/series-workflowbr5x5-build-action-3202897155/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbr5x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["decode_enum","DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"bd796d7d-816b-4bf1-a4b1-3f6e79076e14","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-07 05:47:21 +0000 UTC FinishedAt: 2026-09-07 06:04:15 +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:*ba9c6db4-21bb-494b-8b44-2dd5ca01e9f2,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-workflowbr5x5/series-workflowbr5x5-convert-artifact-3459316109/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": "14ff75ad-a57c-4e51-ad92-4e44839dcb9c", "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-workflowbr5x5/series-workflowbr5x5-build-action-3202897155/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbr5x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["decode_enum","DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"bd796d7d-816b-4bf1-a4b1-3f6e79076e14","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-07 06:04:25 +0000 UTC FinishedAt: 2026-09-07 06:04:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr5x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["decode_enum","DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"bd796d7d-816b-4bf1-a4b1-3f6e79076e14","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-07 06:04:25 +0000 UTC FinishedAt: 2026-09-07 06:04:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr5x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["decode_enum","DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"bd796d7d-816b-4bf1-a4b1-3f6e79076e14","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-07 06:04:25 +0000 UTC FinishedAt: 2026-09-07 06:04:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr5x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["decode_enum","DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"bd796d7d-816b-4bf1-a4b1-3f6e79076e14","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-07 06:04:25 +0000 UTC FinishedAt: 2026-09-07 06:04:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"bd796d7d-816b-4bf1-a4b1-3f6e79076e14","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-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-workflowbr5x5/series-workflowbr5x5-convert-artifact-1449071848/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbr5x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["decode_enum","DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"bd796d7d-816b-4bf1-a4b1-3f6e79076e14","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-07 06:04:35 +0000 UTC FinishedAt: 2026-09-07 06:06:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr5x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["decode_enum","DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"bd796d7d-816b-4bf1-a4b1-3f6e79076e14","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-07 06:04:35 +0000 UTC FinishedAt: 2026-09-07 06:06:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*14ff75ad-a57c-4e51-ad92-4e44839dcb9c,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-workflowbr5x5/series-workflowbr5x5-build-action-3202897155/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-workflowbr5x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["decode_enum","DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"bd796d7d-816b-4bf1-a4b1-3f6e79076e14","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-07 06:06:29 +0000 UTC FinishedAt: 2026-09-07 06:06:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr5x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["decode_enum","DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"bd796d7d-816b-4bf1-a4b1-3f6e79076e14","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-07 06:06:29 +0000 UTC FinishedAt: 2026-09-07 06:06:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr5x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["decode_enum","DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"bd796d7d-816b-4bf1-a4b1-3f6e79076e14","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-07 06:06:29 +0000 UTC FinishedAt: 2026-09-07 06:23:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr5x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["decode_enum","DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"bd796d7d-816b-4bf1-a4b1-3f6e79076e14","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-07 06:06:29 +0000 UTC FinishedAt: 2026-09-07 06:23:24 +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:*ba9c6db4-21bb-494b-8b44-2dd5ca01e9f2,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-workflowbr5x5/series-workflowbr5x5-convert-artifact-1449071848/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": "be1af1f7-b1e9-4280-94bc-9a2d839d955c", "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-workflowbr5x5/series-workflowbr5x5-build-action-2118896788/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbr5x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["decode_enum","DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"bd796d7d-816b-4bf1-a4b1-3f6e79076e14","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-07 06:06:29 +0000 UTC FinishedAt: 2026-09-07 06:23:14 +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:*ba9c6db4-21bb-494b-8b44-2dd5ca01e9f2,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-workflowbr5x5/series-workflowbr5x5-convert-artifact-1449071848/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": "be1af1f7-b1e9-4280-94bc-9a2d839d955c", "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-workflowbr5x5/series-workflowbr5x5-build-action-2118896788/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbr5x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["decode_enum","DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"bd796d7d-816b-4bf1-a4b1-3f6e79076e14","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-07 06:23:24 +0000 UTC FinishedAt: 2026-09-07 06:23:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr5x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["decode_enum","DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"bd796d7d-816b-4bf1-a4b1-3f6e79076e14","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-07 06:23:24 +0000 UTC FinishedAt: 2026-09-07 06:23:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr5x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["decode_enum","DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"bd796d7d-816b-4bf1-a4b1-3f6e79076e14","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-07 06:23:24 +0000 UTC FinishedAt: 2026-09-07 06:25:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr5x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["decode_enum","DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"bd796d7d-816b-4bf1-a4b1-3f6e79076e14","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-07 06:23:24 +0000 UTC FinishedAt: 2026-09-07 06:25:12 +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:*be1af1f7-b1e9-4280-94bc-9a2d839d955c,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-workflowbr5x5/series-workflowbr5x5-build-action-2118896788/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-workflowbr5x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["decode_enum","DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"bd796d7d-816b-4bf1-a4b1-3f6e79076e14","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-07 06:25:18 +0000 UTC FinishedAt: 2026-09-07 07:20:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr5x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["decode_enum","DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"bd796d7d-816b-4bf1-a4b1-3f6e79076e14","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-07 06:25:18 +0000 UTC FinishedAt: 2026-09-07 07:20:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["decode_enum","DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","ras_help","q931_help","h245_help"],"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:*14ff75ad-a57c-4e51-ad92-4e44839dcb9c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*be1af1f7-b1e9-4280-94bc-9a2d839d955c,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-workflowbr5x5/series-workflowbr5x5-build-action-3202897155/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-workflowbr5x5/series-workflowbr5x5-build-action-2118896788/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowbr5x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["decode_enum","DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"bd796d7d-816b-4bf1-a4b1-3f6e79076e14","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-07 06:25:18 +0000 UTC FinishedAt: 2026-09-07 06:25:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr5x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["decode_enum","DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"bd796d7d-816b-4bf1-a4b1-3f6e79076e14","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-07 06:25:18 +0000 UTC FinishedAt: 2026-09-07 06:25:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["decode_enum","DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","ras_help","q931_help","h245_help"],"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-workflowbr5x5/series-workflowbr5x5-convert-artifact-3523480353/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbr5x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["decode_enum","DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"bd796d7d-816b-4bf1-a4b1-3f6e79076e14","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-07 06:25:18 +0000 UTC FinishedAt: 2026-09-07 06:25:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr5x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["decode_enum","DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"bd796d7d-816b-4bf1-a4b1-3f6e79076e14","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-07 06:25:18 +0000 UTC FinishedAt: 2026-09-07 06:25:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr5x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["decode_enum","DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"bd796d7d-816b-4bf1-a4b1-3f6e79076e14","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-07 06:25:18 +0000 UTC FinishedAt: 2026-09-07 06:25:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr5x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["decode_enum","DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"bd796d7d-816b-4bf1-a4b1-3f6e79076e14","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-07 06:25:28 +0000 UTC FinishedAt: 2026-09-07 07:20:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbr5x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["decode_enum","DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_H323","NETFILTER_ADVANCED"],"series_id":"bd796d7d-816b-4bf1-a4b1-3f6e79076e14","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-07 06:25:28 +0000 UTC FinishedAt: 2026-09-07 07:20:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*14ff75ad-a57c-4e51-ad92-4e44839dcb9c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*be1af1f7-b1e9-4280-94bc-9a2d839d955c,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-workflowbr5x5/series-workflowbr5x5-build-action-3202897155/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-workflowbr5x5/series-workflowbr5x5-build-action-2118896788/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-workflowbr5x5/series-workflowbr5x5-convert-artifact-3523480353/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,}