Name: series-workflow7hl9d Phase: Failed StartedAt: 2026-09-10 19:24:17 +0000 UTC FinishedAt: 2026-09-10 19:56:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7hl9d[0] Phase: Succeeded StartedAt: 2026-09-10 19:24:17 +0000 UTC FinishedAt: 2026-09-10 19:56:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7hl9d[0].run-triage Phase: Succeeded StartedAt: 2026-09-10 19:24:17 +0000 UTC FinishedAt: 2026-09-10 19:56:31 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE5OjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYyBpbiB0aGUgUXVhbGNvbW0gSVAgQWNjZWxlcmF0b3IgKElQQSkgZHJpdmVyLiBUaGlzIGlzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBRdWFsY29tbSBBUk0gU29DcyByZXF1aXJpbmcgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgY29tcG9uZW50cyAoR1NJLCBTTUVNLCBTTVAyUCwgaW50ZXJjb25uZWN0cykgYW5kIGRldmljZSB0cmVlIGRlc2NyaXB0aW9ucy4gSXQgY2Fubm90IGJlIHByb2JlZCBvciBleGVjdXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFIG9uIGFtZDY0KSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTk6NTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4MGQ1Y2YyODQ3YWY3M2VjYjgyNWE2MWM2NmM2MWI5NTZjZTA2Zjc0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMTk6NTU6NDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYyBiL2RyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmNcbmluZGV4IGQ3NzFmM2E3MWY5NGYuLmE3Y2M5OGIyN2UzM2MgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jXG5AQCAtMTY4LDYgJiM0MzsxNjgsMTQgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBxbWlfb3BzIGlwYV9zZXJ2ZXJfb3BzID0ge1xuIFx0LmJ5ZVx0XHQ9IGlwYV9zZXJ2ZXJfYnllLFxuIH07XG4gXG4mIzQzOy8qIFRydWUgaWYgYSBRTUkgcmVxdWVzdCBhcnJpdmVkIGZyb20gdGhlIG1vZGVtIHdlIGFyZSBwYWlyZWQgd2l0aCAqL1xuJiM0MztzdGF0aWMgYm9vbCBpcGFfc2VydmVyX2Zyb21fbW9kZW0oY29uc3Qgc3RydWN0IGlwYV9xbWkgKmlwYV9xbWksXG4mIzQzO1x0XHRcdFx0ICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqc3EpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gc3EtXHUwMDNlc3Ffbm9kZSA9PSBpcGFfcW1pLVx1MDAzZW1vZGVtX3NxLnNxX25vZGUgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgIHNxLVx1MDAzZXNxX3BvcnQgPT0gaXBhX3FtaS1cdTAwM2Vtb2RlbV9zcS5zcV9wb3J0O1xuJiM0Mzt9XG4mIzQzO1xuIC8qIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGhhbmRsZSBhbiBJTkRJQ0FUSU9OX1JFR0lTVEVSIHJlcXVlc3QgbWVzc2FnZSBmcm9tIHRoZVxuICAqIG1vZGVtLiAgVGhpcyBpbmZvcm1zIHRoZSBBUCB0aGF0IHRoZSBtb2RlbSBpcyBub3cgcmVhZHkgdG8gcmVjZWl2ZSB0aGVcbiAgKiBJTklUX0NPTVBMRVRFIGluZGljYXRpb24gbWVzc2FnZS5cbkBAIC0xODUsNiAmIzQzOzE5MywxMyBAQCBzdGF0aWMgdm9pZCBpcGFfc2VydmVyX2luZGljYXRpb25fcmVnaXN0ZXIoc3RydWN0IHFtaV9oYW5kbGUgKnFtaSxcbiBcdGlwYV9xbWkgPSBjb250YWluZXJfb2YocW1pLCBzdHJ1Y3QgaXBhX3FtaSwgc2VydmVyX2hhbmRsZSk7XG4gXHRpcGEgPSBjb250YWluZXJfb2YoaXBhX3FtaSwgc3RydWN0IGlwYSwgcW1pKTtcbiBcbiYjNDM7XHRpZiAoIWlwYV9zZXJ2ZXJfZnJvbV9tb2RlbShpcGFfcW1pLCBzcSkpIHtcbiYjNDM7XHRcdGRldl93YXJuX3JhdGVsaW1pdGVkKGlwYS1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDtpZ25vcmluZyBRTUkgcmVxdWVzdCBmcm9tIG5vbi1tb2RlbSBzZW5kZXIgJXU6JXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICBzcS1cdTAwM2VzcV9ub2RlLCBzcS1cdTAwM2VzcV9wb3J0KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cnNwLnJzcC5yZXN1bHQgPSBRTUlfUkVTVUxUX1NVQ0NFU1NfVjAxO1xuIFx0cnNwLnJzcC5lcnJvciA9IFFNSV9FUlJfTk9ORV9WMDE7XG4gXG5AQCAtMjE0LDYgJiM0MzsyMjksMTMgQEAgc3RhdGljIHZvaWQgaXBhX3NlcnZlcl9kcml2ZXJfaW5pdF9jb21wbGV0ZShzdHJ1Y3QgcW1pX2hhbmRsZSAqcW1pLFxuIFx0aXBhX3FtaSA9IGNvbnRhaW5lcl9vZihxbWksIHN0cnVjdCBpcGFfcW1pLCBzZXJ2ZXJfaGFuZGxlKTtcbiBcdGlwYSA9IGNvbnRhaW5lcl9vZihpcGFfcW1pLCBzdHJ1Y3QgaXBhLCBxbWkpO1xuIFxuJiM0MztcdGlmICghaXBhX3NlcnZlcl9mcm9tX21vZGVtKGlwYV9xbWksIHNxKSkge1xuJiM0MztcdFx0ZGV2X3dhcm5fcmF0ZWxpbWl0ZWQoaXBhLVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHQgICAgIFwmIzM0O2lnbm9yaW5nIFFNSSByZXF1ZXN0IGZyb20gbm9uLW1vZGVtIHNlbmRlciAldToldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgIHNxLVx1MDAzZXNxX25vZGUsIHNxLVx1MDAzZXNxX3BvcnQpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyc3AucnNwLnJlc3VsdCA9IFFNSV9SRVNVTFRfU1VDQ0VTU19WMDE7XG4gXHRyc3AucnNwLmVycm9yID0gUU1JX0VSUl9OT05FX1YwMTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBkcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jIGluIHRoZSBRdWFsY29tbSBJUCBBY2NlbGVyYXRvciAoSVBBKSBkcml2ZXIuIFRoaXMgaXMgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIFF1YWxjb21tIEFSTSBTb0NzIHJlcXVpcmluZyBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSBjb21wb25lbnRzIChHU0ksIFNNRU0sIFNNUDJQLCBpbnRlcmNvbm5lY3RzKSBhbmQgZGV2aWNlIHRyZWUgZGVzY3JpcHRpb25zLiBJdCBjYW5ub3QgYmUgcHJvYmVkIG9yIGV4ZWN1dGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0Ugb24gYW1kNjQpLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDgwZDVjZjI4NDdhZjczZWNiODI1YTYxYzY2YzYxYjk1NmNlMDZmNzQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAxMCAxOTo1NTo0MyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMgYi9kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jCmluZGV4IGQ3NzFmM2E3MWY5NGYuLmE3Y2M5OGIyN2UzM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYwpAQCAtMTY4LDYgJiM0MzsxNjgsMTQgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBxbWlfb3BzIGlwYV9zZXJ2ZXJfb3BzID0gewogCS5ieWUJCT0gaXBhX3NlcnZlcl9ieWUsCiB9OwogCiYjNDM7LyogVHJ1ZSBpZiBhIFFNSSByZXF1ZXN0IGFycml2ZWQgZnJvbSB0aGUgbW9kZW0gd2UgYXJlIHBhaXJlZCB3aXRoICovCiYjNDM7c3RhdGljIGJvb2wgaXBhX3NlcnZlcl9mcm9tX21vZGVtKGNvbnN0IHN0cnVjdCBpcGFfcW1pICppcGFfcW1pLAomIzQzOwkJCQkgIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9xcnRyICpzcSkKJiM0Mzt7CiYjNDM7CXJldHVybiBzcS0mZ3Q7c3Ffbm9kZSA9PSBpcGFfcW1pLSZndDttb2RlbV9zcS5zcV9ub2RlICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIHNxLSZndDtzcV9wb3J0ID09IGlwYV9xbWktJmd0O21vZGVtX3NxLnNxX3BvcnQ7CiYjNDM7fQomIzQzOwogLyogQ2FsbGJhY2sgZnVuY3Rpb24gdG8gaGFuZGxlIGFuIElORElDQVRJT05fUkVHSVNURVIgcmVxdWVzdCBtZXNzYWdlIGZyb20gdGhlCiAgKiBtb2RlbS4gIFRoaXMgaW5mb3JtcyB0aGUgQVAgdGhhdCB0aGUgbW9kZW0gaXMgbm93IHJlYWR5IHRvIHJlY2VpdmUgdGhlCiAgKiBJTklUX0NPTVBMRVRFIGluZGljYXRpb24gbWVzc2FnZS4KQEAgLTE4NSw2ICYjNDM7MTkzLDEzIEBAIHN0YXRpYyB2b2lkIGlwYV9zZXJ2ZXJfaW5kaWNhdGlvbl9yZWdpc3RlcihzdHJ1Y3QgcW1pX2hhbmRsZSAqcW1pLAogCWlwYV9xbWkgPSBjb250YWluZXJfb2YocW1pLCBzdHJ1Y3QgaXBhX3FtaSwgc2VydmVyX2hhbmRsZSk7CiAJaXBhID0gY29udGFpbmVyX29mKGlwYV9xbWksIHN0cnVjdCBpcGEsIHFtaSk7CiAKJiM0MzsJaWYgKCFpcGFfc2VydmVyX2Zyb21fbW9kZW0oaXBhX3FtaSwgc3EpKSB7CiYjNDM7CQlkZXZfd2Fybl9yYXRlbGltaXRlZChpcGEtJmd0O2RldiwKJiM0MzsJCQkJICAgICAmIzM0O2lnbm9yaW5nIFFNSSByZXF1ZXN0IGZyb20gbm9uLW1vZGVtIHNlbmRlciAldToldVxuJiMzNDssCiYjNDM7CQkJCSAgICAgc3EtJmd0O3NxX25vZGUsIHNxLSZndDtzcV9wb3J0KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwogCXJzcC5yc3AucmVzdWx0ID0gUU1JX1JFU1VMVF9TVUNDRVNTX1YwMTsKIAlyc3AucnNwLmVycm9yID0gUU1JX0VSUl9OT05FX1YwMTsKIApAQCAtMjE0LDYgJiM0MzsyMjksMTMgQEAgc3RhdGljIHZvaWQgaXBhX3NlcnZlcl9kcml2ZXJfaW5pdF9jb21wbGV0ZShzdHJ1Y3QgcW1pX2hhbmRsZSAqcW1pLAogCWlwYV9xbWkgPSBjb250YWluZXJfb2YocW1pLCBzdHJ1Y3QgaXBhX3FtaSwgc2VydmVyX2hhbmRsZSk7CiAJaXBhID0gY29udGFpbmVyX29mKGlwYV9xbWksIHN0cnVjdCBpcGEsIHFtaSk7CiAKJiM0MzsJaWYgKCFpcGFfc2VydmVyX2Zyb21fbW9kZW0oaXBhX3FtaSwgc3EpKSB7CiYjNDM7CQlkZXZfd2Fybl9yYXRlbGltaXRlZChpcGEtJmd0O2RldiwKJiM0MzsJCQkJICAgICAmIzM0O2lnbm9yaW5nIFFNSSByZXF1ZXN0IGZyb20gbm9uLW1vZGVtIHNlbmRlciAldToldVxuJiMzNDssCiYjNDM7CQkJCSAgICAgc3EtJmd0O3NxX25vZGUsIHNxLSZndDtzcV9wb3J0KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwogCXJzcC5yc3AucmVzdWx0ID0gUU1JX1JFU1VMVF9TVUNDRVNTX1YwMTsKIAlyc3AucnNwLmVycm9yID0gUU1JX0VSUl9OT05FX1YwMTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzk3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgcmV2aWV3aW5nIHRoaXMgcGF0Y2g6CgoqKkludmVzdGlnYXRpbmcgdGhlIElQQSBRTUkgRHJpdmVyIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyB3ZSBoYXZlIGEgcGF0Y2ggdG91Y2hpbmcgYGRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmNgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGluIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IHRoZSBRdWFsY29tbSBJUEEgKElQIEFjY2VsZXJhdG9yKSBpcyBkb2luZyBhbmQgaG93IGl0JiMzOTtzIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBzeXN0ZW0uCgpJJiMzOTtsbCBzdGFydCB3aXRoIGEgcXVpY2sgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIG9uIHRoYXQgc3BlY2lmaWMgZmlsZS4gVW5kZXJzdGFuZGluZyB0aGUgZnVuZGFtZW50YWwgc3RydWN0dXJlIGFuZCBpbnRlcmFjdGlvbnMgd2lsbCBiZSBrZXkuIEZyb20gdGhlcmUsIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB0aGUgY29uZmlndXJhdGlvbi4gSSYjMzk7bGwgcmVhZCB0aGUgYEtjb25maWdgIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IChgZHJpdmVycy9uZXQvaXBhL0tjb25maWdgKSBvciBxdWlja2x5IGBncmVwYCBmb3IgYFFDT01fSVBBYCDigJMgc29tZXRoaW5nIHRvIGdldCBtZSB0byB0aGUgbmVjZXNzYXJ5IEtjb25maWcgZW50cmllcy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLiBHcmFzcGluZyB0aGUgY29uZmlndXJhdGlvbiBpcyBlc3NlbnRpYWwgYmVmb3JlIGV4YW1pbmluZyB0aGUgc3BlY2lmaWMgY29kZSBjaGFuZ2VzIGluIHRoZSBwYXRjaCBpdHNlbGYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTk6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFFDT01fSVBBJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvaXBhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2lwYS9LY29uZmlnOjE6Y29uZmlnIFFDT01fSVBBXG5kcml2ZXJzL25ldC9pcGEvS2NvbmZpZy0yLVx0dHJpc3RhdGUgXCYjMzQ7UXVhbGNvbW0gSVBBIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzg0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgSVBBIEtjb25maWcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHB1bGwgdXAgYGRyaXZlcnMvbmV0L2lwYS9LY29uZmlnYC4gVGltZSB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIElQQSAoSW50ZWdyYXRlZCBQYWNrZXQgQWNjZWxlcmF0b3IpIGRyaXZlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgdGhpbmcgaXMgc3RydWN0dXJlZC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUga2V5IGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzOiB0aGUgb25lcyB0aGF0IGVuYWJsZSBvciBkaXNhYmxlIGNvcmUgZmVhdHVyZXMsIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgc3Vic3lzdGVtcywgYW5kIGFueSBkZXBlbmRlbmNpZXMgb24gcGxhdGZvcm0tc3BlY2lmaWMgc2V0dGluZ3MuIEkmIzM5O2xsIGJlIHNlYXJjaGluZyBmb3IgYW55IHRyaWNreSBsb2dpYyBpbiB0aGUgZGVwZW5kZW5jeSBleHByZXNzaW9ucywgdGhlIGtpbmQgdGhhdCBtaWdodCBpbnRyb2R1Y2Ugc3VidGxlIGNvbXBhdGliaWxpdHkgaXNzdWVzIG9yIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBmZWF0dXJlcyByZWxhdGVkIHRvIHZhcmlvdXMgcGFja2V0IHByb2Nlc3Npbmcgc3RhZ2VzLCBvZmZsb2FkIGNhcGFiaWxpdGllcyAoVENQL0lQLCBMMiksIGFuZCBtYXliZSBzb21lIFFvUyBvciBmbG93IGNvbnRyb2wgbWVjaGFuaXNtcy4gSSBhbHNvIGV4cGVjdCB0byBjaGVjayB0aGF0IGVhY2ggb3B0aW9uIGZvbGxvd3MgdGhlIGVzdGFibGlzaGVkIGtlcm5lbCBjb2RpbmcgY29udmVudGlvbnMgZm9yIEtjb25maWcgZmlsZXMuIFRoZW4gSSBjYW4gdXNlIHRoaXMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIGEgbWVudGFsIG1hcCBvZiB0aGlzIGRyaXZlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2lwYS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Y29uZmlnIFFDT01fSVBBXG4gICAyOlx0XHR0cmlzdGF0ZSBcJiMzNDtRdWFsY29tbSBJUEEgc3VwcG9ydFwmIzM0O1xuICAgMzpcdFx0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IFFDT01fU01FTVxuICAgNDpcdFx0ZGVwZW5kcyBvbiBBUkNIX1FDT00gfHwgQ09NUElMRV9URVNUXG4gICA1Olx0XHRkZXBlbmRzIG9uIElOVEVSQ09OTkVDVFxuICAgNjpcdFx0ZGVwZW5kcyBvbiBRQ09NX1JQUk9DX0NPTU1PTiB8fCAoUUNPTV9SUFJPQ19DT01NT049biBcdTAwMjZcdTAwMjYgQ09NUElMRV9URVNUKVxuICAgNzpcdFx0ZGVwZW5kcyBvbiBRQ09NX0FPU1NfUU1QIHx8IFFDT01fQU9TU19RTVA9blxuICAgODpcdFx0c2VsZWN0IFFDT01fTURUX0xPQURFUlxuICAgOTpcdFx0c2VsZWN0IFFDT01fUEFTXG4gIDEwOlx0XHRzZWxlY3QgUUNPTV9RTUlfSEVMUEVSU1xuICAxMTpcdFx0aGVscFxuICAxMjpcdFx0ICBDaG9vc2UgWSBvciBNIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgUXVhbGNvbW1cbiAgMTM6XHRcdCAgSVAgQWNjZWxlcmF0b3IgKElQQSksIGEgaGFyZHdhcmUgYmxvY2sgcHJlc2VudCBpbiBzb21lXG4gIDE0Olx0XHQgIFF1YWxjb21tIFNvQ3MuICBUaGUgSVBBIGlzIGEgcHJvZ3JhbW1hYmxlIHByb3RvY29sIHByb2Nlc3NvclxuICAxNTpcdFx0ICB0aGF0IGlzIGNhcGFibGUgb2YgZ2VuZXJpYyBoYXJkd2FyZSBoYW5kbGluZyBvZiBJUCBwYWNrZXRzLFxuICAxNjpcdFx0ICBpbmNsdWRpbmcgcm91dGluZywgZmlsdGVyaW5nLCBhbmQgTkFULiAgQ3VycmVudGx5IHRoZSBJUEFcbiAgMTc6XHRcdCAgZHJpdmVyIHN1cHBvcnRzIG9ubHkgYmFzaWMgdHJhbnNwb3J0IG9mIG5ldHdvcmsgdHJhZmZpY1xuICAxODpcdFx0ICBiZXR3ZWVuIHRoZSBBUCBhbmQgbW9kZW0uXG4gIDE5Olx0XG4gIDIwOlx0XHQgIE5vdGUgdGhhdCBpZiBzZWxlY3RlZCwgdGhlIHNlbGVjdGlvbiB0eXBlIG11c3QgbWF0Y2ggdGhhdFxuICAyMTpcdFx0ICBvZiBRQ09NX1E2VjVfQ09NTU9OIChZIG9yIE0pLlxuICAyMjpcdFxuICAyMzpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE5OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MDcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFF1YWxjb21tIElQQSBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBRQ09NX0lQQWAgaGVyZS4gUmlnaHQsIHRoYXQmIzM5O3MgdGhlIFF1YWxjb21tIElQQSBzdXBwb3J0IOKAkyBlc3NlbnRpYWxseSB0aGUgaGFyZHdhcmUgYmxvY2ssIHRoZSBJUEEsIG9uIHRoZWlyIFNuYXBkcmFnb24gb3IgQVJNIFNvQ3MuIFRoZSByZWFsIHF1ZXN0aW9uIEkmIzM5O20gZ3JhcHBsaW5nIHdpdGggaXMgd2hldGhlciB0aGlzIGlzIGEgKnBsYXRmb3JtKiBkcml2ZXIuIFRoYXQmIzM5O3MgdGhlIGNydXggb2YgaXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgaXRzIHByb2JpbmcgcHJvY2Vzcy4gRG9lcyBpdCByZXF1aXJlIHNvbWUgdmVyeSBzcGVjaWZpYyBoYXJkd2FyZSBjaGFyYWN0ZXJpc3RpY3Mgb3IgZGVwZW5kZW5jaWVzIHRpZWQgdG8gYSBwYXJ0aWN1bGFyIFNvQz8gVGhlIHBsYXRmb3JtIGRyaXZlciBwYXJhZGlnbSBvZnRlbiBoaW5nZXMgb24gdGhhdCBsZXZlbCBvZiBoYXJkd2FyZSBzcGVjaWZpY2l0eSwgc28gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byBob3cgdGhlIHByb2JlIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkLiBEb2VzIGl0LCBmb3IgaW5zdGFuY2UsIGV4cGxpY2l0bHkgdXNlIGBwbGF0Zm9ybV9kcml2ZXJfcHJvYmVgIG9yIHNvbWV0aGluZyBzaW1pbGFyPyBUaGF0JiMzOTtsbCBiZSB0aGUga2V5IGluZGljYXRvciB0byBuYWlsIHRoaXMgZG93bi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb2R1bGVfcGxhdGZvcm1fZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvaXBhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2lwYS9pcGFfbWFpbi5jPTEwMTE9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaXBhX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9pcGEvaXBhX21haW4uYy0xMDIyLVxuZHJpdmVycy9uZXQvaXBhL2lwYV9tYWluLmM6MTAyMzptb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGlwYV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvaXBhL2lwYV9tYWluLmMtMTAyNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzczCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBJUEEgRHJpdmVyKioKCk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgaXNzdWUsIHNvIGxldCYjMzk7cyBzdGFydCB3aXRoIGBkcml2ZXJzL25ldC9pcGEvaXBhX21haW4uY2AuIE15IGd1dCB0ZWxscyBtZSBzb21ldGhpbmcmIzM5O3Mgb2ZmIGluIHRoYXQgYXJlYS4gTm93LCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgc3lzdGVtLCBsaW5lIDEwMDAgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgcGxhY2UgdG8gc3RhcnQsIGFuZCBzcGVjaWZpY2FsbHkgSSBzaG91bGQgcGF5IGF0dGVudGlvbiB0byB0aGUgcHJvYmUgZnVuY3Rpb24uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdGhlcmUuLi4gSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzIHRvIGZpZ3VyZSB0aGlzIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTk6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9pcGEvaXBhX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTgwOlx0XHRcdFx0cG1fcnVudGltZV9wdXRfbm9pZGxlKGRldik7XG4gOTgxOlx0XHRcdFx0cmV0dXJuO1xuIDk4MjpcdFx0XHR9XG4gOTgzOlx0XG4gOTg0Olx0XHRcdGlwYV90ZWFyZG93bihpcGEpO1xuIDk4NTpcdFx0fVxuIDk4NjpcdFxuIDk4NzpcdFx0aXBhX2RlY29uZmlnKGlwYSk7XG4gOTg4Olx0b3V0X3Bvd2VyX3B1dDpcbiA5ODk6XHRcdHBtX3J1bnRpbWVfcHV0X25vaWRsZShkZXYpO1xuIDk5MDpcdFx0aXBhX3NtcDJwX2V4aXQoaXBhKTtcbiA5OTE6XHRcdGlwYV90YWJsZV9leGl0KGlwYSk7XG4gOTkyOlx0XHRpcGFfZW5kcG9pbnRfZXhpdChpcGEpO1xuIDk5MzpcdFx0Z3NpX2V4aXQoXHUwMDI2aXBhLVx1MDAzZWdzaSk7XG4gOTk0Olx0XHRpcGFfbWVtX2V4aXQoaXBhKTtcbiA5OTU6XHRcdGlwYV9yZWdfZXhpdChpcGEpO1xuIDk5NjpcdFx0a2ZyZWUoaXBhKTtcbiA5OTc6XHRcdGlwYV9wb3dlcl9leGl0KHBvd2VyKTtcbiA5OTg6XHRcdGlwYV9pbnRlcnJ1cHRfZXhpdChpbnRlcnJ1cHQpO1xuIDk5OTpcdFxuMTAwMDpcdFx0ZGV2X2luZm8oZGV2LCBcJiMzNDtJUEEgZHJpdmVyIHJlbW92ZWRcJiMzNDspO1xuMTAwMTpcdH1cbjEwMDI6XHRcbjEwMDM6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqaXBhX2F0dHJpYnV0ZV9ncm91cHNbXSA9IHtcbjEwMDQ6XHRcdFx1MDAyNmlwYV9hdHRyaWJ1dGVfZ3JvdXAsXG4xMDA1Olx0XHRcdTAwMjZpcGFfZmVhdHVyZV9hdHRyaWJ1dGVfZ3JvdXAsXG4xMDA2Olx0XHRcdTAwMjZpcGFfZW5kcG9pbnRfaWRfYXR0cmlidXRlX2dyb3VwLFxuMTAwNzpcdFx0XHUwMDI2aXBhX21vZGVtX2F0dHJpYnV0ZV9ncm91cCxcbjEwMDg6XHRcdE5VTEwsXG4xMDA5Olx0fTtcbjEwMTA6XHRcbjEwMTE6XHRzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBpcGFfZHJpdmVyID0ge1xuMTAxMjpcdFx0LnByb2JlXHRcdD0gaXBhX3Byb2JlLFxuMTAxMzpcdFx0LnJlbW92ZVx0XHQ9IGlwYV9yZW1vdmUsXG4xMDE0Olx0XHQuc2h1dGRvd25cdD0gaXBhX3JlbW92ZSxcbjEwMTU6XHRcdC5kcml2ZXJcdD0ge1xuMTAxNjpcdFx0XHQubmFtZVx0XHQ9IFwmIzM0O2lwYVwmIzM0OyxcbjEwMTc6XHRcdFx0LnBtXHRcdD0gXHUwMDI2aXBhX3BtX29wcyxcbjEwMTg6XHRcdFx0Lm9mX21hdGNoX3RhYmxlXHQ9IGlwYV9tYXRjaCxcbjEwMTk6XHRcdFx0LmRldl9ncm91cHNcdD0gaXBhX2F0dHJpYnV0ZV9ncm91cHMsXG4xMDIwOlx0XHR9LFxuMTAyMTpcdH07XG4xMDIyOlx0XG4xMDIzOlx0bW9kdWxlX3BsYXRmb3JtX2RyaXZlcihpcGFfZHJpdmVyKTtcbjEwMjQ6XHRcbjEwMjU6XHRNT0RVTEVfTElDRU5TRShcJiMzNDtHUEwgdjJcJiMzNDspO1xuMTAyNjpcdE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtRdWFsY29tbSBJUCBBY2NlbGVyYXRvciBkZXZpY2UgZHJpdmVyXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTk6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTYyNgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqSVBBIFByb2JlIENoZWNrKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIElQQSBkcml2ZXImIzM5O3MgcHJvYmluZyBzZXF1ZW5jZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIEkgc2hvdWxkIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYGlwYV9wcm9iZWAuIEkga25vdyB0aGF0JiMzOTtzIHRoZSBlbnRyeSBwb2ludCwgb3IgYXQgbGVhc3QgYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSBpbml0aWFsIHNldHVwLCBhbmQgSSYjMzk7bSBwcmV0dHkgc3VyZSBJIGNhbiBmaW5kIGl0IHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L2lwYS9pcGFfbWFpbi5jYCBmaWxlLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhhdCBjb2RlIGFuZCBzZWUgd2hhdCB0aGUgaW5pdGlhbCBjb25maWd1cmF0aW9uIGFuZCBoYXJkd2FyZSBjaGVja3MgYXJlIGRvaW5nLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRyaXZlciBpbml0aWFsaXplcywgZGlzY292ZXJzIHRoZSBoYXJkd2FyZSwgYW5kIGhvcGVmdWxseSwgSSYjMzk7bGwgaWRlbnRpZnkgdGhlIHBvaW50IHdoZXJlIHRoZSBlcnJvciBpcyBvY2N1cnJpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE5OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvaXBhL2lwYV9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg1MDpcdFx0aXBhLVx1MDAzZXZlcnNpb24gPSBkYXRhLVx1MDAzZXZlcnNpb247XG4gODUxOlx0XHRpcGEtXHUwMDNlbW9kZW1fcm91dGVfY291bnQgPSBkYXRhLVx1MDAzZW1vZGVtX3JvdXRlX2NvdW50O1xuIDg1MjpcdFx0aW5pdF9jb21wbGV0aW9uKFx1MDAyNmlwYS1cdTAwM2Vjb21wbGV0aW9uKTtcbiA4NTM6XHRcbiA4NTQ6XHRcdHJldCA9IGlwYV9yZWdfaW5pdChpcGEsIHBkZXYpO1xuIDg1NTpcdFx0aWYgKHJldClcbiA4NTY6XHRcdFx0Z290byBlcnJfa2ZyZWVfaXBhO1xuIDg1NzpcdFxuIDg1ODpcdFx0cmV0ID0gaXBhX21lbV9pbml0KGlwYSwgcGRldiwgZGF0YS1cdTAwM2VtZW1fZGF0YSk7XG4gODU5Olx0XHRpZiAocmV0KVxuIDg2MDpcdFx0XHRnb3RvIGVycl9yZWdfZXhpdDtcbiA4NjE6XHRcbiA4NjI6XHRcdHJldCA9IGlwYV9jbWRfaW5pdChpcGEpO1xuIDg2MzpcdFx0aWYgKHJldClcbiA4NjQ6XHRcdFx0Z290byBlcnJfbWVtX2V4aXQ7XG4gODY1Olx0XG4gODY2Olx0XHRyZXQgPSBnc2lfaW5pdChcdTAwMjZpcGEtXHUwMDNlZ3NpLCBwZGV2LCBpcGEtXHUwMDNldmVyc2lvbiwgZGF0YS1cdTAwM2VlbmRwb2ludF9jb3VudCxcbiA4Njc6XHRcdFx0ICAgICAgIGRhdGEtXHUwMDNlZW5kcG9pbnRfZGF0YSk7XG4gODY4Olx0XHRpZiAocmV0KVxuIDg2OTpcdFx0XHRnb3RvIGVycl9tZW1fZXhpdDtcbiA4NzA6XHRcbiA4NzE6XHRcdC8qIFJlc3VsdCBpcyBhIG5vbi16ZXJvIG1hc2sgb2YgZW5kcG9pbnRzIHRoYXQgc3VwcG9ydCBmaWx0ZXJpbmcgKi9cbiA4NzI6XHRcdHJldCA9IGlwYV9lbmRwb2ludF9pbml0KGlwYSwgZGF0YS1cdTAwM2VlbmRwb2ludF9jb3VudCwgZGF0YS1cdTAwM2VlbmRwb2ludF9kYXRhKTtcbiA4NzM6XHRcdGlmIChyZXQpXG4gODc0Olx0XHRcdGdvdG8gZXJyX2dzaV9leGl0O1xuIDg3NTpcdFxuIDg3NjpcdFx0cmV0ID0gaXBhX3RhYmxlX2luaXQoaXBhKTtcbiA4Nzc6XHRcdGlmIChyZXQpXG4gODc4Olx0XHRcdGdvdG8gZXJyX2VuZHBvaW50X2V4aXQ7XG4gODc5Olx0XG4gODgwOlx0XHRyZXQgPSBpcGFfc21wMnBfaW5pdChpcGEsIHBkZXYsIGxvYWRlciA9PSBJUEFfTE9BREVSX01PREVNKTtcbiA4ODE6XHRcdGlmIChyZXQpXG4gODgyOlx0XHRcdGdvdG8gZXJyX3RhYmxlX2V4aXQ7XG4gODgzOlx0XG4gODg0Olx0XHQvKiBQb3dlciBuZWVkcyB0byBiZSBhY3RpdmUgZm9yIGNvbmZpZyBhbmQgc2V0dXAgKi9cbiA4ODU6XHRcdHJldCA9IHBtX3J1bnRpbWVfZ2V0X3N5bmMoZGV2KTtcbiA4ODY6XHRcdGlmIChXQVJOX09OKHJldCBcdTAwM2MgMCkpXG4gODg3Olx0XHRcdGdvdG8gZXJyX3Bvd2VyX3B1dDtcbiA4ODg6XHRcbiA4ODk6XHRcdHJldCA9IGlwYV9jb25maWcoaXBhLCBkYXRhKTtcbiA4OTA6XHRcdGlmIChyZXQpXG4gODkxOlx0XHRcdGdvdG8gZXJyX3Bvd2VyX3B1dDtcbiA4OTI6XHRcbiA4OTM6XHRcdGRldl9pbmZvKGRldiwgXCYjMzQ7SVBBIGRyaXZlciBpbml0aWFsaXplZFwmIzM0Oyk7XG4gODk0Olx0XG4gODk1Olx0XHQvKiBJZiB0aGUgbW9kZW0gaXMgbG9hZGluZyBHU0kgZmlybXdhcmUsIGl0IHdpbGwgdHJpZ2dlciBhIGNhbGwgdG9cbiA4OTY6XHRcdCAqIGlwYV9zZXR1cCgpIHdoZW4gaXQgaGFzIGZpbmlzaGVkLiAgSW4gdGhhdCBjYXNlIHdlJiMzOTtyZSBkb25lIGhlcmUuXG4gODk3Olx0XHQgKi9cbiA4OTg6XHRcdGlmIChsb2FkZXIgPT0gSVBBX0xPQURFUl9NT0RFTSlcbiA4OTk6XHRcdFx0Z290byBkb25lO1xuIDkwMDpcdFxuIDkwMTpcdFx0aWYgKGxvYWRlciA9PSBJUEFfTE9BREVSX1NFTEYpIHtcbiA5MDI6XHRcdFx0LyogVGhlIEFQIGlzIGxvYWRpbmcgR1NJIGZpcm13YXJlOyBkbyBzbyBub3cgKi9cbiA5MDM6XHRcdFx0cmV0ID0gaXBhX2Zpcm13YXJlX2xvYWQoZGV2KTtcbiA5MDQ6XHRcdFx0aWYgKHJldClcbiA5MDU6XHRcdFx0XHRnb3RvIGVycl9kZWNvbmZpZztcbiA5MDY6XHRcdH0gLyogT3RoZXJ3aXNlIGxvYWRlciA9PSBJUEFfTE9BREVSX1NLSVAgKi9cbiA5MDc6XHRcbiA5MDg6XHRcdC8qIEdTSSBmaXJtd2FyZSBpcyBsb2FkZWQ7IHByb2NlZWQgdG8gc2V0dXAgKi9cbiA5MDk6XHRcdHJldCA9IGlwYV9zZXR1cChpcGEpO1xuIDkxMDpcdFx0aWYgKHJldClcbiA5MTE6XHRcdFx0Z290byBlcnJfZGVjb25maWc7XG4gOTEyOlx0ZG9uZTpcbiA5MTM6XHRcdCh2b2lkKXBtX3J1bnRpbWVfcHV0X2F1dG9zdXNwZW5kKGRldik7XG4gOTE0Olx0XG4gOTE1Olx0XHRyZXR1cm4gMDtcbiA5MTY6XHRcbiA5MTc6XHRlcnJfZGVjb25maWc6XG4gOTE4Olx0XHRpcGFfZGVjb25maWcoaXBhKTtcbiA5MTk6XHRlcnJfcG93ZXJfcHV0OlxuIDkyMDpcdFx0cG1fcnVudGltZV9wdXRfbm9pZGxlKGRldik7XG4gOTIxOlx0XHRpcGFfc21wMnBfZXhpdChpcGEpO1xuIDkyMjpcdGVycl90YWJsZV9leGl0OlxuIDkyMzpcdFx0aXBhX3RhYmxlX2V4aXQoaXBhKTtcbiA5MjQ6XHRlcnJfZW5kcG9pbnRfZXhpdDpcbiA5MjU6XHRcdGlwYV9lbmRwb2ludF9leGl0KGlwYSk7XG4gOTI2Olx0ZXJyX2dzaV9leGl0OlxuIDkyNzpcdFx0Z3NpX2V4aXQoXHUwMDI2aXBhLVx1MDAzZWdzaSk7XG4gOTI4Olx0ZXJyX21lbV9leGl0OlxuIDkyOTpcdFx0aXBhX21lbV9leGl0KGlwYSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE5OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwMTgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElQQSBNYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGlwYV9tYXRjaGAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyB0aGluZyBpcyBtYXRjaGluZyBvbi4gQWgsIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgY29ubmVjdGVkIHRvIHRoZSAmIzM0O09GJiMzNDsg4oCTIERldmljZSBUcmVlLiBUaGF0JiMzOTtzIGEgY3J1Y2lhbCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gaG93IHRoaXMgZnVuY3Rpb24gd29ya3MsIHNvIEkmIzM5O2xsIGdvIGFoZWFkIGFuZCBkbyBhIGdyZXAgZm9yIGBpcGFfbWF0Y2hgIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L2lwYWAgZGlyZWN0b3J5LiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiBpdHMgdXNhZ2Ugd2l0aGluIHRoZSBJUEEgZHJpdmVyIGNvbnRleHQuIFRoaXMgc2hvdWxkIGhlbHAgbWUgYmV0dGVyIHVuZGVyc3RhbmQgaXRzIG92ZXJhbGwgcm9sZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTk6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBhX21hdGNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvaXBhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2lwYS9pcGFfbWFpbi5jPTU4Nj1zdGF0aWMgaW50IGlwYV9maXJtd2FyZV9sb2FkKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9pcGEvaXBhX21haW4uYy02NDEtXG5kcml2ZXJzL25ldC9pcGEvaXBhX21haW4uYzo2NDI6c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgaXBhX21hdGNoW10gPSB7XG5kcml2ZXJzL25ldC9pcGEvaXBhX21haW4uYy02NDMtXHR7XG4tLVxuZHJpdmVycy9uZXQvaXBhL2lwYV9tYWluLmMtNjg0LX07XG5kcml2ZXJzL25ldC9pcGEvaXBhX21haW4uYzo2ODU6TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgaXBhX21hdGNoKTtcbmRyaXZlcnMvbmV0L2lwYS9pcGFfbWFpbi5jLTY4Ni1cbi0tXG5kcml2ZXJzL25ldC9pcGEvaXBhX21haW4uYz0xMDExPXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGlwYV9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvaXBhL2lwYV9tYWluLmMtMTAxNy1cdFx0LnBtXHRcdD0gXHUwMDI2aXBhX3BtX29wcyxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfbWFpbi5jOjEwMTg6XHRcdC5vZl9tYXRjaF90YWJsZVx0PSBpcGFfbWF0Y2gsXG5kcml2ZXJzL25ldC9pcGEvaXBhX21haW4uYy0xMDE5LVx0XHQuZGV2X2dyb3Vwc1x0PSBpcGFfYXR0cmlidXRlX2dyb3VwcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTk6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzUyNQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDQwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBRdWFsY29tbSBJUEEgRHJpdmVyIGZvciBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgYGlwYV9tYXRjaGAgaXMgZXNzZW50aWFsbHkgYSBjb21wYXRpYmlsaXR5IGxpc3QgZm9yIFF1YWxjb21tIFN5c3RlbS1vbi1DaGlwcyAoU29DcykuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGVudHJpZXMgbGlrZSBgcWNvbSxzZG04NDUtaXBhYCBhbmQgYHFjb20sc204MjUwLWlwYWAsIHNvIGl0JiMzOTtzIGNsZWFybHkgdGFyZ2V0aW5nIHNwZWNpZmljIFF1YWxjb21tIGhhcmR3YXJlLiBBbmQgdGhpcyBpcyBhbGwgcnVubmluZyBvbiBgYW1kNjRgLCB3aGljaCBpcyBvdXIgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCk5vdywgYFFDT01fSVBBYCBpcyBjb25kaXRpb25hbC4gSXQgaGluZ2VzIG9uIGBBUkNIX1FDT00gfHwgQ09NUElMRV9URVNUYCwgYXMgd2VsbCBhcyBgUUNPTV9TTUVNYCBhbmQgYElOVEVSQ09OTkVDVGAuIFRoYXQgdGVsbHMgbWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHBsYXRmb3JtIGRyaXZlciwgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvciB0aGVzZSBRdWFsY29tbSBTb0NzLiBJdCBuZWVkcyBzcGVjaWZpYyBRdWFsY29tbSBJUCBBY2NlbGVyYXRvciBoYXJkd2FyZSBhbmQgcmVsaWVzIG9uIGRldmljZSB0cmVlIGJpbmRpbmdzLCB3aGljaCBpcyBjcnVjaWFsLgoKVGhlIGNhdGNoLCBhbmQgdGhpcyBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nIGZvciBmdXp6aW5nLCBpcyB0aGF0IGV2ZW4gaWYgd2UgZm9yY2UtY29tcGlsZSB0aGlzIG9uIHg4NiB1c2luZyBgQ09NUElMRV9URVNUYCwgdGhlIGRyaXZlciAqc3RpbGwqIGRlbWFuZHMgdGhlIHByZXNlbmNlIG9mIERUIG5vZGVzIGFuZCB0aGUgYXNzb2NpYXRlZCBwaHlzaWNhbCBoYXJkd2FyZS4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgdGhpbmdzIGxpa2UgbW9kZW0sIGludGVyY29ubmVjdCwgc2hhcmVkIG1lbW9yeSwgYW5kIGNsb2NrIGRvbWFpbnMuIFN0YW5kYXJkIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lIChHQ0UpIGNvbmZpZ3VyYXRpb25zIOKAkyBldmVuIG9uIGFtZDY0L3g4Nl82NCDigJMgYXJlbiYjMzk7dCBnb2luZyB0byBoYXZlIHRoaXMgUXVhbGNvbW0gSVBBIGhhcmR3YXJlIHByZXNlbnQgb3IgYXZhaWxhYmxlIHRvIGJlIHByb2JlZC4KCk5vdywgbGV0JiMzOTtzIGNvbm5lY3QgdGhpcyB0byB0aGUgaW5zdHJ1Y3Rpb25zLiBTZWN0aW9uIDIgbGF5cyBvdXQgbmVnYXRpdmUgY3JpdGVyaWEg4oCTIHNjZW5hcmlvcyB3aGVyZSB3ZSBzaG91bGQgYXZvaWQgZnV6emluZy4gSXQgbWVudGlvbnMgJiMzNDtzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUmIzM0OyBsaWtlIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBBU0lDcyBvciBQQ0llIGNhcmRzLiBTb3VuZHMgZmFtaWxpYXIsIGRvZXNuJiMzOTt0IGl0PyBUaGUgSVBBIGRyaXZlciwgZGVwZW5kZW50IG9uIHRoaXMgUXVhbGNvbW0gaGFyZHdhcmUsIGZpdHMgdGhhdCBiaWxsLiBUaGUgaW5zdHJ1Y3Rpb25zIGFsc28gY2FsbCBvdXQgdW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzIGxpa2UgZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyB0aGF0IGFyZSB0cmlnZ2VyZWQgYnkgcGh5c2ljYWwgaG90LXVucGx1ZyBldmVudHMgb3IgbWFudWFsIGRyaXZlciB1bmJpbmRpbmcuIFRoaXMgaXMgbGlrZWx5IGFuIGlzc3VlIGhlcmUgdG9vLgoKVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzIHRoaXM6IGlzIHRoZXJlICphbnkqIHZpcnR1YWxpemVkLCBlbXVsYXRlZCwgb3IgbW9ja2VkIHdheSB0byBhY2Nlc3MgdGhlIElQQSBmdW5jdGlvbmFsaXR5PyBBcmUgdGhlcmUgYW55IG9wdGlvbnMgYWtpbiB0byBhIFVTQiBnYWRnZXQsIGEgbmV0bGluayBpbnRlcmZhY2UsIG9yIGEgbW9jayBkZXZpY2UgdGhhdCBjb3VsZCBzaW11bGF0ZSBvciBhbGxvdyBhIGRlZ3JlZSBvZiBpbnRlcmFjdGlvbiB3aXRoIElQQT8gSSBuZWVkIHRvIGludmVzdGlnYXRlIHdoYXQgaXMgaW4gYGRyaXZlcnMvbmV0L2lwYWAgYW5kIHNlZSBpZiBhbnl0aGluZyBsaWtlIHRoaXMgZXhpc3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmNvZGVzZWFyY2gtZGlyLWluZGV4PC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtEaXImIzM0OzogJiMzNDtkcml2ZXJzL25ldC9pcGEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZXMmIzM0OzogWwogICAgJiMzNDtnc2kuYyYjMzQ7LAogICAgJiMzNDtnc2kuaCYjMzQ7LAogICAgJiMzNDtnc2lfcHJpdmF0ZS5oJiMzNDssCiAgICAmIzM0O2dzaV9yZWcuYyYjMzQ7LAogICAgJiMzNDtnc2lfcmVnLmgmIzM0OywKICAgICYjMzQ7Z3NpX3RyYW5zLmMmIzM0OywKICAgICYjMzQ7Z3NpX3RyYW5zLmgmIzM0OywKICAgICYjMzQ7aXBhLmgmIzM0OywKICAgICYjMzQ7aXBhX2NtZC5jJiMzNDssCiAgICAmIzM0O2lwYV9jbWQuaCYjMzQ7LAogICAgJiMzNDtpcGFfZGF0YS5oJiMzNDssCiAgICAmIzM0O2lwYV9lbmRwb2ludC5jJiMzNDssCiAgICAmIzM0O2lwYV9lbmRwb2ludC5oJiMzNDssCiAgICAmIzM0O2lwYV9nc2kuYyYjMzQ7LAogICAgJiMzNDtpcGFfZ3NpLmgmIzM0OywKICAgICYjMzQ7aXBhX2ludGVycnVwdC5jJiMzNDssCiAgICAmIzM0O2lwYV9pbnRlcnJ1cHQuaCYjMzQ7LAogICAgJiMzNDtpcGFfbWFpbi5jJiMzNDssCiAgICAmIzM0O2lwYV9tZW0uYyYjMzQ7LAogICAgJiMzNDtpcGFfbWVtLmgmIzM0OywKICAgICYjMzQ7aXBhX21vZGVtLmMmIzM0OywKICAgICYjMzQ7aXBhX21vZGVtLmgmIzM0OywKICAgICYjMzQ7aXBhX3Bvd2VyLmMmIzM0OywKICAgICYjMzQ7aXBhX3Bvd2VyLmgmIzM0OywKICAgICYjMzQ7aXBhX3FtaS5jJiMzNDssCiAgICAmIzM0O2lwYV9xbWkuaCYjMzQ7LAogICAgJiMzNDtpcGFfcW1pX21zZy5jJiMzNDssCiAgICAmIzM0O2lwYV9xbWlfbXNnLmgmIzM0OywKICAgICYjMzQ7aXBhX3JlZy5jJiMzNDssCiAgICAmIzM0O2lwYV9yZWcuaCYjMzQ7LAogICAgJiMzNDtpcGFfcmVzb3VyY2UuYyYjMzQ7LAogICAgJiMzNDtpcGFfcmVzb3VyY2UuaCYjMzQ7LAogICAgJiMzNDtpcGFfc21wMnAuYyYjMzQ7LAogICAgJiMzNDtpcGFfc21wMnAuaCYjMzQ7LAogICAgJiMzNDtpcGFfc3lzZnMuYyYjMzQ7LAogICAgJiMzNDtpcGFfc3lzZnMuaCYjMzQ7LAogICAgJiMzNDtpcGFfdGFibGUuYyYjMzQ7LAogICAgJiMzNDtpcGFfdGFibGUuaCYjMzQ7LAogICAgJiMzNDtpcGFfdWMuYyYjMzQ7LAogICAgJiMzNDtpcGFfdWMuaCYjMzQ7LAogICAgJiMzNDtpcGFfdmVyc2lvbi5oJiMzNDssCiAgICAmIzM0O3JlZy5oJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBbCiAgICAmIzM0O2RhdGEmIzM0OywKICAgICYjMzQ7cmVnJiMzNDsKICBdCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTk6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODgzNAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIHRoZSBJbml0aWFsaXphdGlvbiBvZiBgaXBhX3FtaS5jYCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBpcGFfcW1pLmNgIGlzIGluaXRpYWxpemVkLiBLbm93aW5nIHRoaXMgaXMgY3J1Y2lhbCBmb3IgWyoqaW5zZXJ0IHlvdXIgZmllbGQvY29udGV4dCBoZXJlLCBlLmcuLCBkZWJ1Z2dpbmcgYSBzcGVjaWZpYyBpc3N1ZSwgdW5kZXJzdGFuZGluZyBhIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLCBwcmVwYXJpbmcgZm9yIGEgY29kZSByZXZpZXcgcmVsYXRlZCB0byB0aGUgbW9kZW0gaW50ZXJmYWNlLCBldGMuKiouIFRoaXMgbGV2ZWwgb2YgaW5pdGlhbGl6YXRpb24gaW1wYWN0cyB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgbW9kZW0gaW50ZXJmYWNlXS4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIG9yIHN0cnVjdHVyZXMgaW52b2x2ZWQuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGZvciB0aGUgZW50cnkgcG9pbnQgb3IgYW55IGluaXRpYWxpemF0aW9uIHJvdXRpbmVzIHdpdGhpbiB0aGUgZmlsZSBpdHNlbGYuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGxpa2UgY29uc3RydWN0b3IgYXR0cmlidXRlcywgbW9kdWxlIHJlZ2lzdHJhdGlvbiwgb3IgYW55IGNhbGxzIHJlbGF0ZWQgdG8gcmVzb3VyY2UgYWxsb2NhdGlvbiB0aGF0IHdvdWxkIHN1Z2dlc3QgaW5pdGlhbGl6YXRpb24gaXMgaGFwcGVuaW5nLiBVbmRlcnN0YW5kaW5nIHRoaXMgd2lsbCBiZSB0aGUgZm91bmRhdGlvbiBmb3IgZGVidWdnaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcGFfcW1pJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvaXBhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2lwYS9NYWtlZmlsZT0xND1pcGEteVx0XHRcdDo9XHRpcGFfbWFpbi5vIGlwYV9wb3dlci5vIGlwYV9yZWcubyBpcGFfbWVtLm8gXFxcbi0tXG5kcml2ZXJzL25ldC9pcGEvTWFrZWZpbGUtMTctXHRcdFx0XHRpcGFfZW5kcG9pbnQubyBpcGFfY21kLm8gaXBhX21vZGVtLm8gXFxcbmRyaXZlcnMvbmV0L2lwYS9NYWtlZmlsZToxODpcdFx0XHRcdGlwYV9yZXNvdXJjZS5vIGlwYV9xbWkubyBpcGFfcW1pX21zZy5vIFxcXG5kcml2ZXJzL25ldC9pcGEvTWFrZWZpbGUtMTktXHRcdFx0XHRpcGFfc3lzZnMub1xuLS1cbmRyaXZlcnMvbmV0L2lwYS9pcGEuaC0xNC0jaW5jbHVkZSBcJiMzNDtpcGFfbWVtLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2lwYS9pcGEuaDoxNTojaW5jbHVkZSBcJiMzNDtpcGFfcW1pLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2lwYS9pcGEuaC0xNi0jaW5jbHVkZSBcJiMzNDtpcGFfdmVyc2lvbi5oXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvaXBhL2lwYS5oPTczPXN0cnVjdCBpcGEge1xuLS1cbmRyaXZlcnMvbmV0L2lwYS9pcGEuaC0xMzAtXHRzdHJ1Y3QgbmV0X2RldmljZSAqbW9kZW1fbmV0ZGV2O1xuZHJpdmVycy9uZXQvaXBhL2lwYS5oOjEzMTpcdHN0cnVjdCBpcGFfcW1pIHFtaTtcbmRyaXZlcnMvbmV0L2lwYS9pcGEuaC0xMzItfTtcbi0tXG5kcml2ZXJzL25ldC9pcGEvaXBhX21haW4uYz0xMTE9aW50IGlwYV9zZXR1cChzdHJ1Y3QgaXBhICppcGEpXG4tLVxuZHJpdmVycy9uZXQvaXBhL2lwYV9tYWluLmMtMTUwLVx0LyogV2UmIzM5O3JlIGFsbCBzZXQuICBOb3cgcHJlcGFyZSBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBtb2RlbSAqL1xuZHJpdmVycy9uZXQvaXBhL2lwYV9tYWluLmM6MTUxOlx0cmV0ID0gaXBhX3FtaV9zZXR1cChpcGEpO1xuZHJpdmVycy9uZXQvaXBhL2lwYV9tYWluLmMtMTUyLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9pcGEvaXBhX21haW4uYz0xNzc9c3RhdGljIHZvaWQgaXBhX3RlYXJkb3duKHN0cnVjdCBpcGEgKmlwYSlcbi0tXG5kcml2ZXJzL25ldC9pcGEvaXBhX21haW4uYy0xODQtXG5kcml2ZXJzL25ldC9pcGEvaXBhX21haW4uYzoxODU6XHRpcGFfcW1pX3RlYXJkb3duKGlwYSk7XG5kcml2ZXJzL25ldC9pcGEvaXBhX21haW4uYy0xODYtXHRpcGFfZW5kcG9pbnRfZGVmYXVsdF9yb3V0ZV9jbGVhcihpcGEpO1xuLS1cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMTMtI2luY2x1ZGUgXCYjMzQ7aXBhX21vZGVtLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6MTQ6I2luY2x1ZGUgXCYjMzQ7aXBhX3FtaV9tc2cuaFwmIzM0O1xuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xNS1cbi0tXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTc5LS8qIFNlbmQgYW4gSU5JVF9DT01QTEVURSBpbmRpY2F0aW9uIG1lc3NhZ2UgdG8gdGhlIG1vZGVtICovXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjgwOnN0YXRpYyB2b2lkIGlwYV9zZXJ2ZXJfaW5pdF9jb21wbGV0ZShzdHJ1Y3QgaXBhX3FtaSAqaXBhX3FtaSlcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtODEte1xuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzo4MjpcdHN0cnVjdCBpcGEgKmlwYSA9IGNvbnRhaW5lcl9vZihpcGFfcW1pLCBzdHJ1Y3QgaXBhLCBxbWkpO1xuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzo4MzpcdHN0cnVjdCBxbWlfaGFuZGxlICpxbWkgPSBcdTAwMjZpcGFfcW1pLVx1MDAzZXNlcnZlcl9oYW5kbGU7XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjg0Olx0c3RydWN0IHNvY2thZGRyX3FydHIgKnNxID0gXHUwMDI2aXBhX3FtaS1cdTAwM2Vtb2RlbV9zcTtcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtODUtXHRzdHJ1Y3QgaXBhX2luaXRfY29tcGxldGVfaW5kIGluZCA9IHsgfTtcbi0tXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTk3LVx0ZWxzZVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzo5ODpcdFx0aXBhX3FtaS1cdTAwM2VpbmRpY2F0aW9uX3NlbnQgPSB0cnVlO1xuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy05OS19XG4tLVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xMDEtLyogSWYgcmVxdWVzdGVkIChhbmQgbm90IGFscmVhZHkgc2VudCkgc2VuZCB0aGUgSU5JVF9DT01QTEVURSBpbmRpY2F0aW9uICovXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjEwMjpzdGF0aWMgdm9pZCBpcGFfcW1pX2luZGljYXRpb24oc3RydWN0IGlwYV9xbWkgKmlwYV9xbWkpXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTEwMy17XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjEwNDpcdGlmICghaXBhX3FtaS1cdTAwM2VpbmRpY2F0aW9uX3JlcXVlc3RlZClcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMTA1LVx0XHRyZXR1cm47XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTEwNi1cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6MTA3Olx0aWYgKGlwYV9xbWktXHUwMDNlaW5kaWNhdGlvbl9zZW50KVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xMDgtXHRcdHJldHVybjtcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMTA5LVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoxMTA6XHRpcGFfc2VydmVyX2luaXRfY29tcGxldGUoaXBhX3FtaSk7XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTExMS19XG4tLVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xMjEtICovXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjEyMjpzdGF0aWMgdm9pZCBpcGFfcW1pX3JlYWR5KHN0cnVjdCBpcGFfcW1pICppcGFfcW1pKVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xMjMte1xuLS1cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMTI3LVx0LyogV2UgYXJlbiYjMzk7dCByZWFkeSB1bnRpbCB0aGUgbW9kZW0gYW5kIG1pY3JvY29udHJvbGxlciBhcmUgKi9cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6MTI4Olx0aWYgKCFpcGFfcW1pLVx1MDAzZW1vZGVtX3JlYWR5IHx8ICFpcGFfcW1pLVx1MDAzZXVjX3JlYWR5KVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xMjktXHRcdHJldHVybjtcbi0tXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTEzMS1cdC8qIFNlbmQgdGhlIGluZGljYXRpb24gbWVzc2FnZSBpZiBpdCB3YXMgcmVxdWVzdGVkICovXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjEzMjpcdGlwYV9xbWlfaW5kaWNhdGlvbihpcGFfcW1pKTtcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMTMzLVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xMzQtXHQvKiBUaGUgaW5pdGlhbCBib290IHJlcXVpcmVzIHVzIHRvIHNlbmQgdGhlIGluZGljYXRpb24uICovXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjEzNTpcdGlmIChpcGFfcW1pLVx1MDAzZWluaXRpYWxfYm9vdCkge1xuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoxMzY6XHRcdGlmICghaXBhX3FtaS1cdTAwM2VpbmRpY2F0aW9uX3NlbnQpXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTEzNy1cdFx0XHRyZXR1cm47XG4tLVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xMzktXHRcdC8qIFRoZSBpbml0aWFsIG1vZGVtIGJvb3QgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSAqL1xuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoxNDA6XHRcdGlwYV9xbWktXHUwMDNlaW5pdGlhbF9ib290ID0gZmFsc2U7XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTE0MS1cdH1cbi0tXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTE0My1cdC8qIFdlJiMzOTtyZSByZWFkeS4gIFN0YXJ0IHVwIG5vcm1hbCBvcGVyYXRpb24gKi9cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6MTQ0Olx0aXBhID0gY29udGFpbmVyX29mKGlwYV9xbWksIHN0cnVjdCBpcGEsIHFtaSk7XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTE0NS1cdHJldCA9IGlwYV9tb2RlbV9zdGFydChpcGEpO1xuLS1cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM9MTUxPXN0YXRpYyB2b2lkIGlwYV9zZXJ2ZXJfYnllKHN0cnVjdCBxbWlfaGFuZGxlICpxbWksIHVuc2lnbmVkIGludCBub2RlKVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xNTIte1xuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoxNTM6XHRzdHJ1Y3QgaXBhX3FtaSAqaXBhX3FtaTtcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMTU0LVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoxNTU6XHRpcGFfcW1pID0gY29udGFpbmVyX29mKHFtaSwgc3RydWN0IGlwYV9xbWksIHNlcnZlcl9oYW5kbGUpO1xuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xNTYtXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTE1Ny1cdC8qIFRoZSBtb2RlbSBjbGllbnQgYW5kIHNlcnZlciBnbyBhd2F5IGF0IHRoZSBzYW1lIHRpbWUgKi9cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6MTU4Olx0bWVtc2V0KFx1MDAyNmlwYV9xbWktXHUwMDNlbW9kZW1fc3EsIDAsIHNpemVvZihpcGFfcW1pLVx1MDAzZW1vZGVtX3NxKSk7XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTE1OS1cbi0tXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTE2MS1cdC8qIHVjX3JlYWR5IGRvZXNuJiMzOTt0IGNoYW5nZSB3aGVuIG1vZGVtIHJlYm9vdHMgKi9cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6MTYyOlx0aXBhX3FtaS1cdTAwM2Vtb2RlbV9yZWFkeSA9IGZhbHNlO1xuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoxNjM6XHRpcGFfcW1pLVx1MDAzZWluZGljYXRpb25fcmVxdWVzdGVkID0gZmFsc2U7XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjE2NDpcdGlwYV9xbWktXHUwMDNlaW5kaWNhdGlvbl9zZW50ID0gZmFsc2U7XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTE2NS19XG4tLVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYz0xNjc9c3RhdGljIGNvbnN0IHN0cnVjdCBxbWlfb3BzIGlwYV9zZXJ2ZXJfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMTcxLS8qIFRydWUgaWYgYSBRTUkgcmVxdWVzdCBhcnJpdmVkIGZyb20gdGhlIG1vZGVtIHdlIGFyZSBwYWlyZWQgd2l0aCAqL1xuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoxNzI6c3RhdGljIGJvb2wgaXBhX3NlcnZlcl9mcm9tX21vZGVtKGNvbnN0IHN0cnVjdCBpcGFfcW1pICppcGFfcW1pLFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xNzMtXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9xcnRyICpzcSlcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMTc0LXtcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6MTc1Olx0cmV0dXJuIHNxLVx1MDAzZXNxX25vZGUgPT0gaXBhX3FtaS1cdTAwM2Vtb2RlbV9zcS5zcV9ub2RlIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoxNzY6XHQgICAgICAgc3EtXHUwMDNlc3FfcG9ydCA9PSBpcGFfcW1pLVx1MDAzZW1vZGVtX3NxLnNxX3BvcnQ7XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTE3Ny19XG4tLVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYz0xODM9c3RhdGljIHZvaWQgaXBhX3NlcnZlcl9pbmRpY2F0aW9uX3JlZ2lzdGVyKHN0cnVjdCBxbWlfaGFuZGxlICpxbWksXG4tLVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xODgtXHRzdHJ1Y3QgaXBhX2luZGljYXRpb25fcmVnaXN0ZXJfcnNwIHJzcCA9IHsgfTtcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6MTg5Olx0c3RydWN0IGlwYV9xbWkgKmlwYV9xbWk7XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTE5MC1cdHN0cnVjdCBpcGEgKmlwYTtcbi0tXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTE5Mi1cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6MTkzOlx0aXBhX3FtaSA9IGNvbnRhaW5lcl9vZihxbWksIHN0cnVjdCBpcGFfcW1pLCBzZXJ2ZXJfaGFuZGxlKTtcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6MTk0Olx0aXBhID0gY29udGFpbmVyX29mKGlwYV9xbWksIHN0cnVjdCBpcGEsIHFtaSk7XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTE5NS1cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6MTk2Olx0aWYgKCFpcGFfc2VydmVyX2Zyb21fbW9kZW0oaXBhX3FtaSwgc3EpKSB7XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTE5Ny1cdFx0ZGV2X3dhcm5fcmF0ZWxpbWl0ZWQoaXBhLVx1MDAzZWRldixcbi0tXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTIwOS1cdGlmICghcmV0KSB7XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjIxMDpcdFx0aXBhX3FtaS1cdTAwM2VpbmRpY2F0aW9uX3JlcXVlc3RlZCA9IHRydWU7XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjIxMTpcdFx0aXBhX3FtaV9yZWFkeShpcGFfcW1pKTtcdFx0LyogV2UgbWlnaHQgYmUgcmVhZHkgbm93ICovXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTIxMi1cdH0gZWxzZSB7XG4tLVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYz0yMTk9c3RhdGljIHZvaWQgaXBhX3NlcnZlcl9kcml2ZXJfaW5pdF9jb21wbGV0ZShzdHJ1Y3QgcW1pX2hhbmRsZSAqcW1pLFxuLS1cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMjI0LVx0c3RydWN0IGlwYV9kcml2ZXJfaW5pdF9jb21wbGV0ZV9yc3AgcnNwID0geyB9O1xuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoyMjU6XHRzdHJ1Y3QgaXBhX3FtaSAqaXBhX3FtaTtcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMjI2LVx0c3RydWN0IGlwYSAqaXBhO1xuLS1cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMjI4LVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoyMjk6XHRpcGFfcW1pID0gY29udGFpbmVyX29mKHFtaSwgc3RydWN0IGlwYV9xbWksIHNlcnZlcl9oYW5kbGUpO1xuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoyMzA6XHRpcGEgPSBjb250YWluZXJfb2YoaXBhX3FtaSwgc3RydWN0IGlwYSwgcW1pKTtcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMjMxLVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoyMzI6XHRpZiAoIWlwYV9zZXJ2ZXJfZnJvbV9tb2RlbShpcGFfcW1pLCBzcSkpIHtcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMjMzLVx0XHRkZXZfd2Fybl9yYXRlbGltaXRlZChpcGEtXHUwMDNlZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMjQ1LVx0aWYgKCFyZXQpIHtcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6MjQ2Olx0XHRpcGFfcW1pLVx1MDAzZXVjX3JlYWR5ID0gdHJ1ZTtcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6MjQ3Olx0XHRpcGFfcW1pX3JlYWR5KGlwYV9xbWkpO1x0XHQvKiBXZSBtaWdodCBiZSByZWFkeSBub3cgKi9cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMjQ4LVx0fSBlbHNlIHtcbi0tXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jPTMwMT1zdGF0aWMgY29uc3Qgc3RydWN0IGlwYV9pbml0X21vZGVtX2RyaXZlcl9yZXEgKlxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzozMDI6aW5pdF9tb2RlbV9kcml2ZXJfcmVxKHN0cnVjdCBpcGFfcW1pICppcGFfcW1pKVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0zMDMte1xuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzozMDQ6XHRzdHJ1Y3QgaXBhICppcGEgPSBjb250YWluZXJfb2YoaXBhX3FtaSwgc3RydWN0IGlwYSwgcW1pKTtcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMzA1LVx0dTMyIG1vZGVtX3JvdXRlX2NvdW50ID0gaXBhLVx1MDAzZW1vZGVtX3JvdXRlX2NvdW50O1xuLS1cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM9NDIzPXN0YXRpYyB2b2lkIGlwYV9jbGllbnRfaW5pdF9kcml2ZXJfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy00MjYtXHRjb25zdCBzdHJ1Y3QgaXBhX2luaXRfbW9kZW1fZHJpdmVyX3JlcSAqcmVxO1xuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzo0Mjc6XHRzdHJ1Y3QgaXBhX3FtaSAqaXBhX3FtaTtcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtNDI4LVx0c3RydWN0IHFtaV9oYW5kbGUgKnFtaTtcbi0tXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTQzMy1cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6NDM0Olx0aXBhX3FtaSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXBhX3FtaSwgaW5pdF9kcml2ZXJfd29yayk7XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjQzNTpcdHFtaSA9IFx1MDAyNmlwYV9xbWktXHUwMDNlY2xpZW50X2hhbmRsZTtcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtNDM2LVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzo0Mzc6XHRpcGEgPSBjb250YWluZXJfb2YoaXBhX3FtaSwgc3RydWN0IGlwYSwgcW1pKTtcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtNDM4LVx0ZGV2ID0gaXBhLVx1MDAzZWRldjtcbi0tXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTQ0Ni1cdC8qIFNlbmQgdGhlIHJlcXVlc3QsIGFuZCBpZiBzdWNjZXNzZnVsIHdhaXQgZm9yIGl0cyByZXNwb25zZSAqL1xuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzo0NDc6XHRyZXEgPSBpbml0X21vZGVtX2RyaXZlcl9yZXEoaXBhX3FtaSk7XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjQ0ODpcdHJldCA9IHFtaV9zZW5kX3JlcXVlc3QocW1pLCBcdTAwMjZpcGFfcW1pLVx1MDAzZW1vZGVtX3NxLCBcdTAwMjZ0eG4sXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTQ0OS1cdFx0XHQgICAgICAgSVBBX1FNSV9JTklUX0RSSVZFUiwgSVBBX1FNSV9JTklUX0RSSVZFUl9SRVFfU1osXG4tLVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy00NTYtXHRpZiAoIXJldCkge1xuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzo0NTc6XHRcdGlwYV9xbWktXHUwMDNlbW9kZW1fcmVhZHkgPSB0cnVlO1xuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzo0NTg6XHRcdGlwYV9xbWlfcmVhZHkoaXBhX3FtaSk7XHRcdC8qIFdlIG1pZ2h0IGJlIHJlYWR5IG5vdyAqL1xuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy00NTktXHR9IGVsc2Uge1xuLS1cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM9NDcwPWlwYV9jbGllbnRfbmV3X3NlcnZlcihzdHJ1Y3QgcW1pX2hhbmRsZSAqcW1pLCBzdHJ1Y3QgcW1pX3NlcnZpY2UgKnN2YylcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtNDcxLXtcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6NDcyOlx0c3RydWN0IGlwYV9xbWkgKmlwYV9xbWk7XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTQ3My1cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6NDc0Olx0aXBhX3FtaSA9IGNvbnRhaW5lcl9vZihxbWksIHN0cnVjdCBpcGFfcW1pLCBjbGllbnRfaGFuZGxlKTtcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtNDc1LVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzo0NzY6XHRpcGFfcW1pLVx1MDAzZW1vZGVtX3NxLnNxX2ZhbWlseSA9IEFGX1FJUENSVFI7XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjQ3NzpcdGlwYV9xbWktXHUwMDNlbW9kZW1fc3Euc3Ffbm9kZSA9IHN2Yy1cdTAwM2Vub2RlO1xuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzo0Nzg6XHRpcGFfcW1pLVx1MDAzZW1vZGVtX3NxLnNxX3BvcnQgPSBzdmMtXHUwMDNlcG9ydDtcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtNDc5LVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzo0ODA6XHRzY2hlZHVsZV93b3JrKFx1MDAyNmlwYV9xbWktXHUwMDNlaW5pdF9kcml2ZXJfd29yayk7XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTQ4MS1cbi0tXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jPTQ4NT1zdGF0aWMgY29uc3Qgc3RydWN0IHFtaV9vcHMgaXBhX2NsaWVudF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy00ODktLyogU2V0IHVwIGZvciBRTUkgbWVzc2FnZSBleGNoYW5nZSAqL1xuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzo0OTA6aW50IGlwYV9xbWlfc2V0dXAoc3RydWN0IGlwYSAqaXBhKVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy00OTEte1xuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzo0OTI6XHRzdHJ1Y3QgaXBhX3FtaSAqaXBhX3FtaSA9IFx1MDAyNmlwYS1cdTAwM2VxbWk7XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTQ5My1cdGludCByZXQ7XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTQ5NC1cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6NDk1Olx0aXBhX3FtaS1cdTAwM2Vpbml0aWFsX2Jvb3QgPSB0cnVlO1xuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy00OTYtXG4tLVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy01MDItXHQgKi9cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6NTAzOlx0cmV0ID0gcW1pX2hhbmRsZV9pbml0KFx1MDAyNmlwYV9xbWktXHUwMDNlc2VydmVyX2hhbmRsZSxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtNTA0LVx0XHRcdCAgICAgIElQQV9RTUlfU0VSVkVSX01BWF9SQ1ZfU1osIFx1MDAyNmlwYV9zZXJ2ZXJfb3BzLFxuLS1cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtNTA4LVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzo1MDk6XHRyZXQgPSBxbWlfYWRkX3NlcnZlcihcdTAwMjZpcGFfcW1pLVx1MDAzZXNlcnZlcl9oYW5kbGUsIElQQV9IT1NUX1NFUlZJQ0VfU1ZDX0lELFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy01MTAtXHRcdFx0ICAgICBJUEFfSE9TVF9TVkNfVkVSUywgSVBBX0hPU1RfU0VSVklDRV9JTlNfSUQpO1xuLS1cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtNTE2LVx0ICovXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjUxNzpcdHJldCA9IHFtaV9oYW5kbGVfaW5pdChcdTAwMjZpcGFfcW1pLVx1MDAzZWNsaWVudF9oYW5kbGUsXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTUxOC1cdFx0XHQgICAgICBJUEFfUU1JX0NMSUVOVF9NQVhfUkNWX1NaLCBcdTAwMjZpcGFfY2xpZW50X29wcyxcbi0tXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTUyMy1cdC8qIFdlIG5lZWQgdGhpcyByZWFkeSBiZWZvcmUgdGhlIHNlcnZpY2UgbG9va3VwIGlzIGFkZGVkICovXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjUyNDpcdElOSVRfV09SSyhcdTAwMjZpcGFfcW1pLVx1MDAzZWluaXRfZHJpdmVyX3dvcmssIGlwYV9jbGllbnRfaW5pdF9kcml2ZXJfd29yayk7XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTUyNS1cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6NTI2Olx0cmV0ID0gcW1pX2FkZF9sb29rdXAoXHUwMDI2aXBhX3FtaS1cdTAwM2VjbGllbnRfaGFuZGxlLCBJUEFfTU9ERU1fU0VSVklDRV9TVkNfSUQsXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTUyNy1cdFx0XHQgICAgIElQQV9NT0RFTV9TVkNfVkVSUywgSVBBX01PREVNX1NFUlZJQ0VfSU5TX0lEKTtcbi0tXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTUzNC1cdC8qIFJlbGVhc2luZyB0aGUgaGFuZGxlIGFsc28gcmVtb3ZlcyByZWdpc3RlcmVkIGxvb2t1cHMgKi9cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6NTM1Olx0cW1pX2hhbmRsZV9yZWxlYXNlKFx1MDAyNmlwYV9xbWktXHUwMDNlY2xpZW50X2hhbmRsZSk7XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjUzNjpcdG1lbXNldChcdTAwMjZpcGFfcW1pLVx1MDAzZWNsaWVudF9oYW5kbGUsIDAsIHNpemVvZihpcGFfcW1pLVx1MDAzZWNsaWVudF9oYW5kbGUpKTtcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtNTM3LWVycl9zZXJ2ZXJfaGFuZGxlX3JlbGVhc2U6XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTUzOC1cdC8qIFJlbGVhc2luZyB0aGUgaGFuZGxlIGFsc28gcmVtb3ZlcyByZWdpc3RlcmVkIHNlcnZpY2VzICovXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjUzOTpcdHFtaV9oYW5kbGVfcmVsZWFzZShcdTAwMjZpcGFfcW1pLVx1MDAzZXNlcnZlcl9oYW5kbGUpO1xuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzo1NDA6XHRtZW1zZXQoXHUwMDI2aXBhX3FtaS1cdTAwM2VzZXJ2ZXJfaGFuZGxlLCAwLCBzaXplb2YoaXBhX3FtaS1cdTAwM2VzZXJ2ZXJfaGFuZGxlKSk7XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTU0MS1cbi0tXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTU0NS0vKiBUZWFyIGRvd24gSVBBIFFNSSBoYW5kbGVzICovXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjU0Njp2b2lkIGlwYV9xbWlfdGVhcmRvd24oc3RydWN0IGlwYSAqaXBhKVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy01NDcte1xuLS1cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmg9MTQ9c3RydWN0IGlwYTtcbi0tXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5oLTE2LS8qKlxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuaDoxNzogKiBzdHJ1Y3QgaXBhX3FtaSAtIFFNSSBzdGF0ZSBhc3NvY2lhdGVkIHdpdGggYW4gSVBBXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5oLTE4LSAqIEBjbGllbnRfaGFuZGxlOlx0VXNlZCB0byBzZW5kIGFuIFFNSSByZXF1ZXN0cyB0byB0aGUgbW9kZW1cbi0tXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5oLTI3LSAqL1xuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuaDoyODpzdHJ1Y3QgaXBhX3FtaSB7XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5oLTI5LVx0c3RydWN0IHFtaV9oYW5kbGUgY2xpZW50X2hhbmRsZTtcbi0tXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5oLTQ0LS8qKlxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuaDo0NTogKiBpcGFfcW1pX3NldHVwKCkgLSBTZXQgdXAgZm9yIFFNSSBtZXNzYWdlIGV4Y2hhbmdlXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5oLTQ2LSAqIEBpcGE6XHRcdElQQSBwb2ludGVyXG4tLVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuaC01Ny0gKi9cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmg6NTg6aW50IGlwYV9xbWlfc2V0dXAoc3RydWN0IGlwYSAqaXBhKTtcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmgtNTktXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5oLTYwLS8qKlxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuaDo2MTogKiBpcGFfcW1pX3RlYXJkb3duKCkgLSBUZWFyIGRvd24gSVBBIFFNSSBoYW5kbGVzXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5oLTYyLSAqIEBpcGE6XHRcdElQQSBwb2ludGVyXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5oLTYzLSAqL1xuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuaDo2NDp2b2lkIGlwYV9xbWlfdGVhcmRvd24oc3RydWN0IGlwYSAqaXBhKTtcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmgtNjUtXG4tLVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWlfbXNnLmMtOS1cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pX21zZy5jOjEwOiNpbmNsdWRlIFwmIzM0O2lwYV9xbWlfbXNnLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pX21zZy5jLTExLVxuLS1cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pX21zZy5oLTgtXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaV9tc2cuaDo5Oi8qID09PSBPbmx5IFwmIzM0O2lwYV9xbWlcJiMzNDsgYW5kIFwmIzM0O2lwYV9xbWlfbXNnLmNcJiMzNDsgc2hvdWxkIGluY2x1ZGUgdGhpcyBmaWxlID09PSAqL1xuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWlfbXNnLmgtMTAtXG4tLVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWlfbXNnLmg9MjI2PXN0cnVjdCBpcGFfaW5pdF9tb2RlbV9kcml2ZXJfcnNwIHtcbi0tXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaV9tc2cuaC0yNDktXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaV9tc2cuaDoyNTA6LyogTWVzc2FnZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMgZGVmaW5lZCBpbiBcJiMzNDtpcGFfcW1pX21zZy5jXCYjMzQ7ICovXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaV9tc2cuaC0yNTEtZXh0ZXJuIGNvbnN0IHN0cnVjdCBxbWlfZWxlbV9pbmZvIGlwYV9pbmRpY2F0aW9uX3JlZ2lzdGVyX3JlcV9laVtdO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTI4MwoJCQkJCQkJb3V0cHV0OiAxMjMKCQkJCQkJCXRob3VnaHRzOiA0OTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgSVBBIERyaXZlciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLiBJdCBsb29rcyBsaWtlIGBpcGFfcW1pX3NldHVwYCBpcyBjYWxsZWQgYnkgYGlwYV9zZXR1cGAsIHdoaWNoIGlzLCBpbiB0dXJuLCBjYWxsZWQgYnkgYGlwYV9wcm9iZWAuIEFuZCBgaXBhX3Byb2JlYCBpcyB0aGUgcHJvYmUgY2FsbGJhY2sgZm9yIHRoZSAmIzM0O2lwYSYjMzQ7IHBsYXRmb3JtIGRyaXZlciwgc3BlY2lmaWNhbGx5IG1hdGNoaW5nIFF1YWxjb21tIGRldmljZSB0cmVlIG5vZGVzLiBUaGUgY3JpdGljYWwgdGhpbmcgaGVyZSBpcyB0aGF0IHRoaXMgZHJpdmVyIHJlbGllcyBvbiB2ZXJ5IHNwZWNpZmljIFF1YWxjb21tIFNvQyBoYXJkd2FyZSDigJMgdGhpbmdzIGxpa2UgY2xvY2tzLCBpbnRlcmNvbm5lY3QsIEdTSSwgc2hhcmVkIG1lbW9yeSAoU01FTSwgU01QMlApLCBhbmQgcGFydGljdWxhciByZWdpc3RlciBtYXBwaW5ncy4gVGhpcyBpc24mIzM5O3QgZ2VuZXJpYzsgaXQmIzM5O3MgcGxhdGZvcm0tc3BlY2lmaWMuCgpOb3csIGNvbnNpZGVyaW5nIHRoZSB0YXJnZXQgZW52aXJvbm1lbnQsIHdoaWNoIGlzIGFtZDY0LCBvciB0eXBpY2FsIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgYW5kIEdDRSwgdGhpcyBoYXJkd2FyZSBzaW1wbHkgKndvbiYjMzk7dCogYmUgcHJlc2VudC4gSXQgY2FuJiMzOTt0IGJlIHByb2JlZCwgYW5kIGl0JiMzOTtzIG5vdCBnb2luZyB0byBiZSBlbXVsYXRlZCBpbiBhbnkgbWVhbmluZ2Z1bCB3YXkuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0JiMzOTtzIGNvbnNpZGVyIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYS4gQXJlIHRoZXJlIGFueSBvdGhlciByZWQgZmxhZ3M/IFNwZWNpZmljYWxseSwgYXJlIHRoZXJlIGFueSBzdHJ1Y3R1cmFsIGlzc3VlcyB0aGF0IHdvdWxkIHByZXZlbnQgdXMgZnJvbSBmdXp6aW5nPwotIFdlJiMzOTtyZSBsb29raW5nIGZvciB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQuCi0gV2UmIzM5O3JlIGxvb2tpbmcgZm9yIHVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRocy4KClRoaXMgcGF0Y2gsIG1vZGlmeWluZyBgZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuY2AsIGlzIHBhcnQgb2YgdGhlIFF1YWxjb21tIElQIEFjY2VsZXJhdG9yIChJUEEpIGRyaXZlci4gSXQmIzM5O3MgY2xlYXJseSB0aWVkIHRvIFF1YWxjb21tIEFSTSBTb0NzIGFuZCByZXF1aXJlcyB0aGF0IGRlZGljYXRlZCBoYXJkd2FyZSBhbmQgZGV2aWNlIHRyZWUgYmluZGluZ3MgdG8gZXZlbiBsb2FkLiBUaGVyZSBpcyBhYnNvbHV0ZWx5IG5vIHdheSB0aGlzIGRyaXZlciBjYW4gYmUgcHJvYmVkIG9yIGV4ZWN1dGUgaW4gb3VyIHN0YW5kYXJkIGFtZDY0IFFFTVUvR0NFIHRlc3RpbmcgZW52aXJvbm1lbnQuIFRoZSBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSwgd2hpY2ggY29uZmlybXMgdGhpcy4KClRoZXJlZm9yZSwgdGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLgoKSGVyZSYjMzk7cyB0aGUgZGF0YSBmb3IgdGhlIGBzZXQtcmVzdWx0c2AgY2FsbDoKCiogICBgV29ydGhGdXp6aW5nYDogYGZhbHNlYAoqICAgYFJlYXNvbmluZ2A6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBkcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jYCBpbiB0aGUgUXVhbGNvbW0gSVAgQWNjZWxlcmF0b3IgKElQQSkgZHJpdmVyLiBUaGlzIGlzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBzcGVjaWZpYyBRdWFsY29tbSBBUk0gU29DcyByZXF1aXJpbmcgZGVkaWNhdGVkIGhhcmR3YXJlIChtb2RlbSwgaW50ZXJjb25uZWN0LCBHU0ksIFNNRU0sIFNNUDJQKSBhbmQgZGV2aWNlIHRyZWUgYmluZGluZ3MsIHdoaWNoIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQgb3IgcHJvYmVkIGluIHN0YW5kYXJkIHg4Ni9hbWQ2NCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLiBBcyBzdWNoLCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDsKKiAgIGBFbmFibGVDb25maWdzYDogYFtdYAoqICAgYEZvY3VzU3ltYm9sc2A6IGBbXWAKCkFuZCB0aGF0JiMzOTtzIHRoYXQuIE5vdyB0byBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIGZpbmFsaXplIHRoaXMgYXNzZXNzbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTk6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBkcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jIGluIHRoZSBRdWFsY29tbSBJUCBBY2NlbGVyYXRvciAoSVBBKSBkcml2ZXIuIFRoaXMgaXMgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIFF1YWxjb21tIEFSTSBTb0NzIHJlcXVpcmluZyBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSBjb21wb25lbnRzIChHU0ksIFNNRU0sIFNNUDJQLCBpbnRlcmNvbm5lY3RzKSBhbmQgZGV2aWNlIHRyZWUgZGVzY3JpcHRpb25zLiBJdCBjYW5ub3QgYmUgcHJvYmVkIG9yIGV4ZWN1dGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0Ugb24gYW1kNjQpLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYyBpbiB0aGUgUXVhbGNvbW0gSVAgQWNjZWxlcmF0b3IgKElQQSkgZHJpdmVyLiBUaGlzIGlzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBRdWFsY29tbSBBUk0gU29DcyByZXF1aXJpbmcgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgY29tcG9uZW50cyAoR1NJLCBTTUVNLCBTTVAyUCwgaW50ZXJjb25uZWN0cykgYW5kIGRldmljZSB0cmVlIGRlc2NyaXB0aW9ucy4gSXQgY2Fubm90IGJlIHByb2JlZCBvciBleGVjdXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFIG9uIGFtZDY0KSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE5OjU2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxOTo1NTo0NC41NDk1NTI5M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2NDc1MjY1Njc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYyBpbiB0aGUgUXVhbGNvbW0gSVAgQWNjZWxlcmF0b3IgKElQQSkgZHJpdmVyLiBUaGlzIGlzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBRdWFsY29tbSBBUk0gU29DcyByZXF1aXJpbmcgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgY29tcG9uZW50cyAoR1NJLCBTTUVNLCBTTVAyUCwgaW50ZXJjb25uZWN0cykgYW5kIGRldmljZSB0cmVlIGRlc2NyaXB0aW9ucy4gSXQgY2Fubm90IGJlIHByb2JlZCBvciBleGVjdXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFIG9uIGFtZDY0KSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE5OjU1OjQ0LjU0OTU1OTAzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTAwNTU4MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4MGQ1Y2YyODQ3YWY3M2VjYjgyNWE2MWM2NmM2MWI5NTZjZTA2Zjc0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDEwIDE5OjU1OjQzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMgYi9kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jXFxuaW5kZXggZDc3MWYzYTcxZjk0Zi4uYTdjYzk4YjI3ZTMzYyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jXFxuKysrIGIvZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuY1xcbkBAIC0xNjgsNiArMTY4LDE0IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcW1pX29wcyBpcGFfc2VydmVyX29wcyA9IHtcXG4gXFx0LmJ5ZVxcdFxcdD0gaXBhX3NlcnZlcl9ieWUsXFxuIH07XFxuIFxcbisvKiBUcnVlIGlmIGEgUU1JIHJlcXVlc3QgYXJyaXZlZCBmcm9tIHRoZSBtb2RlbSB3ZSBhcmUgcGFpcmVkIHdpdGggKi9cXG4rc3RhdGljIGJvb2wgaXBhX3NlcnZlcl9mcm9tX21vZGVtKGNvbnN0IHN0cnVjdCBpcGFfcW1pICppcGFfcW1pLFxcbitcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9xcnRyICpzcSlcXG4re1xcbitcXHRyZXR1cm4gc3EtXFx1MDAzZXNxX25vZGUgPT0gaXBhX3FtaS1cXHUwMDNlbW9kZW1fc3Euc3Ffbm9kZSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgICAgc3EtXFx1MDAzZXNxX3BvcnQgPT0gaXBhX3FtaS1cXHUwMDNlbW9kZW1fc3Euc3FfcG9ydDtcXG4rfVxcbitcXG4gLyogQ2FsbGJhY2sgZnVuY3Rpb24gdG8gaGFuZGxlIGFuIElORElDQVRJT05fUkVHSVNURVIgcmVxdWVzdCBtZXNzYWdlIGZyb20gdGhlXFxuICAqIG1vZGVtLiAgVGhpcyBpbmZvcm1zIHRoZSBBUCB0aGF0IHRoZSBtb2RlbSBpcyBub3cgcmVhZHkgdG8gcmVjZWl2ZSB0aGVcXG4gICogSU5JVF9DT01QTEVURSBpbmRpY2F0aW9uIG1lc3NhZ2UuXFxuQEAgLTE4NSw2ICsxOTMsMTMgQEAgc3RhdGljIHZvaWQgaXBhX3NlcnZlcl9pbmRpY2F0aW9uX3JlZ2lzdGVyKHN0cnVjdCBxbWlfaGFuZGxlICpxbWksXFxuIFxcdGlwYV9xbWkgPSBjb250YWluZXJfb2YocW1pLCBzdHJ1Y3QgaXBhX3FtaSwgc2VydmVyX2hhbmRsZSk7XFxuIFxcdGlwYSA9IGNvbnRhaW5lcl9vZihpcGFfcW1pLCBzdHJ1Y3QgaXBhLCBxbWkpO1xcbiBcXG4rXFx0aWYgKCFpcGFfc2VydmVyX2Zyb21fbW9kZW0oaXBhX3FtaSwgc3EpKSB7XFxuK1xcdFxcdGRldl93YXJuX3JhdGVsaW1pdGVkKGlwYS1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJpZ25vcmluZyBRTUkgcmVxdWVzdCBmcm9tIG5vbi1tb2RlbSBzZW5kZXIgJXU6JXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgc3EtXFx1MDAzZXNxX25vZGUsIHNxLVxcdTAwM2VzcV9wb3J0KTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbiBcXHRyc3AucnNwLnJlc3VsdCA9IFFNSV9SRVNVTFRfU1VDQ0VTU19WMDE7XFxuIFxcdHJzcC5yc3AuZXJyb3IgPSBRTUlfRVJSX05PTkVfVjAxO1xcbiBcXG5AQCAtMjE0LDYgKzIyOSwxMyBAQCBzdGF0aWMgdm9pZCBpcGFfc2VydmVyX2RyaXZlcl9pbml0X2NvbXBsZXRlKHN0cnVjdCBxbWlfaGFuZGxlICpxbWksXFxuIFxcdGlwYV9xbWkgPSBjb250YWluZXJfb2YocW1pLCBzdHJ1Y3QgaXBhX3FtaSwgc2VydmVyX2hhbmRsZSk7XFxuIFxcdGlwYSA9IGNvbnRhaW5lcl9vZihpcGFfcW1pLCBzdHJ1Y3QgaXBhLCBxbWkpO1xcbiBcXG4rXFx0aWYgKCFpcGFfc2VydmVyX2Zyb21fbW9kZW0oaXBhX3FtaSwgc3EpKSB7XFxuK1xcdFxcdGRldl93YXJuX3JhdGVsaW1pdGVkKGlwYS1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJpZ25vcmluZyBRTUkgcmVxdWVzdCBmcm9tIG5vbi1tb2RlbSBzZW5kZXIgJXU6JXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgc3EtXFx1MDAzZXNxX25vZGUsIHNxLVxcdTAwM2VzcV9wb3J0KTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbiBcXHRyc3AucnNwLnJlc3VsdCA9IFFNSV9SRVNVTFRfU1VDQ0VTU19WMDE7XFxuIFxcdHJzcC5yc3AuZXJyb3IgPSBRTUlfRVJSX05PTkVfVjAxO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6NTU6NDUuMDYwNTEwNDU4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozNTk2NDI5Mjg4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYyBpbiB0aGUgUXVhbGNvbW0gSVAgQWNjZWxlcmF0b3IgKElQQSkgZHJpdmVyLiBUaGlzIGlzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBRdWFsY29tbSBBUk0gU29DcyByZXF1aXJpbmcgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgY29tcG9uZW50cyAoR1NJLCBTTUVNLCBTTVAyUCwgaW50ZXJjb25uZWN0cykgYW5kIGRldmljZSB0cmVlIGRlc2NyaXB0aW9ucy4gSXQgY2Fubm90IGJlIHByb2JlZCBvciBleGVjdXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFIG9uIGFtZDY0KSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODBkNWNmMjg0N2FmNzNlY2I4MjVhNjFjNjZjNjFiOTU2Y2UwNmY3NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDEwIDE5OjU1OjQzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYyBiL2RyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmNcbmluZGV4IGQ3NzFmM2E3MWY5NGYuLmE3Y2M5OGIyN2UzM2MgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jXG4rKysgYi9kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jXG5AQCAtMTY4LDYgKzE2OCwxNCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHFtaV9vcHMgaXBhX3NlcnZlcl9vcHMgPSB7XG4gXHQuYnllXHRcdD0gaXBhX3NlcnZlcl9ieWUsXG4gfTtcbiBcbisvKiBUcnVlIGlmIGEgUU1JIHJlcXVlc3QgYXJyaXZlZCBmcm9tIHRoZSBtb2RlbSB3ZSBhcmUgcGFpcmVkIHdpdGggKi9cbitzdGF0aWMgYm9vbCBpcGFfc2VydmVyX2Zyb21fbW9kZW0oY29uc3Qgc3RydWN0IGlwYV9xbWkgKmlwYV9xbWksXG4rXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9xcnRyICpzcSlcbit7XG4rXHRyZXR1cm4gc3EtXHUwMDNlc3Ffbm9kZSA9PSBpcGFfcW1pLVx1MDAzZW1vZGVtX3NxLnNxX25vZGUgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgc3EtXHUwMDNlc3FfcG9ydCA9PSBpcGFfcW1pLVx1MDAzZW1vZGVtX3NxLnNxX3BvcnQ7XG4rfVxuK1xuIC8qIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGhhbmRsZSBhbiBJTkRJQ0FUSU9OX1JFR0lTVEVSIHJlcXVlc3QgbWVzc2FnZSBmcm9tIHRoZVxuICAqIG1vZGVtLiAgVGhpcyBpbmZvcm1zIHRoZSBBUCB0aGF0IHRoZSBtb2RlbSBpcyBub3cgcmVhZHkgdG8gcmVjZWl2ZSB0aGVcbiAgKiBJTklUX0NPTVBMRVRFIGluZGljYXRpb24gbWVzc2FnZS5cbkBAIC0xODUsNiArMTkzLDEzIEBAIHN0YXRpYyB2b2lkIGlwYV9zZXJ2ZXJfaW5kaWNhdGlvbl9yZWdpc3RlcihzdHJ1Y3QgcW1pX2hhbmRsZSAqcW1pLFxuIFx0aXBhX3FtaSA9IGNvbnRhaW5lcl9vZihxbWksIHN0cnVjdCBpcGFfcW1pLCBzZXJ2ZXJfaGFuZGxlKTtcbiBcdGlwYSA9IGNvbnRhaW5lcl9vZihpcGFfcW1pLCBzdHJ1Y3QgaXBhLCBxbWkpO1xuIFxuK1x0aWYgKCFpcGFfc2VydmVyX2Zyb21fbW9kZW0oaXBhX3FtaSwgc3EpKSB7XG4rXHRcdGRldl93YXJuX3JhdGVsaW1pdGVkKGlwYS1cdTAwM2VkZXYsXG4rXHRcdFx0XHQgICAgIFwiaWdub3JpbmcgUU1JIHJlcXVlc3QgZnJvbSBub24tbW9kZW0gc2VuZGVyICV1OiV1XFxuXCIsXG4rXHRcdFx0XHQgICAgIHNxLVx1MDAzZXNxX25vZGUsIHNxLVx1MDAzZXNxX3BvcnQpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4gXHRyc3AucnNwLnJlc3VsdCA9IFFNSV9SRVNVTFRfU1VDQ0VTU19WMDE7XG4gXHRyc3AucnNwLmVycm9yID0gUU1JX0VSUl9OT05FX1YwMTtcbiBcbkBAIC0yMTQsNiArMjI5LDEzIEBAIHN0YXRpYyB2b2lkIGlwYV9zZXJ2ZXJfZHJpdmVyX2luaXRfY29tcGxldGUoc3RydWN0IHFtaV9oYW5kbGUgKnFtaSxcbiBcdGlwYV9xbWkgPSBjb250YWluZXJfb2YocW1pLCBzdHJ1Y3QgaXBhX3FtaSwgc2VydmVyX2hhbmRsZSk7XG4gXHRpcGEgPSBjb250YWluZXJfb2YoaXBhX3FtaSwgc3RydWN0IGlwYSwgcW1pKTtcbiBcbitcdGlmICghaXBhX3NlcnZlcl9mcm9tX21vZGVtKGlwYV9xbWksIHNxKSkge1xuK1x0XHRkZXZfd2Fybl9yYXRlbGltaXRlZChpcGEtXHUwMDNlZGV2LFxuK1x0XHRcdFx0ICAgICBcImlnbm9yaW5nIFFNSSByZXF1ZXN0IGZyb20gbm9uLW1vZGVtIHNlbmRlciAldToldVxcblwiLFxuK1x0XHRcdFx0ICAgICBzcS1cdTAwM2VzcV9ub2RlLCBzcS1cdTAwM2VzcV9wb3J0KTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuIFx0cnNwLnJzcC5yZXN1bHQgPSBRTUlfUkVTVUxUX1NVQ0NFU1NfVjAxO1xuIFx0cnNwLnJzcC5lcnJvciA9IFFNSV9FUlJfTk9ORV9WMDE7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxOTo1NTo0NS4wNjA1MTE1NzhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MTUwNTg5NjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgcmV2aWV3aW5nIHRoaXMgcGF0Y2g6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgSVBBIFFNSSBEcml2ZXIgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gd2UgaGF2ZSBhIHBhdGNoIHRvdWNoaW5nIGBkcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbiBhbmQgdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCB0aGUgUXVhbGNvbW0gSVBBIChJUCBBY2NlbGVyYXRvcikgaXMgZG9pbmcgYW5kIGhvdyBpdCdzIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBzeXN0ZW0uXG5cbkknbGwgc3RhcnQgd2l0aCBhIHF1aWNrIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCBvbiB0aGF0IHNwZWNpZmljIGZpbGUuIFVuZGVyc3RhbmRpbmcgdGhlIGZ1bmRhbWVudGFsIHN0cnVjdHVyZSBhbmQgaW50ZXJhY3Rpb25zIHdpbGwgYmUga2V5LiBGcm9tIHRoZXJlLCBJJ2xsIG5lZWQgdG8ga25vdyB0aGUgY29uZmlndXJhdGlvbi4gSSdsbCByZWFkIHRoZSBgS2NvbmZpZ2AgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgKGBkcml2ZXJzL25ldC9pcGEvS2NvbmZpZ2ApIG9yIHF1aWNrbHkgYGdyZXBgIGZvciBgUUNPTV9JUEFgIOKAkyBzb21ldGhpbmcgdG8gZ2V0IG1lIHRvIHRoZSBuZWNlc3NhcnkgS2NvbmZpZyBlbnRyaWVzLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMuIEdyYXNwaW5nIHRoZSBjb25maWd1cmF0aW9uIGlzIGVzc2VudGlhbCBiZWZvcmUgZXhhbWluaW5nIHRoZSBzcGVjaWZpYyBjb2RlIGNoYW5nZXMgaW4gdGhlIHBhdGNoIGl0c2VsZi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM5NywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6NTU6NTAuMjExMTExNDI5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0ODkwMTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBRQ09NX0lQQVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9pcGFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvaXBhL0tjb25maWc6MTpjb25maWcgUUNPTV9JUEFcXG5kcml2ZXJzL25ldC9pcGEvS2NvbmZpZy0yLVxcdHRyaXN0YXRlIFxcXCJRdWFsY29tbSBJUEEgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6NTU6NTAuMjY2MDA4MDAxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE5MjExNDA3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgSVBBIEtjb25maWcqKlxuXG5BbHJpZ2h0LCBsZXQncyBwdWxsIHVwIGBkcml2ZXJzL25ldC9pcGEvS2NvbmZpZ2AuIFRpbWUgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBJUEEgKEludGVncmF0ZWQgUGFja2V0IEFjY2VsZXJhdG9yKSBkcml2ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHRoaW5nIGlzIHN0cnVjdHVyZWQuIEknbSBsb29raW5nIGZvciB0aGUga2V5IGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzOiB0aGUgb25lcyB0aGF0IGVuYWJsZSBvciBkaXNhYmxlIGNvcmUgZmVhdHVyZXMsIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgc3Vic3lzdGVtcywgYW5kIGFueSBkZXBlbmRlbmNpZXMgb24gcGxhdGZvcm0tc3BlY2lmaWMgc2V0dGluZ3MuIEknbGwgYmUgc2VhcmNoaW5nIGZvciBhbnkgdHJpY2t5IGxvZ2ljIGluIHRoZSBkZXBlbmRlbmN5IGV4cHJlc3Npb25zLCB0aGUga2luZCB0aGF0IG1pZ2h0IGludHJvZHVjZSBzdWJ0bGUgY29tcGF0aWJpbGl0eSBpc3N1ZXMgb3IgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgZmVhdHVyZXMgcmVsYXRlZCB0byB2YXJpb3VzIHBhY2tldCBwcm9jZXNzaW5nIHN0YWdlcywgb2ZmbG9hZCBjYXBhYmlsaXRpZXMgKFRDUC9JUCwgTDIpLCBhbmQgbWF5YmUgc29tZSBRb1Mgb3IgZmxvdyBjb250cm9sIG1lY2hhbmlzbXMuIEkgYWxzbyBleHBlY3QgdG8gY2hlY2sgdGhhdCBlYWNoIG9wdGlvbiBmb2xsb3dzIHRoZSBlc3RhYmxpc2hlZCBrZXJuZWwgY29kaW5nIGNvbnZlbnRpb25zIGZvciBLY29uZmlnIGZpbGVzLiBUaGVuIEkgY2FuIHVzZSB0aGlzIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSBhIG1lbnRhbCBtYXAgb2YgdGhpcyBkcml2ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3ODQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxOTo1NTo1Mi40NTgxMjUyMjNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9pcGEvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdGNvbmZpZyBRQ09NX0lQQVxcbiAgIDI6XFx0XFx0dHJpc3RhdGUgXFxcIlF1YWxjb21tIElQQSBzdXBwb3J0XFxcIlxcbiAgIDM6XFx0XFx0ZGVwZW5kcyBvbiBORVQgXFx1MDAyNlxcdTAwMjYgUUNPTV9TTUVNXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfUUNPTSB8fCBDT01QSUxFX1RFU1RcXG4gICA1OlxcdFxcdGRlcGVuZHMgb24gSU5URVJDT05ORUNUXFxuICAgNjpcXHRcXHRkZXBlbmRzIG9uIFFDT01fUlBST0NfQ09NTU9OIHx8IChRQ09NX1JQUk9DX0NPTU1PTj1uIFxcdTAwMjZcXHUwMDI2IENPTVBJTEVfVEVTVClcXG4gICA3OlxcdFxcdGRlcGVuZHMgb24gUUNPTV9BT1NTX1FNUCB8fCBRQ09NX0FPU1NfUU1QPW5cXG4gICA4OlxcdFxcdHNlbGVjdCBRQ09NX01EVF9MT0FERVJcXG4gICA5OlxcdFxcdHNlbGVjdCBRQ09NX1BBU1xcbiAgMTA6XFx0XFx0c2VsZWN0IFFDT01fUU1JX0hFTFBFUlNcXG4gIDExOlxcdFxcdGhlbHBcXG4gIDEyOlxcdFxcdCAgQ2hvb3NlIFkgb3IgTSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIFF1YWxjb21tXFxuICAxMzpcXHRcXHQgIElQIEFjY2VsZXJhdG9yIChJUEEpLCBhIGhhcmR3YXJlIGJsb2NrIHByZXNlbnQgaW4gc29tZVxcbiAgMTQ6XFx0XFx0ICBRdWFsY29tbSBTb0NzLiAgVGhlIElQQSBpcyBhIHByb2dyYW1tYWJsZSBwcm90b2NvbCBwcm9jZXNzb3JcXG4gIDE1OlxcdFxcdCAgdGhhdCBpcyBjYXBhYmxlIG9mIGdlbmVyaWMgaGFyZHdhcmUgaGFuZGxpbmcgb2YgSVAgcGFja2V0cyxcXG4gIDE2OlxcdFxcdCAgaW5jbHVkaW5nIHJvdXRpbmcsIGZpbHRlcmluZywgYW5kIE5BVC4gIEN1cnJlbnRseSB0aGUgSVBBXFxuICAxNzpcXHRcXHQgIGRyaXZlciBzdXBwb3J0cyBvbmx5IGJhc2ljIHRyYW5zcG9ydCBvZiBuZXR3b3JrIHRyYWZmaWNcXG4gIDE4OlxcdFxcdCAgYmV0d2VlbiB0aGUgQVAgYW5kIG1vZGVtLlxcbiAgMTk6XFx0XFxuICAyMDpcXHRcXHQgIE5vdGUgdGhhdCBpZiBzZWxlY3RlZCwgdGhlIHNlbGVjdGlvbiB0eXBlIG11c3QgbWF0Y2ggdGhhdFxcbiAgMjE6XFx0XFx0ICBvZiBRQ09NX1E2VjVfQ09NTU9OIChZIG9yIE0pLlxcbiAgMjI6XFx0XFxuICAyMzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE5OjU1OjUyLjQ1ODIzMzI0M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU0Mzg1NDQ5MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBRdWFsY29tbSBJUEEgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYFFDT01fSVBBYCBoZXJlLiBSaWdodCwgdGhhdCdzIHRoZSBRdWFsY29tbSBJUEEgc3VwcG9ydCDigJMgZXNzZW50aWFsbHkgdGhlIGhhcmR3YXJlIGJsb2NrLCB0aGUgSVBBLCBvbiB0aGVpciBTbmFwZHJhZ29uIG9yIEFSTSBTb0NzLiBUaGUgcmVhbCBxdWVzdGlvbiBJJ20gZ3JhcHBsaW5nIHdpdGggaXMgd2hldGhlciB0aGlzIGlzIGEgKnBsYXRmb3JtKiBkcml2ZXIuIFRoYXQncyB0aGUgY3J1eCBvZiBpdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBpdHMgcHJvYmluZyBwcm9jZXNzLiBEb2VzIGl0IHJlcXVpcmUgc29tZSB2ZXJ5IHNwZWNpZmljIGhhcmR3YXJlIGNoYXJhY3RlcmlzdGljcyBvciBkZXBlbmRlbmNpZXMgdGllZCB0byBhIHBhcnRpY3VsYXIgU29DPyBUaGUgcGxhdGZvcm0gZHJpdmVyIHBhcmFkaWdtIG9mdGVuIGhpbmdlcyBvbiB0aGF0IGxldmVsIG9mIGhhcmR3YXJlIHNwZWNpZmljaXR5LCBzbyBJJ2xsIG5lZWQgdG8gZGlnIGludG8gaG93IHRoZSBwcm9iZSBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZC4gRG9lcyBpdCwgZm9yIGluc3RhbmNlLCBleHBsaWNpdGx5IHVzZSBgcGxhdGZvcm1fZHJpdmVyX3Byb2JlYCBvciBzb21ldGhpbmcgc2ltaWxhcj8gVGhhdCdsbCBiZSB0aGUga2V5IGluZGljYXRvciB0byBuYWlsIHRoaXMgZG93bi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQwNywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6NTU6NTcuODk2NzgyMTg2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2NTAyODYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vZHVsZV9wbGF0Zm9ybV9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvaXBhXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2lwYS9pcGFfbWFpbi5jPTEwMTE9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaXBhX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfbWFpbi5jLTEwMjItXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9tYWluLmM6MTAyMzptb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGlwYV9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfbWFpbi5jLTEwMjQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE5OjU1OjU3Ljk1MzI5MzEzOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3MTIxMTM5NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgSVBBIERyaXZlcioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgaXNzdWUsIHNvIGxldCdzIHN0YXJ0IHdpdGggYGRyaXZlcnMvbmV0L2lwYS9pcGFfbWFpbi5jYC4gTXkgZ3V0IHRlbGxzIG1lIHNvbWV0aGluZydzIG9mZiBpbiB0aGF0IGFyZWEuIE5vdywgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGlzIHN5c3RlbSwgbGluZSAxMDAwIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHBsYWNlIHRvIHN0YXJ0LCBhbmQgc3BlY2lmaWNhbGx5IEkgc2hvdWxkIHBheSBhdHRlbnRpb24gdG8gdGhlIHByb2JlIGZ1bmN0aW9uLiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZyB0aGVyZS4uLiBJIG5lZWQgdG8gZ2V0IGludG8gdGhlIGRldGFpbHMgdG8gZmlndXJlIHRoaXMgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzczLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6NTU6NTkuNjY1NDExMjkyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTEzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9pcGEvaXBhX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5ODAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5ODA6XFx0XFx0XFx0XFx0cG1fcnVudGltZV9wdXRfbm9pZGxlKGRldik7XFxuIDk4MTpcXHRcXHRcXHRcXHRyZXR1cm47XFxuIDk4MjpcXHRcXHRcXHR9XFxuIDk4MzpcXHRcXG4gOTg0OlxcdFxcdFxcdGlwYV90ZWFyZG93bihpcGEpO1xcbiA5ODU6XFx0XFx0fVxcbiA5ODY6XFx0XFxuIDk4NzpcXHRcXHRpcGFfZGVjb25maWcoaXBhKTtcXG4gOTg4OlxcdG91dF9wb3dlcl9wdXQ6XFxuIDk4OTpcXHRcXHRwbV9ydW50aW1lX3B1dF9ub2lkbGUoZGV2KTtcXG4gOTkwOlxcdFxcdGlwYV9zbXAycF9leGl0KGlwYSk7XFxuIDk5MTpcXHRcXHRpcGFfdGFibGVfZXhpdChpcGEpO1xcbiA5OTI6XFx0XFx0aXBhX2VuZHBvaW50X2V4aXQoaXBhKTtcXG4gOTkzOlxcdFxcdGdzaV9leGl0KFxcdTAwMjZpcGEtXFx1MDAzZWdzaSk7XFxuIDk5NDpcXHRcXHRpcGFfbWVtX2V4aXQoaXBhKTtcXG4gOTk1OlxcdFxcdGlwYV9yZWdfZXhpdChpcGEpO1xcbiA5OTY6XFx0XFx0a2ZyZWUoaXBhKTtcXG4gOTk3OlxcdFxcdGlwYV9wb3dlcl9leGl0KHBvd2VyKTtcXG4gOTk4OlxcdFxcdGlwYV9pbnRlcnJ1cHRfZXhpdChpbnRlcnJ1cHQpO1xcbiA5OTk6XFx0XFxuMTAwMDpcXHRcXHRkZXZfaW5mbyhkZXYsIFxcXCJJUEEgZHJpdmVyIHJlbW92ZWRcXFwiKTtcXG4xMDAxOlxcdH1cXG4xMDAyOlxcdFxcbjEwMDM6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKmlwYV9hdHRyaWJ1dGVfZ3JvdXBzW10gPSB7XFxuMTAwNDpcXHRcXHRcXHUwMDI2aXBhX2F0dHJpYnV0ZV9ncm91cCxcXG4xMDA1OlxcdFxcdFxcdTAwMjZpcGFfZmVhdHVyZV9hdHRyaWJ1dGVfZ3JvdXAsXFxuMTAwNjpcXHRcXHRcXHUwMDI2aXBhX2VuZHBvaW50X2lkX2F0dHJpYnV0ZV9ncm91cCxcXG4xMDA3OlxcdFxcdFxcdTAwMjZpcGFfbW9kZW1fYXR0cmlidXRlX2dyb3VwLFxcbjEwMDg6XFx0XFx0TlVMTCxcXG4xMDA5OlxcdH07XFxuMTAxMDpcXHRcXG4xMDExOlxcdHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGlwYV9kcml2ZXIgPSB7XFxuMTAxMjpcXHRcXHQucHJvYmVcXHRcXHQ9IGlwYV9wcm9iZSxcXG4xMDEzOlxcdFxcdC5yZW1vdmVcXHRcXHQ9IGlwYV9yZW1vdmUsXFxuMTAxNDpcXHRcXHQuc2h1dGRvd25cXHQ9IGlwYV9yZW1vdmUsXFxuMTAxNTpcXHRcXHQuZHJpdmVyXFx0PSB7XFxuMTAxNjpcXHRcXHRcXHQubmFtZVxcdFxcdD0gXFxcImlwYVxcXCIsXFxuMTAxNzpcXHRcXHRcXHQucG1cXHRcXHQ9IFxcdTAwMjZpcGFfcG1fb3BzLFxcbjEwMTg6XFx0XFx0XFx0Lm9mX21hdGNoX3RhYmxlXFx0PSBpcGFfbWF0Y2gsXFxuMTAxOTpcXHRcXHRcXHQuZGV2X2dyb3Vwc1xcdD0gaXBhX2F0dHJpYnV0ZV9ncm91cHMsXFxuMTAyMDpcXHRcXHR9LFxcbjEwMjE6XFx0fTtcXG4xMDIyOlxcdFxcbjEwMjM6XFx0bW9kdWxlX3BsYXRmb3JtX2RyaXZlcihpcGFfZHJpdmVyKTtcXG4xMDI0OlxcdFxcbjEwMjU6XFx0TU9EVUxFX0xJQ0VOU0UoXFxcIkdQTCB2MlxcXCIpO1xcbjEwMjY6XFx0TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJRdWFsY29tbSBJUCBBY2NlbGVyYXRvciBkZXZpY2UgZHJpdmVyXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE5OjU1OjU5LjY2NTUyNzEwM1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDk3NzAzMDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKklQQSBQcm9iZSBDaGVjayoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgSVBBIGRyaXZlcidzIHByb2Jpbmcgc2VxdWVuY2UuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIEkgc2hvdWxkIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYGlwYV9wcm9iZWAuIEkga25vdyB0aGF0J3MgdGhlIGVudHJ5IHBvaW50LCBvciBhdCBsZWFzdCBhIGNyaXRpY2FsIHBhcnQgb2YgdGhlIGluaXRpYWwgc2V0dXAsIGFuZCBJJ20gcHJldHR5IHN1cmUgSSBjYW4gZmluZCBpdCB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9pcGEvaXBhX21haW4uY2AgZmlsZS4gVGltZSB0byBjcmFjayBvcGVuIHRoYXQgY29kZSBhbmQgc2VlIHdoYXQgdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbiBhbmQgaGFyZHdhcmUgY2hlY2tzIGFyZSBkb2luZy4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgaW5pdGlhbGl6ZXMsIGRpc2NvdmVycyB0aGUgaGFyZHdhcmUsIGFuZCBob3BlZnVsbHksIEknbGwgaWRlbnRpZnkgdGhlIHBvaW50IHdoZXJlIHRoZSBlcnJvciBpcyBvY2N1cnJpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MjYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE5OjU2OjAzLjE2MzIzNDAwN1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY4NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvaXBhL2lwYV9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODUwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODUwOlxcdFxcdGlwYS1cXHUwMDNldmVyc2lvbiA9IGRhdGEtXFx1MDAzZXZlcnNpb247XFxuIDg1MTpcXHRcXHRpcGEtXFx1MDAzZW1vZGVtX3JvdXRlX2NvdW50ID0gZGF0YS1cXHUwMDNlbW9kZW1fcm91dGVfY291bnQ7XFxuIDg1MjpcXHRcXHRpbml0X2NvbXBsZXRpb24oXFx1MDAyNmlwYS1cXHUwMDNlY29tcGxldGlvbik7XFxuIDg1MzpcXHRcXG4gODU0OlxcdFxcdHJldCA9IGlwYV9yZWdfaW5pdChpcGEsIHBkZXYpO1xcbiA4NTU6XFx0XFx0aWYgKHJldClcXG4gODU2OlxcdFxcdFxcdGdvdG8gZXJyX2tmcmVlX2lwYTtcXG4gODU3OlxcdFxcbiA4NTg6XFx0XFx0cmV0ID0gaXBhX21lbV9pbml0KGlwYSwgcGRldiwgZGF0YS1cXHUwMDNlbWVtX2RhdGEpO1xcbiA4NTk6XFx0XFx0aWYgKHJldClcXG4gODYwOlxcdFxcdFxcdGdvdG8gZXJyX3JlZ19leGl0O1xcbiA4NjE6XFx0XFxuIDg2MjpcXHRcXHRyZXQgPSBpcGFfY21kX2luaXQoaXBhKTtcXG4gODYzOlxcdFxcdGlmIChyZXQpXFxuIDg2NDpcXHRcXHRcXHRnb3RvIGVycl9tZW1fZXhpdDtcXG4gODY1OlxcdFxcbiA4NjY6XFx0XFx0cmV0ID0gZ3NpX2luaXQoXFx1MDAyNmlwYS1cXHUwMDNlZ3NpLCBwZGV2LCBpcGEtXFx1MDAzZXZlcnNpb24sIGRhdGEtXFx1MDAzZWVuZHBvaW50X2NvdW50LFxcbiA4Njc6XFx0XFx0XFx0ICAgICAgIGRhdGEtXFx1MDAzZWVuZHBvaW50X2RhdGEpO1xcbiA4Njg6XFx0XFx0aWYgKHJldClcXG4gODY5OlxcdFxcdFxcdGdvdG8gZXJyX21lbV9leGl0O1xcbiA4NzA6XFx0XFxuIDg3MTpcXHRcXHQvKiBSZXN1bHQgaXMgYSBub24temVybyBtYXNrIG9mIGVuZHBvaW50cyB0aGF0IHN1cHBvcnQgZmlsdGVyaW5nICovXFxuIDg3MjpcXHRcXHRyZXQgPSBpcGFfZW5kcG9pbnRfaW5pdChpcGEsIGRhdGEtXFx1MDAzZWVuZHBvaW50X2NvdW50LCBkYXRhLVxcdTAwM2VlbmRwb2ludF9kYXRhKTtcXG4gODczOlxcdFxcdGlmIChyZXQpXFxuIDg3NDpcXHRcXHRcXHRnb3RvIGVycl9nc2lfZXhpdDtcXG4gODc1OlxcdFxcbiA4NzY6XFx0XFx0cmV0ID0gaXBhX3RhYmxlX2luaXQoaXBhKTtcXG4gODc3OlxcdFxcdGlmIChyZXQpXFxuIDg3ODpcXHRcXHRcXHRnb3RvIGVycl9lbmRwb2ludF9leGl0O1xcbiA4Nzk6XFx0XFxuIDg4MDpcXHRcXHRyZXQgPSBpcGFfc21wMnBfaW5pdChpcGEsIHBkZXYsIGxvYWRlciA9PSBJUEFfTE9BREVSX01PREVNKTtcXG4gODgxOlxcdFxcdGlmIChyZXQpXFxuIDg4MjpcXHRcXHRcXHRnb3RvIGVycl90YWJsZV9leGl0O1xcbiA4ODM6XFx0XFxuIDg4NDpcXHRcXHQvKiBQb3dlciBuZWVkcyB0byBiZSBhY3RpdmUgZm9yIGNvbmZpZyBhbmQgc2V0dXAgKi9cXG4gODg1OlxcdFxcdHJldCA9IHBtX3J1bnRpbWVfZ2V0X3N5bmMoZGV2KTtcXG4gODg2OlxcdFxcdGlmIChXQVJOX09OKHJldCBcXHUwMDNjIDApKVxcbiA4ODc6XFx0XFx0XFx0Z290byBlcnJfcG93ZXJfcHV0O1xcbiA4ODg6XFx0XFxuIDg4OTpcXHRcXHRyZXQgPSBpcGFfY29uZmlnKGlwYSwgZGF0YSk7XFxuIDg5MDpcXHRcXHRpZiAocmV0KVxcbiA4OTE6XFx0XFx0XFx0Z290byBlcnJfcG93ZXJfcHV0O1xcbiA4OTI6XFx0XFxuIDg5MzpcXHRcXHRkZXZfaW5mbyhkZXYsIFxcXCJJUEEgZHJpdmVyIGluaXRpYWxpemVkXFxcIik7XFxuIDg5NDpcXHRcXG4gODk1OlxcdFxcdC8qIElmIHRoZSBtb2RlbSBpcyBsb2FkaW5nIEdTSSBmaXJtd2FyZSwgaXQgd2lsbCB0cmlnZ2VyIGEgY2FsbCB0b1xcbiA4OTY6XFx0XFx0ICogaXBhX3NldHVwKCkgd2hlbiBpdCBoYXMgZmluaXNoZWQuICBJbiB0aGF0IGNhc2Ugd2UncmUgZG9uZSBoZXJlLlxcbiA4OTc6XFx0XFx0ICovXFxuIDg5ODpcXHRcXHRpZiAobG9hZGVyID09IElQQV9MT0FERVJfTU9ERU0pXFxuIDg5OTpcXHRcXHRcXHRnb3RvIGRvbmU7XFxuIDkwMDpcXHRcXG4gOTAxOlxcdFxcdGlmIChsb2FkZXIgPT0gSVBBX0xPQURFUl9TRUxGKSB7XFxuIDkwMjpcXHRcXHRcXHQvKiBUaGUgQVAgaXMgbG9hZGluZyBHU0kgZmlybXdhcmU7IGRvIHNvIG5vdyAqL1xcbiA5MDM6XFx0XFx0XFx0cmV0ID0gaXBhX2Zpcm13YXJlX2xvYWQoZGV2KTtcXG4gOTA0OlxcdFxcdFxcdGlmIChyZXQpXFxuIDkwNTpcXHRcXHRcXHRcXHRnb3RvIGVycl9kZWNvbmZpZztcXG4gOTA2OlxcdFxcdH0gLyogT3RoZXJ3aXNlIGxvYWRlciA9PSBJUEFfTE9BREVSX1NLSVAgKi9cXG4gOTA3OlxcdFxcbiA5MDg6XFx0XFx0LyogR1NJIGZpcm13YXJlIGlzIGxvYWRlZDsgcHJvY2VlZCB0byBzZXR1cCAqL1xcbiA5MDk6XFx0XFx0cmV0ID0gaXBhX3NldHVwKGlwYSk7XFxuIDkxMDpcXHRcXHRpZiAocmV0KVxcbiA5MTE6XFx0XFx0XFx0Z290byBlcnJfZGVjb25maWc7XFxuIDkxMjpcXHRkb25lOlxcbiA5MTM6XFx0XFx0KHZvaWQpcG1fcnVudGltZV9wdXRfYXV0b3N1c3BlbmQoZGV2KTtcXG4gOTE0OlxcdFxcbiA5MTU6XFx0XFx0cmV0dXJuIDA7XFxuIDkxNjpcXHRcXG4gOTE3OlxcdGVycl9kZWNvbmZpZzpcXG4gOTE4OlxcdFxcdGlwYV9kZWNvbmZpZyhpcGEpO1xcbiA5MTk6XFx0ZXJyX3Bvd2VyX3B1dDpcXG4gOTIwOlxcdFxcdHBtX3J1bnRpbWVfcHV0X25vaWRsZShkZXYpO1xcbiA5MjE6XFx0XFx0aXBhX3NtcDJwX2V4aXQoaXBhKTtcXG4gOTIyOlxcdGVycl90YWJsZV9leGl0OlxcbiA5MjM6XFx0XFx0aXBhX3RhYmxlX2V4aXQoaXBhKTtcXG4gOTI0OlxcdGVycl9lbmRwb2ludF9leGl0OlxcbiA5MjU6XFx0XFx0aXBhX2VuZHBvaW50X2V4aXQoaXBhKTtcXG4gOTI2OlxcdGVycl9nc2lfZXhpdDpcXG4gOTI3OlxcdFxcdGdzaV9leGl0KFxcdTAwMjZpcGEtXFx1MDAzZWdzaSk7XFxuIDkyODpcXHRlcnJfbWVtX2V4aXQ6XFxuIDkyOTpcXHRcXHRpcGFfbWVtX2V4aXQoaXBhKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6NTY6MDMuMTYzMzY0MTM3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3NjU5MDk0OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJUEEgTWF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgaXBhX21hdGNoYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHRoaW5nIGlzIG1hdGNoaW5nIG9uLiBBaCwgaXQgbG9va3MgbGlrZSBpdCdzIGNvbm5lY3RlZCB0byB0aGUgXCJPRlwiIOKAkyBEZXZpY2UgVHJlZS4gVGhhdCdzIGEgY3J1Y2lhbCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gaG93IHRoaXMgZnVuY3Rpb24gd29ya3MsIHNvIEknbGwgZ28gYWhlYWQgYW5kIGRvIGEgZ3JlcCBmb3IgYGlwYV9tYXRjaGAgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvaXBhYCBkaXJlY3RvcnkuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIGl0cyB1c2FnZSB3aXRoaW4gdGhlIElQQSBkcml2ZXIgY29udGV4dC4gVGhpcyBzaG91bGQgaGVscCBtZSBiZXR0ZXIgdW5kZXJzdGFuZCBpdHMgb3ZlcmFsbCByb2xlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDE4LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxOTo1NjowNC45MjkyNzYzNDhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MTA3NDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwYV9tYXRjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9pcGFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvaXBhL2lwYV9tYWluLmM9NTg2PXN0YXRpYyBpbnQgaXBhX2Zpcm13YXJlX2xvYWQoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9tYWluLmMtNjQxLVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfbWFpbi5jOjY0MjpzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBpcGFfbWF0Y2hbXSA9IHtcXG5kcml2ZXJzL25ldC9pcGEvaXBhX21haW4uYy02NDMtXFx0e1xcbi0tXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9tYWluLmMtNjg0LX07XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9tYWluLmM6Njg1Ok1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGlwYV9tYXRjaCk7XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9tYWluLmMtNjg2LVxcbi0tXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9tYWluLmM9MTAxMT1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBpcGFfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9tYWluLmMtMTAxNy1cXHRcXHQucG1cXHRcXHQ9IFxcdTAwMjZpcGFfcG1fb3BzLFxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfbWFpbi5jOjEwMTg6XFx0XFx0Lm9mX21hdGNoX3RhYmxlXFx0PSBpcGFfbWF0Y2gsXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9tYWluLmMtMTAxOS1cXHRcXHQuZGV2X2dyb3Vwc1xcdD0gaXBhX2F0dHJpYnV0ZV9ncm91cHMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE5OjU2OjA0Ljk4NDM5MDI3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY5ODQ1NzkyMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUXVhbGNvbW0gSVBBIERyaXZlciBmb3IgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIGBpcGFfbWF0Y2hgIGlzIGVzc2VudGlhbGx5IGEgY29tcGF0aWJpbGl0eSBsaXN0IGZvciBRdWFsY29tbSBTeXN0ZW0tb24tQ2hpcHMgKFNvQ3MpLiBXZSdyZSB0YWxraW5nIGFib3V0IGVudHJpZXMgbGlrZSBgcWNvbSxzZG04NDUtaXBhYCBhbmQgYHFjb20sc204MjUwLWlwYWAsIHNvIGl0J3MgY2xlYXJseSB0YXJnZXRpbmcgc3BlY2lmaWMgUXVhbGNvbW0gaGFyZHdhcmUuIEFuZCB0aGlzIGlzIGFsbCBydW5uaW5nIG9uIGBhbWQ2NGAsIHdoaWNoIGlzIG91ciB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG5Ob3csIGBRQ09NX0lQQWAgaXMgY29uZGl0aW9uYWwuIEl0IGhpbmdlcyBvbiBgQVJDSF9RQ09NIHx8IENPTVBJTEVfVEVTVGAsIGFzIHdlbGwgYXMgYFFDT01fU01FTWAgYW5kIGBJTlRFUkNPTk5FQ1RgLiBUaGF0IHRlbGxzIG1lIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHBsYXRmb3JtIGRyaXZlciwgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvciB0aGVzZSBRdWFsY29tbSBTb0NzLiBJdCBuZWVkcyBzcGVjaWZpYyBRdWFsY29tbSBJUCBBY2NlbGVyYXRvciBoYXJkd2FyZSBhbmQgcmVsaWVzIG9uIGRldmljZSB0cmVlIGJpbmRpbmdzLCB3aGljaCBpcyBjcnVjaWFsLlxuXG5UaGUgY2F0Y2gsIGFuZCB0aGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcgZm9yIGZ1enppbmcsIGlzIHRoYXQgZXZlbiBpZiB3ZSBmb3JjZS1jb21waWxlIHRoaXMgb24geDg2IHVzaW5nIGBDT01QSUxFX1RFU1RgLCB0aGUgZHJpdmVyICpzdGlsbCogZGVtYW5kcyB0aGUgcHJlc2VuY2Ugb2YgRFQgbm9kZXMgYW5kIHRoZSBhc3NvY2lhdGVkIHBoeXNpY2FsIGhhcmR3YXJlLiBXZSdyZSB0YWxraW5nIGFib3V0IHRoaW5ncyBsaWtlIG1vZGVtLCBpbnRlcmNvbm5lY3QsIHNoYXJlZCBtZW1vcnksIGFuZCBjbG9jayBkb21haW5zLiBTdGFuZGFyZCBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZSAoR0NFKSBjb25maWd1cmF0aW9ucyDigJMgZXZlbiBvbiBhbWQ2NC94ODZfNjQg4oCTIGFyZW4ndCBnb2luZyB0byBoYXZlIHRoaXMgUXVhbGNvbW0gSVBBIGhhcmR3YXJlIHByZXNlbnQgb3IgYXZhaWxhYmxlIHRvIGJlIHByb2JlZC5cblxuTm93LCBsZXQncyBjb25uZWN0IHRoaXMgdG8gdGhlIGluc3RydWN0aW9ucy4gU2VjdGlvbiAyIGxheXMgb3V0IG5lZ2F0aXZlIGNyaXRlcmlhIOKAkyBzY2VuYXJpb3Mgd2hlcmUgd2Ugc2hvdWxkIGF2b2lkIGZ1enppbmcuIEl0IG1lbnRpb25zIFwic3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlXCIgbGlrZSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgQVNJQ3Mgb3IgUENJZSBjYXJkcy4gU291bmRzIGZhbWlsaWFyLCBkb2Vzbid0IGl0PyBUaGUgSVBBIGRyaXZlciwgZGVwZW5kZW50IG9uIHRoaXMgUXVhbGNvbW0gaGFyZHdhcmUsIGZpdHMgdGhhdCBiaWxsLiBUaGUgaW5zdHJ1Y3Rpb25zIGFsc28gY2FsbCBvdXQgdW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzIGxpa2UgZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyB0aGF0IGFyZSB0cmlnZ2VyZWQgYnkgcGh5c2ljYWwgaG90LXVucGx1ZyBldmVudHMgb3IgbWFudWFsIGRyaXZlciB1bmJpbmRpbmcuIFRoaXMgaXMgbGlrZWx5IGFuIGlzc3VlIGhlcmUgdG9vLlxuXG5UaGUgY3JpdGljYWwgcXVlc3Rpb24gaXMgdGhpczogaXMgdGhlcmUgKmFueSogdmlydHVhbGl6ZWQsIGVtdWxhdGVkLCBvciBtb2NrZWQgd2F5IHRvIGFjY2VzcyB0aGUgSVBBIGZ1bmN0aW9uYWxpdHk/IEFyZSB0aGVyZSBhbnkgb3B0aW9ucyBha2luIHRvIGEgVVNCIGdhZGdldCwgYSBuZXRsaW5rIGludGVyZmFjZSwgb3IgYSBtb2NrIGRldmljZSB0aGF0IGNvdWxkIHNpbXVsYXRlIG9yIGFsbG93IGEgZGVncmVlIG9mIGludGVyYWN0aW9uIHdpdGggSVBBPyBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgd2hhdCBpcyBpbiBgZHJpdmVycy9uZXQvaXBhYCBhbmQgc2VlIGlmIGFueXRoaW5nIGxpa2UgdGhpcyBleGlzdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1MjUsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6NTY6MTEuOTY4OTcyNzk2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImNvZGVzZWFyY2gtZGlyLWluZGV4IiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxMjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRGlyXCI6IFwiZHJpdmVycy9uZXQvaXBhXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIkZpbGVzXCI6IFtcbiAgICBcImdzaS5jXCIsXG4gICAgXCJnc2kuaFwiLFxuICAgIFwiZ3NpX3ByaXZhdGUuaFwiLFxuICAgIFwiZ3NpX3JlZy5jXCIsXG4gICAgXCJnc2lfcmVnLmhcIixcbiAgICBcImdzaV90cmFucy5jXCIsXG4gICAgXCJnc2lfdHJhbnMuaFwiLFxuICAgIFwiaXBhLmhcIixcbiAgICBcImlwYV9jbWQuY1wiLFxuICAgIFwiaXBhX2NtZC5oXCIsXG4gICAgXCJpcGFfZGF0YS5oXCIsXG4gICAgXCJpcGFfZW5kcG9pbnQuY1wiLFxuICAgIFwiaXBhX2VuZHBvaW50LmhcIixcbiAgICBcImlwYV9nc2kuY1wiLFxuICAgIFwiaXBhX2dzaS5oXCIsXG4gICAgXCJpcGFfaW50ZXJydXB0LmNcIixcbiAgICBcImlwYV9pbnRlcnJ1cHQuaFwiLFxuICAgIFwiaXBhX21haW4uY1wiLFxuICAgIFwiaXBhX21lbS5jXCIsXG4gICAgXCJpcGFfbWVtLmhcIixcbiAgICBcImlwYV9tb2RlbS5jXCIsXG4gICAgXCJpcGFfbW9kZW0uaFwiLFxuICAgIFwiaXBhX3Bvd2VyLmNcIixcbiAgICBcImlwYV9wb3dlci5oXCIsXG4gICAgXCJpcGFfcW1pLmNcIixcbiAgICBcImlwYV9xbWkuaFwiLFxuICAgIFwiaXBhX3FtaV9tc2cuY1wiLFxuICAgIFwiaXBhX3FtaV9tc2cuaFwiLFxuICAgIFwiaXBhX3JlZy5jXCIsXG4gICAgXCJpcGFfcmVnLmhcIixcbiAgICBcImlwYV9yZXNvdXJjZS5jXCIsXG4gICAgXCJpcGFfcmVzb3VyY2UuaFwiLFxuICAgIFwiaXBhX3NtcDJwLmNcIixcbiAgICBcImlwYV9zbXAycC5oXCIsXG4gICAgXCJpcGFfc3lzZnMuY1wiLFxuICAgIFwiaXBhX3N5c2ZzLmhcIixcbiAgICBcImlwYV90YWJsZS5jXCIsXG4gICAgXCJpcGFfdGFibGUuaFwiLFxuICAgIFwiaXBhX3VjLmNcIixcbiAgICBcImlwYV91Yy5oXCIsXG4gICAgXCJpcGFfdmVyc2lvbi5oXCIsXG4gICAgXCJyZWcuaFwiXG4gIF0sXG4gIFwiU3ViZGlyc1wiOiBbXG4gICAgXCJkYXRhXCIsXG4gICAgXCJyZWdcIlxuICBdXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxOTo1NjoxMS45NjkwNzYyOTZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjYwNzUyMjYwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipFeGFtaW5pbmcgdGhlIEluaXRpYWxpemF0aW9uIG9mIGBpcGFfcW1pLmNgKipcblxuT2theSwgdGltZSB0byBkaWcgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgaXBhX3FtaS5jYCBpcyBpbml0aWFsaXplZC4gS25vd2luZyB0aGlzIGlzIGNydWNpYWwgZm9yIFsqKmluc2VydCB5b3VyIGZpZWxkL2NvbnRleHQgaGVyZSwgZS5nLiwgZGVidWdnaW5nIGEgc3BlY2lmaWMgaXNzdWUsIHVuZGVyc3RhbmRpbmcgYSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVjaywgcHJlcGFyaW5nIGZvciBhIGNvZGUgcmV2aWV3IHJlbGF0ZWQgdG8gdGhlIG1vZGVtIGludGVyZmFjZSwgZXRjLioqLiBUaGlzIGxldmVsIG9mIGluaXRpYWxpemF0aW9uIGltcGFjdHMgdGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIG1vZGVtIGludGVyZmFjZV0uIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIG9yIHN0cnVjdHVyZXMgaW52b2x2ZWQuIExldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIHRoZSBlbnRyeSBwb2ludCBvciBhbnkgaW5pdGlhbGl6YXRpb24gcm91dGluZXMgd2l0aGluIHRoZSBmaWxlIGl0c2VsZi4gSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBsaWtlIGNvbnN0cnVjdG9yIGF0dHJpYnV0ZXMsIG1vZHVsZSByZWdpc3RyYXRpb24sIG9yIGFueSBjYWxscyByZWxhdGVkIHRvIHJlc291cmNlIGFsbG9jYXRpb24gdGhhdCB3b3VsZCBzdWdnZXN0IGluaXRpYWxpemF0aW9uIGlzIGhhcHBlbmluZy4gVW5kZXJzdGFuZGluZyB0aGlzIHdpbGwgYmUgdGhlIGZvdW5kYXRpb24gZm9yIGRlYnVnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODgzNCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiY29kZXNlYXJjaC1kaXItaW5kZXgiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxOTo1NjoxNC41NzY2MDE3MDlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4OTEzNjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwYV9xbWlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvaXBhXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2lwYS9NYWtlZmlsZT0xND1pcGEteVxcdFxcdFxcdDo9XFx0aXBhX21haW4ubyBpcGFfcG93ZXIubyBpcGFfcmVnLm8gaXBhX21lbS5vIFxcXFxcXG4tLVxcbmRyaXZlcnMvbmV0L2lwYS9NYWtlZmlsZS0xNy1cXHRcXHRcXHRcXHRpcGFfZW5kcG9pbnQubyBpcGFfY21kLm8gaXBhX21vZGVtLm8gXFxcXFxcbmRyaXZlcnMvbmV0L2lwYS9NYWtlZmlsZToxODpcXHRcXHRcXHRcXHRpcGFfcmVzb3VyY2UubyBpcGFfcW1pLm8gaXBhX3FtaV9tc2cubyBcXFxcXFxuZHJpdmVycy9uZXQvaXBhL01ha2VmaWxlLTE5LVxcdFxcdFxcdFxcdGlwYV9zeXNmcy5vXFxuLS1cXG5kcml2ZXJzL25ldC9pcGEvaXBhLmgtMTQtI2luY2x1ZGUgXFxcImlwYV9tZW0uaFxcXCJcXG5kcml2ZXJzL25ldC9pcGEvaXBhLmg6MTU6I2luY2x1ZGUgXFxcImlwYV9xbWkuaFxcXCJcXG5kcml2ZXJzL25ldC9pcGEvaXBhLmgtMTYtI2luY2x1ZGUgXFxcImlwYV92ZXJzaW9uLmhcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9pcGEvaXBhLmg9NzM9c3RydWN0IGlwYSB7XFxuLS1cXG5kcml2ZXJzL25ldC9pcGEvaXBhLmgtMTMwLVxcdHN0cnVjdCBuZXRfZGV2aWNlICptb2RlbV9uZXRkZXY7XFxuZHJpdmVycy9uZXQvaXBhL2lwYS5oOjEzMTpcXHRzdHJ1Y3QgaXBhX3FtaSBxbWk7XFxuZHJpdmVycy9uZXQvaXBhL2lwYS5oLTEzMi19O1xcbi0tXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9tYWluLmM9MTExPWludCBpcGFfc2V0dXAoc3RydWN0IGlwYSAqaXBhKVxcbi0tXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9tYWluLmMtMTUwLVxcdC8qIFdlJ3JlIGFsbCBzZXQuICBOb3cgcHJlcGFyZSBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBtb2RlbSAqL1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfbWFpbi5jOjE1MTpcXHRyZXQgPSBpcGFfcW1pX3NldHVwKGlwYSk7XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9tYWluLmMtMTUyLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9pcGEvaXBhX21haW4uYz0xNzc9c3RhdGljIHZvaWQgaXBhX3RlYXJkb3duKHN0cnVjdCBpcGEgKmlwYSlcXG4tLVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfbWFpbi5jLTE4NC1cXG5kcml2ZXJzL25ldC9pcGEvaXBhX21haW4uYzoxODU6XFx0aXBhX3FtaV90ZWFyZG93bihpcGEpO1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfbWFpbi5jLTE4Ni1cXHRpcGFfZW5kcG9pbnRfZGVmYXVsdF9yb3V0ZV9jbGVhcihpcGEpO1xcbi0tXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xMy0jaW5jbHVkZSBcXFwiaXBhX21vZGVtLmhcXFwiXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoxNDojaW5jbHVkZSBcXFwiaXBhX3FtaV9tc2cuaFxcXCJcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTE1LVxcbi0tXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy03OS0vKiBTZW5kIGFuIElOSVRfQ09NUExFVEUgaW5kaWNhdGlvbiBtZXNzYWdlIHRvIHRoZSBtb2RlbSAqL1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6ODA6c3RhdGljIHZvaWQgaXBhX3NlcnZlcl9pbml0X2NvbXBsZXRlKHN0cnVjdCBpcGFfcW1pICppcGFfcW1pKVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtODEte1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6ODI6XFx0c3RydWN0IGlwYSAqaXBhID0gY29udGFpbmVyX29mKGlwYV9xbWksIHN0cnVjdCBpcGEsIHFtaSk7XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzo4MzpcXHRzdHJ1Y3QgcW1pX2hhbmRsZSAqcW1pID0gXFx1MDAyNmlwYV9xbWktXFx1MDAzZXNlcnZlcl9oYW5kbGU7XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzo4NDpcXHRzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqc3EgPSBcXHUwMDI2aXBhX3FtaS1cXHUwMDNlbW9kZW1fc3E7XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy04NS1cXHRzdHJ1Y3QgaXBhX2luaXRfY29tcGxldGVfaW5kIGluZCA9IHsgfTtcXG4tLVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtOTctXFx0ZWxzZVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6OTg6XFx0XFx0aXBhX3FtaS1cXHUwMDNlaW5kaWNhdGlvbl9zZW50ID0gdHJ1ZTtcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTk5LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMTAxLS8qIElmIHJlcXVlc3RlZCAoYW5kIG5vdCBhbHJlYWR5IHNlbnQpIHNlbmQgdGhlIElOSVRfQ09NUExFVEUgaW5kaWNhdGlvbiAqL1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6MTAyOnN0YXRpYyB2b2lkIGlwYV9xbWlfaW5kaWNhdGlvbihzdHJ1Y3QgaXBhX3FtaSAqaXBhX3FtaSlcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTEwMy17XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoxMDQ6XFx0aWYgKCFpcGFfcW1pLVxcdTAwM2VpbmRpY2F0aW9uX3JlcXVlc3RlZClcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTEwNS1cXHRcXHRyZXR1cm47XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xMDYtXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoxMDc6XFx0aWYgKGlwYV9xbWktXFx1MDAzZWluZGljYXRpb25fc2VudClcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTEwOC1cXHRcXHRyZXR1cm47XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xMDktXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoxMTA6XFx0aXBhX3NlcnZlcl9pbml0X2NvbXBsZXRlKGlwYV9xbWkpO1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMTExLX1cXG4tLVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMTIxLSAqL1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6MTIyOnN0YXRpYyB2b2lkIGlwYV9xbWlfcmVhZHkoc3RydWN0IGlwYV9xbWkgKmlwYV9xbWkpXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xMjMte1xcbi0tXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xMjctXFx0LyogV2UgYXJlbid0IHJlYWR5IHVudGlsIHRoZSBtb2RlbSBhbmQgbWljcm9jb250cm9sbGVyIGFyZSAqL1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6MTI4OlxcdGlmICghaXBhX3FtaS1cXHUwMDNlbW9kZW1fcmVhZHkgfHwgIWlwYV9xbWktXFx1MDAzZXVjX3JlYWR5KVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMTI5LVxcdFxcdHJldHVybjtcXG4tLVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMTMxLVxcdC8qIFNlbmQgdGhlIGluZGljYXRpb24gbWVzc2FnZSBpZiBpdCB3YXMgcmVxdWVzdGVkICovXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoxMzI6XFx0aXBhX3FtaV9pbmRpY2F0aW9uKGlwYV9xbWkpO1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMTMzLVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMTM0LVxcdC8qIFRoZSBpbml0aWFsIGJvb3QgcmVxdWlyZXMgdXMgdG8gc2VuZCB0aGUgaW5kaWNhdGlvbi4gKi9cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjEzNTpcXHRpZiAoaXBhX3FtaS1cXHUwMDNlaW5pdGlhbF9ib290KSB7XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoxMzY6XFx0XFx0aWYgKCFpcGFfcW1pLVxcdTAwM2VpbmRpY2F0aW9uX3NlbnQpXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xMzctXFx0XFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xMzktXFx0XFx0LyogVGhlIGluaXRpYWwgbW9kZW0gYm9vdCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5ICovXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoxNDA6XFx0XFx0aXBhX3FtaS1cXHUwMDNlaW5pdGlhbF9ib290ID0gZmFsc2U7XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xNDEtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xNDMtXFx0LyogV2UncmUgcmVhZHkuICBTdGFydCB1cCBub3JtYWwgb3BlcmF0aW9uICovXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoxNDQ6XFx0aXBhID0gY29udGFpbmVyX29mKGlwYV9xbWksIHN0cnVjdCBpcGEsIHFtaSk7XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xNDUtXFx0cmV0ID0gaXBhX21vZGVtX3N0YXJ0KGlwYSk7XFxuLS1cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jPTE1MT1zdGF0aWMgdm9pZCBpcGFfc2VydmVyX2J5ZShzdHJ1Y3QgcW1pX2hhbmRsZSAqcW1pLCB1bnNpZ25lZCBpbnQgbm9kZSlcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTE1Mi17XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoxNTM6XFx0c3RydWN0IGlwYV9xbWkgKmlwYV9xbWk7XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xNTQtXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoxNTU6XFx0aXBhX3FtaSA9IGNvbnRhaW5lcl9vZihxbWksIHN0cnVjdCBpcGFfcW1pLCBzZXJ2ZXJfaGFuZGxlKTtcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTE1Ni1cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTE1Ny1cXHQvKiBUaGUgbW9kZW0gY2xpZW50IGFuZCBzZXJ2ZXIgZ28gYXdheSBhdCB0aGUgc2FtZSB0aW1lICovXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoxNTg6XFx0bWVtc2V0KFxcdTAwMjZpcGFfcW1pLVxcdTAwM2Vtb2RlbV9zcSwgMCwgc2l6ZW9mKGlwYV9xbWktXFx1MDAzZW1vZGVtX3NxKSk7XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xNTktXFxuLS1cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTE2MS1cXHQvKiB1Y19yZWFkeSBkb2Vzbid0IGNoYW5nZSB3aGVuIG1vZGVtIHJlYm9vdHMgKi9cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjE2MjpcXHRpcGFfcW1pLVxcdTAwM2Vtb2RlbV9yZWFkeSA9IGZhbHNlO1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6MTYzOlxcdGlwYV9xbWktXFx1MDAzZWluZGljYXRpb25fcmVxdWVzdGVkID0gZmFsc2U7XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoxNjQ6XFx0aXBhX3FtaS1cXHUwMDNlaW5kaWNhdGlvbl9zZW50ID0gZmFsc2U7XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xNjUtfVxcbi0tXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYz0xNjc9c3RhdGljIGNvbnN0IHN0cnVjdCBxbWlfb3BzIGlwYV9zZXJ2ZXJfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xNzEtLyogVHJ1ZSBpZiBhIFFNSSByZXF1ZXN0IGFycml2ZWQgZnJvbSB0aGUgbW9kZW0gd2UgYXJlIHBhaXJlZCB3aXRoICovXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoxNzI6c3RhdGljIGJvb2wgaXBhX3NlcnZlcl9mcm9tX21vZGVtKGNvbnN0IHN0cnVjdCBpcGFfcW1pICppcGFfcW1pLFxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMTczLVxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IHNvY2thZGRyX3FydHIgKnNxKVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMTc0LXtcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjE3NTpcXHRyZXR1cm4gc3EtXFx1MDAzZXNxX25vZGUgPT0gaXBhX3FtaS1cXHUwMDNlbW9kZW1fc3Euc3Ffbm9kZSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6MTc2OlxcdCAgICAgICBzcS1cXHUwMDNlc3FfcG9ydCA9PSBpcGFfcW1pLVxcdTAwM2Vtb2RlbV9zcS5zcV9wb3J0O1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMTc3LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM9MTgzPXN0YXRpYyB2b2lkIGlwYV9zZXJ2ZXJfaW5kaWNhdGlvbl9yZWdpc3RlcihzdHJ1Y3QgcW1pX2hhbmRsZSAqcW1pLFxcbi0tXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xODgtXFx0c3RydWN0IGlwYV9pbmRpY2F0aW9uX3JlZ2lzdGVyX3JzcCByc3AgPSB7IH07XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoxODk6XFx0c3RydWN0IGlwYV9xbWkgKmlwYV9xbWk7XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xOTAtXFx0c3RydWN0IGlwYSAqaXBhO1xcbi0tXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xOTItXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoxOTM6XFx0aXBhX3FtaSA9IGNvbnRhaW5lcl9vZihxbWksIHN0cnVjdCBpcGFfcW1pLCBzZXJ2ZXJfaGFuZGxlKTtcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjE5NDpcXHRpcGEgPSBjb250YWluZXJfb2YoaXBhX3FtaSwgc3RydWN0IGlwYSwgcW1pKTtcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTE5NS1cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjE5NjpcXHRpZiAoIWlwYV9zZXJ2ZXJfZnJvbV9tb2RlbShpcGFfcW1pLCBzcSkpIHtcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTE5Ny1cXHRcXHRkZXZfd2Fybl9yYXRlbGltaXRlZChpcGEtXFx1MDAzZWRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMjA5LVxcdGlmICghcmV0KSB7XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoyMTA6XFx0XFx0aXBhX3FtaS1cXHUwMDNlaW5kaWNhdGlvbl9yZXF1ZXN0ZWQgPSB0cnVlO1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6MjExOlxcdFxcdGlwYV9xbWlfcmVhZHkoaXBhX3FtaSk7XFx0XFx0LyogV2UgbWlnaHQgYmUgcmVhZHkgbm93ICovXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0yMTItXFx0fSBlbHNlIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM9MjE5PXN0YXRpYyB2b2lkIGlwYV9zZXJ2ZXJfZHJpdmVyX2luaXRfY29tcGxldGUoc3RydWN0IHFtaV9oYW5kbGUgKnFtaSxcXG4tLVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMjI0LVxcdHN0cnVjdCBpcGFfZHJpdmVyX2luaXRfY29tcGxldGVfcnNwIHJzcCA9IHsgfTtcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjIyNTpcXHRzdHJ1Y3QgaXBhX3FtaSAqaXBhX3FtaTtcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTIyNi1cXHRzdHJ1Y3QgaXBhICppcGE7XFxuLS1cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTIyOC1cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjIyOTpcXHRpcGFfcW1pID0gY29udGFpbmVyX29mKHFtaSwgc3RydWN0IGlwYV9xbWksIHNlcnZlcl9oYW5kbGUpO1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6MjMwOlxcdGlwYSA9IGNvbnRhaW5lcl9vZihpcGFfcW1pLCBzdHJ1Y3QgaXBhLCBxbWkpO1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMjMxLVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6MjMyOlxcdGlmICghaXBhX3NlcnZlcl9mcm9tX21vZGVtKGlwYV9xbWksIHNxKSkge1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMjMzLVxcdFxcdGRldl93YXJuX3JhdGVsaW1pdGVkKGlwYS1cXHUwMDNlZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0yNDUtXFx0aWYgKCFyZXQpIHtcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjI0NjpcXHRcXHRpcGFfcW1pLVxcdTAwM2V1Y19yZWFkeSA9IHRydWU7XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoyNDc6XFx0XFx0aXBhX3FtaV9yZWFkeShpcGFfcW1pKTtcXHRcXHQvKiBXZSBtaWdodCBiZSByZWFkeSBub3cgKi9cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTI0OC1cXHR9IGVsc2Uge1xcbi0tXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYz0zMDE9c3RhdGljIGNvbnN0IHN0cnVjdCBpcGFfaW5pdF9tb2RlbV9kcml2ZXJfcmVxICpcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjMwMjppbml0X21vZGVtX2RyaXZlcl9yZXEoc3RydWN0IGlwYV9xbWkgKmlwYV9xbWkpXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0zMDMte1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6MzA0OlxcdHN0cnVjdCBpcGEgKmlwYSA9IGNvbnRhaW5lcl9vZihpcGFfcW1pLCBzdHJ1Y3QgaXBhLCBxbWkpO1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMzA1LVxcdHUzMiBtb2RlbV9yb3V0ZV9jb3VudCA9IGlwYS1cXHUwMDNlbW9kZW1fcm91dGVfY291bnQ7XFxuLS1cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jPTQyMz1zdGF0aWMgdm9pZCBpcGFfY2xpZW50X2luaXRfZHJpdmVyX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy00MjYtXFx0Y29uc3Qgc3RydWN0IGlwYV9pbml0X21vZGVtX2RyaXZlcl9yZXEgKnJlcTtcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjQyNzpcXHRzdHJ1Y3QgaXBhX3FtaSAqaXBhX3FtaTtcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTQyOC1cXHRzdHJ1Y3QgcW1pX2hhbmRsZSAqcW1pO1xcbi0tXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy00MzMtXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzo0MzQ6XFx0aXBhX3FtaSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXBhX3FtaSwgaW5pdF9kcml2ZXJfd29yayk7XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzo0MzU6XFx0cW1pID0gXFx1MDAyNmlwYV9xbWktXFx1MDAzZWNsaWVudF9oYW5kbGU7XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy00MzYtXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzo0Mzc6XFx0aXBhID0gY29udGFpbmVyX29mKGlwYV9xbWksIHN0cnVjdCBpcGEsIHFtaSk7XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy00MzgtXFx0ZGV2ID0gaXBhLVxcdTAwM2VkZXY7XFxuLS1cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTQ0Ni1cXHQvKiBTZW5kIHRoZSByZXF1ZXN0LCBhbmQgaWYgc3VjY2Vzc2Z1bCB3YWl0IGZvciBpdHMgcmVzcG9uc2UgKi9cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjQ0NzpcXHRyZXEgPSBpbml0X21vZGVtX2RyaXZlcl9yZXEoaXBhX3FtaSk7XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzo0NDg6XFx0cmV0ID0gcW1pX3NlbmRfcmVxdWVzdChxbWksIFxcdTAwMjZpcGFfcW1pLVxcdTAwM2Vtb2RlbV9zcSwgXFx1MDAyNnR4bixcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTQ0OS1cXHRcXHRcXHQgICAgICAgSVBBX1FNSV9JTklUX0RSSVZFUiwgSVBBX1FNSV9JTklUX0RSSVZFUl9SRVFfU1osXFxuLS1cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTQ1Ni1cXHRpZiAoIXJldCkge1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6NDU3OlxcdFxcdGlwYV9xbWktXFx1MDAzZW1vZGVtX3JlYWR5ID0gdHJ1ZTtcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjQ1ODpcXHRcXHRpcGFfcW1pX3JlYWR5KGlwYV9xbWkpO1xcdFxcdC8qIFdlIG1pZ2h0IGJlIHJlYWR5IG5vdyAqL1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtNDU5LVxcdH0gZWxzZSB7XFxuLS1cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jPTQ3MD1pcGFfY2xpZW50X25ld19zZXJ2ZXIoc3RydWN0IHFtaV9oYW5kbGUgKnFtaSwgc3RydWN0IHFtaV9zZXJ2aWNlICpzdmMpXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy00NzEte1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6NDcyOlxcdHN0cnVjdCBpcGFfcW1pICppcGFfcW1pO1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtNDczLVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6NDc0OlxcdGlwYV9xbWkgPSBjb250YWluZXJfb2YocW1pLCBzdHJ1Y3QgaXBhX3FtaSwgY2xpZW50X2hhbmRsZSk7XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy00NzUtXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzo0NzY6XFx0aXBhX3FtaS1cXHUwMDNlbW9kZW1fc3Euc3FfZmFtaWx5ID0gQUZfUUlQQ1JUUjtcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjQ3NzpcXHRpcGFfcW1pLVxcdTAwM2Vtb2RlbV9zcS5zcV9ub2RlID0gc3ZjLVxcdTAwM2Vub2RlO1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6NDc4OlxcdGlwYV9xbWktXFx1MDAzZW1vZGVtX3NxLnNxX3BvcnQgPSBzdmMtXFx1MDAzZXBvcnQ7XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy00NzktXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzo0ODA6XFx0c2NoZWR1bGVfd29yayhcXHUwMDI2aXBhX3FtaS1cXHUwMDNlaW5pdF9kcml2ZXJfd29yayk7XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy00ODEtXFxuLS1cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jPTQ4NT1zdGF0aWMgY29uc3Qgc3RydWN0IHFtaV9vcHMgaXBhX2NsaWVudF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTQ4OS0vKiBTZXQgdXAgZm9yIFFNSSBtZXNzYWdlIGV4Y2hhbmdlICovXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzo0OTA6aW50IGlwYV9xbWlfc2V0dXAoc3RydWN0IGlwYSAqaXBhKVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtNDkxLXtcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjQ5MjpcXHRzdHJ1Y3QgaXBhX3FtaSAqaXBhX3FtaSA9IFxcdTAwMjZpcGEtXFx1MDAzZXFtaTtcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTQ5My1cXHRpbnQgcmV0O1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtNDk0LVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6NDk1OlxcdGlwYV9xbWktXFx1MDAzZWluaXRpYWxfYm9vdCA9IHRydWU7XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy00OTYtXFxuLS1cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTUwMi1cXHQgKi9cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjUwMzpcXHRyZXQgPSBxbWlfaGFuZGxlX2luaXQoXFx1MDAyNmlwYV9xbWktXFx1MDAzZXNlcnZlcl9oYW5kbGUsXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy01MDQtXFx0XFx0XFx0ICAgICAgSVBBX1FNSV9TRVJWRVJfTUFYX1JDVl9TWiwgXFx1MDAyNmlwYV9zZXJ2ZXJfb3BzLFxcbi0tXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy01MDgtXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzo1MDk6XFx0cmV0ID0gcW1pX2FkZF9zZXJ2ZXIoXFx1MDAyNmlwYV9xbWktXFx1MDAzZXNlcnZlcl9oYW5kbGUsIElQQV9IT1NUX1NFUlZJQ0VfU1ZDX0lELFxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtNTEwLVxcdFxcdFxcdCAgICAgSVBBX0hPU1RfU1ZDX1ZFUlMsIElQQV9IT1NUX1NFUlZJQ0VfSU5TX0lEKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtNTE2LVxcdCAqL1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6NTE3OlxcdHJldCA9IHFtaV9oYW5kbGVfaW5pdChcXHUwMDI2aXBhX3FtaS1cXHUwMDNlY2xpZW50X2hhbmRsZSxcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTUxOC1cXHRcXHRcXHQgICAgICBJUEFfUU1JX0NMSUVOVF9NQVhfUkNWX1NaLCBcXHUwMDI2aXBhX2NsaWVudF9vcHMsXFxuLS1cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTUyMy1cXHQvKiBXZSBuZWVkIHRoaXMgcmVhZHkgYmVmb3JlIHRoZSBzZXJ2aWNlIGxvb2t1cCBpcyBhZGRlZCAqL1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6NTI0OlxcdElOSVRfV09SSyhcXHUwMDI2aXBhX3FtaS1cXHUwMDNlaW5pdF9kcml2ZXJfd29yaywgaXBhX2NsaWVudF9pbml0X2RyaXZlcl93b3JrKTtcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTUyNS1cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjUyNjpcXHRyZXQgPSBxbWlfYWRkX2xvb2t1cChcXHUwMDI2aXBhX3FtaS1cXHUwMDNlY2xpZW50X2hhbmRsZSwgSVBBX01PREVNX1NFUlZJQ0VfU1ZDX0lELFxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtNTI3LVxcdFxcdFxcdCAgICAgSVBBX01PREVNX1NWQ19WRVJTLCBJUEFfTU9ERU1fU0VSVklDRV9JTlNfSUQpO1xcbi0tXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy01MzQtXFx0LyogUmVsZWFzaW5nIHRoZSBoYW5kbGUgYWxzbyByZW1vdmVzIHJlZ2lzdGVyZWQgbG9va3VwcyAqL1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6NTM1OlxcdHFtaV9oYW5kbGVfcmVsZWFzZShcXHUwMDI2aXBhX3FtaS1cXHUwMDNlY2xpZW50X2hhbmRsZSk7XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzo1MzY6XFx0bWVtc2V0KFxcdTAwMjZpcGFfcW1pLVxcdTAwM2VjbGllbnRfaGFuZGxlLCAwLCBzaXplb2YoaXBhX3FtaS1cXHUwMDNlY2xpZW50X2hhbmRsZSkpO1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtNTM3LWVycl9zZXJ2ZXJfaGFuZGxlX3JlbGVhc2U6XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy01MzgtXFx0LyogUmVsZWFzaW5nIHRoZSBoYW5kbGUgYWxzbyByZW1vdmVzIHJlZ2lzdGVyZWQgc2VydmljZXMgKi9cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjUzOTpcXHRxbWlfaGFuZGxlX3JlbGVhc2UoXFx1MDAyNmlwYV9xbWktXFx1MDAzZXNlcnZlcl9oYW5kbGUpO1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6NTQwOlxcdG1lbXNldChcXHUwMDI2aXBhX3FtaS1cXHUwMDNlc2VydmVyX2hhbmRsZSwgMCwgc2l6ZW9mKGlwYV9xbWktXFx1MDAzZXNlcnZlcl9oYW5kbGUpKTtcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTU0MS1cXG4tLVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtNTQ1LS8qIFRlYXIgZG93biBJUEEgUU1JIGhhbmRsZXMgKi9cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjU0Njp2b2lkIGlwYV9xbWlfdGVhcmRvd24oc3RydWN0IGlwYSAqaXBhKVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtNTQ3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmg9MTQ9c3RydWN0IGlwYTtcXG4tLVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmgtMTYtLyoqXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuaDoxNzogKiBzdHJ1Y3QgaXBhX3FtaSAtIFFNSSBzdGF0ZSBhc3NvY2lhdGVkIHdpdGggYW4gSVBBXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuaC0xOC0gKiBAY2xpZW50X2hhbmRsZTpcXHRVc2VkIHRvIHNlbmQgYW4gUU1JIHJlcXVlc3RzIHRvIHRoZSBtb2RlbVxcbi0tXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuaC0yNy0gKi9cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5oOjI4OnN0cnVjdCBpcGFfcW1pIHtcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5oLTI5LVxcdHN0cnVjdCBxbWlfaGFuZGxlIGNsaWVudF9oYW5kbGU7XFxuLS1cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5oLTQ0LS8qKlxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmg6NDU6ICogaXBhX3FtaV9zZXR1cCgpIC0gU2V0IHVwIGZvciBRTUkgbWVzc2FnZSBleGNoYW5nZVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmgtNDYtICogQGlwYTpcXHRcXHRJUEEgcG9pbnRlclxcbi0tXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuaC01Ny0gKi9cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5oOjU4OmludCBpcGFfcW1pX3NldHVwKHN0cnVjdCBpcGEgKmlwYSk7XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuaC01OS1cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5oLTYwLS8qKlxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmg6NjE6ICogaXBhX3FtaV90ZWFyZG93bigpIC0gVGVhciBkb3duIElQQSBRTUkgaGFuZGxlc1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmgtNjItICogQGlwYTpcXHRcXHRJUEEgcG9pbnRlclxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmgtNjMtICovXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuaDo2NDp2b2lkIGlwYV9xbWlfdGVhcmRvd24oc3RydWN0IGlwYSAqaXBhKTtcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5oLTY1LVxcbi0tXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWlfbXNnLmMtOS1cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaV9tc2cuYzoxMDojaW5jbHVkZSBcXFwiaXBhX3FtaV9tc2cuaFxcXCJcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaV9tc2cuYy0xMS1cXG4tLVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pX21zZy5oLTgtXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWlfbXNnLmg6OTovKiA9PT0gT25seSBcXFwiaXBhX3FtaVxcXCIgYW5kIFxcXCJpcGFfcW1pX21zZy5jXFxcIiBzaG91bGQgaW5jbHVkZSB0aGlzIGZpbGUgPT09ICovXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWlfbXNnLmgtMTAtXFxuLS1cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaV9tc2cuaD0yMjY9c3RydWN0IGlwYV9pbml0X21vZGVtX2RyaXZlcl9yc3Age1xcbi0tXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWlfbXNnLmgtMjQ5LVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pX21zZy5oOjI1MDovKiBNZXNzYWdlIHN0cnVjdHVyZSBkZWZpbml0aW9ucyBkZWZpbmVkIGluIFxcXCJpcGFfcW1pX21zZy5jXFxcIiAqL1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pX21zZy5oLTI1MS1leHRlcm4gY29uc3Qgc3RydWN0IHFtaV9lbGVtX2luZm8gaXBhX2luZGljYXRpb25fcmVnaXN0ZXJfcmVxX2VpW107XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE5OjU2OjE0LjYzNTUyMjIyNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2Mzg5MjM0NDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIElQQSBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIEl0IGxvb2tzIGxpa2UgYGlwYV9xbWlfc2V0dXBgIGlzIGNhbGxlZCBieSBgaXBhX3NldHVwYCwgd2hpY2ggaXMsIGluIHR1cm4sIGNhbGxlZCBieSBgaXBhX3Byb2JlYC4gQW5kIGBpcGFfcHJvYmVgIGlzIHRoZSBwcm9iZSBjYWxsYmFjayBmb3IgdGhlIFwiaXBhXCIgcGxhdGZvcm0gZHJpdmVyLCBzcGVjaWZpY2FsbHkgbWF0Y2hpbmcgUXVhbGNvbW0gZGV2aWNlIHRyZWUgbm9kZXMuIFRoZSBjcml0aWNhbCB0aGluZyBoZXJlIGlzIHRoYXQgdGhpcyBkcml2ZXIgcmVsaWVzIG9uIHZlcnkgc3BlY2lmaWMgUXVhbGNvbW0gU29DIGhhcmR3YXJlIOKAkyB0aGluZ3MgbGlrZSBjbG9ja3MsIGludGVyY29ubmVjdCwgR1NJLCBzaGFyZWQgbWVtb3J5IChTTUVNLCBTTVAyUCksIGFuZCBwYXJ0aWN1bGFyIHJlZ2lzdGVyIG1hcHBpbmdzLiBUaGlzIGlzbid0IGdlbmVyaWM7IGl0J3MgcGxhdGZvcm0tc3BlY2lmaWMuXG5cbk5vdywgY29uc2lkZXJpbmcgdGhlIHRhcmdldCBlbnZpcm9ubWVudCwgd2hpY2ggaXMgYW1kNjQsIG9yIHR5cGljYWwgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBhbmQgR0NFLCB0aGlzIGhhcmR3YXJlIHNpbXBseSAqd29uJ3QqIGJlIHByZXNlbnQuIEl0IGNhbid0IGJlIHByb2JlZCwgYW5kIGl0J3Mgbm90IGdvaW5nIHRvIGJlIGVtdWxhdGVkIGluIGFueSBtZWFuaW5nZnVsIHdheS5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCdzIGNvbnNpZGVyIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYS4gQXJlIHRoZXJlIGFueSBvdGhlciByZWQgZmxhZ3M/IFNwZWNpZmljYWxseSwgYXJlIHRoZXJlIGFueSBzdHJ1Y3R1cmFsIGlzc3VlcyB0aGF0IHdvdWxkIHByZXZlbnQgdXMgZnJvbSBmdXp6aW5nP1xuLSBXZSdyZSBsb29raW5nIGZvciB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQuXG4tIFdlJ3JlIGxvb2tpbmcgZm9yIHVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRocy5cblxuVGhpcyBwYXRjaCwgbW9kaWZ5aW5nIGBkcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jYCwgaXMgcGFydCBvZiB0aGUgUXVhbGNvbW0gSVAgQWNjZWxlcmF0b3IgKElQQSkgZHJpdmVyLiBJdCdzIGNsZWFybHkgdGllZCB0byBRdWFsY29tbSBBUk0gU29DcyBhbmQgcmVxdWlyZXMgdGhhdCBkZWRpY2F0ZWQgaGFyZHdhcmUgYW5kIGRldmljZSB0cmVlIGJpbmRpbmdzIHRvIGV2ZW4gbG9hZC4gVGhlcmUgaXMgYWJzb2x1dGVseSBubyB3YXkgdGhpcyBkcml2ZXIgY2FuIGJlIHByb2JlZCBvciBleGVjdXRlIGluIG91ciBzdGFuZGFyZCBhbWQ2NCBRRU1VL0dDRSB0ZXN0aW5nIGVudmlyb25tZW50LiBUaGUgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUsIHdoaWNoIGNvbmZpcm1zIHRoaXMuXG5cblRoZXJlZm9yZSwgdGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLlxuXG5IZXJlJ3MgdGhlIGRhdGEgZm9yIHRoZSBgc2V0LXJlc3VsdHNgIGNhbGw6XG5cbiogICBgV29ydGhGdXp6aW5nYDogYGZhbHNlYFxuKiAgIGBSZWFzb25pbmdgOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuY2AgaW4gdGhlIFF1YWxjb21tIElQIEFjY2VsZXJhdG9yIChJUEEpIGRyaXZlci4gVGhpcyBpcyBhIHBsYXRmb3JtIGRyaXZlciBmb3Igc3BlY2lmaWMgUXVhbGNvbW0gQVJNIFNvQ3MgcmVxdWlyaW5nIGRlZGljYXRlZCBoYXJkd2FyZSAobW9kZW0sIGludGVyY29ubmVjdCwgR1NJLCBTTUVNLCBTTVAyUCkgYW5kIGRldmljZSB0cmVlIGJpbmRpbmdzLCB3aGljaCBjYW5ub3QgYmUgaW5zdGFudGlhdGVkIG9yIHByb2JlZCBpbiBzdGFuZGFyZCB4ODYvYW1kNjQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKS4gQXMgc3VjaCwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBgW11gXG4qICAgYEZvY3VzU3ltYm9sc2A6IGBbXWBcblxuQW5kIHRoYXQncyB0aGF0LiBOb3cgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIGFuZCBmaW5hbGl6ZSB0aGlzIGFzc2Vzc21lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjgzLCJPdXRwdXRUb2tlbnMiOjEyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxOTo1NjoyMS4wMjQ3NTk2ODdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBkcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jIGluIHRoZSBRdWFsY29tbSBJUCBBY2NlbGVyYXRvciAoSVBBKSBkcml2ZXIuIFRoaXMgaXMgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIFF1YWxjb21tIEFSTSBTb0NzIHJlcXVpcmluZyBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSBjb21wb25lbnRzIChHU0ksIFNNRU0sIFNNUDJQLCBpbnRlcmNvbm5lY3RzKSBhbmQgZGV2aWNlIHRyZWUgZGVzY3JpcHRpb25zLiBJdCBjYW5ub3QgYmUgcHJvYmVkIG9yIGV4ZWN1dGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0Ugb24gYW1kNjQpLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYyBpbiB0aGUgUXVhbGNvbW0gSVAgQWNjZWxlcmF0b3IgKElQQSkgZHJpdmVyLiBUaGlzIGlzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBRdWFsY29tbSBBUk0gU29DcyByZXF1aXJpbmcgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgY29tcG9uZW50cyAoR1NJLCBTTUVNLCBTTVAyUCwgaW50ZXJjb25uZWN0cykgYW5kIGRldmljZSB0cmVlIGRlc2NyaXB0aW9ucy4gSXQgY2Fubm90IGJlIHByb2JlZCBvciBleGVjdXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFIG9uIGFtZDY0KSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE5OjU2OjIxLjAyNDgwNTU4N1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7hl9d[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-10 19:24:17 +0000 UTC FinishedAt: 2026-09-10 19:56:21 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE5OjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYyBpbiB0aGUgUXVhbGNvbW0gSVAgQWNjZWxlcmF0b3IgKElQQSkgZHJpdmVyLiBUaGlzIGlzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBRdWFsY29tbSBBUk0gU29DcyByZXF1aXJpbmcgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgY29tcG9uZW50cyAoR1NJLCBTTUVNLCBTTVAyUCwgaW50ZXJjb25uZWN0cykgYW5kIGRldmljZSB0cmVlIGRlc2NyaXB0aW9ucy4gSXQgY2Fubm90IGJlIHByb2JlZCBvciBleGVjdXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFIG9uIGFtZDY0KSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTk6NTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4MGQ1Y2YyODQ3YWY3M2VjYjgyNWE2MWM2NmM2MWI5NTZjZTA2Zjc0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMTk6NTU6NDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYyBiL2RyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmNcbmluZGV4IGQ3NzFmM2E3MWY5NGYuLmE3Y2M5OGIyN2UzM2MgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jXG5AQCAtMTY4LDYgJiM0MzsxNjgsMTQgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBxbWlfb3BzIGlwYV9zZXJ2ZXJfb3BzID0ge1xuIFx0LmJ5ZVx0XHQ9IGlwYV9zZXJ2ZXJfYnllLFxuIH07XG4gXG4mIzQzOy8qIFRydWUgaWYgYSBRTUkgcmVxdWVzdCBhcnJpdmVkIGZyb20gdGhlIG1vZGVtIHdlIGFyZSBwYWlyZWQgd2l0aCAqL1xuJiM0MztzdGF0aWMgYm9vbCBpcGFfc2VydmVyX2Zyb21fbW9kZW0oY29uc3Qgc3RydWN0IGlwYV9xbWkgKmlwYV9xbWksXG4mIzQzO1x0XHRcdFx0ICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqc3EpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gc3EtXHUwMDNlc3Ffbm9kZSA9PSBpcGFfcW1pLVx1MDAzZW1vZGVtX3NxLnNxX25vZGUgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgIHNxLVx1MDAzZXNxX3BvcnQgPT0gaXBhX3FtaS1cdTAwM2Vtb2RlbV9zcS5zcV9wb3J0O1xuJiM0Mzt9XG4mIzQzO1xuIC8qIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGhhbmRsZSBhbiBJTkRJQ0FUSU9OX1JFR0lTVEVSIHJlcXVlc3QgbWVzc2FnZSBmcm9tIHRoZVxuICAqIG1vZGVtLiAgVGhpcyBpbmZvcm1zIHRoZSBBUCB0aGF0IHRoZSBtb2RlbSBpcyBub3cgcmVhZHkgdG8gcmVjZWl2ZSB0aGVcbiAgKiBJTklUX0NPTVBMRVRFIGluZGljYXRpb24gbWVzc2FnZS5cbkBAIC0xODUsNiAmIzQzOzE5MywxMyBAQCBzdGF0aWMgdm9pZCBpcGFfc2VydmVyX2luZGljYXRpb25fcmVnaXN0ZXIoc3RydWN0IHFtaV9oYW5kbGUgKnFtaSxcbiBcdGlwYV9xbWkgPSBjb250YWluZXJfb2YocW1pLCBzdHJ1Y3QgaXBhX3FtaSwgc2VydmVyX2hhbmRsZSk7XG4gXHRpcGEgPSBjb250YWluZXJfb2YoaXBhX3FtaSwgc3RydWN0IGlwYSwgcW1pKTtcbiBcbiYjNDM7XHRpZiAoIWlwYV9zZXJ2ZXJfZnJvbV9tb2RlbShpcGFfcW1pLCBzcSkpIHtcbiYjNDM7XHRcdGRldl93YXJuX3JhdGVsaW1pdGVkKGlwYS1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDtpZ25vcmluZyBRTUkgcmVxdWVzdCBmcm9tIG5vbi1tb2RlbSBzZW5kZXIgJXU6JXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICBzcS1cdTAwM2VzcV9ub2RlLCBzcS1cdTAwM2VzcV9wb3J0KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cnNwLnJzcC5yZXN1bHQgPSBRTUlfUkVTVUxUX1NVQ0NFU1NfVjAxO1xuIFx0cnNwLnJzcC5lcnJvciA9IFFNSV9FUlJfTk9ORV9WMDE7XG4gXG5AQCAtMjE0LDYgJiM0MzsyMjksMTMgQEAgc3RhdGljIHZvaWQgaXBhX3NlcnZlcl9kcml2ZXJfaW5pdF9jb21wbGV0ZShzdHJ1Y3QgcW1pX2hhbmRsZSAqcW1pLFxuIFx0aXBhX3FtaSA9IGNvbnRhaW5lcl9vZihxbWksIHN0cnVjdCBpcGFfcW1pLCBzZXJ2ZXJfaGFuZGxlKTtcbiBcdGlwYSA9IGNvbnRhaW5lcl9vZihpcGFfcW1pLCBzdHJ1Y3QgaXBhLCBxbWkpO1xuIFxuJiM0MztcdGlmICghaXBhX3NlcnZlcl9mcm9tX21vZGVtKGlwYV9xbWksIHNxKSkge1xuJiM0MztcdFx0ZGV2X3dhcm5fcmF0ZWxpbWl0ZWQoaXBhLVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHQgICAgIFwmIzM0O2lnbm9yaW5nIFFNSSByZXF1ZXN0IGZyb20gbm9uLW1vZGVtIHNlbmRlciAldToldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgIHNxLVx1MDAzZXNxX25vZGUsIHNxLVx1MDAzZXNxX3BvcnQpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyc3AucnNwLnJlc3VsdCA9IFFNSV9SRVNVTFRfU1VDQ0VTU19WMDE7XG4gXHRyc3AucnNwLmVycm9yID0gUU1JX0VSUl9OT05FX1YwMTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBkcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jIGluIHRoZSBRdWFsY29tbSBJUCBBY2NlbGVyYXRvciAoSVBBKSBkcml2ZXIuIFRoaXMgaXMgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIFF1YWxjb21tIEFSTSBTb0NzIHJlcXVpcmluZyBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSBjb21wb25lbnRzIChHU0ksIFNNRU0sIFNNUDJQLCBpbnRlcmNvbm5lY3RzKSBhbmQgZGV2aWNlIHRyZWUgZGVzY3JpcHRpb25zLiBJdCBjYW5ub3QgYmUgcHJvYmVkIG9yIGV4ZWN1dGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0Ugb24gYW1kNjQpLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDgwZDVjZjI4NDdhZjczZWNiODI1YTYxYzY2YzYxYjk1NmNlMDZmNzQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAxMCAxOTo1NTo0MyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMgYi9kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jCmluZGV4IGQ3NzFmM2E3MWY5NGYuLmE3Y2M5OGIyN2UzM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYwpAQCAtMTY4LDYgJiM0MzsxNjgsMTQgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBxbWlfb3BzIGlwYV9zZXJ2ZXJfb3BzID0gewogCS5ieWUJCT0gaXBhX3NlcnZlcl9ieWUsCiB9OwogCiYjNDM7LyogVHJ1ZSBpZiBhIFFNSSByZXF1ZXN0IGFycml2ZWQgZnJvbSB0aGUgbW9kZW0gd2UgYXJlIHBhaXJlZCB3aXRoICovCiYjNDM7c3RhdGljIGJvb2wgaXBhX3NlcnZlcl9mcm9tX21vZGVtKGNvbnN0IHN0cnVjdCBpcGFfcW1pICppcGFfcW1pLAomIzQzOwkJCQkgIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9xcnRyICpzcSkKJiM0Mzt7CiYjNDM7CXJldHVybiBzcS0mZ3Q7c3Ffbm9kZSA9PSBpcGFfcW1pLSZndDttb2RlbV9zcS5zcV9ub2RlICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIHNxLSZndDtzcV9wb3J0ID09IGlwYV9xbWktJmd0O21vZGVtX3NxLnNxX3BvcnQ7CiYjNDM7fQomIzQzOwogLyogQ2FsbGJhY2sgZnVuY3Rpb24gdG8gaGFuZGxlIGFuIElORElDQVRJT05fUkVHSVNURVIgcmVxdWVzdCBtZXNzYWdlIGZyb20gdGhlCiAgKiBtb2RlbS4gIFRoaXMgaW5mb3JtcyB0aGUgQVAgdGhhdCB0aGUgbW9kZW0gaXMgbm93IHJlYWR5IHRvIHJlY2VpdmUgdGhlCiAgKiBJTklUX0NPTVBMRVRFIGluZGljYXRpb24gbWVzc2FnZS4KQEAgLTE4NSw2ICYjNDM7MTkzLDEzIEBAIHN0YXRpYyB2b2lkIGlwYV9zZXJ2ZXJfaW5kaWNhdGlvbl9yZWdpc3RlcihzdHJ1Y3QgcW1pX2hhbmRsZSAqcW1pLAogCWlwYV9xbWkgPSBjb250YWluZXJfb2YocW1pLCBzdHJ1Y3QgaXBhX3FtaSwgc2VydmVyX2hhbmRsZSk7CiAJaXBhID0gY29udGFpbmVyX29mKGlwYV9xbWksIHN0cnVjdCBpcGEsIHFtaSk7CiAKJiM0MzsJaWYgKCFpcGFfc2VydmVyX2Zyb21fbW9kZW0oaXBhX3FtaSwgc3EpKSB7CiYjNDM7CQlkZXZfd2Fybl9yYXRlbGltaXRlZChpcGEtJmd0O2RldiwKJiM0MzsJCQkJICAgICAmIzM0O2lnbm9yaW5nIFFNSSByZXF1ZXN0IGZyb20gbm9uLW1vZGVtIHNlbmRlciAldToldVxuJiMzNDssCiYjNDM7CQkJCSAgICAgc3EtJmd0O3NxX25vZGUsIHNxLSZndDtzcV9wb3J0KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwogCXJzcC5yc3AucmVzdWx0ID0gUU1JX1JFU1VMVF9TVUNDRVNTX1YwMTsKIAlyc3AucnNwLmVycm9yID0gUU1JX0VSUl9OT05FX1YwMTsKIApAQCAtMjE0LDYgJiM0MzsyMjksMTMgQEAgc3RhdGljIHZvaWQgaXBhX3NlcnZlcl9kcml2ZXJfaW5pdF9jb21wbGV0ZShzdHJ1Y3QgcW1pX2hhbmRsZSAqcW1pLAogCWlwYV9xbWkgPSBjb250YWluZXJfb2YocW1pLCBzdHJ1Y3QgaXBhX3FtaSwgc2VydmVyX2hhbmRsZSk7CiAJaXBhID0gY29udGFpbmVyX29mKGlwYV9xbWksIHN0cnVjdCBpcGEsIHFtaSk7CiAKJiM0MzsJaWYgKCFpcGFfc2VydmVyX2Zyb21fbW9kZW0oaXBhX3FtaSwgc3EpKSB7CiYjNDM7CQlkZXZfd2Fybl9yYXRlbGltaXRlZChpcGEtJmd0O2RldiwKJiM0MzsJCQkJICAgICAmIzM0O2lnbm9yaW5nIFFNSSByZXF1ZXN0IGZyb20gbm9uLW1vZGVtIHNlbmRlciAldToldVxuJiMzNDssCiYjNDM7CQkJCSAgICAgc3EtJmd0O3NxX25vZGUsIHNxLSZndDtzcV9wb3J0KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwogCXJzcC5yc3AucmVzdWx0ID0gUU1JX1JFU1VMVF9TVUNDRVNTX1YwMTsKIAlyc3AucnNwLmVycm9yID0gUU1JX0VSUl9OT05FX1YwMTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzk3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgcmV2aWV3aW5nIHRoaXMgcGF0Y2g6CgoqKkludmVzdGlnYXRpbmcgdGhlIElQQSBRTUkgRHJpdmVyIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyB3ZSBoYXZlIGEgcGF0Y2ggdG91Y2hpbmcgYGRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmNgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGluIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IHRoZSBRdWFsY29tbSBJUEEgKElQIEFjY2VsZXJhdG9yKSBpcyBkb2luZyBhbmQgaG93IGl0JiMzOTtzIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBzeXN0ZW0uCgpJJiMzOTtsbCBzdGFydCB3aXRoIGEgcXVpY2sgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIG9uIHRoYXQgc3BlY2lmaWMgZmlsZS4gVW5kZXJzdGFuZGluZyB0aGUgZnVuZGFtZW50YWwgc3RydWN0dXJlIGFuZCBpbnRlcmFjdGlvbnMgd2lsbCBiZSBrZXkuIEZyb20gdGhlcmUsIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB0aGUgY29uZmlndXJhdGlvbi4gSSYjMzk7bGwgcmVhZCB0aGUgYEtjb25maWdgIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IChgZHJpdmVycy9uZXQvaXBhL0tjb25maWdgKSBvciBxdWlja2x5IGBncmVwYCBmb3IgYFFDT01fSVBBYCDigJMgc29tZXRoaW5nIHRvIGdldCBtZSB0byB0aGUgbmVjZXNzYXJ5IEtjb25maWcgZW50cmllcy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLiBHcmFzcGluZyB0aGUgY29uZmlndXJhdGlvbiBpcyBlc3NlbnRpYWwgYmVmb3JlIGV4YW1pbmluZyB0aGUgc3BlY2lmaWMgY29kZSBjaGFuZ2VzIGluIHRoZSBwYXRjaCBpdHNlbGYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTk6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFFDT01fSVBBJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvaXBhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2lwYS9LY29uZmlnOjE6Y29uZmlnIFFDT01fSVBBXG5kcml2ZXJzL25ldC9pcGEvS2NvbmZpZy0yLVx0dHJpc3RhdGUgXCYjMzQ7UXVhbGNvbW0gSVBBIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzg0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgSVBBIEtjb25maWcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHB1bGwgdXAgYGRyaXZlcnMvbmV0L2lwYS9LY29uZmlnYC4gVGltZSB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIElQQSAoSW50ZWdyYXRlZCBQYWNrZXQgQWNjZWxlcmF0b3IpIGRyaXZlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgdGhpbmcgaXMgc3RydWN0dXJlZC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUga2V5IGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzOiB0aGUgb25lcyB0aGF0IGVuYWJsZSBvciBkaXNhYmxlIGNvcmUgZmVhdHVyZXMsIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgc3Vic3lzdGVtcywgYW5kIGFueSBkZXBlbmRlbmNpZXMgb24gcGxhdGZvcm0tc3BlY2lmaWMgc2V0dGluZ3MuIEkmIzM5O2xsIGJlIHNlYXJjaGluZyBmb3IgYW55IHRyaWNreSBsb2dpYyBpbiB0aGUgZGVwZW5kZW5jeSBleHByZXNzaW9ucywgdGhlIGtpbmQgdGhhdCBtaWdodCBpbnRyb2R1Y2Ugc3VidGxlIGNvbXBhdGliaWxpdHkgaXNzdWVzIG9yIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBmZWF0dXJlcyByZWxhdGVkIHRvIHZhcmlvdXMgcGFja2V0IHByb2Nlc3Npbmcgc3RhZ2VzLCBvZmZsb2FkIGNhcGFiaWxpdGllcyAoVENQL0lQLCBMMiksIGFuZCBtYXliZSBzb21lIFFvUyBvciBmbG93IGNvbnRyb2wgbWVjaGFuaXNtcy4gSSBhbHNvIGV4cGVjdCB0byBjaGVjayB0aGF0IGVhY2ggb3B0aW9uIGZvbGxvd3MgdGhlIGVzdGFibGlzaGVkIGtlcm5lbCBjb2RpbmcgY29udmVudGlvbnMgZm9yIEtjb25maWcgZmlsZXMuIFRoZW4gSSBjYW4gdXNlIHRoaXMgaW5mb3JtYXRpb24gdG8gY3JlYXRlIGEgbWVudGFsIG1hcCBvZiB0aGlzIGRyaXZlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2lwYS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Y29uZmlnIFFDT01fSVBBXG4gICAyOlx0XHR0cmlzdGF0ZSBcJiMzNDtRdWFsY29tbSBJUEEgc3VwcG9ydFwmIzM0O1xuICAgMzpcdFx0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IFFDT01fU01FTVxuICAgNDpcdFx0ZGVwZW5kcyBvbiBBUkNIX1FDT00gfHwgQ09NUElMRV9URVNUXG4gICA1Olx0XHRkZXBlbmRzIG9uIElOVEVSQ09OTkVDVFxuICAgNjpcdFx0ZGVwZW5kcyBvbiBRQ09NX1JQUk9DX0NPTU1PTiB8fCAoUUNPTV9SUFJPQ19DT01NT049biBcdTAwMjZcdTAwMjYgQ09NUElMRV9URVNUKVxuICAgNzpcdFx0ZGVwZW5kcyBvbiBRQ09NX0FPU1NfUU1QIHx8IFFDT01fQU9TU19RTVA9blxuICAgODpcdFx0c2VsZWN0IFFDT01fTURUX0xPQURFUlxuICAgOTpcdFx0c2VsZWN0IFFDT01fUEFTXG4gIDEwOlx0XHRzZWxlY3QgUUNPTV9RTUlfSEVMUEVSU1xuICAxMTpcdFx0aGVscFxuICAxMjpcdFx0ICBDaG9vc2UgWSBvciBNIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgUXVhbGNvbW1cbiAgMTM6XHRcdCAgSVAgQWNjZWxlcmF0b3IgKElQQSksIGEgaGFyZHdhcmUgYmxvY2sgcHJlc2VudCBpbiBzb21lXG4gIDE0Olx0XHQgIFF1YWxjb21tIFNvQ3MuICBUaGUgSVBBIGlzIGEgcHJvZ3JhbW1hYmxlIHByb3RvY29sIHByb2Nlc3NvclxuICAxNTpcdFx0ICB0aGF0IGlzIGNhcGFibGUgb2YgZ2VuZXJpYyBoYXJkd2FyZSBoYW5kbGluZyBvZiBJUCBwYWNrZXRzLFxuICAxNjpcdFx0ICBpbmNsdWRpbmcgcm91dGluZywgZmlsdGVyaW5nLCBhbmQgTkFULiAgQ3VycmVudGx5IHRoZSBJUEFcbiAgMTc6XHRcdCAgZHJpdmVyIHN1cHBvcnRzIG9ubHkgYmFzaWMgdHJhbnNwb3J0IG9mIG5ldHdvcmsgdHJhZmZpY1xuICAxODpcdFx0ICBiZXR3ZWVuIHRoZSBBUCBhbmQgbW9kZW0uXG4gIDE5Olx0XG4gIDIwOlx0XHQgIE5vdGUgdGhhdCBpZiBzZWxlY3RlZCwgdGhlIHNlbGVjdGlvbiB0eXBlIG11c3QgbWF0Y2ggdGhhdFxuICAyMTpcdFx0ICBvZiBRQ09NX1E2VjVfQ09NTU9OIChZIG9yIE0pLlxuICAyMjpcdFxuICAyMzpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE5OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MDcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFF1YWxjb21tIElQQSBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBRQ09NX0lQQWAgaGVyZS4gUmlnaHQsIHRoYXQmIzM5O3MgdGhlIFF1YWxjb21tIElQQSBzdXBwb3J0IOKAkyBlc3NlbnRpYWxseSB0aGUgaGFyZHdhcmUgYmxvY2ssIHRoZSBJUEEsIG9uIHRoZWlyIFNuYXBkcmFnb24gb3IgQVJNIFNvQ3MuIFRoZSByZWFsIHF1ZXN0aW9uIEkmIzM5O20gZ3JhcHBsaW5nIHdpdGggaXMgd2hldGhlciB0aGlzIGlzIGEgKnBsYXRmb3JtKiBkcml2ZXIuIFRoYXQmIzM5O3MgdGhlIGNydXggb2YgaXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgaXRzIHByb2JpbmcgcHJvY2Vzcy4gRG9lcyBpdCByZXF1aXJlIHNvbWUgdmVyeSBzcGVjaWZpYyBoYXJkd2FyZSBjaGFyYWN0ZXJpc3RpY3Mgb3IgZGVwZW5kZW5jaWVzIHRpZWQgdG8gYSBwYXJ0aWN1bGFyIFNvQz8gVGhlIHBsYXRmb3JtIGRyaXZlciBwYXJhZGlnbSBvZnRlbiBoaW5nZXMgb24gdGhhdCBsZXZlbCBvZiBoYXJkd2FyZSBzcGVjaWZpY2l0eSwgc28gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byBob3cgdGhlIHByb2JlIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkLiBEb2VzIGl0LCBmb3IgaW5zdGFuY2UsIGV4cGxpY2l0bHkgdXNlIGBwbGF0Zm9ybV9kcml2ZXJfcHJvYmVgIG9yIHNvbWV0aGluZyBzaW1pbGFyPyBUaGF0JiMzOTtsbCBiZSB0aGUga2V5IGluZGljYXRvciB0byBuYWlsIHRoaXMgZG93bi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb2R1bGVfcGxhdGZvcm1fZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvaXBhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2lwYS9pcGFfbWFpbi5jPTEwMTE9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaXBhX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9pcGEvaXBhX21haW4uYy0xMDIyLVxuZHJpdmVycy9uZXQvaXBhL2lwYV9tYWluLmM6MTAyMzptb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGlwYV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvaXBhL2lwYV9tYWluLmMtMTAyNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzczCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBJUEEgRHJpdmVyKioKCk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgaXNzdWUsIHNvIGxldCYjMzk7cyBzdGFydCB3aXRoIGBkcml2ZXJzL25ldC9pcGEvaXBhX21haW4uY2AuIE15IGd1dCB0ZWxscyBtZSBzb21ldGhpbmcmIzM5O3Mgb2ZmIGluIHRoYXQgYXJlYS4gTm93LCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgc3lzdGVtLCBsaW5lIDEwMDAgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgcGxhY2UgdG8gc3RhcnQsIGFuZCBzcGVjaWZpY2FsbHkgSSBzaG91bGQgcGF5IGF0dGVudGlvbiB0byB0aGUgcHJvYmUgZnVuY3Rpb24uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdGhlcmUuLi4gSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzIHRvIGZpZ3VyZSB0aGlzIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTk6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9pcGEvaXBhX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTgwOlx0XHRcdFx0cG1fcnVudGltZV9wdXRfbm9pZGxlKGRldik7XG4gOTgxOlx0XHRcdFx0cmV0dXJuO1xuIDk4MjpcdFx0XHR9XG4gOTgzOlx0XG4gOTg0Olx0XHRcdGlwYV90ZWFyZG93bihpcGEpO1xuIDk4NTpcdFx0fVxuIDk4NjpcdFxuIDk4NzpcdFx0aXBhX2RlY29uZmlnKGlwYSk7XG4gOTg4Olx0b3V0X3Bvd2VyX3B1dDpcbiA5ODk6XHRcdHBtX3J1bnRpbWVfcHV0X25vaWRsZShkZXYpO1xuIDk5MDpcdFx0aXBhX3NtcDJwX2V4aXQoaXBhKTtcbiA5OTE6XHRcdGlwYV90YWJsZV9leGl0KGlwYSk7XG4gOTkyOlx0XHRpcGFfZW5kcG9pbnRfZXhpdChpcGEpO1xuIDk5MzpcdFx0Z3NpX2V4aXQoXHUwMDI2aXBhLVx1MDAzZWdzaSk7XG4gOTk0Olx0XHRpcGFfbWVtX2V4aXQoaXBhKTtcbiA5OTU6XHRcdGlwYV9yZWdfZXhpdChpcGEpO1xuIDk5NjpcdFx0a2ZyZWUoaXBhKTtcbiA5OTc6XHRcdGlwYV9wb3dlcl9leGl0KHBvd2VyKTtcbiA5OTg6XHRcdGlwYV9pbnRlcnJ1cHRfZXhpdChpbnRlcnJ1cHQpO1xuIDk5OTpcdFxuMTAwMDpcdFx0ZGV2X2luZm8oZGV2LCBcJiMzNDtJUEEgZHJpdmVyIHJlbW92ZWRcJiMzNDspO1xuMTAwMTpcdH1cbjEwMDI6XHRcbjEwMDM6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqaXBhX2F0dHJpYnV0ZV9ncm91cHNbXSA9IHtcbjEwMDQ6XHRcdFx1MDAyNmlwYV9hdHRyaWJ1dGVfZ3JvdXAsXG4xMDA1Olx0XHRcdTAwMjZpcGFfZmVhdHVyZV9hdHRyaWJ1dGVfZ3JvdXAsXG4xMDA2Olx0XHRcdTAwMjZpcGFfZW5kcG9pbnRfaWRfYXR0cmlidXRlX2dyb3VwLFxuMTAwNzpcdFx0XHUwMDI2aXBhX21vZGVtX2F0dHJpYnV0ZV9ncm91cCxcbjEwMDg6XHRcdE5VTEwsXG4xMDA5Olx0fTtcbjEwMTA6XHRcbjEwMTE6XHRzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBpcGFfZHJpdmVyID0ge1xuMTAxMjpcdFx0LnByb2JlXHRcdD0gaXBhX3Byb2JlLFxuMTAxMzpcdFx0LnJlbW92ZVx0XHQ9IGlwYV9yZW1vdmUsXG4xMDE0Olx0XHQuc2h1dGRvd25cdD0gaXBhX3JlbW92ZSxcbjEwMTU6XHRcdC5kcml2ZXJcdD0ge1xuMTAxNjpcdFx0XHQubmFtZVx0XHQ9IFwmIzM0O2lwYVwmIzM0OyxcbjEwMTc6XHRcdFx0LnBtXHRcdD0gXHUwMDI2aXBhX3BtX29wcyxcbjEwMTg6XHRcdFx0Lm9mX21hdGNoX3RhYmxlXHQ9IGlwYV9tYXRjaCxcbjEwMTk6XHRcdFx0LmRldl9ncm91cHNcdD0gaXBhX2F0dHJpYnV0ZV9ncm91cHMsXG4xMDIwOlx0XHR9LFxuMTAyMTpcdH07XG4xMDIyOlx0XG4xMDIzOlx0bW9kdWxlX3BsYXRmb3JtX2RyaXZlcihpcGFfZHJpdmVyKTtcbjEwMjQ6XHRcbjEwMjU6XHRNT0RVTEVfTElDRU5TRShcJiMzNDtHUEwgdjJcJiMzNDspO1xuMTAyNjpcdE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtRdWFsY29tbSBJUCBBY2NlbGVyYXRvciBkZXZpY2UgZHJpdmVyXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTk6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTYyNgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqSVBBIFByb2JlIENoZWNrKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIElQQSBkcml2ZXImIzM5O3MgcHJvYmluZyBzZXF1ZW5jZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIEkgc2hvdWxkIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYGlwYV9wcm9iZWAuIEkga25vdyB0aGF0JiMzOTtzIHRoZSBlbnRyeSBwb2ludCwgb3IgYXQgbGVhc3QgYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSBpbml0aWFsIHNldHVwLCBhbmQgSSYjMzk7bSBwcmV0dHkgc3VyZSBJIGNhbiBmaW5kIGl0IHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L2lwYS9pcGFfbWFpbi5jYCBmaWxlLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhhdCBjb2RlIGFuZCBzZWUgd2hhdCB0aGUgaW5pdGlhbCBjb25maWd1cmF0aW9uIGFuZCBoYXJkd2FyZSBjaGVja3MgYXJlIGRvaW5nLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRyaXZlciBpbml0aWFsaXplcywgZGlzY292ZXJzIHRoZSBoYXJkd2FyZSwgYW5kIGhvcGVmdWxseSwgSSYjMzk7bGwgaWRlbnRpZnkgdGhlIHBvaW50IHdoZXJlIHRoZSBlcnJvciBpcyBvY2N1cnJpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE5OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvaXBhL2lwYV9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg1MDpcdFx0aXBhLVx1MDAzZXZlcnNpb24gPSBkYXRhLVx1MDAzZXZlcnNpb247XG4gODUxOlx0XHRpcGEtXHUwMDNlbW9kZW1fcm91dGVfY291bnQgPSBkYXRhLVx1MDAzZW1vZGVtX3JvdXRlX2NvdW50O1xuIDg1MjpcdFx0aW5pdF9jb21wbGV0aW9uKFx1MDAyNmlwYS1cdTAwM2Vjb21wbGV0aW9uKTtcbiA4NTM6XHRcbiA4NTQ6XHRcdHJldCA9IGlwYV9yZWdfaW5pdChpcGEsIHBkZXYpO1xuIDg1NTpcdFx0aWYgKHJldClcbiA4NTY6XHRcdFx0Z290byBlcnJfa2ZyZWVfaXBhO1xuIDg1NzpcdFxuIDg1ODpcdFx0cmV0ID0gaXBhX21lbV9pbml0KGlwYSwgcGRldiwgZGF0YS1cdTAwM2VtZW1fZGF0YSk7XG4gODU5Olx0XHRpZiAocmV0KVxuIDg2MDpcdFx0XHRnb3RvIGVycl9yZWdfZXhpdDtcbiA4NjE6XHRcbiA4NjI6XHRcdHJldCA9IGlwYV9jbWRfaW5pdChpcGEpO1xuIDg2MzpcdFx0aWYgKHJldClcbiA4NjQ6XHRcdFx0Z290byBlcnJfbWVtX2V4aXQ7XG4gODY1Olx0XG4gODY2Olx0XHRyZXQgPSBnc2lfaW5pdChcdTAwMjZpcGEtXHUwMDNlZ3NpLCBwZGV2LCBpcGEtXHUwMDNldmVyc2lvbiwgZGF0YS1cdTAwM2VlbmRwb2ludF9jb3VudCxcbiA4Njc6XHRcdFx0ICAgICAgIGRhdGEtXHUwMDNlZW5kcG9pbnRfZGF0YSk7XG4gODY4Olx0XHRpZiAocmV0KVxuIDg2OTpcdFx0XHRnb3RvIGVycl9tZW1fZXhpdDtcbiA4NzA6XHRcbiA4NzE6XHRcdC8qIFJlc3VsdCBpcyBhIG5vbi16ZXJvIG1hc2sgb2YgZW5kcG9pbnRzIHRoYXQgc3VwcG9ydCBmaWx0ZXJpbmcgKi9cbiA4NzI6XHRcdHJldCA9IGlwYV9lbmRwb2ludF9pbml0KGlwYSwgZGF0YS1cdTAwM2VlbmRwb2ludF9jb3VudCwgZGF0YS1cdTAwM2VlbmRwb2ludF9kYXRhKTtcbiA4NzM6XHRcdGlmIChyZXQpXG4gODc0Olx0XHRcdGdvdG8gZXJyX2dzaV9leGl0O1xuIDg3NTpcdFxuIDg3NjpcdFx0cmV0ID0gaXBhX3RhYmxlX2luaXQoaXBhKTtcbiA4Nzc6XHRcdGlmIChyZXQpXG4gODc4Olx0XHRcdGdvdG8gZXJyX2VuZHBvaW50X2V4aXQ7XG4gODc5Olx0XG4gODgwOlx0XHRyZXQgPSBpcGFfc21wMnBfaW5pdChpcGEsIHBkZXYsIGxvYWRlciA9PSBJUEFfTE9BREVSX01PREVNKTtcbiA4ODE6XHRcdGlmIChyZXQpXG4gODgyOlx0XHRcdGdvdG8gZXJyX3RhYmxlX2V4aXQ7XG4gODgzOlx0XG4gODg0Olx0XHQvKiBQb3dlciBuZWVkcyB0byBiZSBhY3RpdmUgZm9yIGNvbmZpZyBhbmQgc2V0dXAgKi9cbiA4ODU6XHRcdHJldCA9IHBtX3J1bnRpbWVfZ2V0X3N5bmMoZGV2KTtcbiA4ODY6XHRcdGlmIChXQVJOX09OKHJldCBcdTAwM2MgMCkpXG4gODg3Olx0XHRcdGdvdG8gZXJyX3Bvd2VyX3B1dDtcbiA4ODg6XHRcbiA4ODk6XHRcdHJldCA9IGlwYV9jb25maWcoaXBhLCBkYXRhKTtcbiA4OTA6XHRcdGlmIChyZXQpXG4gODkxOlx0XHRcdGdvdG8gZXJyX3Bvd2VyX3B1dDtcbiA4OTI6XHRcbiA4OTM6XHRcdGRldl9pbmZvKGRldiwgXCYjMzQ7SVBBIGRyaXZlciBpbml0aWFsaXplZFwmIzM0Oyk7XG4gODk0Olx0XG4gODk1Olx0XHQvKiBJZiB0aGUgbW9kZW0gaXMgbG9hZGluZyBHU0kgZmlybXdhcmUsIGl0IHdpbGwgdHJpZ2dlciBhIGNhbGwgdG9cbiA4OTY6XHRcdCAqIGlwYV9zZXR1cCgpIHdoZW4gaXQgaGFzIGZpbmlzaGVkLiAgSW4gdGhhdCBjYXNlIHdlJiMzOTtyZSBkb25lIGhlcmUuXG4gODk3Olx0XHQgKi9cbiA4OTg6XHRcdGlmIChsb2FkZXIgPT0gSVBBX0xPQURFUl9NT0RFTSlcbiA4OTk6XHRcdFx0Z290byBkb25lO1xuIDkwMDpcdFxuIDkwMTpcdFx0aWYgKGxvYWRlciA9PSBJUEFfTE9BREVSX1NFTEYpIHtcbiA5MDI6XHRcdFx0LyogVGhlIEFQIGlzIGxvYWRpbmcgR1NJIGZpcm13YXJlOyBkbyBzbyBub3cgKi9cbiA5MDM6XHRcdFx0cmV0ID0gaXBhX2Zpcm13YXJlX2xvYWQoZGV2KTtcbiA5MDQ6XHRcdFx0aWYgKHJldClcbiA5MDU6XHRcdFx0XHRnb3RvIGVycl9kZWNvbmZpZztcbiA5MDY6XHRcdH0gLyogT3RoZXJ3aXNlIGxvYWRlciA9PSBJUEFfTE9BREVSX1NLSVAgKi9cbiA5MDc6XHRcbiA5MDg6XHRcdC8qIEdTSSBmaXJtd2FyZSBpcyBsb2FkZWQ7IHByb2NlZWQgdG8gc2V0dXAgKi9cbiA5MDk6XHRcdHJldCA9IGlwYV9zZXR1cChpcGEpO1xuIDkxMDpcdFx0aWYgKHJldClcbiA5MTE6XHRcdFx0Z290byBlcnJfZGVjb25maWc7XG4gOTEyOlx0ZG9uZTpcbiA5MTM6XHRcdCh2b2lkKXBtX3J1bnRpbWVfcHV0X2F1dG9zdXNwZW5kKGRldik7XG4gOTE0Olx0XG4gOTE1Olx0XHRyZXR1cm4gMDtcbiA5MTY6XHRcbiA5MTc6XHRlcnJfZGVjb25maWc6XG4gOTE4Olx0XHRpcGFfZGVjb25maWcoaXBhKTtcbiA5MTk6XHRlcnJfcG93ZXJfcHV0OlxuIDkyMDpcdFx0cG1fcnVudGltZV9wdXRfbm9pZGxlKGRldik7XG4gOTIxOlx0XHRpcGFfc21wMnBfZXhpdChpcGEpO1xuIDkyMjpcdGVycl90YWJsZV9leGl0OlxuIDkyMzpcdFx0aXBhX3RhYmxlX2V4aXQoaXBhKTtcbiA5MjQ6XHRlcnJfZW5kcG9pbnRfZXhpdDpcbiA5MjU6XHRcdGlwYV9lbmRwb2ludF9leGl0KGlwYSk7XG4gOTI2Olx0ZXJyX2dzaV9leGl0OlxuIDkyNzpcdFx0Z3NpX2V4aXQoXHUwMDI2aXBhLVx1MDAzZWdzaSk7XG4gOTI4Olx0ZXJyX21lbV9leGl0OlxuIDkyOTpcdFx0aXBhX21lbV9leGl0KGlwYSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE5OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwMTgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElQQSBNYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGlwYV9tYXRjaGAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyB0aGluZyBpcyBtYXRjaGluZyBvbi4gQWgsIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgY29ubmVjdGVkIHRvIHRoZSAmIzM0O09GJiMzNDsg4oCTIERldmljZSBUcmVlLiBUaGF0JiMzOTtzIGEgY3J1Y2lhbCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gaG93IHRoaXMgZnVuY3Rpb24gd29ya3MsIHNvIEkmIzM5O2xsIGdvIGFoZWFkIGFuZCBkbyBhIGdyZXAgZm9yIGBpcGFfbWF0Y2hgIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L2lwYWAgZGlyZWN0b3J5LiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiBpdHMgdXNhZ2Ugd2l0aGluIHRoZSBJUEEgZHJpdmVyIGNvbnRleHQuIFRoaXMgc2hvdWxkIGhlbHAgbWUgYmV0dGVyIHVuZGVyc3RhbmQgaXRzIG92ZXJhbGwgcm9sZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTk6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBhX21hdGNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvaXBhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2lwYS9pcGFfbWFpbi5jPTU4Nj1zdGF0aWMgaW50IGlwYV9maXJtd2FyZV9sb2FkKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9pcGEvaXBhX21haW4uYy02NDEtXG5kcml2ZXJzL25ldC9pcGEvaXBhX21haW4uYzo2NDI6c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgaXBhX21hdGNoW10gPSB7XG5kcml2ZXJzL25ldC9pcGEvaXBhX21haW4uYy02NDMtXHR7XG4tLVxuZHJpdmVycy9uZXQvaXBhL2lwYV9tYWluLmMtNjg0LX07XG5kcml2ZXJzL25ldC9pcGEvaXBhX21haW4uYzo2ODU6TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgaXBhX21hdGNoKTtcbmRyaXZlcnMvbmV0L2lwYS9pcGFfbWFpbi5jLTY4Ni1cbi0tXG5kcml2ZXJzL25ldC9pcGEvaXBhX21haW4uYz0xMDExPXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGlwYV9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvaXBhL2lwYV9tYWluLmMtMTAxNy1cdFx0LnBtXHRcdD0gXHUwMDI2aXBhX3BtX29wcyxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfbWFpbi5jOjEwMTg6XHRcdC5vZl9tYXRjaF90YWJsZVx0PSBpcGFfbWF0Y2gsXG5kcml2ZXJzL25ldC9pcGEvaXBhX21haW4uYy0xMDE5LVx0XHQuZGV2X2dyb3Vwc1x0PSBpcGFfYXR0cmlidXRlX2dyb3VwcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTk6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzUyNQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDQwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBRdWFsY29tbSBJUEEgRHJpdmVyIGZvciBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgYGlwYV9tYXRjaGAgaXMgZXNzZW50aWFsbHkgYSBjb21wYXRpYmlsaXR5IGxpc3QgZm9yIFF1YWxjb21tIFN5c3RlbS1vbi1DaGlwcyAoU29DcykuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGVudHJpZXMgbGlrZSBgcWNvbSxzZG04NDUtaXBhYCBhbmQgYHFjb20sc204MjUwLWlwYWAsIHNvIGl0JiMzOTtzIGNsZWFybHkgdGFyZ2V0aW5nIHNwZWNpZmljIFF1YWxjb21tIGhhcmR3YXJlLiBBbmQgdGhpcyBpcyBhbGwgcnVubmluZyBvbiBgYW1kNjRgLCB3aGljaCBpcyBvdXIgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCk5vdywgYFFDT01fSVBBYCBpcyBjb25kaXRpb25hbC4gSXQgaGluZ2VzIG9uIGBBUkNIX1FDT00gfHwgQ09NUElMRV9URVNUYCwgYXMgd2VsbCBhcyBgUUNPTV9TTUVNYCBhbmQgYElOVEVSQ09OTkVDVGAuIFRoYXQgdGVsbHMgbWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHBsYXRmb3JtIGRyaXZlciwgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvciB0aGVzZSBRdWFsY29tbSBTb0NzLiBJdCBuZWVkcyBzcGVjaWZpYyBRdWFsY29tbSBJUCBBY2NlbGVyYXRvciBoYXJkd2FyZSBhbmQgcmVsaWVzIG9uIGRldmljZSB0cmVlIGJpbmRpbmdzLCB3aGljaCBpcyBjcnVjaWFsLgoKVGhlIGNhdGNoLCBhbmQgdGhpcyBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nIGZvciBmdXp6aW5nLCBpcyB0aGF0IGV2ZW4gaWYgd2UgZm9yY2UtY29tcGlsZSB0aGlzIG9uIHg4NiB1c2luZyBgQ09NUElMRV9URVNUYCwgdGhlIGRyaXZlciAqc3RpbGwqIGRlbWFuZHMgdGhlIHByZXNlbmNlIG9mIERUIG5vZGVzIGFuZCB0aGUgYXNzb2NpYXRlZCBwaHlzaWNhbCBoYXJkd2FyZS4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgdGhpbmdzIGxpa2UgbW9kZW0sIGludGVyY29ubmVjdCwgc2hhcmVkIG1lbW9yeSwgYW5kIGNsb2NrIGRvbWFpbnMuIFN0YW5kYXJkIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lIChHQ0UpIGNvbmZpZ3VyYXRpb25zIOKAkyBldmVuIG9uIGFtZDY0L3g4Nl82NCDigJMgYXJlbiYjMzk7dCBnb2luZyB0byBoYXZlIHRoaXMgUXVhbGNvbW0gSVBBIGhhcmR3YXJlIHByZXNlbnQgb3IgYXZhaWxhYmxlIHRvIGJlIHByb2JlZC4KCk5vdywgbGV0JiMzOTtzIGNvbm5lY3QgdGhpcyB0byB0aGUgaW5zdHJ1Y3Rpb25zLiBTZWN0aW9uIDIgbGF5cyBvdXQgbmVnYXRpdmUgY3JpdGVyaWEg4oCTIHNjZW5hcmlvcyB3aGVyZSB3ZSBzaG91bGQgYXZvaWQgZnV6emluZy4gSXQgbWVudGlvbnMgJiMzNDtzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUmIzM0OyBsaWtlIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBBU0lDcyBvciBQQ0llIGNhcmRzLiBTb3VuZHMgZmFtaWxpYXIsIGRvZXNuJiMzOTt0IGl0PyBUaGUgSVBBIGRyaXZlciwgZGVwZW5kZW50IG9uIHRoaXMgUXVhbGNvbW0gaGFyZHdhcmUsIGZpdHMgdGhhdCBiaWxsLiBUaGUgaW5zdHJ1Y3Rpb25zIGFsc28gY2FsbCBvdXQgdW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzIGxpa2UgZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyB0aGF0IGFyZSB0cmlnZ2VyZWQgYnkgcGh5c2ljYWwgaG90LXVucGx1ZyBldmVudHMgb3IgbWFudWFsIGRyaXZlciB1bmJpbmRpbmcuIFRoaXMgaXMgbGlrZWx5IGFuIGlzc3VlIGhlcmUgdG9vLgoKVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzIHRoaXM6IGlzIHRoZXJlICphbnkqIHZpcnR1YWxpemVkLCBlbXVsYXRlZCwgb3IgbW9ja2VkIHdheSB0byBhY2Nlc3MgdGhlIElQQSBmdW5jdGlvbmFsaXR5PyBBcmUgdGhlcmUgYW55IG9wdGlvbnMgYWtpbiB0byBhIFVTQiBnYWRnZXQsIGEgbmV0bGluayBpbnRlcmZhY2UsIG9yIGEgbW9jayBkZXZpY2UgdGhhdCBjb3VsZCBzaW11bGF0ZSBvciBhbGxvdyBhIGRlZ3JlZSBvZiBpbnRlcmFjdGlvbiB3aXRoIElQQT8gSSBuZWVkIHRvIGludmVzdGlnYXRlIHdoYXQgaXMgaW4gYGRyaXZlcnMvbmV0L2lwYWAgYW5kIHNlZSBpZiBhbnl0aGluZyBsaWtlIHRoaXMgZXhpc3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmNvZGVzZWFyY2gtZGlyLWluZGV4PC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtEaXImIzM0OzogJiMzNDtkcml2ZXJzL25ldC9pcGEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZXMmIzM0OzogWwogICAgJiMzNDtnc2kuYyYjMzQ7LAogICAgJiMzNDtnc2kuaCYjMzQ7LAogICAgJiMzNDtnc2lfcHJpdmF0ZS5oJiMzNDssCiAgICAmIzM0O2dzaV9yZWcuYyYjMzQ7LAogICAgJiMzNDtnc2lfcmVnLmgmIzM0OywKICAgICYjMzQ7Z3NpX3RyYW5zLmMmIzM0OywKICAgICYjMzQ7Z3NpX3RyYW5zLmgmIzM0OywKICAgICYjMzQ7aXBhLmgmIzM0OywKICAgICYjMzQ7aXBhX2NtZC5jJiMzNDssCiAgICAmIzM0O2lwYV9jbWQuaCYjMzQ7LAogICAgJiMzNDtpcGFfZGF0YS5oJiMzNDssCiAgICAmIzM0O2lwYV9lbmRwb2ludC5jJiMzNDssCiAgICAmIzM0O2lwYV9lbmRwb2ludC5oJiMzNDssCiAgICAmIzM0O2lwYV9nc2kuYyYjMzQ7LAogICAgJiMzNDtpcGFfZ3NpLmgmIzM0OywKICAgICYjMzQ7aXBhX2ludGVycnVwdC5jJiMzNDssCiAgICAmIzM0O2lwYV9pbnRlcnJ1cHQuaCYjMzQ7LAogICAgJiMzNDtpcGFfbWFpbi5jJiMzNDssCiAgICAmIzM0O2lwYV9tZW0uYyYjMzQ7LAogICAgJiMzNDtpcGFfbWVtLmgmIzM0OywKICAgICYjMzQ7aXBhX21vZGVtLmMmIzM0OywKICAgICYjMzQ7aXBhX21vZGVtLmgmIzM0OywKICAgICYjMzQ7aXBhX3Bvd2VyLmMmIzM0OywKICAgICYjMzQ7aXBhX3Bvd2VyLmgmIzM0OywKICAgICYjMzQ7aXBhX3FtaS5jJiMzNDssCiAgICAmIzM0O2lwYV9xbWkuaCYjMzQ7LAogICAgJiMzNDtpcGFfcW1pX21zZy5jJiMzNDssCiAgICAmIzM0O2lwYV9xbWlfbXNnLmgmIzM0OywKICAgICYjMzQ7aXBhX3JlZy5jJiMzNDssCiAgICAmIzM0O2lwYV9yZWcuaCYjMzQ7LAogICAgJiMzNDtpcGFfcmVzb3VyY2UuYyYjMzQ7LAogICAgJiMzNDtpcGFfcmVzb3VyY2UuaCYjMzQ7LAogICAgJiMzNDtpcGFfc21wMnAuYyYjMzQ7LAogICAgJiMzNDtpcGFfc21wMnAuaCYjMzQ7LAogICAgJiMzNDtpcGFfc3lzZnMuYyYjMzQ7LAogICAgJiMzNDtpcGFfc3lzZnMuaCYjMzQ7LAogICAgJiMzNDtpcGFfdGFibGUuYyYjMzQ7LAogICAgJiMzNDtpcGFfdGFibGUuaCYjMzQ7LAogICAgJiMzNDtpcGFfdWMuYyYjMzQ7LAogICAgJiMzNDtpcGFfdWMuaCYjMzQ7LAogICAgJiMzNDtpcGFfdmVyc2lvbi5oJiMzNDssCiAgICAmIzM0O3JlZy5oJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBbCiAgICAmIzM0O2RhdGEmIzM0OywKICAgICYjMzQ7cmVnJiMzNDsKICBdCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTk6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODgzNAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIHRoZSBJbml0aWFsaXphdGlvbiBvZiBgaXBhX3FtaS5jYCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBpcGFfcW1pLmNgIGlzIGluaXRpYWxpemVkLiBLbm93aW5nIHRoaXMgaXMgY3J1Y2lhbCBmb3IgWyoqaW5zZXJ0IHlvdXIgZmllbGQvY29udGV4dCBoZXJlLCBlLmcuLCBkZWJ1Z2dpbmcgYSBzcGVjaWZpYyBpc3N1ZSwgdW5kZXJzdGFuZGluZyBhIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLCBwcmVwYXJpbmcgZm9yIGEgY29kZSByZXZpZXcgcmVsYXRlZCB0byB0aGUgbW9kZW0gaW50ZXJmYWNlLCBldGMuKiouIFRoaXMgbGV2ZWwgb2YgaW5pdGlhbGl6YXRpb24gaW1wYWN0cyB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgbW9kZW0gaW50ZXJmYWNlXS4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIG9yIHN0cnVjdHVyZXMgaW52b2x2ZWQuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGZvciB0aGUgZW50cnkgcG9pbnQgb3IgYW55IGluaXRpYWxpemF0aW9uIHJvdXRpbmVzIHdpdGhpbiB0aGUgZmlsZSBpdHNlbGYuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGxpa2UgY29uc3RydWN0b3IgYXR0cmlidXRlcywgbW9kdWxlIHJlZ2lzdHJhdGlvbiwgb3IgYW55IGNhbGxzIHJlbGF0ZWQgdG8gcmVzb3VyY2UgYWxsb2NhdGlvbiB0aGF0IHdvdWxkIHN1Z2dlc3QgaW5pdGlhbGl6YXRpb24gaXMgaGFwcGVuaW5nLiBVbmRlcnN0YW5kaW5nIHRoaXMgd2lsbCBiZSB0aGUgZm91bmRhdGlvbiBmb3IgZGVidWdnaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcGFfcW1pJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvaXBhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2lwYS9NYWtlZmlsZT0xND1pcGEteVx0XHRcdDo9XHRpcGFfbWFpbi5vIGlwYV9wb3dlci5vIGlwYV9yZWcubyBpcGFfbWVtLm8gXFxcbi0tXG5kcml2ZXJzL25ldC9pcGEvTWFrZWZpbGUtMTctXHRcdFx0XHRpcGFfZW5kcG9pbnQubyBpcGFfY21kLm8gaXBhX21vZGVtLm8gXFxcbmRyaXZlcnMvbmV0L2lwYS9NYWtlZmlsZToxODpcdFx0XHRcdGlwYV9yZXNvdXJjZS5vIGlwYV9xbWkubyBpcGFfcW1pX21zZy5vIFxcXG5kcml2ZXJzL25ldC9pcGEvTWFrZWZpbGUtMTktXHRcdFx0XHRpcGFfc3lzZnMub1xuLS1cbmRyaXZlcnMvbmV0L2lwYS9pcGEuaC0xNC0jaW5jbHVkZSBcJiMzNDtpcGFfbWVtLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2lwYS9pcGEuaDoxNTojaW5jbHVkZSBcJiMzNDtpcGFfcW1pLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2lwYS9pcGEuaC0xNi0jaW5jbHVkZSBcJiMzNDtpcGFfdmVyc2lvbi5oXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvaXBhL2lwYS5oPTczPXN0cnVjdCBpcGEge1xuLS1cbmRyaXZlcnMvbmV0L2lwYS9pcGEuaC0xMzAtXHRzdHJ1Y3QgbmV0X2RldmljZSAqbW9kZW1fbmV0ZGV2O1xuZHJpdmVycy9uZXQvaXBhL2lwYS5oOjEzMTpcdHN0cnVjdCBpcGFfcW1pIHFtaTtcbmRyaXZlcnMvbmV0L2lwYS9pcGEuaC0xMzItfTtcbi0tXG5kcml2ZXJzL25ldC9pcGEvaXBhX21haW4uYz0xMTE9aW50IGlwYV9zZXR1cChzdHJ1Y3QgaXBhICppcGEpXG4tLVxuZHJpdmVycy9uZXQvaXBhL2lwYV9tYWluLmMtMTUwLVx0LyogV2UmIzM5O3JlIGFsbCBzZXQuICBOb3cgcHJlcGFyZSBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBtb2RlbSAqL1xuZHJpdmVycy9uZXQvaXBhL2lwYV9tYWluLmM6MTUxOlx0cmV0ID0gaXBhX3FtaV9zZXR1cChpcGEpO1xuZHJpdmVycy9uZXQvaXBhL2lwYV9tYWluLmMtMTUyLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9pcGEvaXBhX21haW4uYz0xNzc9c3RhdGljIHZvaWQgaXBhX3RlYXJkb3duKHN0cnVjdCBpcGEgKmlwYSlcbi0tXG5kcml2ZXJzL25ldC9pcGEvaXBhX21haW4uYy0xODQtXG5kcml2ZXJzL25ldC9pcGEvaXBhX21haW4uYzoxODU6XHRpcGFfcW1pX3RlYXJkb3duKGlwYSk7XG5kcml2ZXJzL25ldC9pcGEvaXBhX21haW4uYy0xODYtXHRpcGFfZW5kcG9pbnRfZGVmYXVsdF9yb3V0ZV9jbGVhcihpcGEpO1xuLS1cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMTMtI2luY2x1ZGUgXCYjMzQ7aXBhX21vZGVtLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6MTQ6I2luY2x1ZGUgXCYjMzQ7aXBhX3FtaV9tc2cuaFwmIzM0O1xuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xNS1cbi0tXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTc5LS8qIFNlbmQgYW4gSU5JVF9DT01QTEVURSBpbmRpY2F0aW9uIG1lc3NhZ2UgdG8gdGhlIG1vZGVtICovXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjgwOnN0YXRpYyB2b2lkIGlwYV9zZXJ2ZXJfaW5pdF9jb21wbGV0ZShzdHJ1Y3QgaXBhX3FtaSAqaXBhX3FtaSlcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtODEte1xuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzo4MjpcdHN0cnVjdCBpcGEgKmlwYSA9IGNvbnRhaW5lcl9vZihpcGFfcW1pLCBzdHJ1Y3QgaXBhLCBxbWkpO1xuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzo4MzpcdHN0cnVjdCBxbWlfaGFuZGxlICpxbWkgPSBcdTAwMjZpcGFfcW1pLVx1MDAzZXNlcnZlcl9oYW5kbGU7XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjg0Olx0c3RydWN0IHNvY2thZGRyX3FydHIgKnNxID0gXHUwMDI2aXBhX3FtaS1cdTAwM2Vtb2RlbV9zcTtcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtODUtXHRzdHJ1Y3QgaXBhX2luaXRfY29tcGxldGVfaW5kIGluZCA9IHsgfTtcbi0tXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTk3LVx0ZWxzZVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzo5ODpcdFx0aXBhX3FtaS1cdTAwM2VpbmRpY2F0aW9uX3NlbnQgPSB0cnVlO1xuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy05OS19XG4tLVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xMDEtLyogSWYgcmVxdWVzdGVkIChhbmQgbm90IGFscmVhZHkgc2VudCkgc2VuZCB0aGUgSU5JVF9DT01QTEVURSBpbmRpY2F0aW9uICovXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjEwMjpzdGF0aWMgdm9pZCBpcGFfcW1pX2luZGljYXRpb24oc3RydWN0IGlwYV9xbWkgKmlwYV9xbWkpXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTEwMy17XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjEwNDpcdGlmICghaXBhX3FtaS1cdTAwM2VpbmRpY2F0aW9uX3JlcXVlc3RlZClcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMTA1LVx0XHRyZXR1cm47XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTEwNi1cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6MTA3Olx0aWYgKGlwYV9xbWktXHUwMDNlaW5kaWNhdGlvbl9zZW50KVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xMDgtXHRcdHJldHVybjtcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMTA5LVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoxMTA6XHRpcGFfc2VydmVyX2luaXRfY29tcGxldGUoaXBhX3FtaSk7XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTExMS19XG4tLVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xMjEtICovXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjEyMjpzdGF0aWMgdm9pZCBpcGFfcW1pX3JlYWR5KHN0cnVjdCBpcGFfcW1pICppcGFfcW1pKVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xMjMte1xuLS1cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMTI3LVx0LyogV2UgYXJlbiYjMzk7dCByZWFkeSB1bnRpbCB0aGUgbW9kZW0gYW5kIG1pY3JvY29udHJvbGxlciBhcmUgKi9cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6MTI4Olx0aWYgKCFpcGFfcW1pLVx1MDAzZW1vZGVtX3JlYWR5IHx8ICFpcGFfcW1pLVx1MDAzZXVjX3JlYWR5KVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xMjktXHRcdHJldHVybjtcbi0tXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTEzMS1cdC8qIFNlbmQgdGhlIGluZGljYXRpb24gbWVzc2FnZSBpZiBpdCB3YXMgcmVxdWVzdGVkICovXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjEzMjpcdGlwYV9xbWlfaW5kaWNhdGlvbihpcGFfcW1pKTtcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMTMzLVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xMzQtXHQvKiBUaGUgaW5pdGlhbCBib290IHJlcXVpcmVzIHVzIHRvIHNlbmQgdGhlIGluZGljYXRpb24uICovXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjEzNTpcdGlmIChpcGFfcW1pLVx1MDAzZWluaXRpYWxfYm9vdCkge1xuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoxMzY6XHRcdGlmICghaXBhX3FtaS1cdTAwM2VpbmRpY2F0aW9uX3NlbnQpXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTEzNy1cdFx0XHRyZXR1cm47XG4tLVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xMzktXHRcdC8qIFRoZSBpbml0aWFsIG1vZGVtIGJvb3QgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSAqL1xuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoxNDA6XHRcdGlwYV9xbWktXHUwMDNlaW5pdGlhbF9ib290ID0gZmFsc2U7XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTE0MS1cdH1cbi0tXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTE0My1cdC8qIFdlJiMzOTtyZSByZWFkeS4gIFN0YXJ0IHVwIG5vcm1hbCBvcGVyYXRpb24gKi9cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6MTQ0Olx0aXBhID0gY29udGFpbmVyX29mKGlwYV9xbWksIHN0cnVjdCBpcGEsIHFtaSk7XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTE0NS1cdHJldCA9IGlwYV9tb2RlbV9zdGFydChpcGEpO1xuLS1cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM9MTUxPXN0YXRpYyB2b2lkIGlwYV9zZXJ2ZXJfYnllKHN0cnVjdCBxbWlfaGFuZGxlICpxbWksIHVuc2lnbmVkIGludCBub2RlKVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xNTIte1xuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoxNTM6XHRzdHJ1Y3QgaXBhX3FtaSAqaXBhX3FtaTtcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMTU0LVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoxNTU6XHRpcGFfcW1pID0gY29udGFpbmVyX29mKHFtaSwgc3RydWN0IGlwYV9xbWksIHNlcnZlcl9oYW5kbGUpO1xuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xNTYtXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTE1Ny1cdC8qIFRoZSBtb2RlbSBjbGllbnQgYW5kIHNlcnZlciBnbyBhd2F5IGF0IHRoZSBzYW1lIHRpbWUgKi9cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6MTU4Olx0bWVtc2V0KFx1MDAyNmlwYV9xbWktXHUwMDNlbW9kZW1fc3EsIDAsIHNpemVvZihpcGFfcW1pLVx1MDAzZW1vZGVtX3NxKSk7XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTE1OS1cbi0tXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTE2MS1cdC8qIHVjX3JlYWR5IGRvZXNuJiMzOTt0IGNoYW5nZSB3aGVuIG1vZGVtIHJlYm9vdHMgKi9cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6MTYyOlx0aXBhX3FtaS1cdTAwM2Vtb2RlbV9yZWFkeSA9IGZhbHNlO1xuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoxNjM6XHRpcGFfcW1pLVx1MDAzZWluZGljYXRpb25fcmVxdWVzdGVkID0gZmFsc2U7XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjE2NDpcdGlwYV9xbWktXHUwMDNlaW5kaWNhdGlvbl9zZW50ID0gZmFsc2U7XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTE2NS19XG4tLVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYz0xNjc9c3RhdGljIGNvbnN0IHN0cnVjdCBxbWlfb3BzIGlwYV9zZXJ2ZXJfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMTcxLS8qIFRydWUgaWYgYSBRTUkgcmVxdWVzdCBhcnJpdmVkIGZyb20gdGhlIG1vZGVtIHdlIGFyZSBwYWlyZWQgd2l0aCAqL1xuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoxNzI6c3RhdGljIGJvb2wgaXBhX3NlcnZlcl9mcm9tX21vZGVtKGNvbnN0IHN0cnVjdCBpcGFfcW1pICppcGFfcW1pLFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xNzMtXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9xcnRyICpzcSlcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMTc0LXtcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6MTc1Olx0cmV0dXJuIHNxLVx1MDAzZXNxX25vZGUgPT0gaXBhX3FtaS1cdTAwM2Vtb2RlbV9zcS5zcV9ub2RlIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoxNzY6XHQgICAgICAgc3EtXHUwMDNlc3FfcG9ydCA9PSBpcGFfcW1pLVx1MDAzZW1vZGVtX3NxLnNxX3BvcnQ7XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTE3Ny19XG4tLVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYz0xODM9c3RhdGljIHZvaWQgaXBhX3NlcnZlcl9pbmRpY2F0aW9uX3JlZ2lzdGVyKHN0cnVjdCBxbWlfaGFuZGxlICpxbWksXG4tLVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xODgtXHRzdHJ1Y3QgaXBhX2luZGljYXRpb25fcmVnaXN0ZXJfcnNwIHJzcCA9IHsgfTtcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6MTg5Olx0c3RydWN0IGlwYV9xbWkgKmlwYV9xbWk7XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTE5MC1cdHN0cnVjdCBpcGEgKmlwYTtcbi0tXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTE5Mi1cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6MTkzOlx0aXBhX3FtaSA9IGNvbnRhaW5lcl9vZihxbWksIHN0cnVjdCBpcGFfcW1pLCBzZXJ2ZXJfaGFuZGxlKTtcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6MTk0Olx0aXBhID0gY29udGFpbmVyX29mKGlwYV9xbWksIHN0cnVjdCBpcGEsIHFtaSk7XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTE5NS1cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6MTk2Olx0aWYgKCFpcGFfc2VydmVyX2Zyb21fbW9kZW0oaXBhX3FtaSwgc3EpKSB7XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTE5Ny1cdFx0ZGV2X3dhcm5fcmF0ZWxpbWl0ZWQoaXBhLVx1MDAzZWRldixcbi0tXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTIwOS1cdGlmICghcmV0KSB7XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjIxMDpcdFx0aXBhX3FtaS1cdTAwM2VpbmRpY2F0aW9uX3JlcXVlc3RlZCA9IHRydWU7XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjIxMTpcdFx0aXBhX3FtaV9yZWFkeShpcGFfcW1pKTtcdFx0LyogV2UgbWlnaHQgYmUgcmVhZHkgbm93ICovXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTIxMi1cdH0gZWxzZSB7XG4tLVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYz0yMTk9c3RhdGljIHZvaWQgaXBhX3NlcnZlcl9kcml2ZXJfaW5pdF9jb21wbGV0ZShzdHJ1Y3QgcW1pX2hhbmRsZSAqcW1pLFxuLS1cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMjI0LVx0c3RydWN0IGlwYV9kcml2ZXJfaW5pdF9jb21wbGV0ZV9yc3AgcnNwID0geyB9O1xuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoyMjU6XHRzdHJ1Y3QgaXBhX3FtaSAqaXBhX3FtaTtcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMjI2LVx0c3RydWN0IGlwYSAqaXBhO1xuLS1cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMjI4LVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoyMjk6XHRpcGFfcW1pID0gY29udGFpbmVyX29mKHFtaSwgc3RydWN0IGlwYV9xbWksIHNlcnZlcl9oYW5kbGUpO1xuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoyMzA6XHRpcGEgPSBjb250YWluZXJfb2YoaXBhX3FtaSwgc3RydWN0IGlwYSwgcW1pKTtcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMjMxLVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoyMzI6XHRpZiAoIWlwYV9zZXJ2ZXJfZnJvbV9tb2RlbShpcGFfcW1pLCBzcSkpIHtcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMjMzLVx0XHRkZXZfd2Fybl9yYXRlbGltaXRlZChpcGEtXHUwMDNlZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMjQ1LVx0aWYgKCFyZXQpIHtcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6MjQ2Olx0XHRpcGFfcW1pLVx1MDAzZXVjX3JlYWR5ID0gdHJ1ZTtcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6MjQ3Olx0XHRpcGFfcW1pX3JlYWR5KGlwYV9xbWkpO1x0XHQvKiBXZSBtaWdodCBiZSByZWFkeSBub3cgKi9cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMjQ4LVx0fSBlbHNlIHtcbi0tXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jPTMwMT1zdGF0aWMgY29uc3Qgc3RydWN0IGlwYV9pbml0X21vZGVtX2RyaXZlcl9yZXEgKlxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzozMDI6aW5pdF9tb2RlbV9kcml2ZXJfcmVxKHN0cnVjdCBpcGFfcW1pICppcGFfcW1pKVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0zMDMte1xuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzozMDQ6XHRzdHJ1Y3QgaXBhICppcGEgPSBjb250YWluZXJfb2YoaXBhX3FtaSwgc3RydWN0IGlwYSwgcW1pKTtcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMzA1LVx0dTMyIG1vZGVtX3JvdXRlX2NvdW50ID0gaXBhLVx1MDAzZW1vZGVtX3JvdXRlX2NvdW50O1xuLS1cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM9NDIzPXN0YXRpYyB2b2lkIGlwYV9jbGllbnRfaW5pdF9kcml2ZXJfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy00MjYtXHRjb25zdCBzdHJ1Y3QgaXBhX2luaXRfbW9kZW1fZHJpdmVyX3JlcSAqcmVxO1xuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzo0Mjc6XHRzdHJ1Y3QgaXBhX3FtaSAqaXBhX3FtaTtcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtNDI4LVx0c3RydWN0IHFtaV9oYW5kbGUgKnFtaTtcbi0tXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTQzMy1cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6NDM0Olx0aXBhX3FtaSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXBhX3FtaSwgaW5pdF9kcml2ZXJfd29yayk7XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjQzNTpcdHFtaSA9IFx1MDAyNmlwYV9xbWktXHUwMDNlY2xpZW50X2hhbmRsZTtcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtNDM2LVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzo0Mzc6XHRpcGEgPSBjb250YWluZXJfb2YoaXBhX3FtaSwgc3RydWN0IGlwYSwgcW1pKTtcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtNDM4LVx0ZGV2ID0gaXBhLVx1MDAzZWRldjtcbi0tXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTQ0Ni1cdC8qIFNlbmQgdGhlIHJlcXVlc3QsIGFuZCBpZiBzdWNjZXNzZnVsIHdhaXQgZm9yIGl0cyByZXNwb25zZSAqL1xuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzo0NDc6XHRyZXEgPSBpbml0X21vZGVtX2RyaXZlcl9yZXEoaXBhX3FtaSk7XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjQ0ODpcdHJldCA9IHFtaV9zZW5kX3JlcXVlc3QocW1pLCBcdTAwMjZpcGFfcW1pLVx1MDAzZW1vZGVtX3NxLCBcdTAwMjZ0eG4sXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTQ0OS1cdFx0XHQgICAgICAgSVBBX1FNSV9JTklUX0RSSVZFUiwgSVBBX1FNSV9JTklUX0RSSVZFUl9SRVFfU1osXG4tLVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy00NTYtXHRpZiAoIXJldCkge1xuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzo0NTc6XHRcdGlwYV9xbWktXHUwMDNlbW9kZW1fcmVhZHkgPSB0cnVlO1xuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzo0NTg6XHRcdGlwYV9xbWlfcmVhZHkoaXBhX3FtaSk7XHRcdC8qIFdlIG1pZ2h0IGJlIHJlYWR5IG5vdyAqL1xuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy00NTktXHR9IGVsc2Uge1xuLS1cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM9NDcwPWlwYV9jbGllbnRfbmV3X3NlcnZlcihzdHJ1Y3QgcW1pX2hhbmRsZSAqcW1pLCBzdHJ1Y3QgcW1pX3NlcnZpY2UgKnN2YylcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtNDcxLXtcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6NDcyOlx0c3RydWN0IGlwYV9xbWkgKmlwYV9xbWk7XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTQ3My1cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6NDc0Olx0aXBhX3FtaSA9IGNvbnRhaW5lcl9vZihxbWksIHN0cnVjdCBpcGFfcW1pLCBjbGllbnRfaGFuZGxlKTtcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtNDc1LVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzo0NzY6XHRpcGFfcW1pLVx1MDAzZW1vZGVtX3NxLnNxX2ZhbWlseSA9IEFGX1FJUENSVFI7XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjQ3NzpcdGlwYV9xbWktXHUwMDNlbW9kZW1fc3Euc3Ffbm9kZSA9IHN2Yy1cdTAwM2Vub2RlO1xuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzo0Nzg6XHRpcGFfcW1pLVx1MDAzZW1vZGVtX3NxLnNxX3BvcnQgPSBzdmMtXHUwMDNlcG9ydDtcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtNDc5LVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzo0ODA6XHRzY2hlZHVsZV93b3JrKFx1MDAyNmlwYV9xbWktXHUwMDNlaW5pdF9kcml2ZXJfd29yayk7XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTQ4MS1cbi0tXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jPTQ4NT1zdGF0aWMgY29uc3Qgc3RydWN0IHFtaV9vcHMgaXBhX2NsaWVudF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy00ODktLyogU2V0IHVwIGZvciBRTUkgbWVzc2FnZSBleGNoYW5nZSAqL1xuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzo0OTA6aW50IGlwYV9xbWlfc2V0dXAoc3RydWN0IGlwYSAqaXBhKVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy00OTEte1xuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzo0OTI6XHRzdHJ1Y3QgaXBhX3FtaSAqaXBhX3FtaSA9IFx1MDAyNmlwYS1cdTAwM2VxbWk7XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTQ5My1cdGludCByZXQ7XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTQ5NC1cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6NDk1Olx0aXBhX3FtaS1cdTAwM2Vpbml0aWFsX2Jvb3QgPSB0cnVlO1xuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy00OTYtXG4tLVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy01MDItXHQgKi9cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6NTAzOlx0cmV0ID0gcW1pX2hhbmRsZV9pbml0KFx1MDAyNmlwYV9xbWktXHUwMDNlc2VydmVyX2hhbmRsZSxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtNTA0LVx0XHRcdCAgICAgIElQQV9RTUlfU0VSVkVSX01BWF9SQ1ZfU1osIFx1MDAyNmlwYV9zZXJ2ZXJfb3BzLFxuLS1cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtNTA4LVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzo1MDk6XHRyZXQgPSBxbWlfYWRkX3NlcnZlcihcdTAwMjZpcGFfcW1pLVx1MDAzZXNlcnZlcl9oYW5kbGUsIElQQV9IT1NUX1NFUlZJQ0VfU1ZDX0lELFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy01MTAtXHRcdFx0ICAgICBJUEFfSE9TVF9TVkNfVkVSUywgSVBBX0hPU1RfU0VSVklDRV9JTlNfSUQpO1xuLS1cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtNTE2LVx0ICovXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjUxNzpcdHJldCA9IHFtaV9oYW5kbGVfaW5pdChcdTAwMjZpcGFfcW1pLVx1MDAzZWNsaWVudF9oYW5kbGUsXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTUxOC1cdFx0XHQgICAgICBJUEFfUU1JX0NMSUVOVF9NQVhfUkNWX1NaLCBcdTAwMjZpcGFfY2xpZW50X29wcyxcbi0tXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTUyMy1cdC8qIFdlIG5lZWQgdGhpcyByZWFkeSBiZWZvcmUgdGhlIHNlcnZpY2UgbG9va3VwIGlzIGFkZGVkICovXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjUyNDpcdElOSVRfV09SSyhcdTAwMjZpcGFfcW1pLVx1MDAzZWluaXRfZHJpdmVyX3dvcmssIGlwYV9jbGllbnRfaW5pdF9kcml2ZXJfd29yayk7XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTUyNS1cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6NTI2Olx0cmV0ID0gcW1pX2FkZF9sb29rdXAoXHUwMDI2aXBhX3FtaS1cdTAwM2VjbGllbnRfaGFuZGxlLCBJUEFfTU9ERU1fU0VSVklDRV9TVkNfSUQsXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTUyNy1cdFx0XHQgICAgIElQQV9NT0RFTV9TVkNfVkVSUywgSVBBX01PREVNX1NFUlZJQ0VfSU5TX0lEKTtcbi0tXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTUzNC1cdC8qIFJlbGVhc2luZyB0aGUgaGFuZGxlIGFsc28gcmVtb3ZlcyByZWdpc3RlcmVkIGxvb2t1cHMgKi9cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6NTM1Olx0cW1pX2hhbmRsZV9yZWxlYXNlKFx1MDAyNmlwYV9xbWktXHUwMDNlY2xpZW50X2hhbmRsZSk7XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjUzNjpcdG1lbXNldChcdTAwMjZpcGFfcW1pLVx1MDAzZWNsaWVudF9oYW5kbGUsIDAsIHNpemVvZihpcGFfcW1pLVx1MDAzZWNsaWVudF9oYW5kbGUpKTtcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtNTM3LWVycl9zZXJ2ZXJfaGFuZGxlX3JlbGVhc2U6XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTUzOC1cdC8qIFJlbGVhc2luZyB0aGUgaGFuZGxlIGFsc28gcmVtb3ZlcyByZWdpc3RlcmVkIHNlcnZpY2VzICovXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjUzOTpcdHFtaV9oYW5kbGVfcmVsZWFzZShcdTAwMjZpcGFfcW1pLVx1MDAzZXNlcnZlcl9oYW5kbGUpO1xuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzo1NDA6XHRtZW1zZXQoXHUwMDI2aXBhX3FtaS1cdTAwM2VzZXJ2ZXJfaGFuZGxlLCAwLCBzaXplb2YoaXBhX3FtaS1cdTAwM2VzZXJ2ZXJfaGFuZGxlKSk7XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTU0MS1cbi0tXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTU0NS0vKiBUZWFyIGRvd24gSVBBIFFNSSBoYW5kbGVzICovXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjU0Njp2b2lkIGlwYV9xbWlfdGVhcmRvd24oc3RydWN0IGlwYSAqaXBhKVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy01NDcte1xuLS1cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmg9MTQ9c3RydWN0IGlwYTtcbi0tXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5oLTE2LS8qKlxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuaDoxNzogKiBzdHJ1Y3QgaXBhX3FtaSAtIFFNSSBzdGF0ZSBhc3NvY2lhdGVkIHdpdGggYW4gSVBBXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5oLTE4LSAqIEBjbGllbnRfaGFuZGxlOlx0VXNlZCB0byBzZW5kIGFuIFFNSSByZXF1ZXN0cyB0byB0aGUgbW9kZW1cbi0tXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5oLTI3LSAqL1xuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuaDoyODpzdHJ1Y3QgaXBhX3FtaSB7XG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5oLTI5LVx0c3RydWN0IHFtaV9oYW5kbGUgY2xpZW50X2hhbmRsZTtcbi0tXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5oLTQ0LS8qKlxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuaDo0NTogKiBpcGFfcW1pX3NldHVwKCkgLSBTZXQgdXAgZm9yIFFNSSBtZXNzYWdlIGV4Y2hhbmdlXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5oLTQ2LSAqIEBpcGE6XHRcdElQQSBwb2ludGVyXG4tLVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuaC01Ny0gKi9cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmg6NTg6aW50IGlwYV9xbWlfc2V0dXAoc3RydWN0IGlwYSAqaXBhKTtcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmgtNTktXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5oLTYwLS8qKlxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuaDo2MTogKiBpcGFfcW1pX3RlYXJkb3duKCkgLSBUZWFyIGRvd24gSVBBIFFNSSBoYW5kbGVzXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5oLTYyLSAqIEBpcGE6XHRcdElQQSBwb2ludGVyXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5oLTYzLSAqL1xuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuaDo2NDp2b2lkIGlwYV9xbWlfdGVhcmRvd24oc3RydWN0IGlwYSAqaXBhKTtcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmgtNjUtXG4tLVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWlfbXNnLmMtOS1cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pX21zZy5jOjEwOiNpbmNsdWRlIFwmIzM0O2lwYV9xbWlfbXNnLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pX21zZy5jLTExLVxuLS1cbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pX21zZy5oLTgtXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaV9tc2cuaDo5Oi8qID09PSBPbmx5IFwmIzM0O2lwYV9xbWlcJiMzNDsgYW5kIFwmIzM0O2lwYV9xbWlfbXNnLmNcJiMzNDsgc2hvdWxkIGluY2x1ZGUgdGhpcyBmaWxlID09PSAqL1xuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWlfbXNnLmgtMTAtXG4tLVxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWlfbXNnLmg9MjI2PXN0cnVjdCBpcGFfaW5pdF9tb2RlbV9kcml2ZXJfcnNwIHtcbi0tXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaV9tc2cuaC0yNDktXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaV9tc2cuaDoyNTA6LyogTWVzc2FnZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMgZGVmaW5lZCBpbiBcJiMzNDtpcGFfcW1pX21zZy5jXCYjMzQ7ICovXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaV9tc2cuaC0yNTEtZXh0ZXJuIGNvbnN0IHN0cnVjdCBxbWlfZWxlbV9pbmZvIGlwYV9pbmRpY2F0aW9uX3JlZ2lzdGVyX3JlcV9laVtdO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxOTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTI4MwoJCQkJCQkJb3V0cHV0OiAxMjMKCQkJCQkJCXRob3VnaHRzOiA0OTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgSVBBIERyaXZlciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLiBJdCBsb29rcyBsaWtlIGBpcGFfcW1pX3NldHVwYCBpcyBjYWxsZWQgYnkgYGlwYV9zZXR1cGAsIHdoaWNoIGlzLCBpbiB0dXJuLCBjYWxsZWQgYnkgYGlwYV9wcm9iZWAuIEFuZCBgaXBhX3Byb2JlYCBpcyB0aGUgcHJvYmUgY2FsbGJhY2sgZm9yIHRoZSAmIzM0O2lwYSYjMzQ7IHBsYXRmb3JtIGRyaXZlciwgc3BlY2lmaWNhbGx5IG1hdGNoaW5nIFF1YWxjb21tIGRldmljZSB0cmVlIG5vZGVzLiBUaGUgY3JpdGljYWwgdGhpbmcgaGVyZSBpcyB0aGF0IHRoaXMgZHJpdmVyIHJlbGllcyBvbiB2ZXJ5IHNwZWNpZmljIFF1YWxjb21tIFNvQyBoYXJkd2FyZSDigJMgdGhpbmdzIGxpa2UgY2xvY2tzLCBpbnRlcmNvbm5lY3QsIEdTSSwgc2hhcmVkIG1lbW9yeSAoU01FTSwgU01QMlApLCBhbmQgcGFydGljdWxhciByZWdpc3RlciBtYXBwaW5ncy4gVGhpcyBpc24mIzM5O3QgZ2VuZXJpYzsgaXQmIzM5O3MgcGxhdGZvcm0tc3BlY2lmaWMuCgpOb3csIGNvbnNpZGVyaW5nIHRoZSB0YXJnZXQgZW52aXJvbm1lbnQsIHdoaWNoIGlzIGFtZDY0LCBvciB0eXBpY2FsIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgYW5kIEdDRSwgdGhpcyBoYXJkd2FyZSBzaW1wbHkgKndvbiYjMzk7dCogYmUgcHJlc2VudC4gSXQgY2FuJiMzOTt0IGJlIHByb2JlZCwgYW5kIGl0JiMzOTtzIG5vdCBnb2luZyB0byBiZSBlbXVsYXRlZCBpbiBhbnkgbWVhbmluZ2Z1bCB3YXkuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0JiMzOTtzIGNvbnNpZGVyIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYS4gQXJlIHRoZXJlIGFueSBvdGhlciByZWQgZmxhZ3M/IFNwZWNpZmljYWxseSwgYXJlIHRoZXJlIGFueSBzdHJ1Y3R1cmFsIGlzc3VlcyB0aGF0IHdvdWxkIHByZXZlbnQgdXMgZnJvbSBmdXp6aW5nPwotIFdlJiMzOTtyZSBsb29raW5nIGZvciB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQuCi0gV2UmIzM5O3JlIGxvb2tpbmcgZm9yIHVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRocy4KClRoaXMgcGF0Y2gsIG1vZGlmeWluZyBgZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuY2AsIGlzIHBhcnQgb2YgdGhlIFF1YWxjb21tIElQIEFjY2VsZXJhdG9yIChJUEEpIGRyaXZlci4gSXQmIzM5O3MgY2xlYXJseSB0aWVkIHRvIFF1YWxjb21tIEFSTSBTb0NzIGFuZCByZXF1aXJlcyB0aGF0IGRlZGljYXRlZCBoYXJkd2FyZSBhbmQgZGV2aWNlIHRyZWUgYmluZGluZ3MgdG8gZXZlbiBsb2FkLiBUaGVyZSBpcyBhYnNvbHV0ZWx5IG5vIHdheSB0aGlzIGRyaXZlciBjYW4gYmUgcHJvYmVkIG9yIGV4ZWN1dGUgaW4gb3VyIHN0YW5kYXJkIGFtZDY0IFFFTVUvR0NFIHRlc3RpbmcgZW52aXJvbm1lbnQuIFRoZSBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSwgd2hpY2ggY29uZmlybXMgdGhpcy4KClRoZXJlZm9yZSwgdGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLgoKSGVyZSYjMzk7cyB0aGUgZGF0YSBmb3IgdGhlIGBzZXQtcmVzdWx0c2AgY2FsbDoKCiogICBgV29ydGhGdXp6aW5nYDogYGZhbHNlYAoqICAgYFJlYXNvbmluZ2A6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBkcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jYCBpbiB0aGUgUXVhbGNvbW0gSVAgQWNjZWxlcmF0b3IgKElQQSkgZHJpdmVyLiBUaGlzIGlzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBzcGVjaWZpYyBRdWFsY29tbSBBUk0gU29DcyByZXF1aXJpbmcgZGVkaWNhdGVkIGhhcmR3YXJlIChtb2RlbSwgaW50ZXJjb25uZWN0LCBHU0ksIFNNRU0sIFNNUDJQKSBhbmQgZGV2aWNlIHRyZWUgYmluZGluZ3MsIHdoaWNoIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQgb3IgcHJvYmVkIGluIHN0YW5kYXJkIHg4Ni9hbWQ2NCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLiBBcyBzdWNoLCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDsKKiAgIGBFbmFibGVDb25maWdzYDogYFtdYAoqICAgYEZvY3VzU3ltYm9sc2A6IGBbXWAKCkFuZCB0aGF0JiMzOTtzIHRoYXQuIE5vdyB0byBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIGZpbmFsaXplIHRoaXMgYXNzZXNzbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTk6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBkcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jIGluIHRoZSBRdWFsY29tbSBJUCBBY2NlbGVyYXRvciAoSVBBKSBkcml2ZXIuIFRoaXMgaXMgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIFF1YWxjb21tIEFSTSBTb0NzIHJlcXVpcmluZyBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSBjb21wb25lbnRzIChHU0ksIFNNRU0sIFNNUDJQLCBpbnRlcmNvbm5lY3RzKSBhbmQgZGV2aWNlIHRyZWUgZGVzY3JpcHRpb25zLiBJdCBjYW5ub3QgYmUgcHJvYmVkIG9yIGV4ZWN1dGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0Ugb24gYW1kNjQpLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYyBpbiB0aGUgUXVhbGNvbW0gSVAgQWNjZWxlcmF0b3IgKElQQSkgZHJpdmVyLiBUaGlzIGlzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBRdWFsY29tbSBBUk0gU29DcyByZXF1aXJpbmcgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgY29tcG9uZW50cyAoR1NJLCBTTUVNLCBTTVAyUCwgaW50ZXJjb25uZWN0cykgYW5kIGRldmljZSB0cmVlIGRlc2NyaXB0aW9ucy4gSXQgY2Fubm90IGJlIHByb2JlZCBvciBleGVjdXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFIG9uIGFtZDY0KSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDE5OjU2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxOTo1NTo0NC41NDk1NTI5M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2NDc1MjY1Njc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYyBpbiB0aGUgUXVhbGNvbW0gSVAgQWNjZWxlcmF0b3IgKElQQSkgZHJpdmVyLiBUaGlzIGlzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBRdWFsY29tbSBBUk0gU29DcyByZXF1aXJpbmcgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgY29tcG9uZW50cyAoR1NJLCBTTUVNLCBTTVAyUCwgaW50ZXJjb25uZWN0cykgYW5kIGRldmljZSB0cmVlIGRlc2NyaXB0aW9ucy4gSXQgY2Fubm90IGJlIHByb2JlZCBvciBleGVjdXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFIG9uIGFtZDY0KSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE5OjU1OjQ0LjU0OTU1OTAzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTAwNTU4MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4MGQ1Y2YyODQ3YWY3M2VjYjgyNWE2MWM2NmM2MWI5NTZjZTA2Zjc0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDEwIDE5OjU1OjQzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMgYi9kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jXFxuaW5kZXggZDc3MWYzYTcxZjk0Zi4uYTdjYzk4YjI3ZTMzYyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jXFxuKysrIGIvZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuY1xcbkBAIC0xNjgsNiArMTY4LDE0IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcW1pX29wcyBpcGFfc2VydmVyX29wcyA9IHtcXG4gXFx0LmJ5ZVxcdFxcdD0gaXBhX3NlcnZlcl9ieWUsXFxuIH07XFxuIFxcbisvKiBUcnVlIGlmIGEgUU1JIHJlcXVlc3QgYXJyaXZlZCBmcm9tIHRoZSBtb2RlbSB3ZSBhcmUgcGFpcmVkIHdpdGggKi9cXG4rc3RhdGljIGJvb2wgaXBhX3NlcnZlcl9mcm9tX21vZGVtKGNvbnN0IHN0cnVjdCBpcGFfcW1pICppcGFfcW1pLFxcbitcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9xcnRyICpzcSlcXG4re1xcbitcXHRyZXR1cm4gc3EtXFx1MDAzZXNxX25vZGUgPT0gaXBhX3FtaS1cXHUwMDNlbW9kZW1fc3Euc3Ffbm9kZSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgICAgc3EtXFx1MDAzZXNxX3BvcnQgPT0gaXBhX3FtaS1cXHUwMDNlbW9kZW1fc3Euc3FfcG9ydDtcXG4rfVxcbitcXG4gLyogQ2FsbGJhY2sgZnVuY3Rpb24gdG8gaGFuZGxlIGFuIElORElDQVRJT05fUkVHSVNURVIgcmVxdWVzdCBtZXNzYWdlIGZyb20gdGhlXFxuICAqIG1vZGVtLiAgVGhpcyBpbmZvcm1zIHRoZSBBUCB0aGF0IHRoZSBtb2RlbSBpcyBub3cgcmVhZHkgdG8gcmVjZWl2ZSB0aGVcXG4gICogSU5JVF9DT01QTEVURSBpbmRpY2F0aW9uIG1lc3NhZ2UuXFxuQEAgLTE4NSw2ICsxOTMsMTMgQEAgc3RhdGljIHZvaWQgaXBhX3NlcnZlcl9pbmRpY2F0aW9uX3JlZ2lzdGVyKHN0cnVjdCBxbWlfaGFuZGxlICpxbWksXFxuIFxcdGlwYV9xbWkgPSBjb250YWluZXJfb2YocW1pLCBzdHJ1Y3QgaXBhX3FtaSwgc2VydmVyX2hhbmRsZSk7XFxuIFxcdGlwYSA9IGNvbnRhaW5lcl9vZihpcGFfcW1pLCBzdHJ1Y3QgaXBhLCBxbWkpO1xcbiBcXG4rXFx0aWYgKCFpcGFfc2VydmVyX2Zyb21fbW9kZW0oaXBhX3FtaSwgc3EpKSB7XFxuK1xcdFxcdGRldl93YXJuX3JhdGVsaW1pdGVkKGlwYS1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJpZ25vcmluZyBRTUkgcmVxdWVzdCBmcm9tIG5vbi1tb2RlbSBzZW5kZXIgJXU6JXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgc3EtXFx1MDAzZXNxX25vZGUsIHNxLVxcdTAwM2VzcV9wb3J0KTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbiBcXHRyc3AucnNwLnJlc3VsdCA9IFFNSV9SRVNVTFRfU1VDQ0VTU19WMDE7XFxuIFxcdHJzcC5yc3AuZXJyb3IgPSBRTUlfRVJSX05PTkVfVjAxO1xcbiBcXG5AQCAtMjE0LDYgKzIyOSwxMyBAQCBzdGF0aWMgdm9pZCBpcGFfc2VydmVyX2RyaXZlcl9pbml0X2NvbXBsZXRlKHN0cnVjdCBxbWlfaGFuZGxlICpxbWksXFxuIFxcdGlwYV9xbWkgPSBjb250YWluZXJfb2YocW1pLCBzdHJ1Y3QgaXBhX3FtaSwgc2VydmVyX2hhbmRsZSk7XFxuIFxcdGlwYSA9IGNvbnRhaW5lcl9vZihpcGFfcW1pLCBzdHJ1Y3QgaXBhLCBxbWkpO1xcbiBcXG4rXFx0aWYgKCFpcGFfc2VydmVyX2Zyb21fbW9kZW0oaXBhX3FtaSwgc3EpKSB7XFxuK1xcdFxcdGRldl93YXJuX3JhdGVsaW1pdGVkKGlwYS1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJpZ25vcmluZyBRTUkgcmVxdWVzdCBmcm9tIG5vbi1tb2RlbSBzZW5kZXIgJXU6JXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgc3EtXFx1MDAzZXNxX25vZGUsIHNxLVxcdTAwM2VzcV9wb3J0KTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbiBcXHRyc3AucnNwLnJlc3VsdCA9IFFNSV9SRVNVTFRfU1VDQ0VTU19WMDE7XFxuIFxcdHJzcC5yc3AuZXJyb3IgPSBRTUlfRVJSX05PTkVfVjAxO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6NTU6NDUuMDYwNTEwNDU4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozNTk2NDI5Mjg4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYyBpbiB0aGUgUXVhbGNvbW0gSVAgQWNjZWxlcmF0b3IgKElQQSkgZHJpdmVyLiBUaGlzIGlzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBRdWFsY29tbSBBUk0gU29DcyByZXF1aXJpbmcgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgY29tcG9uZW50cyAoR1NJLCBTTUVNLCBTTVAyUCwgaW50ZXJjb25uZWN0cykgYW5kIGRldmljZSB0cmVlIGRlc2NyaXB0aW9ucy4gSXQgY2Fubm90IGJlIHByb2JlZCBvciBleGVjdXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFIG9uIGFtZDY0KSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODBkNWNmMjg0N2FmNzNlY2I4MjVhNjFjNjZjNjFiOTU2Y2UwNmY3NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDEwIDE5OjU1OjQzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYyBiL2RyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmNcbmluZGV4IGQ3NzFmM2E3MWY5NGYuLmE3Y2M5OGIyN2UzM2MgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jXG4rKysgYi9kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jXG5AQCAtMTY4LDYgKzE2OCwxNCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHFtaV9vcHMgaXBhX3NlcnZlcl9vcHMgPSB7XG4gXHQuYnllXHRcdD0gaXBhX3NlcnZlcl9ieWUsXG4gfTtcbiBcbisvKiBUcnVlIGlmIGEgUU1JIHJlcXVlc3QgYXJyaXZlZCBmcm9tIHRoZSBtb2RlbSB3ZSBhcmUgcGFpcmVkIHdpdGggKi9cbitzdGF0aWMgYm9vbCBpcGFfc2VydmVyX2Zyb21fbW9kZW0oY29uc3Qgc3RydWN0IGlwYV9xbWkgKmlwYV9xbWksXG4rXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9xcnRyICpzcSlcbit7XG4rXHRyZXR1cm4gc3EtXHUwMDNlc3Ffbm9kZSA9PSBpcGFfcW1pLVx1MDAzZW1vZGVtX3NxLnNxX25vZGUgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgc3EtXHUwMDNlc3FfcG9ydCA9PSBpcGFfcW1pLVx1MDAzZW1vZGVtX3NxLnNxX3BvcnQ7XG4rfVxuK1xuIC8qIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGhhbmRsZSBhbiBJTkRJQ0FUSU9OX1JFR0lTVEVSIHJlcXVlc3QgbWVzc2FnZSBmcm9tIHRoZVxuICAqIG1vZGVtLiAgVGhpcyBpbmZvcm1zIHRoZSBBUCB0aGF0IHRoZSBtb2RlbSBpcyBub3cgcmVhZHkgdG8gcmVjZWl2ZSB0aGVcbiAgKiBJTklUX0NPTVBMRVRFIGluZGljYXRpb24gbWVzc2FnZS5cbkBAIC0xODUsNiArMTkzLDEzIEBAIHN0YXRpYyB2b2lkIGlwYV9zZXJ2ZXJfaW5kaWNhdGlvbl9yZWdpc3RlcihzdHJ1Y3QgcW1pX2hhbmRsZSAqcW1pLFxuIFx0aXBhX3FtaSA9IGNvbnRhaW5lcl9vZihxbWksIHN0cnVjdCBpcGFfcW1pLCBzZXJ2ZXJfaGFuZGxlKTtcbiBcdGlwYSA9IGNvbnRhaW5lcl9vZihpcGFfcW1pLCBzdHJ1Y3QgaXBhLCBxbWkpO1xuIFxuK1x0aWYgKCFpcGFfc2VydmVyX2Zyb21fbW9kZW0oaXBhX3FtaSwgc3EpKSB7XG4rXHRcdGRldl93YXJuX3JhdGVsaW1pdGVkKGlwYS1cdTAwM2VkZXYsXG4rXHRcdFx0XHQgICAgIFwiaWdub3JpbmcgUU1JIHJlcXVlc3QgZnJvbSBub24tbW9kZW0gc2VuZGVyICV1OiV1XFxuXCIsXG4rXHRcdFx0XHQgICAgIHNxLVx1MDAzZXNxX25vZGUsIHNxLVx1MDAzZXNxX3BvcnQpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4gXHRyc3AucnNwLnJlc3VsdCA9IFFNSV9SRVNVTFRfU1VDQ0VTU19WMDE7XG4gXHRyc3AucnNwLmVycm9yID0gUU1JX0VSUl9OT05FX1YwMTtcbiBcbkBAIC0yMTQsNiArMjI5LDEzIEBAIHN0YXRpYyB2b2lkIGlwYV9zZXJ2ZXJfZHJpdmVyX2luaXRfY29tcGxldGUoc3RydWN0IHFtaV9oYW5kbGUgKnFtaSxcbiBcdGlwYV9xbWkgPSBjb250YWluZXJfb2YocW1pLCBzdHJ1Y3QgaXBhX3FtaSwgc2VydmVyX2hhbmRsZSk7XG4gXHRpcGEgPSBjb250YWluZXJfb2YoaXBhX3FtaSwgc3RydWN0IGlwYSwgcW1pKTtcbiBcbitcdGlmICghaXBhX3NlcnZlcl9mcm9tX21vZGVtKGlwYV9xbWksIHNxKSkge1xuK1x0XHRkZXZfd2Fybl9yYXRlbGltaXRlZChpcGEtXHUwMDNlZGV2LFxuK1x0XHRcdFx0ICAgICBcImlnbm9yaW5nIFFNSSByZXF1ZXN0IGZyb20gbm9uLW1vZGVtIHNlbmRlciAldToldVxcblwiLFxuK1x0XHRcdFx0ICAgICBzcS1cdTAwM2VzcV9ub2RlLCBzcS1cdTAwM2VzcV9wb3J0KTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuIFx0cnNwLnJzcC5yZXN1bHQgPSBRTUlfUkVTVUxUX1NVQ0NFU1NfVjAxO1xuIFx0cnNwLnJzcC5lcnJvciA9IFFNSV9FUlJfTk9ORV9WMDE7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxOTo1NTo0NS4wNjA1MTE1NzhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MTUwNTg5NjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgcmV2aWV3aW5nIHRoaXMgcGF0Y2g6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgSVBBIFFNSSBEcml2ZXIgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gd2UgaGF2ZSBhIHBhdGNoIHRvdWNoaW5nIGBkcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbiBhbmQgdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCB0aGUgUXVhbGNvbW0gSVBBIChJUCBBY2NlbGVyYXRvcikgaXMgZG9pbmcgYW5kIGhvdyBpdCdzIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBzeXN0ZW0uXG5cbkknbGwgc3RhcnQgd2l0aCBhIHF1aWNrIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCBvbiB0aGF0IHNwZWNpZmljIGZpbGUuIFVuZGVyc3RhbmRpbmcgdGhlIGZ1bmRhbWVudGFsIHN0cnVjdHVyZSBhbmQgaW50ZXJhY3Rpb25zIHdpbGwgYmUga2V5LiBGcm9tIHRoZXJlLCBJJ2xsIG5lZWQgdG8ga25vdyB0aGUgY29uZmlndXJhdGlvbi4gSSdsbCByZWFkIHRoZSBgS2NvbmZpZ2AgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgKGBkcml2ZXJzL25ldC9pcGEvS2NvbmZpZ2ApIG9yIHF1aWNrbHkgYGdyZXBgIGZvciBgUUNPTV9JUEFgIOKAkyBzb21ldGhpbmcgdG8gZ2V0IG1lIHRvIHRoZSBuZWNlc3NhcnkgS2NvbmZpZyBlbnRyaWVzLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMuIEdyYXNwaW5nIHRoZSBjb25maWd1cmF0aW9uIGlzIGVzc2VudGlhbCBiZWZvcmUgZXhhbWluaW5nIHRoZSBzcGVjaWZpYyBjb2RlIGNoYW5nZXMgaW4gdGhlIHBhdGNoIGl0c2VsZi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM5NywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6NTU6NTAuMjExMTExNDI5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0ODkwMTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBRQ09NX0lQQVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9pcGFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvaXBhL0tjb25maWc6MTpjb25maWcgUUNPTV9JUEFcXG5kcml2ZXJzL25ldC9pcGEvS2NvbmZpZy0yLVxcdHRyaXN0YXRlIFxcXCJRdWFsY29tbSBJUEEgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6NTU6NTAuMjY2MDA4MDAxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE5MjExNDA3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgSVBBIEtjb25maWcqKlxuXG5BbHJpZ2h0LCBsZXQncyBwdWxsIHVwIGBkcml2ZXJzL25ldC9pcGEvS2NvbmZpZ2AuIFRpbWUgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBJUEEgKEludGVncmF0ZWQgUGFja2V0IEFjY2VsZXJhdG9yKSBkcml2ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHRoaW5nIGlzIHN0cnVjdHVyZWQuIEknbSBsb29raW5nIGZvciB0aGUga2V5IGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzOiB0aGUgb25lcyB0aGF0IGVuYWJsZSBvciBkaXNhYmxlIGNvcmUgZmVhdHVyZXMsIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgc3Vic3lzdGVtcywgYW5kIGFueSBkZXBlbmRlbmNpZXMgb24gcGxhdGZvcm0tc3BlY2lmaWMgc2V0dGluZ3MuIEknbGwgYmUgc2VhcmNoaW5nIGZvciBhbnkgdHJpY2t5IGxvZ2ljIGluIHRoZSBkZXBlbmRlbmN5IGV4cHJlc3Npb25zLCB0aGUga2luZCB0aGF0IG1pZ2h0IGludHJvZHVjZSBzdWJ0bGUgY29tcGF0aWJpbGl0eSBpc3N1ZXMgb3IgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgZmVhdHVyZXMgcmVsYXRlZCB0byB2YXJpb3VzIHBhY2tldCBwcm9jZXNzaW5nIHN0YWdlcywgb2ZmbG9hZCBjYXBhYmlsaXRpZXMgKFRDUC9JUCwgTDIpLCBhbmQgbWF5YmUgc29tZSBRb1Mgb3IgZmxvdyBjb250cm9sIG1lY2hhbmlzbXMuIEkgYWxzbyBleHBlY3QgdG8gY2hlY2sgdGhhdCBlYWNoIG9wdGlvbiBmb2xsb3dzIHRoZSBlc3RhYmxpc2hlZCBrZXJuZWwgY29kaW5nIGNvbnZlbnRpb25zIGZvciBLY29uZmlnIGZpbGVzLiBUaGVuIEkgY2FuIHVzZSB0aGlzIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSBhIG1lbnRhbCBtYXAgb2YgdGhpcyBkcml2ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3ODQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxOTo1NTo1Mi40NTgxMjUyMjNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9pcGEvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdGNvbmZpZyBRQ09NX0lQQVxcbiAgIDI6XFx0XFx0dHJpc3RhdGUgXFxcIlF1YWxjb21tIElQQSBzdXBwb3J0XFxcIlxcbiAgIDM6XFx0XFx0ZGVwZW5kcyBvbiBORVQgXFx1MDAyNlxcdTAwMjYgUUNPTV9TTUVNXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfUUNPTSB8fCBDT01QSUxFX1RFU1RcXG4gICA1OlxcdFxcdGRlcGVuZHMgb24gSU5URVJDT05ORUNUXFxuICAgNjpcXHRcXHRkZXBlbmRzIG9uIFFDT01fUlBST0NfQ09NTU9OIHx8IChRQ09NX1JQUk9DX0NPTU1PTj1uIFxcdTAwMjZcXHUwMDI2IENPTVBJTEVfVEVTVClcXG4gICA3OlxcdFxcdGRlcGVuZHMgb24gUUNPTV9BT1NTX1FNUCB8fCBRQ09NX0FPU1NfUU1QPW5cXG4gICA4OlxcdFxcdHNlbGVjdCBRQ09NX01EVF9MT0FERVJcXG4gICA5OlxcdFxcdHNlbGVjdCBRQ09NX1BBU1xcbiAgMTA6XFx0XFx0c2VsZWN0IFFDT01fUU1JX0hFTFBFUlNcXG4gIDExOlxcdFxcdGhlbHBcXG4gIDEyOlxcdFxcdCAgQ2hvb3NlIFkgb3IgTSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIFF1YWxjb21tXFxuICAxMzpcXHRcXHQgIElQIEFjY2VsZXJhdG9yIChJUEEpLCBhIGhhcmR3YXJlIGJsb2NrIHByZXNlbnQgaW4gc29tZVxcbiAgMTQ6XFx0XFx0ICBRdWFsY29tbSBTb0NzLiAgVGhlIElQQSBpcyBhIHByb2dyYW1tYWJsZSBwcm90b2NvbCBwcm9jZXNzb3JcXG4gIDE1OlxcdFxcdCAgdGhhdCBpcyBjYXBhYmxlIG9mIGdlbmVyaWMgaGFyZHdhcmUgaGFuZGxpbmcgb2YgSVAgcGFja2V0cyxcXG4gIDE2OlxcdFxcdCAgaW5jbHVkaW5nIHJvdXRpbmcsIGZpbHRlcmluZywgYW5kIE5BVC4gIEN1cnJlbnRseSB0aGUgSVBBXFxuICAxNzpcXHRcXHQgIGRyaXZlciBzdXBwb3J0cyBvbmx5IGJhc2ljIHRyYW5zcG9ydCBvZiBuZXR3b3JrIHRyYWZmaWNcXG4gIDE4OlxcdFxcdCAgYmV0d2VlbiB0aGUgQVAgYW5kIG1vZGVtLlxcbiAgMTk6XFx0XFxuICAyMDpcXHRcXHQgIE5vdGUgdGhhdCBpZiBzZWxlY3RlZCwgdGhlIHNlbGVjdGlvbiB0eXBlIG11c3QgbWF0Y2ggdGhhdFxcbiAgMjE6XFx0XFx0ICBvZiBRQ09NX1E2VjVfQ09NTU9OIChZIG9yIE0pLlxcbiAgMjI6XFx0XFxuICAyMzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE5OjU1OjUyLjQ1ODIzMzI0M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU0Mzg1NDQ5MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBRdWFsY29tbSBJUEEgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYFFDT01fSVBBYCBoZXJlLiBSaWdodCwgdGhhdCdzIHRoZSBRdWFsY29tbSBJUEEgc3VwcG9ydCDigJMgZXNzZW50aWFsbHkgdGhlIGhhcmR3YXJlIGJsb2NrLCB0aGUgSVBBLCBvbiB0aGVpciBTbmFwZHJhZ29uIG9yIEFSTSBTb0NzLiBUaGUgcmVhbCBxdWVzdGlvbiBJJ20gZ3JhcHBsaW5nIHdpdGggaXMgd2hldGhlciB0aGlzIGlzIGEgKnBsYXRmb3JtKiBkcml2ZXIuIFRoYXQncyB0aGUgY3J1eCBvZiBpdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBpdHMgcHJvYmluZyBwcm9jZXNzLiBEb2VzIGl0IHJlcXVpcmUgc29tZSB2ZXJ5IHNwZWNpZmljIGhhcmR3YXJlIGNoYXJhY3RlcmlzdGljcyBvciBkZXBlbmRlbmNpZXMgdGllZCB0byBhIHBhcnRpY3VsYXIgU29DPyBUaGUgcGxhdGZvcm0gZHJpdmVyIHBhcmFkaWdtIG9mdGVuIGhpbmdlcyBvbiB0aGF0IGxldmVsIG9mIGhhcmR3YXJlIHNwZWNpZmljaXR5LCBzbyBJJ2xsIG5lZWQgdG8gZGlnIGludG8gaG93IHRoZSBwcm9iZSBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZC4gRG9lcyBpdCwgZm9yIGluc3RhbmNlLCBleHBsaWNpdGx5IHVzZSBgcGxhdGZvcm1fZHJpdmVyX3Byb2JlYCBvciBzb21ldGhpbmcgc2ltaWxhcj8gVGhhdCdsbCBiZSB0aGUga2V5IGluZGljYXRvciB0byBuYWlsIHRoaXMgZG93bi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQwNywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6NTU6NTcuODk2NzgyMTg2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2NTAyODYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vZHVsZV9wbGF0Zm9ybV9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvaXBhXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2lwYS9pcGFfbWFpbi5jPTEwMTE9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaXBhX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfbWFpbi5jLTEwMjItXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9tYWluLmM6MTAyMzptb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGlwYV9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfbWFpbi5jLTEwMjQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE5OjU1OjU3Ljk1MzI5MzEzOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3MTIxMTM5NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgSVBBIERyaXZlcioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgaXNzdWUsIHNvIGxldCdzIHN0YXJ0IHdpdGggYGRyaXZlcnMvbmV0L2lwYS9pcGFfbWFpbi5jYC4gTXkgZ3V0IHRlbGxzIG1lIHNvbWV0aGluZydzIG9mZiBpbiB0aGF0IGFyZWEuIE5vdywgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGlzIHN5c3RlbSwgbGluZSAxMDAwIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHBsYWNlIHRvIHN0YXJ0LCBhbmQgc3BlY2lmaWNhbGx5IEkgc2hvdWxkIHBheSBhdHRlbnRpb24gdG8gdGhlIHByb2JlIGZ1bmN0aW9uLiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZyB0aGVyZS4uLiBJIG5lZWQgdG8gZ2V0IGludG8gdGhlIGRldGFpbHMgdG8gZmlndXJlIHRoaXMgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzczLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6NTU6NTkuNjY1NDExMjkyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTEzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9pcGEvaXBhX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5ODAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5ODA6XFx0XFx0XFx0XFx0cG1fcnVudGltZV9wdXRfbm9pZGxlKGRldik7XFxuIDk4MTpcXHRcXHRcXHRcXHRyZXR1cm47XFxuIDk4MjpcXHRcXHRcXHR9XFxuIDk4MzpcXHRcXG4gOTg0OlxcdFxcdFxcdGlwYV90ZWFyZG93bihpcGEpO1xcbiA5ODU6XFx0XFx0fVxcbiA5ODY6XFx0XFxuIDk4NzpcXHRcXHRpcGFfZGVjb25maWcoaXBhKTtcXG4gOTg4OlxcdG91dF9wb3dlcl9wdXQ6XFxuIDk4OTpcXHRcXHRwbV9ydW50aW1lX3B1dF9ub2lkbGUoZGV2KTtcXG4gOTkwOlxcdFxcdGlwYV9zbXAycF9leGl0KGlwYSk7XFxuIDk5MTpcXHRcXHRpcGFfdGFibGVfZXhpdChpcGEpO1xcbiA5OTI6XFx0XFx0aXBhX2VuZHBvaW50X2V4aXQoaXBhKTtcXG4gOTkzOlxcdFxcdGdzaV9leGl0KFxcdTAwMjZpcGEtXFx1MDAzZWdzaSk7XFxuIDk5NDpcXHRcXHRpcGFfbWVtX2V4aXQoaXBhKTtcXG4gOTk1OlxcdFxcdGlwYV9yZWdfZXhpdChpcGEpO1xcbiA5OTY6XFx0XFx0a2ZyZWUoaXBhKTtcXG4gOTk3OlxcdFxcdGlwYV9wb3dlcl9leGl0KHBvd2VyKTtcXG4gOTk4OlxcdFxcdGlwYV9pbnRlcnJ1cHRfZXhpdChpbnRlcnJ1cHQpO1xcbiA5OTk6XFx0XFxuMTAwMDpcXHRcXHRkZXZfaW5mbyhkZXYsIFxcXCJJUEEgZHJpdmVyIHJlbW92ZWRcXFwiKTtcXG4xMDAxOlxcdH1cXG4xMDAyOlxcdFxcbjEwMDM6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKmlwYV9hdHRyaWJ1dGVfZ3JvdXBzW10gPSB7XFxuMTAwNDpcXHRcXHRcXHUwMDI2aXBhX2F0dHJpYnV0ZV9ncm91cCxcXG4xMDA1OlxcdFxcdFxcdTAwMjZpcGFfZmVhdHVyZV9hdHRyaWJ1dGVfZ3JvdXAsXFxuMTAwNjpcXHRcXHRcXHUwMDI2aXBhX2VuZHBvaW50X2lkX2F0dHJpYnV0ZV9ncm91cCxcXG4xMDA3OlxcdFxcdFxcdTAwMjZpcGFfbW9kZW1fYXR0cmlidXRlX2dyb3VwLFxcbjEwMDg6XFx0XFx0TlVMTCxcXG4xMDA5OlxcdH07XFxuMTAxMDpcXHRcXG4xMDExOlxcdHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGlwYV9kcml2ZXIgPSB7XFxuMTAxMjpcXHRcXHQucHJvYmVcXHRcXHQ9IGlwYV9wcm9iZSxcXG4xMDEzOlxcdFxcdC5yZW1vdmVcXHRcXHQ9IGlwYV9yZW1vdmUsXFxuMTAxNDpcXHRcXHQuc2h1dGRvd25cXHQ9IGlwYV9yZW1vdmUsXFxuMTAxNTpcXHRcXHQuZHJpdmVyXFx0PSB7XFxuMTAxNjpcXHRcXHRcXHQubmFtZVxcdFxcdD0gXFxcImlwYVxcXCIsXFxuMTAxNzpcXHRcXHRcXHQucG1cXHRcXHQ9IFxcdTAwMjZpcGFfcG1fb3BzLFxcbjEwMTg6XFx0XFx0XFx0Lm9mX21hdGNoX3RhYmxlXFx0PSBpcGFfbWF0Y2gsXFxuMTAxOTpcXHRcXHRcXHQuZGV2X2dyb3Vwc1xcdD0gaXBhX2F0dHJpYnV0ZV9ncm91cHMsXFxuMTAyMDpcXHRcXHR9LFxcbjEwMjE6XFx0fTtcXG4xMDIyOlxcdFxcbjEwMjM6XFx0bW9kdWxlX3BsYXRmb3JtX2RyaXZlcihpcGFfZHJpdmVyKTtcXG4xMDI0OlxcdFxcbjEwMjU6XFx0TU9EVUxFX0xJQ0VOU0UoXFxcIkdQTCB2MlxcXCIpO1xcbjEwMjY6XFx0TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJRdWFsY29tbSBJUCBBY2NlbGVyYXRvciBkZXZpY2UgZHJpdmVyXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE5OjU1OjU5LjY2NTUyNzEwM1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDk3NzAzMDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKklQQSBQcm9iZSBDaGVjayoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgSVBBIGRyaXZlcidzIHByb2Jpbmcgc2VxdWVuY2UuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIEkgc2hvdWxkIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYGlwYV9wcm9iZWAuIEkga25vdyB0aGF0J3MgdGhlIGVudHJ5IHBvaW50LCBvciBhdCBsZWFzdCBhIGNyaXRpY2FsIHBhcnQgb2YgdGhlIGluaXRpYWwgc2V0dXAsIGFuZCBJJ20gcHJldHR5IHN1cmUgSSBjYW4gZmluZCBpdCB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9pcGEvaXBhX21haW4uY2AgZmlsZS4gVGltZSB0byBjcmFjayBvcGVuIHRoYXQgY29kZSBhbmQgc2VlIHdoYXQgdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbiBhbmQgaGFyZHdhcmUgY2hlY2tzIGFyZSBkb2luZy4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgaW5pdGlhbGl6ZXMsIGRpc2NvdmVycyB0aGUgaGFyZHdhcmUsIGFuZCBob3BlZnVsbHksIEknbGwgaWRlbnRpZnkgdGhlIHBvaW50IHdoZXJlIHRoZSBlcnJvciBpcyBvY2N1cnJpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MjYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE5OjU2OjAzLjE2MzIzNDAwN1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY4NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvaXBhL2lwYV9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODUwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODUwOlxcdFxcdGlwYS1cXHUwMDNldmVyc2lvbiA9IGRhdGEtXFx1MDAzZXZlcnNpb247XFxuIDg1MTpcXHRcXHRpcGEtXFx1MDAzZW1vZGVtX3JvdXRlX2NvdW50ID0gZGF0YS1cXHUwMDNlbW9kZW1fcm91dGVfY291bnQ7XFxuIDg1MjpcXHRcXHRpbml0X2NvbXBsZXRpb24oXFx1MDAyNmlwYS1cXHUwMDNlY29tcGxldGlvbik7XFxuIDg1MzpcXHRcXG4gODU0OlxcdFxcdHJldCA9IGlwYV9yZWdfaW5pdChpcGEsIHBkZXYpO1xcbiA4NTU6XFx0XFx0aWYgKHJldClcXG4gODU2OlxcdFxcdFxcdGdvdG8gZXJyX2tmcmVlX2lwYTtcXG4gODU3OlxcdFxcbiA4NTg6XFx0XFx0cmV0ID0gaXBhX21lbV9pbml0KGlwYSwgcGRldiwgZGF0YS1cXHUwMDNlbWVtX2RhdGEpO1xcbiA4NTk6XFx0XFx0aWYgKHJldClcXG4gODYwOlxcdFxcdFxcdGdvdG8gZXJyX3JlZ19leGl0O1xcbiA4NjE6XFx0XFxuIDg2MjpcXHRcXHRyZXQgPSBpcGFfY21kX2luaXQoaXBhKTtcXG4gODYzOlxcdFxcdGlmIChyZXQpXFxuIDg2NDpcXHRcXHRcXHRnb3RvIGVycl9tZW1fZXhpdDtcXG4gODY1OlxcdFxcbiA4NjY6XFx0XFx0cmV0ID0gZ3NpX2luaXQoXFx1MDAyNmlwYS1cXHUwMDNlZ3NpLCBwZGV2LCBpcGEtXFx1MDAzZXZlcnNpb24sIGRhdGEtXFx1MDAzZWVuZHBvaW50X2NvdW50LFxcbiA4Njc6XFx0XFx0XFx0ICAgICAgIGRhdGEtXFx1MDAzZWVuZHBvaW50X2RhdGEpO1xcbiA4Njg6XFx0XFx0aWYgKHJldClcXG4gODY5OlxcdFxcdFxcdGdvdG8gZXJyX21lbV9leGl0O1xcbiA4NzA6XFx0XFxuIDg3MTpcXHRcXHQvKiBSZXN1bHQgaXMgYSBub24temVybyBtYXNrIG9mIGVuZHBvaW50cyB0aGF0IHN1cHBvcnQgZmlsdGVyaW5nICovXFxuIDg3MjpcXHRcXHRyZXQgPSBpcGFfZW5kcG9pbnRfaW5pdChpcGEsIGRhdGEtXFx1MDAzZWVuZHBvaW50X2NvdW50LCBkYXRhLVxcdTAwM2VlbmRwb2ludF9kYXRhKTtcXG4gODczOlxcdFxcdGlmIChyZXQpXFxuIDg3NDpcXHRcXHRcXHRnb3RvIGVycl9nc2lfZXhpdDtcXG4gODc1OlxcdFxcbiA4NzY6XFx0XFx0cmV0ID0gaXBhX3RhYmxlX2luaXQoaXBhKTtcXG4gODc3OlxcdFxcdGlmIChyZXQpXFxuIDg3ODpcXHRcXHRcXHRnb3RvIGVycl9lbmRwb2ludF9leGl0O1xcbiA4Nzk6XFx0XFxuIDg4MDpcXHRcXHRyZXQgPSBpcGFfc21wMnBfaW5pdChpcGEsIHBkZXYsIGxvYWRlciA9PSBJUEFfTE9BREVSX01PREVNKTtcXG4gODgxOlxcdFxcdGlmIChyZXQpXFxuIDg4MjpcXHRcXHRcXHRnb3RvIGVycl90YWJsZV9leGl0O1xcbiA4ODM6XFx0XFxuIDg4NDpcXHRcXHQvKiBQb3dlciBuZWVkcyB0byBiZSBhY3RpdmUgZm9yIGNvbmZpZyBhbmQgc2V0dXAgKi9cXG4gODg1OlxcdFxcdHJldCA9IHBtX3J1bnRpbWVfZ2V0X3N5bmMoZGV2KTtcXG4gODg2OlxcdFxcdGlmIChXQVJOX09OKHJldCBcXHUwMDNjIDApKVxcbiA4ODc6XFx0XFx0XFx0Z290byBlcnJfcG93ZXJfcHV0O1xcbiA4ODg6XFx0XFxuIDg4OTpcXHRcXHRyZXQgPSBpcGFfY29uZmlnKGlwYSwgZGF0YSk7XFxuIDg5MDpcXHRcXHRpZiAocmV0KVxcbiA4OTE6XFx0XFx0XFx0Z290byBlcnJfcG93ZXJfcHV0O1xcbiA4OTI6XFx0XFxuIDg5MzpcXHRcXHRkZXZfaW5mbyhkZXYsIFxcXCJJUEEgZHJpdmVyIGluaXRpYWxpemVkXFxcIik7XFxuIDg5NDpcXHRcXG4gODk1OlxcdFxcdC8qIElmIHRoZSBtb2RlbSBpcyBsb2FkaW5nIEdTSSBmaXJtd2FyZSwgaXQgd2lsbCB0cmlnZ2VyIGEgY2FsbCB0b1xcbiA4OTY6XFx0XFx0ICogaXBhX3NldHVwKCkgd2hlbiBpdCBoYXMgZmluaXNoZWQuICBJbiB0aGF0IGNhc2Ugd2UncmUgZG9uZSBoZXJlLlxcbiA4OTc6XFx0XFx0ICovXFxuIDg5ODpcXHRcXHRpZiAobG9hZGVyID09IElQQV9MT0FERVJfTU9ERU0pXFxuIDg5OTpcXHRcXHRcXHRnb3RvIGRvbmU7XFxuIDkwMDpcXHRcXG4gOTAxOlxcdFxcdGlmIChsb2FkZXIgPT0gSVBBX0xPQURFUl9TRUxGKSB7XFxuIDkwMjpcXHRcXHRcXHQvKiBUaGUgQVAgaXMgbG9hZGluZyBHU0kgZmlybXdhcmU7IGRvIHNvIG5vdyAqL1xcbiA5MDM6XFx0XFx0XFx0cmV0ID0gaXBhX2Zpcm13YXJlX2xvYWQoZGV2KTtcXG4gOTA0OlxcdFxcdFxcdGlmIChyZXQpXFxuIDkwNTpcXHRcXHRcXHRcXHRnb3RvIGVycl9kZWNvbmZpZztcXG4gOTA2OlxcdFxcdH0gLyogT3RoZXJ3aXNlIGxvYWRlciA9PSBJUEFfTE9BREVSX1NLSVAgKi9cXG4gOTA3OlxcdFxcbiA5MDg6XFx0XFx0LyogR1NJIGZpcm13YXJlIGlzIGxvYWRlZDsgcHJvY2VlZCB0byBzZXR1cCAqL1xcbiA5MDk6XFx0XFx0cmV0ID0gaXBhX3NldHVwKGlwYSk7XFxuIDkxMDpcXHRcXHRpZiAocmV0KVxcbiA5MTE6XFx0XFx0XFx0Z290byBlcnJfZGVjb25maWc7XFxuIDkxMjpcXHRkb25lOlxcbiA5MTM6XFx0XFx0KHZvaWQpcG1fcnVudGltZV9wdXRfYXV0b3N1c3BlbmQoZGV2KTtcXG4gOTE0OlxcdFxcbiA5MTU6XFx0XFx0cmV0dXJuIDA7XFxuIDkxNjpcXHRcXG4gOTE3OlxcdGVycl9kZWNvbmZpZzpcXG4gOTE4OlxcdFxcdGlwYV9kZWNvbmZpZyhpcGEpO1xcbiA5MTk6XFx0ZXJyX3Bvd2VyX3B1dDpcXG4gOTIwOlxcdFxcdHBtX3J1bnRpbWVfcHV0X25vaWRsZShkZXYpO1xcbiA5MjE6XFx0XFx0aXBhX3NtcDJwX2V4aXQoaXBhKTtcXG4gOTIyOlxcdGVycl90YWJsZV9leGl0OlxcbiA5MjM6XFx0XFx0aXBhX3RhYmxlX2V4aXQoaXBhKTtcXG4gOTI0OlxcdGVycl9lbmRwb2ludF9leGl0OlxcbiA5MjU6XFx0XFx0aXBhX2VuZHBvaW50X2V4aXQoaXBhKTtcXG4gOTI2OlxcdGVycl9nc2lfZXhpdDpcXG4gOTI3OlxcdFxcdGdzaV9leGl0KFxcdTAwMjZpcGEtXFx1MDAzZWdzaSk7XFxuIDkyODpcXHRlcnJfbWVtX2V4aXQ6XFxuIDkyOTpcXHRcXHRpcGFfbWVtX2V4aXQoaXBhKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6NTY6MDMuMTYzMzY0MTM3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3NjU5MDk0OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJUEEgTWF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgaXBhX21hdGNoYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHRoaW5nIGlzIG1hdGNoaW5nIG9uLiBBaCwgaXQgbG9va3MgbGlrZSBpdCdzIGNvbm5lY3RlZCB0byB0aGUgXCJPRlwiIOKAkyBEZXZpY2UgVHJlZS4gVGhhdCdzIGEgY3J1Y2lhbCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gaG93IHRoaXMgZnVuY3Rpb24gd29ya3MsIHNvIEknbGwgZ28gYWhlYWQgYW5kIGRvIGEgZ3JlcCBmb3IgYGlwYV9tYXRjaGAgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvaXBhYCBkaXJlY3RvcnkuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIGl0cyB1c2FnZSB3aXRoaW4gdGhlIElQQSBkcml2ZXIgY29udGV4dC4gVGhpcyBzaG91bGQgaGVscCBtZSBiZXR0ZXIgdW5kZXJzdGFuZCBpdHMgb3ZlcmFsbCByb2xlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDE4LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxOTo1NjowNC45MjkyNzYzNDhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MTA3NDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwYV9tYXRjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9pcGFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvaXBhL2lwYV9tYWluLmM9NTg2PXN0YXRpYyBpbnQgaXBhX2Zpcm13YXJlX2xvYWQoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9tYWluLmMtNjQxLVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfbWFpbi5jOjY0MjpzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBpcGFfbWF0Y2hbXSA9IHtcXG5kcml2ZXJzL25ldC9pcGEvaXBhX21haW4uYy02NDMtXFx0e1xcbi0tXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9tYWluLmMtNjg0LX07XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9tYWluLmM6Njg1Ok1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGlwYV9tYXRjaCk7XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9tYWluLmMtNjg2LVxcbi0tXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9tYWluLmM9MTAxMT1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBpcGFfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9tYWluLmMtMTAxNy1cXHRcXHQucG1cXHRcXHQ9IFxcdTAwMjZpcGFfcG1fb3BzLFxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfbWFpbi5jOjEwMTg6XFx0XFx0Lm9mX21hdGNoX3RhYmxlXFx0PSBpcGFfbWF0Y2gsXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9tYWluLmMtMTAxOS1cXHRcXHQuZGV2X2dyb3Vwc1xcdD0gaXBhX2F0dHJpYnV0ZV9ncm91cHMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE5OjU2OjA0Ljk4NDM5MDI3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY5ODQ1NzkyMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUXVhbGNvbW0gSVBBIERyaXZlciBmb3IgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIGBpcGFfbWF0Y2hgIGlzIGVzc2VudGlhbGx5IGEgY29tcGF0aWJpbGl0eSBsaXN0IGZvciBRdWFsY29tbSBTeXN0ZW0tb24tQ2hpcHMgKFNvQ3MpLiBXZSdyZSB0YWxraW5nIGFib3V0IGVudHJpZXMgbGlrZSBgcWNvbSxzZG04NDUtaXBhYCBhbmQgYHFjb20sc204MjUwLWlwYWAsIHNvIGl0J3MgY2xlYXJseSB0YXJnZXRpbmcgc3BlY2lmaWMgUXVhbGNvbW0gaGFyZHdhcmUuIEFuZCB0aGlzIGlzIGFsbCBydW5uaW5nIG9uIGBhbWQ2NGAsIHdoaWNoIGlzIG91ciB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG5Ob3csIGBRQ09NX0lQQWAgaXMgY29uZGl0aW9uYWwuIEl0IGhpbmdlcyBvbiBgQVJDSF9RQ09NIHx8IENPTVBJTEVfVEVTVGAsIGFzIHdlbGwgYXMgYFFDT01fU01FTWAgYW5kIGBJTlRFUkNPTk5FQ1RgLiBUaGF0IHRlbGxzIG1lIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHBsYXRmb3JtIGRyaXZlciwgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvciB0aGVzZSBRdWFsY29tbSBTb0NzLiBJdCBuZWVkcyBzcGVjaWZpYyBRdWFsY29tbSBJUCBBY2NlbGVyYXRvciBoYXJkd2FyZSBhbmQgcmVsaWVzIG9uIGRldmljZSB0cmVlIGJpbmRpbmdzLCB3aGljaCBpcyBjcnVjaWFsLlxuXG5UaGUgY2F0Y2gsIGFuZCB0aGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcgZm9yIGZ1enppbmcsIGlzIHRoYXQgZXZlbiBpZiB3ZSBmb3JjZS1jb21waWxlIHRoaXMgb24geDg2IHVzaW5nIGBDT01QSUxFX1RFU1RgLCB0aGUgZHJpdmVyICpzdGlsbCogZGVtYW5kcyB0aGUgcHJlc2VuY2Ugb2YgRFQgbm9kZXMgYW5kIHRoZSBhc3NvY2lhdGVkIHBoeXNpY2FsIGhhcmR3YXJlLiBXZSdyZSB0YWxraW5nIGFib3V0IHRoaW5ncyBsaWtlIG1vZGVtLCBpbnRlcmNvbm5lY3QsIHNoYXJlZCBtZW1vcnksIGFuZCBjbG9jayBkb21haW5zLiBTdGFuZGFyZCBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZSAoR0NFKSBjb25maWd1cmF0aW9ucyDigJMgZXZlbiBvbiBhbWQ2NC94ODZfNjQg4oCTIGFyZW4ndCBnb2luZyB0byBoYXZlIHRoaXMgUXVhbGNvbW0gSVBBIGhhcmR3YXJlIHByZXNlbnQgb3IgYXZhaWxhYmxlIHRvIGJlIHByb2JlZC5cblxuTm93LCBsZXQncyBjb25uZWN0IHRoaXMgdG8gdGhlIGluc3RydWN0aW9ucy4gU2VjdGlvbiAyIGxheXMgb3V0IG5lZ2F0aXZlIGNyaXRlcmlhIOKAkyBzY2VuYXJpb3Mgd2hlcmUgd2Ugc2hvdWxkIGF2b2lkIGZ1enppbmcuIEl0IG1lbnRpb25zIFwic3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlXCIgbGlrZSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgQVNJQ3Mgb3IgUENJZSBjYXJkcy4gU291bmRzIGZhbWlsaWFyLCBkb2Vzbid0IGl0PyBUaGUgSVBBIGRyaXZlciwgZGVwZW5kZW50IG9uIHRoaXMgUXVhbGNvbW0gaGFyZHdhcmUsIGZpdHMgdGhhdCBiaWxsLiBUaGUgaW5zdHJ1Y3Rpb25zIGFsc28gY2FsbCBvdXQgdW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzIGxpa2UgZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyB0aGF0IGFyZSB0cmlnZ2VyZWQgYnkgcGh5c2ljYWwgaG90LXVucGx1ZyBldmVudHMgb3IgbWFudWFsIGRyaXZlciB1bmJpbmRpbmcuIFRoaXMgaXMgbGlrZWx5IGFuIGlzc3VlIGhlcmUgdG9vLlxuXG5UaGUgY3JpdGljYWwgcXVlc3Rpb24gaXMgdGhpczogaXMgdGhlcmUgKmFueSogdmlydHVhbGl6ZWQsIGVtdWxhdGVkLCBvciBtb2NrZWQgd2F5IHRvIGFjY2VzcyB0aGUgSVBBIGZ1bmN0aW9uYWxpdHk/IEFyZSB0aGVyZSBhbnkgb3B0aW9ucyBha2luIHRvIGEgVVNCIGdhZGdldCwgYSBuZXRsaW5rIGludGVyZmFjZSwgb3IgYSBtb2NrIGRldmljZSB0aGF0IGNvdWxkIHNpbXVsYXRlIG9yIGFsbG93IGEgZGVncmVlIG9mIGludGVyYWN0aW9uIHdpdGggSVBBPyBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgd2hhdCBpcyBpbiBgZHJpdmVycy9uZXQvaXBhYCBhbmQgc2VlIGlmIGFueXRoaW5nIGxpa2UgdGhpcyBleGlzdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1MjUsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTk6NTY6MTEuOTY4OTcyNzk2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImNvZGVzZWFyY2gtZGlyLWluZGV4IiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxMjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRGlyXCI6IFwiZHJpdmVycy9uZXQvaXBhXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIkZpbGVzXCI6IFtcbiAgICBcImdzaS5jXCIsXG4gICAgXCJnc2kuaFwiLFxuICAgIFwiZ3NpX3ByaXZhdGUuaFwiLFxuICAgIFwiZ3NpX3JlZy5jXCIsXG4gICAgXCJnc2lfcmVnLmhcIixcbiAgICBcImdzaV90cmFucy5jXCIsXG4gICAgXCJnc2lfdHJhbnMuaFwiLFxuICAgIFwiaXBhLmhcIixcbiAgICBcImlwYV9jbWQuY1wiLFxuICAgIFwiaXBhX2NtZC5oXCIsXG4gICAgXCJpcGFfZGF0YS5oXCIsXG4gICAgXCJpcGFfZW5kcG9pbnQuY1wiLFxuICAgIFwiaXBhX2VuZHBvaW50LmhcIixcbiAgICBcImlwYV9nc2kuY1wiLFxuICAgIFwiaXBhX2dzaS5oXCIsXG4gICAgXCJpcGFfaW50ZXJydXB0LmNcIixcbiAgICBcImlwYV9pbnRlcnJ1cHQuaFwiLFxuICAgIFwiaXBhX21haW4uY1wiLFxuICAgIFwiaXBhX21lbS5jXCIsXG4gICAgXCJpcGFfbWVtLmhcIixcbiAgICBcImlwYV9tb2RlbS5jXCIsXG4gICAgXCJpcGFfbW9kZW0uaFwiLFxuICAgIFwiaXBhX3Bvd2VyLmNcIixcbiAgICBcImlwYV9wb3dlci5oXCIsXG4gICAgXCJpcGFfcW1pLmNcIixcbiAgICBcImlwYV9xbWkuaFwiLFxuICAgIFwiaXBhX3FtaV9tc2cuY1wiLFxuICAgIFwiaXBhX3FtaV9tc2cuaFwiLFxuICAgIFwiaXBhX3JlZy5jXCIsXG4gICAgXCJpcGFfcmVnLmhcIixcbiAgICBcImlwYV9yZXNvdXJjZS5jXCIsXG4gICAgXCJpcGFfcmVzb3VyY2UuaFwiLFxuICAgIFwiaXBhX3NtcDJwLmNcIixcbiAgICBcImlwYV9zbXAycC5oXCIsXG4gICAgXCJpcGFfc3lzZnMuY1wiLFxuICAgIFwiaXBhX3N5c2ZzLmhcIixcbiAgICBcImlwYV90YWJsZS5jXCIsXG4gICAgXCJpcGFfdGFibGUuaFwiLFxuICAgIFwiaXBhX3VjLmNcIixcbiAgICBcImlwYV91Yy5oXCIsXG4gICAgXCJpcGFfdmVyc2lvbi5oXCIsXG4gICAgXCJyZWcuaFwiXG4gIF0sXG4gIFwiU3ViZGlyc1wiOiBbXG4gICAgXCJkYXRhXCIsXG4gICAgXCJyZWdcIlxuICBdXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxOTo1NjoxMS45NjkwNzYyOTZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjYwNzUyMjYwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipFeGFtaW5pbmcgdGhlIEluaXRpYWxpemF0aW9uIG9mIGBpcGFfcW1pLmNgKipcblxuT2theSwgdGltZSB0byBkaWcgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgaXBhX3FtaS5jYCBpcyBpbml0aWFsaXplZC4gS25vd2luZyB0aGlzIGlzIGNydWNpYWwgZm9yIFsqKmluc2VydCB5b3VyIGZpZWxkL2NvbnRleHQgaGVyZSwgZS5nLiwgZGVidWdnaW5nIGEgc3BlY2lmaWMgaXNzdWUsIHVuZGVyc3RhbmRpbmcgYSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVjaywgcHJlcGFyaW5nIGZvciBhIGNvZGUgcmV2aWV3IHJlbGF0ZWQgdG8gdGhlIG1vZGVtIGludGVyZmFjZSwgZXRjLioqLiBUaGlzIGxldmVsIG9mIGluaXRpYWxpemF0aW9uIGltcGFjdHMgdGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIG1vZGVtIGludGVyZmFjZV0uIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIG9yIHN0cnVjdHVyZXMgaW52b2x2ZWQuIExldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIHRoZSBlbnRyeSBwb2ludCBvciBhbnkgaW5pdGlhbGl6YXRpb24gcm91dGluZXMgd2l0aGluIHRoZSBmaWxlIGl0c2VsZi4gSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBsaWtlIGNvbnN0cnVjdG9yIGF0dHJpYnV0ZXMsIG1vZHVsZSByZWdpc3RyYXRpb24sIG9yIGFueSBjYWxscyByZWxhdGVkIHRvIHJlc291cmNlIGFsbG9jYXRpb24gdGhhdCB3b3VsZCBzdWdnZXN0IGluaXRpYWxpemF0aW9uIGlzIGhhcHBlbmluZy4gVW5kZXJzdGFuZGluZyB0aGlzIHdpbGwgYmUgdGhlIGZvdW5kYXRpb24gZm9yIGRlYnVnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODgzNCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiY29kZXNlYXJjaC1kaXItaW5kZXgiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxOTo1NjoxNC41NzY2MDE3MDlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4OTEzNjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwYV9xbWlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvaXBhXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2lwYS9NYWtlZmlsZT0xND1pcGEteVxcdFxcdFxcdDo9XFx0aXBhX21haW4ubyBpcGFfcG93ZXIubyBpcGFfcmVnLm8gaXBhX21lbS5vIFxcXFxcXG4tLVxcbmRyaXZlcnMvbmV0L2lwYS9NYWtlZmlsZS0xNy1cXHRcXHRcXHRcXHRpcGFfZW5kcG9pbnQubyBpcGFfY21kLm8gaXBhX21vZGVtLm8gXFxcXFxcbmRyaXZlcnMvbmV0L2lwYS9NYWtlZmlsZToxODpcXHRcXHRcXHRcXHRpcGFfcmVzb3VyY2UubyBpcGFfcW1pLm8gaXBhX3FtaV9tc2cubyBcXFxcXFxuZHJpdmVycy9uZXQvaXBhL01ha2VmaWxlLTE5LVxcdFxcdFxcdFxcdGlwYV9zeXNmcy5vXFxuLS1cXG5kcml2ZXJzL25ldC9pcGEvaXBhLmgtMTQtI2luY2x1ZGUgXFxcImlwYV9tZW0uaFxcXCJcXG5kcml2ZXJzL25ldC9pcGEvaXBhLmg6MTU6I2luY2x1ZGUgXFxcImlwYV9xbWkuaFxcXCJcXG5kcml2ZXJzL25ldC9pcGEvaXBhLmgtMTYtI2luY2x1ZGUgXFxcImlwYV92ZXJzaW9uLmhcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9pcGEvaXBhLmg9NzM9c3RydWN0IGlwYSB7XFxuLS1cXG5kcml2ZXJzL25ldC9pcGEvaXBhLmgtMTMwLVxcdHN0cnVjdCBuZXRfZGV2aWNlICptb2RlbV9uZXRkZXY7XFxuZHJpdmVycy9uZXQvaXBhL2lwYS5oOjEzMTpcXHRzdHJ1Y3QgaXBhX3FtaSBxbWk7XFxuZHJpdmVycy9uZXQvaXBhL2lwYS5oLTEzMi19O1xcbi0tXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9tYWluLmM9MTExPWludCBpcGFfc2V0dXAoc3RydWN0IGlwYSAqaXBhKVxcbi0tXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9tYWluLmMtMTUwLVxcdC8qIFdlJ3JlIGFsbCBzZXQuICBOb3cgcHJlcGFyZSBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBtb2RlbSAqL1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfbWFpbi5jOjE1MTpcXHRyZXQgPSBpcGFfcW1pX3NldHVwKGlwYSk7XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9tYWluLmMtMTUyLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9pcGEvaXBhX21haW4uYz0xNzc9c3RhdGljIHZvaWQgaXBhX3RlYXJkb3duKHN0cnVjdCBpcGEgKmlwYSlcXG4tLVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfbWFpbi5jLTE4NC1cXG5kcml2ZXJzL25ldC9pcGEvaXBhX21haW4uYzoxODU6XFx0aXBhX3FtaV90ZWFyZG93bihpcGEpO1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfbWFpbi5jLTE4Ni1cXHRpcGFfZW5kcG9pbnRfZGVmYXVsdF9yb3V0ZV9jbGVhcihpcGEpO1xcbi0tXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xMy0jaW5jbHVkZSBcXFwiaXBhX21vZGVtLmhcXFwiXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoxNDojaW5jbHVkZSBcXFwiaXBhX3FtaV9tc2cuaFxcXCJcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTE1LVxcbi0tXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy03OS0vKiBTZW5kIGFuIElOSVRfQ09NUExFVEUgaW5kaWNhdGlvbiBtZXNzYWdlIHRvIHRoZSBtb2RlbSAqL1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6ODA6c3RhdGljIHZvaWQgaXBhX3NlcnZlcl9pbml0X2NvbXBsZXRlKHN0cnVjdCBpcGFfcW1pICppcGFfcW1pKVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtODEte1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6ODI6XFx0c3RydWN0IGlwYSAqaXBhID0gY29udGFpbmVyX29mKGlwYV9xbWksIHN0cnVjdCBpcGEsIHFtaSk7XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzo4MzpcXHRzdHJ1Y3QgcW1pX2hhbmRsZSAqcW1pID0gXFx1MDAyNmlwYV9xbWktXFx1MDAzZXNlcnZlcl9oYW5kbGU7XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzo4NDpcXHRzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqc3EgPSBcXHUwMDI2aXBhX3FtaS1cXHUwMDNlbW9kZW1fc3E7XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy04NS1cXHRzdHJ1Y3QgaXBhX2luaXRfY29tcGxldGVfaW5kIGluZCA9IHsgfTtcXG4tLVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtOTctXFx0ZWxzZVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6OTg6XFx0XFx0aXBhX3FtaS1cXHUwMDNlaW5kaWNhdGlvbl9zZW50ID0gdHJ1ZTtcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTk5LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMTAxLS8qIElmIHJlcXVlc3RlZCAoYW5kIG5vdCBhbHJlYWR5IHNlbnQpIHNlbmQgdGhlIElOSVRfQ09NUExFVEUgaW5kaWNhdGlvbiAqL1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6MTAyOnN0YXRpYyB2b2lkIGlwYV9xbWlfaW5kaWNhdGlvbihzdHJ1Y3QgaXBhX3FtaSAqaXBhX3FtaSlcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTEwMy17XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoxMDQ6XFx0aWYgKCFpcGFfcW1pLVxcdTAwM2VpbmRpY2F0aW9uX3JlcXVlc3RlZClcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTEwNS1cXHRcXHRyZXR1cm47XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xMDYtXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoxMDc6XFx0aWYgKGlwYV9xbWktXFx1MDAzZWluZGljYXRpb25fc2VudClcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTEwOC1cXHRcXHRyZXR1cm47XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xMDktXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoxMTA6XFx0aXBhX3NlcnZlcl9pbml0X2NvbXBsZXRlKGlwYV9xbWkpO1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMTExLX1cXG4tLVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMTIxLSAqL1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6MTIyOnN0YXRpYyB2b2lkIGlwYV9xbWlfcmVhZHkoc3RydWN0IGlwYV9xbWkgKmlwYV9xbWkpXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xMjMte1xcbi0tXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xMjctXFx0LyogV2UgYXJlbid0IHJlYWR5IHVudGlsIHRoZSBtb2RlbSBhbmQgbWljcm9jb250cm9sbGVyIGFyZSAqL1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6MTI4OlxcdGlmICghaXBhX3FtaS1cXHUwMDNlbW9kZW1fcmVhZHkgfHwgIWlwYV9xbWktXFx1MDAzZXVjX3JlYWR5KVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMTI5LVxcdFxcdHJldHVybjtcXG4tLVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMTMxLVxcdC8qIFNlbmQgdGhlIGluZGljYXRpb24gbWVzc2FnZSBpZiBpdCB3YXMgcmVxdWVzdGVkICovXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoxMzI6XFx0aXBhX3FtaV9pbmRpY2F0aW9uKGlwYV9xbWkpO1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMTMzLVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMTM0LVxcdC8qIFRoZSBpbml0aWFsIGJvb3QgcmVxdWlyZXMgdXMgdG8gc2VuZCB0aGUgaW5kaWNhdGlvbi4gKi9cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjEzNTpcXHRpZiAoaXBhX3FtaS1cXHUwMDNlaW5pdGlhbF9ib290KSB7XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoxMzY6XFx0XFx0aWYgKCFpcGFfcW1pLVxcdTAwM2VpbmRpY2F0aW9uX3NlbnQpXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xMzctXFx0XFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xMzktXFx0XFx0LyogVGhlIGluaXRpYWwgbW9kZW0gYm9vdCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5ICovXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoxNDA6XFx0XFx0aXBhX3FtaS1cXHUwMDNlaW5pdGlhbF9ib290ID0gZmFsc2U7XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xNDEtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xNDMtXFx0LyogV2UncmUgcmVhZHkuICBTdGFydCB1cCBub3JtYWwgb3BlcmF0aW9uICovXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoxNDQ6XFx0aXBhID0gY29udGFpbmVyX29mKGlwYV9xbWksIHN0cnVjdCBpcGEsIHFtaSk7XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xNDUtXFx0cmV0ID0gaXBhX21vZGVtX3N0YXJ0KGlwYSk7XFxuLS1cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jPTE1MT1zdGF0aWMgdm9pZCBpcGFfc2VydmVyX2J5ZShzdHJ1Y3QgcW1pX2hhbmRsZSAqcW1pLCB1bnNpZ25lZCBpbnQgbm9kZSlcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTE1Mi17XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoxNTM6XFx0c3RydWN0IGlwYV9xbWkgKmlwYV9xbWk7XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xNTQtXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoxNTU6XFx0aXBhX3FtaSA9IGNvbnRhaW5lcl9vZihxbWksIHN0cnVjdCBpcGFfcW1pLCBzZXJ2ZXJfaGFuZGxlKTtcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTE1Ni1cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTE1Ny1cXHQvKiBUaGUgbW9kZW0gY2xpZW50IGFuZCBzZXJ2ZXIgZ28gYXdheSBhdCB0aGUgc2FtZSB0aW1lICovXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoxNTg6XFx0bWVtc2V0KFxcdTAwMjZpcGFfcW1pLVxcdTAwM2Vtb2RlbV9zcSwgMCwgc2l6ZW9mKGlwYV9xbWktXFx1MDAzZW1vZGVtX3NxKSk7XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xNTktXFxuLS1cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTE2MS1cXHQvKiB1Y19yZWFkeSBkb2Vzbid0IGNoYW5nZSB3aGVuIG1vZGVtIHJlYm9vdHMgKi9cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjE2MjpcXHRpcGFfcW1pLVxcdTAwM2Vtb2RlbV9yZWFkeSA9IGZhbHNlO1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6MTYzOlxcdGlwYV9xbWktXFx1MDAzZWluZGljYXRpb25fcmVxdWVzdGVkID0gZmFsc2U7XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoxNjQ6XFx0aXBhX3FtaS1cXHUwMDNlaW5kaWNhdGlvbl9zZW50ID0gZmFsc2U7XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xNjUtfVxcbi0tXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYz0xNjc9c3RhdGljIGNvbnN0IHN0cnVjdCBxbWlfb3BzIGlwYV9zZXJ2ZXJfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xNzEtLyogVHJ1ZSBpZiBhIFFNSSByZXF1ZXN0IGFycml2ZWQgZnJvbSB0aGUgbW9kZW0gd2UgYXJlIHBhaXJlZCB3aXRoICovXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoxNzI6c3RhdGljIGJvb2wgaXBhX3NlcnZlcl9mcm9tX21vZGVtKGNvbnN0IHN0cnVjdCBpcGFfcW1pICppcGFfcW1pLFxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMTczLVxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IHNvY2thZGRyX3FydHIgKnNxKVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMTc0LXtcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjE3NTpcXHRyZXR1cm4gc3EtXFx1MDAzZXNxX25vZGUgPT0gaXBhX3FtaS1cXHUwMDNlbW9kZW1fc3Euc3Ffbm9kZSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6MTc2OlxcdCAgICAgICBzcS1cXHUwMDNlc3FfcG9ydCA9PSBpcGFfcW1pLVxcdTAwM2Vtb2RlbV9zcS5zcV9wb3J0O1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMTc3LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM9MTgzPXN0YXRpYyB2b2lkIGlwYV9zZXJ2ZXJfaW5kaWNhdGlvbl9yZWdpc3RlcihzdHJ1Y3QgcW1pX2hhbmRsZSAqcW1pLFxcbi0tXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xODgtXFx0c3RydWN0IGlwYV9pbmRpY2F0aW9uX3JlZ2lzdGVyX3JzcCByc3AgPSB7IH07XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoxODk6XFx0c3RydWN0IGlwYV9xbWkgKmlwYV9xbWk7XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xOTAtXFx0c3RydWN0IGlwYSAqaXBhO1xcbi0tXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0xOTItXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoxOTM6XFx0aXBhX3FtaSA9IGNvbnRhaW5lcl9vZihxbWksIHN0cnVjdCBpcGFfcW1pLCBzZXJ2ZXJfaGFuZGxlKTtcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjE5NDpcXHRpcGEgPSBjb250YWluZXJfb2YoaXBhX3FtaSwgc3RydWN0IGlwYSwgcW1pKTtcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTE5NS1cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjE5NjpcXHRpZiAoIWlwYV9zZXJ2ZXJfZnJvbV9tb2RlbShpcGFfcW1pLCBzcSkpIHtcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTE5Ny1cXHRcXHRkZXZfd2Fybl9yYXRlbGltaXRlZChpcGEtXFx1MDAzZWRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMjA5LVxcdGlmICghcmV0KSB7XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoyMTA6XFx0XFx0aXBhX3FtaS1cXHUwMDNlaW5kaWNhdGlvbl9yZXF1ZXN0ZWQgPSB0cnVlO1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6MjExOlxcdFxcdGlwYV9xbWlfcmVhZHkoaXBhX3FtaSk7XFx0XFx0LyogV2UgbWlnaHQgYmUgcmVhZHkgbm93ICovXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0yMTItXFx0fSBlbHNlIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM9MjE5PXN0YXRpYyB2b2lkIGlwYV9zZXJ2ZXJfZHJpdmVyX2luaXRfY29tcGxldGUoc3RydWN0IHFtaV9oYW5kbGUgKnFtaSxcXG4tLVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMjI0LVxcdHN0cnVjdCBpcGFfZHJpdmVyX2luaXRfY29tcGxldGVfcnNwIHJzcCA9IHsgfTtcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjIyNTpcXHRzdHJ1Y3QgaXBhX3FtaSAqaXBhX3FtaTtcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTIyNi1cXHRzdHJ1Y3QgaXBhICppcGE7XFxuLS1cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTIyOC1cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjIyOTpcXHRpcGFfcW1pID0gY29udGFpbmVyX29mKHFtaSwgc3RydWN0IGlwYV9xbWksIHNlcnZlcl9oYW5kbGUpO1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6MjMwOlxcdGlwYSA9IGNvbnRhaW5lcl9vZihpcGFfcW1pLCBzdHJ1Y3QgaXBhLCBxbWkpO1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMjMxLVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6MjMyOlxcdGlmICghaXBhX3NlcnZlcl9mcm9tX21vZGVtKGlwYV9xbWksIHNxKSkge1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMjMzLVxcdFxcdGRldl93YXJuX3JhdGVsaW1pdGVkKGlwYS1cXHUwMDNlZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0yNDUtXFx0aWYgKCFyZXQpIHtcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjI0NjpcXHRcXHRpcGFfcW1pLVxcdTAwM2V1Y19yZWFkeSA9IHRydWU7XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzoyNDc6XFx0XFx0aXBhX3FtaV9yZWFkeShpcGFfcW1pKTtcXHRcXHQvKiBXZSBtaWdodCBiZSByZWFkeSBub3cgKi9cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTI0OC1cXHR9IGVsc2Uge1xcbi0tXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYz0zMDE9c3RhdGljIGNvbnN0IHN0cnVjdCBpcGFfaW5pdF9tb2RlbV9kcml2ZXJfcmVxICpcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjMwMjppbml0X21vZGVtX2RyaXZlcl9yZXEoc3RydWN0IGlwYV9xbWkgKmlwYV9xbWkpXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy0zMDMte1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6MzA0OlxcdHN0cnVjdCBpcGEgKmlwYSA9IGNvbnRhaW5lcl9vZihpcGFfcW1pLCBzdHJ1Y3QgaXBhLCBxbWkpO1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtMzA1LVxcdHUzMiBtb2RlbV9yb3V0ZV9jb3VudCA9IGlwYS1cXHUwMDNlbW9kZW1fcm91dGVfY291bnQ7XFxuLS1cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jPTQyMz1zdGF0aWMgdm9pZCBpcGFfY2xpZW50X2luaXRfZHJpdmVyX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy00MjYtXFx0Y29uc3Qgc3RydWN0IGlwYV9pbml0X21vZGVtX2RyaXZlcl9yZXEgKnJlcTtcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjQyNzpcXHRzdHJ1Y3QgaXBhX3FtaSAqaXBhX3FtaTtcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTQyOC1cXHRzdHJ1Y3QgcW1pX2hhbmRsZSAqcW1pO1xcbi0tXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy00MzMtXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzo0MzQ6XFx0aXBhX3FtaSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXBhX3FtaSwgaW5pdF9kcml2ZXJfd29yayk7XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzo0MzU6XFx0cW1pID0gXFx1MDAyNmlwYV9xbWktXFx1MDAzZWNsaWVudF9oYW5kbGU7XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy00MzYtXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzo0Mzc6XFx0aXBhID0gY29udGFpbmVyX29mKGlwYV9xbWksIHN0cnVjdCBpcGEsIHFtaSk7XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy00MzgtXFx0ZGV2ID0gaXBhLVxcdTAwM2VkZXY7XFxuLS1cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTQ0Ni1cXHQvKiBTZW5kIHRoZSByZXF1ZXN0LCBhbmQgaWYgc3VjY2Vzc2Z1bCB3YWl0IGZvciBpdHMgcmVzcG9uc2UgKi9cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjQ0NzpcXHRyZXEgPSBpbml0X21vZGVtX2RyaXZlcl9yZXEoaXBhX3FtaSk7XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzo0NDg6XFx0cmV0ID0gcW1pX3NlbmRfcmVxdWVzdChxbWksIFxcdTAwMjZpcGFfcW1pLVxcdTAwM2Vtb2RlbV9zcSwgXFx1MDAyNnR4bixcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTQ0OS1cXHRcXHRcXHQgICAgICAgSVBBX1FNSV9JTklUX0RSSVZFUiwgSVBBX1FNSV9JTklUX0RSSVZFUl9SRVFfU1osXFxuLS1cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTQ1Ni1cXHRpZiAoIXJldCkge1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6NDU3OlxcdFxcdGlwYV9xbWktXFx1MDAzZW1vZGVtX3JlYWR5ID0gdHJ1ZTtcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjQ1ODpcXHRcXHRpcGFfcW1pX3JlYWR5KGlwYV9xbWkpO1xcdFxcdC8qIFdlIG1pZ2h0IGJlIHJlYWR5IG5vdyAqL1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtNDU5LVxcdH0gZWxzZSB7XFxuLS1cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jPTQ3MD1pcGFfY2xpZW50X25ld19zZXJ2ZXIoc3RydWN0IHFtaV9oYW5kbGUgKnFtaSwgc3RydWN0IHFtaV9zZXJ2aWNlICpzdmMpXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy00NzEte1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6NDcyOlxcdHN0cnVjdCBpcGFfcW1pICppcGFfcW1pO1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtNDczLVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6NDc0OlxcdGlwYV9xbWkgPSBjb250YWluZXJfb2YocW1pLCBzdHJ1Y3QgaXBhX3FtaSwgY2xpZW50X2hhbmRsZSk7XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy00NzUtXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzo0NzY6XFx0aXBhX3FtaS1cXHUwMDNlbW9kZW1fc3Euc3FfZmFtaWx5ID0gQUZfUUlQQ1JUUjtcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjQ3NzpcXHRpcGFfcW1pLVxcdTAwM2Vtb2RlbV9zcS5zcV9ub2RlID0gc3ZjLVxcdTAwM2Vub2RlO1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6NDc4OlxcdGlwYV9xbWktXFx1MDAzZW1vZGVtX3NxLnNxX3BvcnQgPSBzdmMtXFx1MDAzZXBvcnQ7XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy00NzktXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzo0ODA6XFx0c2NoZWR1bGVfd29yayhcXHUwMDI2aXBhX3FtaS1cXHUwMDNlaW5pdF9kcml2ZXJfd29yayk7XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy00ODEtXFxuLS1cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jPTQ4NT1zdGF0aWMgY29uc3Qgc3RydWN0IHFtaV9vcHMgaXBhX2NsaWVudF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTQ4OS0vKiBTZXQgdXAgZm9yIFFNSSBtZXNzYWdlIGV4Y2hhbmdlICovXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzo0OTA6aW50IGlwYV9xbWlfc2V0dXAoc3RydWN0IGlwYSAqaXBhKVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtNDkxLXtcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjQ5MjpcXHRzdHJ1Y3QgaXBhX3FtaSAqaXBhX3FtaSA9IFxcdTAwMjZpcGEtXFx1MDAzZXFtaTtcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTQ5My1cXHRpbnQgcmV0O1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtNDk0LVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6NDk1OlxcdGlwYV9xbWktXFx1MDAzZWluaXRpYWxfYm9vdCA9IHRydWU7XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy00OTYtXFxuLS1cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTUwMi1cXHQgKi9cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjUwMzpcXHRyZXQgPSBxbWlfaGFuZGxlX2luaXQoXFx1MDAyNmlwYV9xbWktXFx1MDAzZXNlcnZlcl9oYW5kbGUsXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy01MDQtXFx0XFx0XFx0ICAgICAgSVBBX1FNSV9TRVJWRVJfTUFYX1JDVl9TWiwgXFx1MDAyNmlwYV9zZXJ2ZXJfb3BzLFxcbi0tXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy01MDgtXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzo1MDk6XFx0cmV0ID0gcW1pX2FkZF9zZXJ2ZXIoXFx1MDAyNmlwYV9xbWktXFx1MDAzZXNlcnZlcl9oYW5kbGUsIElQQV9IT1NUX1NFUlZJQ0VfU1ZDX0lELFxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtNTEwLVxcdFxcdFxcdCAgICAgSVBBX0hPU1RfU1ZDX1ZFUlMsIElQQV9IT1NUX1NFUlZJQ0VfSU5TX0lEKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtNTE2LVxcdCAqL1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6NTE3OlxcdHJldCA9IHFtaV9oYW5kbGVfaW5pdChcXHUwMDI2aXBhX3FtaS1cXHUwMDNlY2xpZW50X2hhbmRsZSxcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTUxOC1cXHRcXHRcXHQgICAgICBJUEFfUU1JX0NMSUVOVF9NQVhfUkNWX1NaLCBcXHUwMDI2aXBhX2NsaWVudF9vcHMsXFxuLS1cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTUyMy1cXHQvKiBXZSBuZWVkIHRoaXMgcmVhZHkgYmVmb3JlIHRoZSBzZXJ2aWNlIGxvb2t1cCBpcyBhZGRlZCAqL1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6NTI0OlxcdElOSVRfV09SSyhcXHUwMDI2aXBhX3FtaS1cXHUwMDNlaW5pdF9kcml2ZXJfd29yaywgaXBhX2NsaWVudF9pbml0X2RyaXZlcl93b3JrKTtcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTUyNS1cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjUyNjpcXHRyZXQgPSBxbWlfYWRkX2xvb2t1cChcXHUwMDI2aXBhX3FtaS1cXHUwMDNlY2xpZW50X2hhbmRsZSwgSVBBX01PREVNX1NFUlZJQ0VfU1ZDX0lELFxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtNTI3LVxcdFxcdFxcdCAgICAgSVBBX01PREVNX1NWQ19WRVJTLCBJUEFfTU9ERU1fU0VSVklDRV9JTlNfSUQpO1xcbi0tXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy01MzQtXFx0LyogUmVsZWFzaW5nIHRoZSBoYW5kbGUgYWxzbyByZW1vdmVzIHJlZ2lzdGVyZWQgbG9va3VwcyAqL1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6NTM1OlxcdHFtaV9oYW5kbGVfcmVsZWFzZShcXHUwMDI2aXBhX3FtaS1cXHUwMDNlY2xpZW50X2hhbmRsZSk7XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYzo1MzY6XFx0bWVtc2V0KFxcdTAwMjZpcGFfcW1pLVxcdTAwM2VjbGllbnRfaGFuZGxlLCAwLCBzaXplb2YoaXBhX3FtaS1cXHUwMDNlY2xpZW50X2hhbmRsZSkpO1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtNTM3LWVycl9zZXJ2ZXJfaGFuZGxlX3JlbGVhc2U6XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYy01MzgtXFx0LyogUmVsZWFzaW5nIHRoZSBoYW5kbGUgYWxzbyByZW1vdmVzIHJlZ2lzdGVyZWQgc2VydmljZXMgKi9cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjUzOTpcXHRxbWlfaGFuZGxlX3JlbGVhc2UoXFx1MDAyNmlwYV9xbWktXFx1MDAzZXNlcnZlcl9oYW5kbGUpO1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmM6NTQwOlxcdG1lbXNldChcXHUwMDI2aXBhX3FtaS1cXHUwMDNlc2VydmVyX2hhbmRsZSwgMCwgc2l6ZW9mKGlwYV9xbWktXFx1MDAzZXNlcnZlcl9oYW5kbGUpKTtcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jLTU0MS1cXG4tLVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtNTQ1LS8qIFRlYXIgZG93biBJUEEgUU1JIGhhbmRsZXMgKi9cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jOjU0Njp2b2lkIGlwYV9xbWlfdGVhcmRvd24oc3RydWN0IGlwYSAqaXBhKVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmMtNTQ3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmg9MTQ9c3RydWN0IGlwYTtcXG4tLVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmgtMTYtLyoqXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuaDoxNzogKiBzdHJ1Y3QgaXBhX3FtaSAtIFFNSSBzdGF0ZSBhc3NvY2lhdGVkIHdpdGggYW4gSVBBXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuaC0xOC0gKiBAY2xpZW50X2hhbmRsZTpcXHRVc2VkIHRvIHNlbmQgYW4gUU1JIHJlcXVlc3RzIHRvIHRoZSBtb2RlbVxcbi0tXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuaC0yNy0gKi9cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5oOjI4OnN0cnVjdCBpcGFfcW1pIHtcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5oLTI5LVxcdHN0cnVjdCBxbWlfaGFuZGxlIGNsaWVudF9oYW5kbGU7XFxuLS1cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5oLTQ0LS8qKlxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmg6NDU6ICogaXBhX3FtaV9zZXR1cCgpIC0gU2V0IHVwIGZvciBRTUkgbWVzc2FnZSBleGNoYW5nZVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmgtNDYtICogQGlwYTpcXHRcXHRJUEEgcG9pbnRlclxcbi0tXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuaC01Ny0gKi9cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5oOjU4OmludCBpcGFfcW1pX3NldHVwKHN0cnVjdCBpcGEgKmlwYSk7XFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuaC01OS1cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5oLTYwLS8qKlxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmg6NjE6ICogaXBhX3FtaV90ZWFyZG93bigpIC0gVGVhciBkb3duIElQQSBRTUkgaGFuZGxlc1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmgtNjItICogQGlwYTpcXHRcXHRJUEEgcG9pbnRlclxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pLmgtNjMtICovXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuaDo2NDp2b2lkIGlwYV9xbWlfdGVhcmRvd24oc3RydWN0IGlwYSAqaXBhKTtcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5oLTY1LVxcbi0tXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWlfbXNnLmMtOS1cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaV9tc2cuYzoxMDojaW5jbHVkZSBcXFwiaXBhX3FtaV9tc2cuaFxcXCJcXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaV9tc2cuYy0xMS1cXG4tLVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pX21zZy5oLTgtXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWlfbXNnLmg6OTovKiA9PT0gT25seSBcXFwiaXBhX3FtaVxcXCIgYW5kIFxcXCJpcGFfcW1pX21zZy5jXFxcIiBzaG91bGQgaW5jbHVkZSB0aGlzIGZpbGUgPT09ICovXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWlfbXNnLmgtMTAtXFxuLS1cXG5kcml2ZXJzL25ldC9pcGEvaXBhX3FtaV9tc2cuaD0yMjY9c3RydWN0IGlwYV9pbml0X21vZGVtX2RyaXZlcl9yc3Age1xcbi0tXFxuZHJpdmVycy9uZXQvaXBhL2lwYV9xbWlfbXNnLmgtMjQ5LVxcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pX21zZy5oOjI1MDovKiBNZXNzYWdlIHN0cnVjdHVyZSBkZWZpbml0aW9ucyBkZWZpbmVkIGluIFxcXCJpcGFfcW1pX21zZy5jXFxcIiAqL1xcbmRyaXZlcnMvbmV0L2lwYS9pcGFfcW1pX21zZy5oLTI1MS1leHRlcm4gY29uc3Qgc3RydWN0IHFtaV9lbGVtX2luZm8gaXBhX2luZGljYXRpb25fcmVnaXN0ZXJfcmVxX2VpW107XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE5OjU2OjE0LjYzNTUyMjIyNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2Mzg5MjM0NDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIElQQSBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIEl0IGxvb2tzIGxpa2UgYGlwYV9xbWlfc2V0dXBgIGlzIGNhbGxlZCBieSBgaXBhX3NldHVwYCwgd2hpY2ggaXMsIGluIHR1cm4sIGNhbGxlZCBieSBgaXBhX3Byb2JlYC4gQW5kIGBpcGFfcHJvYmVgIGlzIHRoZSBwcm9iZSBjYWxsYmFjayBmb3IgdGhlIFwiaXBhXCIgcGxhdGZvcm0gZHJpdmVyLCBzcGVjaWZpY2FsbHkgbWF0Y2hpbmcgUXVhbGNvbW0gZGV2aWNlIHRyZWUgbm9kZXMuIFRoZSBjcml0aWNhbCB0aGluZyBoZXJlIGlzIHRoYXQgdGhpcyBkcml2ZXIgcmVsaWVzIG9uIHZlcnkgc3BlY2lmaWMgUXVhbGNvbW0gU29DIGhhcmR3YXJlIOKAkyB0aGluZ3MgbGlrZSBjbG9ja3MsIGludGVyY29ubmVjdCwgR1NJLCBzaGFyZWQgbWVtb3J5IChTTUVNLCBTTVAyUCksIGFuZCBwYXJ0aWN1bGFyIHJlZ2lzdGVyIG1hcHBpbmdzLiBUaGlzIGlzbid0IGdlbmVyaWM7IGl0J3MgcGxhdGZvcm0tc3BlY2lmaWMuXG5cbk5vdywgY29uc2lkZXJpbmcgdGhlIHRhcmdldCBlbnZpcm9ubWVudCwgd2hpY2ggaXMgYW1kNjQsIG9yIHR5cGljYWwgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBhbmQgR0NFLCB0aGlzIGhhcmR3YXJlIHNpbXBseSAqd29uJ3QqIGJlIHByZXNlbnQuIEl0IGNhbid0IGJlIHByb2JlZCwgYW5kIGl0J3Mgbm90IGdvaW5nIHRvIGJlIGVtdWxhdGVkIGluIGFueSBtZWFuaW5nZnVsIHdheS5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCdzIGNvbnNpZGVyIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYS4gQXJlIHRoZXJlIGFueSBvdGhlciByZWQgZmxhZ3M/IFNwZWNpZmljYWxseSwgYXJlIHRoZXJlIGFueSBzdHJ1Y3R1cmFsIGlzc3VlcyB0aGF0IHdvdWxkIHByZXZlbnQgdXMgZnJvbSBmdXp6aW5nP1xuLSBXZSdyZSBsb29raW5nIGZvciB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQuXG4tIFdlJ3JlIGxvb2tpbmcgZm9yIHVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRocy5cblxuVGhpcyBwYXRjaCwgbW9kaWZ5aW5nIGBkcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jYCwgaXMgcGFydCBvZiB0aGUgUXVhbGNvbW0gSVAgQWNjZWxlcmF0b3IgKElQQSkgZHJpdmVyLiBJdCdzIGNsZWFybHkgdGllZCB0byBRdWFsY29tbSBBUk0gU29DcyBhbmQgcmVxdWlyZXMgdGhhdCBkZWRpY2F0ZWQgaGFyZHdhcmUgYW5kIGRldmljZSB0cmVlIGJpbmRpbmdzIHRvIGV2ZW4gbG9hZC4gVGhlcmUgaXMgYWJzb2x1dGVseSBubyB3YXkgdGhpcyBkcml2ZXIgY2FuIGJlIHByb2JlZCBvciBleGVjdXRlIGluIG91ciBzdGFuZGFyZCBhbWQ2NCBRRU1VL0dDRSB0ZXN0aW5nIGVudmlyb25tZW50LiBUaGUgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUsIHdoaWNoIGNvbmZpcm1zIHRoaXMuXG5cblRoZXJlZm9yZSwgdGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLlxuXG5IZXJlJ3MgdGhlIGRhdGEgZm9yIHRoZSBgc2V0LXJlc3VsdHNgIGNhbGw6XG5cbiogICBgV29ydGhGdXp6aW5nYDogYGZhbHNlYFxuKiAgIGBSZWFzb25pbmdgOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuY2AgaW4gdGhlIFF1YWxjb21tIElQIEFjY2VsZXJhdG9yIChJUEEpIGRyaXZlci4gVGhpcyBpcyBhIHBsYXRmb3JtIGRyaXZlciBmb3Igc3BlY2lmaWMgUXVhbGNvbW0gQVJNIFNvQ3MgcmVxdWlyaW5nIGRlZGljYXRlZCBoYXJkd2FyZSAobW9kZW0sIGludGVyY29ubmVjdCwgR1NJLCBTTUVNLCBTTVAyUCkgYW5kIGRldmljZSB0cmVlIGJpbmRpbmdzLCB3aGljaCBjYW5ub3QgYmUgaW5zdGFudGlhdGVkIG9yIHByb2JlZCBpbiBzdGFuZGFyZCB4ODYvYW1kNjQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKS4gQXMgc3VjaCwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBgW11gXG4qICAgYEZvY3VzU3ltYm9sc2A6IGBbXWBcblxuQW5kIHRoYXQncyB0aGF0LiBOb3cgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIGFuZCBmaW5hbGl6ZSB0aGlzIGFzc2Vzc21lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjgzLCJPdXRwdXRUb2tlbnMiOjEyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxOTo1NjoyMS4wMjQ3NTk2ODdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBkcml2ZXJzL25ldC9pcGEvaXBhX3FtaS5jIGluIHRoZSBRdWFsY29tbSBJUCBBY2NlbGVyYXRvciAoSVBBKSBkcml2ZXIuIFRoaXMgaXMgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIFF1YWxjb21tIEFSTSBTb0NzIHJlcXVpcmluZyBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSBjb21wb25lbnRzIChHU0ksIFNNRU0sIFNNUDJQLCBpbnRlcmNvbm5lY3RzKSBhbmQgZGV2aWNlIHRyZWUgZGVzY3JpcHRpb25zLiBJdCBjYW5ub3QgYmUgcHJvYmVkIG9yIGV4ZWN1dGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0Ugb24gYW1kNjQpLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZHJpdmVycy9uZXQvaXBhL2lwYV9xbWkuYyBpbiB0aGUgUXVhbGNvbW0gSVAgQWNjZWxlcmF0b3IgKElQQSkgZHJpdmVyLiBUaGlzIGlzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBRdWFsY29tbSBBUk0gU29DcyByZXF1aXJpbmcgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgY29tcG9uZW50cyAoR1NJLCBTTUVNLCBTTVAyUCwgaW50ZXJjb25uZWN0cykgYW5kIGRldmljZSB0cmVlIGRlc2NyaXB0aW9ucy4gSXQgY2Fubm90IGJlIHByb2JlZCBvciBleGVjdXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFIG9uIGFtZDY0KSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDE5OjU2OjIxLjAyNDgwNTU4N1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7hl9d[1] Phase: Running StartedAt: 2026-09-10 19:56:31 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7hl9d[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-10 19:56:31 +0000 UTC FinishedAt: 2026-09-10 19:56:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}