Name: series-workflowlwnbj Phase: Failed StartedAt: 2026-07-22 03:32:46 +0000 UTC FinishedAt: 2026-07-22 03:55:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlwnbj[0] Phase: Succeeded StartedAt: 2026-07-22 03:32:46 +0000 UTC FinishedAt: 2026-07-22 03:55:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlwnbj[0].run-triage Phase: Succeeded StartedAt: 2026-07-22 03:32:46 +0000 UTC FinishedAt: 2026-07-22 03:55:44 +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+CgkJCTx0ZD4yMDI2LzA3LzIyIDAzOjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrYCBpcyBvbmx5IGNvbXBpbGVkIGFuZCB1c2VkIG9uIG5vbW11IGFyY2hpdGVjdHVyZXMgKGl0IGlzIGxvY2F0ZWQgaW5zaWRlIGFuIGAjaWZuZGVmIENPTkZJR19NTVVgIGJsb2NrIGluIGBmcy9leGVjLmNgKS4gU3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMgYW5kIHZpcnR1YWxpemVkIHNldHVwcyAobGlrZSB4ODZfNjQvYXJtNjQgUUVNVSBvciBHQ0UpIHJ1biB3aXRoIGBDT05GSUdfTU1VPXlgLCBtZWFuaW5nIHRoaXMgY29kZSBpcyBjb21wbGV0ZWx5IGNvbXBpbGVkIG91dCBhbmQgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDAzOjUzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNjQxMjU4MmM3NjM1YTRjMWFmYjIzNzhjMmI1YjYyNDVmYTAwM2E3MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDIyIDAzOjUzOjU3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuY1xuaW5kZXggZDU5OTNjZWRjODI5YWYuLmM3YjhmMmQ2MzY2YzQ0IDEwMDY0NFxuLS0tIGEvZnMvZXhlYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leGVjLmNcbkBAIC03NDAsNyAmIzQzOzc0MCw3IEBAIGludCB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXG4gXHRzdG9wID0gYnBybS1cdTAwM2VwIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIFx0c3AgPSAqc3BfbG9jYXRpb247XG4gXG4tXHRmb3IgKGluZGV4ID0gTUFYX0FSR19QQUdFUyAtIDE7IGluZGV4IFx1MDAzZT0gc3RvcDsgaW5kZXgtLSkge1xuJiM0MztcdGZvciAoaW5kZXggPSBNQVhfQVJHX1BBR0VTOyBpbmRleC0tIFx1MDAzZSBzdG9wOyApIHtcbiBcdFx0dW5zaWduZWQgaW50IG9mZnNldCA9IGluZGV4ID09IHN0b3AgPyBicHJtLVx1MDAzZXAgXHUwMDI2IH5QQUdFX01BU0sgOiAwO1xuIFx0XHRjaGFyICpzcmMgPSBrbWFwX2xvY2FsX3BhZ2UoYnBybS1cdTAwM2VwYWdlW2luZGV4XSkgJiM0Mzsgb2Zmc2V0O1xuIFx0XHRzcCAtPSBQQUdFX1NJWkUgLSBvZmZzZXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDM6NTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrYCBpcyBvbmx5IGNvbXBpbGVkIGFuZCB1c2VkIG9uIG5vbW11IGFyY2hpdGVjdHVyZXMgKGl0IGlzIGxvY2F0ZWQgaW5zaWRlIGFuIGAjaWZuZGVmIENPTkZJR19NTVVgIGJsb2NrIGluIGBmcy9leGVjLmNgKS4gU3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMgYW5kIHZpcnR1YWxpemVkIHNldHVwcyAobGlrZSB4ODZfNjQvYXJtNjQgUUVNVSBvciBHQ0UpIHJ1biB3aXRoIGBDT05GSUdfTU1VPXlgLCBtZWFuaW5nIHRoaXMgY29kZSBpcyBjb21wbGV0ZWx5IGNvbXBpbGVkIG91dCBhbmQgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2NDEyNTgyYzc2MzVhNGMxYWZiMjM3OGMyYjViNjI0NWZhMDAzYTcxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgMjIgMDM6NTM6NTcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9leGVjLmMgYi9mcy9leGVjLmMKaW5kZXggZDU5OTNjZWRjODI5YWYuLmM3YjhmMmQ2MzY2YzQ0IDEwMDY0NAotLS0gYS9mcy9leGVjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXhlYy5jCkBAIC03NDAsNyAmIzQzOzc0MCw3IEBAIGludCB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sCiAJc3RvcCA9IGJwcm0tJmd0O3AgJmd0OyZndDsgUEFHRV9TSElGVDsKIAlzcCA9ICpzcF9sb2NhdGlvbjsKIAotCWZvciAoaW5kZXggPSBNQVhfQVJHX1BBR0VTIC0gMTsgaW5kZXggJmd0Oz0gc3RvcDsgaW5kZXgtLSkgewomIzQzOwlmb3IgKGluZGV4ID0gTUFYX0FSR19QQUdFUzsgaW5kZXgtLSAmZ3Q7IHN0b3A7ICkgewogCQl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gaW5kZXggPT0gc3RvcCA/IGJwcm0tJmd0O3AgJmFtcDsgflBBR0VfTUFTSyA6IDA7CiAJCWNoYXIgKnNyYyA9IGttYXBfbG9jYWxfcGFnZShicHJtLSZndDtwYWdlW2luZGV4XSkgJiM0Mzsgb2Zmc2V0OwogCQlzcCAtPSBQQUdFX1NJWkUgLSBvZmZzZXQ7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDAzOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MjQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBmcy9leGVjLmNgIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyB0b3VjaGluZyBgZnMvZXhlYy5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgdHJhbnNmZXJfYXJnc190b19zdGFja2AgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlIGhlcmUgaXMgaW4gdGhlIGxvb3AgdGhhdCBoYW5kbGVzIGFyZ3VtZW50IHRyYW5zZmVyLiBQcmV2aW91c2x5LCBpdCBsb29rcyBsaWtlIHRoZSBsb29wIGNvbmRpdGlvbiB3YXMgZGVjcmVtZW50aW5nIGBpbmRleGAgKmFmdGVyKiB0aGUgY29tcGFyaXNvbiwgc3RhcnRpbmcgZnJvbSBgTUFYX0FSR19QQUdFUyAtIDFgIGFuZCBnb2luZyBkb3duIHRvIGBzdG9wYC4gVGhlIHBhdGNoIHVwZGF0ZXMgdGhpcyB0byBhIHByZS1kZWNyZW1lbnQgaW4gdGhlIGNvbXBhcmlzb24gYGZvciAoaW5kZXggPSBNQVhfQVJHX1BBR0VTOyBpbmRleC0tICZndDsgc3RvcDsgKWAuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGNoYW5nZSB3YXMgbWFkZS4gRmlyc3QsIEkmIzM5O2xsIHB1bGwgdXAgYGZzL2V4ZWMuY2AgYW5kIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgY29udGV4dCBvZiBgdHJhbnNmZXJfYXJnc190b19zdGFja2AuIExldCYjMzk7cyBzZWUgaG93IHRoaXMgY2hhbmdlIGltcGFjdHMgYXJndW1lbnQgaGFuZGxpbmcsIHRoZSBwb3RlbnRpYWwgZWRnZSBjYXNlcywgYW5kIGFueSBpbXBsaWNhdGlvbnMgb24gbWVtb3J5IGFjY2VzcyBwYXR0ZXJucyBkdXJpbmcgcHJvY2VzcyBjcmVhdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgc3VidGxlIG9mZi1ieS1vbmUgZXJyb3JzIG9yIHVuaW50ZW5kZWQgc2lkZSBlZmZlY3RzLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBjcml0aWNhbCBuYXR1cmUgb2YgYXJndW1lbnQgcGFzc2luZyBpbiBwcm9jZXNzIGV4ZWN1dGlvbi4gVGhpcyBsb29rcyBsaWtlIGEgcG90ZW50aWFsbHkgaW1wb3J0YW50IGNoYW5nZSBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdCBmdWxseSBiZWZvcmUgZXZlbiB0aGlua2luZyBhYm91dCBjb21taXR0aW5nIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDAzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyYW5zZmVyX2FyZ3NfdG9fc3RhY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leGVjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXhlYy5jPTcyNj1FWFBPUlRfU1lNQk9MKHNldHVwX2FyZ19wYWdlcyk7XG4tLVxuZnMvZXhlYy5jLTczMy0gKi9cbmZzL2V4ZWMuYzo3MzQ6aW50IHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2soc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcbmZzL2V4ZWMuYy03MzUtXHRcdFx0ICAgdW5zaWduZWQgbG9uZyAqc3BfbG9jYXRpb24pXG4tLVxuZnMvZXhlYy5jLTc1OS19XG5mcy9leGVjLmM6NzYwOkVYUE9SVF9TWU1CT0wodHJhbnNmZXJfYXJnc190b19zdGFjayk7XG5mcy9leGVjLmMtNzYxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDAzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NTkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0FoLCB0aGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgaGVhdnkgbGlmdGluZyBvZiBwYXJhbWV0ZXIgcGFzc2luZyBoYXBwZW5zLiYjMzQ7IEl0JiMzOTtzIHRoZSBwb2ludCB3aGVyZSBhcmd1bWVudHMgZ2V0IG1vdmVkIGZyb20gdGhlaXIgY2FsbGluZyBjb252ZW50aW9uIGxvY2F0aW9uIOKAkyByZWdpc3RlcnMsIHBlcmhhcHMsIG9yIG1lbW9yeSBsb2NhdGlvbnMgb24gdGhlIGNhbGxlciYjMzk7cyBzdGFjayDigJMgdG8gdGhlIGNhbGxlZSYjMzk7cyBzdGFjayBmcmFtZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXJ0ICpwZXJmZWN0bHkqLCBhcyBpdCYjMzk7cyBmdW5kYW1lbnRhbCB0byBob3cgdGhlIGVudGlyZSBzeXN0ZW0gY29tbXVuaWNhdGVzIGJldHdlZW4gZnVuY3Rpb25zLgoKSSYjMzk7bSBpbW1lZGlhdGVseSBsb29raW5nIGZvciB0aGUgdW5kZXJseWluZyBhcmNoaXRlY3R1cmUuIElzIHRoaXMgeDg2LCBBUk0sIFJJU0MtViwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSByZWdpc3RlciB1c2FnZSBhbmQgbWVtb3J5IGFkZHJlc3Npbmcgd2lsbCBiZSBkcmFzdGljYWxseSBkaWZmZXJlbnQgZGVwZW5kaW5nIG9uIHRoZSB0YXJnZXQuIEkmIzM5O20gYWxzbyBjb25zaWRlcmluZyB0aGUgY2FsbGluZyBjb252ZW50aW9uLiBJcyBpdCB0aGUgc3RhbmRhcmQgQyBjYWxsaW5nIGNvbnZlbnRpb24gKGNkZWNsLCBzdGRjYWxsLCBmYXN0Y2FsbCksIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpYWxpemVkIGxpa2UgU3lzdGVtIFYgQU1ENjQgb3IgdGhlIFdpbmRvd3MgeDY0IGNhbGxpbmcgY29udmVudGlvbj8gVGhvc2UgZGV0YWlscyBzaGFwZSBldmVyeXRoaW5nLgoKSSYjMzk7bGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgZXJyb3IgaGFuZGxpbmcuIFdoYXQgaGFwcGVucyBpZiB0aGVyZSBhcmVuJiMzOTt0IGVub3VnaCByZWdpc3RlcnMgYXZhaWxhYmxlIGZvciBhbGwgdGhlIGFyZ3VtZW50cz8gT3IgaWYgYSBwYXJ0aWN1bGFyIGFyZ3VtZW50IGV4Y2VlZHMgdGhlIHNpemUgb2YgYSByZWdpc3Rlcj8gSXMgdGhlcmUgYSBmYWxsYmFjayBtZWNoYW5pc20sIGxpa2UgcHVzaGluZyB0aGUgZXhjZXNzIG9udG8gdGhlIHN0YWNrPyBJZiB0aGVyZSYjMzk7cyBhbiBpc3N1ZSB3aXRoIHRoZSBwYXJhbWV0ZXJzIHRoZW1zZWx2ZXMsIEkgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gbWlnaHQgYmVoYXZlIG9yIGV2ZW4gdHJpZ2dlciBlcnJvcnMuCgpGdXJ0aGVybW9yZSwgSSYjMzk7bGwgYmUga2VlcGluZyBhbiBleWUgb3V0IGZvciBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcy4gQ2FuIHRoZSBhcmd1bWVudHMgYmUgbW92ZWQgbW9yZSBlZmZpY2llbnRseT8gQXJlIHRoZXJlIGFueSByZWR1bmRhbnQgbW92ZXMgdGhhdCBjYW4gYmUgZWxpbWluYXRlZD8gUGVyaGFwcyB0aGVyZSYjMzk7cyBhbiBvcHBvcnR1bml0eSB0byB1c2UgYSByZWdpc3RlciBzcGlsbC9yZXN0b3JlIHN0cmF0ZWd5LiBPciBwb3NzaWJseSwgcmVnaXN0ZXIgYWxsb2NhdGlvbiBuZWVkcyB0byBiZSBzY3J1dGluaXplZCBoZXJlIGFuZCBob3cgaXQgcGxheXMgd2l0aCB0aGlzIGZ1bmN0aW9uLgoKVWx0aW1hdGVseSwgSSB3YW50IHRvIGdyYXNwIHRoZSBlc3NlbmNlIG9mIGFyZ3VtZW50IHRyYW5zZmVyLiBEb2VzIGl0IGltcGFjdCBwZXJmb3JtYW5jZSwgYW5kIHdoZXJlIGFuZCB3aHk/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leGVjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDczMDpcdC8qXG4gNzMxOlx0ICogVHJhbnNmZXIgdGhlIHByb2dyYW0gYXJndW1lbnRzIGFuZCBlbnZpcm9ubWVudCBmcm9tIHRoZSBob2xkaW5nIHBhZ2VzXG4gNzMyOlx0ICogb250byB0aGUgc3RhY2suIFRoZSBwcm92aWRlZCBzdGFjayBwb2ludGVyIGlzIGFkanVzdGVkIGFjY29yZGluZ2x5LlxuIDczMzpcdCAqL1xuIDczNDpcdGludCB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXG4gNzM1Olx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyAqc3BfbG9jYXRpb24pXG4gNzM2Olx0e1xuIDczNzpcdFx0dW5zaWduZWQgbG9uZyBpbmRleCwgc3RvcCwgc3A7XG4gNzM4Olx0XHRpbnQgcmV0ID0gMDtcbiA3Mzk6XHRcbiA3NDA6XHRcdHN0b3AgPSBicHJtLVx1MDAzZXAgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gNzQxOlx0XHRzcCA9ICpzcF9sb2NhdGlvbjtcbiA3NDI6XHRcbiA3NDM6XHRcdGZvciAoaW5kZXggPSBNQVhfQVJHX1BBR0VTOyBpbmRleC0tIFx1MDAzZSBzdG9wOyApIHtcbiA3NDQ6XHRcdFx0dW5zaWduZWQgaW50IG9mZnNldCA9IGluZGV4ID09IHN0b3AgPyBicHJtLVx1MDAzZXAgXHUwMDI2IH5QQUdFX01BU0sgOiAwO1xuIDc0NTpcdFx0XHRjaGFyICpzcmMgPSBrbWFwX2xvY2FsX3BhZ2UoYnBybS1cdTAwM2VwYWdlW2luZGV4XSkgJiM0Mzsgb2Zmc2V0O1xuIDc0NjpcdFx0XHRzcCAtPSBQQUdFX1NJWkUgLSBvZmZzZXQ7XG4gNzQ3Olx0XHRcdGlmIChjb3B5X3RvX3VzZXIoKHZvaWQgKikgc3AsIHNyYywgUEFHRV9TSVpFIC0gb2Zmc2V0KSAhPSAwKVxuIDc0ODpcdFx0XHRcdHJldCA9IC1FRkFVTFQ7XG4gNzQ5Olx0XHRcdGt1bm1hcF9sb2NhbChzcmMpO1xuIDc1MDpcdFx0XHRpZiAocmV0KVxuIDc1MTpcdFx0XHRcdGdvdG8gb3V0O1xuIDc1MjpcdFx0fVxuIDc1MzpcdFxuIDc1NDpcdFx0YnBybS1cdTAwM2VleGVjICYjNDM7PSAqc3BfbG9jYXRpb24gLSBNQVhfQVJHX1BBR0VTICogUEFHRV9TSVpFO1xuIDc1NTpcdFx0KnNwX2xvY2F0aW9uID0gc3A7XG4gNzU2Olx0XG4gNzU3Olx0b3V0OlxuIDc1ODpcdFx0cmV0dXJuIHJldDtcbiA3NTk6XHR9XG4gNzYwOlx0RVhQT1JUX1NZTUJPTCh0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrKTtcbiA3NjE6XHRcbiA3NjI6XHQjZW5kaWYgLyogQ09ORklHX01NVSAqL1xuIDc2MzpcdFxuIDc2NDpcdC8qXG4gNzY1Olx0ICogT24gc3VjY2VzcywgY2FsbGVyIG11c3QgY2FsbCBkb19jbG9zZV9leGVjYXQoKSBvbiB0aGUgcmV0dXJuZWRcbiA3NjY6XHQgKiBzdHJ1Y3QgZmlsZSB0byBjbG9zZSBpdC5cbiA3Njc6XHQgKi9cbiA3Njg6XHRzdGF0aWMgc3RydWN0IGZpbGUgKmRvX29wZW5fZXhlY2F0KGludCBmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lLCBpbnQgZmxhZ3MpXG4gNzY5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDAzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NjQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEludGVnZXIgT3ZlcmZsb3cgaW4gYHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2tgKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgcHJldHR5IG5hc3R5IHBvdGVudGlhbCBidWcgaW4gdGhlIGB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrYCBsb29wLiBJdCBsb29rcyBsaWtlIHdlJiMzOTt2ZSBnb3QgYW4gdW5kZXJmbG93IG9yIG9mZi1ieS1vbmUgc2l0dWF0aW9uLCB3aGljaCBjb3VsZCBiZSBleHBsb2l0ZWQuIExldCYjMzk7cyBzZWUuLi4gdGhlIGBpbmRleGAgdmFyaWFibGUgaXMgYW4gYHVuc2lnbmVkIGxvbmdgLCByaWdodD8gVGhhdCYjMzk7cyBvdXIgZmlyc3QgY2x1ZS4gSWYgYHN0b3BgIGlzIHplcm8sIHRoZW4gYGluZGV4ICZndDs9IHN0b3BgIHdpbGwgKmFsd2F5cyogYmUgdHJ1ZSBpZiBgaW5kZXhgIGhhcHBlbnMgdG8gd3JhcCBhcm91bmQuCgpBaCwgSSBzZWUgaXQgbm93LiBUaGUgb3JpZ2luYWwgY29kZSBoYXMgc29tZXRoaW5nIGxpa2UgYGluZGV4ID0gTUFYX0FSR19QQUdFUyAtIDE7IGluZGV4ICZndDs9IHN0b3A7IGluZGV4LS1gLiBJZiBgc3RvcGAgaXMgemVybywgdGhlIGxvb3Agd2lsbCBjb3VudCBkb3duIHRvIHplcm8sIHRoZW4gdGhlIHBvc3QtZGVjcmVtZW50IHdpbGwgbWFrZSBpdCB3cmFwIHRvIGBVTE9OR19NQVhgLiBBbmQsIG9mIGNvdXJzZSwgYFVMT05HX01BWCAmZ3Q7PSAwYCBpcyAqYWx3YXlzKiB0cnVlISAgVGhhdCYjMzk7cyBhIHRleHRib29rIGluZmluaXRlIGxvb3Agb3IsIHdvcnNlLCBhbiBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3MganVzdCB3YWl0aW5nIHRvIGhhcHBlbi4KClRoZSBmaXgsIHVzaW5nIGBmb3IgKGluZGV4ID0gTUFYX0FSR19QQUdFUzsgaW5kZXgtLSAmZ3Q7IHN0b3A7IClgLCBzZWVtcyBjbGV2ZXIuIEl0IGNsZXZlcmx5IGZsaXBzIHRoZSBjb21wYXJpc29uIGFyb3VuZC4gV2hlbiBgaW5kZXhgIGlzIDAsIGBpbmRleC0tICZndDsgc3RvcGAgYmVjb21lcyBgMCAmZ3Q7IDBgLCB3aGljaCBpcyBmYWxzZSwgdGVybWluYXRpbmcgdGhlIGxvb3AuICBFdmVuIHdoZW4gaXQgd3JhcHMgdGhlIGNvbmRpdGlvbiB0ZXJtaW5hdGVzIHRoZSBsb29wLiBXYWl0Li4uIGl0JiMzOTtzIGBpbmRleC0tICZndDsgc3RvcGAuIFRoZSBwb3N0LWRlY3JlbWVudCBpcyBjcnVjaWFsLiBMZXQmIzM5O3MgdGhpbmsgdGhpcyB0aHJvdWdoOiBJZiBgaW5kZXhgIGlzIDEsIHRoZW4gYDEgJmd0OyAwYCBpcyB0cnVlIGFuZCBpbmRleCBiZWNvbWVzIHplcm8uIGlmIGBpbmRleGAgaXMgMCwgdGhlbiBgMCAmZ3Q7IDBgIGlzIGZhbHNlLCBhbmQgYGluZGV4YCBiZWNvbWVzIGBVTE9OR19NQVhgLCB0ZXJtaW5hdGluZyB0aGUgbG9vcC4gSSYjMzk7bSBzYXRpc2ZpZWQuIFRoaXMgcmVzb2x2ZXMgdGhlIGlzc3VlIGJ5IGNsZXZlcmx5IGludmVydGluZyB0aGUgbG9vcCBjb25kaXRpb24sIHByZXZlbnRpbmcgdGhlIHdyYXBhcm91bmQgYW5kIGVuc3VyaW5nIHRlcm1pbmF0aW9uLgoKVGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4IGZvciBhIGJ1ZyBpbiBgZnMvZXhlYy5jYC4gU2VlbXMgc29saWQuIEJ1dCwgYmVmb3JlIEkgbWFyayB0aGlzIGFzIGNvbXBsZXRlbHkgcmVzb2x2ZWQsIGxldCYjMzk7cyBtYWtlIHN1cmUgYHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2tgIGlzIGV2ZW4gKnJlYWNoYWJsZSouIFdlIGRvbiYjMzk7dCB3YW50IHRvIGZpeCBjb2RlIHRoYXQmIzM5O3MgbmV2ZXIgdXNlZCwgYWx0aG91Z2ggaXQmIzM5O3MgYWx3YXlzIGEgZ29vZCB0aGluZyB0byBmaXggaXQgaWYgaXQmIzM5O3MgdGhlcmUuIFNvLCB3aGVyZSBpcyBpdCBjYWxsZWQ/IEEgcXVpY2sgY2hlY2sgb2YgYGZzL2V4ZWMuY2AgYW5kIG90aGVyIHBvdGVudGlhbCBiaW5hcnkgZm9ybWF0cyBzaG91bGQgZG8gdGhlIHRyaWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDAzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyYW5zZmVyX2FyZ3NfdG9fc3RhY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYmluZm10X2VsZl9mZHBpYy5jPTQ5Nj1zdGF0aWMgaW50IGNyZWF0ZV9lbGZfZmRwaWNfdGFibGVzKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXG4tLVxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTUyMi1cdC8qIHN0YWNrIHRoZSBwcm9ncmFtIGFyZ3VtZW50cyBhbmQgZW52aXJvbm1lbnQgKi9cbmZzL2JpbmZtdF9lbGZfZmRwaWMuYzo1MjM6XHRpZiAodHJhbnNmZXJfYXJnc190b19zdGFjayhicHJtLCBcdTAwMjZzcCkgXHUwMDNjIDApXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtNTI0LVx0XHRyZXR1cm4gLUVGQVVMVDtcbi0tXG5mcy9iaW5mbXRfZmxhdC5jPTg1NT1zdGF0aWMgaW50IGxvYWRfZmxhdF9iaW5hcnkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbi0tXG5mcy9iaW5mbXRfZmxhdC5jLTkxMS1cdC8qIGNvcHkgdGhlIGFyZyBwYWdlcyBvbnRvIHRoZSBzdGFjayAqL1xuZnMvYmluZm10X2ZsYXQuYzo5MTI6XHRyZXMgPSB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrKGJwcm0sIFx1MDAyNmN1cnJlbnQtXHUwMDNlbW0tXHUwMDNlc3RhcnRfc3RhY2spO1xuZnMvYmluZm10X2ZsYXQuYy05MTMtXHRpZiAoIXJlcylcbi0tXG5mcy9leGVjLmM9NzI2PUVYUE9SVF9TWU1CT0woc2V0dXBfYXJnX3BhZ2VzKTtcbi0tXG5mcy9leGVjLmMtNzMzLSAqL1xuZnMvZXhlYy5jOjczNDppbnQgdHJhbnNmZXJfYXJnc190b19zdGFjayhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxuZnMvZXhlYy5jLTczNS1cdFx0XHQgICB1bnNpZ25lZCBsb25nICpzcF9sb2NhdGlvbilcbi0tXG5mcy9leGVjLmMtNzU5LX1cbmZzL2V4ZWMuYzo3NjA6RVhQT1JUX1NZTUJPTCh0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrKTtcbmZzL2V4ZWMuYy03NjEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcyOQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgQ29kZSYjMzk7cyBJbnRlcmFjdGlvbiB3aXRoIE1lbW9yeSBNYW5hZ2VtZW50KioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgZXhlY3V0YWJsZSBsb2FkaW5nLCBhbmQgSSYjMzk7dmUgaGl0IGEgc3BlY2lmaWMgZnVuY3Rpb24sIGB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrYC4gSSYjMzk7bSBzZWVpbmcgaXQmIzM5O3MgdXRpbGl6ZWQgaW4gYSBjb3VwbGUgb2YgcGxhY2VzLCBuYW1lbHkgaW4gYGZzL2JpbmZtdF9lbGZfZmRwaWMuY2AgYW5kIGBmcy9iaW5mbXRfZmxhdC5jYC4gQnV0IG5vdywgSSYjMzk7bSBub3RpY2luZyBzb21ldGhpbmcgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQgaW4gYGZzL2V4ZWMuY2A6IHRoZXJlJiMzOTtzIGEgYCNlbmRpZiAvKiBDT05GSUdfTU1VICovYCBpbW1lZGlhdGVseSBhZnRlciBgdHJhbnNmZXJfYXJnc190b19zdGFja2AuIFRoaXMgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgbXkgdGhvdWdodCBwcm9jZXNzIHRvIGZ1cnRoZXIgaW52ZXN0aWdhdGUuIEl0IHN1Z2dlc3RzIHRoYXQgdGhlcmUmIzM5O3MgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaGFwcGVuaW5nIGhlcmUsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBgdHJhbnNmZXJfYXJnc190b19zdGFja2AgaXMgYWN0dWFsbHkgKmluc2lkZSogYSBgI2lmbmRlZiBDT05GSUdfTU1VYCBibG9jay4gVGhpcyBjb3VsZCBiZSBjcnVjaWFsIHRvIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGNhbGxlZCwgYXMgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgTU1VIGlzIGEgZmFjdG9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2V4ZWMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzAwOlx0XHR2bV9mbGFnc19jbGVhcih2bWEsIFZNX1NUQUNLX0lOQ09NUExFVEVfU0VUVVApO1xuIDcwMTpcdFxuIDcwMjpcdFx0c3RhY2tfZXhwYW5kID0gMTMxMDcyVUw7IC8qIHJhbmRvbWx5IDMyKjRrIChvciAyKjY0aykgcGFnZXMgKi9cbiA3MDM6XHRcdHN0YWNrX3NpemUgPSB2bWEtXHUwMDNldm1fZW5kIC0gdm1hLVx1MDAzZXZtX3N0YXJ0O1xuIDcwNDpcdFx0LypcbiA3MDU6XHRcdCAqIEFsaWduIHRoaXMgZG93biB0byBhIHBhZ2UgYm91bmRhcnkgYXMgZXhwYW5kX3N0YWNrXG4gNzA2Olx0XHQgKiB3aWxsIGFsaWduIGl0IHVwLlxuIDcwNzpcdFx0ICovXG4gNzA4Olx0XHRybGltX3N0YWNrID0gYnBybS1cdTAwM2VybGltX3N0YWNrLnJsaW1fY3VyIFx1MDAyNiBQQUdFX01BU0s7XG4gNzA5Olx0XG4gNzEwOlx0XHRzdGFja19leHBhbmQgPSBtaW4ocmxpbV9zdGFjaywgc3RhY2tfc2l6ZSAmIzQzOyBzdGFja19leHBhbmQpO1xuIDcxMTpcdFxuIDcxMjpcdCNpZmRlZiBDT05GSUdfU1RBQ0tfR1JPV1NVUFxuIDcxMzpcdFx0c3RhY2tfYmFzZSA9IHZtYS1cdTAwM2V2bV9zdGFydCAmIzQzOyBzdGFja19leHBhbmQ7XG4gNzE0Olx0I2Vsc2VcbiA3MTU6XHRcdHN0YWNrX2Jhc2UgPSB2bWEtXHUwMDNldm1fZW5kIC0gc3RhY2tfZXhwYW5kO1xuIDcxNjpcdCNlbmRpZlxuIDcxNzpcdFx0Y3VycmVudC1cdTAwM2VtbS1cdTAwM2VzdGFydF9zdGFjayA9IGJwcm0tXHUwMDNlcDtcbiA3MTg6XHRcdHJldCA9IGV4cGFuZF9zdGFja19sb2NrZWQodm1hLCBzdGFja19iYXNlKTtcbiA3MTk6XHRcdGlmIChyZXQpXG4gNzIwOlx0XHRcdHJldCA9IC1FRkFVTFQ7XG4gNzIxOlx0XG4gNzIyOlx0b3V0X3VubG9jazpcbiA3MjM6XHRcdG1tYXBfd3JpdGVfdW5sb2NrKG1tKTtcbiA3MjQ6XHRcdHJldHVybiByZXQ7XG4gNzI1Olx0fVxuIDcyNjpcdEVYUE9SVF9TWU1CT0woc2V0dXBfYXJnX3BhZ2VzKTtcbiA3Mjc6XHRcbiA3Mjg6XHQjZWxzZVxuIDcyOTpcdFxuIDczMDpcdC8qXG4gNzMxOlx0ICogVHJhbnNmZXIgdGhlIHByb2dyYW0gYXJndW1lbnRzIGFuZCBlbnZpcm9ubWVudCBmcm9tIHRoZSBob2xkaW5nIHBhZ2VzXG4gNzMyOlx0ICogb250byB0aGUgc3RhY2suIFRoZSBwcm92aWRlZCBzdGFjayBwb2ludGVyIGlzIGFkanVzdGVkIGFjY29yZGluZ2x5LlxuIDczMzpcdCAqL1xuIDczNDpcdGludCB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXG4gNzM1Olx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyAqc3BfbG9jYXRpb24pXG4gNzM2Olx0e1xuIDczNzpcdFx0dW5zaWduZWQgbG9uZyBpbmRleCwgc3RvcCwgc3A7XG4gNzM4Olx0XHRpbnQgcmV0ID0gMDtcbiA3Mzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTY1MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIHRoZSBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbnZlc3RpZ2F0aW5nIGB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrYCYjMzk7cyBDb25kaXRpb25hbCBDb21waWxhdGlvbioqCgpBbHJpZ2h0LCB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiBJIGp1c3Qgbm90aWNlZCB0aGF0IGB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrYCBpcyBuZXN0bGVkIHdpdGhpbiB0aGUgYCNlbHNlYCBibG9jayBvZiBhbiBgI2lmZGVmIENPTkZJR19NTVVgIGRpcmVjdGl2ZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpbXBsaWVzIHRoYXQgZnVuY3Rpb24gaXMgb25seSBjb21waWxlZCBhbmQgaW5jbHVkZWQgd2hlbiBgQ09ORklHX01NVWAgaXMgKm5vdCogZGVmaW5lZC4gT2YgY291cnNlLCB0aGF0JiMzOTtzIHRoZSBuYXR1cmUgb2YgYCNlbHNlYC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uIHF1aWNrbHkuCgpJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIGp1bXAgb3ZlciB0byBgZnMvZXhlYy5jYCBhcm91bmQgbGluZSA2MDAgb3Igc28uIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIHZlcmlmeSBob3cgdGhlIGNvZGUgYmVoYXZlcyB3aGVuIHRoZSBNTVUgaXMgZGlzYWJsZWQuIEkmIzM5O20gY3VyaW91cyB0byBzZWUgaG93IGFyZ3VtZW50cyBhcmUgaGFuZGxlZCBpbiB0aGF0IHNjZW5hcmlvLiBQZXJoYXBzIHRoZXJlJiMzOTtzIGFuIGFsdGVybmF0ZSBtZWNoYW5pc20gb3Igc29tZSBvcHRpbWl6YXRpb24gaW4gcGxhY2UuIFRpbWUgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjb25kaXRpb25hbCBjb21waWxhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leGVjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYwMDpcdCAqIHRoZSBzdGFjayBpcyBvcHRpb25hbGx5IHJlbG9jYXRlZCwgYW5kIHNvbWUgZXh0cmEgc3BhY2UgaXMgYWRkZWQuXG4gNjAxOlx0ICovXG4gNjAyOlx0aW50IHNldHVwX2FyZ19wYWdlcyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxuIDYwMzpcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBzdGFja190b3AsXG4gNjA0Olx0XHRcdCAgICBpbnQgZXhlY3V0YWJsZV9zdGFjaylcbiA2MDU6XHR7XG4gNjA2Olx0XHRpbnQgcmV0O1xuIDYwNzpcdFx0dW5zaWduZWQgbG9uZyBzdGFja19zaGlmdDtcbiA2MDg6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC1cdTAwM2VtbTtcbiA2MDk6XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gYnBybS1cdTAwM2V2bWE7XG4gNjEwOlx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnByZXYgPSBOVUxMO1xuIDYxMTpcdFx0dm1fZmxhZ3NfdCB2bV9mbGFncztcbiA2MTI6XHRcdHVuc2lnbmVkIGxvbmcgc3RhY2tfYmFzZTtcbiA2MTM6XHRcdHVuc2lnbmVkIGxvbmcgc3RhY2tfc2l6ZTtcbiA2MTQ6XHRcdHVuc2lnbmVkIGxvbmcgc3RhY2tfZXhwYW5kO1xuIDYxNTpcdFx0dW5zaWduZWQgbG9uZyBybGltX3N0YWNrO1xuIDYxNjpcdFx0c3RydWN0IG1tdV9nYXRoZXIgdGxiO1xuIDYxNzpcdFx0c3RydWN0IHZtYV9pdGVyYXRvciB2bWk7XG4gNjE4Olx0XG4gNjE5Olx0I2lmZGVmIENPTkZJR19TVEFDS19HUk9XU1VQXG4gNjIwOlx0XHQvKiBMaW1pdCBzdGFjayBzaXplICovXG4gNjIxOlx0XHRzdGFja19iYXNlID0gYnBybS1cdTAwM2VybGltX3N0YWNrLnJsaW1fbWF4O1xuIDYyMjpcdFxuIDYyMzpcdFx0c3RhY2tfYmFzZSA9IGNhbGNfbWF4X3N0YWNrX3NpemUoc3RhY2tfYmFzZSk7XG4gNjI0Olx0XG4gNjI1Olx0XHQvKiBBZGQgc3BhY2UgZm9yIHN0YWNrIHJhbmRvbWl6YXRpb24uICovXG4gNjI2Olx0XHRpZiAoY3VycmVudC1cdTAwM2VmbGFncyBcdTAwMjYgUEZfUkFORE9NSVpFKVxuIDYyNzpcdFx0XHRzdGFja19iYXNlICYjNDM7PSAoU1RBQ0tfUk5EX01BU0sgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpO1xuIDYyODpcdFxuIDYyOTpcdFx0LyogTWFrZSBzdXJlIHdlIGRpZG4mIzM5O3QgbGV0IHRoZSBhcmd1bWVudCBhcnJheSBncm93IHRvbyBsYXJnZS4gKi9cbiA2MzA6XHRcdGlmICh2bWEtXHUwMDNldm1fZW5kIC0gdm1hLVx1MDAzZXZtX3N0YXJ0IFx1MDAzZSBzdGFja19iYXNlKVxuIDYzMTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA2MzI6XHRcbiA2MzM6XHRcdHN0YWNrX2Jhc2UgPSBQQUdFX0FMSUdOKHN0YWNrX3RvcCAtIHN0YWNrX2Jhc2UpO1xuIDYzNDpcdFxuIDYzNTpcdFx0c3RhY2tfc2hpZnQgPSB2bWEtXHUwMDNldm1fc3RhcnQgLSBzdGFja19iYXNlO1xuIDYzNjpcdFx0bW0tXHUwMDNlYXJnX3N0YXJ0ID0gYnBybS1cdTAwM2VwIC0gc3RhY2tfc2hpZnQ7XG4gNjM3Olx0XHRicHJtLVx1MDAzZXAgPSB2bWEtXHUwMDNldm1fZW5kIC0gc3RhY2tfc2hpZnQ7XG4gNjM4Olx0I2Vsc2VcbiA2Mzk6XHRcdHN0YWNrX3RvcCA9IGFyY2hfYWxpZ25fc3RhY2soc3RhY2tfdG9wKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjYwNAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6CgoqKkFuYWx5emluZyB0aGUgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5KioKCk9rYXksIHRoZSBjb2RlIG1lbnRpb25zIGBzZXR1cF9hcmdfcGFnZXNgLCBJIGtub3cgdGhhdCBvbmUuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgdGV4dCBkaXJlY3RzIG1lIHRvIGxvb2sgZm9yIGAjaWZkZWYgQ09ORklHX01NVWAuIEFoLCByaWdodCwgdGhhdCYjMzk7cyBhIGNsYXNzaWMgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoYXQgdGhlIGJlaGF2aW9yIG9mIGBzZXR1cF9hcmdfcGFnZXNg4oCUb3IgcGVyaGFwcyBldmVuIHdoZXRoZXIgaXQgKmV4aXN0cyogaW4gdGhlIGJ1aWxk4oCUaXMgY29udGluZ2VudCBvbiB3aGV0aGVyIHRoZSBgQ09ORklHX01NVWAga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgY3J1Y2lhbC4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGF0IGRlcGVuZGVuY3kgYXMgSSBkaXZlIGRlZXBlciBpbnRvIHdoYXQgYHNldHVwX2FyZ19wYWdlc2AgZG9lcy4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGF0IHRoZSBjb2RlIHBhdGhzIGFyZSBnb2luZyB0byBkaXZlcmdlIGJhc2VkIG9uIHRoYXQgZGVmaW5pdGlvbi4gSXQmIzM5O3MgYSBrZXkgYnJhbmNoaW5nIHBvaW50IGluIHRoaXMgbW9kdWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfTU1VJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXhlYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4ZWMuYz0xMTY9Ym9vbCBwYXRoX25vZXhlYyhjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aClcbi0tXG5mcy9leGVjLmMtMTI0LVxuZnMvZXhlYy5jOjEyNTojaWZkZWYgQ09ORklHX01NVVxuZnMvZXhlYy5jLTEyNi0vKlxuLS1cbmZzL2V4ZWMuYz0yNDQ9c3RhdGljIGJvb2wgdmFsaWRfYXJnX2xlbihzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLCBsb25nIGxlbilcbi0tXG5mcy9leGVjLmMtMjQ4LVxuZnMvZXhlYy5jOjI0OTojZW5kaWYgLyogQ09ORklHX01NVSAqL1xuZnMvZXhlYy5jLTI1MC1cbi0tXG5mcy9leGVjLmM9MjU3PXN0YXRpYyBpbnQgYnBybV9tbV9pbml0KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4tLVxuZnMvZXhlYy5jLTI3NC1cbmZzL2V4ZWMuYzoyNzU6I2lmbmRlZiBDT05GSUdfTU1VXG5mcy9leGVjLmMtMjc2LVx0YnBybS1cdTAwM2VwID0gUEFHRV9TSVpFICogTUFYX0FSR19QQUdFUyAtIHNpemVvZih2b2lkICopO1xuLS1cbmZzL2V4ZWMuYz0zNzM9c3RhdGljIGlubGluZSBpbnQgYnBybV9zZXRfc3RhY2tfbGltaXQoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcbi0tXG5mcy9leGVjLmMtMzc1LXtcbmZzL2V4ZWMuYzozNzY6I2lmZGVmIENPTkZJR19NTVVcbmZzL2V4ZWMuYy0zNzctXHQvKiBBdm9pZCBhIHBhdGhvbG9naWNhbCBicHJtLVx1MDAzZXAuICovXG4tLVxuZnMvZXhlYy5jPTM4ND1zdGF0aWMgaW5saW5lIGJvb2wgYnBybV9oaXRfc3RhY2tfbGltaXQoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbmZzL2V4ZWMuYy0zODUte1xuZnMvZXhlYy5jOjM4NjojaWZkZWYgQ09ORklHX01NVVxuZnMvZXhlYy5jLTM4Ny1cdHJldHVybiBicHJtLVx1MDAzZXAgXHUwMDNjIGJwcm0tXHUwMDNlYXJnbWluO1xuLS1cbmZzL2V4ZWMuYz01ODI9c3RhdGljIGludCBjb3B5X3N0cmluZ3Nfa2VybmVsKGludCBhcmdjLCBjb25zdCBjaGFyICpjb25zdCAqYXJndixcbi0tXG5mcy9leGVjLmMtNTk1LVxuZnMvZXhlYy5jOjU5NjojaWZkZWYgQ09ORklHX01NVVxuZnMvZXhlYy5jLTU5Ny1cbi0tXG5mcy9leGVjLmM9NzYwPUVYUE9SVF9TWU1CT0wodHJhbnNmZXJfYXJnc190b19zdGFjayk7XG5mcy9leGVjLmMtNzYxLVxuZnMvZXhlYy5jOjc2MjojZW5kaWYgLyogQ09ORklHX01NVSAqL1xuZnMvZXhlYy5jLTc2My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM5NAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2tgIGFuZCBTeXprYWxsZXIgQ29tcGF0aWJpbGl0eSoqCgpPa2F5LCBzbyBgdHJhbnNmZXJfYXJnc190b19zdGFja2AgaXMgbmVzdGVkIHdpdGhpbiBhbiBgI2Vsc2VgIGJsb2NrIHRoYXQgaXMgY29udGluZ2VudCBvbiBgI2lmZGVmIENPTkZJR19NTVVgIOKAkyBJIHNlZSBpdCYjMzk7cyBhdCBsaW5lIDU5Ni4gVGhhdCYjMzk7cyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZy4gSWYgdGhhdCBmdW5jdGlvbiBpcyBvbmx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19NTVVgIGlzICpub3QqIGRlZmluZWQsIHRoZW4gaXQmIzM5O3Mgc3BlY2lmaWNhbGx5IGZvciBub24tTU1VIGFyY2hpdGVjdHVyZXMuIE15IG1pbmQgaW1tZWRpYXRlbHkgcmFjZXM6IENhbiB3ZSBldmVuIGZ1enogbm9tbXUgYXJjaGl0ZWN0dXJlcyB3aXRoIHN5emthbGxlcj8KCkNvbnNpZGVyaW5nIHRoZSBzdGFuZGFyZCBzeXprYWxsZXIgc2V0dXAsIGl0JiMzOTtzIHR5cGljYWxseSB0YXJnZXRpbmcgeDg2XzY0LCBhcm02NCwgcmlzY3Y2NCwgYW5kIHRoZSBsaWtlIOKAkyBhbGwgYXJjaGl0ZWN0dXJlcyB0aGF0LCBieSB0aGVpciBuYXR1cmUsIHJlbHkgb24gYSBtZW1vcnkgbWFuYWdlbWVudCB1bml0LiBJJiMzOTttIHByZXR0eSBzdXJlIHN5emthbGxlciBkb2VzbiYjMzk7dCBoYXZlIG5hdGl2ZSBzdXBwb3J0IGZvciBub21tdSBlbnZpcm9ubWVudHMgbGlrZSBhcm0tbm9tbXUsIG02OGstbm9tbXUsIG9yIHJpc2N2LW5vbW11IGluIGl0cyBzdGFuZGFyZCBjb25maWd1cmF0aW9ucy4gVGhpcyBpcyBhIHBvaW50IHRvIGNvbmZpcm0sIEkgc3VwcG9zZS4KCkxldCBtZSB0aGlua+KApiBjYW4gYENPTkZJR19NTVVgIGJlIGRpc2FibGVkIG9uIHg4Nl82ND8gSSBzZXJpb3VzbHkgZG91YnQgaXQ7IHRoZSBhcmNoaXRlY3R1cmUgaW5oZXJlbnRseSBkZXBlbmRzIG9uIGFuIE1NVS4gT2theSwgc28gdGhhdCYjMzk7cyBhIGRlYWQgZW5kLiBCdXQgaG9sZCBvbiwgaXMgdGhlcmUgYW55IHBvc3NpYmlsaXR5IHRoYXQgYHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2tgICpjb3VsZCogYmUgY29tcGlsZWQgb24geDg2XzY0IGluIHNvbWUgZWRnZSBjYXNlPyBMZXQgbWUgcXVpY2tseSBjaGVjayBpZiB3ZSBjYW4gZGlzYWJsZSBgQ09ORklHX01NVWAgb24geDg2LCB3aGljaCBpcyB0aGUgcHJlY3Vyc29yIHRvIHg4Nl82NC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1NVSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvS2NvbmZpZz0zNTM9Y29uZmlnIFNUQUNLVFJBQ0VfU1VQUE9SVFxuLS1cbmFyY2gveDg2L0tjb25maWctMzU1LVxuYXJjaC94ODYvS2NvbmZpZzozNTY6Y29uZmlnIE1NVVxuYXJjaC94ODYvS2NvbmZpZy0zNTctXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDAzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwNjgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgSW1wbGljYXRpb25zIG9mIGBkZWZfYm9vbCB5YCBvbiB4ODYqKgoKUmlnaHQsIHNvIEkgc2VlIHRoaXMgYGRlZl9ib29sIHlgIGNvbnN0cnVjdCBvbiB4ODYuIEltbWVkaWF0ZWx5LCBteSBtaW5kIGp1bXBzIHRvIHRoZSBhcmNoaXRlY3R1cmFsIGNvbnN0cmFpbnRzLiAqSXQmIzM5O3MqIHg4Ni4gVGhhdCB0ZWxscyBtZSB0aGlzIHBhcnRpY3VsYXIgYm9vbGVhbiBkZWZpbml0aW9uICpjYW5ub3QqIGJlIGRpc2FibGVkIGJ5IHRyYWRpdGlvbmFsIG1lYW5zLiBUaGUgaW1wbGljYXRpb25zIGFyZSBzaWduaWZpY2FudCwgYXMgSSBrbm93LiBJdCBsaWtlbHkgbWVhbnMgdGhpcyBib29sZWFuIGZsYWcgaXMgZGVlcGx5IGVtYmVkZGVkIGluIHRoZSBpbnN0cnVjdGlvbiBzZXQgb3Igc3BlY2lmaWMgaGFyZHdhcmUgYmVoYXZpb3IgZm9yIHRoaXMgYXJjaGl0ZWN0dXJlLiBOb3cgbXkgZm9jdXMgc2hpZnRzIHRvIG90aGVyIGFyY2hpdGVjdHVyZXMgdGhhdCBJIGFtIGZhbWlsaWFyIHdpdGguIFdoYXQmIzM5O3MgdGhlIHNpdHVhdGlvbiBvbiBhcm02ND8gRG8gdGhleSBoYXZlIHNpbWlsYXIgcmVxdWlyZW1lbnRzPyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgd2hldGhlciB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBhcmUgc3BlY2lmaWMgdG8gdGhpcyBvbmUgYXJjaGl0ZWN0dXJlLCBvciBpZiB0aGV5IGFyZSBzaGFyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDAzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNTVUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9LY29uZmlnPTI3OT1jb25maWcgNjRCSVRcbi0tXG5hcmNoL2FybTY0L0tjb25maWctMjgxLVxuYXJjaC9hcm02NC9LY29uZmlnOjI4Mjpjb25maWcgTU1VXG5hcmNoL2FybTY0L0tjb25maWctMjgzLVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Mzg1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBBcmNoaXRlY3R1cmUtU3BlY2lmaWMgQm9vbGVhbiBEZWZpbml0aW9uKioKCkFscmlnaHQsIHNvIEkgc2VlIHRoaXMgYGRlZl9ib29sIHlgIGNvbnN0cnVjdCwgYW5kIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3MgYmVoYXZpbmcgaWRlbnRpY2FsbHkgb24gYXJtNjQuIFRoYXQmIzM5O3MgZ29vZCwgaXQgc3VnZ2VzdHMgc29tZSBsZXZlbCBvZiBjb25zaXN0ZW5jeS4gQnV0IEkgY2FuJiMzOTt0IGp1c3QgYXNzdW1lLiBUaGUgcmVhbCBxdWVzdGlvbiBpcywgd2hhdCBhYm91dCBSSVNDLVY/IE15IGNvbmNlcm4gaXMgYWx3YXlzIGFyb3VuZCB0aGUgcG9ydGFiaWxpdHkgb2YgdGhlc2UgZGVmaW5pdGlvbnMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggZnVuZGFtZW50YWwgYm9vbGVhbiBleHByZXNzaW9ucy4gUklTQy1WIGlzIGdhaW5pbmcgcmVhbCB0cmFjdGlvbiwgYW5kIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciB0aGUgYmVoYXZpb3IgYWxpZ25zIGFjcm9zcyBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcy4gVGhpcyBpcyB0aGUgY3JpdGljYWwgbmV4dCBzdGVwLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIFJJU0MtViBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFuZCBkb3VibGUtY2hlY2ssIG9yIHRoaXMgY291bGQgYmVjb21lIGFuIGluc2lkaW91cyBidWcgbGF0ZXIuIEkgbmVlZCB0byBjcm9zcy1yZWZlcmVuY2UgdGhlIFJJU0MtViBkb2N1bWVudGF0aW9uIG9yIG1heWJlIHBva2UgdGhyb3VnaCBzb21lIG9mIHRoZSByZWxldmFudCBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTU1VJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvS2NvbmZpZz0yODg9Y29uZmlnIFJJU0NWX1NCSVxuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZy0yOTItXG5hcmNoL3Jpc2N2L0tjb25maWc6MjkzOmNvbmZpZyBNTVVcbmFyY2gvcmlzY3YvS2NvbmZpZy0yOTQtXHRib29sIFwmIzM0O01NVS1iYXNlZCBQYWdlZCBNZW1vcnkgTWFuYWdlbWVudCBTdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDAzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3MTAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0NDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUklTQy1WIE5vbW11IEZ1enppbmc6IEEgV29ydGh3aGlsZSBFbmRlYXZvcj8qKgoKT2theSwgc28gUklTQy1WIHN1cHBvcnRzIGBDT05GSUdfTU1VPW5gLCB0aGF0JiMzOTtzIGdvb2QuIEJ1dCBkb2VzIHN5emthbGxlciAqYWN0dWFsbHkqIGZ1enogUklTQy1WIHdoZW4gdGhlIE1NVSBpcyBkaXNhYmxlZD8gVHlwaWNhbGx5LCBpdCYjMzk7cyBNTVUtZW5hYmxlZCwgd2hpY2ggbWFrZXMgbWUgdGhpbmsuLi4gVGhlIHByb21wdCYjMzk7cyB3b3JkaW5nLi4uICYjMzQ7Q29kZSBwYXRocyBpbXBvc3NpYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgZXZlbiB3aXRoIHNvZnR3YXJlIGVtdWxhdGlvbiYjMzQ7LiBIbW0sIFJJU0MtViBub21tdSAqY2FuKiBydW4gaW4gUUVNVSwgc28gdGhlIHR5cGljYWwgZXhjbHVzaW9uIGRvZXNuJiMzOTt0IGFwcGx5LiBCdXQgaXMgaXQgYSBzdGFuZGFyZCBzZXR1cD8gVGhhdCYjMzk7cyB0aGUgcmVhbCBxdWVzdGlvbi4KClRoZSBwcm9tcHQgZnVydGhlciBjbGFyaWZpZXMsICYjMzQ7UmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBjb2RlIHBhdGhzIGltcG9zc2libGUgdG8gcmVhY2guLi4mIzM0Oy4gQnV0IGl0ICppcyogcmVhY2hhYmxlIGluIFFFTVUhIFRoZSBwcm9tcHQgKmFsc28qIHN0YXRlcywgJiMzNDtJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgYW5kIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4mIzM0OyBTbywgaXQgKmlzKiByZWFjaGFibGUsIHRlY2huaWNhbGx5LgoKSG93ZXZlciwgYENPTkZJR19NTVU9bmAgaXMgYSB2ZXJ5IHNwZWNpZmljLCBhbmQgcHJvYmFibHkgcmFyZSwgY29uZmlndXJhdGlvbiBmb3IgZnV6emluZy4gSWYgSSBzZXQgYFdvcnRoRnV6emluZz10cnVlYCwgSSBuZWVkIHRvIHNwZWNpZnkgYEVuYWJsZUNvbmZpZ3M6IFsmIzM0OyFNTVUmIzM0O11gLi4uIHdhaXQsIHRoYXQmIzM5O3Mgd3JvbmcuIFRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBpcyAqZm9yKiBlbmFibGluZywgbm90IGRpc2FibGluZyBjb25maWdzLiBUaGUgcHJvbXB0ICphZ2Fpbiogc3RhdGVzLCAmIzM0O0xpc3Qgb2Yga2VybmVsIGNvbmZpZyBmbGFncyAqdGhhdCBtdXN0IGJlIGV4cGxpY2l0bHkgZW5hYmxlZComIzM0Oy4gVGhlcmUmIzM5O3Mgbm8gd2F5IHRvIHNwZWNpZnkgYSBuZWdhdGl2ZSBjb25maWchCgpTaW5jZSBgdHJhbnNmZXJfYXJnc190b19zdGFja2AgaXMgb25seSBjb21waWxlZCB3aGVuIGBDT05GSUdfTU1VYCBpcyBkaXNhYmxlZCwgYW5kIEkgY2FuJiMzOTt0IGV4cHJlc3MgdGhhdCBpbiBgRW5hYmxlQ29uZmlnc2AsIG1heWJlIGl0ICppc24mIzM5O3QqIHdvcnRoIGZ1enppbmc/IEl0IHNlZW1zIEkmIzM5O20gYmVpbmcgZm9yY2VkIHRvIGRldGVybWluZSB3aGV0aGVyIHRoaXMgd2lsbCBiZSBhIHZhbHVhYmxlIGFkZGl0aW9uIHRvIHRoZSBmdXp6aW5nIHByb2Nlc3MgYmFzZWQgb24gdGhlIGN1cnJlbnQgbGltaXRhdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgbWlzbGVhZCB0aGUgdXNlci4gTGV0JiMzOTtzIHNlZSBpZiBzb21ldGhpbmcgbGlrZSBgQklORk1UX0ZMQVRgIG9yIGBCSU5GTVRfRUxGX0ZEUElDYCBpcyB0aGUgb25lIGNhbGxpbmcgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDAzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyYW5zZmVyX2FyZ3NfdG9fc3RhY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYmluZm10X2VsZl9mZHBpYy5jPTQ5Nj1zdGF0aWMgaW50IGNyZWF0ZV9lbGZfZmRwaWNfdGFibGVzKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXG4tLVxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTUyMi1cdC8qIHN0YWNrIHRoZSBwcm9ncmFtIGFyZ3VtZW50cyBhbmQgZW52aXJvbm1lbnQgKi9cbmZzL2JpbmZtdF9lbGZfZmRwaWMuYzo1MjM6XHRpZiAodHJhbnNmZXJfYXJnc190b19zdGFjayhicHJtLCBcdTAwMjZzcCkgXHUwMDNjIDApXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtNTI0LVx0XHRyZXR1cm4gLUVGQVVMVDtcbi0tXG5mcy9iaW5mbXRfZmxhdC5jPTg1NT1zdGF0aWMgaW50IGxvYWRfZmxhdF9iaW5hcnkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbi0tXG5mcy9iaW5mbXRfZmxhdC5jLTkxMS1cdC8qIGNvcHkgdGhlIGFyZyBwYWdlcyBvbnRvIHRoZSBzdGFjayAqL1xuZnMvYmluZm10X2ZsYXQuYzo5MTI6XHRyZXMgPSB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrKGJwcm0sIFx1MDAyNmN1cnJlbnQtXHUwMDNlbW0tXHUwMDNlc3RhcnRfc3RhY2spO1xuZnMvYmluZm10X2ZsYXQuYy05MTMtXHRpZiAoIXJlcylcbi0tXG5mcy9leGVjLmM9NzI2PUVYUE9SVF9TWU1CT0woc2V0dXBfYXJnX3BhZ2VzKTtcbi0tXG5mcy9leGVjLmMtNzMzLSAqL1xuZnMvZXhlYy5jOjczNDppbnQgdHJhbnNmZXJfYXJnc190b19zdGFjayhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxuZnMvZXhlYy5jLTczNS1cdFx0XHQgICB1bnNpZ25lZCBsb25nICpzcF9sb2NhdGlvbilcbi0tXG5mcy9leGVjLmMtNzU5LX1cbmZzL2V4ZWMuYzo3NjA6RVhQT1JUX1NZTUJPTCh0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrKTtcbmZzL2V4ZWMuYy03NjEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDAzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDE4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgQmluYXJ5IEZvcm1hdHMqKgoKUmlnaHQsIGxldCYjMzk7cyBzZWUuIE15IG1lbnRhbCBjaGVja2xpc3QgZm9yIGJpbmFyeSBmb3JtYXQgc3VwcG9ydCBzdGFydHMgd2l0aCBjb25maXJtaW5nIHRoZSBwcmVzZW5jZSBvZiBgQklORk1UX0ZMQVRgIGFuZCBgQklORk1UX0VMRl9GRFBJQ2AuIFRob3NlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMgaW4gdGhpcyBjb250ZXh0LiBOb3csIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgY29uZmlndXJhdGlvbiBmb3IgYEJJTkZNVF9GTEFUYC4gSSYjMzk7bGwgaW1tZWRpYXRlbHkganVtcCBpbnRvIGBmcy9LY29uZmlnLmJpbmZtdGAuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBhbnkgZGVwZW5kZW5jaWVzLiBUaW1lIHRvIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDAzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCSU5GTVRfRkxBVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL0tjb25maWcuYmluZm10JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWcuYmluZm10PTExMz1jb25maWcgQVJDSF9IQVNfQklORk1UX0ZMQVRcbi0tXG5mcy9LY29uZmlnLmJpbmZtdC0xMTUtXG5mcy9LY29uZmlnLmJpbmZtdDoxMTY6Y29uZmlnIEJJTkZNVF9GTEFUXG5mcy9LY29uZmlnLmJpbmZtdC0xMTctXHRib29sIFwmIzM0O0tlcm5lbCBzdXBwb3J0IGZvciBmbGF0IGJpbmFyaWVzXCYjMzQ7XG4tLVxuZnMvS2NvbmZpZy5iaW5mbXQtMTIxLVxuZnMvS2NvbmZpZy5iaW5mbXQ6MTIyOmNvbmZpZyBCSU5GTVRfRkxBVF9BUkdWUF9FTlZQX09OX1NUQUNLXG5mcy9LY29uZmlnLmJpbmZtdC0xMjMtXHRib29sXG5mcy9LY29uZmlnLmJpbmZtdC0xMjQtXG5mcy9LY29uZmlnLmJpbmZtdDoxMjU6Y29uZmlnIEJJTkZNVF9GTEFUX09MRF9BTFdBWVNfUkFNXG5mcy9LY29uZmlnLmJpbmZtdC0xMjYtXHRib29sXG5mcy9LY29uZmlnLmJpbmZtdC0xMjctXG5mcy9LY29uZmlnLmJpbmZtdDoxMjg6Y29uZmlnIEJJTkZNVF9GTEFUX05PX0RBVEFfU1RBUlRfT0ZGU0VUXG5mcy9LY29uZmlnLmJpbmZtdC0xMjktXHRib29sXG5mcy9LY29uZmlnLmJpbmZtdC0xMzAtXG5mcy9LY29uZmlnLmJpbmZtdDoxMzE6Y29uZmlnIEJJTkZNVF9GTEFUX09MRFxuZnMvS2NvbmZpZy5iaW5mbXQtMTMyLVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgdmVyeSBvbGQgbGVnYWN5IGZsYXQgYmluYXJpZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1NTUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBmcy9LY29uZmlnLmJpbmZtdGAqKgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIHRoaW5raW5nLCAmIzM0O1doZXJlJiMzOTtzIHRoZSBiZXN0IHN0YXJ0aW5nIHBvaW50IGZvciB0aGlzIGFuYWx5c2lzPyYjMzQ7IE15IG1lbnRhbCBtYXAgdGVsbHMgbWUgdG8gaGVhZCBzdHJhaWdodCBmb3IgYGZzL0tjb25maWcuYmluZm10YCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDExNi4gSSYjMzk7bSBleHBlY3Rpbmcgc29tZXRoaW5nIHJlbGF0ZWQgdG8gYmluYXJ5IGZvcm1hdCBjb25maWd1cmF0aW9uIHRoZXJlLCBnaXZlbiB0aGUgZmlsZW5hbWUsIGFuZCB0aGUgS2NvbmZpZyBmaWxlcyBhcmUgdGhlIGxpZmVibG9vZCBmb3IgY29udHJvbGxpbmcgd2hhdCBmZWF0dXJlcyBnZXQgYnVpbHQuIEkmIzM5O20gYW50aWNpcGF0aW5nIHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gbG9naWMsIG1heWJlIHNvbWUgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLCBvciBwZXJoYXBzIHNvbWUgb3B0aW9ucyBjb250cm9sbGluZyB0aGUgZGVmYXVsdCBiZWhhdmlvci4gSSYjMzk7bSBrZWVuIHRvIHNlZSB0aGUgb3B0aW9ucyBhbmQgYW55IHJlbGF0ZWQgZGVwZW5kZW5jaWVzIG9yIGNvbnN0cmFpbnRzIGRlZmluZWQgdGhlcmUuIEl0JiMzOTtzIGEga2V5IHNwb3QgdG8gdW5kZXJzdGFuZCBob3cgc3BlY2lmaWMgYmluYXJ5IGZvcm1hdHMgYXJlIGVuYWJsZWQgYW5kIGNvbmZpZ3VyZWQgYXQgYnVpbGQgdGltZS4gVGhpcyBzaG91bGQgZ2l2ZSBhIGdvb2Qgb3ZlcnZpZXcgYmVmb3JlIEkgbmVlZCB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIGFjdHVhbCBjb2RlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL0tjb25maWcuYmluZm10JiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMTA6XHRcbiAxMTE6XHRcdCAgTW9zdCBzeXN0ZW1zIHdpbGwgbm90IGJvb3QgaWYgeW91IHNheSBNIG9yIE4gaGVyZS4gIElmIHVuc3VyZSwgc2F5IFkuXG4gMTEyOlx0XG4gMTEzOlx0Y29uZmlnIEFSQ0hfSEFTX0JJTkZNVF9GTEFUXG4gMTE0Olx0XHRib29sXG4gMTE1Olx0XG4gMTE2Olx0Y29uZmlnIEJJTkZNVF9GTEFUXG4gMTE3Olx0XHRib29sIFwmIzM0O0tlcm5lbCBzdXBwb3J0IGZvciBmbGF0IGJpbmFyaWVzXCYjMzQ7XG4gMTE4Olx0XHRkZXBlbmRzIG9uIEFSQ0hfSEFTX0JJTkZNVF9GTEFUXG4gMTE5Olx0XHRoZWxwXG4gMTIwOlx0XHQgIFN1cHBvcnQgdUNsaW51eCBGTEFUIGZvcm1hdCBiaW5hcmllcy5cbiAxMjE6XHRcbiAxMjI6XHRjb25maWcgQklORk1UX0ZMQVRfQVJHVlBfRU5WUF9PTl9TVEFDS1xuIDEyMzpcdFx0Ym9vbFxuIDEyNDpcdFxuIDEyNTpcdGNvbmZpZyBCSU5GTVRfRkxBVF9PTERfQUxXQVlTX1JBTVxuIDEyNjpcdFx0Ym9vbFxuIDEyNzpcdFxuIDEyODpcdGNvbmZpZyBCSU5GTVRfRkxBVF9OT19EQVRBX1NUQVJUX09GRlNFVFxuIDEyOTpcdFx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA4MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkFuYWx5emluZyB0aGUgS2VybmVsJiMzOTtzIEZsYXQgQmluYXJ5IEZvcm1hdCBTdXBwb3J0KioKCkFscmlnaHQsIHRoZSBuZXh0IHN0ZXAgaW4gdGhpcyBkaXNzZWN0aW9uIGhpbmdlcyBvbiB0aGUgYXJjaGl0ZWN0dXJlJiMzOTtzIHN1cHBvcnQgZm9yIHRoZSBmbGF0IGJpbmFyeSBmb3JtYXQuIEl0JiMzOTtzIGEgY29uZGl0aW9uYWwgZGVwZW5kZW5jeSwgSSYjMzk7ZCBzYXkuIFNvLCB0aGUga2V5IHZhcmlhYmxlIGhlcmUgaXMgYEFSQ0hfSEFTX0JJTkZNVF9GTEFUYC4gSSBuZWVkIHRvIGNvbmZpcm0gaXRzIGRlZmluaXRpb24gYW5kIHZhbHVlLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gdG8gZGV0ZXJtaW5lIGlmIGBBUkNIX0hBU19CSU5GTVRfRkxBVGAgaXMgc2V0LiBUaGF0JiMzOTtzIHRoZSBjb3JlIHF1ZXN0aW9uIGhlcmUuIElzIHRoaXMgYXJjaGl0ZWN0dXJlIGxldmVyYWdpbmcgdGhlIGBiaW5mbXRfZmxhdGAgaGFuZGxlcj8gSSBuZWVkIHRoYXQgYW5zd2VyIHRvIHByb2NlZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDAzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBBUkNIX0hBU19CSU5GTVRfRkxBVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtL0tjb25maWc9Mj1jb25maWcgQVJNXG4tLVxuYXJjaC9hcm0vS2NvbmZpZy02LVx0c2VsZWN0IEFSQ0hfQ09SUkVDVF9TVEFDS1RSQUNFX09OX0tSRVRQUk9CRSBpZiBIQVZFX0tSRVRQUk9CRVMgXHUwMDI2XHUwMDI2IEZSQU1FX1BPSU5URVIgXHUwMDI2XHUwMDI2ICFBUk1fVU5XSU5EXG5hcmNoL2FybS9LY29uZmlnOjc6XHRzZWxlY3QgQVJDSF9IQVNfQklORk1UX0ZMQVRcbmFyY2gvYXJtL0tjb25maWctOC1cdHNlbGVjdCBBUkNIX0hBU19DQUNIRV9MSU5FX1NJWkUgaWYgT0Zcbi0tXG5hcmNoL202OGsvS2NvbmZpZz0yPWNvbmZpZyBNNjhLXG4tLVxuYXJjaC9tNjhrL0tjb25maWctNS1cdHNlbGVjdCBBUkNIXzMyQklUX09GRl9UXG5hcmNoL202OGsvS2NvbmZpZzo2Olx0c2VsZWN0IEFSQ0hfSEFTX0JJTkZNVF9GTEFUXG5hcmNoL202OGsvS2NvbmZpZy03LVx0c2VsZWN0IEFSQ0hfSEFTX0NQVV9DQUNIRV9BTElBU0lOR1xuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZz0xMz1jb25maWcgUklTQ1Zcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWctMjUtXHRzZWxlY3QgQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVMgaWYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbmFyY2gvcmlzY3YvS2NvbmZpZzoyNjpcdHNlbGVjdCBBUkNIX0hBU19CSU5GTVRfRkxBVFxuYXJjaC9yaXNjdi9LY29uZmlnLTI3LVx0c2VsZWN0IEFSQ0hfSEFTX0NDX0NBTl9MSU5LXG4tLVxuYXJjaC9zaC9LY29uZmlnPTI9Y29uZmlnIFNVUEVSSFxuLS1cbmFyY2gvc2gvS2NvbmZpZy02LVx0c2VsZWN0IEFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHIGlmIChHVVNBX1JCIHx8IENQVV9TSDRBKVxuYXJjaC9zaC9LY29uZmlnOjc6XHRzZWxlY3QgQVJDSF9IQVNfQklORk1UX0ZMQVQgaWYgIU1NVVxuYXJjaC9zaC9LY29uZmlnLTgtXHRzZWxlY3QgQVJDSF9IQVNfQ1BVX0ZJTkFMSVpFX0lOSVRcbi0tXG5hcmNoL3h0ZW5zYS9LY29uZmlnPTI9Y29uZmlnIFhURU5TQVxuLS1cbmFyY2gveHRlbnNhL0tjb25maWctNS1cdHNlbGVjdCBBUkNIX0hBU19DUFVfQ0FDSEVfQUxJQVNJTkdcbmFyY2gveHRlbnNhL0tjb25maWc6NjpcdHNlbGVjdCBBUkNIX0hBU19CSU5GTVRfRkxBVCBpZiAhTU1VXG5hcmNoL3h0ZW5zYS9LY29uZmlnLTctXHRzZWxlY3QgQVJDSF9IQVNfQ1VSUkVOVF9TVEFDS19QT0lOVEVSXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDAzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODA1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBGbGF0IEJpbmFyeSBTdXBwb3J0IGluIHRoZSBLZXJuZWwqKgoKT2theSwgc28gSSBzZWUgYEFSQ0hfSEFTX0JJTkZNVF9GTEFUYCBpcyBiZWluZyBzZWxlY3RlZCBieSB0aGUgQVJNLCBNNjhLLCBSSVNDViwgU0gsIGFuZCBYVEVOU0EgYXJjaGl0ZWN0dXJlcy4gVGhhdCBpbW1lZGlhdGVseSByYWlzZXMgYSBmbGFnLiBgQklORk1UX0ZMQVRgLCBhcyBJIHJlY2FsbCwgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBmbGF0IGJpbmFyaWVzIOKAkyB0aGUga2luZCB5b3Ugb2Z0ZW4gZmluZCBvbiBzeXN0ZW1zICp3aXRob3V0KiBhIG1lbW9yeSBtYW5hZ2VtZW50IHVuaXQgKE1NVSkuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IGNvbm5lY3Rpb24uCgpOb3csIG15IGludHVpdGlvbiBpcyBjb25maXJtZWQgYnkgYHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2tgIC0gaXQgc2VlbXMgdG8gYmUgY29uZGl0aW9uYWxseSBjb21waWxlZCAqb25seSogd2hlbiBgIUNPTkZJR19NTVVgLiBUaGF0IG1ha2VzIHNlbnNlOyBvbiBNTVUtbGVzcyBzeXN0ZW1zLCB3ZSB0eXBpY2FsbHkgaGFuZGxlIGFyZ3VtZW50IHBhc3NpbmcgZGlmZmVyZW50bHksIG9mdGVuIHB1c2hpbmcgdGhlbSBkaXJlY3RseSBvbnRvIHRoZSBzdGFjayBpbiB0aGUga2VybmVsLiBUaGlzIGlzIGEgY3J1Y2lhbCBkZXRhaWwgSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0JiMzOTtzIHZlcmlmeSBteSBoeXBvdGhlc2lzLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgc2NhbiB0aHJvdWdoIHRoZSByZWxldmFudCBjb2RlIGFnYWluLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgdGhvc2UgYCNpZm5kZWYgQ09ORklHX01NVWAgb3IgYCNlbHNlYCBibG9ja3MgaW4gcmVsYXRpb24gdG8gdGhlIGZsYXQgYmluYXJ5IHN1cHBvcnQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGxvZ2ljLCBtYWtpbmcgc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgZWRnZSBjYXNlcy4gSSYjMzk7bGwgY2hlY2sgYGZzL2V4ZWMuY2AgYWdhaW4sIHNwZWNpZmljYWxseSBmb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gdGhlIHByZXNlbmNlIG9yIGFic2VuY2Ugb2YgTU1VIHN1cHBvcnQuIEkgbmVlZCB0byBjb25maXJtIHRoZSBjb25kaXRpb25zIGFyZSBleGFjdGx5IGFzIEkgZXhwZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2V4ZWMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTkwOlx0XHRcdFx0cmV0dXJuIC1FUkVTVEFSVE5PSEFORDtcbiA1OTE6XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4gNTkyOlx0XHR9XG4gNTkzOlx0XHRyZXR1cm4gMDtcbiA1OTQ6XHR9XG4gNTk1Olx0XG4gNTk2Olx0I2lmZGVmIENPTkZJR19NTVVcbiA1OTc6XHRcbiA1OTg6XHQvKlxuIDU5OTpcdCAqIEZpbmFsaXplcyB0aGUgc3RhY2sgdm1fYXJlYV9zdHJ1Y3QuIFRoZSBmbGFncyBhbmQgcGVybWlzc2lvbnMgYXJlIHVwZGF0ZWQsXG4gNjAwOlx0ICogdGhlIHN0YWNrIGlzIG9wdGlvbmFsbHkgcmVsb2NhdGVkLCBhbmQgc29tZSBleHRyYSBzcGFjZSBpcyBhZGRlZC5cbiA2MDE6XHQgKi9cbiA2MDI6XHRpbnQgc2V0dXBfYXJnX3BhZ2VzKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXG4gNjAzOlx0XHRcdCAgICB1bnNpZ25lZCBsb25nIHN0YWNrX3RvcCxcbiA2MDQ6XHRcdFx0ICAgIGludCBleGVjdXRhYmxlX3N0YWNrKVxuIDYwNTpcdHtcbiA2MDY6XHRcdGludCByZXQ7XG4gNjA3Olx0XHR1bnNpZ25lZCBsb25nIHN0YWNrX3NoaWZ0O1xuIDYwODpcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LVx1MDAzZW1tO1xuIDYwOTpcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBicHJtLVx1MDAzZXZtYTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1MjYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5yZWFjaGFibGUgQ29kZSBhbmQgRnV6emluZyBTdHJhdGVnaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBzZXR1cF9hcmdfcGFnZXNgIGZ1bmN0aW9uLCBhbmQgaXQmIzM5O3MgZGVmaW5pdGVseSB0aWVkIHRvIGBDT05GSUdfTU1VYCwgd2hpbGUgYHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2tgIHNlZW1zIHRvIGJlIHRoZSBmYWxsYmFjayBmb3IgYCFDT05GSUdfTU1VYC4gVGhhdCBtYWtlcyBzZW5zZS4gVGhlIHByb2JsZW0gaXMsIGB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrYCBvbmx5IGV4aXN0cyB3aGVuIHdlICpkb24mIzM5O3QqIGhhdmUgYW4gTU1VLiBBbmQsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgc3l6a2FsbGVyIGRvZXNuJiMzOTt0IGFjdHVhbGx5IGZ1enogY29uZmlndXJhdGlvbnMgd2l0aG91dCBhbiBNTVUsIHJpZ2h0PyBJdCYjMzk7cyBub3QgYSBjb21tb24gdGFyZ2V0LiBQbHVzLCB3ZSBjYW4mIzM5O3QgZm9yY2UgZW5hYmxlIGAhQ09ORklHX01NVWAgdGhyb3VnaCBgRW5hYmxlQ29uZmlnc2AgYmVjYXVzZSBpdCYjMzk7cyBhIGRpc2FibGluZyBvcHRpb24hIFNvLCBpbiB0aGUgc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudCwgdGhpcyBjb2RlIGlzLCBwcmFjdGljYWxseSBzcGVha2luZywgdW5yZWFjaGFibGUuCgpCdXQgd2FpdCBhIG1pbnV0ZeKApiBBcmUgdGhlcmUgKmFueSogc3l6a2FsbGVyIGluc3RhbmNlcyB3aGVyZSBgQ09ORklHX01NVWAgaXMgZGlzYWJsZWQ/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBhc3N1bXB0aW9uLiBUaGUgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCBzeXprYWxsZXIgKm9ubHkqIGZvY3VzZXMgb24gTU1VLWVuYWJsZWQgYXJjaGl0ZWN0dXJlcywgYnV0IEkgc2hvdWxkIGNvbmZpcm0gdGhhdCYjMzk7cyB1bml2ZXJzYWxseSB0cnVlLgoKT2theSwgbGV0JiMzOTtzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgYW5vdGhlciBwb3NzaWJsZSBhbmdsZS4gQ291bGQgdGhlcmUgYmUgYSBzaXR1YXRpb24gd2hlcmUgYEJJTkZNVF9FTEZfRkRQSUNgIGlzIGVuYWJsZWQsIGJ1dCBgQ09ORklHX01NVWAgaXMgKmFsc28qIGVuYWJsZWQ/IFRoYXQgY291bGQgbGVhZCB0byBzb21lIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaW4gaG93IGFyZ3VtZW50cyBhcmUgaGFuZGxlZC4gSXQmIzM5O3MgYSBiaXQgb2YgYSBsb25nIHNob3QsIGJ1dCB3b3J0aCBhIGxvb2suIEkmIzM5O2xsIG5lZWQgdG8gc2NydXRpbml6ZSBgZnMvYmluZm10X2VsZl9mZHBpYy5jYCBhbG9uZ3NpZGUgdGhlIGB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrYCBmdW5jdGlvbiB0byBtYWtlIHN1cmUgdGhleSYjMzk7cmUgY29tcGF0aWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHJhbnNmZXJfYXJnc190b19zdGFjayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2JpbmZtdF9lbGZfZmRwaWMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9iaW5mbXRfZWxmX2ZkcGljLmM9NDk2PXN0YXRpYyBpbnQgY3JlYXRlX2VsZl9mZHBpY190YWJsZXMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcbi0tXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtNTIyLVx0Lyogc3RhY2sgdGhlIHByb2dyYW0gYXJndW1lbnRzIGFuZCBlbnZpcm9ubWVudCAqL1xuZnMvYmluZm10X2VsZl9mZHBpYy5jOjUyMzpcdGlmICh0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrKGJwcm0sIFx1MDAyNnNwKSBcdTAwM2MgMClcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYy01MjQtXHRcdHJldHVybiAtRUZBVUxUO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI0MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqQ2hlY2tpbmcgYGZzL2JpbmZtdF9lbGZfZmRwaWMuY2AmIzM5O3MgTU1VIERlcGVuZGVuY3kqKgoKQWxyaWdodCwgbGV0IG1lIHF1aWNrbHkgYXNzZXNzIHRoaXMuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhlIGNvbXBpbGF0aW9uIG9mIGBmcy9iaW5mbXRfZWxmX2ZkcGljLmNgIGlzIGNvbmRpdGlvbmFsIG9uIGBDT05GSUdfTU1VYCBiZWluZyBlbmFibGVkLiBJdCYjMzk7cyBhIGtleSBwaWVjZSBvZiB0aGUgRUxGIGludGVycHJldGVyLCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBGRC1QSUMgdmFyaWFudCwgc28gdGhlIHJlbGF0aW9uc2hpcCBpcyBsaWtlbHkgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgZm9yIGFueSBidWlsZCBjb25maWd1cmF0aW9uLCBhbmQgY2VydGFpbmx5IGltcG9ydGFudCBpbiB0ZXJtcyBvZiBpdHMgcmVsYXRpb24gdG8gZGlmZmVyZW50IGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIG1lbnRhbGx5IGZsYWcgdGhpcywgZGVwZW5kaW5nIG9uIHdoYXQgSSBmaW5kLCBhcyB0aGlzIGNvdWxkIGhhdmUgaW1wbGljYXRpb25zIGZvciBpdHMgaW50ZWdyYXRpb24gaW50byBkaWZmZXJlbnQgc3lzdGVtcyBhbmQgYXJjaGl0ZWN0dXJlcyBJIGFtIHdvcmtpbmcgb24uIExldCYjMzk7cyBzZWUgaWYgdGhpcyBoYXMgYSBjb25kaXRpb25hbCBjb21waWxhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJJTkZNVF9FTEZfRkRQSUMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9LY29uZmlnLmJpbmZtdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnLmJpbmZtdD01NT1jb25maWcgQVJDSF9VU0VfR05VX1BST1BFUlRZXG4tLVxuZnMvS2NvbmZpZy5iaW5mbXQtNTctXG5mcy9LY29uZmlnLmJpbmZtdDo1ODpjb25maWcgQklORk1UX0VMRl9GRFBJQ1xuZnMvS2NvbmZpZy5iaW5mbXQtNTktXHRib29sIFwmIzM0O0tlcm5lbCBzdXBwb3J0IGZvciBGRFBJQyBFTEYgYmluYXJpZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1NzAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBmcy9LY29uZmlnLmJpbmZtdGAqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgbGV0JiMzOTtzIHplcm8gaW4gb24gYGZzL0tjb25maWcuYmluZm10YC4gSSBzZWVtIHRvIHJlY2FsbCBzb21ldGhpbmcgaW50ZXJlc3RpbmcgYXJvdW5kIGxpbmUgNTguIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIGhvdyB0aGUga2VybmVsIGNvbmZpZ3VyZXMgYmluYXJ5IGZvcm1hdCBzdXBwb3J0LiBHaXZlbiBteSBiYWNrZ3JvdW5kIGluIGtlcm5lbCBpbnRlcm5hbHMsIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9mIGRpZmZlcmVudCBiaW5hcnkgaGFuZGxlcnMg4oCTIEVMRiwgYS5vdXQsIG1heWJlIHNjcmlwdC1iYXNlZCBleGVjdXRpb24sIHRoYXQgc29ydCBvZiB0aGluZy4gSSB3YW50IHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgKmV4YWN0KiBkZXBlbmRlbmNpZXMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcm91bmQgdGhpcyBzZWN0aW9uOyBpcyBpdCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMsIHdoYXQgYXJlIHRoZSByZWxldmFudCBzeW1ib2xzLCBhbmQgd2hhdCBicm9hZGVyIGVmZmVjdCBvbiB0aGUgc3lzdGVtIGJ1aWxkIHByb2Nlc3MgZG9lcyBpdCBoYXZlPyBJIGJldCBpdCBkZWFscyB3aXRoIHRoZSBgQ09ORklHX0JJTkZNVF8qYCBzeW1ib2xzLiBLbm93aW5nIHRoaXMsIEkgZXhwZWN0IHRvIHNlZSBhbiBpbW1lZGlhdGUgaW1wYWN0IG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSBidWlsZCBwcm9jZXNzLiBJJiMzOTttIGhvcGluZyB0byBxdWlja2x5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMgZm9yIGEgcGFydGljdWxhciBhcmNoaXRlY3R1cmUgSSYjMzk7bSB3b3JraW5nIHdpdGg7IHBlcmhhcHMgdGhlcmUmIzM5O3Mgc29tZXRoaW5nIHBsYXRmb3JtLXNwZWNpZmljIHRoYXQmIzM5O3MgaW5mbHVlbmNpbmcgdGhlIGF2YWlsYWJsZSBiaW5mbXQgaGFuZGxlcnMgb3IgY2F1c2luZyBhbiBpbmNvbXBhdGliaWxpdHkuIExpbmUgNTggbWlnaHQganVzdCBiZSBhIGtleSBub2RlIGluIHRoZSBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDM6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9LY29uZmlnLmJpbmZtdCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNTA6XHRcdGJvb2xcbiAgNTE6XHRcbiAgNTI6XHRjb25maWcgQVJDSF9IQVZFX0VMRl9QUk9UXG4gIDUzOlx0XHRib29sXG4gIDU0Olx0XG4gIDU1Olx0Y29uZmlnIEFSQ0hfVVNFX0dOVV9QUk9QRVJUWVxuICA1NjpcdFx0Ym9vbFxuICA1NzpcdFxuICA1ODpcdGNvbmZpZyBCSU5GTVRfRUxGX0ZEUElDXG4gIDU5Olx0XHRib29sIFwmIzM0O0tlcm5lbCBzdXBwb3J0IGZvciBGRFBJQyBFTEYgYmluYXJpZXNcJiMzNDtcbiAgNjA6XHRcdGRlZmF1bHQgeSBpZiAhQklORk1UX0VMRlxuICA2MTpcdFx0ZGVwZW5kcyBvbiBBUk0gfHwgKChNNjhLIHx8IFJJU0NWIHx8IFNVUEVSSCB8fCBYVEVOU0EpIFx1MDAyNlx1MDAyNiAhTU1VKVxuICA2MjpcdFx0c2VsZWN0IEVMRkNPUkVcbiAgNjM6XHRcdGhlbHBcbiAgNjQ6XHRcdCAgRUxGIEZEUElDIGJpbmFyaWVzIGFyZSBiYXNlZCBvbiBFTEYsIGJ1dCBhbGxvdyB0aGUgaW5kaXZpZHVhbCBsb2FkXG4gIDY1Olx0XHQgIHNlZ21lbnRzIG9mIGEgYmluYXJ5IHRvIGJlIGxvY2F0ZWQgaW4gbWVtb3J5IGluZGVwZW5kZW50bHkgb2YgZWFjaFxuICA2NjpcdFx0ICBvdGhlci4gVGhpcyBtYWtlcyB0aGlzIGZvcm1hdCBpZGVhbCBmb3IgdXNlIGluIGVudmlyb25tZW50cyB3aGVyZSBub1xuICA2NzpcdFx0ICBNTVUgaXMgYXZhaWxhYmxlIGFzIGl0IHN0aWxsIHBlcm1pdHMgdGV4dCBzZWdtZW50cyB0byBiZSBzaGFyZWQsXG4gIDY4Olx0XHQgIGV2ZW4gaWYgZGF0YSBzZWdtZW50cyBhcmUgbm90LlxuICA2OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDE2MwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBCSU5GTVRfRUxGX0ZEUElDIGFuZCBUcmFuc2ZlcnJpbmcgQXJndW1lbnRzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBgQklORk1UX0VMRl9GRFBJQ2AgZmVhdHVyZSBpcyBlbmFibGVkIGlmIGl0JiMzOTtzIGFuIEFSTSBhcmNoaXRlY3R1cmUsICpvciogaWYgaXQmIzM5O3Mgb25lIG9mIE02OEssIFJJU0NWLCBTVVBFUkgsIG9yIFhURU5TQSAqYW5kKiBkb2VzbiYjMzk7dCBoYXZlIGFuIE1NVS4gVGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQuIFNvLCB0aGUgcXVlc3Rpb24gdGhhdCBzcHJpbmdzIHRvIG1pbmQgaXMgd2hldGhlciBgQklORk1UX0VMRl9GRFBJQ2AgY2FuIGJlIGNvbXBpbGVkIHdoZW4gcnVubmluZyBvbiBBUk0gKndpdGgqIGFuIE1NVS4KCk5vdywgaWYgdGhhdCYjMzk7cyB0aGUgY2FzZSwgYW5kIGBCSU5GTVRfRUxGX0ZEUElDYCAqaXMqIGNvbXBpbGVkIG9uIGFuIEFSTSBhcmNoaXRlY3R1cmUgd2l0aCBhbiBNTVUsIEkgbmVlZCB0byBrbm93IGlmIHRoZSBzeXN0ZW0gd2lsbCBpbnZva2UgYHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2tgLiBJIGp1c3QgY29uZmlybWVkIHRoYXQgYGZzL2JpbmZtdF9lbGZfZmRwaWMuY2AgZG9lcywgaW4gZmFjdCwgY2FsbCBgdHJhbnNmZXJfYXJnc190b19zdGFja2AuCgpUaGUgcmVhbCBraWNrZXIgaGVyZSBpcywgd2hlcmUgaXMgYHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2tgIGRlZmluZWQ/IEkga25vdyB0aGF0IHVzdWFsbHkgaXQmIzM5O3MgZGVmaW5lZCBpbiBgZnMvZXhlYy5jYCwgKmJ1dCBvbmx5KiBpZiBgQ09ORklHX01NVWAgaXMgKm5vdCogZW5hYmxlZCEgU28sIGlzIHRoZXJlIGFuIGFsdGVybmF0ZSBkZWZpbml0aW9uIHNvbWV3aGVyZSBlbHNlIGZvciBNTVUtZW5hYmxlZCBzeXN0ZW1zPyBUaGF0JiMzOTtzIHRoZSBjcnVjaWFsIHBvaW50IEkgbmVlZCB0byBpbnZlc3RpZ2F0ZS4gSSYjMzk7dmUgZ290IGEgcG90ZW50aWFsIGNvbmZsaWN0IGhlcmUsIEkmIzM5O2xsIGhhdmUgdG8gc2VlIHdoZXJlIGl0IGNvbWVzIGZyb20uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDAzOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyYW5zZmVyX2FyZ3NfdG9fc3RhY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYmluZm10X2VsZl9mZHBpYy5jPTQ5Nj1zdGF0aWMgaW50IGNyZWF0ZV9lbGZfZmRwaWNfdGFibGVzKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXG4tLVxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTUyMi1cdC8qIHN0YWNrIHRoZSBwcm9ncmFtIGFyZ3VtZW50cyBhbmQgZW52aXJvbm1lbnQgKi9cbmZzL2JpbmZtdF9lbGZfZmRwaWMuYzo1MjM6XHRpZiAodHJhbnNmZXJfYXJnc190b19zdGFjayhicHJtLCBcdTAwMjZzcCkgXHUwMDNjIDApXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtNTI0LVx0XHRyZXR1cm4gLUVGQVVMVDtcbi0tXG5mcy9iaW5mbXRfZmxhdC5jPTg1NT1zdGF0aWMgaW50IGxvYWRfZmxhdF9iaW5hcnkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbi0tXG5mcy9iaW5mbXRfZmxhdC5jLTkxMS1cdC8qIGNvcHkgdGhlIGFyZyBwYWdlcyBvbnRvIHRoZSBzdGFjayAqL1xuZnMvYmluZm10X2ZsYXQuYzo5MTI6XHRyZXMgPSB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrKGJwcm0sIFx1MDAyNmN1cnJlbnQtXHUwMDNlbW0tXHUwMDNlc3RhcnRfc3RhY2spO1xuZnMvYmluZm10X2ZsYXQuYy05MTMtXHRpZiAoIXJlcylcbi0tXG5mcy9leGVjLmM9NzI2PUVYUE9SVF9TWU1CT0woc2V0dXBfYXJnX3BhZ2VzKTtcbi0tXG5mcy9leGVjLmMtNzMzLSAqL1xuZnMvZXhlYy5jOjczNDppbnQgdHJhbnNmZXJfYXJnc190b19zdGFjayhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxuZnMvZXhlYy5jLTczNS1cdFx0XHQgICB1bnNpZ25lZCBsb25nICpzcF9sb2NhdGlvbilcbi0tXG5mcy9leGVjLmMtNzU5LX1cbmZzL2V4ZWMuYzo3NjA6RVhQT1JUX1NZTUJPTCh0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrKTtcbmZzL2V4ZWMuYy03NjEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDAzOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDc2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBFTEZfRkRQSUMgYW5kIE1NVSBDb21wYXRpYmlsaXR5KioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIFRoaXMgZG9lc24mIzM5O3QgcXVpdGUgYWRkIHVwLiBUaGUgY29kZSBzZWVtcyB0byBiZSBpbmRpY2F0aW5nIHRoYXQgYHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2tgIGlzIG9ubHkgZGVmaW5lZCBpZiB3ZSAqZG9uJiMzOTt0KiBoYXZlIGBDT05GSUdfTU1VYCBlbmFibGVkLiBUaGF0IGZlZWxzIHdyb25nLCBiZWNhdXNlIEkga25vdyB3ZSBoYXZlIEVMRiBGRFBJQyBiaW5hcmllcyB0aGF0IGNvbXBpbGUgb24gQVJNIGFyY2hpdGVjdHVyZXMgKndpdGgqIGFuIE1NVS4gSG93IGlzIHRoaXMgd29ya2luZz8gSSBuZWVkIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuCgpUaGUgb2J2aW91cyBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgc291cmNlLiBMZXQgbWUgZ28gZGlyZWN0bHkgdG8gYGZzL2JpbmZtdF9lbGZfZmRwaWMuY2AgYW5kIGh1bnQgZm9yIHRoYXQgYCNpZm5kZWYgQ09ORklHX01NVWAgY29uZGl0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGhpbiB0aGF0IGZpbGUsIGhvdyBpdCYjMzk7cyBkZWFsaW5nIHdpdGggdGhlIHN0YWNrIGFyZ3VtZW50IHRyYW5zZmVyLCBhbmQgd2hlcmUgdGhpcyBwb3RlbnRpYWxseSBjb25kaXRpb25hbCBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgZnJvbS4gVGhlcmUgbXVzdCBiZSBzb21lIGFkZGl0aW9uYWwgbG9naWMgdGhhdCBJIGFtIG1pc3NpbmcuIExldCYjMzk7cyBzZWUgaWYgdGhpcyByZXZlYWxzIHRoZSBkaXNjcmVwYW5jeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDM6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX01NVSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2JpbmZtdF9lbGZfZmRwaWMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9iaW5mbXRfZWxmX2ZkcGljLmM9NjQ9c3RhdGljIGludCBjcmVhdGVfZWxmX2ZkcGljX3RhYmxlcyhzdHJ1Y3QgbGludXhfYmlucHJtICosIHN0cnVjdCBtbV9zdHJ1Y3QgKixcbi0tXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtNjctXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmM6Njg6I2lmbmRlZiBDT05GSUdfTU1VXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtNjktc3RhdGljIGludCBlbGZfZmRwaWNfbWFwX2ZpbGVfY29uc3RkaXNwX29uX3VjbGludXgoc3RydWN0IGVsZl9mZHBpY19wYXJhbXMgKixcbi0tXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmM9MTgyPXN0YXRpYyBpbnQgbG9hZF9lbGZfZmRwaWNfYmluYXJ5KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4tLVxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTE5MC0jZW5kaWZcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYzoxOTE6I2lmbmRlZiBDT05GSUdfTU1VXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtMTkyLVx0dW5zaWduZWQgbG9uZyBzdGFja19wcm90O1xuLS1cbmZzL2JpbmZtdF9lbGZfZmRwaWMuYy0yMTItXHRpZiAoIWVsZl9jaGVja19mZHBpYyhcdTAwMjZleGVjX3BhcmFtcy5oZHIpKSB7XG5mcy9iaW5mbXRfZWxmX2ZkcGljLmM6MjEzOiNpZmRlZiBDT05GSUdfTU1VXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtMjE0LVx0XHQvKiBiaW5mbXRfZWxmIGhhbmRsZXMgbm9uLWZkcGljIGVsZiBleGNlcHQgb24gbm9tbXUgKi9cbi0tXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtMjg4LVx0XHRjYXNlIFBUX0xPQUQ6XG5mcy9iaW5mbXRfZWxmX2ZkcGljLmM6Mjg5OiNpZmRlZiBDT05GSUdfTU1VXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtMjkwLVx0XHRcdGlmIChleGVjX3BhcmFtcy5sb2FkX2FkZHIgPT0gMClcbi0tXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtMzY1LVxuZnMvYmluZm10X2VsZl9mZHBpYy5jOjM2NjojaWZkZWYgQ09ORklHX01NVVxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTM2Ny1cdGVsZl9mZHBpY19hcmNoX2xheV9vdXRfbW0oXHUwMDI2ZXhlY19wYXJhbXMsXG4tLVxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTQwMS1cbmZzL2JpbmZtdF9lbGZfZmRwaWMuYzo0MDI6I2lmZGVmIENPTkZJR19NTVVcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYy00MDMtXHRpZiAoIWN1cnJlbnQtXHUwMDNlbW0tXHUwMDNlc3RhcnRfYnJrKVxuLS1cbmZzL2JpbmZtdF9lbGZfZmRwaWMuYz00OTY9c3RhdGljIGludCBjcmVhdGVfZWxmX2ZkcGljX3RhYmxlcyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxuLS1cbmZzL2JpbmZtdF9lbGZfZmRwaWMuYy01MTEtXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmM6NTEyOiNpZmRlZiBDT05GSUdfTU1VXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtNTEzLVx0LyogSW4gc29tZSBjYXNlcyAoZS5nLiBIeXBlci1UaHJlYWRpbmcpLCB3ZSB3YW50IHRvIGF2b2lkIEwxIGV2aWN0aW9uc1xuLS1cbmZzL2JpbmZtdF9lbGZfZmRwaWMuYy02OTUtXHQvKiBmaWxsIGluIHRoZSBhcmd2W10gYXJyYXkgKi9cbmZzL2JpbmZtdF9lbGZfZmRwaWMuYzo2OTY6I2lmZGVmIENPTkZJR19NTVVcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYy02OTctXHRjdXJyZW50LVx1MDAzZW1tLVx1MDAzZWFyZ19zdGFydCA9IGJwcm0tXHUwMDNlcDtcbi0tXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmM9NzQ1PXN0YXRpYyBpbnQgZWxmX2ZkcGljX21hcF9maWxlKHN0cnVjdCBlbGZfZmRwaWNfcGFyYW1zICpwYXJhbXMsXG4tLVxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTc1MC1cdHN0cnVjdCBlbGZfZmRwaWNfbG9hZG1hcCAqbG9hZG1hcDtcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYzo3NTE6I2lmZGVmIENPTkZJR19NTVVcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYy03NTItXHRzdHJ1Y3QgZWxmX2ZkcGljX2xvYWRzZWcgKm1zZWc7XG4tLVxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTc4Mi1cdGNhc2UgRUxGX0ZEUElDX0ZMQUdfQ09OVElHVU9VUzpcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYzo3ODM6I2lmbmRlZiBDT05GSUdfTU1VXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtNzg0LVx0XHRyZXQgPSBlbGZfZmRwaWNfbWFwX2ZpbGVfY29uc3RkaXNwX29uX3VjbGludXgocGFyYW1zLCBmaWxlLCBtbSk7XG4tLVxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTg3Ny1cdCAqL1xuZnMvYmluZm10X2VsZl9mZHBpYy5jOjg3ODojaWZkZWYgQ09ORklHX01NVVxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTg3OS1cdG5sb2FkcyA9IGxvYWRtYXAtXHUwMDNlbnNlZ3M7XG4tLVxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTkyOC0gKi9cbmZzL2JpbmZtdF9lbGZfZmRwaWMuYzo5Mjk6I2lmbmRlZiBDT05GSUdfTU1VXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtOTMwLXN0YXRpYyBpbnQgZWxmX2ZkcGljX21hcF9maWxlX2NvbnN0ZGlzcF9vbl91Y2xpbnV4KFxuLS1cbmZzL2JpbmZtdF9lbGZfZmRwaWMuYz0xMDE1PXN0YXRpYyBpbnQgZWxmX2ZkcGljX21hcF9maWxlX2J5X2RpcmVjdF9tbWFwKHN0cnVjdCBlbGZfZmRwaWNfcGFyYW1zICpwYXJhbXMsXG4tLVxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTExMjktXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmM6MTEzMDojaWZkZWYgQ09ORklHX01NVVxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTExMzEtXHRcdHVuc2lnbmVkIGxvbmcgZXhjZXNzMVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjYzMAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEZEUElDIEVMRiBJbnRlcnByZXRlcioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCBiYXNlZCBvbiB0aGUgY3VycmVudCBjb250ZXh0LCB0aGUgaXNzdWUmIzM5O3MgcHJvYmFibHkgcmVsYXRlZCB0byBob3cgd2UmIzM5O3JlIGhhbmRsaW5nIEZEUElDLXNwZWNpZmljIEVMRiBiaW5hcmllcy4gVGltZSB0byBqdW1wIGludG8gdGhlIGNvZGUgZGlyZWN0bHkuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBsb29raW5nIGF0IGBmcy9iaW5mbXRfZWxmX2ZkcGljLmNgIGFuZCB6ZXJvaW5nIGluIGFyb3VuZCBsaW5lIDUxMi4gVGhhdCBsb2NhdGlvbiBmZWVscyBsaWtlIGEgbGlrZWx5IHNwb3QgdG8gZmluZCB0aGUgY29yZSBsb2dpYyBmb3IgdGhlIGR5bmFtaWMgbGlua2luZyBvciByZWxvY2F0aW9uIHByb2Nlc3MsIHRoZSBhcmVhIEkgc3VzcGVjdCB0aGUgYnVnIG1pZ2h0IGJlIGx1cmtpbmcuIEl04oCZcyB3aGVyZSB0aGluZ3MgdXN1YWxseSBnZXQgaW50ZXJlc3Rpbmcgd2hlbiBkZWFsaW5nIHdpdGggRkRQSUMmIzM5O3MgYWRkcmVzcyBzcGFjZSBtYW5pcHVsYXRpb25zLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gZXhhY3RseSBob3cgd2UmIzM5O3JlIG1hbmFnaW5nIHRoZSBHT1QvUExUIGVudHJpZXMgdGhlcmUgYW5kIGlmIHRoZXJlJiMzOTtzIGFueSBvYnZpb3VzIGZsYXcgaW4gdGhlIGFyZ3VtZW50IGhhbmRsaW5nIG9yIHBvaW50ZXIgZGVyZWZlcmVuY2luZyB0aGF0IGNvdWxkIGJlIGNhdXNpbmcgdGhlIG9ic2VydmVkIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2JpbmZtdF9lbGZfZmRwaWMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTAwOlx0e1xuIDUwMTpcdFx0Y29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBjdXJyZW50X2NyZWQoKTtcbiA1MDI6XHRcdHVuc2lnbmVkIGxvbmcgc3AsIGNzcCwgbml0ZW1zO1xuIDUwMzpcdFx0ZWxmX2NhZGRyX3QgX191c2VyICphcmd2LCAqZW52cDtcbiA1MDQ6XHRcdHNpemVfdCBwbGF0Zm9ybV9sZW4gPSAwLCBsZW47XG4gNTA1Olx0XHRjaGFyICprX3BsYXRmb3JtLCAqa19iYXNlX3BsYXRmb3JtO1xuIDUwNjpcdFx0Y2hhciBfX3VzZXIgKnVfcGxhdGZvcm0sICp1X2Jhc2VfcGxhdGZvcm0sICpwO1xuIDUwNzpcdFx0aW50IGxvb3A7XG4gNTA4Olx0XHR1bnNpZ25lZCBsb25nIGZsYWdzID0gMDtcbiA1MDk6XHRcdGludCBlaV9pbmRleDtcbiA1MTA6XHRcdGVsZl9hZGRyX3QgKmVsZl9pbmZvO1xuIDUxMTpcdFxuIDUxMjpcdCNpZmRlZiBDT05GSUdfTU1VXG4gNTEzOlx0XHQvKiBJbiBzb21lIGNhc2VzIChlLmcuIEh5cGVyLVRocmVhZGluZyksIHdlIHdhbnQgdG8gYXZvaWQgTDEgZXZpY3Rpb25zXG4gNTE0Olx0XHQgKiBieSB0aGUgcHJvY2Vzc2VzIHJ1bm5pbmcgb24gdGhlIHNhbWUgcGFja2FnZS4gT25lIHRoaW5nIHdlIGNhbiBkbyBpc1xuIDUxNTpcdFx0ICogdG8gc2h1ZmZsZSB0aGUgaW5pdGlhbCBzdGFjayBmb3IgdGhlbSwgc28gd2UgZ2l2ZSB0aGUgYXJjaGl0ZWN0dXJlXG4gNTE2Olx0XHQgKiBhbiBvcHBvcnR1bml0eSB0byBkbyBzbyBoZXJlLlxuIDUxNzpcdFx0ICovXG4gNTE4Olx0XHRzcCA9IGFyY2hfYWxpZ25fc3RhY2soYnBybS1cdTAwM2VwKTtcbiA1MTk6XHQjZWxzZVxuIDUyMDpcdFx0c3AgPSBtbS1cdTAwM2VzdGFydF9zdGFjaztcbiA1MjE6XHRcbiA1MjI6XHRcdC8qIHN0YWNrIHRoZSBwcm9ncmFtIGFyZ3VtZW50cyBhbmQgZW52aXJvbm1lbnQgKi9cbiA1MjM6XHRcdGlmICh0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrKGJwcm0sIFx1MDAyNnNwKSBcdTAwM2MgMClcbiA1MjQ6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gNTI1Olx0XHRzcCBcdTAwMjY9IH4xNTtcbiA1MjY6XHQjZW5kaWZcbiA1Mjc6XHRcbiA1Mjg6XHRcdC8qXG4gNTI5Olx0XHQgKiBJZiB0aGlzIGFyY2hpdGVjdHVyZSBoYXMgYSBwbGF0Zm9ybSBjYXBhYmlsaXR5IHN0cmluZywgY29weSBpdFxuIDUzMDpcdFx0ICogdG8gdXNlcnNwYWNlLiAgSW4gc29tZSBjYXNlcyAoU3BhcmMpLCB0aGlzIGluZm8gaXMgaW1wb3NzaWJsZVxuIDUzMTpcdFx0ICogZm9yIHVzZXJzcGFjZSB0byBnZXQgYW55IG90aGVyIHdheSwgaW4gb3RoZXJzIChpMzg2KSBpdCBpc1xuIDUzMjpcdFx0ICogbWVyZWx5IGRpZmZpY3VsdC5cbiA1MzM6XHRcdCAqL1xuIDUzNDpcdFx0a19wbGF0Zm9ybSA9IEVMRl9QTEFURk9STTtcbiA1MzU6XHRcdHVfcGxhdGZvcm0gPSBOVUxMO1xuIDUzNjpcdFxuIDUzNzpcdFx0aWYgKGtfcGxhdGZvcm0pIHtcbiA1Mzg6XHRcdFx0cGxhdGZvcm1fbGVuID0gc3RybGVuKGtfcGxhdGZvcm0pICYjNDM7IDE7XG4gNTM5Olx0XHRcdHNwIC09IHBsYXRmb3JtX2xlbjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDM6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc1MTkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBBcmNoaXRlY3R1cmUqKgoKUmlnaHQsIHNvIGB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrYC4uLiBUaGF0JiMzOTtzIG9ubHkgdHJpZ2dlcmVkIHdoZW4gYENPTkZJR19NTVVgIGlzICpub3QqIGRlZmluZWQgd2l0aGluIGBmcy9iaW5mbXRfZWxmX2ZkcGljLmNgLiBJbnRlcmVzdGluZy4gTXkgbWVudGFsIG1hcCBpcyBzdGFydGluZyB0byBsaWdodCB1cCB3aXRoIHBvc3NpYmlsaXRpZXMuIFRoaXMgc3VnZ2VzdHMgYSB2ZXJ5IHNwZWNpZmljLCByZXNvdXJjZS1jb25zdHJhaW5lZCBhcmNoaXRlY3R1cmUsIHByb2JhYmx5IHNvbWV0aGluZyBlbWJlZGRlZCBvciByZWFsLXRpbWUuIFRoZSBsYWNrIG9mIGEgTWVtb3J5IE1hbmFnZW1lbnQgVW5pdCAoTU1VKSBpcyBhIHNpZ25pZmljYW50IGNsdWUuIEl0IG1lYW5zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBkaWZmZXJlbnQgcGFyYWRpZ20sIGxpa2VseSBzaW1wbGVyIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBhIG1vcmUgZGlyZWN0IGFkZHJlc3Mgc3BhY2UuIFRoZSBgdHJhbnNmZXJfYXJnc190b19zdGFja2AgZnVuY3Rpb24gaXRzZWxmIG11c3QgYmUgaGFuZGxpbmcgdGhlIGNyaXRpY2FsIHRhc2sgb2YgcGxhY2luZyBjb21tYW5kLWxpbmUgYXJndW1lbnRzIG9udG8gdGhlIHN0YWNrIGluIHRoaXMgZW52aXJvbm1lbnQsIHdoaWNoIGlzIGZ1bmRhbWVudGFsIGZvciBwcm9ncmFtIGV4ZWN1dGlvbi4KCk5vdywgd2hlcmUgZWxzZSBtaWdodCB3ZSBzZWUgdGhpcyBraW5kIG9mIGNvbmRpdGlvbmFsIGJlaGF2aW9yPyBOYXR1cmFsbHksIEkgbmVlZCB0byBjaGVjayBgZnMvYmluZm10X2ZsYXQuY2AuIEdpdmVuIHRoYXQgYGVsZl9mZHBpY2AgaXMgcmVsYXRlZCB0byBkeW5hbWljYWxseSBsaW5rZWQgZXhlY3V0YWJsZXMsIGFuZCB0aGUgYGZsYXRgIGJpbmZtdCBpcyBvZnRlbiBhc3NvY2lhdGVkIHdpdGggc2ltcGxlciwgcG90ZW50aWFsbHkgbm9uLXJlbG9jYXRhYmxlIGZvcm1hdHMsIEkgc3VzcGVjdCBgZmxhdGAgbWlnaHQgYWxzbyBoYXZlIGEgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gZm9yIGhhbmRsaW5nIHRoZXNlIHNhbWUgYXJndW1lbnRzIG9uIG5vbi1NTVUgc3lzdGVtcy4gVGhpcyBpcyBhbGwgYWJvdXQgZW5zdXJpbmcgY29tcGF0aWJpbGl0eSBhbmQgZWZmaWNpZW50IG9wZXJhdGlvbiBhY3Jvc3MgZGlmZmVyZW50IGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIGd1ZXNzaW5nIHdlJiMzOTtsbCBzZWUgcGFyYWxsZWwgbG9naWMgb3Igc2ltaWxhciBtZWNoYW5pc21zIHRoZXJlIHRvIGFjY29tcGxpc2ggdGhlIHNhbWUgYXJndW1lbnQgdHJhbnNmZXIsIGJ1dCBwb3RlbnRpYWxseSB1c2luZyBhIG1vcmUgYmFzaWMgb3Igb3B0aW1pemVkIG1ldGhvZCBzdWl0YWJsZSBmb3IgZW52aXJvbm1lbnRzIHdpdGhvdXQgYW4gTU1VLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gYGZsYXQuY2AuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDM6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX01NVSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2JpbmZtdF9mbGF0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYmluZm10X2ZsYXQuYz00MDY9c3RhdGljIGludCBsb2FkX2ZsYXRfZmlsZShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxuLS1cbmZzL2JpbmZtdF9mbGF0LmMtNTI3LVx0ICovXG5mcy9iaW5mbXRfZmxhdC5jOjUyODpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfTU1VKSBcdTAwMjZcdTAwMjYgIShmbGFncyBcdTAwMjYgKEZMQVRfRkxBR19SQU18RkxBVF9GTEFHX0daSVApKSkge1xuZnMvYmluZm10X2ZsYXQuYy01MjktXHRcdC8qXG4tLVxuZnMvYmluZm10X2ZsYXQuYy02MjAtXHRcdGlmIChmbGFncyBcdTAwMjYgRkxBVF9GTEFHX0daSVApIHtcbmZzL2JpbmZtdF9mbGF0LmM6NjIxOiNpZm5kZWYgQ09ORklHX01NVVxuZnMvYmluZm10X2ZsYXQuYy02MjItXHRcdFx0cmVzdWx0ID0gZGVjb21wcmVzc19leGVjKGJwcm0sIHNpemVvZihzdHJ1Y3QgZmxhdF9oZHIpLFxuLS1cbmZzL2JpbmZtdF9mbGF0LmMtNjUzLVx0XHRcdGlmICghSVNfRVJSX1ZBTFVFKHJlc3VsdCkpIHtcbmZzL2JpbmZtdF9mbGF0LmM6NjU0OiNpZm5kZWYgQ09ORklHX01NVVxuZnMvYmluZm10X2ZsYXQuYy02NTUtXHRcdFx0XHRyZXN1bHQgPSBkZWNvbXByZXNzX2V4ZWMoYnBybSwgdGV4dF9sZW4sIChjaGFyICopIGRhdGFwb3MsXG4tLVxuZnMvYmluZm10X2ZsYXQuYy03MDctXHRjdXJyZW50LVx1MDAzZW1tLVx1MDAzZWJyayA9IChjdXJyZW50LVx1MDAzZW1tLVx1MDAzZXN0YXJ0X2JyayAmIzQzOyAzKSBcdTAwMjYgfjM7XG5mcy9iaW5mbXRfZmxhdC5jOjcwODojaWZuZGVmIENPTkZJR19NTVVcbmZzL2JpbmZtdF9mbGF0LmMtNzA5LVx0Y3VycmVudC1cdTAwM2VtbS1cdTAwM2Vjb250ZXh0LmVuZF9icmsgPSBtZW1wICYjNDM7IG1lbXBfc2l6ZSAtIHN0YWNrX2xlbjtcbi0tXG5mcy9iaW5mbXRfZmxhdC5jPTg1NT1zdGF0aWMgaW50IGxvYWRfZmxhdF9iaW5hcnkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbi0tXG5mcy9iaW5mbXRfZmxhdC5jLTg3Mi1cdCAqL1xuZnMvYmluZm10X2ZsYXQuYzo4NzM6I2lmbmRlZiBDT05GSUdfTU1VXG5mcy9iaW5mbXRfZmxhdC5jLTg3NC1cdHN0YWNrX2xlbiAmIzQzOz0gUEFHRV9TSVpFICogTUFYX0FSR19QQUdFUyAtIGJwcm0tXHUwMDNlcDsgLyogdGhlIHN0cmluZ3MgKi9cbi0tXG5mcy9iaW5mbXRfZmxhdC5jLTkwMC1cbmZzL2JpbmZtdF9mbGF0LmM6OTAxOiNpZmRlZiBDT05GSUdfTU1VXG5mcy9iaW5mbXRfZmxhdC5jLTkwMi1cdHJlcyA9IHNldHVwX2FyZ19wYWdlcyhicHJtLCBTVEFDS19UT1AsIEVYU1RBQ0tfREVGQVVMVCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDAzOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NTA5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgZnMvYmluZm10X2ZsYXQuY2AqKgoKT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZmxhdCBiaW5hcnkgZm9ybWF0IGlzIGhhbmRsZWQgd2l0aGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSBob3cgaXQmIzM5O3MgbG9hZGVkIGFuZCBleGVjdXRlZC4gSSBrbm93IHRoZXJlJiMzOTtzIGEgZ29vZCBjaHVuayBvZiBjb2RlIGRlYWxpbmcgd2l0aCB0aGlzIGluIHRoZSBmaWxlc3lzdGVtIGhhbmRsaW5nLiBTbywgSSYjMzk7bSB0aGlua2luZywgbGV0JiMzOTtzIHpvb20gaW4gb24gYGZzL2JpbmZtdF9mbGF0LmNgIGFyb3VuZCBsaW5lIDkwMS4gVGhhdCBmZWVscyBsaWtlIGEgZ29vZCBzcG90IHRvIHN0YXJ0IGRpZ2dpbmcuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgbWVhdCBvZiB0aGUgbG9hZGVyIG9yIGludGVycHJldGVyIGZ1bmN0aW9uIGJlZ2lucy4gSSB3YW50IHRvIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyBhdCB0aGF0IGxldmVsIHRvIHBpZWNlIHRvZ2V0aGVyIHRoZSBsb2FkaW5nIHByb2Nlc3MuIEkgaGF2ZSBhIGh1bmNoIGl0JiMzOTtzIHJlbGF0ZWQgdG8gdGhlIGBsb2FkX2ZsYXRfYmluYXJ5YCBvciBgZXhlY19mbGF0YCBvciBzb21ldGhpbmcgYWxvbmcgdGhvc2UgbGluZXMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSBhdCB0aGF0IGxvY2F0aW9uIGlzIGRvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2JpbmZtdF9mbGF0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg5MDpcdFx0XHRcdFx0bGliaW5mby5saWJfbGlzdFtqXS5zdGFydF9kYXRhIDogVU5MT0FERURfTElCO1xuIDg5MTpcdFx0XHRcdHVuc2lnbmVkIGxvbmcgX191c2VyICpwID0gKHVuc2lnbmVkIGxvbmcgX191c2VyICopXG4gODkyOlx0XHRcdFx0XHRsaWJpbmZvLmxpYl9saXN0W2ldLnN0YXJ0X2RhdGE7XG4gODkzOlx0XHRcdFx0cCAtPSBqICYjNDM7IDE7XG4gODk0Olx0XHRcdFx0aWYgKHB1dF91c2VyKHZhbCwgcCkpXG4gODk1Olx0XHRcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiA4OTY6XHRcdFx0fVxuIDg5NzpcdFx0fVxuIDg5ODpcdFxuIDg5OTpcdFx0c2V0X2JpbmZtdChcdTAwMjZmbGF0X2Zvcm1hdCk7XG4gOTAwOlx0XG4gOTAxOlx0I2lmZGVmIENPTkZJR19NTVVcbiA5MDI6XHRcdHJlcyA9IHNldHVwX2FyZ19wYWdlcyhicHJtLCBTVEFDS19UT1AsIEVYU1RBQ0tfREVGQVVMVCk7XG4gOTAzOlx0XHRpZiAoIXJlcylcbiA5MDQ6XHRcdFx0cmVzID0gY3JlYXRlX2ZsYXRfdGFibGVzKGJwcm0sIGJwcm0tXHUwMDNlcCk7XG4gOTA1Olx0I2Vsc2VcbiA5MDY6XHRcdC8qIFN0YXNoIG91ciBpbml0aWFsIHN0YWNrIHBvaW50ZXIgaW50byB0aGUgbW0gc3RydWN0dXJlICovXG4gOTA3Olx0XHRjdXJyZW50LVx1MDAzZW1tLVx1MDAzZXN0YXJ0X3N0YWNrID1cbiA5MDg6XHRcdFx0KChjdXJyZW50LVx1MDAzZW1tLVx1MDAzZWNvbnRleHQuZW5kX2JyayAmIzQzOyBzdGFja19sZW4gJiM0MzsgMykgXHUwMDI2IH4zKSAtIDQ7XG4gOTA5Olx0XHRwcl9kZWJ1ZyhcJiMzNDtzcD0lbHhcXG5cJiMzNDssIGN1cnJlbnQtXHUwMDNlbW0tXHUwMDNlc3RhcnRfc3RhY2spO1xuIDkxMDpcdFxuIDkxMTpcdFx0LyogY29weSB0aGUgYXJnIHBhZ2VzIG9udG8gdGhlIHN0YWNrICovXG4gOTEyOlx0XHRyZXMgPSB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrKGJwcm0sIFx1MDAyNmN1cnJlbnQtXHUwMDNlbW0tXHUwMDNlc3RhcnRfc3RhY2spO1xuIDkxMzpcdFx0aWYgKCFyZXMpXG4gOTE0Olx0XHRcdHJlcyA9IGNyZWF0ZV9mbGF0X3RhYmxlcyhicHJtLCBjdXJyZW50LVx1MDAzZW1tLVx1MDAzZXN0YXJ0X3N0YWNrKTtcbiA5MTU6XHQjZW5kaWZcbiA5MTY6XHRcdGlmIChyZXMpXG4gOTE3Olx0XHRcdHJldHVybiByZXM7XG4gOTE4Olx0XG4gOTE5Olx0XHQvKiBGYWtlIHNvbWUgcmV0dXJuIGFkZHJlc3NlcyB0byBlbnN1cmUgdGhlIGNhbGwgY2hhaW4gd2lsbFxuIDkyMDpcdFx0ICogaW5pdGlhbGlzZSBsaWJyYXJ5IGluIG9yZGVyIGZvciB1cy4gIFdlIGFyZSByZXF1aXJlZCB0byBjYWxsXG4gOTIxOlx0XHQgKiBsaWIgMSBmaXJzdCwgdGhlbiAyLCAuLi4gYW5kIGZpbmFsbHkgdGhlIG1haW4gcHJvZ3JhbSAoaWQgMCkuXG4gOTIyOlx0XHQgKi9cbiA5MjM6XHRcdHN0YXJ0X2FkZHIgPSBsaWJpbmZvLmxpYl9saXN0WzBdLmVudHJ5O1xuIDkyNDpcdFxuIDkyNTpcdCNpZmRlZiBGTEFUX1BMQVRfSU5JVFxuIDkyNjpcdFx0RkxBVF9QTEFUX0lOSVQocmVncyk7XG4gOTI3Olx0I2VuZGlmXG4gOTI4Olx0XG4gOTI5Olx0XHRmaW5hbGl6ZV9leGVjKGJwcm0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTQwMQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDM4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlJiMzOTtzIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2tgIGlzIG9ubHkgY29tcGlsZWQgd2hlbiBgQ09ORklHX01NVWAgaXMgZGlzYWJsZWQsIGFuZCB0aGF0JiMzOTtzIHRoZSBvbmx5IHBsYWNlIGl0JiMzOTtzIGNhbGxlZC4gSG1tLCBzaW5jZSBzeXprYWxsZXIgZG9lc24mIzM5O3QgdGFyZ2V0IGAhQ09ORklHX01NVWAgc3lzdGVtcywgYW5kIHdlIGNhbiYjMzk7dCBzcGVjaWZ5IGAhQ09ORklHX01NVWAgaW4gYEVuYWJsZUNvbmZpZ3NgIChpdCBoYXMgdG8gYmUgZXhwbGljaXRseSBlbmFibGVkKSwgdGhpcyBjb2RlIGlzIGVzc2VudGlhbGx5IHVucmVhY2hhYmxlIGluIG91ciBmdXp6aW5nIHNldHVwLiBJIHdvbmRlciwgdGhvdWdoLCBhcmUgdGhlcmUgKmFueSogc3l6a2FsbGVyIHRhcmdldHMgb3V0IHRoZXJlIHdoZXJlIGBDT05GSUdfTU1VYCBtaWdodCBiZSBkaXNhYmxlZD8KCk5vdywgdGhlIHByb21wdCBnaXZlcyB1cyBzb21lIGd1aWRhbmNlLiBJdCBzYXlzIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggdGFyZ2V0cyBjb2RlIHRoYXQmIzM5O3MgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZSBlbXVsYXRpb24uIEl0ICppcyogdGVjaG5pY2FsbHkgcG9zc2libGUgdG8gcnVuIGEgbm8tTU1VIGtlcm5lbCBpbiBRRU1VIOKAkyBsaWtlIHdpdGggYHFlbXUtc3lzdGVtLWFybWAgYW5kIGEgbm8tTU1VIG1hY2hpbmUgb3IgYHFlbXUtc3lzdGVtLXJpc2N2NjRgIHdpdGggYSBuby1NTVUgbWFjaGluZS4gQnV0LCBkb2VzIHN5emthbGxlciBoYXZlIGEgc3RhbmRhcmQgc2V0dXAgZm9yIG5vLU1NVSBtYWNoaW5lcz8gSSBkb24mIzM5O3QgdGhpbmsgc28uIFRoZSBwcm9tcHQgYWxzbyByZXF1aXJlcyB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIGNvZGUgaXMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGJ1dCB0aGlzIGNvZGUgKmlzKiByZWFjaGFibGUuCgpUaGUgcHJvbXB0IGFsc28gYXNrcyBmb3IgJiMzNDtrZXJuZWwgY29uZmlnIGZsYWdzIHRoYXQgbXVzdCBiZSBleHBsaWNpdGx5IGVuYWJsZWQgdG8gY29tcGlsZSBhbmQgdGVzdCB0aGUgbW9kaWZpZWQgY29kZS4mIzM0OyBCdXQgaWYgd2UgbmVlZCB0byAqZGlzYWJsZSogYENPTkZJR19NTVVgLCB3ZSBjYW4mIzM5O3QgZG8gaXQgdmlhIGBFbmFibGVDb25maWdzYC4gVGhhdOKAmXMgYSBkZWFkIGVuZC4KCldhaXQsIGlzIHRoZXJlICphbnkqIG90aGVyIHBsYWNlIGB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrYCBnZXRzIGNvbXBpbGVkPyBMZXQgbWUgZG91YmxlLWNoZWNrLiBObywgaXQmIzM5O3Mgb25seSBpbnNpZGUgdGhlIGAjaWZuZGVmIENPTkZJR19NTVVgIGJsb2NrIGluIGBmcy9leGVjLmNgLiBJJiMzOTttIGNlcnRhaW4gdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgcGxhY2VzIHdoZXJlIGl0JiMzOTtzIHVzZWQgZWl0aGVyLgoKTGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrIGFnYWluIGlmIHRoZXJlIGlzIGFueSBvdGhlciBwbGFjZSBpdCBpcyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2JpbmZtdF9lbGZfZmRwaWMuYz00OTY9c3RhdGljIGludCBjcmVhdGVfZWxmX2ZkcGljX3RhYmxlcyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxuLS1cbmZzL2JpbmZtdF9lbGZfZmRwaWMuYy01MjItXHQvKiBzdGFjayB0aGUgcHJvZ3JhbSBhcmd1bWVudHMgYW5kIGVudmlyb25tZW50ICovXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmM6NTIzOlx0aWYgKHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2soYnBybSwgXHUwMDI2c3ApIFx1MDAzYyAwKVxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTUyNC1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4tLVxuZnMvYmluZm10X2ZsYXQuYz04NTU9c3RhdGljIGludCBsb2FkX2ZsYXRfYmluYXJ5KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4tLVxuZnMvYmluZm10X2ZsYXQuYy05MTEtXHQvKiBjb3B5IHRoZSBhcmcgcGFnZXMgb250byB0aGUgc3RhY2sgKi9cbmZzL2JpbmZtdF9mbGF0LmM6OTEyOlx0cmVzID0gdHJhbnNmZXJfYXJnc190b19zdGFjayhicHJtLCBcdTAwMjZjdXJyZW50LVx1MDAzZW1tLVx1MDAzZXN0YXJ0X3N0YWNrKTtcbmZzL2JpbmZtdF9mbGF0LmMtOTEzLVx0aWYgKCFyZXMpXG4tLVxuZnMvZXhlYy5jPTcyNj1FWFBPUlRfU1lNQk9MKHNldHVwX2FyZ19wYWdlcyk7XG4tLVxuZnMvZXhlYy5jLTczMy0gKi9cbmZzL2V4ZWMuYzo3MzQ6aW50IHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2soc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcbmZzL2V4ZWMuYy03MzUtXHRcdFx0ICAgdW5zaWduZWQgbG9uZyAqc3BfbG9jYXRpb24pXG4tLVxuZnMvZXhlYy5jLTc1OS19XG5mcy9leGVjLmM6NzYwOkVYUE9SVF9TWU1CT0wodHJhbnNmZXJfYXJnc190b19zdGFjayk7XG5mcy9leGVjLmMtNzYxLVxuLS1cbmluY2x1ZGUvbGludXgvYmluZm10cy5oPTE0MD1leHRlcm4gaW50IHNldHVwX2FyZ19wYWdlcyhzdHJ1Y3QgbGludXhfYmlucHJtICogYnBybSxcbi0tXG5pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaC0xNDItXHRcdFx0ICAgaW50IGV4ZWN1dGFibGVfc3RhY2spO1xuaW5jbHVkZS9saW51eC9iaW5mbXRzLmg6MTQzOmV4dGVybiBpbnQgdHJhbnNmZXJfYXJnc190b19zdGFjayhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxuaW5jbHVkZS9saW51eC9iaW5mbXRzLmgtMTQ0LVx0XHRcdFx0ICB1bnNpZ25lZCBsb25nICpzcF9sb2NhdGlvbik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDAzOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNzYxCgkJCQkJCQlvdXRwdXQ6IDEyMQoJCQkJCQkJdGhvdWdodHM6IDUyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFzb25pbmcgQWJvdXQgRnV6emluZyBhIE5vbi1NTVUgU3BlY2lmaWMgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgZnVuY3Rpb24gYHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2tgLCBhbmQgaXQgc2VlbXMgdG8gYmUgc29sZWx5IHdpdGhpbiB0aGUgYCNlbHNlYCBibG9jayBvZiBhbiBgI2lmZGVmIENPTkZJR19NTVVgIHByZXByb2Nlc3NvciBkaXJlY3RpdmUuIFRoaXMgbWVhbnMgaXQmIzM5O3Mgb25seSBjb21waWxlZCBhbmQgdXNlZCBpbiBhcmNoaXRlY3R1cmVzIHdoZXJlIGBDT05GSUdfTU1VYCBpcyAqZGlzYWJsZWQqLCByaWdodD8KCkxldCYjMzk7cyBzZWXigKYgbTY4aywgcmlzY3YsIHNoLCB4dGVuc2EsIGFybSBhcmUgYXJjaGl0ZWN0dXJlcyB3aGVyZSBgQ09ORklHX01NVWAgaXMgZWFzaWx5IGRpc2FibGVkLiBTeXprYWxsZXIsIGhvd2V2ZXIsIHByaW1hcmlseSB0YXJnZXRzIHg4Nl82NCwgYXJtNjQsIHJpc2N2NjQsIGFuZCBzMzkweC4gT24gcmlzY3Y2NCwgYENPTkZJR19NTVVgICpjYW4qIGJlIGRpc2FibGVkLCBidXTigKYKCklmIEkgcmV0dXJuIGBXb3J0aEZ1enppbmc9dHJ1ZWAsIEkgaGF2ZSB0byBzcGVjaWZ5IGBFbmFibGVDb25maWdzYC4gSSBjYW4mIzM5O3QgZGlyZWN0bHkgc3BlY2lmeSBgIU1NVWAgdGhlcmUsIHdoaWNoIGlzIGEgcHJvYmxlbS4gSWYgSSByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAsIEkgY2FuIGV4cGxhaW4gdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGZvciBub21tdSBhcmNoaXRlY3R1cmVzIG9ubHksIHdoaWNoIGFyZSBub3QgdHlwaWNhbCBzeXprYWxsZXIgdGFyZ2V0cyB0aGF0IHJlcXVpcmUgZGlzYWJsaW5nIGBDT05GSUdfTU1VYC4KCkhhbmcgb24sIHdoYXQgaWYgSSBqdXN0IHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYCBhbmQgdXNlIHRoZSByZWFzb25pbmcgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgY29tcGlsZWQgZm9yIGAhQ09ORklHX01NVWAga2VybmVscywgd2hpY2ggU3l6a2FsbGVyIHR5cGljYWxseSBkb2VzbiYjMzk7dCBmdXp6IGR1ZSB0byB0aGUgbmVlZCB0byBkaXNhYmxlIGBDT05GSUdfTU1VYCwgc29tZXRoaW5nIEkgY2FuJiMzOTt0IHNwZWNpZnkuCgpBbHRlcm5hdGl2ZWx5LCBjb3VsZCBJIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgIHdpdGggYW4gZW1wdHkgYEVuYWJsZUNvbmZpZ3NgIGFuZCBhZGQgYHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2tgIHRvIGBGb2N1c1N5bWJvbHNgPyBJZiBJIGRpZCB0aGF0LCB0aGUgZnV6emluZyBpbmZyYXN0cnVjdHVyZSAqd291bGQqIHRyeSB0byBmdXp6IGl0LiBCdXQsIGFuZCB0aGlzIGlzIGNydWNpYWwsIGl0ICp3b24mIzM5O3QqIGJlIGNvbXBpbGVkIGluIHRoZSBkZWZhdWx0IGtlcm5lbCB0aGF0IGhhcyBgQ09ORklHX01NVT15YC4gU28gdGhlIGNvZGUgd291bGQgbmV2ZXIgYmUgcmVhY2hlZCwgYW5kIHRoZSBjb3ZlcmFnZSB3b3VsZCBiZSB6ZXJvIGFueXdheS4KClRoZXJlZm9yZSwgdGhlIGJlc3Qgb3B0aW9uIGlzIGNsZWFybHkgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBMZXQgbWUgY29uZmlybSB0aGlzIGlzIGNvcnJlY3TigKYKCk9rYXksIGxldCBtZSBjaGVjayB0aGUgY29kZSBkaXJlY3RseS4gSW4gYGZzL2V4ZWMuY2AsIEkgc2VlOgoKYGBgYwojaWZkZWYgQ09ORklHX01NVQouLi4KaW50IHNldHVwX2FyZ19wYWdlcyguLi4pCi4uLgojZWxzZQouLi4KaW50IHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2soLi4uKQouLi4KI2VuZGlmCmBgYAoKWXVwLiBUaGF0JiMzOTtzICpleGFjdGx5KiBhcyBJIHN1c3BlY3RlZC4gYHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2tgIGlzICpzdHJpY3RseSogd2l0aGluIHRoZSBgI2Vsc2VgIGJsb2NrLiBJdCYjMzk7cyBpbXBvc3NpYmxlIHRvIGNvbXBpbGUgdGhpcyBmdW5jdGlvbiB3aXRoIGBDT05GSUdfTU1VYCBlbmFibGVkLiBBbmQsIHNpbmNlIHN0YW5kYXJkIGtlcm5lbHMgKGVzcGVjaWFsbHkgdGhvc2UgdXNlZCBieSBTeXprYWxsZXIpIGhhdmUgYENPTkZJR19NTVU9eWAsIHRoaXMgY29kZSBpcyBjb21wbGV0ZWx5IGNvbXBpbGVkIG91dC4gVGh1cywgSSB3aWxsIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCwgYW5kIHdpbGwgZXhwbGFpbiB0aGlzIGluIHRoZSBgUmVhc29uaW5nYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDM6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBtb2RpZmllZCBmdW5jdGlvbiBgdHJhbnNmZXJfYXJnc190b19zdGFja2AgaXMgb25seSBjb21waWxlZCBhbmQgdXNlZCBvbiBub21tdSBhcmNoaXRlY3R1cmVzIChpdCBpcyBsb2NhdGVkIGluc2lkZSBhbiBgI2lmbmRlZiBDT05GSUdfTU1VYCBibG9jayBpbiBgZnMvZXhlYy5jYCkuIFN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzIGFuZCB2aXJ0dWFsaXplZCBzZXR1cHMgKGxpa2UgeDg2XzY0L2FybTY0IFFFTVUgb3IgR0NFKSBydW4gd2l0aCBgQ09ORklHX01NVT15YCwgbWVhbmluZyB0aGlzIGNvZGUgaXMgY29tcGxldGVseSBjb21waWxlZCBvdXQgYW5kIHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgbW9kaWZpZWQgZnVuY3Rpb24gYHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2tgIGlzIG9ubHkgY29tcGlsZWQgYW5kIHVzZWQgb24gbm9tbXUgYXJjaGl0ZWN0dXJlcyAoaXQgaXMgbG9jYXRlZCBpbnNpZGUgYW4gYCNpZm5kZWYgQ09ORklHX01NVWAgYmxvY2sgaW4gYGZzL2V4ZWMuY2ApLiBTdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cyBhbmQgdmlydHVhbGl6ZWQgc2V0dXBzIChsaWtlIHg4Nl82NC9hcm02NCBRRU1VIG9yIEdDRSkgcnVuIHdpdGggYENPTkZJR19NTVU9eWAsIG1lYW5pbmcgdGhpcyBjb2RlIGlzIGNvbXBsZXRlbHkgY29tcGlsZWQgb3V0IGFuZCB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMzo1Mzo1OS4wMjExMjU1NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4MjQ3MzE2MDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBtb2RpZmllZCBmdW5jdGlvbiBgdHJhbnNmZXJfYXJnc190b19zdGFja2AgaXMgb25seSBjb21waWxlZCBhbmQgdXNlZCBvbiBub21tdSBhcmNoaXRlY3R1cmVzIChpdCBpcyBsb2NhdGVkIGluc2lkZSBhbiBgI2lmbmRlZiBDT05GSUdfTU1VYCBibG9jayBpbiBgZnMvZXhlYy5jYCkuIFN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzIGFuZCB2aXJ0dWFsaXplZCBzZXR1cHMgKGxpa2UgeDg2XzY0L2FybTY0IFFFTVUgb3IgR0NFKSBydW4gd2l0aCBgQ09ORklHX01NVT15YCwgbWVhbmluZyB0aGlzIGNvZGUgaXMgY29tcGxldGVseSBjb21waWxlZCBvdXQgYW5kIHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDM6NTM6NTkuMDIxMTMxNDlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3NDA3Mjg5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDY0MTI1ODJjNzYzNWE0YzFhZmIyMzc4YzJiNWI2MjQ1ZmEwMDNhNzFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMjIgMDM6NTM6NTcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jXFxuaW5kZXggZDU5OTNjZWRjODI5YWYuLmM3YjhmMmQ2MzY2YzQ0IDEwMDY0NFxcbi0tLSBhL2ZzL2V4ZWMuY1xcbisrKyBiL2ZzL2V4ZWMuY1xcbkBAIC03NDAsNyArNzQwLDcgQEAgaW50IHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2soc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcXG4gXFx0c3RvcCA9IGJwcm0tXFx1MDAzZXAgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gXFx0c3AgPSAqc3BfbG9jYXRpb247XFxuIFxcbi1cXHRmb3IgKGluZGV4ID0gTUFYX0FSR19QQUdFUyAtIDE7IGluZGV4IFxcdTAwM2U9IHN0b3A7IGluZGV4LS0pIHtcXG4rXFx0Zm9yIChpbmRleCA9IE1BWF9BUkdfUEFHRVM7IGluZGV4LS0gXFx1MDAzZSBzdG9wOyApIHtcXG4gXFx0XFx0dW5zaWduZWQgaW50IG9mZnNldCA9IGluZGV4ID09IHN0b3AgPyBicHJtLVxcdTAwM2VwIFxcdTAwMjYgflBBR0VfTUFTSyA6IDA7XFxuIFxcdFxcdGNoYXIgKnNyYyA9IGttYXBfbG9jYWxfcGFnZShicHJtLVxcdTAwM2VwYWdlW2luZGV4XSkgKyBvZmZzZXQ7XFxuIFxcdFxcdHNwIC09IFBBR0VfU0laRSAtIG9mZnNldDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDM6NTM6NTkuMzk1ODQzNzIzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTc4NzI1OTE4NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrYCBpcyBvbmx5IGNvbXBpbGVkIGFuZCB1c2VkIG9uIG5vbW11IGFyY2hpdGVjdHVyZXMgKGl0IGlzIGxvY2F0ZWQgaW5zaWRlIGFuIGAjaWZuZGVmIENPTkZJR19NTVVgIGJsb2NrIGluIGBmcy9leGVjLmNgKS4gU3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMgYW5kIHZpcnR1YWxpemVkIHNldHVwcyAobGlrZSB4ODZfNjQvYXJtNjQgUUVNVSBvciBHQ0UpIHJ1biB3aXRoIGBDT05GSUdfTU1VPXlgLCBtZWFuaW5nIHRoaXMgY29kZSBpcyBjb21wbGV0ZWx5IGNvbXBpbGVkIG91dCBhbmQgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDY0MTI1ODJjNzYzNWE0YzFhZmIyMzc4YzJiNWI2MjQ1ZmEwMDNhNzFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAyMiAwMzo1Mzo1NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuY1xuaW5kZXggZDU5OTNjZWRjODI5YWYuLmM3YjhmMmQ2MzY2YzQ0IDEwMDY0NFxuLS0tIGEvZnMvZXhlYy5jXG4rKysgYi9mcy9leGVjLmNcbkBAIC03NDAsNyArNzQwLDcgQEAgaW50IHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2soc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcbiBcdHN0b3AgPSBicHJtLVx1MDAzZXAgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gXHRzcCA9ICpzcF9sb2NhdGlvbjtcbiBcbi1cdGZvciAoaW5kZXggPSBNQVhfQVJHX1BBR0VTIC0gMTsgaW5kZXggXHUwMDNlPSBzdG9wOyBpbmRleC0tKSB7XG4rXHRmb3IgKGluZGV4ID0gTUFYX0FSR19QQUdFUzsgaW5kZXgtLSBcdTAwM2Ugc3RvcDsgKSB7XG4gXHRcdHVuc2lnbmVkIGludCBvZmZzZXQgPSBpbmRleCA9PSBzdG9wID8gYnBybS1cdTAwM2VwIFx1MDAyNiB+UEFHRV9NQVNLIDogMDtcbiBcdFx0Y2hhciAqc3JjID0ga21hcF9sb2NhbF9wYWdlKGJwcm0tXHUwMDNlcGFnZVtpbmRleF0pICsgb2Zmc2V0O1xuIFx0XHRzcCAtPSBQQUdFX1NJWkUgLSBvZmZzZXQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMzo1Mzo1OS4zOTU4NDQ5MjNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTQwNzYxNjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGZzL2V4ZWMuY2AgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIHRvdWNoaW5nIGBmcy9leGVjLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrYCBmdW5jdGlvbi4gVGhlIGtleSBjaGFuZ2UgaGVyZSBpcyBpbiB0aGUgbG9vcCB0aGF0IGhhbmRsZXMgYXJndW1lbnQgdHJhbnNmZXIuIFByZXZpb3VzbHksIGl0IGxvb2tzIGxpa2UgdGhlIGxvb3AgY29uZGl0aW9uIHdhcyBkZWNyZW1lbnRpbmcgYGluZGV4YCAqYWZ0ZXIqIHRoZSBjb21wYXJpc29uLCBzdGFydGluZyBmcm9tIGBNQVhfQVJHX1BBR0VTIC0gMWAgYW5kIGdvaW5nIGRvd24gdG8gYHN0b3BgLiBUaGUgcGF0Y2ggdXBkYXRlcyB0aGlzIHRvIGEgcHJlLWRlY3JlbWVudCBpbiB0aGUgY29tcGFyaXNvbiBgZm9yIChpbmRleCA9IE1BWF9BUkdfUEFHRVM7IGluZGV4LS0gXHUwMDNlIHN0b3A7IClgLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGNoYW5nZSB3YXMgbWFkZS4gRmlyc3QsIEknbGwgcHVsbCB1cCBgZnMvZXhlYy5jYCBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBjb250ZXh0IG9mIGB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrYC4gTGV0J3Mgc2VlIGhvdyB0aGlzIGNoYW5nZSBpbXBhY3RzIGFyZ3VtZW50IGhhbmRsaW5nLCB0aGUgcG90ZW50aWFsIGVkZ2UgY2FzZXMsIGFuZCBhbnkgaW1wbGljYXRpb25zIG9uIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMgZHVyaW5nIHByb2Nlc3MgY3JlYXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2Vzbid0IGludHJvZHVjZSBhbnkgc3VidGxlIG9mZi1ieS1vbmUgZXJyb3JzIG9yIHVuaW50ZW5kZWQgc2lkZSBlZmZlY3RzLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBjcml0aWNhbCBuYXR1cmUgb2YgYXJndW1lbnQgcGFzc2luZyBpbiBwcm9jZXNzIGV4ZWN1dGlvbi4gVGhpcyBsb29rcyBsaWtlIGEgcG90ZW50aWFsbHkgaW1wb3J0YW50IGNoYW5nZSBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdCBmdWxseSBiZWZvcmUgZXZlbiB0aGlua2luZyBhYm91dCBjb21taXR0aW5nIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTI0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMzo1NDowMi45MzY2MDg1NzFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY3Njk0NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHJhbnNmZXJfYXJnc190b19zdGFja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leGVjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXhlYy5jPTcyNj1FWFBPUlRfU1lNQk9MKHNldHVwX2FyZ19wYWdlcyk7XFxuLS1cXG5mcy9leGVjLmMtNzMzLSAqL1xcbmZzL2V4ZWMuYzo3MzQ6aW50IHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2soc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcXG5mcy9leGVjLmMtNzM1LVxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgKnNwX2xvY2F0aW9uKVxcbi0tXFxuZnMvZXhlYy5jLTc1OS19XFxuZnMvZXhlYy5jOjc2MDpFWFBPUlRfU1lNQk9MKHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2spO1xcbmZzL2V4ZWMuYy03NjEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDAzOjU0OjAyLjk5MzM4NDAwM1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NTkyNTg4NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkFoLCB0aGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgaGVhdnkgbGlmdGluZyBvZiBwYXJhbWV0ZXIgcGFzc2luZyBoYXBwZW5zLlwiIEl0J3MgdGhlIHBvaW50IHdoZXJlIGFyZ3VtZW50cyBnZXQgbW92ZWQgZnJvbSB0aGVpciBjYWxsaW5nIGNvbnZlbnRpb24gbG9jYXRpb24g4oCTIHJlZ2lzdGVycywgcGVyaGFwcywgb3IgbWVtb3J5IGxvY2F0aW9ucyBvbiB0aGUgY2FsbGVyJ3Mgc3RhY2sg4oCTIHRvIHRoZSBjYWxsZWUncyBzdGFjayBmcmFtZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXJ0ICpwZXJmZWN0bHkqLCBhcyBpdCdzIGZ1bmRhbWVudGFsIHRvIGhvdyB0aGUgZW50aXJlIHN5c3RlbSBjb21tdW5pY2F0ZXMgYmV0d2VlbiBmdW5jdGlvbnMuXG5cbkknbSBpbW1lZGlhdGVseSBsb29raW5nIGZvciB0aGUgdW5kZXJseWluZyBhcmNoaXRlY3R1cmUuIElzIHRoaXMgeDg2LCBBUk0sIFJJU0MtViwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSByZWdpc3RlciB1c2FnZSBhbmQgbWVtb3J5IGFkZHJlc3Npbmcgd2lsbCBiZSBkcmFzdGljYWxseSBkaWZmZXJlbnQgZGVwZW5kaW5nIG9uIHRoZSB0YXJnZXQuIEknbSBhbHNvIGNvbnNpZGVyaW5nIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24uIElzIGl0IHRoZSBzdGFuZGFyZCBDIGNhbGxpbmcgY29udmVudGlvbiAoY2RlY2wsIHN0ZGNhbGwsIGZhc3RjYWxsKSwgb3Igc29tZXRoaW5nIG1vcmUgc3BlY2lhbGl6ZWQgbGlrZSBTeXN0ZW0gViBBTUQ2NCBvciB0aGUgV2luZG93cyB4NjQgY2FsbGluZyBjb252ZW50aW9uPyBUaG9zZSBkZXRhaWxzIHNoYXBlIGV2ZXJ5dGhpbmcuXG5cbkknbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgZXJyb3IgaGFuZGxpbmcuIFdoYXQgaGFwcGVucyBpZiB0aGVyZSBhcmVuJ3QgZW5vdWdoIHJlZ2lzdGVycyBhdmFpbGFibGUgZm9yIGFsbCB0aGUgYXJndW1lbnRzPyBPciBpZiBhIHBhcnRpY3VsYXIgYXJndW1lbnQgZXhjZWVkcyB0aGUgc2l6ZSBvZiBhIHJlZ2lzdGVyPyBJcyB0aGVyZSBhIGZhbGxiYWNrIG1lY2hhbmlzbSwgbGlrZSBwdXNoaW5nIHRoZSBleGNlc3Mgb250byB0aGUgc3RhY2s/IElmIHRoZXJlJ3MgYW4gaXNzdWUgd2l0aCB0aGUgcGFyYW1ldGVycyB0aGVtc2VsdmVzLCBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIG1pZ2h0IGJlaGF2ZSBvciBldmVuIHRyaWdnZXIgZXJyb3JzLlxuXG5GdXJ0aGVybW9yZSwgSSdsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzLiBDYW4gdGhlIGFyZ3VtZW50cyBiZSBtb3ZlZCBtb3JlIGVmZmljaWVudGx5PyBBcmUgdGhlcmUgYW55IHJlZHVuZGFudCBtb3ZlcyB0aGF0IGNhbiBiZSBlbGltaW5hdGVkPyBQZXJoYXBzIHRoZXJlJ3MgYW4gb3Bwb3J0dW5pdHkgdG8gdXNlIGEgcmVnaXN0ZXIgc3BpbGwvcmVzdG9yZSBzdHJhdGVneS4gT3IgcG9zc2libHksIHJlZ2lzdGVyIGFsbG9jYXRpb24gbmVlZHMgdG8gYmUgc2NydXRpbml6ZWQgaGVyZSBhbmQgaG93IGl0IHBsYXlzIHdpdGggdGhpcyBmdW5jdGlvbi5cblxuVWx0aW1hdGVseSwgSSB3YW50IHRvIGdyYXNwIHRoZSBlc3NlbmNlIG9mIGFyZ3VtZW50IHRyYW5zZmVyLiBEb2VzIGl0IGltcGFjdCBwZXJmb3JtYW5jZSwgYW5kIHdoZXJlIGFuZCB3aHk/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NTksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMzo1NDowNi42NTI2NDQ5MjJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTM1NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXhlYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDczMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDczMDpcXHQvKlxcbiA3MzE6XFx0ICogVHJhbnNmZXIgdGhlIHByb2dyYW0gYXJndW1lbnRzIGFuZCBlbnZpcm9ubWVudCBmcm9tIHRoZSBob2xkaW5nIHBhZ2VzXFxuIDczMjpcXHQgKiBvbnRvIHRoZSBzdGFjay4gVGhlIHByb3ZpZGVkIHN0YWNrIHBvaW50ZXIgaXMgYWRqdXN0ZWQgYWNjb3JkaW5nbHkuXFxuIDczMzpcXHQgKi9cXG4gNzM0OlxcdGludCB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXFxuIDczNTpcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nICpzcF9sb2NhdGlvbilcXG4gNzM2OlxcdHtcXG4gNzM3OlxcdFxcdHVuc2lnbmVkIGxvbmcgaW5kZXgsIHN0b3AsIHNwO1xcbiA3Mzg6XFx0XFx0aW50IHJldCA9IDA7XFxuIDczOTpcXHRcXG4gNzQwOlxcdFxcdHN0b3AgPSBicHJtLVxcdTAwM2VwIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuIDc0MTpcXHRcXHRzcCA9ICpzcF9sb2NhdGlvbjtcXG4gNzQyOlxcdFxcbiA3NDM6XFx0XFx0Zm9yIChpbmRleCA9IE1BWF9BUkdfUEFHRVM7IGluZGV4LS0gXFx1MDAzZSBzdG9wOyApIHtcXG4gNzQ0OlxcdFxcdFxcdHVuc2lnbmVkIGludCBvZmZzZXQgPSBpbmRleCA9PSBzdG9wID8gYnBybS1cXHUwMDNlcCBcXHUwMDI2IH5QQUdFX01BU0sgOiAwO1xcbiA3NDU6XFx0XFx0XFx0Y2hhciAqc3JjID0ga21hcF9sb2NhbF9wYWdlKGJwcm0tXFx1MDAzZXBhZ2VbaW5kZXhdKSArIG9mZnNldDtcXG4gNzQ2OlxcdFxcdFxcdHNwIC09IFBBR0VfU0laRSAtIG9mZnNldDtcXG4gNzQ3OlxcdFxcdFxcdGlmIChjb3B5X3RvX3VzZXIoKHZvaWQgKikgc3AsIHNyYywgUEFHRV9TSVpFIC0gb2Zmc2V0KSAhPSAwKVxcbiA3NDg6XFx0XFx0XFx0XFx0cmV0ID0gLUVGQVVMVDtcXG4gNzQ5OlxcdFxcdFxcdGt1bm1hcF9sb2NhbChzcmMpO1xcbiA3NTA6XFx0XFx0XFx0aWYgKHJldClcXG4gNzUxOlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiA3NTI6XFx0XFx0fVxcbiA3NTM6XFx0XFxuIDc1NDpcXHRcXHRicHJtLVxcdTAwM2VleGVjICs9ICpzcF9sb2NhdGlvbiAtIE1BWF9BUkdfUEFHRVMgKiBQQUdFX1NJWkU7XFxuIDc1NTpcXHRcXHQqc3BfbG9jYXRpb24gPSBzcDtcXG4gNzU2OlxcdFxcbiA3NTc6XFx0b3V0OlxcbiA3NTg6XFx0XFx0cmV0dXJuIHJldDtcXG4gNzU5OlxcdH1cXG4gNzYwOlxcdEVYUE9SVF9TWU1CT0wodHJhbnNmZXJfYXJnc190b19zdGFjayk7XFxuIDc2MTpcXHRcXG4gNzYyOlxcdCNlbmRpZiAvKiBDT05GSUdfTU1VICovXFxuIDc2MzpcXHRcXG4gNzY0OlxcdC8qXFxuIDc2NTpcXHQgKiBPbiBzdWNjZXNzLCBjYWxsZXIgbXVzdCBjYWxsIGRvX2Nsb3NlX2V4ZWNhdCgpIG9uIHRoZSByZXR1cm5lZFxcbiA3NjY6XFx0ICogc3RydWN0IGZpbGUgdG8gY2xvc2UgaXQuXFxuIDc2NzpcXHQgKi9cXG4gNzY4OlxcdHN0YXRpYyBzdHJ1Y3QgZmlsZSAqZG9fb3Blbl9leGVjYXQoaW50IGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUsIGludCBmbGFncylcXG4gNzY5OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDM6NTQ6MDYuNjUyNzYwNDUyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQzMTc2NjUwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgSW50ZWdlciBPdmVyZmxvdyBpbiBgdHJhbnNmZXJfYXJnc190b19zdGFja2AqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIHByZXR0eSBuYXN0eSBwb3RlbnRpYWwgYnVnIGluIHRoZSBgdHJhbnNmZXJfYXJnc190b19zdGFja2AgbG9vcC4gSXQgbG9va3MgbGlrZSB3ZSd2ZSBnb3QgYW4gdW5kZXJmbG93IG9yIG9mZi1ieS1vbmUgc2l0dWF0aW9uLCB3aGljaCBjb3VsZCBiZSBleHBsb2l0ZWQuIExldCdzIHNlZS4uLiB0aGUgYGluZGV4YCB2YXJpYWJsZSBpcyBhbiBgdW5zaWduZWQgbG9uZ2AsIHJpZ2h0PyBUaGF0J3Mgb3VyIGZpcnN0IGNsdWUuIElmIGBzdG9wYCBpcyB6ZXJvLCB0aGVuIGBpbmRleCBcdTAwM2U9IHN0b3BgIHdpbGwgKmFsd2F5cyogYmUgdHJ1ZSBpZiBgaW5kZXhgIGhhcHBlbnMgdG8gd3JhcCBhcm91bmQuXG5cbkFoLCBJIHNlZSBpdCBub3cuIFRoZSBvcmlnaW5hbCBjb2RlIGhhcyBzb21ldGhpbmcgbGlrZSBgaW5kZXggPSBNQVhfQVJHX1BBR0VTIC0gMTsgaW5kZXggXHUwMDNlPSBzdG9wOyBpbmRleC0tYC4gSWYgYHN0b3BgIGlzIHplcm8sIHRoZSBsb29wIHdpbGwgY291bnQgZG93biB0byB6ZXJvLCB0aGVuIHRoZSBwb3N0LWRlY3JlbWVudCB3aWxsIG1ha2UgaXQgd3JhcCB0byBgVUxPTkdfTUFYYC4gQW5kLCBvZiBjb3Vyc2UsIGBVTE9OR19NQVggXHUwMDNlPSAwYCBpcyAqYWx3YXlzKiB0cnVlISAgVGhhdCdzIGEgdGV4dGJvb2sgaW5maW5pdGUgbG9vcCBvciwgd29yc2UsIGFuIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2VzcyBqdXN0IHdhaXRpbmcgdG8gaGFwcGVuLlxuXG5UaGUgZml4LCB1c2luZyBgZm9yIChpbmRleCA9IE1BWF9BUkdfUEFHRVM7IGluZGV4LS0gXHUwMDNlIHN0b3A7IClgLCBzZWVtcyBjbGV2ZXIuIEl0IGNsZXZlcmx5IGZsaXBzIHRoZSBjb21wYXJpc29uIGFyb3VuZC4gV2hlbiBgaW5kZXhgIGlzIDAsIGBpbmRleC0tIFx1MDAzZSBzdG9wYCBiZWNvbWVzIGAwIFx1MDAzZSAwYCwgd2hpY2ggaXMgZmFsc2UsIHRlcm1pbmF0aW5nIHRoZSBsb29wLiAgRXZlbiB3aGVuIGl0IHdyYXBzIHRoZSBjb25kaXRpb24gdGVybWluYXRlcyB0aGUgbG9vcC4gV2FpdC4uLiBpdCdzIGBpbmRleC0tIFx1MDAzZSBzdG9wYC4gVGhlIHBvc3QtZGVjcmVtZW50IGlzIGNydWNpYWwuIExldCdzIHRoaW5rIHRoaXMgdGhyb3VnaDogSWYgYGluZGV4YCBpcyAxLCB0aGVuIGAxIFx1MDAzZSAwYCBpcyB0cnVlIGFuZCBpbmRleCBiZWNvbWVzIHplcm8uIGlmIGBpbmRleGAgaXMgMCwgdGhlbiBgMCBcdTAwM2UgMGAgaXMgZmFsc2UsIGFuZCBgaW5kZXhgIGJlY29tZXMgYFVMT05HX01BWGAsIHRlcm1pbmF0aW5nIHRoZSBsb29wLiBJJ20gc2F0aXNmaWVkLiBUaGlzIHJlc29sdmVzIHRoZSBpc3N1ZSBieSBjbGV2ZXJseSBpbnZlcnRpbmcgdGhlIGxvb3AgY29uZGl0aW9uLCBwcmV2ZW50aW5nIHRoZSB3cmFwYXJvdW5kIGFuZCBlbnN1cmluZyB0ZXJtaW5hdGlvbi5cblxuVGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4IGZvciBhIGJ1ZyBpbiBgZnMvZXhlYy5jYC4gU2VlbXMgc29saWQuIEJ1dCwgYmVmb3JlIEkgbWFyayB0aGlzIGFzIGNvbXBsZXRlbHkgcmVzb2x2ZWQsIGxldCdzIG1ha2Ugc3VyZSBgdHJhbnNmZXJfYXJnc190b19zdGFja2AgaXMgZXZlbiAqcmVhY2hhYmxlKi4gV2UgZG9uJ3Qgd2FudCB0byBmaXggY29kZSB0aGF0J3MgbmV2ZXIgdXNlZCwgYWx0aG91Z2ggaXQncyBhbHdheXMgYSBnb29kIHRoaW5nIHRvIGZpeCBpdCBpZiBpdCdzIHRoZXJlLiBTbywgd2hlcmUgaXMgaXQgY2FsbGVkPyBBIHF1aWNrIGNoZWNrIG9mIGBmcy9leGVjLmNgIGFuZCBvdGhlciBwb3RlbnRpYWwgYmluYXJ5IGZvcm1hdHMgc2hvdWxkIGRvIHRoZSB0cmljay5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ2NCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDAzOjU0OjEzLjA4NDUzMDUwNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzUzMjc4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9iaW5mbXRfZWxmX2ZkcGljLmM9NDk2PXN0YXRpYyBpbnQgY3JlYXRlX2VsZl9mZHBpY190YWJsZXMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcXG4tLVxcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYy01MjItXFx0Lyogc3RhY2sgdGhlIHByb2dyYW0gYXJndW1lbnRzIGFuZCBlbnZpcm9ubWVudCAqL1xcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYzo1MjM6XFx0aWYgKHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2soYnBybSwgXFx1MDAyNnNwKSBcXHUwMDNjIDApXFxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTUyNC1cXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4tLVxcbmZzL2JpbmZtdF9mbGF0LmM9ODU1PXN0YXRpYyBpbnQgbG9hZF9mbGF0X2JpbmFyeShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbi0tXFxuZnMvYmluZm10X2ZsYXQuYy05MTEtXFx0LyogY29weSB0aGUgYXJnIHBhZ2VzIG9udG8gdGhlIHN0YWNrICovXFxuZnMvYmluZm10X2ZsYXQuYzo5MTI6XFx0cmVzID0gdHJhbnNmZXJfYXJnc190b19zdGFjayhicHJtLCBcXHUwMDI2Y3VycmVudC1cXHUwMDNlbW0tXFx1MDAzZXN0YXJ0X3N0YWNrKTtcXG5mcy9iaW5mbXRfZmxhdC5jLTkxMy1cXHRpZiAoIXJlcylcXG4tLVxcbmZzL2V4ZWMuYz03MjY9RVhQT1JUX1NZTUJPTChzZXR1cF9hcmdfcGFnZXMpO1xcbi0tXFxuZnMvZXhlYy5jLTczMy0gKi9cXG5mcy9leGVjLmM6NzM0OmludCB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXFxuZnMvZXhlYy5jLTczNS1cXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nICpzcF9sb2NhdGlvbilcXG4tLVxcbmZzL2V4ZWMuYy03NTktfVxcbmZzL2V4ZWMuYzo3NjA6RVhQT1JUX1NZTUJPTCh0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrKTtcXG5mcy9leGVjLmMtNzYxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMzo1NDoxMy4xNzIwNzIwM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNTI1MTAxNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBDb2RlJ3MgSW50ZXJhY3Rpb24gd2l0aCBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBleGVjdXRhYmxlIGxvYWRpbmcsIGFuZCBJJ3ZlIGhpdCBhIHNwZWNpZmljIGZ1bmN0aW9uLCBgdHJhbnNmZXJfYXJnc190b19zdGFja2AuIEknbSBzZWVpbmcgaXQncyB1dGlsaXplZCBpbiBhIGNvdXBsZSBvZiBwbGFjZXMsIG5hbWVseSBpbiBgZnMvYmluZm10X2VsZl9mZHBpYy5jYCBhbmQgYGZzL2JpbmZtdF9mbGF0LmNgLiBCdXQgbm93LCBJJ20gbm90aWNpbmcgc29tZXRoaW5nIHBvdGVudGlhbGx5IHNpZ25pZmljYW50IGluIGBmcy9leGVjLmNgOiB0aGVyZSdzIGEgYCNlbmRpZiAvKiBDT05GSUdfTU1VICovYCBpbW1lZGlhdGVseSBhZnRlciBgdHJhbnNmZXJfYXJnc190b19zdGFja2AuIFRoaXMgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgbXkgdGhvdWdodCBwcm9jZXNzIHRvIGZ1cnRoZXIgaW52ZXN0aWdhdGUuIEl0IHN1Z2dlc3RzIHRoYXQgdGhlcmUncyBjb25kaXRpb25hbCBjb21waWxhdGlvbiBoYXBwZW5pbmcgaGVyZSwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrYCBpcyBhY3R1YWxseSAqaW5zaWRlKiBhIGAjaWZuZGVmIENPTkZJR19NTVVgIGJsb2NrLiBUaGlzIGNvdWxkIGJlIGNydWNpYWwgdG8gaG93IHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgY2FsbGVkLCBhcyBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBNTVUgaXMgYSBmYWN0b3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MjksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMzo1NDoxNi4yMjQ1ODQ3NDNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4ZWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MDA6XFx0XFx0dm1fZmxhZ3NfY2xlYXIodm1hLCBWTV9TVEFDS19JTkNPTVBMRVRFX1NFVFVQKTtcXG4gNzAxOlxcdFxcbiA3MDI6XFx0XFx0c3RhY2tfZXhwYW5kID0gMTMxMDcyVUw7IC8qIHJhbmRvbWx5IDMyKjRrIChvciAyKjY0aykgcGFnZXMgKi9cXG4gNzAzOlxcdFxcdHN0YWNrX3NpemUgPSB2bWEtXFx1MDAzZXZtX2VuZCAtIHZtYS1cXHUwMDNldm1fc3RhcnQ7XFxuIDcwNDpcXHRcXHQvKlxcbiA3MDU6XFx0XFx0ICogQWxpZ24gdGhpcyBkb3duIHRvIGEgcGFnZSBib3VuZGFyeSBhcyBleHBhbmRfc3RhY2tcXG4gNzA2OlxcdFxcdCAqIHdpbGwgYWxpZ24gaXQgdXAuXFxuIDcwNzpcXHRcXHQgKi9cXG4gNzA4OlxcdFxcdHJsaW1fc3RhY2sgPSBicHJtLVxcdTAwM2VybGltX3N0YWNrLnJsaW1fY3VyIFxcdTAwMjYgUEFHRV9NQVNLO1xcbiA3MDk6XFx0XFxuIDcxMDpcXHRcXHRzdGFja19leHBhbmQgPSBtaW4ocmxpbV9zdGFjaywgc3RhY2tfc2l6ZSArIHN0YWNrX2V4cGFuZCk7XFxuIDcxMTpcXHRcXG4gNzEyOlxcdCNpZmRlZiBDT05GSUdfU1RBQ0tfR1JPV1NVUFxcbiA3MTM6XFx0XFx0c3RhY2tfYmFzZSA9IHZtYS1cXHUwMDNldm1fc3RhcnQgKyBzdGFja19leHBhbmQ7XFxuIDcxNDpcXHQjZWxzZVxcbiA3MTU6XFx0XFx0c3RhY2tfYmFzZSA9IHZtYS1cXHUwMDNldm1fZW5kIC0gc3RhY2tfZXhwYW5kO1xcbiA3MTY6XFx0I2VuZGlmXFxuIDcxNzpcXHRcXHRjdXJyZW50LVxcdTAwM2VtbS1cXHUwMDNlc3RhcnRfc3RhY2sgPSBicHJtLVxcdTAwM2VwO1xcbiA3MTg6XFx0XFx0cmV0ID0gZXhwYW5kX3N0YWNrX2xvY2tlZCh2bWEsIHN0YWNrX2Jhc2UpO1xcbiA3MTk6XFx0XFx0aWYgKHJldClcXG4gNzIwOlxcdFxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuIDcyMTpcXHRcXG4gNzIyOlxcdG91dF91bmxvY2s6XFxuIDcyMzpcXHRcXHRtbWFwX3dyaXRlX3VubG9jayhtbSk7XFxuIDcyNDpcXHRcXHRyZXR1cm4gcmV0O1xcbiA3MjU6XFx0fVxcbiA3MjY6XFx0RVhQT1JUX1NZTUJPTChzZXR1cF9hcmdfcGFnZXMpO1xcbiA3Mjc6XFx0XFxuIDcyODpcXHQjZWxzZVxcbiA3Mjk6XFx0XFxuIDczMDpcXHQvKlxcbiA3MzE6XFx0ICogVHJhbnNmZXIgdGhlIHByb2dyYW0gYXJndW1lbnRzIGFuZCBlbnZpcm9ubWVudCBmcm9tIHRoZSBob2xkaW5nIHBhZ2VzXFxuIDczMjpcXHQgKiBvbnRvIHRoZSBzdGFjay4gVGhlIHByb3ZpZGVkIHN0YWNrIHBvaW50ZXIgaXMgYWRqdXN0ZWQgYWNjb3JkaW5nbHkuXFxuIDczMzpcXHQgKi9cXG4gNzM0OlxcdGludCB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXFxuIDczNTpcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nICpzcF9sb2NhdGlvbilcXG4gNzM2OlxcdHtcXG4gNzM3OlxcdFxcdHVuc2lnbmVkIGxvbmcgaW5kZXgsIHN0b3AsIHNwO1xcbiA3Mzg6XFx0XFx0aW50IHJldCA9IDA7XFxuIDczOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDM6NTQ6MTYuMjI0Njk0OTYzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMjc0MzkxNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyB0aGUgc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbnZlc3RpZ2F0aW5nIGB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrYCdzIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uKipcblxuQWxyaWdodCwgdGhhdCdzIGludGVyZXN0aW5nLiBJIGp1c3Qgbm90aWNlZCB0aGF0IGB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrYCBpcyBuZXN0bGVkIHdpdGhpbiB0aGUgYCNlbHNlYCBibG9jayBvZiBhbiBgI2lmZGVmIENPTkZJR19NTVVgIGRpcmVjdGl2ZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpbXBsaWVzIHRoYXQgZnVuY3Rpb24gaXMgb25seSBjb21waWxlZCBhbmQgaW5jbHVkZWQgd2hlbiBgQ09ORklHX01NVWAgaXMgKm5vdCogZGVmaW5lZC4gT2YgY291cnNlLCB0aGF0J3MgdGhlIG5hdHVyZSBvZiBgI2Vsc2VgLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIGFzc3VtcHRpb24gcXVpY2tseS5cblxuSSdtIHRoaW5raW5nIEknbGwganVtcCBvdmVyIHRvIGBmcy9leGVjLmNgIGFyb3VuZCBsaW5lIDYwMCBvciBzby4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gdmVyaWZ5IGhvdyB0aGUgY29kZSBiZWhhdmVzIHdoZW4gdGhlIE1NVSBpcyBkaXNhYmxlZC4gSSdtIGN1cmlvdXMgdG8gc2VlIGhvdyBhcmd1bWVudHMgYXJlIGhhbmRsZWQgaW4gdGhhdCBzY2VuYXJpby4gUGVyaGFwcyB0aGVyZSdzIGFuIGFsdGVybmF0ZSBtZWNoYW5pc20gb3Igc29tZSBvcHRpbWl6YXRpb24gaW4gcGxhY2UuIFRpbWUgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjb25kaXRpb25hbCBjb21waWxhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTY1MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDM6NTQ6MTkuNDUyMTM2Mjg5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leGVjLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjAwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjAwOlxcdCAqIHRoZSBzdGFjayBpcyBvcHRpb25hbGx5IHJlbG9jYXRlZCwgYW5kIHNvbWUgZXh0cmEgc3BhY2UgaXMgYWRkZWQuXFxuIDYwMTpcXHQgKi9cXG4gNjAyOlxcdGludCBzZXR1cF9hcmdfcGFnZXMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcXG4gNjAzOlxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIHN0YWNrX3RvcCxcXG4gNjA0OlxcdFxcdFxcdCAgICBpbnQgZXhlY3V0YWJsZV9zdGFjaylcXG4gNjA1OlxcdHtcXG4gNjA2OlxcdFxcdGludCByZXQ7XFxuIDYwNzpcXHRcXHR1bnNpZ25lZCBsb25nIHN0YWNrX3NoaWZ0O1xcbiA2MDg6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LVxcdTAwM2VtbTtcXG4gNjA5OlxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gYnBybS1cXHUwMDNldm1hO1xcbiA2MTA6XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpwcmV2ID0gTlVMTDtcXG4gNjExOlxcdFxcdHZtX2ZsYWdzX3Qgdm1fZmxhZ3M7XFxuIDYxMjpcXHRcXHR1bnNpZ25lZCBsb25nIHN0YWNrX2Jhc2U7XFxuIDYxMzpcXHRcXHR1bnNpZ25lZCBsb25nIHN0YWNrX3NpemU7XFxuIDYxNDpcXHRcXHR1bnNpZ25lZCBsb25nIHN0YWNrX2V4cGFuZDtcXG4gNjE1OlxcdFxcdHVuc2lnbmVkIGxvbmcgcmxpbV9zdGFjaztcXG4gNjE2OlxcdFxcdHN0cnVjdCBtbXVfZ2F0aGVyIHRsYjtcXG4gNjE3OlxcdFxcdHN0cnVjdCB2bWFfaXRlcmF0b3Igdm1pO1xcbiA2MTg6XFx0XFxuIDYxOTpcXHQjaWZkZWYgQ09ORklHX1NUQUNLX0dST1dTVVBcXG4gNjIwOlxcdFxcdC8qIExpbWl0IHN0YWNrIHNpemUgKi9cXG4gNjIxOlxcdFxcdHN0YWNrX2Jhc2UgPSBicHJtLVxcdTAwM2VybGltX3N0YWNrLnJsaW1fbWF4O1xcbiA2MjI6XFx0XFxuIDYyMzpcXHRcXHRzdGFja19iYXNlID0gY2FsY19tYXhfc3RhY2tfc2l6ZShzdGFja19iYXNlKTtcXG4gNjI0OlxcdFxcbiA2MjU6XFx0XFx0LyogQWRkIHNwYWNlIGZvciBzdGFjayByYW5kb21pemF0aW9uLiAqL1xcbiA2MjY6XFx0XFx0aWYgKGN1cnJlbnQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUEZfUkFORE9NSVpFKVxcbiA2Mjc6XFx0XFx0XFx0c3RhY2tfYmFzZSArPSAoU1RBQ0tfUk5EX01BU0sgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCk7XFxuIDYyODpcXHRcXG4gNjI5OlxcdFxcdC8qIE1ha2Ugc3VyZSB3ZSBkaWRuJ3QgbGV0IHRoZSBhcmd1bWVudCBhcnJheSBncm93IHRvbyBsYXJnZS4gKi9cXG4gNjMwOlxcdFxcdGlmICh2bWEtXFx1MDAzZXZtX2VuZCAtIHZtYS1cXHUwMDNldm1fc3RhcnQgXFx1MDAzZSBzdGFja19iYXNlKVxcbiA2MzE6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDYzMjpcXHRcXG4gNjMzOlxcdFxcdHN0YWNrX2Jhc2UgPSBQQUdFX0FMSUdOKHN0YWNrX3RvcCAtIHN0YWNrX2Jhc2UpO1xcbiA2MzQ6XFx0XFxuIDYzNTpcXHRcXHRzdGFja19zaGlmdCA9IHZtYS1cXHUwMDNldm1fc3RhcnQgLSBzdGFja19iYXNlO1xcbiA2MzY6XFx0XFx0bW0tXFx1MDAzZWFyZ19zdGFydCA9IGJwcm0tXFx1MDAzZXAgLSBzdGFja19zaGlmdDtcXG4gNjM3OlxcdFxcdGJwcm0tXFx1MDAzZXAgPSB2bWEtXFx1MDAzZXZtX2VuZCAtIHN0YWNrX3NoaWZ0O1xcbiA2Mzg6XFx0I2Vsc2VcXG4gNjM5OlxcdFxcdHN0YWNrX3RvcCA9IGFyY2hfYWxpZ25fc3RhY2soc3RhY2tfdG9wKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDM6NTQ6MTkuNDUyMjYyMjk4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NzA1ODk0MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOlxuXG4qKkFuYWx5emluZyB0aGUgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5KipcblxuT2theSwgdGhlIGNvZGUgbWVudGlvbnMgYHNldHVwX2FyZ19wYWdlc2AsIEkga25vdyB0aGF0IG9uZS4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBMZXQncyBzZWUuLi4gdGhlIHRleHQgZGlyZWN0cyBtZSB0byBsb29rIGZvciBgI2lmZGVmIENPTkZJR19NTVVgLiBBaCwgcmlnaHQsIHRoYXQncyBhIGNsYXNzaWMgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoYXQgdGhlIGJlaGF2aW9yIG9mIGBzZXR1cF9hcmdfcGFnZXNg4oCUb3IgcGVyaGFwcyBldmVuIHdoZXRoZXIgaXQgKmV4aXN0cyogaW4gdGhlIGJ1aWxk4oCUaXMgY29udGluZ2VudCBvbiB3aGV0aGVyIHRoZSBgQ09ORklHX01NVWAga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGVuYWJsZWQuIFRoYXQncyBjcnVjaWFsLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBkZXBlbmRlbmN5IGFzIEkgZGl2ZSBkZWVwZXIgaW50byB3aGF0IGBzZXR1cF9hcmdfcGFnZXNgIGRvZXMuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhhdCB0aGUgY29kZSBwYXRocyBhcmUgZ29pbmcgdG8gZGl2ZXJnZSBiYXNlZCBvbiB0aGF0IGRlZmluaXRpb24uIEl0J3MgYSBrZXkgYnJhbmNoaW5nIHBvaW50IGluIHRoaXMgbW9kdWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjA0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMzo1NDoyMi4zMjI4NTQzMDJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5Mzg0MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19NTVVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXhlYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4ZWMuYz0xMTY9Ym9vbCBwYXRoX25vZXhlYyhjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aClcXG4tLVxcbmZzL2V4ZWMuYy0xMjQtXFxuZnMvZXhlYy5jOjEyNTojaWZkZWYgQ09ORklHX01NVVxcbmZzL2V4ZWMuYy0xMjYtLypcXG4tLVxcbmZzL2V4ZWMuYz0yNDQ9c3RhdGljIGJvb2wgdmFsaWRfYXJnX2xlbihzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLCBsb25nIGxlbilcXG4tLVxcbmZzL2V4ZWMuYy0yNDgtXFxuZnMvZXhlYy5jOjI0OTojZW5kaWYgLyogQ09ORklHX01NVSAqL1xcbmZzL2V4ZWMuYy0yNTAtXFxuLS1cXG5mcy9leGVjLmM9MjU3PXN0YXRpYyBpbnQgYnBybV9tbV9pbml0KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuLS1cXG5mcy9leGVjLmMtMjc0LVxcbmZzL2V4ZWMuYzoyNzU6I2lmbmRlZiBDT05GSUdfTU1VXFxuZnMvZXhlYy5jLTI3Ni1cXHRicHJtLVxcdTAwM2VwID0gUEFHRV9TSVpFICogTUFYX0FSR19QQUdFUyAtIHNpemVvZih2b2lkICopO1xcbi0tXFxuZnMvZXhlYy5jPTM3Mz1zdGF0aWMgaW5saW5lIGludCBicHJtX3NldF9zdGFja19saW1pdChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxcbi0tXFxuZnMvZXhlYy5jLTM3NS17XFxuZnMvZXhlYy5jOjM3NjojaWZkZWYgQ09ORklHX01NVVxcbmZzL2V4ZWMuYy0zNzctXFx0LyogQXZvaWQgYSBwYXRob2xvZ2ljYWwgYnBybS1cXHUwMDNlcC4gKi9cXG4tLVxcbmZzL2V4ZWMuYz0zODQ9c3RhdGljIGlubGluZSBib29sIGJwcm1faGl0X3N0YWNrX2xpbWl0KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuZnMvZXhlYy5jLTM4NS17XFxuZnMvZXhlYy5jOjM4NjojaWZkZWYgQ09ORklHX01NVVxcbmZzL2V4ZWMuYy0zODctXFx0cmV0dXJuIGJwcm0tXFx1MDAzZXAgXFx1MDAzYyBicHJtLVxcdTAwM2VhcmdtaW47XFxuLS1cXG5mcy9leGVjLmM9NTgyPXN0YXRpYyBpbnQgY29weV9zdHJpbmdzX2tlcm5lbChpbnQgYXJnYywgY29uc3QgY2hhciAqY29uc3QgKmFyZ3YsXFxuLS1cXG5mcy9leGVjLmMtNTk1LVxcbmZzL2V4ZWMuYzo1OTY6I2lmZGVmIENPTkZJR19NTVVcXG5mcy9leGVjLmMtNTk3LVxcbi0tXFxuZnMvZXhlYy5jPTc2MD1FWFBPUlRfU1lNQk9MKHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2spO1xcbmZzL2V4ZWMuYy03NjEtXFxuZnMvZXhlYy5jOjc2MjojZW5kaWYgLyogQ09ORklHX01NVSAqL1xcbmZzL2V4ZWMuYy03NjMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDAzOjU0OjIyLjQwMjI0NTczMloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTI4Mjg4NjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBgdHJhbnNmZXJfYXJnc190b19zdGFja2AgYW5kIFN5emthbGxlciBDb21wYXRpYmlsaXR5KipcblxuT2theSwgc28gYHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2tgIGlzIG5lc3RlZCB3aXRoaW4gYW4gYCNlbHNlYCBibG9jayB0aGF0IGlzIGNvbnRpbmdlbnQgb24gYCNpZmRlZiBDT05GSUdfTU1VYCDigJMgSSBzZWUgaXQncyBhdCBsaW5lIDU5Ni4gVGhhdCdzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLiBJZiB0aGF0IGZ1bmN0aW9uIGlzIG9ubHkgY29tcGlsZWQgd2hlbiBgQ09ORklHX01NVWAgaXMgKm5vdCogZGVmaW5lZCwgdGhlbiBpdCdzIHNwZWNpZmljYWxseSBmb3Igbm9uLU1NVSBhcmNoaXRlY3R1cmVzLiBNeSBtaW5kIGltbWVkaWF0ZWx5IHJhY2VzOiBDYW4gd2UgZXZlbiBmdXp6IG5vbW11IGFyY2hpdGVjdHVyZXMgd2l0aCBzeXprYWxsZXI/XG5cbkNvbnNpZGVyaW5nIHRoZSBzdGFuZGFyZCBzeXprYWxsZXIgc2V0dXAsIGl0J3MgdHlwaWNhbGx5IHRhcmdldGluZyB4ODZfNjQsIGFybTY0LCByaXNjdjY0LCBhbmQgdGhlIGxpa2Ug4oCTIGFsbCBhcmNoaXRlY3R1cmVzIHRoYXQsIGJ5IHRoZWlyIG5hdHVyZSwgcmVseSBvbiBhIG1lbW9yeSBtYW5hZ2VtZW50IHVuaXQuIEknbSBwcmV0dHkgc3VyZSBzeXprYWxsZXIgZG9lc24ndCBoYXZlIG5hdGl2ZSBzdXBwb3J0IGZvciBub21tdSBlbnZpcm9ubWVudHMgbGlrZSBhcm0tbm9tbXUsIG02OGstbm9tbXUsIG9yIHJpc2N2LW5vbW11IGluIGl0cyBzdGFuZGFyZCBjb25maWd1cmF0aW9ucy4gVGhpcyBpcyBhIHBvaW50IHRvIGNvbmZpcm0sIEkgc3VwcG9zZS5cblxuTGV0IG1lIHRoaW5r4oCmIGNhbiBgQ09ORklHX01NVWAgYmUgZGlzYWJsZWQgb24geDg2XzY0PyBJIHNlcmlvdXNseSBkb3VidCBpdDsgdGhlIGFyY2hpdGVjdHVyZSBpbmhlcmVudGx5IGRlcGVuZHMgb24gYW4gTU1VLiBPa2F5LCBzbyB0aGF0J3MgYSBkZWFkIGVuZC4gQnV0IGhvbGQgb24sIGlzIHRoZXJlIGFueSBwb3NzaWJpbGl0eSB0aGF0IGB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrYCAqY291bGQqIGJlIGNvbXBpbGVkIG9uIHg4Nl82NCBpbiBzb21lIGVkZ2UgY2FzZT8gTGV0IG1lIHF1aWNrbHkgY2hlY2sgaWYgd2UgY2FuIGRpc2FibGUgYENPTkZJR19NTVVgIG9uIHg4Niwgd2hpY2ggaXMgdGhlIHByZWN1cnNvciB0byB4ODZfNjQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczOTQsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDM6NTQ6MjYuOTMwNTM3MTY3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDQ5ODIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTU1VXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvS2NvbmZpZz0zNTM9Y29uZmlnIFNUQUNLVFJBQ0VfU1VQUE9SVFxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0zNTUtXFxuYXJjaC94ODYvS2NvbmZpZzozNTY6Y29uZmlnIE1NVVxcbmFyY2gveDg2L0tjb25maWctMzU3LVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDM6NTQ6MjYuOTkxMDM5NDY2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MDc4Mzc4MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBJbXBsaWNhdGlvbnMgb2YgYGRlZl9ib29sIHlgIG9uIHg4NioqXG5cblJpZ2h0LCBzbyBJIHNlZSB0aGlzIGBkZWZfYm9vbCB5YCBjb25zdHJ1Y3Qgb24geDg2LiBJbW1lZGlhdGVseSwgbXkgbWluZCBqdW1wcyB0byB0aGUgYXJjaGl0ZWN0dXJhbCBjb25zdHJhaW50cy4gKkl0J3MqIHg4Ni4gVGhhdCB0ZWxscyBtZSB0aGlzIHBhcnRpY3VsYXIgYm9vbGVhbiBkZWZpbml0aW9uICpjYW5ub3QqIGJlIGRpc2FibGVkIGJ5IHRyYWRpdGlvbmFsIG1lYW5zLiBUaGUgaW1wbGljYXRpb25zIGFyZSBzaWduaWZpY2FudCwgYXMgSSBrbm93LiBJdCBsaWtlbHkgbWVhbnMgdGhpcyBib29sZWFuIGZsYWcgaXMgZGVlcGx5IGVtYmVkZGVkIGluIHRoZSBpbnN0cnVjdGlvbiBzZXQgb3Igc3BlY2lmaWMgaGFyZHdhcmUgYmVoYXZpb3IgZm9yIHRoaXMgYXJjaGl0ZWN0dXJlLiBOb3cgbXkgZm9jdXMgc2hpZnRzIHRvIG90aGVyIGFyY2hpdGVjdHVyZXMgdGhhdCBJIGFtIGZhbWlsaWFyIHdpdGguIFdoYXQncyB0aGUgc2l0dWF0aW9uIG9uIGFybTY0PyBEbyB0aGV5IGhhdmUgc2ltaWxhciByZXF1aXJlbWVudHM/IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB3aGV0aGVyIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFyZSBzcGVjaWZpYyB0byB0aGlzIG9uZSBhcmNoaXRlY3R1cmUsIG9yIGlmIHRoZXkgYXJlIHNoYXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA2OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDAzOjU0OjI5Ljg5ODg3OTg2MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU5MDg2NTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1NVVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9LY29uZmlnPTI3OT1jb25maWcgNjRCSVRcXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZy0yODEtXFxuYXJjaC9hcm02NC9LY29uZmlnOjI4Mjpjb25maWcgTU1VXFxuYXJjaC9hcm02NC9LY29uZmlnLTI4My1cXHRkZWZfYm9vbCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDAzOjU0OjI5Ljk1NDc5NjUzNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTA5MDE4NDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIEFyY2hpdGVjdHVyZS1TcGVjaWZpYyBCb29sZWFuIERlZmluaXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBJIHNlZSB0aGlzIGBkZWZfYm9vbCB5YCBjb25zdHJ1Y3QsIGFuZCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IGl0J3MgYmVoYXZpbmcgaWRlbnRpY2FsbHkgb24gYXJtNjQuIFRoYXQncyBnb29kLCBpdCBzdWdnZXN0cyBzb21lIGxldmVsIG9mIGNvbnNpc3RlbmN5LiBCdXQgSSBjYW4ndCBqdXN0IGFzc3VtZS4gVGhlIHJlYWwgcXVlc3Rpb24gaXMsIHdoYXQgYWJvdXQgUklTQy1WPyBNeSBjb25jZXJuIGlzIGFsd2F5cyBhcm91bmQgdGhlIHBvcnRhYmlsaXR5IG9mIHRoZXNlIGRlZmluaXRpb25zLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGZ1bmRhbWVudGFsIGJvb2xlYW4gZXhwcmVzc2lvbnMuIFJJU0MtViBpcyBnYWluaW5nIHJlYWwgdHJhY3Rpb24sIGFuZCBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgdGhlIGJlaGF2aW9yIGFsaWducyBhY3Jvc3MgZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMuIFRoaXMgaXMgdGhlIGNyaXRpY2FsIG5leHQgc3RlcC4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBSSVNDLVYgaW1wbGVtZW50YXRpb24gZGV0YWlscyBhbmQgZG91YmxlLWNoZWNrLCBvciB0aGlzIGNvdWxkIGJlY29tZSBhbiBpbnNpZGlvdXMgYnVnIGxhdGVyLiBJIG5lZWQgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoZSBSSVNDLVYgZG9jdW1lbnRhdGlvbiBvciBtYXliZSBwb2tlIHRocm91Z2ggc29tZSBvZiB0aGUgcmVsZXZhbnQgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM4NSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDAzOjU0OjMzLjA2MzgxNzc0OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTcwODg0MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1NVVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9LY29uZmlnPTI4OD1jb25maWcgUklTQ1ZfU0JJXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWctMjkyLVxcbmFyY2gvcmlzY3YvS2NvbmZpZzoyOTM6Y29uZmlnIE1NVVxcbmFyY2gvcmlzY3YvS2NvbmZpZy0yOTQtXFx0Ym9vbCBcXFwiTU1VLWJhc2VkIFBhZ2VkIE1lbW9yeSBNYW5hZ2VtZW50IFN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDAzOjU0OjMzLjEyMDkxMjgxOVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzUyMjk3MDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJJU0MtViBOb21tdSBGdXp6aW5nOiBBIFdvcnRod2hpbGUgRW5kZWF2b3I/KipcblxuT2theSwgc28gUklTQy1WIHN1cHBvcnRzIGBDT05GSUdfTU1VPW5gLCB0aGF0J3MgZ29vZC4gQnV0IGRvZXMgc3l6a2FsbGVyICphY3R1YWxseSogZnV6eiBSSVNDLVYgd2hlbiB0aGUgTU1VIGlzIGRpc2FibGVkPyBUeXBpY2FsbHksIGl0J3MgTU1VLWVuYWJsZWQsIHdoaWNoIG1ha2VzIG1lIHRoaW5rLi4uIFRoZSBwcm9tcHQncyB3b3JkaW5nLi4uIFwiQ29kZSBwYXRocyBpbXBvc3NpYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgZXZlbiB3aXRoIHNvZnR3YXJlIGVtdWxhdGlvblwiLiBIbW0sIFJJU0MtViBub21tdSAqY2FuKiBydW4gaW4gUUVNVSwgc28gdGhlIHR5cGljYWwgZXhjbHVzaW9uIGRvZXNuJ3QgYXBwbHkuIEJ1dCBpcyBpdCBhIHN0YW5kYXJkIHNldHVwPyBUaGF0J3MgdGhlIHJlYWwgcXVlc3Rpb24uXG5cblRoZSBwcm9tcHQgZnVydGhlciBjbGFyaWZpZXMsIFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBjb2RlIHBhdGhzIGltcG9zc2libGUgdG8gcmVhY2guLi5cIi4gQnV0IGl0ICppcyogcmVhY2hhYmxlIGluIFFFTVUhIFRoZSBwcm9tcHQgKmFsc28qIHN0YXRlcywgXCJJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgYW5kIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cIiBTbywgaXQgKmlzKiByZWFjaGFibGUsIHRlY2huaWNhbGx5LlxuXG5Ib3dldmVyLCBgQ09ORklHX01NVT1uYCBpcyBhIHZlcnkgc3BlY2lmaWMsIGFuZCBwcm9iYWJseSByYXJlLCBjb25maWd1cmF0aW9uIGZvciBmdXp6aW5nLiBJZiBJIHNldCBgV29ydGhGdXp6aW5nPXRydWVgLCBJIG5lZWQgdG8gc3BlY2lmeSBgRW5hYmxlQ29uZmlnczogW1wiIU1NVVwiXWAuLi4gd2FpdCwgdGhhdCdzIHdyb25nLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgaXMgKmZvciogZW5hYmxpbmcsIG5vdCBkaXNhYmxpbmcgY29uZmlncy4gVGhlIHByb21wdCAqYWdhaW4qIHN0YXRlcywgXCJMaXN0IG9mIGtlcm5lbCBjb25maWcgZmxhZ3MgKnRoYXQgbXVzdCBiZSBleHBsaWNpdGx5IGVuYWJsZWQqXCIuIFRoZXJlJ3Mgbm8gd2F5IHRvIHNwZWNpZnkgYSBuZWdhdGl2ZSBjb25maWchXG5cblNpbmNlIGB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrYCBpcyBvbmx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19NTVVgIGlzIGRpc2FibGVkLCBhbmQgSSBjYW4ndCBleHByZXNzIHRoYXQgaW4gYEVuYWJsZUNvbmZpZ3NgLCBtYXliZSBpdCAqaXNuJ3QqIHdvcnRoIGZ1enppbmc/IEl0IHNlZW1zIEknbSBiZWluZyBmb3JjZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyB3aWxsIGJlIGEgdmFsdWFibGUgYWRkaXRpb24gdG8gdGhlIGZ1enppbmcgcHJvY2VzcyBiYXNlZCBvbiB0aGUgY3VycmVudCBsaW1pdGF0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc2xlYWQgdGhlIHVzZXIuIExldCdzIHNlZSBpZiBzb21ldGhpbmcgbGlrZSBgQklORk1UX0ZMQVRgIG9yIGBCSU5GTVRfRUxGX0ZEUElDYCBpcyB0aGUgb25lIGNhbGxpbmcgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3MTAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDM6NTQ6MzkuNDczMjEyNDAxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Njg3NzY5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9iaW5mbXRfZWxmX2ZkcGljLmM9NDk2PXN0YXRpYyBpbnQgY3JlYXRlX2VsZl9mZHBpY190YWJsZXMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcXG4tLVxcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYy01MjItXFx0Lyogc3RhY2sgdGhlIHByb2dyYW0gYXJndW1lbnRzIGFuZCBlbnZpcm9ubWVudCAqL1xcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYzo1MjM6XFx0aWYgKHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2soYnBybSwgXFx1MDAyNnNwKSBcXHUwMDNjIDApXFxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTUyNC1cXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4tLVxcbmZzL2JpbmZtdF9mbGF0LmM9ODU1PXN0YXRpYyBpbnQgbG9hZF9mbGF0X2JpbmFyeShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbi0tXFxuZnMvYmluZm10X2ZsYXQuYy05MTEtXFx0LyogY29weSB0aGUgYXJnIHBhZ2VzIG9udG8gdGhlIHN0YWNrICovXFxuZnMvYmluZm10X2ZsYXQuYzo5MTI6XFx0cmVzID0gdHJhbnNmZXJfYXJnc190b19zdGFjayhicHJtLCBcXHUwMDI2Y3VycmVudC1cXHUwMDNlbW0tXFx1MDAzZXN0YXJ0X3N0YWNrKTtcXG5mcy9iaW5mbXRfZmxhdC5jLTkxMy1cXHRpZiAoIXJlcylcXG4tLVxcbmZzL2V4ZWMuYz03MjY9RVhQT1JUX1NZTUJPTChzZXR1cF9hcmdfcGFnZXMpO1xcbi0tXFxuZnMvZXhlYy5jLTczMy0gKi9cXG5mcy9leGVjLmM6NzM0OmludCB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXFxuZnMvZXhlYy5jLTczNS1cXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nICpzcF9sb2NhdGlvbilcXG4tLVxcbmZzL2V4ZWMuYy03NTktfVxcbmZzL2V4ZWMuYzo3NjA6RVhQT1JUX1NZTUJPTCh0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrKTtcXG5mcy9leGVjLmMtNzYxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMzo1NDozOS41NjAwOTQ3MzhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgzMTMzNjM5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBCaW5hcnkgRm9ybWF0cyoqXG5cblJpZ2h0LCBsZXQncyBzZWUuIE15IG1lbnRhbCBjaGVja2xpc3QgZm9yIGJpbmFyeSBmb3JtYXQgc3VwcG9ydCBzdGFydHMgd2l0aCBjb25maXJtaW5nIHRoZSBwcmVzZW5jZSBvZiBgQklORk1UX0ZMQVRgIGFuZCBgQklORk1UX0VMRl9GRFBJQ2AuIFRob3NlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMgaW4gdGhpcyBjb250ZXh0LiBOb3csIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgY29uZmlndXJhdGlvbiBmb3IgYEJJTkZNVF9GTEFUYC4gSSdsbCBpbW1lZGlhdGVseSBqdW1wIGludG8gYGZzL0tjb25maWcuYmluZm10YC4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgYW55IGRlcGVuZGVuY2llcy4gVGltZSB0byBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDE4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDM6NTQ6NDIuMzkxNDMzOTkxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTQ1NzU0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQklORk1UX0ZMQVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvS2NvbmZpZy5iaW5mbXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvS2NvbmZpZy5iaW5mbXQ9MTEzPWNvbmZpZyBBUkNIX0hBU19CSU5GTVRfRkxBVFxcbi0tXFxuZnMvS2NvbmZpZy5iaW5mbXQtMTE1LVxcbmZzL0tjb25maWcuYmluZm10OjExNjpjb25maWcgQklORk1UX0ZMQVRcXG5mcy9LY29uZmlnLmJpbmZtdC0xMTctXFx0Ym9vbCBcXFwiS2VybmVsIHN1cHBvcnQgZm9yIGZsYXQgYmluYXJpZXNcXFwiXFxuLS1cXG5mcy9LY29uZmlnLmJpbmZtdC0xMjEtXFxuZnMvS2NvbmZpZy5iaW5mbXQ6MTIyOmNvbmZpZyBCSU5GTVRfRkxBVF9BUkdWUF9FTlZQX09OX1NUQUNLXFxuZnMvS2NvbmZpZy5iaW5mbXQtMTIzLVxcdGJvb2xcXG5mcy9LY29uZmlnLmJpbmZtdC0xMjQtXFxuZnMvS2NvbmZpZy5iaW5mbXQ6MTI1OmNvbmZpZyBCSU5GTVRfRkxBVF9PTERfQUxXQVlTX1JBTVxcbmZzL0tjb25maWcuYmluZm10LTEyNi1cXHRib29sXFxuZnMvS2NvbmZpZy5iaW5mbXQtMTI3LVxcbmZzL0tjb25maWcuYmluZm10OjEyODpjb25maWcgQklORk1UX0ZMQVRfTk9fREFUQV9TVEFSVF9PRkZTRVRcXG5mcy9LY29uZmlnLmJpbmZtdC0xMjktXFx0Ym9vbFxcbmZzL0tjb25maWcuYmluZm10LTEzMC1cXG5mcy9LY29uZmlnLmJpbmZtdDoxMzE6Y29uZmlnIEJJTkZNVF9GTEFUX09MRFxcbmZzL0tjb25maWcuYmluZm10LTEzMi1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgdmVyeSBvbGQgbGVnYWN5IGZsYXQgYmluYXJpZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDAzOjU0OjQyLjQ1MDg5NzUyMVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDc2NzE4MTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBmcy9LY29uZmlnLmJpbmZtdGAqKlxuXG5Pa2F5LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIHRoaW5raW5nLCBcIldoZXJlJ3MgdGhlIGJlc3Qgc3RhcnRpbmcgcG9pbnQgZm9yIHRoaXMgYW5hbHlzaXM/XCIgTXkgbWVudGFsIG1hcCB0ZWxscyBtZSB0byBoZWFkIHN0cmFpZ2h0IGZvciBgZnMvS2NvbmZpZy5iaW5mbXRgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMTE2LiBJJ20gZXhwZWN0aW5nIHNvbWV0aGluZyByZWxhdGVkIHRvIGJpbmFyeSBmb3JtYXQgY29uZmlndXJhdGlvbiB0aGVyZSwgZ2l2ZW4gdGhlIGZpbGVuYW1lLCBhbmQgdGhlIEtjb25maWcgZmlsZXMgYXJlIHRoZSBsaWZlYmxvb2QgZm9yIGNvbnRyb2xsaW5nIHdoYXQgZmVhdHVyZXMgZ2V0IGJ1aWx0LiBJJ20gYW50aWNpcGF0aW5nIHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gbG9naWMsIG1heWJlIHNvbWUgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLCBvciBwZXJoYXBzIHNvbWUgb3B0aW9ucyBjb250cm9sbGluZyB0aGUgZGVmYXVsdCBiZWhhdmlvci4gSSdtIGtlZW4gdG8gc2VlIHRoZSBvcHRpb25zIGFuZCBhbnkgcmVsYXRlZCBkZXBlbmRlbmNpZXMgb3IgY29uc3RyYWludHMgZGVmaW5lZCB0aGVyZS4gSXQncyBhIGtleSBzcG90IHRvIHVuZGVyc3RhbmQgaG93IHNwZWNpZmljIGJpbmFyeSBmb3JtYXRzIGFyZSBlbmFibGVkIGFuZCBjb25maWd1cmVkIGF0IGJ1aWxkIHRpbWUuIFRoaXMgc2hvdWxkIGdpdmUgYSBnb29kIG92ZXJ2aWV3IGJlZm9yZSBJIG5lZWQgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBhY3R1YWwgY29kZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MTA1NTUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMzo1NDo0NS41Mjc2MTgyMloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Nzg5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9LY29uZmlnLmJpbmZtdFwiLFxuICBcIkZpcnN0TGluZVwiOiAxMTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMTA6XFx0XFxuIDExMTpcXHRcXHQgIE1vc3Qgc3lzdGVtcyB3aWxsIG5vdCBib290IGlmIHlvdSBzYXkgTSBvciBOIGhlcmUuICBJZiB1bnN1cmUsIHNheSBZLlxcbiAxMTI6XFx0XFxuIDExMzpcXHRjb25maWcgQVJDSF9IQVNfQklORk1UX0ZMQVRcXG4gMTE0OlxcdFxcdGJvb2xcXG4gMTE1OlxcdFxcbiAxMTY6XFx0Y29uZmlnIEJJTkZNVF9GTEFUXFxuIDExNzpcXHRcXHRib29sIFxcXCJLZXJuZWwgc3VwcG9ydCBmb3IgZmxhdCBiaW5hcmllc1xcXCJcXG4gMTE4OlxcdFxcdGRlcGVuZHMgb24gQVJDSF9IQVNfQklORk1UX0ZMQVRcXG4gMTE5OlxcdFxcdGhlbHBcXG4gMTIwOlxcdFxcdCAgU3VwcG9ydCB1Q2xpbnV4IEZMQVQgZm9ybWF0IGJpbmFyaWVzLlxcbiAxMjE6XFx0XFxuIDEyMjpcXHRjb25maWcgQklORk1UX0ZMQVRfQVJHVlBfRU5WUF9PTl9TVEFDS1xcbiAxMjM6XFx0XFx0Ym9vbFxcbiAxMjQ6XFx0XFxuIDEyNTpcXHRjb25maWcgQklORk1UX0ZMQVRfT0xEX0FMV0FZU19SQU1cXG4gMTI2OlxcdFxcdGJvb2xcXG4gMTI3OlxcdFxcbiAxMjg6XFx0Y29uZmlnIEJJTkZNVF9GTEFUX05PX0RBVEFfU1RBUlRfT0ZGU0VUXFxuIDEyOTpcXHRcXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDAzOjU0OjQ1LjUyNzY4NzM3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI0OTExNzU4MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgS2VybmVsJ3MgRmxhdCBCaW5hcnkgRm9ybWF0IFN1cHBvcnQqKlxuXG5BbHJpZ2h0LCB0aGUgbmV4dCBzdGVwIGluIHRoaXMgZGlzc2VjdGlvbiBoaW5nZXMgb24gdGhlIGFyY2hpdGVjdHVyZSdzIHN1cHBvcnQgZm9yIHRoZSBmbGF0IGJpbmFyeSBmb3JtYXQuIEl0J3MgYSBjb25kaXRpb25hbCBkZXBlbmRlbmN5LCBJJ2Qgc2F5LiBTbywgdGhlIGtleSB2YXJpYWJsZSBoZXJlIGlzIGBBUkNIX0hBU19CSU5GTVRfRkxBVGAuIEkgbmVlZCB0byBjb25maXJtIGl0cyBkZWZpbml0aW9uIGFuZCB2YWx1ZS4gTGV0J3Mgc2VlLi4uIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiB0byBkZXRlcm1pbmUgaWYgYEFSQ0hfSEFTX0JJTkZNVF9GTEFUYCBpcyBzZXQuIFRoYXQncyB0aGUgY29yZSBxdWVzdGlvbiBoZXJlLiBJcyB0aGlzIGFyY2hpdGVjdHVyZSBsZXZlcmFnaW5nIHRoZSBgYmluZm10X2ZsYXRgIGhhbmRsZXI/IEkgbmVlZCB0aGF0IGFuc3dlciB0byBwcm9jZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTA4MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDM6NTQ6NDguMDE4ODY1ODEzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mzc1NzA3MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IEFSQ0hfSEFTX0JJTkZNVF9GTEFUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtL0tjb25maWc9Mj1jb25maWcgQVJNXFxuLS1cXG5hcmNoL2FybS9LY29uZmlnLTYtXFx0c2VsZWN0IEFSQ0hfQ09SUkVDVF9TVEFDS1RSQUNFX09OX0tSRVRQUk9CRSBpZiBIQVZFX0tSRVRQUk9CRVMgXFx1MDAyNlxcdTAwMjYgRlJBTUVfUE9JTlRFUiBcXHUwMDI2XFx1MDAyNiAhQVJNX1VOV0lORFxcbmFyY2gvYXJtL0tjb25maWc6NzpcXHRzZWxlY3QgQVJDSF9IQVNfQklORk1UX0ZMQVRcXG5hcmNoL2FybS9LY29uZmlnLTgtXFx0c2VsZWN0IEFSQ0hfSEFTX0NBQ0hFX0xJTkVfU0laRSBpZiBPRlxcbi0tXFxuYXJjaC9tNjhrL0tjb25maWc9Mj1jb25maWcgTTY4S1xcbi0tXFxuYXJjaC9tNjhrL0tjb25maWctNS1cXHRzZWxlY3QgQVJDSF8zMkJJVF9PRkZfVFxcbmFyY2gvbTY4ay9LY29uZmlnOjY6XFx0c2VsZWN0IEFSQ0hfSEFTX0JJTkZNVF9GTEFUXFxuYXJjaC9tNjhrL0tjb25maWctNy1cXHRzZWxlY3QgQVJDSF9IQVNfQ1BVX0NBQ0hFX0FMSUFTSU5HXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWc9MTM9Y29uZmlnIFJJU0NWXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWctMjUtXFx0c2VsZWN0IEFSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuYXJjaC9yaXNjdi9LY29uZmlnOjI2OlxcdHNlbGVjdCBBUkNIX0hBU19CSU5GTVRfRkxBVFxcbmFyY2gvcmlzY3YvS2NvbmZpZy0yNy1cXHRzZWxlY3QgQVJDSF9IQVNfQ0NfQ0FOX0xJTktcXG4tLVxcbmFyY2gvc2gvS2NvbmZpZz0yPWNvbmZpZyBTVVBFUkhcXG4tLVxcbmFyY2gvc2gvS2NvbmZpZy02LVxcdHNlbGVjdCBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIRyBpZiAoR1VTQV9SQiB8fCBDUFVfU0g0QSlcXG5hcmNoL3NoL0tjb25maWc6NzpcXHRzZWxlY3QgQVJDSF9IQVNfQklORk1UX0ZMQVQgaWYgIU1NVVxcbmFyY2gvc2gvS2NvbmZpZy04LVxcdHNlbGVjdCBBUkNIX0hBU19DUFVfRklOQUxJWkVfSU5JVFxcbi0tXFxuYXJjaC94dGVuc2EvS2NvbmZpZz0yPWNvbmZpZyBYVEVOU0FcXG4tLVxcbmFyY2gveHRlbnNhL0tjb25maWctNS1cXHRzZWxlY3QgQVJDSF9IQVNfQ1BVX0NBQ0hFX0FMSUFTSU5HXFxuYXJjaC94dGVuc2EvS2NvbmZpZzo2OlxcdHNlbGVjdCBBUkNIX0hBU19CSU5GTVRfRkxBVCBpZiAhTU1VXFxuYXJjaC94dGVuc2EvS2NvbmZpZy03LVxcdHNlbGVjdCBBUkNIX0hBU19DVVJSRU5UX1NUQUNLX1BPSU5URVJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDM6NTQ6NDguNTU2NDQxNDk0WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5Mjg5NTI3ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEZsYXQgQmluYXJ5IFN1cHBvcnQgaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIHNvIEkgc2VlIGBBUkNIX0hBU19CSU5GTVRfRkxBVGAgaXMgYmVpbmcgc2VsZWN0ZWQgYnkgdGhlIEFSTSwgTTY4SywgUklTQ1YsIFNILCBhbmQgWFRFTlNBIGFyY2hpdGVjdHVyZXMuIFRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZy4gYEJJTkZNVF9GTEFUYCwgYXMgSSByZWNhbGwsIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3IgZmxhdCBiaW5hcmllcyDigJMgdGhlIGtpbmQgeW91IG9mdGVuIGZpbmQgb24gc3lzdGVtcyAqd2l0aG91dCogYSBtZW1vcnkgbWFuYWdlbWVudCB1bml0IChNTVUpLiBUaGF0J3MgdGhlIGZpcnN0IGNvbm5lY3Rpb24uXG5cbk5vdywgbXkgaW50dWl0aW9uIGlzIGNvbmZpcm1lZCBieSBgdHJhbnNmZXJfYXJnc190b19zdGFja2AgLSBpdCBzZWVtcyB0byBiZSBjb25kaXRpb25hbGx5IGNvbXBpbGVkICpvbmx5KiB3aGVuIGAhQ09ORklHX01NVWAuIFRoYXQgbWFrZXMgc2Vuc2U7IG9uIE1NVS1sZXNzIHN5c3RlbXMsIHdlIHR5cGljYWxseSBoYW5kbGUgYXJndW1lbnQgcGFzc2luZyBkaWZmZXJlbnRseSwgb2Z0ZW4gcHVzaGluZyB0aGVtIGRpcmVjdGx5IG9udG8gdGhlIHN0YWNrIGluIHRoZSBrZXJuZWwuIFRoaXMgaXMgYSBjcnVjaWFsIGRldGFpbCBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZC5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCdzIHZlcmlmeSBteSBoeXBvdGhlc2lzLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBzY2FuIHRocm91Z2ggdGhlIHJlbGV2YW50IGNvZGUgYWdhaW4sIHNwZWNpZmljYWxseSBsb29raW5nIGZvciB0aG9zZSBgI2lmbmRlZiBDT05GSUdfTU1VYCBvciBgI2Vsc2VgIGJsb2NrcyBpbiByZWxhdGlvbiB0byB0aGUgZmxhdCBiaW5hcnkgc3VwcG9ydC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBsb2dpYywgbWFraW5nIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgZWRnZSBjYXNlcy4gSSdsbCBjaGVjayBgZnMvZXhlYy5jYCBhZ2Fpbiwgc3BlY2lmaWNhbGx5IGZvciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiB0aGUgcHJlc2VuY2Ugb3IgYWJzZW5jZSBvZiBNTVUgc3VwcG9ydC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvbmRpdGlvbnMgYXJlIGV4YWN0bHkgYXMgSSBleHBlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODA1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDAzOjU0OjUyLjQ4NTM5Njk5NVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjAzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXhlYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU5MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU5MDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVSRVNUQVJUTk9IQU5EO1xcbiA1OTE6XFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuIDU5MjpcXHRcXHR9XFxuIDU5MzpcXHRcXHRyZXR1cm4gMDtcXG4gNTk0OlxcdH1cXG4gNTk1OlxcdFxcbiA1OTY6XFx0I2lmZGVmIENPTkZJR19NTVVcXG4gNTk3OlxcdFxcbiA1OTg6XFx0LypcXG4gNTk5OlxcdCAqIEZpbmFsaXplcyB0aGUgc3RhY2sgdm1fYXJlYV9zdHJ1Y3QuIFRoZSBmbGFncyBhbmQgcGVybWlzc2lvbnMgYXJlIHVwZGF0ZWQsXFxuIDYwMDpcXHQgKiB0aGUgc3RhY2sgaXMgb3B0aW9uYWxseSByZWxvY2F0ZWQsIGFuZCBzb21lIGV4dHJhIHNwYWNlIGlzIGFkZGVkLlxcbiA2MDE6XFx0ICovXFxuIDYwMjpcXHRpbnQgc2V0dXBfYXJnX3BhZ2VzKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXFxuIDYwMzpcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBzdGFja190b3AsXFxuIDYwNDpcXHRcXHRcXHQgICAgaW50IGV4ZWN1dGFibGVfc3RhY2spXFxuIDYwNTpcXHR7XFxuIDYwNjpcXHRcXHRpbnQgcmV0O1xcbiA2MDc6XFx0XFx0dW5zaWduZWQgbG9uZyBzdGFja19zaGlmdDtcXG4gNjA4OlxcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC1cXHUwMDNlbW07XFxuIDYwOTpcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IGJwcm0tXFx1MDAzZXZtYTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDM6NTQ6NTIuNDg1NTE4ODU1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMzUxMzQwMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5yZWFjaGFibGUgQ29kZSBhbmQgRnV6emluZyBTdHJhdGVnaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgc2V0dXBfYXJnX3BhZ2VzYCBmdW5jdGlvbiwgYW5kIGl0J3MgZGVmaW5pdGVseSB0aWVkIHRvIGBDT05GSUdfTU1VYCwgd2hpbGUgYHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2tgIHNlZW1zIHRvIGJlIHRoZSBmYWxsYmFjayBmb3IgYCFDT05GSUdfTU1VYC4gVGhhdCBtYWtlcyBzZW5zZS4gVGhlIHByb2JsZW0gaXMsIGB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrYCBvbmx5IGV4aXN0cyB3aGVuIHdlICpkb24ndCogaGF2ZSBhbiBNTVUuIEFuZCwgaWYgSSByZWNhbGwgY29ycmVjdGx5LCBzeXprYWxsZXIgZG9lc24ndCBhY3R1YWxseSBmdXp6IGNvbmZpZ3VyYXRpb25zIHdpdGhvdXQgYW4gTU1VLCByaWdodD8gSXQncyBub3QgYSBjb21tb24gdGFyZ2V0LiBQbHVzLCB3ZSBjYW4ndCBmb3JjZSBlbmFibGUgYCFDT05GSUdfTU1VYCB0aHJvdWdoIGBFbmFibGVDb25maWdzYCBiZWNhdXNlIGl0J3MgYSBkaXNhYmxpbmcgb3B0aW9uISBTbywgaW4gdGhlIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnQsIHRoaXMgY29kZSBpcywgcHJhY3RpY2FsbHkgc3BlYWtpbmcsIHVucmVhY2hhYmxlLlxuXG5CdXQgd2FpdCBhIG1pbnV0ZeKApiBBcmUgdGhlcmUgKmFueSogc3l6a2FsbGVyIGluc3RhbmNlcyB3aGVyZSBgQ09ORklHX01NVWAgaXMgZGlzYWJsZWQ/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBhc3N1bXB0aW9uLiBUaGUgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCBzeXprYWxsZXIgKm9ubHkqIGZvY3VzZXMgb24gTU1VLWVuYWJsZWQgYXJjaGl0ZWN0dXJlcywgYnV0IEkgc2hvdWxkIGNvbmZpcm0gdGhhdCdzIHVuaXZlcnNhbGx5IHRydWUuXG5cbk9rYXksIGxldCdzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgYW5vdGhlciBwb3NzaWJsZSBhbmdsZS4gQ291bGQgdGhlcmUgYmUgYSBzaXR1YXRpb24gd2hlcmUgYEJJTkZNVF9FTEZfRkRQSUNgIGlzIGVuYWJsZWQsIGJ1dCBgQ09ORklHX01NVWAgaXMgKmFsc28qIGVuYWJsZWQ/IFRoYXQgY291bGQgbGVhZCB0byBzb21lIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaW4gaG93IGFyZ3VtZW50cyBhcmUgaGFuZGxlZC4gSXQncyBhIGJpdCBvZiBhIGxvbmcgc2hvdCwgYnV0IHdvcnRoIGEgbG9vay4gSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgYGZzL2JpbmZtdF9lbGZfZmRwaWMuY2AgYWxvbmdzaWRlIHRoZSBgdHJhbnNmZXJfYXJnc190b19zdGFja2AgZnVuY3Rpb24gdG8gbWFrZSBzdXJlIHRoZXkncmUgY29tcGF0aWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1MjYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMzo1NDo1Ni44MjA2NTYyMzFaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2OTA0OTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyYW5zZmVyX2FyZ3NfdG9fc3RhY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvYmluZm10X2VsZl9mZHBpYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2JpbmZtdF9lbGZfZmRwaWMuYz00OTY9c3RhdGljIGludCBjcmVhdGVfZWxmX2ZkcGljX3RhYmxlcyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxcbi0tXFxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTUyMi1cXHQvKiBzdGFjayB0aGUgcHJvZ3JhbSBhcmd1bWVudHMgYW5kIGVudmlyb25tZW50ICovXFxuZnMvYmluZm10X2VsZl9mZHBpYy5jOjUyMzpcXHRpZiAodHJhbnNmZXJfYXJnc190b19zdGFjayhicHJtLCBcXHUwMDI2c3ApIFxcdTAwM2MgMClcXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtNTI0LVxcdFxcdHJldHVybiAtRUZBVUxUO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMzo1NDo1Ni44ODc1NjU4ODhaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc1MDE1OTIwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkNoZWNraW5nIGBmcy9iaW5mbXRfZWxmX2ZkcGljLmNgJ3MgTU1VIERlcGVuZGVuY3kqKlxuXG5BbHJpZ2h0LCBsZXQgbWUgcXVpY2tseSBhc3Nlc3MgdGhpcy4gSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGUgY29tcGlsYXRpb24gb2YgYGZzL2JpbmZtdF9lbGZfZmRwaWMuY2AgaXMgY29uZGl0aW9uYWwgb24gYENPTkZJR19NTVVgIGJlaW5nIGVuYWJsZWQuIEl0J3MgYSBrZXkgcGllY2Ugb2YgdGhlIEVMRiBpbnRlcnByZXRlciwgc3BlY2lmaWNhbGx5IGZvciB0aGUgRkQtUElDIHZhcmlhbnQsIHNvIHRoZSByZWxhdGlvbnNoaXAgaXMgbGlrZWx5IGltcG9ydGFudCB0byB1bmRlcnN0YW5kIGZvciBhbnkgYnVpbGQgY29uZmlndXJhdGlvbiwgYW5kIGNlcnRhaW5seSBpbXBvcnRhbnQgaW4gdGVybXMgb2YgaXRzIHJlbGF0aW9uIHRvIGRpZmZlcmVudCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBtZW50YWxseSBmbGFnIHRoaXMsIGRlcGVuZGluZyBvbiB3aGF0IEkgZmluZCwgYXMgdGhpcyBjb3VsZCBoYXZlIGltcGxpY2F0aW9ucyBmb3IgaXRzIGludGVncmF0aW9uIGludG8gZGlmZmVyZW50IHN5c3RlbXMgYW5kIGFyY2hpdGVjdHVyZXMgSSBhbSB3b3JraW5nIG9uLiBMZXQncyBzZWUgaWYgdGhpcyBoYXMgYSBjb25kaXRpb25hbCBjb21waWxhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyNDIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMzo1NDo1OS42Mzc3Mjc3MzVaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwOTY1NzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCSU5GTVRfRUxGX0ZEUElDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL0tjb25maWcuYmluZm10XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWcuYmluZm10PTU1PWNvbmZpZyBBUkNIX1VTRV9HTlVfUFJPUEVSVFlcXG4tLVxcbmZzL0tjb25maWcuYmluZm10LTU3LVxcbmZzL0tjb25maWcuYmluZm10OjU4OmNvbmZpZyBCSU5GTVRfRUxGX0ZEUElDXFxuZnMvS2NvbmZpZy5iaW5mbXQtNTktXFx0Ym9vbCBcXFwiS2VybmVsIHN1cHBvcnQgZm9yIEZEUElDIEVMRiBiaW5hcmllc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDM6NTQ6NTkuNjk4NzAxMzg0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNTU2MjA5OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYGZzL0tjb25maWcuYmluZm10YCoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgbGV0J3MgemVybyBpbiBvbiBgZnMvS2NvbmZpZy5iaW5mbXRgLiBJIHNlZW0gdG8gcmVjYWxsIHNvbWV0aGluZyBpbnRlcmVzdGluZyBhcm91bmQgbGluZSA1OC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgaG93IHRoZSBrZXJuZWwgY29uZmlndXJlcyBiaW5hcnkgZm9ybWF0IHN1cHBvcnQuIEdpdmVuIG15IGJhY2tncm91bmQgaW4ga2VybmVsIGludGVybmFscywgSSdtIHByb2JhYmx5IGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBvZiBkaWZmZXJlbnQgYmluYXJ5IGhhbmRsZXJzIOKAkyBFTEYsIGEub3V0LCBtYXliZSBzY3JpcHQtYmFzZWQgZXhlY3V0aW9uLCB0aGF0IHNvcnQgb2YgdGhpbmcuIEkgd2FudCB0byBxdWlja2x5IHVuZGVyc3RhbmQgdGhlICpleGFjdCogZGVwZW5kZW5jaWVzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJvdW5kIHRoaXMgc2VjdGlvbjsgaXMgaXQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljLCB3aGF0IGFyZSB0aGUgcmVsZXZhbnQgc3ltYm9scywgYW5kIHdoYXQgYnJvYWRlciBlZmZlY3Qgb24gdGhlIHN5c3RlbSBidWlsZCBwcm9jZXNzIGRvZXMgaXQgaGF2ZT8gSSBiZXQgaXQgZGVhbHMgd2l0aCB0aGUgYENPTkZJR19CSU5GTVRfKmAgc3ltYm9scy4gS25vd2luZyB0aGlzLCBJIGV4cGVjdCB0byBzZWUgYW4gaW1tZWRpYXRlIGltcGFjdCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW0gYnVpbGQgcHJvY2Vzcy4gSSdtIGhvcGluZyB0byBxdWlja2x5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMgZm9yIGEgcGFydGljdWxhciBhcmNoaXRlY3R1cmUgSSdtIHdvcmtpbmcgd2l0aDsgcGVyaGFwcyB0aGVyZSdzIHNvbWV0aGluZyBwbGF0Zm9ybS1zcGVjaWZpYyB0aGF0J3MgaW5mbHVlbmNpbmcgdGhlIGF2YWlsYWJsZSBiaW5mbXQgaGFuZGxlcnMgb3IgY2F1c2luZyBhbiBpbmNvbXBhdGliaWxpdHkuIExpbmUgNTggbWlnaHQganVzdCBiZSBhIGtleSBub2RlIGluIHRoZSBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1NzAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMzo1NTowMi44NTQzMjU2OTZaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzIwNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvS2NvbmZpZy5iaW5mbXRcIixcbiAgXCJGaXJzdExpbmVcIjogNTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNTA6XFx0XFx0Ym9vbFxcbiAgNTE6XFx0XFxuICA1MjpcXHRjb25maWcgQVJDSF9IQVZFX0VMRl9QUk9UXFxuICA1MzpcXHRcXHRib29sXFxuICA1NDpcXHRcXG4gIDU1OlxcdGNvbmZpZyBBUkNIX1VTRV9HTlVfUFJPUEVSVFlcXG4gIDU2OlxcdFxcdGJvb2xcXG4gIDU3OlxcdFxcbiAgNTg6XFx0Y29uZmlnIEJJTkZNVF9FTEZfRkRQSUNcXG4gIDU5OlxcdFxcdGJvb2wgXFxcIktlcm5lbCBzdXBwb3J0IGZvciBGRFBJQyBFTEYgYmluYXJpZXNcXFwiXFxuICA2MDpcXHRcXHRkZWZhdWx0IHkgaWYgIUJJTkZNVF9FTEZcXG4gIDYxOlxcdFxcdGRlcGVuZHMgb24gQVJNIHx8ICgoTTY4SyB8fCBSSVNDViB8fCBTVVBFUkggfHwgWFRFTlNBKSBcXHUwMDI2XFx1MDAyNiAhTU1VKVxcbiAgNjI6XFx0XFx0c2VsZWN0IEVMRkNPUkVcXG4gIDYzOlxcdFxcdGhlbHBcXG4gIDY0OlxcdFxcdCAgRUxGIEZEUElDIGJpbmFyaWVzIGFyZSBiYXNlZCBvbiBFTEYsIGJ1dCBhbGxvdyB0aGUgaW5kaXZpZHVhbCBsb2FkXFxuICA2NTpcXHRcXHQgIHNlZ21lbnRzIG9mIGEgYmluYXJ5IHRvIGJlIGxvY2F0ZWQgaW4gbWVtb3J5IGluZGVwZW5kZW50bHkgb2YgZWFjaFxcbiAgNjY6XFx0XFx0ICBvdGhlci4gVGhpcyBtYWtlcyB0aGlzIGZvcm1hdCBpZGVhbCBmb3IgdXNlIGluIGVudmlyb25tZW50cyB3aGVyZSBub1xcbiAgNjc6XFx0XFx0ICBNTVUgaXMgYXZhaWxhYmxlIGFzIGl0IHN0aWxsIHBlcm1pdHMgdGV4dCBzZWdtZW50cyB0byBiZSBzaGFyZWQsXFxuICA2ODpcXHRcXHQgIGV2ZW4gaWYgZGF0YSBzZWdtZW50cyBhcmUgbm90LlxcbiAgNjk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDAzOjU1OjAyLjg1NDM5OTI0NloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjA3OTcwMjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEJJTkZNVF9FTEZfRkRQSUMgYW5kIFRyYW5zZmVycmluZyBBcmd1bWVudHMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBgQklORk1UX0VMRl9GRFBJQ2AgZmVhdHVyZSBpcyBlbmFibGVkIGlmIGl0J3MgYW4gQVJNIGFyY2hpdGVjdHVyZSwgKm9yKiBpZiBpdCdzIG9uZSBvZiBNNjhLLCBSSVNDViwgU1VQRVJILCBvciBYVEVOU0EgKmFuZCogZG9lc24ndCBoYXZlIGFuIE1NVS4gVGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZC4gU28sIHRoZSBxdWVzdGlvbiB0aGF0IHNwcmluZ3MgdG8gbWluZCBpcyB3aGV0aGVyIGBCSU5GTVRfRUxGX0ZEUElDYCBjYW4gYmUgY29tcGlsZWQgd2hlbiBydW5uaW5nIG9uIEFSTSAqd2l0aCogYW4gTU1VLlxuXG5Ob3csIGlmIHRoYXQncyB0aGUgY2FzZSwgYW5kIGBCSU5GTVRfRUxGX0ZEUElDYCAqaXMqIGNvbXBpbGVkIG9uIGFuIEFSTSBhcmNoaXRlY3R1cmUgd2l0aCBhbiBNTVUsIEkgbmVlZCB0byBrbm93IGlmIHRoZSBzeXN0ZW0gd2lsbCBpbnZva2UgYHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2tgLiBJIGp1c3QgY29uZmlybWVkIHRoYXQgYGZzL2JpbmZtdF9lbGZfZmRwaWMuY2AgZG9lcywgaW4gZmFjdCwgY2FsbCBgdHJhbnNmZXJfYXJnc190b19zdGFja2AuXG5cblRoZSByZWFsIGtpY2tlciBoZXJlIGlzLCB3aGVyZSBpcyBgdHJhbnNmZXJfYXJnc190b19zdGFja2AgZGVmaW5lZD8gSSBrbm93IHRoYXQgdXN1YWxseSBpdCdzIGRlZmluZWQgaW4gYGZzL2V4ZWMuY2AsICpidXQgb25seSogaWYgYENPTkZJR19NTVVgIGlzICpub3QqIGVuYWJsZWQhIFNvLCBpcyB0aGVyZSBhbiBhbHRlcm5hdGUgZGVmaW5pdGlvbiBzb21ld2hlcmUgZWxzZSBmb3IgTU1VLWVuYWJsZWQgc3lzdGVtcz8gVGhhdCdzIHRoZSBjcnVjaWFsIHBvaW50IEkgbmVlZCB0byBpbnZlc3RpZ2F0ZS4gSSd2ZSBnb3QgYSBwb3RlbnRpYWwgY29uZmxpY3QgaGVyZSwgSSdsbCBoYXZlIHRvIHNlZSB3aGVyZSBpdCBjb21lcyBmcm9tLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDE2MywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDAzOjU1OjA3LjQ2MjM3NzAxMVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzMTMxMzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyYW5zZmVyX2FyZ3NfdG9fc3RhY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2JpbmZtdF9lbGZfZmRwaWMuYz00OTY9c3RhdGljIGludCBjcmVhdGVfZWxmX2ZkcGljX3RhYmxlcyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxcbi0tXFxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTUyMi1cXHQvKiBzdGFjayB0aGUgcHJvZ3JhbSBhcmd1bWVudHMgYW5kIGVudmlyb25tZW50ICovXFxuZnMvYmluZm10X2VsZl9mZHBpYy5jOjUyMzpcXHRpZiAodHJhbnNmZXJfYXJnc190b19zdGFjayhicHJtLCBcXHUwMDI2c3ApIFxcdTAwM2MgMClcXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtNTI0LVxcdFxcdHJldHVybiAtRUZBVUxUO1xcbi0tXFxuZnMvYmluZm10X2ZsYXQuYz04NTU9c3RhdGljIGludCBsb2FkX2ZsYXRfYmluYXJ5KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuLS1cXG5mcy9iaW5mbXRfZmxhdC5jLTkxMS1cXHQvKiBjb3B5IHRoZSBhcmcgcGFnZXMgb250byB0aGUgc3RhY2sgKi9cXG5mcy9iaW5mbXRfZmxhdC5jOjkxMjpcXHRyZXMgPSB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrKGJwcm0sIFxcdTAwMjZjdXJyZW50LVxcdTAwM2VtbS1cXHUwMDNlc3RhcnRfc3RhY2spO1xcbmZzL2JpbmZtdF9mbGF0LmMtOTEzLVxcdGlmICghcmVzKVxcbi0tXFxuZnMvZXhlYy5jPTcyNj1FWFBPUlRfU1lNQk9MKHNldHVwX2FyZ19wYWdlcyk7XFxuLS1cXG5mcy9leGVjLmMtNzMzLSAqL1xcbmZzL2V4ZWMuYzo3MzQ6aW50IHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2soc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcXG5mcy9leGVjLmMtNzM1LVxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgKnNwX2xvY2F0aW9uKVxcbi0tXFxuZnMvZXhlYy5jLTc1OS19XFxuZnMvZXhlYy5jOjc2MDpFWFBPUlRfU1lNQk9MKHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2spO1xcbmZzL2V4ZWMuYy03NjEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDAzOjU1OjA3LjU2NTUxNDE4OVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDYyNTYzMzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgRUxGX0ZEUElDIGFuZCBNTVUgQ29tcGF0aWJpbGl0eSoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIFRoaXMgZG9lc24ndCBxdWl0ZSBhZGQgdXAuIFRoZSBjb2RlIHNlZW1zIHRvIGJlIGluZGljYXRpbmcgdGhhdCBgdHJhbnNmZXJfYXJnc190b19zdGFja2AgaXMgb25seSBkZWZpbmVkIGlmIHdlICpkb24ndCogaGF2ZSBgQ09ORklHX01NVWAgZW5hYmxlZC4gVGhhdCBmZWVscyB3cm9uZywgYmVjYXVzZSBJIGtub3cgd2UgaGF2ZSBFTEYgRkRQSUMgYmluYXJpZXMgdGhhdCBjb21waWxlIG9uIEFSTSBhcmNoaXRlY3R1cmVzICp3aXRoKiBhbiBNTVUuIEhvdyBpcyB0aGlzIHdvcmtpbmc/IEkgbmVlZCB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLlxuXG5UaGUgb2J2aW91cyBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgc291cmNlLiBMZXQgbWUgZ28gZGlyZWN0bHkgdG8gYGZzL2JpbmZtdF9lbGZfZmRwaWMuY2AgYW5kIGh1bnQgZm9yIHRoYXQgYCNpZm5kZWYgQ09ORklHX01NVWAgY29uZGl0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24gd2l0aGluIHRoYXQgZmlsZSwgaG93IGl0J3MgZGVhbGluZyB3aXRoIHRoZSBzdGFjayBhcmd1bWVudCB0cmFuc2ZlciwgYW5kIHdoZXJlIHRoaXMgcG90ZW50aWFsbHkgY29uZGl0aW9uYWwgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIGZyb20uIFRoZXJlIG11c3QgYmUgc29tZSBhZGRpdGlvbmFsIGxvZ2ljIHRoYXQgSSBhbSBtaXNzaW5nLiBMZXQncyBzZWUgaWYgdGhpcyByZXZlYWxzIHRoZSBkaXNjcmVwYW5jeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUwNzYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMzo1NToxMS4wMjgwODAyMTdaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMTQ5ODI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19NTVVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvYmluZm10X2VsZl9mZHBpYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2JpbmZtdF9lbGZfZmRwaWMuYz02ND1zdGF0aWMgaW50IGNyZWF0ZV9lbGZfZmRwaWNfdGFibGVzKHN0cnVjdCBsaW51eF9iaW5wcm0gKiwgc3RydWN0IG1tX3N0cnVjdCAqLFxcbi0tXFxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTY3LVxcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYzo2ODojaWZuZGVmIENPTkZJR19NTVVcXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtNjktc3RhdGljIGludCBlbGZfZmRwaWNfbWFwX2ZpbGVfY29uc3RkaXNwX29uX3VjbGludXgoc3RydWN0IGVsZl9mZHBpY19wYXJhbXMgKixcXG4tLVxcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYz0xODI9c3RhdGljIGludCBsb2FkX2VsZl9mZHBpY19iaW5hcnkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG4tLVxcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYy0xOTAtI2VuZGlmXFxuZnMvYmluZm10X2VsZl9mZHBpYy5jOjE5MTojaWZuZGVmIENPTkZJR19NTVVcXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtMTkyLVxcdHVuc2lnbmVkIGxvbmcgc3RhY2tfcHJvdDtcXG4tLVxcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYy0yMTItXFx0aWYgKCFlbGZfY2hlY2tfZmRwaWMoXFx1MDAyNmV4ZWNfcGFyYW1zLmhkcikpIHtcXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmM6MjEzOiNpZmRlZiBDT05GSUdfTU1VXFxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTIxNC1cXHRcXHQvKiBiaW5mbXRfZWxmIGhhbmRsZXMgbm9uLWZkcGljIGVsZiBleGNlcHQgb24gbm9tbXUgKi9cXG4tLVxcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYy0yODgtXFx0XFx0Y2FzZSBQVF9MT0FEOlxcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYzoyODk6I2lmZGVmIENPTkZJR19NTVVcXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtMjkwLVxcdFxcdFxcdGlmIChleGVjX3BhcmFtcy5sb2FkX2FkZHIgPT0gMClcXG4tLVxcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYy0zNjUtXFxuZnMvYmluZm10X2VsZl9mZHBpYy5jOjM2NjojaWZkZWYgQ09ORklHX01NVVxcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYy0zNjctXFx0ZWxmX2ZkcGljX2FyY2hfbGF5X291dF9tbShcXHUwMDI2ZXhlY19wYXJhbXMsXFxuLS1cXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtNDAxLVxcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYzo0MDI6I2lmZGVmIENPTkZJR19NTVVcXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtNDAzLVxcdGlmICghY3VycmVudC1cXHUwMDNlbW0tXFx1MDAzZXN0YXJ0X2JyaylcXG4tLVxcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYz00OTY9c3RhdGljIGludCBjcmVhdGVfZWxmX2ZkcGljX3RhYmxlcyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxcbi0tXFxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTUxMS1cXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmM6NTEyOiNpZmRlZiBDT05GSUdfTU1VXFxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTUxMy1cXHQvKiBJbiBzb21lIGNhc2VzIChlLmcuIEh5cGVyLVRocmVhZGluZyksIHdlIHdhbnQgdG8gYXZvaWQgTDEgZXZpY3Rpb25zXFxuLS1cXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtNjk1LVxcdC8qIGZpbGwgaW4gdGhlIGFyZ3ZbXSBhcnJheSAqL1xcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYzo2OTY6I2lmZGVmIENPTkZJR19NTVVcXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtNjk3LVxcdGN1cnJlbnQtXFx1MDAzZW1tLVxcdTAwM2Vhcmdfc3RhcnQgPSBicHJtLVxcdTAwM2VwO1xcbi0tXFxuZnMvYmluZm10X2VsZl9mZHBpYy5jPTc0NT1zdGF0aWMgaW50IGVsZl9mZHBpY19tYXBfZmlsZShzdHJ1Y3QgZWxmX2ZkcGljX3BhcmFtcyAqcGFyYW1zLFxcbi0tXFxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTc1MC1cXHRzdHJ1Y3QgZWxmX2ZkcGljX2xvYWRtYXAgKmxvYWRtYXA7XFxuZnMvYmluZm10X2VsZl9mZHBpYy5jOjc1MTojaWZkZWYgQ09ORklHX01NVVxcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYy03NTItXFx0c3RydWN0IGVsZl9mZHBpY19sb2Fkc2VnICptc2VnO1xcbi0tXFxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTc4Mi1cXHRjYXNlIEVMRl9GRFBJQ19GTEFHX0NPTlRJR1VPVVM6XFxuZnMvYmluZm10X2VsZl9mZHBpYy5jOjc4MzojaWZuZGVmIENPTkZJR19NTVVcXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtNzg0LVxcdFxcdHJldCA9IGVsZl9mZHBpY19tYXBfZmlsZV9jb25zdGRpc3Bfb25fdWNsaW51eChwYXJhbXMsIGZpbGUsIG1tKTtcXG4tLVxcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYy04NzctXFx0ICovXFxuZnMvYmluZm10X2VsZl9mZHBpYy5jOjg3ODojaWZkZWYgQ09ORklHX01NVVxcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYy04NzktXFx0bmxvYWRzID0gbG9hZG1hcC1cXHUwMDNlbnNlZ3M7XFxuLS1cXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtOTI4LSAqL1xcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYzo5Mjk6I2lmbmRlZiBDT05GSUdfTU1VXFxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTkzMC1zdGF0aWMgaW50IGVsZl9mZHBpY19tYXBfZmlsZV9jb25zdGRpc3Bfb25fdWNsaW51eChcXG4tLVxcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYz0xMDE1PXN0YXRpYyBpbnQgZWxmX2ZkcGljX21hcF9maWxlX2J5X2RpcmVjdF9tbWFwKHN0cnVjdCBlbGZfZmRwaWNfcGFyYW1zICpwYXJhbXMsXFxuLS1cXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtMTEyOS1cXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmM6MTEzMDojaWZkZWYgQ09ORklHX01NVVxcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYy0xMTMxLVxcdFxcdHVuc2lnbmVkIGxvbmcgZXhjZXNzMVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMzo1NToxMS4wOTEyNTYxNDVaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkyNjAwODk3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgRkRQSUMgRUxGIEludGVycHJldGVyKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCBiYXNlZCBvbiB0aGUgY3VycmVudCBjb250ZXh0LCB0aGUgaXNzdWUncyBwcm9iYWJseSByZWxhdGVkIHRvIGhvdyB3ZSdyZSBoYW5kbGluZyBGRFBJQy1zcGVjaWZpYyBFTEYgYmluYXJpZXMuIFRpbWUgdG8ganVtcCBpbnRvIHRoZSBjb2RlIGRpcmVjdGx5LiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBzdGFydCBieSBsb29raW5nIGF0IGBmcy9iaW5mbXRfZWxmX2ZkcGljLmNgIGFuZCB6ZXJvaW5nIGluIGFyb3VuZCBsaW5lIDUxMi4gVGhhdCBsb2NhdGlvbiBmZWVscyBsaWtlIGEgbGlrZWx5IHNwb3QgdG8gZmluZCB0aGUgY29yZSBsb2dpYyBmb3IgdGhlIGR5bmFtaWMgbGlua2luZyBvciByZWxvY2F0aW9uIHByb2Nlc3MsIHRoZSBhcmVhIEkgc3VzcGVjdCB0aGUgYnVnIG1pZ2h0IGJlIGx1cmtpbmcuIEl04oCZcyB3aGVyZSB0aGluZ3MgdXN1YWxseSBnZXQgaW50ZXJlc3Rpbmcgd2hlbiBkZWFsaW5nIHdpdGggRkRQSUMncyBhZGRyZXNzIHNwYWNlIG1hbmlwdWxhdGlvbnMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBleGFjdGx5IGhvdyB3ZSdyZSBtYW5hZ2luZyB0aGUgR09UL1BMVCBlbnRyaWVzIHRoZXJlIGFuZCBpZiB0aGVyZSdzIGFueSBvYnZpb3VzIGZsYXcgaW4gdGhlIGFyZ3VtZW50IGhhbmRsaW5nIG9yIHBvaW50ZXIgZGVyZWZlcmVuY2luZyB0aGF0IGNvdWxkIGJlIGNhdXNpbmcgdGhlIG9ic2VydmVkIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjYzMCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDAzOjU1OjE0LjAxNzI2NzUzMVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDIyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvYmluZm10X2VsZl9mZHBpYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUwMDpcXHR7XFxuIDUwMTpcXHRcXHRjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCA9IGN1cnJlbnRfY3JlZCgpO1xcbiA1MDI6XFx0XFx0dW5zaWduZWQgbG9uZyBzcCwgY3NwLCBuaXRlbXM7XFxuIDUwMzpcXHRcXHRlbGZfY2FkZHJfdCBfX3VzZXIgKmFyZ3YsICplbnZwO1xcbiA1MDQ6XFx0XFx0c2l6ZV90IHBsYXRmb3JtX2xlbiA9IDAsIGxlbjtcXG4gNTA1OlxcdFxcdGNoYXIgKmtfcGxhdGZvcm0sICprX2Jhc2VfcGxhdGZvcm07XFxuIDUwNjpcXHRcXHRjaGFyIF9fdXNlciAqdV9wbGF0Zm9ybSwgKnVfYmFzZV9wbGF0Zm9ybSwgKnA7XFxuIDUwNzpcXHRcXHRpbnQgbG9vcDtcXG4gNTA4OlxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwO1xcbiA1MDk6XFx0XFx0aW50IGVpX2luZGV4O1xcbiA1MTA6XFx0XFx0ZWxmX2FkZHJfdCAqZWxmX2luZm87XFxuIDUxMTpcXHRcXG4gNTEyOlxcdCNpZmRlZiBDT05GSUdfTU1VXFxuIDUxMzpcXHRcXHQvKiBJbiBzb21lIGNhc2VzIChlLmcuIEh5cGVyLVRocmVhZGluZyksIHdlIHdhbnQgdG8gYXZvaWQgTDEgZXZpY3Rpb25zXFxuIDUxNDpcXHRcXHQgKiBieSB0aGUgcHJvY2Vzc2VzIHJ1bm5pbmcgb24gdGhlIHNhbWUgcGFja2FnZS4gT25lIHRoaW5nIHdlIGNhbiBkbyBpc1xcbiA1MTU6XFx0XFx0ICogdG8gc2h1ZmZsZSB0aGUgaW5pdGlhbCBzdGFjayBmb3IgdGhlbSwgc28gd2UgZ2l2ZSB0aGUgYXJjaGl0ZWN0dXJlXFxuIDUxNjpcXHRcXHQgKiBhbiBvcHBvcnR1bml0eSB0byBkbyBzbyBoZXJlLlxcbiA1MTc6XFx0XFx0ICovXFxuIDUxODpcXHRcXHRzcCA9IGFyY2hfYWxpZ25fc3RhY2soYnBybS1cXHUwMDNlcCk7XFxuIDUxOTpcXHQjZWxzZVxcbiA1MjA6XFx0XFx0c3AgPSBtbS1cXHUwMDNlc3RhcnRfc3RhY2s7XFxuIDUyMTpcXHRcXG4gNTIyOlxcdFxcdC8qIHN0YWNrIHRoZSBwcm9ncmFtIGFyZ3VtZW50cyBhbmQgZW52aXJvbm1lbnQgKi9cXG4gNTIzOlxcdFxcdGlmICh0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrKGJwcm0sIFxcdTAwMjZzcCkgXFx1MDAzYyAwKVxcbiA1MjQ6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDUyNTpcXHRcXHRzcCBcXHUwMDI2PSB+MTU7XFxuIDUyNjpcXHQjZW5kaWZcXG4gNTI3OlxcdFxcbiA1Mjg6XFx0XFx0LypcXG4gNTI5OlxcdFxcdCAqIElmIHRoaXMgYXJjaGl0ZWN0dXJlIGhhcyBhIHBsYXRmb3JtIGNhcGFiaWxpdHkgc3RyaW5nLCBjb3B5IGl0XFxuIDUzMDpcXHRcXHQgKiB0byB1c2Vyc3BhY2UuICBJbiBzb21lIGNhc2VzIChTcGFyYyksIHRoaXMgaW5mbyBpcyBpbXBvc3NpYmxlXFxuIDUzMTpcXHRcXHQgKiBmb3IgdXNlcnNwYWNlIHRvIGdldCBhbnkgb3RoZXIgd2F5LCBpbiBvdGhlcnMgKGkzODYpIGl0IGlzXFxuIDUzMjpcXHRcXHQgKiBtZXJlbHkgZGlmZmljdWx0LlxcbiA1MzM6XFx0XFx0ICovXFxuIDUzNDpcXHRcXHRrX3BsYXRmb3JtID0gRUxGX1BMQVRGT1JNO1xcbiA1MzU6XFx0XFx0dV9wbGF0Zm9ybSA9IE5VTEw7XFxuIDUzNjpcXHRcXG4gNTM3OlxcdFxcdGlmIChrX3BsYXRmb3JtKSB7XFxuIDUzODpcXHRcXHRcXHRwbGF0Zm9ybV9sZW4gPSBzdHJsZW4oa19wbGF0Zm9ybSkgKyAxO1xcbiA1Mzk6XFx0XFx0XFx0c3AgLT0gcGxhdGZvcm1fbGVuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMzo1NToxNC4wMTczNzExMDFaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgxNDkzOTQyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBBcmNoaXRlY3R1cmUqKlxuXG5SaWdodCwgc28gYHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2tgLi4uIFRoYXQncyBvbmx5IHRyaWdnZXJlZCB3aGVuIGBDT05GSUdfTU1VYCBpcyAqbm90KiBkZWZpbmVkIHdpdGhpbiBgZnMvYmluZm10X2VsZl9mZHBpYy5jYC4gSW50ZXJlc3RpbmcuIE15IG1lbnRhbCBtYXAgaXMgc3RhcnRpbmcgdG8gbGlnaHQgdXAgd2l0aCBwb3NzaWJpbGl0aWVzLiBUaGlzIHN1Z2dlc3RzIGEgdmVyeSBzcGVjaWZpYywgcmVzb3VyY2UtY29uc3RyYWluZWQgYXJjaGl0ZWN0dXJlLCBwcm9iYWJseSBzb21ldGhpbmcgZW1iZWRkZWQgb3IgcmVhbC10aW1lLiBUaGUgbGFjayBvZiBhIE1lbW9yeSBNYW5hZ2VtZW50IFVuaXQgKE1NVSkgaXMgYSBzaWduaWZpY2FudCBjbHVlLiBJdCBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggYSBkaWZmZXJlbnQgcGFyYWRpZ20sIGxpa2VseSBzaW1wbGVyIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBhIG1vcmUgZGlyZWN0IGFkZHJlc3Mgc3BhY2UuIFRoZSBgdHJhbnNmZXJfYXJnc190b19zdGFja2AgZnVuY3Rpb24gaXRzZWxmIG11c3QgYmUgaGFuZGxpbmcgdGhlIGNyaXRpY2FsIHRhc2sgb2YgcGxhY2luZyBjb21tYW5kLWxpbmUgYXJndW1lbnRzIG9udG8gdGhlIHN0YWNrIGluIHRoaXMgZW52aXJvbm1lbnQsIHdoaWNoIGlzIGZ1bmRhbWVudGFsIGZvciBwcm9ncmFtIGV4ZWN1dGlvbi5cblxuTm93LCB3aGVyZSBlbHNlIG1pZ2h0IHdlIHNlZSB0aGlzIGtpbmQgb2YgY29uZGl0aW9uYWwgYmVoYXZpb3I/IE5hdHVyYWxseSwgSSBuZWVkIHRvIGNoZWNrIGBmcy9iaW5mbXRfZmxhdC5jYC4gR2l2ZW4gdGhhdCBgZWxmX2ZkcGljYCBpcyByZWxhdGVkIHRvIGR5bmFtaWNhbGx5IGxpbmtlZCBleGVjdXRhYmxlcywgYW5kIHRoZSBgZmxhdGAgYmluZm10IGlzIG9mdGVuIGFzc29jaWF0ZWQgd2l0aCBzaW1wbGVyLCBwb3RlbnRpYWxseSBub24tcmVsb2NhdGFibGUgZm9ybWF0cywgSSBzdXNwZWN0IGBmbGF0YCBtaWdodCBhbHNvIGhhdmUgYSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBmb3IgaGFuZGxpbmcgdGhlc2Ugc2FtZSBhcmd1bWVudHMgb24gbm9uLU1NVSBzeXN0ZW1zLiBUaGlzIGlzIGFsbCBhYm91dCBlbnN1cmluZyBjb21wYXRpYmlsaXR5IGFuZCBlZmZpY2llbnQgb3BlcmF0aW9uIGFjcm9zcyBkaWZmZXJlbnQgaGFyZHdhcmUgY29uZmlndXJhdGlvbnMuIEknbSBndWVzc2luZyB3ZSdsbCBzZWUgcGFyYWxsZWwgbG9naWMgb3Igc2ltaWxhciBtZWNoYW5pc21zIHRoZXJlIHRvIGFjY29tcGxpc2ggdGhlIHNhbWUgYXJndW1lbnQgdHJhbnNmZXIsIGJ1dCBwb3RlbnRpYWxseSB1c2luZyBhIG1vcmUgYmFzaWMgb3Igb3B0aW1pemVkIG1ldGhvZCBzdWl0YWJsZSBmb3IgZW52aXJvbm1lbnRzIHdpdGhvdXQgYW4gTU1VLiBMZXQncyBzZWUgd2hhdCdzIGluIGBmbGF0LmNgLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NTE5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMzo1NToxNy44MzIzMTM0MDNaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNDEzMzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19NTVVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvYmluZm10X2ZsYXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9iaW5mbXRfZmxhdC5jPTQwNj1zdGF0aWMgaW50IGxvYWRfZmxhdF9maWxlKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXFxuLS1cXG5mcy9iaW5mbXRfZmxhdC5jLTUyNy1cXHQgKi9cXG5mcy9iaW5mbXRfZmxhdC5jOjUyODpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX01NVSkgXFx1MDAyNlxcdTAwMjYgIShmbGFncyBcXHUwMDI2IChGTEFUX0ZMQUdfUkFNfEZMQVRfRkxBR19HWklQKSkpIHtcXG5mcy9iaW5mbXRfZmxhdC5jLTUyOS1cXHRcXHQvKlxcbi0tXFxuZnMvYmluZm10X2ZsYXQuYy02MjAtXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgRkxBVF9GTEFHX0daSVApIHtcXG5mcy9iaW5mbXRfZmxhdC5jOjYyMTojaWZuZGVmIENPTkZJR19NTVVcXG5mcy9iaW5mbXRfZmxhdC5jLTYyMi1cXHRcXHRcXHRyZXN1bHQgPSBkZWNvbXByZXNzX2V4ZWMoYnBybSwgc2l6ZW9mKHN0cnVjdCBmbGF0X2hkciksXFxuLS1cXG5mcy9iaW5mbXRfZmxhdC5jLTY1My1cXHRcXHRcXHRpZiAoIUlTX0VSUl9WQUxVRShyZXN1bHQpKSB7XFxuZnMvYmluZm10X2ZsYXQuYzo2NTQ6I2lmbmRlZiBDT05GSUdfTU1VXFxuZnMvYmluZm10X2ZsYXQuYy02NTUtXFx0XFx0XFx0XFx0cmVzdWx0ID0gZGVjb21wcmVzc19leGVjKGJwcm0sIHRleHRfbGVuLCAoY2hhciAqKSBkYXRhcG9zLFxcbi0tXFxuZnMvYmluZm10X2ZsYXQuYy03MDctXFx0Y3VycmVudC1cXHUwMDNlbW0tXFx1MDAzZWJyayA9IChjdXJyZW50LVxcdTAwM2VtbS1cXHUwMDNlc3RhcnRfYnJrICsgMykgXFx1MDAyNiB+MztcXG5mcy9iaW5mbXRfZmxhdC5jOjcwODojaWZuZGVmIENPTkZJR19NTVVcXG5mcy9iaW5mbXRfZmxhdC5jLTcwOS1cXHRjdXJyZW50LVxcdTAwM2VtbS1cXHUwMDNlY29udGV4dC5lbmRfYnJrID0gbWVtcCArIG1lbXBfc2l6ZSAtIHN0YWNrX2xlbjtcXG4tLVxcbmZzL2JpbmZtdF9mbGF0LmM9ODU1PXN0YXRpYyBpbnQgbG9hZF9mbGF0X2JpbmFyeShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbi0tXFxuZnMvYmluZm10X2ZsYXQuYy04NzItXFx0ICovXFxuZnMvYmluZm10X2ZsYXQuYzo4NzM6I2lmbmRlZiBDT05GSUdfTU1VXFxuZnMvYmluZm10X2ZsYXQuYy04NzQtXFx0c3RhY2tfbGVuICs9IFBBR0VfU0laRSAqIE1BWF9BUkdfUEFHRVMgLSBicHJtLVxcdTAwM2VwOyAvKiB0aGUgc3RyaW5ncyAqL1xcbi0tXFxuZnMvYmluZm10X2ZsYXQuYy05MDAtXFxuZnMvYmluZm10X2ZsYXQuYzo5MDE6I2lmZGVmIENPTkZJR19NTVVcXG5mcy9iaW5mbXRfZmxhdC5jLTkwMi1cXHRyZXMgPSBzZXR1cF9hcmdfcGFnZXMoYnBybSwgU1RBQ0tfVE9QLCBFWFNUQUNLX0RFRkFVTFQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMzo1NToxNy44OTM3MzExNzJaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg3MjA2NTQwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgZnMvYmluZm10X2ZsYXQuY2AqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBmbGF0IGJpbmFyeSBmb3JtYXQgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGhvdyBpdCdzIGxvYWRlZCBhbmQgZXhlY3V0ZWQuIEkga25vdyB0aGVyZSdzIGEgZ29vZCBjaHVuayBvZiBjb2RlIGRlYWxpbmcgd2l0aCB0aGlzIGluIHRoZSBmaWxlc3lzdGVtIGhhbmRsaW5nLiBTbywgSSdtIHRoaW5raW5nLCBsZXQncyB6b29tIGluIG9uIGBmcy9iaW5mbXRfZmxhdC5jYCBhcm91bmQgbGluZSA5MDEuIFRoYXQgZmVlbHMgbGlrZSBhIGdvb2Qgc3BvdCB0byBzdGFydCBkaWdnaW5nLiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgbWVhdCBvZiB0aGUgbG9hZGVyIG9yIGludGVycHJldGVyIGZ1bmN0aW9uIGJlZ2lucy4gSSB3YW50IHRvIHNlZSB3aGF0J3MgaGFwcGVuaW5nIGF0IHRoYXQgbGV2ZWwgdG8gcGllY2UgdG9nZXRoZXIgdGhlIGxvYWRpbmcgcHJvY2Vzcy4gSSBoYXZlIGEgaHVuY2ggaXQncyByZWxhdGVkIHRvIHRoZSBgbG9hZF9mbGF0X2JpbmFyeWAgb3IgYGV4ZWNfZmxhdGAgb3Igc29tZXRoaW5nIGFsb25nIHRob3NlIGxpbmVzLiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSBhdCB0aGF0IGxvY2F0aW9uIGlzIGRvaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODUwOSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDAzOjU1OjIwLjc2NTc5ODkzNVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9iaW5mbXRfZmxhdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg5MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg5MDpcXHRcXHRcXHRcXHRcXHRsaWJpbmZvLmxpYl9saXN0W2pdLnN0YXJ0X2RhdGEgOiBVTkxPQURFRF9MSUI7XFxuIDg5MTpcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIF9fdXNlciAqcCA9ICh1bnNpZ25lZCBsb25nIF9fdXNlciAqKVxcbiA4OTI6XFx0XFx0XFx0XFx0XFx0bGliaW5mby5saWJfbGlzdFtpXS5zdGFydF9kYXRhO1xcbiA4OTM6XFx0XFx0XFx0XFx0cCAtPSBqICsgMTtcXG4gODk0OlxcdFxcdFxcdFxcdGlmIChwdXRfdXNlcih2YWwsIHApKVxcbiA4OTU6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDg5NjpcXHRcXHRcXHR9XFxuIDg5NzpcXHRcXHR9XFxuIDg5ODpcXHRcXG4gODk5OlxcdFxcdHNldF9iaW5mbXQoXFx1MDAyNmZsYXRfZm9ybWF0KTtcXG4gOTAwOlxcdFxcbiA5MDE6XFx0I2lmZGVmIENPTkZJR19NTVVcXG4gOTAyOlxcdFxcdHJlcyA9IHNldHVwX2FyZ19wYWdlcyhicHJtLCBTVEFDS19UT1AsIEVYU1RBQ0tfREVGQVVMVCk7XFxuIDkwMzpcXHRcXHRpZiAoIXJlcylcXG4gOTA0OlxcdFxcdFxcdHJlcyA9IGNyZWF0ZV9mbGF0X3RhYmxlcyhicHJtLCBicHJtLVxcdTAwM2VwKTtcXG4gOTA1OlxcdCNlbHNlXFxuIDkwNjpcXHRcXHQvKiBTdGFzaCBvdXIgaW5pdGlhbCBzdGFjayBwb2ludGVyIGludG8gdGhlIG1tIHN0cnVjdHVyZSAqL1xcbiA5MDc6XFx0XFx0Y3VycmVudC1cXHUwMDNlbW0tXFx1MDAzZXN0YXJ0X3N0YWNrID1cXG4gOTA4OlxcdFxcdFxcdCgoY3VycmVudC1cXHUwMDNlbW0tXFx1MDAzZWNvbnRleHQuZW5kX2JyayArIHN0YWNrX2xlbiArIDMpIFxcdTAwMjYgfjMpIC0gNDtcXG4gOTA5OlxcdFxcdHByX2RlYnVnKFxcXCJzcD0lbHhcXFxcblxcXCIsIGN1cnJlbnQtXFx1MDAzZW1tLVxcdTAwM2VzdGFydF9zdGFjayk7XFxuIDkxMDpcXHRcXG4gOTExOlxcdFxcdC8qIGNvcHkgdGhlIGFyZyBwYWdlcyBvbnRvIHRoZSBzdGFjayAqL1xcbiA5MTI6XFx0XFx0cmVzID0gdHJhbnNmZXJfYXJnc190b19zdGFjayhicHJtLCBcXHUwMDI2Y3VycmVudC1cXHUwMDNlbW0tXFx1MDAzZXN0YXJ0X3N0YWNrKTtcXG4gOTEzOlxcdFxcdGlmICghcmVzKVxcbiA5MTQ6XFx0XFx0XFx0cmVzID0gY3JlYXRlX2ZsYXRfdGFibGVzKGJwcm0sIGN1cnJlbnQtXFx1MDAzZW1tLVxcdTAwM2VzdGFydF9zdGFjayk7XFxuIDkxNTpcXHQjZW5kaWZcXG4gOTE2OlxcdFxcdGlmIChyZXMpXFxuIDkxNzpcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbiA5MTg6XFx0XFxuIDkxOTpcXHRcXHQvKiBGYWtlIHNvbWUgcmV0dXJuIGFkZHJlc3NlcyB0byBlbnN1cmUgdGhlIGNhbGwgY2hhaW4gd2lsbFxcbiA5MjA6XFx0XFx0ICogaW5pdGlhbGlzZSBsaWJyYXJ5IGluIG9yZGVyIGZvciB1cy4gIFdlIGFyZSByZXF1aXJlZCB0byBjYWxsXFxuIDkyMTpcXHRcXHQgKiBsaWIgMSBmaXJzdCwgdGhlbiAyLCAuLi4gYW5kIGZpbmFsbHkgdGhlIG1haW4gcHJvZ3JhbSAoaWQgMCkuXFxuIDkyMjpcXHRcXHQgKi9cXG4gOTIzOlxcdFxcdHN0YXJ0X2FkZHIgPSBsaWJpbmZvLmxpYl9saXN0WzBdLmVudHJ5O1xcbiA5MjQ6XFx0XFxuIDkyNTpcXHQjaWZkZWYgRkxBVF9QTEFUX0lOSVRcXG4gOTI2OlxcdFxcdEZMQVRfUExBVF9JTklUKHJlZ3MpO1xcbiA5Mjc6XFx0I2VuZGlmXFxuIDkyODpcXHRcXG4gOTI5OlxcdFxcdGZpbmFsaXplX2V4ZWMoYnBybSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDAzOjU1OjIwLjc2NTg5Njc1NVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDQwMzUwMDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIENvZGUncyBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2tgIGlzIG9ubHkgY29tcGlsZWQgd2hlbiBgQ09ORklHX01NVWAgaXMgZGlzYWJsZWQsIGFuZCB0aGF0J3MgdGhlIG9ubHkgcGxhY2UgaXQncyBjYWxsZWQuIEhtbSwgc2luY2Ugc3l6a2FsbGVyIGRvZXNuJ3QgdGFyZ2V0IGAhQ09ORklHX01NVWAgc3lzdGVtcywgYW5kIHdlIGNhbid0IHNwZWNpZnkgYCFDT05GSUdfTU1VYCBpbiBgRW5hYmxlQ29uZmlnc2AgKGl0IGhhcyB0byBiZSBleHBsaWNpdGx5IGVuYWJsZWQpLCB0aGlzIGNvZGUgaXMgZXNzZW50aWFsbHkgdW5yZWFjaGFibGUgaW4gb3VyIGZ1enppbmcgc2V0dXAuIEkgd29uZGVyLCB0aG91Z2gsIGFyZSB0aGVyZSAqYW55KiBzeXprYWxsZXIgdGFyZ2V0cyBvdXQgdGhlcmUgd2hlcmUgYENPTkZJR19NTVVgIG1pZ2h0IGJlIGRpc2FibGVkP1xuXG5Ob3csIHRoZSBwcm9tcHQgZ2l2ZXMgdXMgc29tZSBndWlkYW5jZS4gSXQgc2F5cyB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoIHRhcmdldHMgY29kZSB0aGF0J3MgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZSBlbXVsYXRpb24uIEl0ICppcyogdGVjaG5pY2FsbHkgcG9zc2libGUgdG8gcnVuIGEgbm8tTU1VIGtlcm5lbCBpbiBRRU1VIOKAkyBsaWtlIHdpdGggYHFlbXUtc3lzdGVtLWFybWAgYW5kIGEgbm8tTU1VIG1hY2hpbmUgb3IgYHFlbXUtc3lzdGVtLXJpc2N2NjRgIHdpdGggYSBuby1NTVUgbWFjaGluZS4gQnV0LCBkb2VzIHN5emthbGxlciBoYXZlIGEgc3RhbmRhcmQgc2V0dXAgZm9yIG5vLU1NVSBtYWNoaW5lcz8gSSBkb24ndCB0aGluayBzby4gVGhlIHByb21wdCBhbHNvIHJlcXVpcmVzIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgY29kZSBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgYnV0IHRoaXMgY29kZSAqaXMqIHJlYWNoYWJsZS5cblxuVGhlIHByb21wdCBhbHNvIGFza3MgZm9yIFwia2VybmVsIGNvbmZpZyBmbGFncyB0aGF0IG11c3QgYmUgZXhwbGljaXRseSBlbmFibGVkIHRvIGNvbXBpbGUgYW5kIHRlc3QgdGhlIG1vZGlmaWVkIGNvZGUuXCIgQnV0IGlmIHdlIG5lZWQgdG8gKmRpc2FibGUqIGBDT05GSUdfTU1VYCwgd2UgY2FuJ3QgZG8gaXQgdmlhIGBFbmFibGVDb25maWdzYC4gVGhhdOKAmXMgYSBkZWFkIGVuZC5cblxuV2FpdCwgaXMgdGhlcmUgKmFueSogb3RoZXIgcGxhY2UgYHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2tgIGdldHMgY29tcGlsZWQ/IExldCBtZSBkb3VibGUtY2hlY2suIE5vLCBpdCdzIG9ubHkgaW5zaWRlIHRoZSBgI2lmbmRlZiBDT05GSUdfTU1VYCBibG9jayBpbiBgZnMvZXhlYy5jYC4gSSdtIGNlcnRhaW4gdGhlcmUgYXJlbid0IGFueSBvdGhlciBwbGFjZXMgd2hlcmUgaXQncyB1c2VkIGVpdGhlci5cblxuTGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrIGFnYWluIGlmIHRoZXJlIGlzIGFueSBvdGhlciBwbGFjZSBpdCBpcyB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTQwMSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDAzOjU1OjI2LjgwNjI0OTE0M1oiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk0OTIzOTQwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9iaW5mbXRfZWxmX2ZkcGljLmM9NDk2PXN0YXRpYyBpbnQgY3JlYXRlX2VsZl9mZHBpY190YWJsZXMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcXG4tLVxcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYy01MjItXFx0Lyogc3RhY2sgdGhlIHByb2dyYW0gYXJndW1lbnRzIGFuZCBlbnZpcm9ubWVudCAqL1xcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYzo1MjM6XFx0aWYgKHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2soYnBybSwgXFx1MDAyNnNwKSBcXHUwMDNjIDApXFxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTUyNC1cXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4tLVxcbmZzL2JpbmZtdF9mbGF0LmM9ODU1PXN0YXRpYyBpbnQgbG9hZF9mbGF0X2JpbmFyeShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbi0tXFxuZnMvYmluZm10X2ZsYXQuYy05MTEtXFx0LyogY29weSB0aGUgYXJnIHBhZ2VzIG9udG8gdGhlIHN0YWNrICovXFxuZnMvYmluZm10X2ZsYXQuYzo5MTI6XFx0cmVzID0gdHJhbnNmZXJfYXJnc190b19zdGFjayhicHJtLCBcXHUwMDI2Y3VycmVudC1cXHUwMDNlbW0tXFx1MDAzZXN0YXJ0X3N0YWNrKTtcXG5mcy9iaW5mbXRfZmxhdC5jLTkxMy1cXHRpZiAoIXJlcylcXG4tLVxcbmZzL2V4ZWMuYz03MjY9RVhQT1JUX1NZTUJPTChzZXR1cF9hcmdfcGFnZXMpO1xcbi0tXFxuZnMvZXhlYy5jLTczMy0gKi9cXG5mcy9leGVjLmM6NzM0OmludCB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXFxuZnMvZXhlYy5jLTczNS1cXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nICpzcF9sb2NhdGlvbilcXG4tLVxcbmZzL2V4ZWMuYy03NTktfVxcbmZzL2V4ZWMuYzo3NjA6RVhQT1JUX1NZTUJPTCh0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrKTtcXG5mcy9leGVjLmMtNzYxLVxcbi0tXFxuaW5jbHVkZS9saW51eC9iaW5mbXRzLmg9MTQwPWV4dGVybiBpbnQgc2V0dXBfYXJnX3BhZ2VzKHN0cnVjdCBsaW51eF9iaW5wcm0gKiBicHJtLFxcbi0tXFxuaW5jbHVkZS9saW51eC9iaW5mbXRzLmgtMTQyLVxcdFxcdFxcdCAgIGludCBleGVjdXRhYmxlX3N0YWNrKTtcXG5pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaDoxNDM6ZXh0ZXJuIGludCB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXFxuaW5jbHVkZS9saW51eC9iaW5mbXRzLmgtMTQ0LVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyAqc3BfbG9jYXRpb24pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMzo1NToyOC43NTU0OTI5MTdaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODUxMjkxMDY1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFzb25pbmcgQWJvdXQgRnV6emluZyBhIE5vbi1NTVUgU3BlY2lmaWMgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGZ1bmN0aW9uIGB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrYCwgYW5kIGl0IHNlZW1zIHRvIGJlIHNvbGVseSB3aXRoaW4gdGhlIGAjZWxzZWAgYmxvY2sgb2YgYW4gYCNpZmRlZiBDT05GSUdfTU1VYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLiBUaGlzIG1lYW5zIGl0J3Mgb25seSBjb21waWxlZCBhbmQgdXNlZCBpbiBhcmNoaXRlY3R1cmVzIHdoZXJlIGBDT05GSUdfTU1VYCBpcyAqZGlzYWJsZWQqLCByaWdodD9cblxuTGV0J3Mgc2Vl4oCmIG02OGssIHJpc2N2LCBzaCwgeHRlbnNhLCBhcm0gYXJlIGFyY2hpdGVjdHVyZXMgd2hlcmUgYENPTkZJR19NTVVgIGlzIGVhc2lseSBkaXNhYmxlZC4gU3l6a2FsbGVyLCBob3dldmVyLCBwcmltYXJpbHkgdGFyZ2V0cyB4ODZfNjQsIGFybTY0LCByaXNjdjY0LCBhbmQgczM5MHguIE9uIHJpc2N2NjQsIGBDT05GSUdfTU1VYCAqY2FuKiBiZSBkaXNhYmxlZCwgYnV04oCmXG5cbklmIEkgcmV0dXJuIGBXb3J0aEZ1enppbmc9dHJ1ZWAsIEkgaGF2ZSB0byBzcGVjaWZ5IGBFbmFibGVDb25maWdzYC4gSSBjYW4ndCBkaXJlY3RseSBzcGVjaWZ5IGAhTU1VYCB0aGVyZSwgd2hpY2ggaXMgYSBwcm9ibGVtLiBJZiBJIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCwgSSBjYW4gZXhwbGFpbiB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgZm9yIG5vbW11IGFyY2hpdGVjdHVyZXMgb25seSwgd2hpY2ggYXJlIG5vdCB0eXBpY2FsIHN5emthbGxlciB0YXJnZXRzIHRoYXQgcmVxdWlyZSBkaXNhYmxpbmcgYENPTkZJR19NTVVgLlxuXG5IYW5nIG9uLCB3aGF0IGlmIEkganVzdCBzZXQgYFdvcnRoRnV6emluZz1mYWxzZWAgYW5kIHVzZSB0aGUgcmVhc29uaW5nIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNvbXBpbGVkIGZvciBgIUNPTkZJR19NTVVgIGtlcm5lbHMsIHdoaWNoIFN5emthbGxlciB0eXBpY2FsbHkgZG9lc24ndCBmdXp6IGR1ZSB0byB0aGUgbmVlZCB0byBkaXNhYmxlIGBDT05GSUdfTU1VYCwgc29tZXRoaW5nIEkgY2FuJ3Qgc3BlY2lmeS5cblxuQWx0ZXJuYXRpdmVseSwgY291bGQgSSByZXR1cm4gYFdvcnRoRnV6emluZz10cnVlYCB3aXRoIGFuIGVtcHR5IGBFbmFibGVDb25maWdzYCBhbmQgYWRkIGB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrYCB0byBgRm9jdXNTeW1ib2xzYD8gSWYgSSBkaWQgdGhhdCwgdGhlIGZ1enppbmcgaW5mcmFzdHJ1Y3R1cmUgKndvdWxkKiB0cnkgdG8gZnV6eiBpdC4gQnV0LCBhbmQgdGhpcyBpcyBjcnVjaWFsLCBpdCAqd29uJ3QqIGJlIGNvbXBpbGVkIGluIHRoZSBkZWZhdWx0IGtlcm5lbCB0aGF0IGhhcyBgQ09ORklHX01NVT15YC4gU28gdGhlIGNvZGUgd291bGQgbmV2ZXIgYmUgcmVhY2hlZCwgYW5kIHRoZSBjb3ZlcmFnZSB3b3VsZCBiZSB6ZXJvIGFueXdheS5cblxuVGhlcmVmb3JlLCB0aGUgYmVzdCBvcHRpb24gaXMgY2xlYXJseSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIExldCBtZSBjb25maXJtIHRoaXMgaXMgY29ycmVjdOKAplxuXG5Pa2F5LCBsZXQgbWUgY2hlY2sgdGhlIGNvZGUgZGlyZWN0bHkuIEluIGBmcy9leGVjLmNgLCBJIHNlZTpcblxuYGBgY1xuI2lmZGVmIENPTkZJR19NTVVcbi4uLlxuaW50IHNldHVwX2FyZ19wYWdlcyguLi4pXG4uLi5cbiNlbHNlXG4uLi5cbmludCB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrKC4uLilcbi4uLlxuI2VuZGlmXG5gYGBcblxuWXVwLiBUaGF0J3MgKmV4YWN0bHkqIGFzIEkgc3VzcGVjdGVkLiBgdHJhbnNmZXJfYXJnc190b19zdGFja2AgaXMgKnN0cmljdGx5KiB3aXRoaW4gdGhlIGAjZWxzZWAgYmxvY2suIEl0J3MgaW1wb3NzaWJsZSB0byBjb21waWxlIHRoaXMgZnVuY3Rpb24gd2l0aCBgQ09ORklHX01NVWAgZW5hYmxlZC4gQW5kLCBzaW5jZSBzdGFuZGFyZCBrZXJuZWxzIChlc3BlY2lhbGx5IHRob3NlIHVzZWQgYnkgU3l6a2FsbGVyKSBoYXZlIGBDT05GSUdfTU1VPXlgLCB0aGlzIGNvZGUgaXMgY29tcGxldGVseSBjb21waWxlZCBvdXQuIFRodXMsIEkgd2lsbCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAsIGFuZCB3aWxsIGV4cGxhaW4gdGhpcyBpbiB0aGUgYFJlYXNvbmluZ2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNzYxLCJPdXRwdXRUb2tlbnMiOjEyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMzo1NTozNy4yNjg0MDcxMThaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBtb2RpZmllZCBmdW5jdGlvbiBgdHJhbnNmZXJfYXJnc190b19zdGFja2AgaXMgb25seSBjb21waWxlZCBhbmQgdXNlZCBvbiBub21tdSBhcmNoaXRlY3R1cmVzIChpdCBpcyBsb2NhdGVkIGluc2lkZSBhbiBgI2lmbmRlZiBDT05GSUdfTU1VYCBibG9jayBpbiBgZnMvZXhlYy5jYCkuIFN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzIGFuZCB2aXJ0dWFsaXplZCBzZXR1cHMgKGxpa2UgeDg2XzY0L2FybTY0IFFFTVUgb3IgR0NFKSBydW4gd2l0aCBgQ09ORklHX01NVT15YCwgbWVhbmluZyB0aGlzIGNvZGUgaXMgY29tcGxldGVseSBjb21waWxlZCBvdXQgYW5kIHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgbW9kaWZpZWQgZnVuY3Rpb24gYHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2tgIGlzIG9ubHkgY29tcGlsZWQgYW5kIHVzZWQgb24gbm9tbXUgYXJjaGl0ZWN0dXJlcyAoaXQgaXMgbG9jYXRlZCBpbnNpZGUgYW4gYCNpZm5kZWYgQ09ORklHX01NVWAgYmxvY2sgaW4gYGZzL2V4ZWMuY2ApLiBTdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cyBhbmQgdmlydHVhbGl6ZWQgc2V0dXBzIChsaWtlIHg4Nl82NC9hcm02NCBRRU1VIG9yIEdDRSkgcnVuIHdpdGggYENPTkZJR19NTVU9eWAsIG1lYW5pbmcgdGhpcyBjb2RlIGlzIGNvbXBsZXRlbHkgY29tcGlsZWQgb3V0IGFuZCB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlwnbj[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-22 03:32:46 +0000 UTC FinishedAt: 2026-07-22 03:55:38 +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+CgkJCTx0ZD4yMDI2LzA3LzIyIDAzOjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrYCBpcyBvbmx5IGNvbXBpbGVkIGFuZCB1c2VkIG9uIG5vbW11IGFyY2hpdGVjdHVyZXMgKGl0IGlzIGxvY2F0ZWQgaW5zaWRlIGFuIGAjaWZuZGVmIENPTkZJR19NTVVgIGJsb2NrIGluIGBmcy9leGVjLmNgKS4gU3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMgYW5kIHZpcnR1YWxpemVkIHNldHVwcyAobGlrZSB4ODZfNjQvYXJtNjQgUUVNVSBvciBHQ0UpIHJ1biB3aXRoIGBDT05GSUdfTU1VPXlgLCBtZWFuaW5nIHRoaXMgY29kZSBpcyBjb21wbGV0ZWx5IGNvbXBpbGVkIG91dCBhbmQgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDAzOjUzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNjQxMjU4MmM3NjM1YTRjMWFmYjIzNzhjMmI1YjYyNDVmYTAwM2E3MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDIyIDAzOjUzOjU3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuY1xuaW5kZXggZDU5OTNjZWRjODI5YWYuLmM3YjhmMmQ2MzY2YzQ0IDEwMDY0NFxuLS0tIGEvZnMvZXhlYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leGVjLmNcbkBAIC03NDAsNyAmIzQzOzc0MCw3IEBAIGludCB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXG4gXHRzdG9wID0gYnBybS1cdTAwM2VwIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIFx0c3AgPSAqc3BfbG9jYXRpb247XG4gXG4tXHRmb3IgKGluZGV4ID0gTUFYX0FSR19QQUdFUyAtIDE7IGluZGV4IFx1MDAzZT0gc3RvcDsgaW5kZXgtLSkge1xuJiM0MztcdGZvciAoaW5kZXggPSBNQVhfQVJHX1BBR0VTOyBpbmRleC0tIFx1MDAzZSBzdG9wOyApIHtcbiBcdFx0dW5zaWduZWQgaW50IG9mZnNldCA9IGluZGV4ID09IHN0b3AgPyBicHJtLVx1MDAzZXAgXHUwMDI2IH5QQUdFX01BU0sgOiAwO1xuIFx0XHRjaGFyICpzcmMgPSBrbWFwX2xvY2FsX3BhZ2UoYnBybS1cdTAwM2VwYWdlW2luZGV4XSkgJiM0Mzsgb2Zmc2V0O1xuIFx0XHRzcCAtPSBQQUdFX1NJWkUgLSBvZmZzZXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDM6NTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrYCBpcyBvbmx5IGNvbXBpbGVkIGFuZCB1c2VkIG9uIG5vbW11IGFyY2hpdGVjdHVyZXMgKGl0IGlzIGxvY2F0ZWQgaW5zaWRlIGFuIGAjaWZuZGVmIENPTkZJR19NTVVgIGJsb2NrIGluIGBmcy9leGVjLmNgKS4gU3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMgYW5kIHZpcnR1YWxpemVkIHNldHVwcyAobGlrZSB4ODZfNjQvYXJtNjQgUUVNVSBvciBHQ0UpIHJ1biB3aXRoIGBDT05GSUdfTU1VPXlgLCBtZWFuaW5nIHRoaXMgY29kZSBpcyBjb21wbGV0ZWx5IGNvbXBpbGVkIG91dCBhbmQgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2NDEyNTgyYzc2MzVhNGMxYWZiMjM3OGMyYjViNjI0NWZhMDAzYTcxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgMjIgMDM6NTM6NTcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9leGVjLmMgYi9mcy9leGVjLmMKaW5kZXggZDU5OTNjZWRjODI5YWYuLmM3YjhmMmQ2MzY2YzQ0IDEwMDY0NAotLS0gYS9mcy9leGVjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXhlYy5jCkBAIC03NDAsNyAmIzQzOzc0MCw3IEBAIGludCB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sCiAJc3RvcCA9IGJwcm0tJmd0O3AgJmd0OyZndDsgUEFHRV9TSElGVDsKIAlzcCA9ICpzcF9sb2NhdGlvbjsKIAotCWZvciAoaW5kZXggPSBNQVhfQVJHX1BBR0VTIC0gMTsgaW5kZXggJmd0Oz0gc3RvcDsgaW5kZXgtLSkgewomIzQzOwlmb3IgKGluZGV4ID0gTUFYX0FSR19QQUdFUzsgaW5kZXgtLSAmZ3Q7IHN0b3A7ICkgewogCQl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gaW5kZXggPT0gc3RvcCA/IGJwcm0tJmd0O3AgJmFtcDsgflBBR0VfTUFTSyA6IDA7CiAJCWNoYXIgKnNyYyA9IGttYXBfbG9jYWxfcGFnZShicHJtLSZndDtwYWdlW2luZGV4XSkgJiM0Mzsgb2Zmc2V0OwogCQlzcCAtPSBQQUdFX1NJWkUgLSBvZmZzZXQ7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDAzOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MjQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBmcy9leGVjLmNgIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyB0b3VjaGluZyBgZnMvZXhlYy5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgdHJhbnNmZXJfYXJnc190b19zdGFja2AgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlIGhlcmUgaXMgaW4gdGhlIGxvb3AgdGhhdCBoYW5kbGVzIGFyZ3VtZW50IHRyYW5zZmVyLiBQcmV2aW91c2x5LCBpdCBsb29rcyBsaWtlIHRoZSBsb29wIGNvbmRpdGlvbiB3YXMgZGVjcmVtZW50aW5nIGBpbmRleGAgKmFmdGVyKiB0aGUgY29tcGFyaXNvbiwgc3RhcnRpbmcgZnJvbSBgTUFYX0FSR19QQUdFUyAtIDFgIGFuZCBnb2luZyBkb3duIHRvIGBzdG9wYC4gVGhlIHBhdGNoIHVwZGF0ZXMgdGhpcyB0byBhIHByZS1kZWNyZW1lbnQgaW4gdGhlIGNvbXBhcmlzb24gYGZvciAoaW5kZXggPSBNQVhfQVJHX1BBR0VTOyBpbmRleC0tICZndDsgc3RvcDsgKWAuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGNoYW5nZSB3YXMgbWFkZS4gRmlyc3QsIEkmIzM5O2xsIHB1bGwgdXAgYGZzL2V4ZWMuY2AgYW5kIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgY29udGV4dCBvZiBgdHJhbnNmZXJfYXJnc190b19zdGFja2AuIExldCYjMzk7cyBzZWUgaG93IHRoaXMgY2hhbmdlIGltcGFjdHMgYXJndW1lbnQgaGFuZGxpbmcsIHRoZSBwb3RlbnRpYWwgZWRnZSBjYXNlcywgYW5kIGFueSBpbXBsaWNhdGlvbnMgb24gbWVtb3J5IGFjY2VzcyBwYXR0ZXJucyBkdXJpbmcgcHJvY2VzcyBjcmVhdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgc3VidGxlIG9mZi1ieS1vbmUgZXJyb3JzIG9yIHVuaW50ZW5kZWQgc2lkZSBlZmZlY3RzLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBjcml0aWNhbCBuYXR1cmUgb2YgYXJndW1lbnQgcGFzc2luZyBpbiBwcm9jZXNzIGV4ZWN1dGlvbi4gVGhpcyBsb29rcyBsaWtlIGEgcG90ZW50aWFsbHkgaW1wb3J0YW50IGNoYW5nZSBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdCBmdWxseSBiZWZvcmUgZXZlbiB0aGlua2luZyBhYm91dCBjb21taXR0aW5nIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDAzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyYW5zZmVyX2FyZ3NfdG9fc3RhY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leGVjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXhlYy5jPTcyNj1FWFBPUlRfU1lNQk9MKHNldHVwX2FyZ19wYWdlcyk7XG4tLVxuZnMvZXhlYy5jLTczMy0gKi9cbmZzL2V4ZWMuYzo3MzQ6aW50IHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2soc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcbmZzL2V4ZWMuYy03MzUtXHRcdFx0ICAgdW5zaWduZWQgbG9uZyAqc3BfbG9jYXRpb24pXG4tLVxuZnMvZXhlYy5jLTc1OS19XG5mcy9leGVjLmM6NzYwOkVYUE9SVF9TWU1CT0wodHJhbnNmZXJfYXJnc190b19zdGFjayk7XG5mcy9leGVjLmMtNzYxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDAzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NTkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0FoLCB0aGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgaGVhdnkgbGlmdGluZyBvZiBwYXJhbWV0ZXIgcGFzc2luZyBoYXBwZW5zLiYjMzQ7IEl0JiMzOTtzIHRoZSBwb2ludCB3aGVyZSBhcmd1bWVudHMgZ2V0IG1vdmVkIGZyb20gdGhlaXIgY2FsbGluZyBjb252ZW50aW9uIGxvY2F0aW9uIOKAkyByZWdpc3RlcnMsIHBlcmhhcHMsIG9yIG1lbW9yeSBsb2NhdGlvbnMgb24gdGhlIGNhbGxlciYjMzk7cyBzdGFjayDigJMgdG8gdGhlIGNhbGxlZSYjMzk7cyBzdGFjayBmcmFtZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXJ0ICpwZXJmZWN0bHkqLCBhcyBpdCYjMzk7cyBmdW5kYW1lbnRhbCB0byBob3cgdGhlIGVudGlyZSBzeXN0ZW0gY29tbXVuaWNhdGVzIGJldHdlZW4gZnVuY3Rpb25zLgoKSSYjMzk7bSBpbW1lZGlhdGVseSBsb29raW5nIGZvciB0aGUgdW5kZXJseWluZyBhcmNoaXRlY3R1cmUuIElzIHRoaXMgeDg2LCBBUk0sIFJJU0MtViwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSByZWdpc3RlciB1c2FnZSBhbmQgbWVtb3J5IGFkZHJlc3Npbmcgd2lsbCBiZSBkcmFzdGljYWxseSBkaWZmZXJlbnQgZGVwZW5kaW5nIG9uIHRoZSB0YXJnZXQuIEkmIzM5O20gYWxzbyBjb25zaWRlcmluZyB0aGUgY2FsbGluZyBjb252ZW50aW9uLiBJcyBpdCB0aGUgc3RhbmRhcmQgQyBjYWxsaW5nIGNvbnZlbnRpb24gKGNkZWNsLCBzdGRjYWxsLCBmYXN0Y2FsbCksIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpYWxpemVkIGxpa2UgU3lzdGVtIFYgQU1ENjQgb3IgdGhlIFdpbmRvd3MgeDY0IGNhbGxpbmcgY29udmVudGlvbj8gVGhvc2UgZGV0YWlscyBzaGFwZSBldmVyeXRoaW5nLgoKSSYjMzk7bGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgZXJyb3IgaGFuZGxpbmcuIFdoYXQgaGFwcGVucyBpZiB0aGVyZSBhcmVuJiMzOTt0IGVub3VnaCByZWdpc3RlcnMgYXZhaWxhYmxlIGZvciBhbGwgdGhlIGFyZ3VtZW50cz8gT3IgaWYgYSBwYXJ0aWN1bGFyIGFyZ3VtZW50IGV4Y2VlZHMgdGhlIHNpemUgb2YgYSByZWdpc3Rlcj8gSXMgdGhlcmUgYSBmYWxsYmFjayBtZWNoYW5pc20sIGxpa2UgcHVzaGluZyB0aGUgZXhjZXNzIG9udG8gdGhlIHN0YWNrPyBJZiB0aGVyZSYjMzk7cyBhbiBpc3N1ZSB3aXRoIHRoZSBwYXJhbWV0ZXJzIHRoZW1zZWx2ZXMsIEkgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gbWlnaHQgYmVoYXZlIG9yIGV2ZW4gdHJpZ2dlciBlcnJvcnMuCgpGdXJ0aGVybW9yZSwgSSYjMzk7bGwgYmUga2VlcGluZyBhbiBleWUgb3V0IGZvciBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcy4gQ2FuIHRoZSBhcmd1bWVudHMgYmUgbW92ZWQgbW9yZSBlZmZpY2llbnRseT8gQXJlIHRoZXJlIGFueSByZWR1bmRhbnQgbW92ZXMgdGhhdCBjYW4gYmUgZWxpbWluYXRlZD8gUGVyaGFwcyB0aGVyZSYjMzk7cyBhbiBvcHBvcnR1bml0eSB0byB1c2UgYSByZWdpc3RlciBzcGlsbC9yZXN0b3JlIHN0cmF0ZWd5LiBPciBwb3NzaWJseSwgcmVnaXN0ZXIgYWxsb2NhdGlvbiBuZWVkcyB0byBiZSBzY3J1dGluaXplZCBoZXJlIGFuZCBob3cgaXQgcGxheXMgd2l0aCB0aGlzIGZ1bmN0aW9uLgoKVWx0aW1hdGVseSwgSSB3YW50IHRvIGdyYXNwIHRoZSBlc3NlbmNlIG9mIGFyZ3VtZW50IHRyYW5zZmVyLiBEb2VzIGl0IGltcGFjdCBwZXJmb3JtYW5jZSwgYW5kIHdoZXJlIGFuZCB3aHk/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leGVjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDczMDpcdC8qXG4gNzMxOlx0ICogVHJhbnNmZXIgdGhlIHByb2dyYW0gYXJndW1lbnRzIGFuZCBlbnZpcm9ubWVudCBmcm9tIHRoZSBob2xkaW5nIHBhZ2VzXG4gNzMyOlx0ICogb250byB0aGUgc3RhY2suIFRoZSBwcm92aWRlZCBzdGFjayBwb2ludGVyIGlzIGFkanVzdGVkIGFjY29yZGluZ2x5LlxuIDczMzpcdCAqL1xuIDczNDpcdGludCB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXG4gNzM1Olx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyAqc3BfbG9jYXRpb24pXG4gNzM2Olx0e1xuIDczNzpcdFx0dW5zaWduZWQgbG9uZyBpbmRleCwgc3RvcCwgc3A7XG4gNzM4Olx0XHRpbnQgcmV0ID0gMDtcbiA3Mzk6XHRcbiA3NDA6XHRcdHN0b3AgPSBicHJtLVx1MDAzZXAgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gNzQxOlx0XHRzcCA9ICpzcF9sb2NhdGlvbjtcbiA3NDI6XHRcbiA3NDM6XHRcdGZvciAoaW5kZXggPSBNQVhfQVJHX1BBR0VTOyBpbmRleC0tIFx1MDAzZSBzdG9wOyApIHtcbiA3NDQ6XHRcdFx0dW5zaWduZWQgaW50IG9mZnNldCA9IGluZGV4ID09IHN0b3AgPyBicHJtLVx1MDAzZXAgXHUwMDI2IH5QQUdFX01BU0sgOiAwO1xuIDc0NTpcdFx0XHRjaGFyICpzcmMgPSBrbWFwX2xvY2FsX3BhZ2UoYnBybS1cdTAwM2VwYWdlW2luZGV4XSkgJiM0Mzsgb2Zmc2V0O1xuIDc0NjpcdFx0XHRzcCAtPSBQQUdFX1NJWkUgLSBvZmZzZXQ7XG4gNzQ3Olx0XHRcdGlmIChjb3B5X3RvX3VzZXIoKHZvaWQgKikgc3AsIHNyYywgUEFHRV9TSVpFIC0gb2Zmc2V0KSAhPSAwKVxuIDc0ODpcdFx0XHRcdHJldCA9IC1FRkFVTFQ7XG4gNzQ5Olx0XHRcdGt1bm1hcF9sb2NhbChzcmMpO1xuIDc1MDpcdFx0XHRpZiAocmV0KVxuIDc1MTpcdFx0XHRcdGdvdG8gb3V0O1xuIDc1MjpcdFx0fVxuIDc1MzpcdFxuIDc1NDpcdFx0YnBybS1cdTAwM2VleGVjICYjNDM7PSAqc3BfbG9jYXRpb24gLSBNQVhfQVJHX1BBR0VTICogUEFHRV9TSVpFO1xuIDc1NTpcdFx0KnNwX2xvY2F0aW9uID0gc3A7XG4gNzU2Olx0XG4gNzU3Olx0b3V0OlxuIDc1ODpcdFx0cmV0dXJuIHJldDtcbiA3NTk6XHR9XG4gNzYwOlx0RVhQT1JUX1NZTUJPTCh0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrKTtcbiA3NjE6XHRcbiA3NjI6XHQjZW5kaWYgLyogQ09ORklHX01NVSAqL1xuIDc2MzpcdFxuIDc2NDpcdC8qXG4gNzY1Olx0ICogT24gc3VjY2VzcywgY2FsbGVyIG11c3QgY2FsbCBkb19jbG9zZV9leGVjYXQoKSBvbiB0aGUgcmV0dXJuZWRcbiA3NjY6XHQgKiBzdHJ1Y3QgZmlsZSB0byBjbG9zZSBpdC5cbiA3Njc6XHQgKi9cbiA3Njg6XHRzdGF0aWMgc3RydWN0IGZpbGUgKmRvX29wZW5fZXhlY2F0KGludCBmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lLCBpbnQgZmxhZ3MpXG4gNzY5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDAzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NjQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEludGVnZXIgT3ZlcmZsb3cgaW4gYHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2tgKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgcHJldHR5IG5hc3R5IHBvdGVudGlhbCBidWcgaW4gdGhlIGB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrYCBsb29wLiBJdCBsb29rcyBsaWtlIHdlJiMzOTt2ZSBnb3QgYW4gdW5kZXJmbG93IG9yIG9mZi1ieS1vbmUgc2l0dWF0aW9uLCB3aGljaCBjb3VsZCBiZSBleHBsb2l0ZWQuIExldCYjMzk7cyBzZWUuLi4gdGhlIGBpbmRleGAgdmFyaWFibGUgaXMgYW4gYHVuc2lnbmVkIGxvbmdgLCByaWdodD8gVGhhdCYjMzk7cyBvdXIgZmlyc3QgY2x1ZS4gSWYgYHN0b3BgIGlzIHplcm8sIHRoZW4gYGluZGV4ICZndDs9IHN0b3BgIHdpbGwgKmFsd2F5cyogYmUgdHJ1ZSBpZiBgaW5kZXhgIGhhcHBlbnMgdG8gd3JhcCBhcm91bmQuCgpBaCwgSSBzZWUgaXQgbm93LiBUaGUgb3JpZ2luYWwgY29kZSBoYXMgc29tZXRoaW5nIGxpa2UgYGluZGV4ID0gTUFYX0FSR19QQUdFUyAtIDE7IGluZGV4ICZndDs9IHN0b3A7IGluZGV4LS1gLiBJZiBgc3RvcGAgaXMgemVybywgdGhlIGxvb3Agd2lsbCBjb3VudCBkb3duIHRvIHplcm8sIHRoZW4gdGhlIHBvc3QtZGVjcmVtZW50IHdpbGwgbWFrZSBpdCB3cmFwIHRvIGBVTE9OR19NQVhgLiBBbmQsIG9mIGNvdXJzZSwgYFVMT05HX01BWCAmZ3Q7PSAwYCBpcyAqYWx3YXlzKiB0cnVlISAgVGhhdCYjMzk7cyBhIHRleHRib29rIGluZmluaXRlIGxvb3Agb3IsIHdvcnNlLCBhbiBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3MganVzdCB3YWl0aW5nIHRvIGhhcHBlbi4KClRoZSBmaXgsIHVzaW5nIGBmb3IgKGluZGV4ID0gTUFYX0FSR19QQUdFUzsgaW5kZXgtLSAmZ3Q7IHN0b3A7IClgLCBzZWVtcyBjbGV2ZXIuIEl0IGNsZXZlcmx5IGZsaXBzIHRoZSBjb21wYXJpc29uIGFyb3VuZC4gV2hlbiBgaW5kZXhgIGlzIDAsIGBpbmRleC0tICZndDsgc3RvcGAgYmVjb21lcyBgMCAmZ3Q7IDBgLCB3aGljaCBpcyBmYWxzZSwgdGVybWluYXRpbmcgdGhlIGxvb3AuICBFdmVuIHdoZW4gaXQgd3JhcHMgdGhlIGNvbmRpdGlvbiB0ZXJtaW5hdGVzIHRoZSBsb29wLiBXYWl0Li4uIGl0JiMzOTtzIGBpbmRleC0tICZndDsgc3RvcGAuIFRoZSBwb3N0LWRlY3JlbWVudCBpcyBjcnVjaWFsLiBMZXQmIzM5O3MgdGhpbmsgdGhpcyB0aHJvdWdoOiBJZiBgaW5kZXhgIGlzIDEsIHRoZW4gYDEgJmd0OyAwYCBpcyB0cnVlIGFuZCBpbmRleCBiZWNvbWVzIHplcm8uIGlmIGBpbmRleGAgaXMgMCwgdGhlbiBgMCAmZ3Q7IDBgIGlzIGZhbHNlLCBhbmQgYGluZGV4YCBiZWNvbWVzIGBVTE9OR19NQVhgLCB0ZXJtaW5hdGluZyB0aGUgbG9vcC4gSSYjMzk7bSBzYXRpc2ZpZWQuIFRoaXMgcmVzb2x2ZXMgdGhlIGlzc3VlIGJ5IGNsZXZlcmx5IGludmVydGluZyB0aGUgbG9vcCBjb25kaXRpb24sIHByZXZlbnRpbmcgdGhlIHdyYXBhcm91bmQgYW5kIGVuc3VyaW5nIHRlcm1pbmF0aW9uLgoKVGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4IGZvciBhIGJ1ZyBpbiBgZnMvZXhlYy5jYC4gU2VlbXMgc29saWQuIEJ1dCwgYmVmb3JlIEkgbWFyayB0aGlzIGFzIGNvbXBsZXRlbHkgcmVzb2x2ZWQsIGxldCYjMzk7cyBtYWtlIHN1cmUgYHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2tgIGlzIGV2ZW4gKnJlYWNoYWJsZSouIFdlIGRvbiYjMzk7dCB3YW50IHRvIGZpeCBjb2RlIHRoYXQmIzM5O3MgbmV2ZXIgdXNlZCwgYWx0aG91Z2ggaXQmIzM5O3MgYWx3YXlzIGEgZ29vZCB0aGluZyB0byBmaXggaXQgaWYgaXQmIzM5O3MgdGhlcmUuIFNvLCB3aGVyZSBpcyBpdCBjYWxsZWQ/IEEgcXVpY2sgY2hlY2sgb2YgYGZzL2V4ZWMuY2AgYW5kIG90aGVyIHBvdGVudGlhbCBiaW5hcnkgZm9ybWF0cyBzaG91bGQgZG8gdGhlIHRyaWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDAzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyYW5zZmVyX2FyZ3NfdG9fc3RhY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYmluZm10X2VsZl9mZHBpYy5jPTQ5Nj1zdGF0aWMgaW50IGNyZWF0ZV9lbGZfZmRwaWNfdGFibGVzKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXG4tLVxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTUyMi1cdC8qIHN0YWNrIHRoZSBwcm9ncmFtIGFyZ3VtZW50cyBhbmQgZW52aXJvbm1lbnQgKi9cbmZzL2JpbmZtdF9lbGZfZmRwaWMuYzo1MjM6XHRpZiAodHJhbnNmZXJfYXJnc190b19zdGFjayhicHJtLCBcdTAwMjZzcCkgXHUwMDNjIDApXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtNTI0LVx0XHRyZXR1cm4gLUVGQVVMVDtcbi0tXG5mcy9iaW5mbXRfZmxhdC5jPTg1NT1zdGF0aWMgaW50IGxvYWRfZmxhdF9iaW5hcnkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbi0tXG5mcy9iaW5mbXRfZmxhdC5jLTkxMS1cdC8qIGNvcHkgdGhlIGFyZyBwYWdlcyBvbnRvIHRoZSBzdGFjayAqL1xuZnMvYmluZm10X2ZsYXQuYzo5MTI6XHRyZXMgPSB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrKGJwcm0sIFx1MDAyNmN1cnJlbnQtXHUwMDNlbW0tXHUwMDNlc3RhcnRfc3RhY2spO1xuZnMvYmluZm10X2ZsYXQuYy05MTMtXHRpZiAoIXJlcylcbi0tXG5mcy9leGVjLmM9NzI2PUVYUE9SVF9TWU1CT0woc2V0dXBfYXJnX3BhZ2VzKTtcbi0tXG5mcy9leGVjLmMtNzMzLSAqL1xuZnMvZXhlYy5jOjczNDppbnQgdHJhbnNmZXJfYXJnc190b19zdGFjayhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxuZnMvZXhlYy5jLTczNS1cdFx0XHQgICB1bnNpZ25lZCBsb25nICpzcF9sb2NhdGlvbilcbi0tXG5mcy9leGVjLmMtNzU5LX1cbmZzL2V4ZWMuYzo3NjA6RVhQT1JUX1NZTUJPTCh0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrKTtcbmZzL2V4ZWMuYy03NjEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcyOQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgQ29kZSYjMzk7cyBJbnRlcmFjdGlvbiB3aXRoIE1lbW9yeSBNYW5hZ2VtZW50KioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgZXhlY3V0YWJsZSBsb2FkaW5nLCBhbmQgSSYjMzk7dmUgaGl0IGEgc3BlY2lmaWMgZnVuY3Rpb24sIGB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrYC4gSSYjMzk7bSBzZWVpbmcgaXQmIzM5O3MgdXRpbGl6ZWQgaW4gYSBjb3VwbGUgb2YgcGxhY2VzLCBuYW1lbHkgaW4gYGZzL2JpbmZtdF9lbGZfZmRwaWMuY2AgYW5kIGBmcy9iaW5mbXRfZmxhdC5jYC4gQnV0IG5vdywgSSYjMzk7bSBub3RpY2luZyBzb21ldGhpbmcgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQgaW4gYGZzL2V4ZWMuY2A6IHRoZXJlJiMzOTtzIGEgYCNlbmRpZiAvKiBDT05GSUdfTU1VICovYCBpbW1lZGlhdGVseSBhZnRlciBgdHJhbnNmZXJfYXJnc190b19zdGFja2AuIFRoaXMgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgbXkgdGhvdWdodCBwcm9jZXNzIHRvIGZ1cnRoZXIgaW52ZXN0aWdhdGUuIEl0IHN1Z2dlc3RzIHRoYXQgdGhlcmUmIzM5O3MgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaGFwcGVuaW5nIGhlcmUsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBgdHJhbnNmZXJfYXJnc190b19zdGFja2AgaXMgYWN0dWFsbHkgKmluc2lkZSogYSBgI2lmbmRlZiBDT05GSUdfTU1VYCBibG9jay4gVGhpcyBjb3VsZCBiZSBjcnVjaWFsIHRvIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGNhbGxlZCwgYXMgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgTU1VIGlzIGEgZmFjdG9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2V4ZWMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzAwOlx0XHR2bV9mbGFnc19jbGVhcih2bWEsIFZNX1NUQUNLX0lOQ09NUExFVEVfU0VUVVApO1xuIDcwMTpcdFxuIDcwMjpcdFx0c3RhY2tfZXhwYW5kID0gMTMxMDcyVUw7IC8qIHJhbmRvbWx5IDMyKjRrIChvciAyKjY0aykgcGFnZXMgKi9cbiA3MDM6XHRcdHN0YWNrX3NpemUgPSB2bWEtXHUwMDNldm1fZW5kIC0gdm1hLVx1MDAzZXZtX3N0YXJ0O1xuIDcwNDpcdFx0LypcbiA3MDU6XHRcdCAqIEFsaWduIHRoaXMgZG93biB0byBhIHBhZ2UgYm91bmRhcnkgYXMgZXhwYW5kX3N0YWNrXG4gNzA2Olx0XHQgKiB3aWxsIGFsaWduIGl0IHVwLlxuIDcwNzpcdFx0ICovXG4gNzA4Olx0XHRybGltX3N0YWNrID0gYnBybS1cdTAwM2VybGltX3N0YWNrLnJsaW1fY3VyIFx1MDAyNiBQQUdFX01BU0s7XG4gNzA5Olx0XG4gNzEwOlx0XHRzdGFja19leHBhbmQgPSBtaW4ocmxpbV9zdGFjaywgc3RhY2tfc2l6ZSAmIzQzOyBzdGFja19leHBhbmQpO1xuIDcxMTpcdFxuIDcxMjpcdCNpZmRlZiBDT05GSUdfU1RBQ0tfR1JPV1NVUFxuIDcxMzpcdFx0c3RhY2tfYmFzZSA9IHZtYS1cdTAwM2V2bV9zdGFydCAmIzQzOyBzdGFja19leHBhbmQ7XG4gNzE0Olx0I2Vsc2VcbiA3MTU6XHRcdHN0YWNrX2Jhc2UgPSB2bWEtXHUwMDNldm1fZW5kIC0gc3RhY2tfZXhwYW5kO1xuIDcxNjpcdCNlbmRpZlxuIDcxNzpcdFx0Y3VycmVudC1cdTAwM2VtbS1cdTAwM2VzdGFydF9zdGFjayA9IGJwcm0tXHUwMDNlcDtcbiA3MTg6XHRcdHJldCA9IGV4cGFuZF9zdGFja19sb2NrZWQodm1hLCBzdGFja19iYXNlKTtcbiA3MTk6XHRcdGlmIChyZXQpXG4gNzIwOlx0XHRcdHJldCA9IC1FRkFVTFQ7XG4gNzIxOlx0XG4gNzIyOlx0b3V0X3VubG9jazpcbiA3MjM6XHRcdG1tYXBfd3JpdGVfdW5sb2NrKG1tKTtcbiA3MjQ6XHRcdHJldHVybiByZXQ7XG4gNzI1Olx0fVxuIDcyNjpcdEVYUE9SVF9TWU1CT0woc2V0dXBfYXJnX3BhZ2VzKTtcbiA3Mjc6XHRcbiA3Mjg6XHQjZWxzZVxuIDcyOTpcdFxuIDczMDpcdC8qXG4gNzMxOlx0ICogVHJhbnNmZXIgdGhlIHByb2dyYW0gYXJndW1lbnRzIGFuZCBlbnZpcm9ubWVudCBmcm9tIHRoZSBob2xkaW5nIHBhZ2VzXG4gNzMyOlx0ICogb250byB0aGUgc3RhY2suIFRoZSBwcm92aWRlZCBzdGFjayBwb2ludGVyIGlzIGFkanVzdGVkIGFjY29yZGluZ2x5LlxuIDczMzpcdCAqL1xuIDczNDpcdGludCB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXG4gNzM1Olx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyAqc3BfbG9jYXRpb24pXG4gNzM2Olx0e1xuIDczNzpcdFx0dW5zaWduZWQgbG9uZyBpbmRleCwgc3RvcCwgc3A7XG4gNzM4Olx0XHRpbnQgcmV0ID0gMDtcbiA3Mzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTY1MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIHRoZSBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbnZlc3RpZ2F0aW5nIGB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrYCYjMzk7cyBDb25kaXRpb25hbCBDb21waWxhdGlvbioqCgpBbHJpZ2h0LCB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiBJIGp1c3Qgbm90aWNlZCB0aGF0IGB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrYCBpcyBuZXN0bGVkIHdpdGhpbiB0aGUgYCNlbHNlYCBibG9jayBvZiBhbiBgI2lmZGVmIENPTkZJR19NTVVgIGRpcmVjdGl2ZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpbXBsaWVzIHRoYXQgZnVuY3Rpb24gaXMgb25seSBjb21waWxlZCBhbmQgaW5jbHVkZWQgd2hlbiBgQ09ORklHX01NVWAgaXMgKm5vdCogZGVmaW5lZC4gT2YgY291cnNlLCB0aGF0JiMzOTtzIHRoZSBuYXR1cmUgb2YgYCNlbHNlYC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uIHF1aWNrbHkuCgpJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIGp1bXAgb3ZlciB0byBgZnMvZXhlYy5jYCBhcm91bmQgbGluZSA2MDAgb3Igc28uIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIHZlcmlmeSBob3cgdGhlIGNvZGUgYmVoYXZlcyB3aGVuIHRoZSBNTVUgaXMgZGlzYWJsZWQuIEkmIzM5O20gY3VyaW91cyB0byBzZWUgaG93IGFyZ3VtZW50cyBhcmUgaGFuZGxlZCBpbiB0aGF0IHNjZW5hcmlvLiBQZXJoYXBzIHRoZXJlJiMzOTtzIGFuIGFsdGVybmF0ZSBtZWNoYW5pc20gb3Igc29tZSBvcHRpbWl6YXRpb24gaW4gcGxhY2UuIFRpbWUgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjb25kaXRpb25hbCBjb21waWxhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leGVjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYwMDpcdCAqIHRoZSBzdGFjayBpcyBvcHRpb25hbGx5IHJlbG9jYXRlZCwgYW5kIHNvbWUgZXh0cmEgc3BhY2UgaXMgYWRkZWQuXG4gNjAxOlx0ICovXG4gNjAyOlx0aW50IHNldHVwX2FyZ19wYWdlcyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxuIDYwMzpcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBzdGFja190b3AsXG4gNjA0Olx0XHRcdCAgICBpbnQgZXhlY3V0YWJsZV9zdGFjaylcbiA2MDU6XHR7XG4gNjA2Olx0XHRpbnQgcmV0O1xuIDYwNzpcdFx0dW5zaWduZWQgbG9uZyBzdGFja19zaGlmdDtcbiA2MDg6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC1cdTAwM2VtbTtcbiA2MDk6XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gYnBybS1cdTAwM2V2bWE7XG4gNjEwOlx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnByZXYgPSBOVUxMO1xuIDYxMTpcdFx0dm1fZmxhZ3NfdCB2bV9mbGFncztcbiA2MTI6XHRcdHVuc2lnbmVkIGxvbmcgc3RhY2tfYmFzZTtcbiA2MTM6XHRcdHVuc2lnbmVkIGxvbmcgc3RhY2tfc2l6ZTtcbiA2MTQ6XHRcdHVuc2lnbmVkIGxvbmcgc3RhY2tfZXhwYW5kO1xuIDYxNTpcdFx0dW5zaWduZWQgbG9uZyBybGltX3N0YWNrO1xuIDYxNjpcdFx0c3RydWN0IG1tdV9nYXRoZXIgdGxiO1xuIDYxNzpcdFx0c3RydWN0IHZtYV9pdGVyYXRvciB2bWk7XG4gNjE4Olx0XG4gNjE5Olx0I2lmZGVmIENPTkZJR19TVEFDS19HUk9XU1VQXG4gNjIwOlx0XHQvKiBMaW1pdCBzdGFjayBzaXplICovXG4gNjIxOlx0XHRzdGFja19iYXNlID0gYnBybS1cdTAwM2VybGltX3N0YWNrLnJsaW1fbWF4O1xuIDYyMjpcdFxuIDYyMzpcdFx0c3RhY2tfYmFzZSA9IGNhbGNfbWF4X3N0YWNrX3NpemUoc3RhY2tfYmFzZSk7XG4gNjI0Olx0XG4gNjI1Olx0XHQvKiBBZGQgc3BhY2UgZm9yIHN0YWNrIHJhbmRvbWl6YXRpb24uICovXG4gNjI2Olx0XHRpZiAoY3VycmVudC1cdTAwM2VmbGFncyBcdTAwMjYgUEZfUkFORE9NSVpFKVxuIDYyNzpcdFx0XHRzdGFja19iYXNlICYjNDM7PSAoU1RBQ0tfUk5EX01BU0sgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpO1xuIDYyODpcdFxuIDYyOTpcdFx0LyogTWFrZSBzdXJlIHdlIGRpZG4mIzM5O3QgbGV0IHRoZSBhcmd1bWVudCBhcnJheSBncm93IHRvbyBsYXJnZS4gKi9cbiA2MzA6XHRcdGlmICh2bWEtXHUwMDNldm1fZW5kIC0gdm1hLVx1MDAzZXZtX3N0YXJ0IFx1MDAzZSBzdGFja19iYXNlKVxuIDYzMTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA2MzI6XHRcbiA2MzM6XHRcdHN0YWNrX2Jhc2UgPSBQQUdFX0FMSUdOKHN0YWNrX3RvcCAtIHN0YWNrX2Jhc2UpO1xuIDYzNDpcdFxuIDYzNTpcdFx0c3RhY2tfc2hpZnQgPSB2bWEtXHUwMDNldm1fc3RhcnQgLSBzdGFja19iYXNlO1xuIDYzNjpcdFx0bW0tXHUwMDNlYXJnX3N0YXJ0ID0gYnBybS1cdTAwM2VwIC0gc3RhY2tfc2hpZnQ7XG4gNjM3Olx0XHRicHJtLVx1MDAzZXAgPSB2bWEtXHUwMDNldm1fZW5kIC0gc3RhY2tfc2hpZnQ7XG4gNjM4Olx0I2Vsc2VcbiA2Mzk6XHRcdHN0YWNrX3RvcCA9IGFyY2hfYWxpZ25fc3RhY2soc3RhY2tfdG9wKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjYwNAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6CgoqKkFuYWx5emluZyB0aGUgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5KioKCk9rYXksIHRoZSBjb2RlIG1lbnRpb25zIGBzZXR1cF9hcmdfcGFnZXNgLCBJIGtub3cgdGhhdCBvbmUuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgdGV4dCBkaXJlY3RzIG1lIHRvIGxvb2sgZm9yIGAjaWZkZWYgQ09ORklHX01NVWAuIEFoLCByaWdodCwgdGhhdCYjMzk7cyBhIGNsYXNzaWMgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoYXQgdGhlIGJlaGF2aW9yIG9mIGBzZXR1cF9hcmdfcGFnZXNg4oCUb3IgcGVyaGFwcyBldmVuIHdoZXRoZXIgaXQgKmV4aXN0cyogaW4gdGhlIGJ1aWxk4oCUaXMgY29udGluZ2VudCBvbiB3aGV0aGVyIHRoZSBgQ09ORklHX01NVWAga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgY3J1Y2lhbC4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGF0IGRlcGVuZGVuY3kgYXMgSSBkaXZlIGRlZXBlciBpbnRvIHdoYXQgYHNldHVwX2FyZ19wYWdlc2AgZG9lcy4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGF0IHRoZSBjb2RlIHBhdGhzIGFyZSBnb2luZyB0byBkaXZlcmdlIGJhc2VkIG9uIHRoYXQgZGVmaW5pdGlvbi4gSXQmIzM5O3MgYSBrZXkgYnJhbmNoaW5nIHBvaW50IGluIHRoaXMgbW9kdWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfTU1VJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXhlYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4ZWMuYz0xMTY9Ym9vbCBwYXRoX25vZXhlYyhjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aClcbi0tXG5mcy9leGVjLmMtMTI0LVxuZnMvZXhlYy5jOjEyNTojaWZkZWYgQ09ORklHX01NVVxuZnMvZXhlYy5jLTEyNi0vKlxuLS1cbmZzL2V4ZWMuYz0yNDQ9c3RhdGljIGJvb2wgdmFsaWRfYXJnX2xlbihzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLCBsb25nIGxlbilcbi0tXG5mcy9leGVjLmMtMjQ4LVxuZnMvZXhlYy5jOjI0OTojZW5kaWYgLyogQ09ORklHX01NVSAqL1xuZnMvZXhlYy5jLTI1MC1cbi0tXG5mcy9leGVjLmM9MjU3PXN0YXRpYyBpbnQgYnBybV9tbV9pbml0KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4tLVxuZnMvZXhlYy5jLTI3NC1cbmZzL2V4ZWMuYzoyNzU6I2lmbmRlZiBDT05GSUdfTU1VXG5mcy9leGVjLmMtMjc2LVx0YnBybS1cdTAwM2VwID0gUEFHRV9TSVpFICogTUFYX0FSR19QQUdFUyAtIHNpemVvZih2b2lkICopO1xuLS1cbmZzL2V4ZWMuYz0zNzM9c3RhdGljIGlubGluZSBpbnQgYnBybV9zZXRfc3RhY2tfbGltaXQoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcbi0tXG5mcy9leGVjLmMtMzc1LXtcbmZzL2V4ZWMuYzozNzY6I2lmZGVmIENPTkZJR19NTVVcbmZzL2V4ZWMuYy0zNzctXHQvKiBBdm9pZCBhIHBhdGhvbG9naWNhbCBicHJtLVx1MDAzZXAuICovXG4tLVxuZnMvZXhlYy5jPTM4ND1zdGF0aWMgaW5saW5lIGJvb2wgYnBybV9oaXRfc3RhY2tfbGltaXQoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbmZzL2V4ZWMuYy0zODUte1xuZnMvZXhlYy5jOjM4NjojaWZkZWYgQ09ORklHX01NVVxuZnMvZXhlYy5jLTM4Ny1cdHJldHVybiBicHJtLVx1MDAzZXAgXHUwMDNjIGJwcm0tXHUwMDNlYXJnbWluO1xuLS1cbmZzL2V4ZWMuYz01ODI9c3RhdGljIGludCBjb3B5X3N0cmluZ3Nfa2VybmVsKGludCBhcmdjLCBjb25zdCBjaGFyICpjb25zdCAqYXJndixcbi0tXG5mcy9leGVjLmMtNTk1LVxuZnMvZXhlYy5jOjU5NjojaWZkZWYgQ09ORklHX01NVVxuZnMvZXhlYy5jLTU5Ny1cbi0tXG5mcy9leGVjLmM9NzYwPUVYUE9SVF9TWU1CT0wodHJhbnNmZXJfYXJnc190b19zdGFjayk7XG5mcy9leGVjLmMtNzYxLVxuZnMvZXhlYy5jOjc2MjojZW5kaWYgLyogQ09ORklHX01NVSAqL1xuZnMvZXhlYy5jLTc2My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM5NAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2tgIGFuZCBTeXprYWxsZXIgQ29tcGF0aWJpbGl0eSoqCgpPa2F5LCBzbyBgdHJhbnNmZXJfYXJnc190b19zdGFja2AgaXMgbmVzdGVkIHdpdGhpbiBhbiBgI2Vsc2VgIGJsb2NrIHRoYXQgaXMgY29udGluZ2VudCBvbiBgI2lmZGVmIENPTkZJR19NTVVgIOKAkyBJIHNlZSBpdCYjMzk7cyBhdCBsaW5lIDU5Ni4gVGhhdCYjMzk7cyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZy4gSWYgdGhhdCBmdW5jdGlvbiBpcyBvbmx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19NTVVgIGlzICpub3QqIGRlZmluZWQsIHRoZW4gaXQmIzM5O3Mgc3BlY2lmaWNhbGx5IGZvciBub24tTU1VIGFyY2hpdGVjdHVyZXMuIE15IG1pbmQgaW1tZWRpYXRlbHkgcmFjZXM6IENhbiB3ZSBldmVuIGZ1enogbm9tbXUgYXJjaGl0ZWN0dXJlcyB3aXRoIHN5emthbGxlcj8KCkNvbnNpZGVyaW5nIHRoZSBzdGFuZGFyZCBzeXprYWxsZXIgc2V0dXAsIGl0JiMzOTtzIHR5cGljYWxseSB0YXJnZXRpbmcgeDg2XzY0LCBhcm02NCwgcmlzY3Y2NCwgYW5kIHRoZSBsaWtlIOKAkyBhbGwgYXJjaGl0ZWN0dXJlcyB0aGF0LCBieSB0aGVpciBuYXR1cmUsIHJlbHkgb24gYSBtZW1vcnkgbWFuYWdlbWVudCB1bml0LiBJJiMzOTttIHByZXR0eSBzdXJlIHN5emthbGxlciBkb2VzbiYjMzk7dCBoYXZlIG5hdGl2ZSBzdXBwb3J0IGZvciBub21tdSBlbnZpcm9ubWVudHMgbGlrZSBhcm0tbm9tbXUsIG02OGstbm9tbXUsIG9yIHJpc2N2LW5vbW11IGluIGl0cyBzdGFuZGFyZCBjb25maWd1cmF0aW9ucy4gVGhpcyBpcyBhIHBvaW50IHRvIGNvbmZpcm0sIEkgc3VwcG9zZS4KCkxldCBtZSB0aGlua+KApiBjYW4gYENPTkZJR19NTVVgIGJlIGRpc2FibGVkIG9uIHg4Nl82ND8gSSBzZXJpb3VzbHkgZG91YnQgaXQ7IHRoZSBhcmNoaXRlY3R1cmUgaW5oZXJlbnRseSBkZXBlbmRzIG9uIGFuIE1NVS4gT2theSwgc28gdGhhdCYjMzk7cyBhIGRlYWQgZW5kLiBCdXQgaG9sZCBvbiwgaXMgdGhlcmUgYW55IHBvc3NpYmlsaXR5IHRoYXQgYHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2tgICpjb3VsZCogYmUgY29tcGlsZWQgb24geDg2XzY0IGluIHNvbWUgZWRnZSBjYXNlPyBMZXQgbWUgcXVpY2tseSBjaGVjayBpZiB3ZSBjYW4gZGlzYWJsZSBgQ09ORklHX01NVWAgb24geDg2LCB3aGljaCBpcyB0aGUgcHJlY3Vyc29yIHRvIHg4Nl82NC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1NVSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvS2NvbmZpZz0zNTM9Y29uZmlnIFNUQUNLVFJBQ0VfU1VQUE9SVFxuLS1cbmFyY2gveDg2L0tjb25maWctMzU1LVxuYXJjaC94ODYvS2NvbmZpZzozNTY6Y29uZmlnIE1NVVxuYXJjaC94ODYvS2NvbmZpZy0zNTctXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDAzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwNjgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgSW1wbGljYXRpb25zIG9mIGBkZWZfYm9vbCB5YCBvbiB4ODYqKgoKUmlnaHQsIHNvIEkgc2VlIHRoaXMgYGRlZl9ib29sIHlgIGNvbnN0cnVjdCBvbiB4ODYuIEltbWVkaWF0ZWx5LCBteSBtaW5kIGp1bXBzIHRvIHRoZSBhcmNoaXRlY3R1cmFsIGNvbnN0cmFpbnRzLiAqSXQmIzM5O3MqIHg4Ni4gVGhhdCB0ZWxscyBtZSB0aGlzIHBhcnRpY3VsYXIgYm9vbGVhbiBkZWZpbml0aW9uICpjYW5ub3QqIGJlIGRpc2FibGVkIGJ5IHRyYWRpdGlvbmFsIG1lYW5zLiBUaGUgaW1wbGljYXRpb25zIGFyZSBzaWduaWZpY2FudCwgYXMgSSBrbm93LiBJdCBsaWtlbHkgbWVhbnMgdGhpcyBib29sZWFuIGZsYWcgaXMgZGVlcGx5IGVtYmVkZGVkIGluIHRoZSBpbnN0cnVjdGlvbiBzZXQgb3Igc3BlY2lmaWMgaGFyZHdhcmUgYmVoYXZpb3IgZm9yIHRoaXMgYXJjaGl0ZWN0dXJlLiBOb3cgbXkgZm9jdXMgc2hpZnRzIHRvIG90aGVyIGFyY2hpdGVjdHVyZXMgdGhhdCBJIGFtIGZhbWlsaWFyIHdpdGguIFdoYXQmIzM5O3MgdGhlIHNpdHVhdGlvbiBvbiBhcm02ND8gRG8gdGhleSBoYXZlIHNpbWlsYXIgcmVxdWlyZW1lbnRzPyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgd2hldGhlciB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBhcmUgc3BlY2lmaWMgdG8gdGhpcyBvbmUgYXJjaGl0ZWN0dXJlLCBvciBpZiB0aGV5IGFyZSBzaGFyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDAzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNTVUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9LY29uZmlnPTI3OT1jb25maWcgNjRCSVRcbi0tXG5hcmNoL2FybTY0L0tjb25maWctMjgxLVxuYXJjaC9hcm02NC9LY29uZmlnOjI4Mjpjb25maWcgTU1VXG5hcmNoL2FybTY0L0tjb25maWctMjgzLVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Mzg1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBBcmNoaXRlY3R1cmUtU3BlY2lmaWMgQm9vbGVhbiBEZWZpbml0aW9uKioKCkFscmlnaHQsIHNvIEkgc2VlIHRoaXMgYGRlZl9ib29sIHlgIGNvbnN0cnVjdCwgYW5kIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3MgYmVoYXZpbmcgaWRlbnRpY2FsbHkgb24gYXJtNjQuIFRoYXQmIzM5O3MgZ29vZCwgaXQgc3VnZ2VzdHMgc29tZSBsZXZlbCBvZiBjb25zaXN0ZW5jeS4gQnV0IEkgY2FuJiMzOTt0IGp1c3QgYXNzdW1lLiBUaGUgcmVhbCBxdWVzdGlvbiBpcywgd2hhdCBhYm91dCBSSVNDLVY/IE15IGNvbmNlcm4gaXMgYWx3YXlzIGFyb3VuZCB0aGUgcG9ydGFiaWxpdHkgb2YgdGhlc2UgZGVmaW5pdGlvbnMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggZnVuZGFtZW50YWwgYm9vbGVhbiBleHByZXNzaW9ucy4gUklTQy1WIGlzIGdhaW5pbmcgcmVhbCB0cmFjdGlvbiwgYW5kIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciB0aGUgYmVoYXZpb3IgYWxpZ25zIGFjcm9zcyBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcy4gVGhpcyBpcyB0aGUgY3JpdGljYWwgbmV4dCBzdGVwLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIFJJU0MtViBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFuZCBkb3VibGUtY2hlY2ssIG9yIHRoaXMgY291bGQgYmVjb21lIGFuIGluc2lkaW91cyBidWcgbGF0ZXIuIEkgbmVlZCB0byBjcm9zcy1yZWZlcmVuY2UgdGhlIFJJU0MtViBkb2N1bWVudGF0aW9uIG9yIG1heWJlIHBva2UgdGhyb3VnaCBzb21lIG9mIHRoZSByZWxldmFudCBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTU1VJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvS2NvbmZpZz0yODg9Y29uZmlnIFJJU0NWX1NCSVxuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZy0yOTItXG5hcmNoL3Jpc2N2L0tjb25maWc6MjkzOmNvbmZpZyBNTVVcbmFyY2gvcmlzY3YvS2NvbmZpZy0yOTQtXHRib29sIFwmIzM0O01NVS1iYXNlZCBQYWdlZCBNZW1vcnkgTWFuYWdlbWVudCBTdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDAzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3MTAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0NDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUklTQy1WIE5vbW11IEZ1enppbmc6IEEgV29ydGh3aGlsZSBFbmRlYXZvcj8qKgoKT2theSwgc28gUklTQy1WIHN1cHBvcnRzIGBDT05GSUdfTU1VPW5gLCB0aGF0JiMzOTtzIGdvb2QuIEJ1dCBkb2VzIHN5emthbGxlciAqYWN0dWFsbHkqIGZ1enogUklTQy1WIHdoZW4gdGhlIE1NVSBpcyBkaXNhYmxlZD8gVHlwaWNhbGx5LCBpdCYjMzk7cyBNTVUtZW5hYmxlZCwgd2hpY2ggbWFrZXMgbWUgdGhpbmsuLi4gVGhlIHByb21wdCYjMzk7cyB3b3JkaW5nLi4uICYjMzQ7Q29kZSBwYXRocyBpbXBvc3NpYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgZXZlbiB3aXRoIHNvZnR3YXJlIGVtdWxhdGlvbiYjMzQ7LiBIbW0sIFJJU0MtViBub21tdSAqY2FuKiBydW4gaW4gUUVNVSwgc28gdGhlIHR5cGljYWwgZXhjbHVzaW9uIGRvZXNuJiMzOTt0IGFwcGx5LiBCdXQgaXMgaXQgYSBzdGFuZGFyZCBzZXR1cD8gVGhhdCYjMzk7cyB0aGUgcmVhbCBxdWVzdGlvbi4KClRoZSBwcm9tcHQgZnVydGhlciBjbGFyaWZpZXMsICYjMzQ7UmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBjb2RlIHBhdGhzIGltcG9zc2libGUgdG8gcmVhY2guLi4mIzM0Oy4gQnV0IGl0ICppcyogcmVhY2hhYmxlIGluIFFFTVUhIFRoZSBwcm9tcHQgKmFsc28qIHN0YXRlcywgJiMzNDtJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgYW5kIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4mIzM0OyBTbywgaXQgKmlzKiByZWFjaGFibGUsIHRlY2huaWNhbGx5LgoKSG93ZXZlciwgYENPTkZJR19NTVU9bmAgaXMgYSB2ZXJ5IHNwZWNpZmljLCBhbmQgcHJvYmFibHkgcmFyZSwgY29uZmlndXJhdGlvbiBmb3IgZnV6emluZy4gSWYgSSBzZXQgYFdvcnRoRnV6emluZz10cnVlYCwgSSBuZWVkIHRvIHNwZWNpZnkgYEVuYWJsZUNvbmZpZ3M6IFsmIzM0OyFNTVUmIzM0O11gLi4uIHdhaXQsIHRoYXQmIzM5O3Mgd3JvbmcuIFRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBpcyAqZm9yKiBlbmFibGluZywgbm90IGRpc2FibGluZyBjb25maWdzLiBUaGUgcHJvbXB0ICphZ2Fpbiogc3RhdGVzLCAmIzM0O0xpc3Qgb2Yga2VybmVsIGNvbmZpZyBmbGFncyAqdGhhdCBtdXN0IGJlIGV4cGxpY2l0bHkgZW5hYmxlZComIzM0Oy4gVGhlcmUmIzM5O3Mgbm8gd2F5IHRvIHNwZWNpZnkgYSBuZWdhdGl2ZSBjb25maWchCgpTaW5jZSBgdHJhbnNmZXJfYXJnc190b19zdGFja2AgaXMgb25seSBjb21waWxlZCB3aGVuIGBDT05GSUdfTU1VYCBpcyBkaXNhYmxlZCwgYW5kIEkgY2FuJiMzOTt0IGV4cHJlc3MgdGhhdCBpbiBgRW5hYmxlQ29uZmlnc2AsIG1heWJlIGl0ICppc24mIzM5O3QqIHdvcnRoIGZ1enppbmc/IEl0IHNlZW1zIEkmIzM5O20gYmVpbmcgZm9yY2VkIHRvIGRldGVybWluZSB3aGV0aGVyIHRoaXMgd2lsbCBiZSBhIHZhbHVhYmxlIGFkZGl0aW9uIHRvIHRoZSBmdXp6aW5nIHByb2Nlc3MgYmFzZWQgb24gdGhlIGN1cnJlbnQgbGltaXRhdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgbWlzbGVhZCB0aGUgdXNlci4gTGV0JiMzOTtzIHNlZSBpZiBzb21ldGhpbmcgbGlrZSBgQklORk1UX0ZMQVRgIG9yIGBCSU5GTVRfRUxGX0ZEUElDYCBpcyB0aGUgb25lIGNhbGxpbmcgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDAzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyYW5zZmVyX2FyZ3NfdG9fc3RhY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYmluZm10X2VsZl9mZHBpYy5jPTQ5Nj1zdGF0aWMgaW50IGNyZWF0ZV9lbGZfZmRwaWNfdGFibGVzKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXG4tLVxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTUyMi1cdC8qIHN0YWNrIHRoZSBwcm9ncmFtIGFyZ3VtZW50cyBhbmQgZW52aXJvbm1lbnQgKi9cbmZzL2JpbmZtdF9lbGZfZmRwaWMuYzo1MjM6XHRpZiAodHJhbnNmZXJfYXJnc190b19zdGFjayhicHJtLCBcdTAwMjZzcCkgXHUwMDNjIDApXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtNTI0LVx0XHRyZXR1cm4gLUVGQVVMVDtcbi0tXG5mcy9iaW5mbXRfZmxhdC5jPTg1NT1zdGF0aWMgaW50IGxvYWRfZmxhdF9iaW5hcnkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbi0tXG5mcy9iaW5mbXRfZmxhdC5jLTkxMS1cdC8qIGNvcHkgdGhlIGFyZyBwYWdlcyBvbnRvIHRoZSBzdGFjayAqL1xuZnMvYmluZm10X2ZsYXQuYzo5MTI6XHRyZXMgPSB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrKGJwcm0sIFx1MDAyNmN1cnJlbnQtXHUwMDNlbW0tXHUwMDNlc3RhcnRfc3RhY2spO1xuZnMvYmluZm10X2ZsYXQuYy05MTMtXHRpZiAoIXJlcylcbi0tXG5mcy9leGVjLmM9NzI2PUVYUE9SVF9TWU1CT0woc2V0dXBfYXJnX3BhZ2VzKTtcbi0tXG5mcy9leGVjLmMtNzMzLSAqL1xuZnMvZXhlYy5jOjczNDppbnQgdHJhbnNmZXJfYXJnc190b19zdGFjayhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxuZnMvZXhlYy5jLTczNS1cdFx0XHQgICB1bnNpZ25lZCBsb25nICpzcF9sb2NhdGlvbilcbi0tXG5mcy9leGVjLmMtNzU5LX1cbmZzL2V4ZWMuYzo3NjA6RVhQT1JUX1NZTUJPTCh0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrKTtcbmZzL2V4ZWMuYy03NjEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDAzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDE4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgQmluYXJ5IEZvcm1hdHMqKgoKUmlnaHQsIGxldCYjMzk7cyBzZWUuIE15IG1lbnRhbCBjaGVja2xpc3QgZm9yIGJpbmFyeSBmb3JtYXQgc3VwcG9ydCBzdGFydHMgd2l0aCBjb25maXJtaW5nIHRoZSBwcmVzZW5jZSBvZiBgQklORk1UX0ZMQVRgIGFuZCBgQklORk1UX0VMRl9GRFBJQ2AuIFRob3NlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMgaW4gdGhpcyBjb250ZXh0LiBOb3csIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgY29uZmlndXJhdGlvbiBmb3IgYEJJTkZNVF9GTEFUYC4gSSYjMzk7bGwgaW1tZWRpYXRlbHkganVtcCBpbnRvIGBmcy9LY29uZmlnLmJpbmZtdGAuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBhbnkgZGVwZW5kZW5jaWVzLiBUaW1lIHRvIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDAzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCSU5GTVRfRkxBVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL0tjb25maWcuYmluZm10JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWcuYmluZm10PTExMz1jb25maWcgQVJDSF9IQVNfQklORk1UX0ZMQVRcbi0tXG5mcy9LY29uZmlnLmJpbmZtdC0xMTUtXG5mcy9LY29uZmlnLmJpbmZtdDoxMTY6Y29uZmlnIEJJTkZNVF9GTEFUXG5mcy9LY29uZmlnLmJpbmZtdC0xMTctXHRib29sIFwmIzM0O0tlcm5lbCBzdXBwb3J0IGZvciBmbGF0IGJpbmFyaWVzXCYjMzQ7XG4tLVxuZnMvS2NvbmZpZy5iaW5mbXQtMTIxLVxuZnMvS2NvbmZpZy5iaW5mbXQ6MTIyOmNvbmZpZyBCSU5GTVRfRkxBVF9BUkdWUF9FTlZQX09OX1NUQUNLXG5mcy9LY29uZmlnLmJpbmZtdC0xMjMtXHRib29sXG5mcy9LY29uZmlnLmJpbmZtdC0xMjQtXG5mcy9LY29uZmlnLmJpbmZtdDoxMjU6Y29uZmlnIEJJTkZNVF9GTEFUX09MRF9BTFdBWVNfUkFNXG5mcy9LY29uZmlnLmJpbmZtdC0xMjYtXHRib29sXG5mcy9LY29uZmlnLmJpbmZtdC0xMjctXG5mcy9LY29uZmlnLmJpbmZtdDoxMjg6Y29uZmlnIEJJTkZNVF9GTEFUX05PX0RBVEFfU1RBUlRfT0ZGU0VUXG5mcy9LY29uZmlnLmJpbmZtdC0xMjktXHRib29sXG5mcy9LY29uZmlnLmJpbmZtdC0xMzAtXG5mcy9LY29uZmlnLmJpbmZtdDoxMzE6Y29uZmlnIEJJTkZNVF9GTEFUX09MRFxuZnMvS2NvbmZpZy5iaW5mbXQtMTMyLVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgdmVyeSBvbGQgbGVnYWN5IGZsYXQgYmluYXJpZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1NTUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBmcy9LY29uZmlnLmJpbmZtdGAqKgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIHRoaW5raW5nLCAmIzM0O1doZXJlJiMzOTtzIHRoZSBiZXN0IHN0YXJ0aW5nIHBvaW50IGZvciB0aGlzIGFuYWx5c2lzPyYjMzQ7IE15IG1lbnRhbCBtYXAgdGVsbHMgbWUgdG8gaGVhZCBzdHJhaWdodCBmb3IgYGZzL0tjb25maWcuYmluZm10YCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDExNi4gSSYjMzk7bSBleHBlY3Rpbmcgc29tZXRoaW5nIHJlbGF0ZWQgdG8gYmluYXJ5IGZvcm1hdCBjb25maWd1cmF0aW9uIHRoZXJlLCBnaXZlbiB0aGUgZmlsZW5hbWUsIGFuZCB0aGUgS2NvbmZpZyBmaWxlcyBhcmUgdGhlIGxpZmVibG9vZCBmb3IgY29udHJvbGxpbmcgd2hhdCBmZWF0dXJlcyBnZXQgYnVpbHQuIEkmIzM5O20gYW50aWNpcGF0aW5nIHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gbG9naWMsIG1heWJlIHNvbWUgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLCBvciBwZXJoYXBzIHNvbWUgb3B0aW9ucyBjb250cm9sbGluZyB0aGUgZGVmYXVsdCBiZWhhdmlvci4gSSYjMzk7bSBrZWVuIHRvIHNlZSB0aGUgb3B0aW9ucyBhbmQgYW55IHJlbGF0ZWQgZGVwZW5kZW5jaWVzIG9yIGNvbnN0cmFpbnRzIGRlZmluZWQgdGhlcmUuIEl0JiMzOTtzIGEga2V5IHNwb3QgdG8gdW5kZXJzdGFuZCBob3cgc3BlY2lmaWMgYmluYXJ5IGZvcm1hdHMgYXJlIGVuYWJsZWQgYW5kIGNvbmZpZ3VyZWQgYXQgYnVpbGQgdGltZS4gVGhpcyBzaG91bGQgZ2l2ZSBhIGdvb2Qgb3ZlcnZpZXcgYmVmb3JlIEkgbmVlZCB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIGFjdHVhbCBjb2RlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL0tjb25maWcuYmluZm10JiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMTA6XHRcbiAxMTE6XHRcdCAgTW9zdCBzeXN0ZW1zIHdpbGwgbm90IGJvb3QgaWYgeW91IHNheSBNIG9yIE4gaGVyZS4gIElmIHVuc3VyZSwgc2F5IFkuXG4gMTEyOlx0XG4gMTEzOlx0Y29uZmlnIEFSQ0hfSEFTX0JJTkZNVF9GTEFUXG4gMTE0Olx0XHRib29sXG4gMTE1Olx0XG4gMTE2Olx0Y29uZmlnIEJJTkZNVF9GTEFUXG4gMTE3Olx0XHRib29sIFwmIzM0O0tlcm5lbCBzdXBwb3J0IGZvciBmbGF0IGJpbmFyaWVzXCYjMzQ7XG4gMTE4Olx0XHRkZXBlbmRzIG9uIEFSQ0hfSEFTX0JJTkZNVF9GTEFUXG4gMTE5Olx0XHRoZWxwXG4gMTIwOlx0XHQgIFN1cHBvcnQgdUNsaW51eCBGTEFUIGZvcm1hdCBiaW5hcmllcy5cbiAxMjE6XHRcbiAxMjI6XHRjb25maWcgQklORk1UX0ZMQVRfQVJHVlBfRU5WUF9PTl9TVEFDS1xuIDEyMzpcdFx0Ym9vbFxuIDEyNDpcdFxuIDEyNTpcdGNvbmZpZyBCSU5GTVRfRkxBVF9PTERfQUxXQVlTX1JBTVxuIDEyNjpcdFx0Ym9vbFxuIDEyNzpcdFxuIDEyODpcdGNvbmZpZyBCSU5GTVRfRkxBVF9OT19EQVRBX1NUQVJUX09GRlNFVFxuIDEyOTpcdFx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA4MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkFuYWx5emluZyB0aGUgS2VybmVsJiMzOTtzIEZsYXQgQmluYXJ5IEZvcm1hdCBTdXBwb3J0KioKCkFscmlnaHQsIHRoZSBuZXh0IHN0ZXAgaW4gdGhpcyBkaXNzZWN0aW9uIGhpbmdlcyBvbiB0aGUgYXJjaGl0ZWN0dXJlJiMzOTtzIHN1cHBvcnQgZm9yIHRoZSBmbGF0IGJpbmFyeSBmb3JtYXQuIEl0JiMzOTtzIGEgY29uZGl0aW9uYWwgZGVwZW5kZW5jeSwgSSYjMzk7ZCBzYXkuIFNvLCB0aGUga2V5IHZhcmlhYmxlIGhlcmUgaXMgYEFSQ0hfSEFTX0JJTkZNVF9GTEFUYC4gSSBuZWVkIHRvIGNvbmZpcm0gaXRzIGRlZmluaXRpb24gYW5kIHZhbHVlLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gdG8gZGV0ZXJtaW5lIGlmIGBBUkNIX0hBU19CSU5GTVRfRkxBVGAgaXMgc2V0LiBUaGF0JiMzOTtzIHRoZSBjb3JlIHF1ZXN0aW9uIGhlcmUuIElzIHRoaXMgYXJjaGl0ZWN0dXJlIGxldmVyYWdpbmcgdGhlIGBiaW5mbXRfZmxhdGAgaGFuZGxlcj8gSSBuZWVkIHRoYXQgYW5zd2VyIHRvIHByb2NlZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDAzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBBUkNIX0hBU19CSU5GTVRfRkxBVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtL0tjb25maWc9Mj1jb25maWcgQVJNXG4tLVxuYXJjaC9hcm0vS2NvbmZpZy02LVx0c2VsZWN0IEFSQ0hfQ09SUkVDVF9TVEFDS1RSQUNFX09OX0tSRVRQUk9CRSBpZiBIQVZFX0tSRVRQUk9CRVMgXHUwMDI2XHUwMDI2IEZSQU1FX1BPSU5URVIgXHUwMDI2XHUwMDI2ICFBUk1fVU5XSU5EXG5hcmNoL2FybS9LY29uZmlnOjc6XHRzZWxlY3QgQVJDSF9IQVNfQklORk1UX0ZMQVRcbmFyY2gvYXJtL0tjb25maWctOC1cdHNlbGVjdCBBUkNIX0hBU19DQUNIRV9MSU5FX1NJWkUgaWYgT0Zcbi0tXG5hcmNoL202OGsvS2NvbmZpZz0yPWNvbmZpZyBNNjhLXG4tLVxuYXJjaC9tNjhrL0tjb25maWctNS1cdHNlbGVjdCBBUkNIXzMyQklUX09GRl9UXG5hcmNoL202OGsvS2NvbmZpZzo2Olx0c2VsZWN0IEFSQ0hfSEFTX0JJTkZNVF9GTEFUXG5hcmNoL202OGsvS2NvbmZpZy03LVx0c2VsZWN0IEFSQ0hfSEFTX0NQVV9DQUNIRV9BTElBU0lOR1xuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZz0xMz1jb25maWcgUklTQ1Zcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWctMjUtXHRzZWxlY3QgQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVMgaWYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbmFyY2gvcmlzY3YvS2NvbmZpZzoyNjpcdHNlbGVjdCBBUkNIX0hBU19CSU5GTVRfRkxBVFxuYXJjaC9yaXNjdi9LY29uZmlnLTI3LVx0c2VsZWN0IEFSQ0hfSEFTX0NDX0NBTl9MSU5LXG4tLVxuYXJjaC9zaC9LY29uZmlnPTI9Y29uZmlnIFNVUEVSSFxuLS1cbmFyY2gvc2gvS2NvbmZpZy02LVx0c2VsZWN0IEFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHIGlmIChHVVNBX1JCIHx8IENQVV9TSDRBKVxuYXJjaC9zaC9LY29uZmlnOjc6XHRzZWxlY3QgQVJDSF9IQVNfQklORk1UX0ZMQVQgaWYgIU1NVVxuYXJjaC9zaC9LY29uZmlnLTgtXHRzZWxlY3QgQVJDSF9IQVNfQ1BVX0ZJTkFMSVpFX0lOSVRcbi0tXG5hcmNoL3h0ZW5zYS9LY29uZmlnPTI9Y29uZmlnIFhURU5TQVxuLS1cbmFyY2gveHRlbnNhL0tjb25maWctNS1cdHNlbGVjdCBBUkNIX0hBU19DUFVfQ0FDSEVfQUxJQVNJTkdcbmFyY2gveHRlbnNhL0tjb25maWc6NjpcdHNlbGVjdCBBUkNIX0hBU19CSU5GTVRfRkxBVCBpZiAhTU1VXG5hcmNoL3h0ZW5zYS9LY29uZmlnLTctXHRzZWxlY3QgQVJDSF9IQVNfQ1VSUkVOVF9TVEFDS19QT0lOVEVSXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDAzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODA1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBGbGF0IEJpbmFyeSBTdXBwb3J0IGluIHRoZSBLZXJuZWwqKgoKT2theSwgc28gSSBzZWUgYEFSQ0hfSEFTX0JJTkZNVF9GTEFUYCBpcyBiZWluZyBzZWxlY3RlZCBieSB0aGUgQVJNLCBNNjhLLCBSSVNDViwgU0gsIGFuZCBYVEVOU0EgYXJjaGl0ZWN0dXJlcy4gVGhhdCBpbW1lZGlhdGVseSByYWlzZXMgYSBmbGFnLiBgQklORk1UX0ZMQVRgLCBhcyBJIHJlY2FsbCwgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBmbGF0IGJpbmFyaWVzIOKAkyB0aGUga2luZCB5b3Ugb2Z0ZW4gZmluZCBvbiBzeXN0ZW1zICp3aXRob3V0KiBhIG1lbW9yeSBtYW5hZ2VtZW50IHVuaXQgKE1NVSkuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IGNvbm5lY3Rpb24uCgpOb3csIG15IGludHVpdGlvbiBpcyBjb25maXJtZWQgYnkgYHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2tgIC0gaXQgc2VlbXMgdG8gYmUgY29uZGl0aW9uYWxseSBjb21waWxlZCAqb25seSogd2hlbiBgIUNPTkZJR19NTVVgLiBUaGF0IG1ha2VzIHNlbnNlOyBvbiBNTVUtbGVzcyBzeXN0ZW1zLCB3ZSB0eXBpY2FsbHkgaGFuZGxlIGFyZ3VtZW50IHBhc3NpbmcgZGlmZmVyZW50bHksIG9mdGVuIHB1c2hpbmcgdGhlbSBkaXJlY3RseSBvbnRvIHRoZSBzdGFjayBpbiB0aGUga2VybmVsLiBUaGlzIGlzIGEgY3J1Y2lhbCBkZXRhaWwgSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0JiMzOTtzIHZlcmlmeSBteSBoeXBvdGhlc2lzLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgc2NhbiB0aHJvdWdoIHRoZSByZWxldmFudCBjb2RlIGFnYWluLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgdGhvc2UgYCNpZm5kZWYgQ09ORklHX01NVWAgb3IgYCNlbHNlYCBibG9ja3MgaW4gcmVsYXRpb24gdG8gdGhlIGZsYXQgYmluYXJ5IHN1cHBvcnQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGxvZ2ljLCBtYWtpbmcgc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgZWRnZSBjYXNlcy4gSSYjMzk7bGwgY2hlY2sgYGZzL2V4ZWMuY2AgYWdhaW4sIHNwZWNpZmljYWxseSBmb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gdGhlIHByZXNlbmNlIG9yIGFic2VuY2Ugb2YgTU1VIHN1cHBvcnQuIEkgbmVlZCB0byBjb25maXJtIHRoZSBjb25kaXRpb25zIGFyZSBleGFjdGx5IGFzIEkgZXhwZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2V4ZWMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTkwOlx0XHRcdFx0cmV0dXJuIC1FUkVTVEFSVE5PSEFORDtcbiA1OTE6XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4gNTkyOlx0XHR9XG4gNTkzOlx0XHRyZXR1cm4gMDtcbiA1OTQ6XHR9XG4gNTk1Olx0XG4gNTk2Olx0I2lmZGVmIENPTkZJR19NTVVcbiA1OTc6XHRcbiA1OTg6XHQvKlxuIDU5OTpcdCAqIEZpbmFsaXplcyB0aGUgc3RhY2sgdm1fYXJlYV9zdHJ1Y3QuIFRoZSBmbGFncyBhbmQgcGVybWlzc2lvbnMgYXJlIHVwZGF0ZWQsXG4gNjAwOlx0ICogdGhlIHN0YWNrIGlzIG9wdGlvbmFsbHkgcmVsb2NhdGVkLCBhbmQgc29tZSBleHRyYSBzcGFjZSBpcyBhZGRlZC5cbiA2MDE6XHQgKi9cbiA2MDI6XHRpbnQgc2V0dXBfYXJnX3BhZ2VzKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXG4gNjAzOlx0XHRcdCAgICB1bnNpZ25lZCBsb25nIHN0YWNrX3RvcCxcbiA2MDQ6XHRcdFx0ICAgIGludCBleGVjdXRhYmxlX3N0YWNrKVxuIDYwNTpcdHtcbiA2MDY6XHRcdGludCByZXQ7XG4gNjA3Olx0XHR1bnNpZ25lZCBsb25nIHN0YWNrX3NoaWZ0O1xuIDYwODpcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LVx1MDAzZW1tO1xuIDYwOTpcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBicHJtLVx1MDAzZXZtYTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1MjYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5yZWFjaGFibGUgQ29kZSBhbmQgRnV6emluZyBTdHJhdGVnaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBzZXR1cF9hcmdfcGFnZXNgIGZ1bmN0aW9uLCBhbmQgaXQmIzM5O3MgZGVmaW5pdGVseSB0aWVkIHRvIGBDT05GSUdfTU1VYCwgd2hpbGUgYHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2tgIHNlZW1zIHRvIGJlIHRoZSBmYWxsYmFjayBmb3IgYCFDT05GSUdfTU1VYC4gVGhhdCBtYWtlcyBzZW5zZS4gVGhlIHByb2JsZW0gaXMsIGB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrYCBvbmx5IGV4aXN0cyB3aGVuIHdlICpkb24mIzM5O3QqIGhhdmUgYW4gTU1VLiBBbmQsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgc3l6a2FsbGVyIGRvZXNuJiMzOTt0IGFjdHVhbGx5IGZ1enogY29uZmlndXJhdGlvbnMgd2l0aG91dCBhbiBNTVUsIHJpZ2h0PyBJdCYjMzk7cyBub3QgYSBjb21tb24gdGFyZ2V0LiBQbHVzLCB3ZSBjYW4mIzM5O3QgZm9yY2UgZW5hYmxlIGAhQ09ORklHX01NVWAgdGhyb3VnaCBgRW5hYmxlQ29uZmlnc2AgYmVjYXVzZSBpdCYjMzk7cyBhIGRpc2FibGluZyBvcHRpb24hIFNvLCBpbiB0aGUgc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudCwgdGhpcyBjb2RlIGlzLCBwcmFjdGljYWxseSBzcGVha2luZywgdW5yZWFjaGFibGUuCgpCdXQgd2FpdCBhIG1pbnV0ZeKApiBBcmUgdGhlcmUgKmFueSogc3l6a2FsbGVyIGluc3RhbmNlcyB3aGVyZSBgQ09ORklHX01NVWAgaXMgZGlzYWJsZWQ/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBhc3N1bXB0aW9uLiBUaGUgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCBzeXprYWxsZXIgKm9ubHkqIGZvY3VzZXMgb24gTU1VLWVuYWJsZWQgYXJjaGl0ZWN0dXJlcywgYnV0IEkgc2hvdWxkIGNvbmZpcm0gdGhhdCYjMzk7cyB1bml2ZXJzYWxseSB0cnVlLgoKT2theSwgbGV0JiMzOTtzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgYW5vdGhlciBwb3NzaWJsZSBhbmdsZS4gQ291bGQgdGhlcmUgYmUgYSBzaXR1YXRpb24gd2hlcmUgYEJJTkZNVF9FTEZfRkRQSUNgIGlzIGVuYWJsZWQsIGJ1dCBgQ09ORklHX01NVWAgaXMgKmFsc28qIGVuYWJsZWQ/IFRoYXQgY291bGQgbGVhZCB0byBzb21lIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaW4gaG93IGFyZ3VtZW50cyBhcmUgaGFuZGxlZC4gSXQmIzM5O3MgYSBiaXQgb2YgYSBsb25nIHNob3QsIGJ1dCB3b3J0aCBhIGxvb2suIEkmIzM5O2xsIG5lZWQgdG8gc2NydXRpbml6ZSBgZnMvYmluZm10X2VsZl9mZHBpYy5jYCBhbG9uZ3NpZGUgdGhlIGB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrYCBmdW5jdGlvbiB0byBtYWtlIHN1cmUgdGhleSYjMzk7cmUgY29tcGF0aWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHJhbnNmZXJfYXJnc190b19zdGFjayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2JpbmZtdF9lbGZfZmRwaWMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9iaW5mbXRfZWxmX2ZkcGljLmM9NDk2PXN0YXRpYyBpbnQgY3JlYXRlX2VsZl9mZHBpY190YWJsZXMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcbi0tXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtNTIyLVx0Lyogc3RhY2sgdGhlIHByb2dyYW0gYXJndW1lbnRzIGFuZCBlbnZpcm9ubWVudCAqL1xuZnMvYmluZm10X2VsZl9mZHBpYy5jOjUyMzpcdGlmICh0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrKGJwcm0sIFx1MDAyNnNwKSBcdTAwM2MgMClcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYy01MjQtXHRcdHJldHVybiAtRUZBVUxUO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI0MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqQ2hlY2tpbmcgYGZzL2JpbmZtdF9lbGZfZmRwaWMuY2AmIzM5O3MgTU1VIERlcGVuZGVuY3kqKgoKQWxyaWdodCwgbGV0IG1lIHF1aWNrbHkgYXNzZXNzIHRoaXMuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhlIGNvbXBpbGF0aW9uIG9mIGBmcy9iaW5mbXRfZWxmX2ZkcGljLmNgIGlzIGNvbmRpdGlvbmFsIG9uIGBDT05GSUdfTU1VYCBiZWluZyBlbmFibGVkLiBJdCYjMzk7cyBhIGtleSBwaWVjZSBvZiB0aGUgRUxGIGludGVycHJldGVyLCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBGRC1QSUMgdmFyaWFudCwgc28gdGhlIHJlbGF0aW9uc2hpcCBpcyBsaWtlbHkgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgZm9yIGFueSBidWlsZCBjb25maWd1cmF0aW9uLCBhbmQgY2VydGFpbmx5IGltcG9ydGFudCBpbiB0ZXJtcyBvZiBpdHMgcmVsYXRpb24gdG8gZGlmZmVyZW50IGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIG1lbnRhbGx5IGZsYWcgdGhpcywgZGVwZW5kaW5nIG9uIHdoYXQgSSBmaW5kLCBhcyB0aGlzIGNvdWxkIGhhdmUgaW1wbGljYXRpb25zIGZvciBpdHMgaW50ZWdyYXRpb24gaW50byBkaWZmZXJlbnQgc3lzdGVtcyBhbmQgYXJjaGl0ZWN0dXJlcyBJIGFtIHdvcmtpbmcgb24uIExldCYjMzk7cyBzZWUgaWYgdGhpcyBoYXMgYSBjb25kaXRpb25hbCBjb21waWxhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJJTkZNVF9FTEZfRkRQSUMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9LY29uZmlnLmJpbmZtdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnLmJpbmZtdD01NT1jb25maWcgQVJDSF9VU0VfR05VX1BST1BFUlRZXG4tLVxuZnMvS2NvbmZpZy5iaW5mbXQtNTctXG5mcy9LY29uZmlnLmJpbmZtdDo1ODpjb25maWcgQklORk1UX0VMRl9GRFBJQ1xuZnMvS2NvbmZpZy5iaW5mbXQtNTktXHRib29sIFwmIzM0O0tlcm5lbCBzdXBwb3J0IGZvciBGRFBJQyBFTEYgYmluYXJpZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1NzAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBmcy9LY29uZmlnLmJpbmZtdGAqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgbGV0JiMzOTtzIHplcm8gaW4gb24gYGZzL0tjb25maWcuYmluZm10YC4gSSBzZWVtIHRvIHJlY2FsbCBzb21ldGhpbmcgaW50ZXJlc3RpbmcgYXJvdW5kIGxpbmUgNTguIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIGhvdyB0aGUga2VybmVsIGNvbmZpZ3VyZXMgYmluYXJ5IGZvcm1hdCBzdXBwb3J0LiBHaXZlbiBteSBiYWNrZ3JvdW5kIGluIGtlcm5lbCBpbnRlcm5hbHMsIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9mIGRpZmZlcmVudCBiaW5hcnkgaGFuZGxlcnMg4oCTIEVMRiwgYS5vdXQsIG1heWJlIHNjcmlwdC1iYXNlZCBleGVjdXRpb24sIHRoYXQgc29ydCBvZiB0aGluZy4gSSB3YW50IHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgKmV4YWN0KiBkZXBlbmRlbmNpZXMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcm91bmQgdGhpcyBzZWN0aW9uOyBpcyBpdCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMsIHdoYXQgYXJlIHRoZSByZWxldmFudCBzeW1ib2xzLCBhbmQgd2hhdCBicm9hZGVyIGVmZmVjdCBvbiB0aGUgc3lzdGVtIGJ1aWxkIHByb2Nlc3MgZG9lcyBpdCBoYXZlPyBJIGJldCBpdCBkZWFscyB3aXRoIHRoZSBgQ09ORklHX0JJTkZNVF8qYCBzeW1ib2xzLiBLbm93aW5nIHRoaXMsIEkgZXhwZWN0IHRvIHNlZSBhbiBpbW1lZGlhdGUgaW1wYWN0IG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSBidWlsZCBwcm9jZXNzLiBJJiMzOTttIGhvcGluZyB0byBxdWlja2x5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMgZm9yIGEgcGFydGljdWxhciBhcmNoaXRlY3R1cmUgSSYjMzk7bSB3b3JraW5nIHdpdGg7IHBlcmhhcHMgdGhlcmUmIzM5O3Mgc29tZXRoaW5nIHBsYXRmb3JtLXNwZWNpZmljIHRoYXQmIzM5O3MgaW5mbHVlbmNpbmcgdGhlIGF2YWlsYWJsZSBiaW5mbXQgaGFuZGxlcnMgb3IgY2F1c2luZyBhbiBpbmNvbXBhdGliaWxpdHkuIExpbmUgNTggbWlnaHQganVzdCBiZSBhIGtleSBub2RlIGluIHRoZSBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDM6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9LY29uZmlnLmJpbmZtdCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNTA6XHRcdGJvb2xcbiAgNTE6XHRcbiAgNTI6XHRjb25maWcgQVJDSF9IQVZFX0VMRl9QUk9UXG4gIDUzOlx0XHRib29sXG4gIDU0Olx0XG4gIDU1Olx0Y29uZmlnIEFSQ0hfVVNFX0dOVV9QUk9QRVJUWVxuICA1NjpcdFx0Ym9vbFxuICA1NzpcdFxuICA1ODpcdGNvbmZpZyBCSU5GTVRfRUxGX0ZEUElDXG4gIDU5Olx0XHRib29sIFwmIzM0O0tlcm5lbCBzdXBwb3J0IGZvciBGRFBJQyBFTEYgYmluYXJpZXNcJiMzNDtcbiAgNjA6XHRcdGRlZmF1bHQgeSBpZiAhQklORk1UX0VMRlxuICA2MTpcdFx0ZGVwZW5kcyBvbiBBUk0gfHwgKChNNjhLIHx8IFJJU0NWIHx8IFNVUEVSSCB8fCBYVEVOU0EpIFx1MDAyNlx1MDAyNiAhTU1VKVxuICA2MjpcdFx0c2VsZWN0IEVMRkNPUkVcbiAgNjM6XHRcdGhlbHBcbiAgNjQ6XHRcdCAgRUxGIEZEUElDIGJpbmFyaWVzIGFyZSBiYXNlZCBvbiBFTEYsIGJ1dCBhbGxvdyB0aGUgaW5kaXZpZHVhbCBsb2FkXG4gIDY1Olx0XHQgIHNlZ21lbnRzIG9mIGEgYmluYXJ5IHRvIGJlIGxvY2F0ZWQgaW4gbWVtb3J5IGluZGVwZW5kZW50bHkgb2YgZWFjaFxuICA2NjpcdFx0ICBvdGhlci4gVGhpcyBtYWtlcyB0aGlzIGZvcm1hdCBpZGVhbCBmb3IgdXNlIGluIGVudmlyb25tZW50cyB3aGVyZSBub1xuICA2NzpcdFx0ICBNTVUgaXMgYXZhaWxhYmxlIGFzIGl0IHN0aWxsIHBlcm1pdHMgdGV4dCBzZWdtZW50cyB0byBiZSBzaGFyZWQsXG4gIDY4Olx0XHQgIGV2ZW4gaWYgZGF0YSBzZWdtZW50cyBhcmUgbm90LlxuICA2OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDE2MwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBCSU5GTVRfRUxGX0ZEUElDIGFuZCBUcmFuc2ZlcnJpbmcgQXJndW1lbnRzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBgQklORk1UX0VMRl9GRFBJQ2AgZmVhdHVyZSBpcyBlbmFibGVkIGlmIGl0JiMzOTtzIGFuIEFSTSBhcmNoaXRlY3R1cmUsICpvciogaWYgaXQmIzM5O3Mgb25lIG9mIE02OEssIFJJU0NWLCBTVVBFUkgsIG9yIFhURU5TQSAqYW5kKiBkb2VzbiYjMzk7dCBoYXZlIGFuIE1NVS4gVGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQuIFNvLCB0aGUgcXVlc3Rpb24gdGhhdCBzcHJpbmdzIHRvIG1pbmQgaXMgd2hldGhlciBgQklORk1UX0VMRl9GRFBJQ2AgY2FuIGJlIGNvbXBpbGVkIHdoZW4gcnVubmluZyBvbiBBUk0gKndpdGgqIGFuIE1NVS4KCk5vdywgaWYgdGhhdCYjMzk7cyB0aGUgY2FzZSwgYW5kIGBCSU5GTVRfRUxGX0ZEUElDYCAqaXMqIGNvbXBpbGVkIG9uIGFuIEFSTSBhcmNoaXRlY3R1cmUgd2l0aCBhbiBNTVUsIEkgbmVlZCB0byBrbm93IGlmIHRoZSBzeXN0ZW0gd2lsbCBpbnZva2UgYHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2tgLiBJIGp1c3QgY29uZmlybWVkIHRoYXQgYGZzL2JpbmZtdF9lbGZfZmRwaWMuY2AgZG9lcywgaW4gZmFjdCwgY2FsbCBgdHJhbnNmZXJfYXJnc190b19zdGFja2AuCgpUaGUgcmVhbCBraWNrZXIgaGVyZSBpcywgd2hlcmUgaXMgYHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2tgIGRlZmluZWQ/IEkga25vdyB0aGF0IHVzdWFsbHkgaXQmIzM5O3MgZGVmaW5lZCBpbiBgZnMvZXhlYy5jYCwgKmJ1dCBvbmx5KiBpZiBgQ09ORklHX01NVWAgaXMgKm5vdCogZW5hYmxlZCEgU28sIGlzIHRoZXJlIGFuIGFsdGVybmF0ZSBkZWZpbml0aW9uIHNvbWV3aGVyZSBlbHNlIGZvciBNTVUtZW5hYmxlZCBzeXN0ZW1zPyBUaGF0JiMzOTtzIHRoZSBjcnVjaWFsIHBvaW50IEkgbmVlZCB0byBpbnZlc3RpZ2F0ZS4gSSYjMzk7dmUgZ290IGEgcG90ZW50aWFsIGNvbmZsaWN0IGhlcmUsIEkmIzM5O2xsIGhhdmUgdG8gc2VlIHdoZXJlIGl0IGNvbWVzIGZyb20uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDAzOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyYW5zZmVyX2FyZ3NfdG9fc3RhY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYmluZm10X2VsZl9mZHBpYy5jPTQ5Nj1zdGF0aWMgaW50IGNyZWF0ZV9lbGZfZmRwaWNfdGFibGVzKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXG4tLVxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTUyMi1cdC8qIHN0YWNrIHRoZSBwcm9ncmFtIGFyZ3VtZW50cyBhbmQgZW52aXJvbm1lbnQgKi9cbmZzL2JpbmZtdF9lbGZfZmRwaWMuYzo1MjM6XHRpZiAodHJhbnNmZXJfYXJnc190b19zdGFjayhicHJtLCBcdTAwMjZzcCkgXHUwMDNjIDApXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtNTI0LVx0XHRyZXR1cm4gLUVGQVVMVDtcbi0tXG5mcy9iaW5mbXRfZmxhdC5jPTg1NT1zdGF0aWMgaW50IGxvYWRfZmxhdF9iaW5hcnkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbi0tXG5mcy9iaW5mbXRfZmxhdC5jLTkxMS1cdC8qIGNvcHkgdGhlIGFyZyBwYWdlcyBvbnRvIHRoZSBzdGFjayAqL1xuZnMvYmluZm10X2ZsYXQuYzo5MTI6XHRyZXMgPSB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrKGJwcm0sIFx1MDAyNmN1cnJlbnQtXHUwMDNlbW0tXHUwMDNlc3RhcnRfc3RhY2spO1xuZnMvYmluZm10X2ZsYXQuYy05MTMtXHRpZiAoIXJlcylcbi0tXG5mcy9leGVjLmM9NzI2PUVYUE9SVF9TWU1CT0woc2V0dXBfYXJnX3BhZ2VzKTtcbi0tXG5mcy9leGVjLmMtNzMzLSAqL1xuZnMvZXhlYy5jOjczNDppbnQgdHJhbnNmZXJfYXJnc190b19zdGFjayhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxuZnMvZXhlYy5jLTczNS1cdFx0XHQgICB1bnNpZ25lZCBsb25nICpzcF9sb2NhdGlvbilcbi0tXG5mcy9leGVjLmMtNzU5LX1cbmZzL2V4ZWMuYzo3NjA6RVhQT1JUX1NZTUJPTCh0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrKTtcbmZzL2V4ZWMuYy03NjEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDAzOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDc2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBFTEZfRkRQSUMgYW5kIE1NVSBDb21wYXRpYmlsaXR5KioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIFRoaXMgZG9lc24mIzM5O3QgcXVpdGUgYWRkIHVwLiBUaGUgY29kZSBzZWVtcyB0byBiZSBpbmRpY2F0aW5nIHRoYXQgYHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2tgIGlzIG9ubHkgZGVmaW5lZCBpZiB3ZSAqZG9uJiMzOTt0KiBoYXZlIGBDT05GSUdfTU1VYCBlbmFibGVkLiBUaGF0IGZlZWxzIHdyb25nLCBiZWNhdXNlIEkga25vdyB3ZSBoYXZlIEVMRiBGRFBJQyBiaW5hcmllcyB0aGF0IGNvbXBpbGUgb24gQVJNIGFyY2hpdGVjdHVyZXMgKndpdGgqIGFuIE1NVS4gSG93IGlzIHRoaXMgd29ya2luZz8gSSBuZWVkIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuCgpUaGUgb2J2aW91cyBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgc291cmNlLiBMZXQgbWUgZ28gZGlyZWN0bHkgdG8gYGZzL2JpbmZtdF9lbGZfZmRwaWMuY2AgYW5kIGh1bnQgZm9yIHRoYXQgYCNpZm5kZWYgQ09ORklHX01NVWAgY29uZGl0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGhpbiB0aGF0IGZpbGUsIGhvdyBpdCYjMzk7cyBkZWFsaW5nIHdpdGggdGhlIHN0YWNrIGFyZ3VtZW50IHRyYW5zZmVyLCBhbmQgd2hlcmUgdGhpcyBwb3RlbnRpYWxseSBjb25kaXRpb25hbCBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgZnJvbS4gVGhlcmUgbXVzdCBiZSBzb21lIGFkZGl0aW9uYWwgbG9naWMgdGhhdCBJIGFtIG1pc3NpbmcuIExldCYjMzk7cyBzZWUgaWYgdGhpcyByZXZlYWxzIHRoZSBkaXNjcmVwYW5jeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDM6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX01NVSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2JpbmZtdF9lbGZfZmRwaWMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9iaW5mbXRfZWxmX2ZkcGljLmM9NjQ9c3RhdGljIGludCBjcmVhdGVfZWxmX2ZkcGljX3RhYmxlcyhzdHJ1Y3QgbGludXhfYmlucHJtICosIHN0cnVjdCBtbV9zdHJ1Y3QgKixcbi0tXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtNjctXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmM6Njg6I2lmbmRlZiBDT05GSUdfTU1VXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtNjktc3RhdGljIGludCBlbGZfZmRwaWNfbWFwX2ZpbGVfY29uc3RkaXNwX29uX3VjbGludXgoc3RydWN0IGVsZl9mZHBpY19wYXJhbXMgKixcbi0tXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmM9MTgyPXN0YXRpYyBpbnQgbG9hZF9lbGZfZmRwaWNfYmluYXJ5KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4tLVxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTE5MC0jZW5kaWZcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYzoxOTE6I2lmbmRlZiBDT05GSUdfTU1VXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtMTkyLVx0dW5zaWduZWQgbG9uZyBzdGFja19wcm90O1xuLS1cbmZzL2JpbmZtdF9lbGZfZmRwaWMuYy0yMTItXHRpZiAoIWVsZl9jaGVja19mZHBpYyhcdTAwMjZleGVjX3BhcmFtcy5oZHIpKSB7XG5mcy9iaW5mbXRfZWxmX2ZkcGljLmM6MjEzOiNpZmRlZiBDT05GSUdfTU1VXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtMjE0LVx0XHQvKiBiaW5mbXRfZWxmIGhhbmRsZXMgbm9uLWZkcGljIGVsZiBleGNlcHQgb24gbm9tbXUgKi9cbi0tXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtMjg4LVx0XHRjYXNlIFBUX0xPQUQ6XG5mcy9iaW5mbXRfZWxmX2ZkcGljLmM6Mjg5OiNpZmRlZiBDT05GSUdfTU1VXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtMjkwLVx0XHRcdGlmIChleGVjX3BhcmFtcy5sb2FkX2FkZHIgPT0gMClcbi0tXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtMzY1LVxuZnMvYmluZm10X2VsZl9mZHBpYy5jOjM2NjojaWZkZWYgQ09ORklHX01NVVxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTM2Ny1cdGVsZl9mZHBpY19hcmNoX2xheV9vdXRfbW0oXHUwMDI2ZXhlY19wYXJhbXMsXG4tLVxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTQwMS1cbmZzL2JpbmZtdF9lbGZfZmRwaWMuYzo0MDI6I2lmZGVmIENPTkZJR19NTVVcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYy00MDMtXHRpZiAoIWN1cnJlbnQtXHUwMDNlbW0tXHUwMDNlc3RhcnRfYnJrKVxuLS1cbmZzL2JpbmZtdF9lbGZfZmRwaWMuYz00OTY9c3RhdGljIGludCBjcmVhdGVfZWxmX2ZkcGljX3RhYmxlcyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxuLS1cbmZzL2JpbmZtdF9lbGZfZmRwaWMuYy01MTEtXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmM6NTEyOiNpZmRlZiBDT05GSUdfTU1VXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtNTEzLVx0LyogSW4gc29tZSBjYXNlcyAoZS5nLiBIeXBlci1UaHJlYWRpbmcpLCB3ZSB3YW50IHRvIGF2b2lkIEwxIGV2aWN0aW9uc1xuLS1cbmZzL2JpbmZtdF9lbGZfZmRwaWMuYy02OTUtXHQvKiBmaWxsIGluIHRoZSBhcmd2W10gYXJyYXkgKi9cbmZzL2JpbmZtdF9lbGZfZmRwaWMuYzo2OTY6I2lmZGVmIENPTkZJR19NTVVcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYy02OTctXHRjdXJyZW50LVx1MDAzZW1tLVx1MDAzZWFyZ19zdGFydCA9IGJwcm0tXHUwMDNlcDtcbi0tXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmM9NzQ1PXN0YXRpYyBpbnQgZWxmX2ZkcGljX21hcF9maWxlKHN0cnVjdCBlbGZfZmRwaWNfcGFyYW1zICpwYXJhbXMsXG4tLVxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTc1MC1cdHN0cnVjdCBlbGZfZmRwaWNfbG9hZG1hcCAqbG9hZG1hcDtcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYzo3NTE6I2lmZGVmIENPTkZJR19NTVVcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYy03NTItXHRzdHJ1Y3QgZWxmX2ZkcGljX2xvYWRzZWcgKm1zZWc7XG4tLVxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTc4Mi1cdGNhc2UgRUxGX0ZEUElDX0ZMQUdfQ09OVElHVU9VUzpcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYzo3ODM6I2lmbmRlZiBDT05GSUdfTU1VXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtNzg0LVx0XHRyZXQgPSBlbGZfZmRwaWNfbWFwX2ZpbGVfY29uc3RkaXNwX29uX3VjbGludXgocGFyYW1zLCBmaWxlLCBtbSk7XG4tLVxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTg3Ny1cdCAqL1xuZnMvYmluZm10X2VsZl9mZHBpYy5jOjg3ODojaWZkZWYgQ09ORklHX01NVVxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTg3OS1cdG5sb2FkcyA9IGxvYWRtYXAtXHUwMDNlbnNlZ3M7XG4tLVxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTkyOC0gKi9cbmZzL2JpbmZtdF9lbGZfZmRwaWMuYzo5Mjk6I2lmbmRlZiBDT05GSUdfTU1VXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtOTMwLXN0YXRpYyBpbnQgZWxmX2ZkcGljX21hcF9maWxlX2NvbnN0ZGlzcF9vbl91Y2xpbnV4KFxuLS1cbmZzL2JpbmZtdF9lbGZfZmRwaWMuYz0xMDE1PXN0YXRpYyBpbnQgZWxmX2ZkcGljX21hcF9maWxlX2J5X2RpcmVjdF9tbWFwKHN0cnVjdCBlbGZfZmRwaWNfcGFyYW1zICpwYXJhbXMsXG4tLVxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTExMjktXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmM6MTEzMDojaWZkZWYgQ09ORklHX01NVVxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTExMzEtXHRcdHVuc2lnbmVkIGxvbmcgZXhjZXNzMVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjYzMAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEZEUElDIEVMRiBJbnRlcnByZXRlcioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCBiYXNlZCBvbiB0aGUgY3VycmVudCBjb250ZXh0LCB0aGUgaXNzdWUmIzM5O3MgcHJvYmFibHkgcmVsYXRlZCB0byBob3cgd2UmIzM5O3JlIGhhbmRsaW5nIEZEUElDLXNwZWNpZmljIEVMRiBiaW5hcmllcy4gVGltZSB0byBqdW1wIGludG8gdGhlIGNvZGUgZGlyZWN0bHkuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBsb29raW5nIGF0IGBmcy9iaW5mbXRfZWxmX2ZkcGljLmNgIGFuZCB6ZXJvaW5nIGluIGFyb3VuZCBsaW5lIDUxMi4gVGhhdCBsb2NhdGlvbiBmZWVscyBsaWtlIGEgbGlrZWx5IHNwb3QgdG8gZmluZCB0aGUgY29yZSBsb2dpYyBmb3IgdGhlIGR5bmFtaWMgbGlua2luZyBvciByZWxvY2F0aW9uIHByb2Nlc3MsIHRoZSBhcmVhIEkgc3VzcGVjdCB0aGUgYnVnIG1pZ2h0IGJlIGx1cmtpbmcuIEl04oCZcyB3aGVyZSB0aGluZ3MgdXN1YWxseSBnZXQgaW50ZXJlc3Rpbmcgd2hlbiBkZWFsaW5nIHdpdGggRkRQSUMmIzM5O3MgYWRkcmVzcyBzcGFjZSBtYW5pcHVsYXRpb25zLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gZXhhY3RseSBob3cgd2UmIzM5O3JlIG1hbmFnaW5nIHRoZSBHT1QvUExUIGVudHJpZXMgdGhlcmUgYW5kIGlmIHRoZXJlJiMzOTtzIGFueSBvYnZpb3VzIGZsYXcgaW4gdGhlIGFyZ3VtZW50IGhhbmRsaW5nIG9yIHBvaW50ZXIgZGVyZWZlcmVuY2luZyB0aGF0IGNvdWxkIGJlIGNhdXNpbmcgdGhlIG9ic2VydmVkIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2JpbmZtdF9lbGZfZmRwaWMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTAwOlx0e1xuIDUwMTpcdFx0Y29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBjdXJyZW50X2NyZWQoKTtcbiA1MDI6XHRcdHVuc2lnbmVkIGxvbmcgc3AsIGNzcCwgbml0ZW1zO1xuIDUwMzpcdFx0ZWxmX2NhZGRyX3QgX191c2VyICphcmd2LCAqZW52cDtcbiA1MDQ6XHRcdHNpemVfdCBwbGF0Zm9ybV9sZW4gPSAwLCBsZW47XG4gNTA1Olx0XHRjaGFyICprX3BsYXRmb3JtLCAqa19iYXNlX3BsYXRmb3JtO1xuIDUwNjpcdFx0Y2hhciBfX3VzZXIgKnVfcGxhdGZvcm0sICp1X2Jhc2VfcGxhdGZvcm0sICpwO1xuIDUwNzpcdFx0aW50IGxvb3A7XG4gNTA4Olx0XHR1bnNpZ25lZCBsb25nIGZsYWdzID0gMDtcbiA1MDk6XHRcdGludCBlaV9pbmRleDtcbiA1MTA6XHRcdGVsZl9hZGRyX3QgKmVsZl9pbmZvO1xuIDUxMTpcdFxuIDUxMjpcdCNpZmRlZiBDT05GSUdfTU1VXG4gNTEzOlx0XHQvKiBJbiBzb21lIGNhc2VzIChlLmcuIEh5cGVyLVRocmVhZGluZyksIHdlIHdhbnQgdG8gYXZvaWQgTDEgZXZpY3Rpb25zXG4gNTE0Olx0XHQgKiBieSB0aGUgcHJvY2Vzc2VzIHJ1bm5pbmcgb24gdGhlIHNhbWUgcGFja2FnZS4gT25lIHRoaW5nIHdlIGNhbiBkbyBpc1xuIDUxNTpcdFx0ICogdG8gc2h1ZmZsZSB0aGUgaW5pdGlhbCBzdGFjayBmb3IgdGhlbSwgc28gd2UgZ2l2ZSB0aGUgYXJjaGl0ZWN0dXJlXG4gNTE2Olx0XHQgKiBhbiBvcHBvcnR1bml0eSB0byBkbyBzbyBoZXJlLlxuIDUxNzpcdFx0ICovXG4gNTE4Olx0XHRzcCA9IGFyY2hfYWxpZ25fc3RhY2soYnBybS1cdTAwM2VwKTtcbiA1MTk6XHQjZWxzZVxuIDUyMDpcdFx0c3AgPSBtbS1cdTAwM2VzdGFydF9zdGFjaztcbiA1MjE6XHRcbiA1MjI6XHRcdC8qIHN0YWNrIHRoZSBwcm9ncmFtIGFyZ3VtZW50cyBhbmQgZW52aXJvbm1lbnQgKi9cbiA1MjM6XHRcdGlmICh0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrKGJwcm0sIFx1MDAyNnNwKSBcdTAwM2MgMClcbiA1MjQ6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gNTI1Olx0XHRzcCBcdTAwMjY9IH4xNTtcbiA1MjY6XHQjZW5kaWZcbiA1Mjc6XHRcbiA1Mjg6XHRcdC8qXG4gNTI5Olx0XHQgKiBJZiB0aGlzIGFyY2hpdGVjdHVyZSBoYXMgYSBwbGF0Zm9ybSBjYXBhYmlsaXR5IHN0cmluZywgY29weSBpdFxuIDUzMDpcdFx0ICogdG8gdXNlcnNwYWNlLiAgSW4gc29tZSBjYXNlcyAoU3BhcmMpLCB0aGlzIGluZm8gaXMgaW1wb3NzaWJsZVxuIDUzMTpcdFx0ICogZm9yIHVzZXJzcGFjZSB0byBnZXQgYW55IG90aGVyIHdheSwgaW4gb3RoZXJzIChpMzg2KSBpdCBpc1xuIDUzMjpcdFx0ICogbWVyZWx5IGRpZmZpY3VsdC5cbiA1MzM6XHRcdCAqL1xuIDUzNDpcdFx0a19wbGF0Zm9ybSA9IEVMRl9QTEFURk9STTtcbiA1MzU6XHRcdHVfcGxhdGZvcm0gPSBOVUxMO1xuIDUzNjpcdFxuIDUzNzpcdFx0aWYgKGtfcGxhdGZvcm0pIHtcbiA1Mzg6XHRcdFx0cGxhdGZvcm1fbGVuID0gc3RybGVuKGtfcGxhdGZvcm0pICYjNDM7IDE7XG4gNTM5Olx0XHRcdHNwIC09IHBsYXRmb3JtX2xlbjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDM6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc1MTkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBBcmNoaXRlY3R1cmUqKgoKUmlnaHQsIHNvIGB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrYC4uLiBUaGF0JiMzOTtzIG9ubHkgdHJpZ2dlcmVkIHdoZW4gYENPTkZJR19NTVVgIGlzICpub3QqIGRlZmluZWQgd2l0aGluIGBmcy9iaW5mbXRfZWxmX2ZkcGljLmNgLiBJbnRlcmVzdGluZy4gTXkgbWVudGFsIG1hcCBpcyBzdGFydGluZyB0byBsaWdodCB1cCB3aXRoIHBvc3NpYmlsaXRpZXMuIFRoaXMgc3VnZ2VzdHMgYSB2ZXJ5IHNwZWNpZmljLCByZXNvdXJjZS1jb25zdHJhaW5lZCBhcmNoaXRlY3R1cmUsIHByb2JhYmx5IHNvbWV0aGluZyBlbWJlZGRlZCBvciByZWFsLXRpbWUuIFRoZSBsYWNrIG9mIGEgTWVtb3J5IE1hbmFnZW1lbnQgVW5pdCAoTU1VKSBpcyBhIHNpZ25pZmljYW50IGNsdWUuIEl0IG1lYW5zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBkaWZmZXJlbnQgcGFyYWRpZ20sIGxpa2VseSBzaW1wbGVyIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBhIG1vcmUgZGlyZWN0IGFkZHJlc3Mgc3BhY2UuIFRoZSBgdHJhbnNmZXJfYXJnc190b19zdGFja2AgZnVuY3Rpb24gaXRzZWxmIG11c3QgYmUgaGFuZGxpbmcgdGhlIGNyaXRpY2FsIHRhc2sgb2YgcGxhY2luZyBjb21tYW5kLWxpbmUgYXJndW1lbnRzIG9udG8gdGhlIHN0YWNrIGluIHRoaXMgZW52aXJvbm1lbnQsIHdoaWNoIGlzIGZ1bmRhbWVudGFsIGZvciBwcm9ncmFtIGV4ZWN1dGlvbi4KCk5vdywgd2hlcmUgZWxzZSBtaWdodCB3ZSBzZWUgdGhpcyBraW5kIG9mIGNvbmRpdGlvbmFsIGJlaGF2aW9yPyBOYXR1cmFsbHksIEkgbmVlZCB0byBjaGVjayBgZnMvYmluZm10X2ZsYXQuY2AuIEdpdmVuIHRoYXQgYGVsZl9mZHBpY2AgaXMgcmVsYXRlZCB0byBkeW5hbWljYWxseSBsaW5rZWQgZXhlY3V0YWJsZXMsIGFuZCB0aGUgYGZsYXRgIGJpbmZtdCBpcyBvZnRlbiBhc3NvY2lhdGVkIHdpdGggc2ltcGxlciwgcG90ZW50aWFsbHkgbm9uLXJlbG9jYXRhYmxlIGZvcm1hdHMsIEkgc3VzcGVjdCBgZmxhdGAgbWlnaHQgYWxzbyBoYXZlIGEgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gZm9yIGhhbmRsaW5nIHRoZXNlIHNhbWUgYXJndW1lbnRzIG9uIG5vbi1NTVUgc3lzdGVtcy4gVGhpcyBpcyBhbGwgYWJvdXQgZW5zdXJpbmcgY29tcGF0aWJpbGl0eSBhbmQgZWZmaWNpZW50IG9wZXJhdGlvbiBhY3Jvc3MgZGlmZmVyZW50IGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIGd1ZXNzaW5nIHdlJiMzOTtsbCBzZWUgcGFyYWxsZWwgbG9naWMgb3Igc2ltaWxhciBtZWNoYW5pc21zIHRoZXJlIHRvIGFjY29tcGxpc2ggdGhlIHNhbWUgYXJndW1lbnQgdHJhbnNmZXIsIGJ1dCBwb3RlbnRpYWxseSB1c2luZyBhIG1vcmUgYmFzaWMgb3Igb3B0aW1pemVkIG1ldGhvZCBzdWl0YWJsZSBmb3IgZW52aXJvbm1lbnRzIHdpdGhvdXQgYW4gTU1VLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gYGZsYXQuY2AuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDM6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX01NVSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2JpbmZtdF9mbGF0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYmluZm10X2ZsYXQuYz00MDY9c3RhdGljIGludCBsb2FkX2ZsYXRfZmlsZShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxuLS1cbmZzL2JpbmZtdF9mbGF0LmMtNTI3LVx0ICovXG5mcy9iaW5mbXRfZmxhdC5jOjUyODpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfTU1VKSBcdTAwMjZcdTAwMjYgIShmbGFncyBcdTAwMjYgKEZMQVRfRkxBR19SQU18RkxBVF9GTEFHX0daSVApKSkge1xuZnMvYmluZm10X2ZsYXQuYy01MjktXHRcdC8qXG4tLVxuZnMvYmluZm10X2ZsYXQuYy02MjAtXHRcdGlmIChmbGFncyBcdTAwMjYgRkxBVF9GTEFHX0daSVApIHtcbmZzL2JpbmZtdF9mbGF0LmM6NjIxOiNpZm5kZWYgQ09ORklHX01NVVxuZnMvYmluZm10X2ZsYXQuYy02MjItXHRcdFx0cmVzdWx0ID0gZGVjb21wcmVzc19leGVjKGJwcm0sIHNpemVvZihzdHJ1Y3QgZmxhdF9oZHIpLFxuLS1cbmZzL2JpbmZtdF9mbGF0LmMtNjUzLVx0XHRcdGlmICghSVNfRVJSX1ZBTFVFKHJlc3VsdCkpIHtcbmZzL2JpbmZtdF9mbGF0LmM6NjU0OiNpZm5kZWYgQ09ORklHX01NVVxuZnMvYmluZm10X2ZsYXQuYy02NTUtXHRcdFx0XHRyZXN1bHQgPSBkZWNvbXByZXNzX2V4ZWMoYnBybSwgdGV4dF9sZW4sIChjaGFyICopIGRhdGFwb3MsXG4tLVxuZnMvYmluZm10X2ZsYXQuYy03MDctXHRjdXJyZW50LVx1MDAzZW1tLVx1MDAzZWJyayA9IChjdXJyZW50LVx1MDAzZW1tLVx1MDAzZXN0YXJ0X2JyayAmIzQzOyAzKSBcdTAwMjYgfjM7XG5mcy9iaW5mbXRfZmxhdC5jOjcwODojaWZuZGVmIENPTkZJR19NTVVcbmZzL2JpbmZtdF9mbGF0LmMtNzA5LVx0Y3VycmVudC1cdTAwM2VtbS1cdTAwM2Vjb250ZXh0LmVuZF9icmsgPSBtZW1wICYjNDM7IG1lbXBfc2l6ZSAtIHN0YWNrX2xlbjtcbi0tXG5mcy9iaW5mbXRfZmxhdC5jPTg1NT1zdGF0aWMgaW50IGxvYWRfZmxhdF9iaW5hcnkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbi0tXG5mcy9iaW5mbXRfZmxhdC5jLTg3Mi1cdCAqL1xuZnMvYmluZm10X2ZsYXQuYzo4NzM6I2lmbmRlZiBDT05GSUdfTU1VXG5mcy9iaW5mbXRfZmxhdC5jLTg3NC1cdHN0YWNrX2xlbiAmIzQzOz0gUEFHRV9TSVpFICogTUFYX0FSR19QQUdFUyAtIGJwcm0tXHUwMDNlcDsgLyogdGhlIHN0cmluZ3MgKi9cbi0tXG5mcy9iaW5mbXRfZmxhdC5jLTkwMC1cbmZzL2JpbmZtdF9mbGF0LmM6OTAxOiNpZmRlZiBDT05GSUdfTU1VXG5mcy9iaW5mbXRfZmxhdC5jLTkwMi1cdHJlcyA9IHNldHVwX2FyZ19wYWdlcyhicHJtLCBTVEFDS19UT1AsIEVYU1RBQ0tfREVGQVVMVCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDAzOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NTA5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgZnMvYmluZm10X2ZsYXQuY2AqKgoKT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZmxhdCBiaW5hcnkgZm9ybWF0IGlzIGhhbmRsZWQgd2l0aGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSBob3cgaXQmIzM5O3MgbG9hZGVkIGFuZCBleGVjdXRlZC4gSSBrbm93IHRoZXJlJiMzOTtzIGEgZ29vZCBjaHVuayBvZiBjb2RlIGRlYWxpbmcgd2l0aCB0aGlzIGluIHRoZSBmaWxlc3lzdGVtIGhhbmRsaW5nLiBTbywgSSYjMzk7bSB0aGlua2luZywgbGV0JiMzOTtzIHpvb20gaW4gb24gYGZzL2JpbmZtdF9mbGF0LmNgIGFyb3VuZCBsaW5lIDkwMS4gVGhhdCBmZWVscyBsaWtlIGEgZ29vZCBzcG90IHRvIHN0YXJ0IGRpZ2dpbmcuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgbWVhdCBvZiB0aGUgbG9hZGVyIG9yIGludGVycHJldGVyIGZ1bmN0aW9uIGJlZ2lucy4gSSB3YW50IHRvIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyBhdCB0aGF0IGxldmVsIHRvIHBpZWNlIHRvZ2V0aGVyIHRoZSBsb2FkaW5nIHByb2Nlc3MuIEkgaGF2ZSBhIGh1bmNoIGl0JiMzOTtzIHJlbGF0ZWQgdG8gdGhlIGBsb2FkX2ZsYXRfYmluYXJ5YCBvciBgZXhlY19mbGF0YCBvciBzb21ldGhpbmcgYWxvbmcgdGhvc2UgbGluZXMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSBhdCB0aGF0IGxvY2F0aW9uIGlzIGRvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2JpbmZtdF9mbGF0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg5MDpcdFx0XHRcdFx0bGliaW5mby5saWJfbGlzdFtqXS5zdGFydF9kYXRhIDogVU5MT0FERURfTElCO1xuIDg5MTpcdFx0XHRcdHVuc2lnbmVkIGxvbmcgX191c2VyICpwID0gKHVuc2lnbmVkIGxvbmcgX191c2VyICopXG4gODkyOlx0XHRcdFx0XHRsaWJpbmZvLmxpYl9saXN0W2ldLnN0YXJ0X2RhdGE7XG4gODkzOlx0XHRcdFx0cCAtPSBqICYjNDM7IDE7XG4gODk0Olx0XHRcdFx0aWYgKHB1dF91c2VyKHZhbCwgcCkpXG4gODk1Olx0XHRcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiA4OTY6XHRcdFx0fVxuIDg5NzpcdFx0fVxuIDg5ODpcdFxuIDg5OTpcdFx0c2V0X2JpbmZtdChcdTAwMjZmbGF0X2Zvcm1hdCk7XG4gOTAwOlx0XG4gOTAxOlx0I2lmZGVmIENPTkZJR19NTVVcbiA5MDI6XHRcdHJlcyA9IHNldHVwX2FyZ19wYWdlcyhicHJtLCBTVEFDS19UT1AsIEVYU1RBQ0tfREVGQVVMVCk7XG4gOTAzOlx0XHRpZiAoIXJlcylcbiA5MDQ6XHRcdFx0cmVzID0gY3JlYXRlX2ZsYXRfdGFibGVzKGJwcm0sIGJwcm0tXHUwMDNlcCk7XG4gOTA1Olx0I2Vsc2VcbiA5MDY6XHRcdC8qIFN0YXNoIG91ciBpbml0aWFsIHN0YWNrIHBvaW50ZXIgaW50byB0aGUgbW0gc3RydWN0dXJlICovXG4gOTA3Olx0XHRjdXJyZW50LVx1MDAzZW1tLVx1MDAzZXN0YXJ0X3N0YWNrID1cbiA5MDg6XHRcdFx0KChjdXJyZW50LVx1MDAzZW1tLVx1MDAzZWNvbnRleHQuZW5kX2JyayAmIzQzOyBzdGFja19sZW4gJiM0MzsgMykgXHUwMDI2IH4zKSAtIDQ7XG4gOTA5Olx0XHRwcl9kZWJ1ZyhcJiMzNDtzcD0lbHhcXG5cJiMzNDssIGN1cnJlbnQtXHUwMDNlbW0tXHUwMDNlc3RhcnRfc3RhY2spO1xuIDkxMDpcdFxuIDkxMTpcdFx0LyogY29weSB0aGUgYXJnIHBhZ2VzIG9udG8gdGhlIHN0YWNrICovXG4gOTEyOlx0XHRyZXMgPSB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrKGJwcm0sIFx1MDAyNmN1cnJlbnQtXHUwMDNlbW0tXHUwMDNlc3RhcnRfc3RhY2spO1xuIDkxMzpcdFx0aWYgKCFyZXMpXG4gOTE0Olx0XHRcdHJlcyA9IGNyZWF0ZV9mbGF0X3RhYmxlcyhicHJtLCBjdXJyZW50LVx1MDAzZW1tLVx1MDAzZXN0YXJ0X3N0YWNrKTtcbiA5MTU6XHQjZW5kaWZcbiA5MTY6XHRcdGlmIChyZXMpXG4gOTE3Olx0XHRcdHJldHVybiByZXM7XG4gOTE4Olx0XG4gOTE5Olx0XHQvKiBGYWtlIHNvbWUgcmV0dXJuIGFkZHJlc3NlcyB0byBlbnN1cmUgdGhlIGNhbGwgY2hhaW4gd2lsbFxuIDkyMDpcdFx0ICogaW5pdGlhbGlzZSBsaWJyYXJ5IGluIG9yZGVyIGZvciB1cy4gIFdlIGFyZSByZXF1aXJlZCB0byBjYWxsXG4gOTIxOlx0XHQgKiBsaWIgMSBmaXJzdCwgdGhlbiAyLCAuLi4gYW5kIGZpbmFsbHkgdGhlIG1haW4gcHJvZ3JhbSAoaWQgMCkuXG4gOTIyOlx0XHQgKi9cbiA5MjM6XHRcdHN0YXJ0X2FkZHIgPSBsaWJpbmZvLmxpYl9saXN0WzBdLmVudHJ5O1xuIDkyNDpcdFxuIDkyNTpcdCNpZmRlZiBGTEFUX1BMQVRfSU5JVFxuIDkyNjpcdFx0RkxBVF9QTEFUX0lOSVQocmVncyk7XG4gOTI3Olx0I2VuZGlmXG4gOTI4Olx0XG4gOTI5Olx0XHRmaW5hbGl6ZV9leGVjKGJwcm0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTQwMQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDM4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlJiMzOTtzIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2tgIGlzIG9ubHkgY29tcGlsZWQgd2hlbiBgQ09ORklHX01NVWAgaXMgZGlzYWJsZWQsIGFuZCB0aGF0JiMzOTtzIHRoZSBvbmx5IHBsYWNlIGl0JiMzOTtzIGNhbGxlZC4gSG1tLCBzaW5jZSBzeXprYWxsZXIgZG9lc24mIzM5O3QgdGFyZ2V0IGAhQ09ORklHX01NVWAgc3lzdGVtcywgYW5kIHdlIGNhbiYjMzk7dCBzcGVjaWZ5IGAhQ09ORklHX01NVWAgaW4gYEVuYWJsZUNvbmZpZ3NgIChpdCBoYXMgdG8gYmUgZXhwbGljaXRseSBlbmFibGVkKSwgdGhpcyBjb2RlIGlzIGVzc2VudGlhbGx5IHVucmVhY2hhYmxlIGluIG91ciBmdXp6aW5nIHNldHVwLiBJIHdvbmRlciwgdGhvdWdoLCBhcmUgdGhlcmUgKmFueSogc3l6a2FsbGVyIHRhcmdldHMgb3V0IHRoZXJlIHdoZXJlIGBDT05GSUdfTU1VYCBtaWdodCBiZSBkaXNhYmxlZD8KCk5vdywgdGhlIHByb21wdCBnaXZlcyB1cyBzb21lIGd1aWRhbmNlLiBJdCBzYXlzIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggdGFyZ2V0cyBjb2RlIHRoYXQmIzM5O3MgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZSBlbXVsYXRpb24uIEl0ICppcyogdGVjaG5pY2FsbHkgcG9zc2libGUgdG8gcnVuIGEgbm8tTU1VIGtlcm5lbCBpbiBRRU1VIOKAkyBsaWtlIHdpdGggYHFlbXUtc3lzdGVtLWFybWAgYW5kIGEgbm8tTU1VIG1hY2hpbmUgb3IgYHFlbXUtc3lzdGVtLXJpc2N2NjRgIHdpdGggYSBuby1NTVUgbWFjaGluZS4gQnV0LCBkb2VzIHN5emthbGxlciBoYXZlIGEgc3RhbmRhcmQgc2V0dXAgZm9yIG5vLU1NVSBtYWNoaW5lcz8gSSBkb24mIzM5O3QgdGhpbmsgc28uIFRoZSBwcm9tcHQgYWxzbyByZXF1aXJlcyB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIGNvZGUgaXMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGJ1dCB0aGlzIGNvZGUgKmlzKiByZWFjaGFibGUuCgpUaGUgcHJvbXB0IGFsc28gYXNrcyBmb3IgJiMzNDtrZXJuZWwgY29uZmlnIGZsYWdzIHRoYXQgbXVzdCBiZSBleHBsaWNpdGx5IGVuYWJsZWQgdG8gY29tcGlsZSBhbmQgdGVzdCB0aGUgbW9kaWZpZWQgY29kZS4mIzM0OyBCdXQgaWYgd2UgbmVlZCB0byAqZGlzYWJsZSogYENPTkZJR19NTVVgLCB3ZSBjYW4mIzM5O3QgZG8gaXQgdmlhIGBFbmFibGVDb25maWdzYC4gVGhhdOKAmXMgYSBkZWFkIGVuZC4KCldhaXQsIGlzIHRoZXJlICphbnkqIG90aGVyIHBsYWNlIGB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrYCBnZXRzIGNvbXBpbGVkPyBMZXQgbWUgZG91YmxlLWNoZWNrLiBObywgaXQmIzM5O3Mgb25seSBpbnNpZGUgdGhlIGAjaWZuZGVmIENPTkZJR19NTVVgIGJsb2NrIGluIGBmcy9leGVjLmNgLiBJJiMzOTttIGNlcnRhaW4gdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgcGxhY2VzIHdoZXJlIGl0JiMzOTtzIHVzZWQgZWl0aGVyLgoKTGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrIGFnYWluIGlmIHRoZXJlIGlzIGFueSBvdGhlciBwbGFjZSBpdCBpcyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2JpbmZtdF9lbGZfZmRwaWMuYz00OTY9c3RhdGljIGludCBjcmVhdGVfZWxmX2ZkcGljX3RhYmxlcyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxuLS1cbmZzL2JpbmZtdF9lbGZfZmRwaWMuYy01MjItXHQvKiBzdGFjayB0aGUgcHJvZ3JhbSBhcmd1bWVudHMgYW5kIGVudmlyb25tZW50ICovXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmM6NTIzOlx0aWYgKHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2soYnBybSwgXHUwMDI2c3ApIFx1MDAzYyAwKVxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTUyNC1cdFx0cmV0dXJuIC1FRkFVTFQ7XG4tLVxuZnMvYmluZm10X2ZsYXQuYz04NTU9c3RhdGljIGludCBsb2FkX2ZsYXRfYmluYXJ5KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4tLVxuZnMvYmluZm10X2ZsYXQuYy05MTEtXHQvKiBjb3B5IHRoZSBhcmcgcGFnZXMgb250byB0aGUgc3RhY2sgKi9cbmZzL2JpbmZtdF9mbGF0LmM6OTEyOlx0cmVzID0gdHJhbnNmZXJfYXJnc190b19zdGFjayhicHJtLCBcdTAwMjZjdXJyZW50LVx1MDAzZW1tLVx1MDAzZXN0YXJ0X3N0YWNrKTtcbmZzL2JpbmZtdF9mbGF0LmMtOTEzLVx0aWYgKCFyZXMpXG4tLVxuZnMvZXhlYy5jPTcyNj1FWFBPUlRfU1lNQk9MKHNldHVwX2FyZ19wYWdlcyk7XG4tLVxuZnMvZXhlYy5jLTczMy0gKi9cbmZzL2V4ZWMuYzo3MzQ6aW50IHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2soc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcbmZzL2V4ZWMuYy03MzUtXHRcdFx0ICAgdW5zaWduZWQgbG9uZyAqc3BfbG9jYXRpb24pXG4tLVxuZnMvZXhlYy5jLTc1OS19XG5mcy9leGVjLmM6NzYwOkVYUE9SVF9TWU1CT0wodHJhbnNmZXJfYXJnc190b19zdGFjayk7XG5mcy9leGVjLmMtNzYxLVxuLS1cbmluY2x1ZGUvbGludXgvYmluZm10cy5oPTE0MD1leHRlcm4gaW50IHNldHVwX2FyZ19wYWdlcyhzdHJ1Y3QgbGludXhfYmlucHJtICogYnBybSxcbi0tXG5pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaC0xNDItXHRcdFx0ICAgaW50IGV4ZWN1dGFibGVfc3RhY2spO1xuaW5jbHVkZS9saW51eC9iaW5mbXRzLmg6MTQzOmV4dGVybiBpbnQgdHJhbnNmZXJfYXJnc190b19zdGFjayhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxuaW5jbHVkZS9saW51eC9iaW5mbXRzLmgtMTQ0LVx0XHRcdFx0ICB1bnNpZ25lZCBsb25nICpzcF9sb2NhdGlvbik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDAzOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNzYxCgkJCQkJCQlvdXRwdXQ6IDEyMQoJCQkJCQkJdGhvdWdodHM6IDUyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFzb25pbmcgQWJvdXQgRnV6emluZyBhIE5vbi1NTVUgU3BlY2lmaWMgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgZnVuY3Rpb24gYHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2tgLCBhbmQgaXQgc2VlbXMgdG8gYmUgc29sZWx5IHdpdGhpbiB0aGUgYCNlbHNlYCBibG9jayBvZiBhbiBgI2lmZGVmIENPTkZJR19NTVVgIHByZXByb2Nlc3NvciBkaXJlY3RpdmUuIFRoaXMgbWVhbnMgaXQmIzM5O3Mgb25seSBjb21waWxlZCBhbmQgdXNlZCBpbiBhcmNoaXRlY3R1cmVzIHdoZXJlIGBDT05GSUdfTU1VYCBpcyAqZGlzYWJsZWQqLCByaWdodD8KCkxldCYjMzk7cyBzZWXigKYgbTY4aywgcmlzY3YsIHNoLCB4dGVuc2EsIGFybSBhcmUgYXJjaGl0ZWN0dXJlcyB3aGVyZSBgQ09ORklHX01NVWAgaXMgZWFzaWx5IGRpc2FibGVkLiBTeXprYWxsZXIsIGhvd2V2ZXIsIHByaW1hcmlseSB0YXJnZXRzIHg4Nl82NCwgYXJtNjQsIHJpc2N2NjQsIGFuZCBzMzkweC4gT24gcmlzY3Y2NCwgYENPTkZJR19NTVVgICpjYW4qIGJlIGRpc2FibGVkLCBidXTigKYKCklmIEkgcmV0dXJuIGBXb3J0aEZ1enppbmc9dHJ1ZWAsIEkgaGF2ZSB0byBzcGVjaWZ5IGBFbmFibGVDb25maWdzYC4gSSBjYW4mIzM5O3QgZGlyZWN0bHkgc3BlY2lmeSBgIU1NVWAgdGhlcmUsIHdoaWNoIGlzIGEgcHJvYmxlbS4gSWYgSSByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAsIEkgY2FuIGV4cGxhaW4gdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGZvciBub21tdSBhcmNoaXRlY3R1cmVzIG9ubHksIHdoaWNoIGFyZSBub3QgdHlwaWNhbCBzeXprYWxsZXIgdGFyZ2V0cyB0aGF0IHJlcXVpcmUgZGlzYWJsaW5nIGBDT05GSUdfTU1VYC4KCkhhbmcgb24sIHdoYXQgaWYgSSBqdXN0IHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYCBhbmQgdXNlIHRoZSByZWFzb25pbmcgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgY29tcGlsZWQgZm9yIGAhQ09ORklHX01NVWAga2VybmVscywgd2hpY2ggU3l6a2FsbGVyIHR5cGljYWxseSBkb2VzbiYjMzk7dCBmdXp6IGR1ZSB0byB0aGUgbmVlZCB0byBkaXNhYmxlIGBDT05GSUdfTU1VYCwgc29tZXRoaW5nIEkgY2FuJiMzOTt0IHNwZWNpZnkuCgpBbHRlcm5hdGl2ZWx5LCBjb3VsZCBJIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgIHdpdGggYW4gZW1wdHkgYEVuYWJsZUNvbmZpZ3NgIGFuZCBhZGQgYHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2tgIHRvIGBGb2N1c1N5bWJvbHNgPyBJZiBJIGRpZCB0aGF0LCB0aGUgZnV6emluZyBpbmZyYXN0cnVjdHVyZSAqd291bGQqIHRyeSB0byBmdXp6IGl0LiBCdXQsIGFuZCB0aGlzIGlzIGNydWNpYWwsIGl0ICp3b24mIzM5O3QqIGJlIGNvbXBpbGVkIGluIHRoZSBkZWZhdWx0IGtlcm5lbCB0aGF0IGhhcyBgQ09ORklHX01NVT15YC4gU28gdGhlIGNvZGUgd291bGQgbmV2ZXIgYmUgcmVhY2hlZCwgYW5kIHRoZSBjb3ZlcmFnZSB3b3VsZCBiZSB6ZXJvIGFueXdheS4KClRoZXJlZm9yZSwgdGhlIGJlc3Qgb3B0aW9uIGlzIGNsZWFybHkgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBMZXQgbWUgY29uZmlybSB0aGlzIGlzIGNvcnJlY3TigKYKCk9rYXksIGxldCBtZSBjaGVjayB0aGUgY29kZSBkaXJlY3RseS4gSW4gYGZzL2V4ZWMuY2AsIEkgc2VlOgoKYGBgYwojaWZkZWYgQ09ORklHX01NVQouLi4KaW50IHNldHVwX2FyZ19wYWdlcyguLi4pCi4uLgojZWxzZQouLi4KaW50IHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2soLi4uKQouLi4KI2VuZGlmCmBgYAoKWXVwLiBUaGF0JiMzOTtzICpleGFjdGx5KiBhcyBJIHN1c3BlY3RlZC4gYHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2tgIGlzICpzdHJpY3RseSogd2l0aGluIHRoZSBgI2Vsc2VgIGJsb2NrLiBJdCYjMzk7cyBpbXBvc3NpYmxlIHRvIGNvbXBpbGUgdGhpcyBmdW5jdGlvbiB3aXRoIGBDT05GSUdfTU1VYCBlbmFibGVkLiBBbmQsIHNpbmNlIHN0YW5kYXJkIGtlcm5lbHMgKGVzcGVjaWFsbHkgdGhvc2UgdXNlZCBieSBTeXprYWxsZXIpIGhhdmUgYENPTkZJR19NTVU9eWAsIHRoaXMgY29kZSBpcyBjb21wbGV0ZWx5IGNvbXBpbGVkIG91dC4gVGh1cywgSSB3aWxsIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCwgYW5kIHdpbGwgZXhwbGFpbiB0aGlzIGluIHRoZSBgUmVhc29uaW5nYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDM6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBtb2RpZmllZCBmdW5jdGlvbiBgdHJhbnNmZXJfYXJnc190b19zdGFja2AgaXMgb25seSBjb21waWxlZCBhbmQgdXNlZCBvbiBub21tdSBhcmNoaXRlY3R1cmVzIChpdCBpcyBsb2NhdGVkIGluc2lkZSBhbiBgI2lmbmRlZiBDT05GSUdfTU1VYCBibG9jayBpbiBgZnMvZXhlYy5jYCkuIFN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzIGFuZCB2aXJ0dWFsaXplZCBzZXR1cHMgKGxpa2UgeDg2XzY0L2FybTY0IFFFTVUgb3IgR0NFKSBydW4gd2l0aCBgQ09ORklHX01NVT15YCwgbWVhbmluZyB0aGlzIGNvZGUgaXMgY29tcGxldGVseSBjb21waWxlZCBvdXQgYW5kIHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgbW9kaWZpZWQgZnVuY3Rpb24gYHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2tgIGlzIG9ubHkgY29tcGlsZWQgYW5kIHVzZWQgb24gbm9tbXUgYXJjaGl0ZWN0dXJlcyAoaXQgaXMgbG9jYXRlZCBpbnNpZGUgYW4gYCNpZm5kZWYgQ09ORklHX01NVWAgYmxvY2sgaW4gYGZzL2V4ZWMuY2ApLiBTdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cyBhbmQgdmlydHVhbGl6ZWQgc2V0dXBzIChsaWtlIHg4Nl82NC9hcm02NCBRRU1VIG9yIEdDRSkgcnVuIHdpdGggYENPTkZJR19NTVU9eWAsIG1lYW5pbmcgdGhpcyBjb2RlIGlzIGNvbXBsZXRlbHkgY29tcGlsZWQgb3V0IGFuZCB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMzo1Mzo1OS4wMjExMjU1NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4MjQ3MzE2MDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBtb2RpZmllZCBmdW5jdGlvbiBgdHJhbnNmZXJfYXJnc190b19zdGFja2AgaXMgb25seSBjb21waWxlZCBhbmQgdXNlZCBvbiBub21tdSBhcmNoaXRlY3R1cmVzIChpdCBpcyBsb2NhdGVkIGluc2lkZSBhbiBgI2lmbmRlZiBDT05GSUdfTU1VYCBibG9jayBpbiBgZnMvZXhlYy5jYCkuIFN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzIGFuZCB2aXJ0dWFsaXplZCBzZXR1cHMgKGxpa2UgeDg2XzY0L2FybTY0IFFFTVUgb3IgR0NFKSBydW4gd2l0aCBgQ09ORklHX01NVT15YCwgbWVhbmluZyB0aGlzIGNvZGUgaXMgY29tcGxldGVseSBjb21waWxlZCBvdXQgYW5kIHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDM6NTM6NTkuMDIxMTMxNDlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3NDA3Mjg5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDY0MTI1ODJjNzYzNWE0YzFhZmIyMzc4YzJiNWI2MjQ1ZmEwMDNhNzFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMjIgMDM6NTM6NTcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jXFxuaW5kZXggZDU5OTNjZWRjODI5YWYuLmM3YjhmMmQ2MzY2YzQ0IDEwMDY0NFxcbi0tLSBhL2ZzL2V4ZWMuY1xcbisrKyBiL2ZzL2V4ZWMuY1xcbkBAIC03NDAsNyArNzQwLDcgQEAgaW50IHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2soc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcXG4gXFx0c3RvcCA9IGJwcm0tXFx1MDAzZXAgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gXFx0c3AgPSAqc3BfbG9jYXRpb247XFxuIFxcbi1cXHRmb3IgKGluZGV4ID0gTUFYX0FSR19QQUdFUyAtIDE7IGluZGV4IFxcdTAwM2U9IHN0b3A7IGluZGV4LS0pIHtcXG4rXFx0Zm9yIChpbmRleCA9IE1BWF9BUkdfUEFHRVM7IGluZGV4LS0gXFx1MDAzZSBzdG9wOyApIHtcXG4gXFx0XFx0dW5zaWduZWQgaW50IG9mZnNldCA9IGluZGV4ID09IHN0b3AgPyBicHJtLVxcdTAwM2VwIFxcdTAwMjYgflBBR0VfTUFTSyA6IDA7XFxuIFxcdFxcdGNoYXIgKnNyYyA9IGttYXBfbG9jYWxfcGFnZShicHJtLVxcdTAwM2VwYWdlW2luZGV4XSkgKyBvZmZzZXQ7XFxuIFxcdFxcdHNwIC09IFBBR0VfU0laRSAtIG9mZnNldDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDM6NTM6NTkuMzk1ODQzNzIzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTc4NzI1OTE4NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrYCBpcyBvbmx5IGNvbXBpbGVkIGFuZCB1c2VkIG9uIG5vbW11IGFyY2hpdGVjdHVyZXMgKGl0IGlzIGxvY2F0ZWQgaW5zaWRlIGFuIGAjaWZuZGVmIENPTkZJR19NTVVgIGJsb2NrIGluIGBmcy9leGVjLmNgKS4gU3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMgYW5kIHZpcnR1YWxpemVkIHNldHVwcyAobGlrZSB4ODZfNjQvYXJtNjQgUUVNVSBvciBHQ0UpIHJ1biB3aXRoIGBDT05GSUdfTU1VPXlgLCBtZWFuaW5nIHRoaXMgY29kZSBpcyBjb21wbGV0ZWx5IGNvbXBpbGVkIG91dCBhbmQgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDY0MTI1ODJjNzYzNWE0YzFhZmIyMzc4YzJiNWI2MjQ1ZmEwMDNhNzFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAyMiAwMzo1Mzo1NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuY1xuaW5kZXggZDU5OTNjZWRjODI5YWYuLmM3YjhmMmQ2MzY2YzQ0IDEwMDY0NFxuLS0tIGEvZnMvZXhlYy5jXG4rKysgYi9mcy9leGVjLmNcbkBAIC03NDAsNyArNzQwLDcgQEAgaW50IHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2soc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcbiBcdHN0b3AgPSBicHJtLVx1MDAzZXAgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gXHRzcCA9ICpzcF9sb2NhdGlvbjtcbiBcbi1cdGZvciAoaW5kZXggPSBNQVhfQVJHX1BBR0VTIC0gMTsgaW5kZXggXHUwMDNlPSBzdG9wOyBpbmRleC0tKSB7XG4rXHRmb3IgKGluZGV4ID0gTUFYX0FSR19QQUdFUzsgaW5kZXgtLSBcdTAwM2Ugc3RvcDsgKSB7XG4gXHRcdHVuc2lnbmVkIGludCBvZmZzZXQgPSBpbmRleCA9PSBzdG9wID8gYnBybS1cdTAwM2VwIFx1MDAyNiB+UEFHRV9NQVNLIDogMDtcbiBcdFx0Y2hhciAqc3JjID0ga21hcF9sb2NhbF9wYWdlKGJwcm0tXHUwMDNlcGFnZVtpbmRleF0pICsgb2Zmc2V0O1xuIFx0XHRzcCAtPSBQQUdFX1NJWkUgLSBvZmZzZXQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMzo1Mzo1OS4zOTU4NDQ5MjNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTQwNzYxNjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGZzL2V4ZWMuY2AgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIHRvdWNoaW5nIGBmcy9leGVjLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrYCBmdW5jdGlvbi4gVGhlIGtleSBjaGFuZ2UgaGVyZSBpcyBpbiB0aGUgbG9vcCB0aGF0IGhhbmRsZXMgYXJndW1lbnQgdHJhbnNmZXIuIFByZXZpb3VzbHksIGl0IGxvb2tzIGxpa2UgdGhlIGxvb3AgY29uZGl0aW9uIHdhcyBkZWNyZW1lbnRpbmcgYGluZGV4YCAqYWZ0ZXIqIHRoZSBjb21wYXJpc29uLCBzdGFydGluZyBmcm9tIGBNQVhfQVJHX1BBR0VTIC0gMWAgYW5kIGdvaW5nIGRvd24gdG8gYHN0b3BgLiBUaGUgcGF0Y2ggdXBkYXRlcyB0aGlzIHRvIGEgcHJlLWRlY3JlbWVudCBpbiB0aGUgY29tcGFyaXNvbiBgZm9yIChpbmRleCA9IE1BWF9BUkdfUEFHRVM7IGluZGV4LS0gXHUwMDNlIHN0b3A7IClgLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGNoYW5nZSB3YXMgbWFkZS4gRmlyc3QsIEknbGwgcHVsbCB1cCBgZnMvZXhlYy5jYCBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBjb250ZXh0IG9mIGB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrYC4gTGV0J3Mgc2VlIGhvdyB0aGlzIGNoYW5nZSBpbXBhY3RzIGFyZ3VtZW50IGhhbmRsaW5nLCB0aGUgcG90ZW50aWFsIGVkZ2UgY2FzZXMsIGFuZCBhbnkgaW1wbGljYXRpb25zIG9uIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMgZHVyaW5nIHByb2Nlc3MgY3JlYXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2Vzbid0IGludHJvZHVjZSBhbnkgc3VidGxlIG9mZi1ieS1vbmUgZXJyb3JzIG9yIHVuaW50ZW5kZWQgc2lkZSBlZmZlY3RzLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBjcml0aWNhbCBuYXR1cmUgb2YgYXJndW1lbnQgcGFzc2luZyBpbiBwcm9jZXNzIGV4ZWN1dGlvbi4gVGhpcyBsb29rcyBsaWtlIGEgcG90ZW50aWFsbHkgaW1wb3J0YW50IGNoYW5nZSBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdCBmdWxseSBiZWZvcmUgZXZlbiB0aGlua2luZyBhYm91dCBjb21taXR0aW5nIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTI0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMzo1NDowMi45MzY2MDg1NzFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY3Njk0NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHJhbnNmZXJfYXJnc190b19zdGFja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leGVjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXhlYy5jPTcyNj1FWFBPUlRfU1lNQk9MKHNldHVwX2FyZ19wYWdlcyk7XFxuLS1cXG5mcy9leGVjLmMtNzMzLSAqL1xcbmZzL2V4ZWMuYzo3MzQ6aW50IHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2soc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcXG5mcy9leGVjLmMtNzM1LVxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgKnNwX2xvY2F0aW9uKVxcbi0tXFxuZnMvZXhlYy5jLTc1OS19XFxuZnMvZXhlYy5jOjc2MDpFWFBPUlRfU1lNQk9MKHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2spO1xcbmZzL2V4ZWMuYy03NjEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDAzOjU0OjAyLjk5MzM4NDAwM1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NTkyNTg4NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkFoLCB0aGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgaGVhdnkgbGlmdGluZyBvZiBwYXJhbWV0ZXIgcGFzc2luZyBoYXBwZW5zLlwiIEl0J3MgdGhlIHBvaW50IHdoZXJlIGFyZ3VtZW50cyBnZXQgbW92ZWQgZnJvbSB0aGVpciBjYWxsaW5nIGNvbnZlbnRpb24gbG9jYXRpb24g4oCTIHJlZ2lzdGVycywgcGVyaGFwcywgb3IgbWVtb3J5IGxvY2F0aW9ucyBvbiB0aGUgY2FsbGVyJ3Mgc3RhY2sg4oCTIHRvIHRoZSBjYWxsZWUncyBzdGFjayBmcmFtZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXJ0ICpwZXJmZWN0bHkqLCBhcyBpdCdzIGZ1bmRhbWVudGFsIHRvIGhvdyB0aGUgZW50aXJlIHN5c3RlbSBjb21tdW5pY2F0ZXMgYmV0d2VlbiBmdW5jdGlvbnMuXG5cbkknbSBpbW1lZGlhdGVseSBsb29raW5nIGZvciB0aGUgdW5kZXJseWluZyBhcmNoaXRlY3R1cmUuIElzIHRoaXMgeDg2LCBBUk0sIFJJU0MtViwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSByZWdpc3RlciB1c2FnZSBhbmQgbWVtb3J5IGFkZHJlc3Npbmcgd2lsbCBiZSBkcmFzdGljYWxseSBkaWZmZXJlbnQgZGVwZW5kaW5nIG9uIHRoZSB0YXJnZXQuIEknbSBhbHNvIGNvbnNpZGVyaW5nIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24uIElzIGl0IHRoZSBzdGFuZGFyZCBDIGNhbGxpbmcgY29udmVudGlvbiAoY2RlY2wsIHN0ZGNhbGwsIGZhc3RjYWxsKSwgb3Igc29tZXRoaW5nIG1vcmUgc3BlY2lhbGl6ZWQgbGlrZSBTeXN0ZW0gViBBTUQ2NCBvciB0aGUgV2luZG93cyB4NjQgY2FsbGluZyBjb252ZW50aW9uPyBUaG9zZSBkZXRhaWxzIHNoYXBlIGV2ZXJ5dGhpbmcuXG5cbkknbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgZXJyb3IgaGFuZGxpbmcuIFdoYXQgaGFwcGVucyBpZiB0aGVyZSBhcmVuJ3QgZW5vdWdoIHJlZ2lzdGVycyBhdmFpbGFibGUgZm9yIGFsbCB0aGUgYXJndW1lbnRzPyBPciBpZiBhIHBhcnRpY3VsYXIgYXJndW1lbnQgZXhjZWVkcyB0aGUgc2l6ZSBvZiBhIHJlZ2lzdGVyPyBJcyB0aGVyZSBhIGZhbGxiYWNrIG1lY2hhbmlzbSwgbGlrZSBwdXNoaW5nIHRoZSBleGNlc3Mgb250byB0aGUgc3RhY2s/IElmIHRoZXJlJ3MgYW4gaXNzdWUgd2l0aCB0aGUgcGFyYW1ldGVycyB0aGVtc2VsdmVzLCBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIG1pZ2h0IGJlaGF2ZSBvciBldmVuIHRyaWdnZXIgZXJyb3JzLlxuXG5GdXJ0aGVybW9yZSwgSSdsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzLiBDYW4gdGhlIGFyZ3VtZW50cyBiZSBtb3ZlZCBtb3JlIGVmZmljaWVudGx5PyBBcmUgdGhlcmUgYW55IHJlZHVuZGFudCBtb3ZlcyB0aGF0IGNhbiBiZSBlbGltaW5hdGVkPyBQZXJoYXBzIHRoZXJlJ3MgYW4gb3Bwb3J0dW5pdHkgdG8gdXNlIGEgcmVnaXN0ZXIgc3BpbGwvcmVzdG9yZSBzdHJhdGVneS4gT3IgcG9zc2libHksIHJlZ2lzdGVyIGFsbG9jYXRpb24gbmVlZHMgdG8gYmUgc2NydXRpbml6ZWQgaGVyZSBhbmQgaG93IGl0IHBsYXlzIHdpdGggdGhpcyBmdW5jdGlvbi5cblxuVWx0aW1hdGVseSwgSSB3YW50IHRvIGdyYXNwIHRoZSBlc3NlbmNlIG9mIGFyZ3VtZW50IHRyYW5zZmVyLiBEb2VzIGl0IGltcGFjdCBwZXJmb3JtYW5jZSwgYW5kIHdoZXJlIGFuZCB3aHk/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NTksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMzo1NDowNi42NTI2NDQ5MjJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTM1NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXhlYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDczMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDczMDpcXHQvKlxcbiA3MzE6XFx0ICogVHJhbnNmZXIgdGhlIHByb2dyYW0gYXJndW1lbnRzIGFuZCBlbnZpcm9ubWVudCBmcm9tIHRoZSBob2xkaW5nIHBhZ2VzXFxuIDczMjpcXHQgKiBvbnRvIHRoZSBzdGFjay4gVGhlIHByb3ZpZGVkIHN0YWNrIHBvaW50ZXIgaXMgYWRqdXN0ZWQgYWNjb3JkaW5nbHkuXFxuIDczMzpcXHQgKi9cXG4gNzM0OlxcdGludCB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXFxuIDczNTpcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nICpzcF9sb2NhdGlvbilcXG4gNzM2OlxcdHtcXG4gNzM3OlxcdFxcdHVuc2lnbmVkIGxvbmcgaW5kZXgsIHN0b3AsIHNwO1xcbiA3Mzg6XFx0XFx0aW50IHJldCA9IDA7XFxuIDczOTpcXHRcXG4gNzQwOlxcdFxcdHN0b3AgPSBicHJtLVxcdTAwM2VwIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuIDc0MTpcXHRcXHRzcCA9ICpzcF9sb2NhdGlvbjtcXG4gNzQyOlxcdFxcbiA3NDM6XFx0XFx0Zm9yIChpbmRleCA9IE1BWF9BUkdfUEFHRVM7IGluZGV4LS0gXFx1MDAzZSBzdG9wOyApIHtcXG4gNzQ0OlxcdFxcdFxcdHVuc2lnbmVkIGludCBvZmZzZXQgPSBpbmRleCA9PSBzdG9wID8gYnBybS1cXHUwMDNlcCBcXHUwMDI2IH5QQUdFX01BU0sgOiAwO1xcbiA3NDU6XFx0XFx0XFx0Y2hhciAqc3JjID0ga21hcF9sb2NhbF9wYWdlKGJwcm0tXFx1MDAzZXBhZ2VbaW5kZXhdKSArIG9mZnNldDtcXG4gNzQ2OlxcdFxcdFxcdHNwIC09IFBBR0VfU0laRSAtIG9mZnNldDtcXG4gNzQ3OlxcdFxcdFxcdGlmIChjb3B5X3RvX3VzZXIoKHZvaWQgKikgc3AsIHNyYywgUEFHRV9TSVpFIC0gb2Zmc2V0KSAhPSAwKVxcbiA3NDg6XFx0XFx0XFx0XFx0cmV0ID0gLUVGQVVMVDtcXG4gNzQ5OlxcdFxcdFxcdGt1bm1hcF9sb2NhbChzcmMpO1xcbiA3NTA6XFx0XFx0XFx0aWYgKHJldClcXG4gNzUxOlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiA3NTI6XFx0XFx0fVxcbiA3NTM6XFx0XFxuIDc1NDpcXHRcXHRicHJtLVxcdTAwM2VleGVjICs9ICpzcF9sb2NhdGlvbiAtIE1BWF9BUkdfUEFHRVMgKiBQQUdFX1NJWkU7XFxuIDc1NTpcXHRcXHQqc3BfbG9jYXRpb24gPSBzcDtcXG4gNzU2OlxcdFxcbiA3NTc6XFx0b3V0OlxcbiA3NTg6XFx0XFx0cmV0dXJuIHJldDtcXG4gNzU5OlxcdH1cXG4gNzYwOlxcdEVYUE9SVF9TWU1CT0wodHJhbnNmZXJfYXJnc190b19zdGFjayk7XFxuIDc2MTpcXHRcXG4gNzYyOlxcdCNlbmRpZiAvKiBDT05GSUdfTU1VICovXFxuIDc2MzpcXHRcXG4gNzY0OlxcdC8qXFxuIDc2NTpcXHQgKiBPbiBzdWNjZXNzLCBjYWxsZXIgbXVzdCBjYWxsIGRvX2Nsb3NlX2V4ZWNhdCgpIG9uIHRoZSByZXR1cm5lZFxcbiA3NjY6XFx0ICogc3RydWN0IGZpbGUgdG8gY2xvc2UgaXQuXFxuIDc2NzpcXHQgKi9cXG4gNzY4OlxcdHN0YXRpYyBzdHJ1Y3QgZmlsZSAqZG9fb3Blbl9leGVjYXQoaW50IGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUsIGludCBmbGFncylcXG4gNzY5OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDM6NTQ6MDYuNjUyNzYwNDUyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQzMTc2NjUwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgSW50ZWdlciBPdmVyZmxvdyBpbiBgdHJhbnNmZXJfYXJnc190b19zdGFja2AqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIHByZXR0eSBuYXN0eSBwb3RlbnRpYWwgYnVnIGluIHRoZSBgdHJhbnNmZXJfYXJnc190b19zdGFja2AgbG9vcC4gSXQgbG9va3MgbGlrZSB3ZSd2ZSBnb3QgYW4gdW5kZXJmbG93IG9yIG9mZi1ieS1vbmUgc2l0dWF0aW9uLCB3aGljaCBjb3VsZCBiZSBleHBsb2l0ZWQuIExldCdzIHNlZS4uLiB0aGUgYGluZGV4YCB2YXJpYWJsZSBpcyBhbiBgdW5zaWduZWQgbG9uZ2AsIHJpZ2h0PyBUaGF0J3Mgb3VyIGZpcnN0IGNsdWUuIElmIGBzdG9wYCBpcyB6ZXJvLCB0aGVuIGBpbmRleCBcdTAwM2U9IHN0b3BgIHdpbGwgKmFsd2F5cyogYmUgdHJ1ZSBpZiBgaW5kZXhgIGhhcHBlbnMgdG8gd3JhcCBhcm91bmQuXG5cbkFoLCBJIHNlZSBpdCBub3cuIFRoZSBvcmlnaW5hbCBjb2RlIGhhcyBzb21ldGhpbmcgbGlrZSBgaW5kZXggPSBNQVhfQVJHX1BBR0VTIC0gMTsgaW5kZXggXHUwMDNlPSBzdG9wOyBpbmRleC0tYC4gSWYgYHN0b3BgIGlzIHplcm8sIHRoZSBsb29wIHdpbGwgY291bnQgZG93biB0byB6ZXJvLCB0aGVuIHRoZSBwb3N0LWRlY3JlbWVudCB3aWxsIG1ha2UgaXQgd3JhcCB0byBgVUxPTkdfTUFYYC4gQW5kLCBvZiBjb3Vyc2UsIGBVTE9OR19NQVggXHUwMDNlPSAwYCBpcyAqYWx3YXlzKiB0cnVlISAgVGhhdCdzIGEgdGV4dGJvb2sgaW5maW5pdGUgbG9vcCBvciwgd29yc2UsIGFuIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2VzcyBqdXN0IHdhaXRpbmcgdG8gaGFwcGVuLlxuXG5UaGUgZml4LCB1c2luZyBgZm9yIChpbmRleCA9IE1BWF9BUkdfUEFHRVM7IGluZGV4LS0gXHUwMDNlIHN0b3A7IClgLCBzZWVtcyBjbGV2ZXIuIEl0IGNsZXZlcmx5IGZsaXBzIHRoZSBjb21wYXJpc29uIGFyb3VuZC4gV2hlbiBgaW5kZXhgIGlzIDAsIGBpbmRleC0tIFx1MDAzZSBzdG9wYCBiZWNvbWVzIGAwIFx1MDAzZSAwYCwgd2hpY2ggaXMgZmFsc2UsIHRlcm1pbmF0aW5nIHRoZSBsb29wLiAgRXZlbiB3aGVuIGl0IHdyYXBzIHRoZSBjb25kaXRpb24gdGVybWluYXRlcyB0aGUgbG9vcC4gV2FpdC4uLiBpdCdzIGBpbmRleC0tIFx1MDAzZSBzdG9wYC4gVGhlIHBvc3QtZGVjcmVtZW50IGlzIGNydWNpYWwuIExldCdzIHRoaW5rIHRoaXMgdGhyb3VnaDogSWYgYGluZGV4YCBpcyAxLCB0aGVuIGAxIFx1MDAzZSAwYCBpcyB0cnVlIGFuZCBpbmRleCBiZWNvbWVzIHplcm8uIGlmIGBpbmRleGAgaXMgMCwgdGhlbiBgMCBcdTAwM2UgMGAgaXMgZmFsc2UsIGFuZCBgaW5kZXhgIGJlY29tZXMgYFVMT05HX01BWGAsIHRlcm1pbmF0aW5nIHRoZSBsb29wLiBJJ20gc2F0aXNmaWVkLiBUaGlzIHJlc29sdmVzIHRoZSBpc3N1ZSBieSBjbGV2ZXJseSBpbnZlcnRpbmcgdGhlIGxvb3AgY29uZGl0aW9uLCBwcmV2ZW50aW5nIHRoZSB3cmFwYXJvdW5kIGFuZCBlbnN1cmluZyB0ZXJtaW5hdGlvbi5cblxuVGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4IGZvciBhIGJ1ZyBpbiBgZnMvZXhlYy5jYC4gU2VlbXMgc29saWQuIEJ1dCwgYmVmb3JlIEkgbWFyayB0aGlzIGFzIGNvbXBsZXRlbHkgcmVzb2x2ZWQsIGxldCdzIG1ha2Ugc3VyZSBgdHJhbnNmZXJfYXJnc190b19zdGFja2AgaXMgZXZlbiAqcmVhY2hhYmxlKi4gV2UgZG9uJ3Qgd2FudCB0byBmaXggY29kZSB0aGF0J3MgbmV2ZXIgdXNlZCwgYWx0aG91Z2ggaXQncyBhbHdheXMgYSBnb29kIHRoaW5nIHRvIGZpeCBpdCBpZiBpdCdzIHRoZXJlLiBTbywgd2hlcmUgaXMgaXQgY2FsbGVkPyBBIHF1aWNrIGNoZWNrIG9mIGBmcy9leGVjLmNgIGFuZCBvdGhlciBwb3RlbnRpYWwgYmluYXJ5IGZvcm1hdHMgc2hvdWxkIGRvIHRoZSB0cmljay5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ2NCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDAzOjU0OjEzLjA4NDUzMDUwNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzUzMjc4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9iaW5mbXRfZWxmX2ZkcGljLmM9NDk2PXN0YXRpYyBpbnQgY3JlYXRlX2VsZl9mZHBpY190YWJsZXMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcXG4tLVxcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYy01MjItXFx0Lyogc3RhY2sgdGhlIHByb2dyYW0gYXJndW1lbnRzIGFuZCBlbnZpcm9ubWVudCAqL1xcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYzo1MjM6XFx0aWYgKHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2soYnBybSwgXFx1MDAyNnNwKSBcXHUwMDNjIDApXFxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTUyNC1cXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4tLVxcbmZzL2JpbmZtdF9mbGF0LmM9ODU1PXN0YXRpYyBpbnQgbG9hZF9mbGF0X2JpbmFyeShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbi0tXFxuZnMvYmluZm10X2ZsYXQuYy05MTEtXFx0LyogY29weSB0aGUgYXJnIHBhZ2VzIG9udG8gdGhlIHN0YWNrICovXFxuZnMvYmluZm10X2ZsYXQuYzo5MTI6XFx0cmVzID0gdHJhbnNmZXJfYXJnc190b19zdGFjayhicHJtLCBcXHUwMDI2Y3VycmVudC1cXHUwMDNlbW0tXFx1MDAzZXN0YXJ0X3N0YWNrKTtcXG5mcy9iaW5mbXRfZmxhdC5jLTkxMy1cXHRpZiAoIXJlcylcXG4tLVxcbmZzL2V4ZWMuYz03MjY9RVhQT1JUX1NZTUJPTChzZXR1cF9hcmdfcGFnZXMpO1xcbi0tXFxuZnMvZXhlYy5jLTczMy0gKi9cXG5mcy9leGVjLmM6NzM0OmludCB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXFxuZnMvZXhlYy5jLTczNS1cXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nICpzcF9sb2NhdGlvbilcXG4tLVxcbmZzL2V4ZWMuYy03NTktfVxcbmZzL2V4ZWMuYzo3NjA6RVhQT1JUX1NZTUJPTCh0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrKTtcXG5mcy9leGVjLmMtNzYxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMzo1NDoxMy4xNzIwNzIwM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNTI1MTAxNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBDb2RlJ3MgSW50ZXJhY3Rpb24gd2l0aCBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBleGVjdXRhYmxlIGxvYWRpbmcsIGFuZCBJJ3ZlIGhpdCBhIHNwZWNpZmljIGZ1bmN0aW9uLCBgdHJhbnNmZXJfYXJnc190b19zdGFja2AuIEknbSBzZWVpbmcgaXQncyB1dGlsaXplZCBpbiBhIGNvdXBsZSBvZiBwbGFjZXMsIG5hbWVseSBpbiBgZnMvYmluZm10X2VsZl9mZHBpYy5jYCBhbmQgYGZzL2JpbmZtdF9mbGF0LmNgLiBCdXQgbm93LCBJJ20gbm90aWNpbmcgc29tZXRoaW5nIHBvdGVudGlhbGx5IHNpZ25pZmljYW50IGluIGBmcy9leGVjLmNgOiB0aGVyZSdzIGEgYCNlbmRpZiAvKiBDT05GSUdfTU1VICovYCBpbW1lZGlhdGVseSBhZnRlciBgdHJhbnNmZXJfYXJnc190b19zdGFja2AuIFRoaXMgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgbXkgdGhvdWdodCBwcm9jZXNzIHRvIGZ1cnRoZXIgaW52ZXN0aWdhdGUuIEl0IHN1Z2dlc3RzIHRoYXQgdGhlcmUncyBjb25kaXRpb25hbCBjb21waWxhdGlvbiBoYXBwZW5pbmcgaGVyZSwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrYCBpcyBhY3R1YWxseSAqaW5zaWRlKiBhIGAjaWZuZGVmIENPTkZJR19NTVVgIGJsb2NrLiBUaGlzIGNvdWxkIGJlIGNydWNpYWwgdG8gaG93IHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgY2FsbGVkLCBhcyBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBNTVUgaXMgYSBmYWN0b3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MjksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMzo1NDoxNi4yMjQ1ODQ3NDNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4ZWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MDA6XFx0XFx0dm1fZmxhZ3NfY2xlYXIodm1hLCBWTV9TVEFDS19JTkNPTVBMRVRFX1NFVFVQKTtcXG4gNzAxOlxcdFxcbiA3MDI6XFx0XFx0c3RhY2tfZXhwYW5kID0gMTMxMDcyVUw7IC8qIHJhbmRvbWx5IDMyKjRrIChvciAyKjY0aykgcGFnZXMgKi9cXG4gNzAzOlxcdFxcdHN0YWNrX3NpemUgPSB2bWEtXFx1MDAzZXZtX2VuZCAtIHZtYS1cXHUwMDNldm1fc3RhcnQ7XFxuIDcwNDpcXHRcXHQvKlxcbiA3MDU6XFx0XFx0ICogQWxpZ24gdGhpcyBkb3duIHRvIGEgcGFnZSBib3VuZGFyeSBhcyBleHBhbmRfc3RhY2tcXG4gNzA2OlxcdFxcdCAqIHdpbGwgYWxpZ24gaXQgdXAuXFxuIDcwNzpcXHRcXHQgKi9cXG4gNzA4OlxcdFxcdHJsaW1fc3RhY2sgPSBicHJtLVxcdTAwM2VybGltX3N0YWNrLnJsaW1fY3VyIFxcdTAwMjYgUEFHRV9NQVNLO1xcbiA3MDk6XFx0XFxuIDcxMDpcXHRcXHRzdGFja19leHBhbmQgPSBtaW4ocmxpbV9zdGFjaywgc3RhY2tfc2l6ZSArIHN0YWNrX2V4cGFuZCk7XFxuIDcxMTpcXHRcXG4gNzEyOlxcdCNpZmRlZiBDT05GSUdfU1RBQ0tfR1JPV1NVUFxcbiA3MTM6XFx0XFx0c3RhY2tfYmFzZSA9IHZtYS1cXHUwMDNldm1fc3RhcnQgKyBzdGFja19leHBhbmQ7XFxuIDcxNDpcXHQjZWxzZVxcbiA3MTU6XFx0XFx0c3RhY2tfYmFzZSA9IHZtYS1cXHUwMDNldm1fZW5kIC0gc3RhY2tfZXhwYW5kO1xcbiA3MTY6XFx0I2VuZGlmXFxuIDcxNzpcXHRcXHRjdXJyZW50LVxcdTAwM2VtbS1cXHUwMDNlc3RhcnRfc3RhY2sgPSBicHJtLVxcdTAwM2VwO1xcbiA3MTg6XFx0XFx0cmV0ID0gZXhwYW5kX3N0YWNrX2xvY2tlZCh2bWEsIHN0YWNrX2Jhc2UpO1xcbiA3MTk6XFx0XFx0aWYgKHJldClcXG4gNzIwOlxcdFxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuIDcyMTpcXHRcXG4gNzIyOlxcdG91dF91bmxvY2s6XFxuIDcyMzpcXHRcXHRtbWFwX3dyaXRlX3VubG9jayhtbSk7XFxuIDcyNDpcXHRcXHRyZXR1cm4gcmV0O1xcbiA3MjU6XFx0fVxcbiA3MjY6XFx0RVhQT1JUX1NZTUJPTChzZXR1cF9hcmdfcGFnZXMpO1xcbiA3Mjc6XFx0XFxuIDcyODpcXHQjZWxzZVxcbiA3Mjk6XFx0XFxuIDczMDpcXHQvKlxcbiA3MzE6XFx0ICogVHJhbnNmZXIgdGhlIHByb2dyYW0gYXJndW1lbnRzIGFuZCBlbnZpcm9ubWVudCBmcm9tIHRoZSBob2xkaW5nIHBhZ2VzXFxuIDczMjpcXHQgKiBvbnRvIHRoZSBzdGFjay4gVGhlIHByb3ZpZGVkIHN0YWNrIHBvaW50ZXIgaXMgYWRqdXN0ZWQgYWNjb3JkaW5nbHkuXFxuIDczMzpcXHQgKi9cXG4gNzM0OlxcdGludCB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXFxuIDczNTpcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nICpzcF9sb2NhdGlvbilcXG4gNzM2OlxcdHtcXG4gNzM3OlxcdFxcdHVuc2lnbmVkIGxvbmcgaW5kZXgsIHN0b3AsIHNwO1xcbiA3Mzg6XFx0XFx0aW50IHJldCA9IDA7XFxuIDczOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDM6NTQ6MTYuMjI0Njk0OTYzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMjc0MzkxNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyB0aGUgc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbnZlc3RpZ2F0aW5nIGB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrYCdzIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uKipcblxuQWxyaWdodCwgdGhhdCdzIGludGVyZXN0aW5nLiBJIGp1c3Qgbm90aWNlZCB0aGF0IGB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrYCBpcyBuZXN0bGVkIHdpdGhpbiB0aGUgYCNlbHNlYCBibG9jayBvZiBhbiBgI2lmZGVmIENPTkZJR19NTVVgIGRpcmVjdGl2ZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpbXBsaWVzIHRoYXQgZnVuY3Rpb24gaXMgb25seSBjb21waWxlZCBhbmQgaW5jbHVkZWQgd2hlbiBgQ09ORklHX01NVWAgaXMgKm5vdCogZGVmaW5lZC4gT2YgY291cnNlLCB0aGF0J3MgdGhlIG5hdHVyZSBvZiBgI2Vsc2VgLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIGFzc3VtcHRpb24gcXVpY2tseS5cblxuSSdtIHRoaW5raW5nIEknbGwganVtcCBvdmVyIHRvIGBmcy9leGVjLmNgIGFyb3VuZCBsaW5lIDYwMCBvciBzby4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gdmVyaWZ5IGhvdyB0aGUgY29kZSBiZWhhdmVzIHdoZW4gdGhlIE1NVSBpcyBkaXNhYmxlZC4gSSdtIGN1cmlvdXMgdG8gc2VlIGhvdyBhcmd1bWVudHMgYXJlIGhhbmRsZWQgaW4gdGhhdCBzY2VuYXJpby4gUGVyaGFwcyB0aGVyZSdzIGFuIGFsdGVybmF0ZSBtZWNoYW5pc20gb3Igc29tZSBvcHRpbWl6YXRpb24gaW4gcGxhY2UuIFRpbWUgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjb25kaXRpb25hbCBjb21waWxhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTY1MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDM6NTQ6MTkuNDUyMTM2Mjg5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leGVjLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjAwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjAwOlxcdCAqIHRoZSBzdGFjayBpcyBvcHRpb25hbGx5IHJlbG9jYXRlZCwgYW5kIHNvbWUgZXh0cmEgc3BhY2UgaXMgYWRkZWQuXFxuIDYwMTpcXHQgKi9cXG4gNjAyOlxcdGludCBzZXR1cF9hcmdfcGFnZXMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcXG4gNjAzOlxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIHN0YWNrX3RvcCxcXG4gNjA0OlxcdFxcdFxcdCAgICBpbnQgZXhlY3V0YWJsZV9zdGFjaylcXG4gNjA1OlxcdHtcXG4gNjA2OlxcdFxcdGludCByZXQ7XFxuIDYwNzpcXHRcXHR1bnNpZ25lZCBsb25nIHN0YWNrX3NoaWZ0O1xcbiA2MDg6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LVxcdTAwM2VtbTtcXG4gNjA5OlxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gYnBybS1cXHUwMDNldm1hO1xcbiA2MTA6XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICpwcmV2ID0gTlVMTDtcXG4gNjExOlxcdFxcdHZtX2ZsYWdzX3Qgdm1fZmxhZ3M7XFxuIDYxMjpcXHRcXHR1bnNpZ25lZCBsb25nIHN0YWNrX2Jhc2U7XFxuIDYxMzpcXHRcXHR1bnNpZ25lZCBsb25nIHN0YWNrX3NpemU7XFxuIDYxNDpcXHRcXHR1bnNpZ25lZCBsb25nIHN0YWNrX2V4cGFuZDtcXG4gNjE1OlxcdFxcdHVuc2lnbmVkIGxvbmcgcmxpbV9zdGFjaztcXG4gNjE2OlxcdFxcdHN0cnVjdCBtbXVfZ2F0aGVyIHRsYjtcXG4gNjE3OlxcdFxcdHN0cnVjdCB2bWFfaXRlcmF0b3Igdm1pO1xcbiA2MTg6XFx0XFxuIDYxOTpcXHQjaWZkZWYgQ09ORklHX1NUQUNLX0dST1dTVVBcXG4gNjIwOlxcdFxcdC8qIExpbWl0IHN0YWNrIHNpemUgKi9cXG4gNjIxOlxcdFxcdHN0YWNrX2Jhc2UgPSBicHJtLVxcdTAwM2VybGltX3N0YWNrLnJsaW1fbWF4O1xcbiA2MjI6XFx0XFxuIDYyMzpcXHRcXHRzdGFja19iYXNlID0gY2FsY19tYXhfc3RhY2tfc2l6ZShzdGFja19iYXNlKTtcXG4gNjI0OlxcdFxcbiA2MjU6XFx0XFx0LyogQWRkIHNwYWNlIGZvciBzdGFjayByYW5kb21pemF0aW9uLiAqL1xcbiA2MjY6XFx0XFx0aWYgKGN1cnJlbnQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUEZfUkFORE9NSVpFKVxcbiA2Mjc6XFx0XFx0XFx0c3RhY2tfYmFzZSArPSAoU1RBQ0tfUk5EX01BU0sgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCk7XFxuIDYyODpcXHRcXG4gNjI5OlxcdFxcdC8qIE1ha2Ugc3VyZSB3ZSBkaWRuJ3QgbGV0IHRoZSBhcmd1bWVudCBhcnJheSBncm93IHRvbyBsYXJnZS4gKi9cXG4gNjMwOlxcdFxcdGlmICh2bWEtXFx1MDAzZXZtX2VuZCAtIHZtYS1cXHUwMDNldm1fc3RhcnQgXFx1MDAzZSBzdGFja19iYXNlKVxcbiA2MzE6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDYzMjpcXHRcXG4gNjMzOlxcdFxcdHN0YWNrX2Jhc2UgPSBQQUdFX0FMSUdOKHN0YWNrX3RvcCAtIHN0YWNrX2Jhc2UpO1xcbiA2MzQ6XFx0XFxuIDYzNTpcXHRcXHRzdGFja19zaGlmdCA9IHZtYS1cXHUwMDNldm1fc3RhcnQgLSBzdGFja19iYXNlO1xcbiA2MzY6XFx0XFx0bW0tXFx1MDAzZWFyZ19zdGFydCA9IGJwcm0tXFx1MDAzZXAgLSBzdGFja19zaGlmdDtcXG4gNjM3OlxcdFxcdGJwcm0tXFx1MDAzZXAgPSB2bWEtXFx1MDAzZXZtX2VuZCAtIHN0YWNrX3NoaWZ0O1xcbiA2Mzg6XFx0I2Vsc2VcXG4gNjM5OlxcdFxcdHN0YWNrX3RvcCA9IGFyY2hfYWxpZ25fc3RhY2soc3RhY2tfdG9wKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDM6NTQ6MTkuNDUyMjYyMjk4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NzA1ODk0MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOlxuXG4qKkFuYWx5emluZyB0aGUgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5KipcblxuT2theSwgdGhlIGNvZGUgbWVudGlvbnMgYHNldHVwX2FyZ19wYWdlc2AsIEkga25vdyB0aGF0IG9uZS4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBMZXQncyBzZWUuLi4gdGhlIHRleHQgZGlyZWN0cyBtZSB0byBsb29rIGZvciBgI2lmZGVmIENPTkZJR19NTVVgLiBBaCwgcmlnaHQsIHRoYXQncyBhIGNsYXNzaWMgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoYXQgdGhlIGJlaGF2aW9yIG9mIGBzZXR1cF9hcmdfcGFnZXNg4oCUb3IgcGVyaGFwcyBldmVuIHdoZXRoZXIgaXQgKmV4aXN0cyogaW4gdGhlIGJ1aWxk4oCUaXMgY29udGluZ2VudCBvbiB3aGV0aGVyIHRoZSBgQ09ORklHX01NVWAga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGVuYWJsZWQuIFRoYXQncyBjcnVjaWFsLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBkZXBlbmRlbmN5IGFzIEkgZGl2ZSBkZWVwZXIgaW50byB3aGF0IGBzZXR1cF9hcmdfcGFnZXNgIGRvZXMuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhhdCB0aGUgY29kZSBwYXRocyBhcmUgZ29pbmcgdG8gZGl2ZXJnZSBiYXNlZCBvbiB0aGF0IGRlZmluaXRpb24uIEl0J3MgYSBrZXkgYnJhbmNoaW5nIHBvaW50IGluIHRoaXMgbW9kdWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjA0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMzo1NDoyMi4zMjI4NTQzMDJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5Mzg0MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19NTVVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXhlYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4ZWMuYz0xMTY9Ym9vbCBwYXRoX25vZXhlYyhjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aClcXG4tLVxcbmZzL2V4ZWMuYy0xMjQtXFxuZnMvZXhlYy5jOjEyNTojaWZkZWYgQ09ORklHX01NVVxcbmZzL2V4ZWMuYy0xMjYtLypcXG4tLVxcbmZzL2V4ZWMuYz0yNDQ9c3RhdGljIGJvb2wgdmFsaWRfYXJnX2xlbihzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLCBsb25nIGxlbilcXG4tLVxcbmZzL2V4ZWMuYy0yNDgtXFxuZnMvZXhlYy5jOjI0OTojZW5kaWYgLyogQ09ORklHX01NVSAqL1xcbmZzL2V4ZWMuYy0yNTAtXFxuLS1cXG5mcy9leGVjLmM9MjU3PXN0YXRpYyBpbnQgYnBybV9tbV9pbml0KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuLS1cXG5mcy9leGVjLmMtMjc0LVxcbmZzL2V4ZWMuYzoyNzU6I2lmbmRlZiBDT05GSUdfTU1VXFxuZnMvZXhlYy5jLTI3Ni1cXHRicHJtLVxcdTAwM2VwID0gUEFHRV9TSVpFICogTUFYX0FSR19QQUdFUyAtIHNpemVvZih2b2lkICopO1xcbi0tXFxuZnMvZXhlYy5jPTM3Mz1zdGF0aWMgaW5saW5lIGludCBicHJtX3NldF9zdGFja19saW1pdChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxcbi0tXFxuZnMvZXhlYy5jLTM3NS17XFxuZnMvZXhlYy5jOjM3NjojaWZkZWYgQ09ORklHX01NVVxcbmZzL2V4ZWMuYy0zNzctXFx0LyogQXZvaWQgYSBwYXRob2xvZ2ljYWwgYnBybS1cXHUwMDNlcC4gKi9cXG4tLVxcbmZzL2V4ZWMuYz0zODQ9c3RhdGljIGlubGluZSBib29sIGJwcm1faGl0X3N0YWNrX2xpbWl0KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuZnMvZXhlYy5jLTM4NS17XFxuZnMvZXhlYy5jOjM4NjojaWZkZWYgQ09ORklHX01NVVxcbmZzL2V4ZWMuYy0zODctXFx0cmV0dXJuIGJwcm0tXFx1MDAzZXAgXFx1MDAzYyBicHJtLVxcdTAwM2VhcmdtaW47XFxuLS1cXG5mcy9leGVjLmM9NTgyPXN0YXRpYyBpbnQgY29weV9zdHJpbmdzX2tlcm5lbChpbnQgYXJnYywgY29uc3QgY2hhciAqY29uc3QgKmFyZ3YsXFxuLS1cXG5mcy9leGVjLmMtNTk1LVxcbmZzL2V4ZWMuYzo1OTY6I2lmZGVmIENPTkZJR19NTVVcXG5mcy9leGVjLmMtNTk3LVxcbi0tXFxuZnMvZXhlYy5jPTc2MD1FWFBPUlRfU1lNQk9MKHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2spO1xcbmZzL2V4ZWMuYy03NjEtXFxuZnMvZXhlYy5jOjc2MjojZW5kaWYgLyogQ09ORklHX01NVSAqL1xcbmZzL2V4ZWMuYy03NjMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDAzOjU0OjIyLjQwMjI0NTczMloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTI4Mjg4NjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBgdHJhbnNmZXJfYXJnc190b19zdGFja2AgYW5kIFN5emthbGxlciBDb21wYXRpYmlsaXR5KipcblxuT2theSwgc28gYHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2tgIGlzIG5lc3RlZCB3aXRoaW4gYW4gYCNlbHNlYCBibG9jayB0aGF0IGlzIGNvbnRpbmdlbnQgb24gYCNpZmRlZiBDT05GSUdfTU1VYCDigJMgSSBzZWUgaXQncyBhdCBsaW5lIDU5Ni4gVGhhdCdzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLiBJZiB0aGF0IGZ1bmN0aW9uIGlzIG9ubHkgY29tcGlsZWQgd2hlbiBgQ09ORklHX01NVWAgaXMgKm5vdCogZGVmaW5lZCwgdGhlbiBpdCdzIHNwZWNpZmljYWxseSBmb3Igbm9uLU1NVSBhcmNoaXRlY3R1cmVzLiBNeSBtaW5kIGltbWVkaWF0ZWx5IHJhY2VzOiBDYW4gd2UgZXZlbiBmdXp6IG5vbW11IGFyY2hpdGVjdHVyZXMgd2l0aCBzeXprYWxsZXI/XG5cbkNvbnNpZGVyaW5nIHRoZSBzdGFuZGFyZCBzeXprYWxsZXIgc2V0dXAsIGl0J3MgdHlwaWNhbGx5IHRhcmdldGluZyB4ODZfNjQsIGFybTY0LCByaXNjdjY0LCBhbmQgdGhlIGxpa2Ug4oCTIGFsbCBhcmNoaXRlY3R1cmVzIHRoYXQsIGJ5IHRoZWlyIG5hdHVyZSwgcmVseSBvbiBhIG1lbW9yeSBtYW5hZ2VtZW50IHVuaXQuIEknbSBwcmV0dHkgc3VyZSBzeXprYWxsZXIgZG9lc24ndCBoYXZlIG5hdGl2ZSBzdXBwb3J0IGZvciBub21tdSBlbnZpcm9ubWVudHMgbGlrZSBhcm0tbm9tbXUsIG02OGstbm9tbXUsIG9yIHJpc2N2LW5vbW11IGluIGl0cyBzdGFuZGFyZCBjb25maWd1cmF0aW9ucy4gVGhpcyBpcyBhIHBvaW50IHRvIGNvbmZpcm0sIEkgc3VwcG9zZS5cblxuTGV0IG1lIHRoaW5r4oCmIGNhbiBgQ09ORklHX01NVWAgYmUgZGlzYWJsZWQgb24geDg2XzY0PyBJIHNlcmlvdXNseSBkb3VidCBpdDsgdGhlIGFyY2hpdGVjdHVyZSBpbmhlcmVudGx5IGRlcGVuZHMgb24gYW4gTU1VLiBPa2F5LCBzbyB0aGF0J3MgYSBkZWFkIGVuZC4gQnV0IGhvbGQgb24sIGlzIHRoZXJlIGFueSBwb3NzaWJpbGl0eSB0aGF0IGB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrYCAqY291bGQqIGJlIGNvbXBpbGVkIG9uIHg4Nl82NCBpbiBzb21lIGVkZ2UgY2FzZT8gTGV0IG1lIHF1aWNrbHkgY2hlY2sgaWYgd2UgY2FuIGRpc2FibGUgYENPTkZJR19NTVVgIG9uIHg4Niwgd2hpY2ggaXMgdGhlIHByZWN1cnNvciB0byB4ODZfNjQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczOTQsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDM6NTQ6MjYuOTMwNTM3MTY3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDQ5ODIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTU1VXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvS2NvbmZpZz0zNTM9Y29uZmlnIFNUQUNLVFJBQ0VfU1VQUE9SVFxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0zNTUtXFxuYXJjaC94ODYvS2NvbmZpZzozNTY6Y29uZmlnIE1NVVxcbmFyY2gveDg2L0tjb25maWctMzU3LVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDM6NTQ6MjYuOTkxMDM5NDY2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MDc4Mzc4MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBJbXBsaWNhdGlvbnMgb2YgYGRlZl9ib29sIHlgIG9uIHg4NioqXG5cblJpZ2h0LCBzbyBJIHNlZSB0aGlzIGBkZWZfYm9vbCB5YCBjb25zdHJ1Y3Qgb24geDg2LiBJbW1lZGlhdGVseSwgbXkgbWluZCBqdW1wcyB0byB0aGUgYXJjaGl0ZWN0dXJhbCBjb25zdHJhaW50cy4gKkl0J3MqIHg4Ni4gVGhhdCB0ZWxscyBtZSB0aGlzIHBhcnRpY3VsYXIgYm9vbGVhbiBkZWZpbml0aW9uICpjYW5ub3QqIGJlIGRpc2FibGVkIGJ5IHRyYWRpdGlvbmFsIG1lYW5zLiBUaGUgaW1wbGljYXRpb25zIGFyZSBzaWduaWZpY2FudCwgYXMgSSBrbm93LiBJdCBsaWtlbHkgbWVhbnMgdGhpcyBib29sZWFuIGZsYWcgaXMgZGVlcGx5IGVtYmVkZGVkIGluIHRoZSBpbnN0cnVjdGlvbiBzZXQgb3Igc3BlY2lmaWMgaGFyZHdhcmUgYmVoYXZpb3IgZm9yIHRoaXMgYXJjaGl0ZWN0dXJlLiBOb3cgbXkgZm9jdXMgc2hpZnRzIHRvIG90aGVyIGFyY2hpdGVjdHVyZXMgdGhhdCBJIGFtIGZhbWlsaWFyIHdpdGguIFdoYXQncyB0aGUgc2l0dWF0aW9uIG9uIGFybTY0PyBEbyB0aGV5IGhhdmUgc2ltaWxhciByZXF1aXJlbWVudHM/IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB3aGV0aGVyIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFyZSBzcGVjaWZpYyB0byB0aGlzIG9uZSBhcmNoaXRlY3R1cmUsIG9yIGlmIHRoZXkgYXJlIHNoYXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA2OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDAzOjU0OjI5Ljg5ODg3OTg2MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU5MDg2NTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1NVVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9LY29uZmlnPTI3OT1jb25maWcgNjRCSVRcXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZy0yODEtXFxuYXJjaC9hcm02NC9LY29uZmlnOjI4Mjpjb25maWcgTU1VXFxuYXJjaC9hcm02NC9LY29uZmlnLTI4My1cXHRkZWZfYm9vbCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDAzOjU0OjI5Ljk1NDc5NjUzNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTA5MDE4NDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIEFyY2hpdGVjdHVyZS1TcGVjaWZpYyBCb29sZWFuIERlZmluaXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBJIHNlZSB0aGlzIGBkZWZfYm9vbCB5YCBjb25zdHJ1Y3QsIGFuZCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IGl0J3MgYmVoYXZpbmcgaWRlbnRpY2FsbHkgb24gYXJtNjQuIFRoYXQncyBnb29kLCBpdCBzdWdnZXN0cyBzb21lIGxldmVsIG9mIGNvbnNpc3RlbmN5LiBCdXQgSSBjYW4ndCBqdXN0IGFzc3VtZS4gVGhlIHJlYWwgcXVlc3Rpb24gaXMsIHdoYXQgYWJvdXQgUklTQy1WPyBNeSBjb25jZXJuIGlzIGFsd2F5cyBhcm91bmQgdGhlIHBvcnRhYmlsaXR5IG9mIHRoZXNlIGRlZmluaXRpb25zLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGZ1bmRhbWVudGFsIGJvb2xlYW4gZXhwcmVzc2lvbnMuIFJJU0MtViBpcyBnYWluaW5nIHJlYWwgdHJhY3Rpb24sIGFuZCBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgdGhlIGJlaGF2aW9yIGFsaWducyBhY3Jvc3MgZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMuIFRoaXMgaXMgdGhlIGNyaXRpY2FsIG5leHQgc3RlcC4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBSSVNDLVYgaW1wbGVtZW50YXRpb24gZGV0YWlscyBhbmQgZG91YmxlLWNoZWNrLCBvciB0aGlzIGNvdWxkIGJlY29tZSBhbiBpbnNpZGlvdXMgYnVnIGxhdGVyLiBJIG5lZWQgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoZSBSSVNDLVYgZG9jdW1lbnRhdGlvbiBvciBtYXliZSBwb2tlIHRocm91Z2ggc29tZSBvZiB0aGUgcmVsZXZhbnQgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM4NSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDAzOjU0OjMzLjA2MzgxNzc0OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTcwODg0MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1NVVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9LY29uZmlnPTI4OD1jb25maWcgUklTQ1ZfU0JJXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWctMjkyLVxcbmFyY2gvcmlzY3YvS2NvbmZpZzoyOTM6Y29uZmlnIE1NVVxcbmFyY2gvcmlzY3YvS2NvbmZpZy0yOTQtXFx0Ym9vbCBcXFwiTU1VLWJhc2VkIFBhZ2VkIE1lbW9yeSBNYW5hZ2VtZW50IFN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDAzOjU0OjMzLjEyMDkxMjgxOVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzUyMjk3MDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJJU0MtViBOb21tdSBGdXp6aW5nOiBBIFdvcnRod2hpbGUgRW5kZWF2b3I/KipcblxuT2theSwgc28gUklTQy1WIHN1cHBvcnRzIGBDT05GSUdfTU1VPW5gLCB0aGF0J3MgZ29vZC4gQnV0IGRvZXMgc3l6a2FsbGVyICphY3R1YWxseSogZnV6eiBSSVNDLVYgd2hlbiB0aGUgTU1VIGlzIGRpc2FibGVkPyBUeXBpY2FsbHksIGl0J3MgTU1VLWVuYWJsZWQsIHdoaWNoIG1ha2VzIG1lIHRoaW5rLi4uIFRoZSBwcm9tcHQncyB3b3JkaW5nLi4uIFwiQ29kZSBwYXRocyBpbXBvc3NpYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgZXZlbiB3aXRoIHNvZnR3YXJlIGVtdWxhdGlvblwiLiBIbW0sIFJJU0MtViBub21tdSAqY2FuKiBydW4gaW4gUUVNVSwgc28gdGhlIHR5cGljYWwgZXhjbHVzaW9uIGRvZXNuJ3QgYXBwbHkuIEJ1dCBpcyBpdCBhIHN0YW5kYXJkIHNldHVwPyBUaGF0J3MgdGhlIHJlYWwgcXVlc3Rpb24uXG5cblRoZSBwcm9tcHQgZnVydGhlciBjbGFyaWZpZXMsIFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBjb2RlIHBhdGhzIGltcG9zc2libGUgdG8gcmVhY2guLi5cIi4gQnV0IGl0ICppcyogcmVhY2hhYmxlIGluIFFFTVUhIFRoZSBwcm9tcHQgKmFsc28qIHN0YXRlcywgXCJJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgYW5kIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cIiBTbywgaXQgKmlzKiByZWFjaGFibGUsIHRlY2huaWNhbGx5LlxuXG5Ib3dldmVyLCBgQ09ORklHX01NVT1uYCBpcyBhIHZlcnkgc3BlY2lmaWMsIGFuZCBwcm9iYWJseSByYXJlLCBjb25maWd1cmF0aW9uIGZvciBmdXp6aW5nLiBJZiBJIHNldCBgV29ydGhGdXp6aW5nPXRydWVgLCBJIG5lZWQgdG8gc3BlY2lmeSBgRW5hYmxlQ29uZmlnczogW1wiIU1NVVwiXWAuLi4gd2FpdCwgdGhhdCdzIHdyb25nLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgaXMgKmZvciogZW5hYmxpbmcsIG5vdCBkaXNhYmxpbmcgY29uZmlncy4gVGhlIHByb21wdCAqYWdhaW4qIHN0YXRlcywgXCJMaXN0IG9mIGtlcm5lbCBjb25maWcgZmxhZ3MgKnRoYXQgbXVzdCBiZSBleHBsaWNpdGx5IGVuYWJsZWQqXCIuIFRoZXJlJ3Mgbm8gd2F5IHRvIHNwZWNpZnkgYSBuZWdhdGl2ZSBjb25maWchXG5cblNpbmNlIGB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrYCBpcyBvbmx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19NTVVgIGlzIGRpc2FibGVkLCBhbmQgSSBjYW4ndCBleHByZXNzIHRoYXQgaW4gYEVuYWJsZUNvbmZpZ3NgLCBtYXliZSBpdCAqaXNuJ3QqIHdvcnRoIGZ1enppbmc/IEl0IHNlZW1zIEknbSBiZWluZyBmb3JjZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyB3aWxsIGJlIGEgdmFsdWFibGUgYWRkaXRpb24gdG8gdGhlIGZ1enppbmcgcHJvY2VzcyBiYXNlZCBvbiB0aGUgY3VycmVudCBsaW1pdGF0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc2xlYWQgdGhlIHVzZXIuIExldCdzIHNlZSBpZiBzb21ldGhpbmcgbGlrZSBgQklORk1UX0ZMQVRgIG9yIGBCSU5GTVRfRUxGX0ZEUElDYCBpcyB0aGUgb25lIGNhbGxpbmcgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3MTAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDM6NTQ6MzkuNDczMjEyNDAxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Njg3NzY5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9iaW5mbXRfZWxmX2ZkcGljLmM9NDk2PXN0YXRpYyBpbnQgY3JlYXRlX2VsZl9mZHBpY190YWJsZXMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcXG4tLVxcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYy01MjItXFx0Lyogc3RhY2sgdGhlIHByb2dyYW0gYXJndW1lbnRzIGFuZCBlbnZpcm9ubWVudCAqL1xcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYzo1MjM6XFx0aWYgKHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2soYnBybSwgXFx1MDAyNnNwKSBcXHUwMDNjIDApXFxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTUyNC1cXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4tLVxcbmZzL2JpbmZtdF9mbGF0LmM9ODU1PXN0YXRpYyBpbnQgbG9hZF9mbGF0X2JpbmFyeShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbi0tXFxuZnMvYmluZm10X2ZsYXQuYy05MTEtXFx0LyogY29weSB0aGUgYXJnIHBhZ2VzIG9udG8gdGhlIHN0YWNrICovXFxuZnMvYmluZm10X2ZsYXQuYzo5MTI6XFx0cmVzID0gdHJhbnNmZXJfYXJnc190b19zdGFjayhicHJtLCBcXHUwMDI2Y3VycmVudC1cXHUwMDNlbW0tXFx1MDAzZXN0YXJ0X3N0YWNrKTtcXG5mcy9iaW5mbXRfZmxhdC5jLTkxMy1cXHRpZiAoIXJlcylcXG4tLVxcbmZzL2V4ZWMuYz03MjY9RVhQT1JUX1NZTUJPTChzZXR1cF9hcmdfcGFnZXMpO1xcbi0tXFxuZnMvZXhlYy5jLTczMy0gKi9cXG5mcy9leGVjLmM6NzM0OmludCB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXFxuZnMvZXhlYy5jLTczNS1cXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nICpzcF9sb2NhdGlvbilcXG4tLVxcbmZzL2V4ZWMuYy03NTktfVxcbmZzL2V4ZWMuYzo3NjA6RVhQT1JUX1NZTUJPTCh0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrKTtcXG5mcy9leGVjLmMtNzYxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMzo1NDozOS41NjAwOTQ3MzhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgzMTMzNjM5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBCaW5hcnkgRm9ybWF0cyoqXG5cblJpZ2h0LCBsZXQncyBzZWUuIE15IG1lbnRhbCBjaGVja2xpc3QgZm9yIGJpbmFyeSBmb3JtYXQgc3VwcG9ydCBzdGFydHMgd2l0aCBjb25maXJtaW5nIHRoZSBwcmVzZW5jZSBvZiBgQklORk1UX0ZMQVRgIGFuZCBgQklORk1UX0VMRl9GRFBJQ2AuIFRob3NlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMgaW4gdGhpcyBjb250ZXh0LiBOb3csIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgY29uZmlndXJhdGlvbiBmb3IgYEJJTkZNVF9GTEFUYC4gSSdsbCBpbW1lZGlhdGVseSBqdW1wIGludG8gYGZzL0tjb25maWcuYmluZm10YC4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgYW55IGRlcGVuZGVuY2llcy4gVGltZSB0byBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDE4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDM6NTQ6NDIuMzkxNDMzOTkxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTQ1NzU0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQklORk1UX0ZMQVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvS2NvbmZpZy5iaW5mbXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvS2NvbmZpZy5iaW5mbXQ9MTEzPWNvbmZpZyBBUkNIX0hBU19CSU5GTVRfRkxBVFxcbi0tXFxuZnMvS2NvbmZpZy5iaW5mbXQtMTE1LVxcbmZzL0tjb25maWcuYmluZm10OjExNjpjb25maWcgQklORk1UX0ZMQVRcXG5mcy9LY29uZmlnLmJpbmZtdC0xMTctXFx0Ym9vbCBcXFwiS2VybmVsIHN1cHBvcnQgZm9yIGZsYXQgYmluYXJpZXNcXFwiXFxuLS1cXG5mcy9LY29uZmlnLmJpbmZtdC0xMjEtXFxuZnMvS2NvbmZpZy5iaW5mbXQ6MTIyOmNvbmZpZyBCSU5GTVRfRkxBVF9BUkdWUF9FTlZQX09OX1NUQUNLXFxuZnMvS2NvbmZpZy5iaW5mbXQtMTIzLVxcdGJvb2xcXG5mcy9LY29uZmlnLmJpbmZtdC0xMjQtXFxuZnMvS2NvbmZpZy5iaW5mbXQ6MTI1OmNvbmZpZyBCSU5GTVRfRkxBVF9PTERfQUxXQVlTX1JBTVxcbmZzL0tjb25maWcuYmluZm10LTEyNi1cXHRib29sXFxuZnMvS2NvbmZpZy5iaW5mbXQtMTI3LVxcbmZzL0tjb25maWcuYmluZm10OjEyODpjb25maWcgQklORk1UX0ZMQVRfTk9fREFUQV9TVEFSVF9PRkZTRVRcXG5mcy9LY29uZmlnLmJpbmZtdC0xMjktXFx0Ym9vbFxcbmZzL0tjb25maWcuYmluZm10LTEzMC1cXG5mcy9LY29uZmlnLmJpbmZtdDoxMzE6Y29uZmlnIEJJTkZNVF9GTEFUX09MRFxcbmZzL0tjb25maWcuYmluZm10LTEzMi1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgdmVyeSBvbGQgbGVnYWN5IGZsYXQgYmluYXJpZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDAzOjU0OjQyLjQ1MDg5NzUyMVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDc2NzE4MTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBmcy9LY29uZmlnLmJpbmZtdGAqKlxuXG5Pa2F5LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIHRoaW5raW5nLCBcIldoZXJlJ3MgdGhlIGJlc3Qgc3RhcnRpbmcgcG9pbnQgZm9yIHRoaXMgYW5hbHlzaXM/XCIgTXkgbWVudGFsIG1hcCB0ZWxscyBtZSB0byBoZWFkIHN0cmFpZ2h0IGZvciBgZnMvS2NvbmZpZy5iaW5mbXRgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMTE2LiBJJ20gZXhwZWN0aW5nIHNvbWV0aGluZyByZWxhdGVkIHRvIGJpbmFyeSBmb3JtYXQgY29uZmlndXJhdGlvbiB0aGVyZSwgZ2l2ZW4gdGhlIGZpbGVuYW1lLCBhbmQgdGhlIEtjb25maWcgZmlsZXMgYXJlIHRoZSBsaWZlYmxvb2QgZm9yIGNvbnRyb2xsaW5nIHdoYXQgZmVhdHVyZXMgZ2V0IGJ1aWx0LiBJJ20gYW50aWNpcGF0aW5nIHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gbG9naWMsIG1heWJlIHNvbWUgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLCBvciBwZXJoYXBzIHNvbWUgb3B0aW9ucyBjb250cm9sbGluZyB0aGUgZGVmYXVsdCBiZWhhdmlvci4gSSdtIGtlZW4gdG8gc2VlIHRoZSBvcHRpb25zIGFuZCBhbnkgcmVsYXRlZCBkZXBlbmRlbmNpZXMgb3IgY29uc3RyYWludHMgZGVmaW5lZCB0aGVyZS4gSXQncyBhIGtleSBzcG90IHRvIHVuZGVyc3RhbmQgaG93IHNwZWNpZmljIGJpbmFyeSBmb3JtYXRzIGFyZSBlbmFibGVkIGFuZCBjb25maWd1cmVkIGF0IGJ1aWxkIHRpbWUuIFRoaXMgc2hvdWxkIGdpdmUgYSBnb29kIG92ZXJ2aWV3IGJlZm9yZSBJIG5lZWQgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBhY3R1YWwgY29kZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MTA1NTUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMzo1NDo0NS41Mjc2MTgyMloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Nzg5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9LY29uZmlnLmJpbmZtdFwiLFxuICBcIkZpcnN0TGluZVwiOiAxMTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMTA6XFx0XFxuIDExMTpcXHRcXHQgIE1vc3Qgc3lzdGVtcyB3aWxsIG5vdCBib290IGlmIHlvdSBzYXkgTSBvciBOIGhlcmUuICBJZiB1bnN1cmUsIHNheSBZLlxcbiAxMTI6XFx0XFxuIDExMzpcXHRjb25maWcgQVJDSF9IQVNfQklORk1UX0ZMQVRcXG4gMTE0OlxcdFxcdGJvb2xcXG4gMTE1OlxcdFxcbiAxMTY6XFx0Y29uZmlnIEJJTkZNVF9GTEFUXFxuIDExNzpcXHRcXHRib29sIFxcXCJLZXJuZWwgc3VwcG9ydCBmb3IgZmxhdCBiaW5hcmllc1xcXCJcXG4gMTE4OlxcdFxcdGRlcGVuZHMgb24gQVJDSF9IQVNfQklORk1UX0ZMQVRcXG4gMTE5OlxcdFxcdGhlbHBcXG4gMTIwOlxcdFxcdCAgU3VwcG9ydCB1Q2xpbnV4IEZMQVQgZm9ybWF0IGJpbmFyaWVzLlxcbiAxMjE6XFx0XFxuIDEyMjpcXHRjb25maWcgQklORk1UX0ZMQVRfQVJHVlBfRU5WUF9PTl9TVEFDS1xcbiAxMjM6XFx0XFx0Ym9vbFxcbiAxMjQ6XFx0XFxuIDEyNTpcXHRjb25maWcgQklORk1UX0ZMQVRfT0xEX0FMV0FZU19SQU1cXG4gMTI2OlxcdFxcdGJvb2xcXG4gMTI3OlxcdFxcbiAxMjg6XFx0Y29uZmlnIEJJTkZNVF9GTEFUX05PX0RBVEFfU1RBUlRfT0ZGU0VUXFxuIDEyOTpcXHRcXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDAzOjU0OjQ1LjUyNzY4NzM3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI0OTExNzU4MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgS2VybmVsJ3MgRmxhdCBCaW5hcnkgRm9ybWF0IFN1cHBvcnQqKlxuXG5BbHJpZ2h0LCB0aGUgbmV4dCBzdGVwIGluIHRoaXMgZGlzc2VjdGlvbiBoaW5nZXMgb24gdGhlIGFyY2hpdGVjdHVyZSdzIHN1cHBvcnQgZm9yIHRoZSBmbGF0IGJpbmFyeSBmb3JtYXQuIEl0J3MgYSBjb25kaXRpb25hbCBkZXBlbmRlbmN5LCBJJ2Qgc2F5LiBTbywgdGhlIGtleSB2YXJpYWJsZSBoZXJlIGlzIGBBUkNIX0hBU19CSU5GTVRfRkxBVGAuIEkgbmVlZCB0byBjb25maXJtIGl0cyBkZWZpbml0aW9uIGFuZCB2YWx1ZS4gTGV0J3Mgc2VlLi4uIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiB0byBkZXRlcm1pbmUgaWYgYEFSQ0hfSEFTX0JJTkZNVF9GTEFUYCBpcyBzZXQuIFRoYXQncyB0aGUgY29yZSBxdWVzdGlvbiBoZXJlLiBJcyB0aGlzIGFyY2hpdGVjdHVyZSBsZXZlcmFnaW5nIHRoZSBgYmluZm10X2ZsYXRgIGhhbmRsZXI/IEkgbmVlZCB0aGF0IGFuc3dlciB0byBwcm9jZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTA4MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDM6NTQ6NDguMDE4ODY1ODEzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mzc1NzA3MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IEFSQ0hfSEFTX0JJTkZNVF9GTEFUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtL0tjb25maWc9Mj1jb25maWcgQVJNXFxuLS1cXG5hcmNoL2FybS9LY29uZmlnLTYtXFx0c2VsZWN0IEFSQ0hfQ09SUkVDVF9TVEFDS1RSQUNFX09OX0tSRVRQUk9CRSBpZiBIQVZFX0tSRVRQUk9CRVMgXFx1MDAyNlxcdTAwMjYgRlJBTUVfUE9JTlRFUiBcXHUwMDI2XFx1MDAyNiAhQVJNX1VOV0lORFxcbmFyY2gvYXJtL0tjb25maWc6NzpcXHRzZWxlY3QgQVJDSF9IQVNfQklORk1UX0ZMQVRcXG5hcmNoL2FybS9LY29uZmlnLTgtXFx0c2VsZWN0IEFSQ0hfSEFTX0NBQ0hFX0xJTkVfU0laRSBpZiBPRlxcbi0tXFxuYXJjaC9tNjhrL0tjb25maWc9Mj1jb25maWcgTTY4S1xcbi0tXFxuYXJjaC9tNjhrL0tjb25maWctNS1cXHRzZWxlY3QgQVJDSF8zMkJJVF9PRkZfVFxcbmFyY2gvbTY4ay9LY29uZmlnOjY6XFx0c2VsZWN0IEFSQ0hfSEFTX0JJTkZNVF9GTEFUXFxuYXJjaC9tNjhrL0tjb25maWctNy1cXHRzZWxlY3QgQVJDSF9IQVNfQ1BVX0NBQ0hFX0FMSUFTSU5HXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWc9MTM9Y29uZmlnIFJJU0NWXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWctMjUtXFx0c2VsZWN0IEFSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuYXJjaC9yaXNjdi9LY29uZmlnOjI2OlxcdHNlbGVjdCBBUkNIX0hBU19CSU5GTVRfRkxBVFxcbmFyY2gvcmlzY3YvS2NvbmZpZy0yNy1cXHRzZWxlY3QgQVJDSF9IQVNfQ0NfQ0FOX0xJTktcXG4tLVxcbmFyY2gvc2gvS2NvbmZpZz0yPWNvbmZpZyBTVVBFUkhcXG4tLVxcbmFyY2gvc2gvS2NvbmZpZy02LVxcdHNlbGVjdCBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIRyBpZiAoR1VTQV9SQiB8fCBDUFVfU0g0QSlcXG5hcmNoL3NoL0tjb25maWc6NzpcXHRzZWxlY3QgQVJDSF9IQVNfQklORk1UX0ZMQVQgaWYgIU1NVVxcbmFyY2gvc2gvS2NvbmZpZy04LVxcdHNlbGVjdCBBUkNIX0hBU19DUFVfRklOQUxJWkVfSU5JVFxcbi0tXFxuYXJjaC94dGVuc2EvS2NvbmZpZz0yPWNvbmZpZyBYVEVOU0FcXG4tLVxcbmFyY2gveHRlbnNhL0tjb25maWctNS1cXHRzZWxlY3QgQVJDSF9IQVNfQ1BVX0NBQ0hFX0FMSUFTSU5HXFxuYXJjaC94dGVuc2EvS2NvbmZpZzo2OlxcdHNlbGVjdCBBUkNIX0hBU19CSU5GTVRfRkxBVCBpZiAhTU1VXFxuYXJjaC94dGVuc2EvS2NvbmZpZy03LVxcdHNlbGVjdCBBUkNIX0hBU19DVVJSRU5UX1NUQUNLX1BPSU5URVJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDM6NTQ6NDguNTU2NDQxNDk0WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5Mjg5NTI3ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEZsYXQgQmluYXJ5IFN1cHBvcnQgaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIHNvIEkgc2VlIGBBUkNIX0hBU19CSU5GTVRfRkxBVGAgaXMgYmVpbmcgc2VsZWN0ZWQgYnkgdGhlIEFSTSwgTTY4SywgUklTQ1YsIFNILCBhbmQgWFRFTlNBIGFyY2hpdGVjdHVyZXMuIFRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZy4gYEJJTkZNVF9GTEFUYCwgYXMgSSByZWNhbGwsIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3IgZmxhdCBiaW5hcmllcyDigJMgdGhlIGtpbmQgeW91IG9mdGVuIGZpbmQgb24gc3lzdGVtcyAqd2l0aG91dCogYSBtZW1vcnkgbWFuYWdlbWVudCB1bml0IChNTVUpLiBUaGF0J3MgdGhlIGZpcnN0IGNvbm5lY3Rpb24uXG5cbk5vdywgbXkgaW50dWl0aW9uIGlzIGNvbmZpcm1lZCBieSBgdHJhbnNmZXJfYXJnc190b19zdGFja2AgLSBpdCBzZWVtcyB0byBiZSBjb25kaXRpb25hbGx5IGNvbXBpbGVkICpvbmx5KiB3aGVuIGAhQ09ORklHX01NVWAuIFRoYXQgbWFrZXMgc2Vuc2U7IG9uIE1NVS1sZXNzIHN5c3RlbXMsIHdlIHR5cGljYWxseSBoYW5kbGUgYXJndW1lbnQgcGFzc2luZyBkaWZmZXJlbnRseSwgb2Z0ZW4gcHVzaGluZyB0aGVtIGRpcmVjdGx5IG9udG8gdGhlIHN0YWNrIGluIHRoZSBrZXJuZWwuIFRoaXMgaXMgYSBjcnVjaWFsIGRldGFpbCBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZC5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCdzIHZlcmlmeSBteSBoeXBvdGhlc2lzLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBzY2FuIHRocm91Z2ggdGhlIHJlbGV2YW50IGNvZGUgYWdhaW4sIHNwZWNpZmljYWxseSBsb29raW5nIGZvciB0aG9zZSBgI2lmbmRlZiBDT05GSUdfTU1VYCBvciBgI2Vsc2VgIGJsb2NrcyBpbiByZWxhdGlvbiB0byB0aGUgZmxhdCBiaW5hcnkgc3VwcG9ydC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBsb2dpYywgbWFraW5nIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgZWRnZSBjYXNlcy4gSSdsbCBjaGVjayBgZnMvZXhlYy5jYCBhZ2Fpbiwgc3BlY2lmaWNhbGx5IGZvciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiB0aGUgcHJlc2VuY2Ugb3IgYWJzZW5jZSBvZiBNTVUgc3VwcG9ydC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvbmRpdGlvbnMgYXJlIGV4YWN0bHkgYXMgSSBleHBlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODA1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDAzOjU0OjUyLjQ4NTM5Njk5NVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjAzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXhlYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU5MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU5MDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVSRVNUQVJUTk9IQU5EO1xcbiA1OTE6XFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuIDU5MjpcXHRcXHR9XFxuIDU5MzpcXHRcXHRyZXR1cm4gMDtcXG4gNTk0OlxcdH1cXG4gNTk1OlxcdFxcbiA1OTY6XFx0I2lmZGVmIENPTkZJR19NTVVcXG4gNTk3OlxcdFxcbiA1OTg6XFx0LypcXG4gNTk5OlxcdCAqIEZpbmFsaXplcyB0aGUgc3RhY2sgdm1fYXJlYV9zdHJ1Y3QuIFRoZSBmbGFncyBhbmQgcGVybWlzc2lvbnMgYXJlIHVwZGF0ZWQsXFxuIDYwMDpcXHQgKiB0aGUgc3RhY2sgaXMgb3B0aW9uYWxseSByZWxvY2F0ZWQsIGFuZCBzb21lIGV4dHJhIHNwYWNlIGlzIGFkZGVkLlxcbiA2MDE6XFx0ICovXFxuIDYwMjpcXHRpbnQgc2V0dXBfYXJnX3BhZ2VzKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXFxuIDYwMzpcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBzdGFja190b3AsXFxuIDYwNDpcXHRcXHRcXHQgICAgaW50IGV4ZWN1dGFibGVfc3RhY2spXFxuIDYwNTpcXHR7XFxuIDYwNjpcXHRcXHRpbnQgcmV0O1xcbiA2MDc6XFx0XFx0dW5zaWduZWQgbG9uZyBzdGFja19zaGlmdDtcXG4gNjA4OlxcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC1cXHUwMDNlbW07XFxuIDYwOTpcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IGJwcm0tXFx1MDAzZXZtYTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDM6NTQ6NTIuNDg1NTE4ODU1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMzUxMzQwMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5yZWFjaGFibGUgQ29kZSBhbmQgRnV6emluZyBTdHJhdGVnaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgc2V0dXBfYXJnX3BhZ2VzYCBmdW5jdGlvbiwgYW5kIGl0J3MgZGVmaW5pdGVseSB0aWVkIHRvIGBDT05GSUdfTU1VYCwgd2hpbGUgYHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2tgIHNlZW1zIHRvIGJlIHRoZSBmYWxsYmFjayBmb3IgYCFDT05GSUdfTU1VYC4gVGhhdCBtYWtlcyBzZW5zZS4gVGhlIHByb2JsZW0gaXMsIGB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrYCBvbmx5IGV4aXN0cyB3aGVuIHdlICpkb24ndCogaGF2ZSBhbiBNTVUuIEFuZCwgaWYgSSByZWNhbGwgY29ycmVjdGx5LCBzeXprYWxsZXIgZG9lc24ndCBhY3R1YWxseSBmdXp6IGNvbmZpZ3VyYXRpb25zIHdpdGhvdXQgYW4gTU1VLCByaWdodD8gSXQncyBub3QgYSBjb21tb24gdGFyZ2V0LiBQbHVzLCB3ZSBjYW4ndCBmb3JjZSBlbmFibGUgYCFDT05GSUdfTU1VYCB0aHJvdWdoIGBFbmFibGVDb25maWdzYCBiZWNhdXNlIGl0J3MgYSBkaXNhYmxpbmcgb3B0aW9uISBTbywgaW4gdGhlIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnQsIHRoaXMgY29kZSBpcywgcHJhY3RpY2FsbHkgc3BlYWtpbmcsIHVucmVhY2hhYmxlLlxuXG5CdXQgd2FpdCBhIG1pbnV0ZeKApiBBcmUgdGhlcmUgKmFueSogc3l6a2FsbGVyIGluc3RhbmNlcyB3aGVyZSBgQ09ORklHX01NVWAgaXMgZGlzYWJsZWQ/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBhc3N1bXB0aW9uLiBUaGUgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCBzeXprYWxsZXIgKm9ubHkqIGZvY3VzZXMgb24gTU1VLWVuYWJsZWQgYXJjaGl0ZWN0dXJlcywgYnV0IEkgc2hvdWxkIGNvbmZpcm0gdGhhdCdzIHVuaXZlcnNhbGx5IHRydWUuXG5cbk9rYXksIGxldCdzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgYW5vdGhlciBwb3NzaWJsZSBhbmdsZS4gQ291bGQgdGhlcmUgYmUgYSBzaXR1YXRpb24gd2hlcmUgYEJJTkZNVF9FTEZfRkRQSUNgIGlzIGVuYWJsZWQsIGJ1dCBgQ09ORklHX01NVWAgaXMgKmFsc28qIGVuYWJsZWQ/IFRoYXQgY291bGQgbGVhZCB0byBzb21lIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaW4gaG93IGFyZ3VtZW50cyBhcmUgaGFuZGxlZC4gSXQncyBhIGJpdCBvZiBhIGxvbmcgc2hvdCwgYnV0IHdvcnRoIGEgbG9vay4gSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgYGZzL2JpbmZtdF9lbGZfZmRwaWMuY2AgYWxvbmdzaWRlIHRoZSBgdHJhbnNmZXJfYXJnc190b19zdGFja2AgZnVuY3Rpb24gdG8gbWFrZSBzdXJlIHRoZXkncmUgY29tcGF0aWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1MjYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMzo1NDo1Ni44MjA2NTYyMzFaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2OTA0OTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyYW5zZmVyX2FyZ3NfdG9fc3RhY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvYmluZm10X2VsZl9mZHBpYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2JpbmZtdF9lbGZfZmRwaWMuYz00OTY9c3RhdGljIGludCBjcmVhdGVfZWxmX2ZkcGljX3RhYmxlcyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxcbi0tXFxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTUyMi1cXHQvKiBzdGFjayB0aGUgcHJvZ3JhbSBhcmd1bWVudHMgYW5kIGVudmlyb25tZW50ICovXFxuZnMvYmluZm10X2VsZl9mZHBpYy5jOjUyMzpcXHRpZiAodHJhbnNmZXJfYXJnc190b19zdGFjayhicHJtLCBcXHUwMDI2c3ApIFxcdTAwM2MgMClcXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtNTI0LVxcdFxcdHJldHVybiAtRUZBVUxUO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMzo1NDo1Ni44ODc1NjU4ODhaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc1MDE1OTIwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkNoZWNraW5nIGBmcy9iaW5mbXRfZWxmX2ZkcGljLmNgJ3MgTU1VIERlcGVuZGVuY3kqKlxuXG5BbHJpZ2h0LCBsZXQgbWUgcXVpY2tseSBhc3Nlc3MgdGhpcy4gSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGUgY29tcGlsYXRpb24gb2YgYGZzL2JpbmZtdF9lbGZfZmRwaWMuY2AgaXMgY29uZGl0aW9uYWwgb24gYENPTkZJR19NTVVgIGJlaW5nIGVuYWJsZWQuIEl0J3MgYSBrZXkgcGllY2Ugb2YgdGhlIEVMRiBpbnRlcnByZXRlciwgc3BlY2lmaWNhbGx5IGZvciB0aGUgRkQtUElDIHZhcmlhbnQsIHNvIHRoZSByZWxhdGlvbnNoaXAgaXMgbGlrZWx5IGltcG9ydGFudCB0byB1bmRlcnN0YW5kIGZvciBhbnkgYnVpbGQgY29uZmlndXJhdGlvbiwgYW5kIGNlcnRhaW5seSBpbXBvcnRhbnQgaW4gdGVybXMgb2YgaXRzIHJlbGF0aW9uIHRvIGRpZmZlcmVudCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBtZW50YWxseSBmbGFnIHRoaXMsIGRlcGVuZGluZyBvbiB3aGF0IEkgZmluZCwgYXMgdGhpcyBjb3VsZCBoYXZlIGltcGxpY2F0aW9ucyBmb3IgaXRzIGludGVncmF0aW9uIGludG8gZGlmZmVyZW50IHN5c3RlbXMgYW5kIGFyY2hpdGVjdHVyZXMgSSBhbSB3b3JraW5nIG9uLiBMZXQncyBzZWUgaWYgdGhpcyBoYXMgYSBjb25kaXRpb25hbCBjb21waWxhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyNDIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMzo1NDo1OS42Mzc3Mjc3MzVaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwOTY1NzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCSU5GTVRfRUxGX0ZEUElDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL0tjb25maWcuYmluZm10XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWcuYmluZm10PTU1PWNvbmZpZyBBUkNIX1VTRV9HTlVfUFJPUEVSVFlcXG4tLVxcbmZzL0tjb25maWcuYmluZm10LTU3LVxcbmZzL0tjb25maWcuYmluZm10OjU4OmNvbmZpZyBCSU5GTVRfRUxGX0ZEUElDXFxuZnMvS2NvbmZpZy5iaW5mbXQtNTktXFx0Ym9vbCBcXFwiS2VybmVsIHN1cHBvcnQgZm9yIEZEUElDIEVMRiBiaW5hcmllc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDM6NTQ6NTkuNjk4NzAxMzg0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNTU2MjA5OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYGZzL0tjb25maWcuYmluZm10YCoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgbGV0J3MgemVybyBpbiBvbiBgZnMvS2NvbmZpZy5iaW5mbXRgLiBJIHNlZW0gdG8gcmVjYWxsIHNvbWV0aGluZyBpbnRlcmVzdGluZyBhcm91bmQgbGluZSA1OC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgaG93IHRoZSBrZXJuZWwgY29uZmlndXJlcyBiaW5hcnkgZm9ybWF0IHN1cHBvcnQuIEdpdmVuIG15IGJhY2tncm91bmQgaW4ga2VybmVsIGludGVybmFscywgSSdtIHByb2JhYmx5IGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBvZiBkaWZmZXJlbnQgYmluYXJ5IGhhbmRsZXJzIOKAkyBFTEYsIGEub3V0LCBtYXliZSBzY3JpcHQtYmFzZWQgZXhlY3V0aW9uLCB0aGF0IHNvcnQgb2YgdGhpbmcuIEkgd2FudCB0byBxdWlja2x5IHVuZGVyc3RhbmQgdGhlICpleGFjdCogZGVwZW5kZW5jaWVzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJvdW5kIHRoaXMgc2VjdGlvbjsgaXMgaXQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljLCB3aGF0IGFyZSB0aGUgcmVsZXZhbnQgc3ltYm9scywgYW5kIHdoYXQgYnJvYWRlciBlZmZlY3Qgb24gdGhlIHN5c3RlbSBidWlsZCBwcm9jZXNzIGRvZXMgaXQgaGF2ZT8gSSBiZXQgaXQgZGVhbHMgd2l0aCB0aGUgYENPTkZJR19CSU5GTVRfKmAgc3ltYm9scy4gS25vd2luZyB0aGlzLCBJIGV4cGVjdCB0byBzZWUgYW4gaW1tZWRpYXRlIGltcGFjdCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW0gYnVpbGQgcHJvY2Vzcy4gSSdtIGhvcGluZyB0byBxdWlja2x5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMgZm9yIGEgcGFydGljdWxhciBhcmNoaXRlY3R1cmUgSSdtIHdvcmtpbmcgd2l0aDsgcGVyaGFwcyB0aGVyZSdzIHNvbWV0aGluZyBwbGF0Zm9ybS1zcGVjaWZpYyB0aGF0J3MgaW5mbHVlbmNpbmcgdGhlIGF2YWlsYWJsZSBiaW5mbXQgaGFuZGxlcnMgb3IgY2F1c2luZyBhbiBpbmNvbXBhdGliaWxpdHkuIExpbmUgNTggbWlnaHQganVzdCBiZSBhIGtleSBub2RlIGluIHRoZSBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1NzAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMzo1NTowMi44NTQzMjU2OTZaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzIwNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvS2NvbmZpZy5iaW5mbXRcIixcbiAgXCJGaXJzdExpbmVcIjogNTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNTA6XFx0XFx0Ym9vbFxcbiAgNTE6XFx0XFxuICA1MjpcXHRjb25maWcgQVJDSF9IQVZFX0VMRl9QUk9UXFxuICA1MzpcXHRcXHRib29sXFxuICA1NDpcXHRcXG4gIDU1OlxcdGNvbmZpZyBBUkNIX1VTRV9HTlVfUFJPUEVSVFlcXG4gIDU2OlxcdFxcdGJvb2xcXG4gIDU3OlxcdFxcbiAgNTg6XFx0Y29uZmlnIEJJTkZNVF9FTEZfRkRQSUNcXG4gIDU5OlxcdFxcdGJvb2wgXFxcIktlcm5lbCBzdXBwb3J0IGZvciBGRFBJQyBFTEYgYmluYXJpZXNcXFwiXFxuICA2MDpcXHRcXHRkZWZhdWx0IHkgaWYgIUJJTkZNVF9FTEZcXG4gIDYxOlxcdFxcdGRlcGVuZHMgb24gQVJNIHx8ICgoTTY4SyB8fCBSSVNDViB8fCBTVVBFUkggfHwgWFRFTlNBKSBcXHUwMDI2XFx1MDAyNiAhTU1VKVxcbiAgNjI6XFx0XFx0c2VsZWN0IEVMRkNPUkVcXG4gIDYzOlxcdFxcdGhlbHBcXG4gIDY0OlxcdFxcdCAgRUxGIEZEUElDIGJpbmFyaWVzIGFyZSBiYXNlZCBvbiBFTEYsIGJ1dCBhbGxvdyB0aGUgaW5kaXZpZHVhbCBsb2FkXFxuICA2NTpcXHRcXHQgIHNlZ21lbnRzIG9mIGEgYmluYXJ5IHRvIGJlIGxvY2F0ZWQgaW4gbWVtb3J5IGluZGVwZW5kZW50bHkgb2YgZWFjaFxcbiAgNjY6XFx0XFx0ICBvdGhlci4gVGhpcyBtYWtlcyB0aGlzIGZvcm1hdCBpZGVhbCBmb3IgdXNlIGluIGVudmlyb25tZW50cyB3aGVyZSBub1xcbiAgNjc6XFx0XFx0ICBNTVUgaXMgYXZhaWxhYmxlIGFzIGl0IHN0aWxsIHBlcm1pdHMgdGV4dCBzZWdtZW50cyB0byBiZSBzaGFyZWQsXFxuICA2ODpcXHRcXHQgIGV2ZW4gaWYgZGF0YSBzZWdtZW50cyBhcmUgbm90LlxcbiAgNjk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDAzOjU1OjAyLjg1NDM5OTI0NloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjA3OTcwMjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEJJTkZNVF9FTEZfRkRQSUMgYW5kIFRyYW5zZmVycmluZyBBcmd1bWVudHMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBgQklORk1UX0VMRl9GRFBJQ2AgZmVhdHVyZSBpcyBlbmFibGVkIGlmIGl0J3MgYW4gQVJNIGFyY2hpdGVjdHVyZSwgKm9yKiBpZiBpdCdzIG9uZSBvZiBNNjhLLCBSSVNDViwgU1VQRVJILCBvciBYVEVOU0EgKmFuZCogZG9lc24ndCBoYXZlIGFuIE1NVS4gVGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZC4gU28sIHRoZSBxdWVzdGlvbiB0aGF0IHNwcmluZ3MgdG8gbWluZCBpcyB3aGV0aGVyIGBCSU5GTVRfRUxGX0ZEUElDYCBjYW4gYmUgY29tcGlsZWQgd2hlbiBydW5uaW5nIG9uIEFSTSAqd2l0aCogYW4gTU1VLlxuXG5Ob3csIGlmIHRoYXQncyB0aGUgY2FzZSwgYW5kIGBCSU5GTVRfRUxGX0ZEUElDYCAqaXMqIGNvbXBpbGVkIG9uIGFuIEFSTSBhcmNoaXRlY3R1cmUgd2l0aCBhbiBNTVUsIEkgbmVlZCB0byBrbm93IGlmIHRoZSBzeXN0ZW0gd2lsbCBpbnZva2UgYHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2tgLiBJIGp1c3QgY29uZmlybWVkIHRoYXQgYGZzL2JpbmZtdF9lbGZfZmRwaWMuY2AgZG9lcywgaW4gZmFjdCwgY2FsbCBgdHJhbnNmZXJfYXJnc190b19zdGFja2AuXG5cblRoZSByZWFsIGtpY2tlciBoZXJlIGlzLCB3aGVyZSBpcyBgdHJhbnNmZXJfYXJnc190b19zdGFja2AgZGVmaW5lZD8gSSBrbm93IHRoYXQgdXN1YWxseSBpdCdzIGRlZmluZWQgaW4gYGZzL2V4ZWMuY2AsICpidXQgb25seSogaWYgYENPTkZJR19NTVVgIGlzICpub3QqIGVuYWJsZWQhIFNvLCBpcyB0aGVyZSBhbiBhbHRlcm5hdGUgZGVmaW5pdGlvbiBzb21ld2hlcmUgZWxzZSBmb3IgTU1VLWVuYWJsZWQgc3lzdGVtcz8gVGhhdCdzIHRoZSBjcnVjaWFsIHBvaW50IEkgbmVlZCB0byBpbnZlc3RpZ2F0ZS4gSSd2ZSBnb3QgYSBwb3RlbnRpYWwgY29uZmxpY3QgaGVyZSwgSSdsbCBoYXZlIHRvIHNlZSB3aGVyZSBpdCBjb21lcyBmcm9tLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDE2MywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDAzOjU1OjA3LjQ2MjM3NzAxMVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzMTMxMzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyYW5zZmVyX2FyZ3NfdG9fc3RhY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2JpbmZtdF9lbGZfZmRwaWMuYz00OTY9c3RhdGljIGludCBjcmVhdGVfZWxmX2ZkcGljX3RhYmxlcyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxcbi0tXFxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTUyMi1cXHQvKiBzdGFjayB0aGUgcHJvZ3JhbSBhcmd1bWVudHMgYW5kIGVudmlyb25tZW50ICovXFxuZnMvYmluZm10X2VsZl9mZHBpYy5jOjUyMzpcXHRpZiAodHJhbnNmZXJfYXJnc190b19zdGFjayhicHJtLCBcXHUwMDI2c3ApIFxcdTAwM2MgMClcXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtNTI0LVxcdFxcdHJldHVybiAtRUZBVUxUO1xcbi0tXFxuZnMvYmluZm10X2ZsYXQuYz04NTU9c3RhdGljIGludCBsb2FkX2ZsYXRfYmluYXJ5KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuLS1cXG5mcy9iaW5mbXRfZmxhdC5jLTkxMS1cXHQvKiBjb3B5IHRoZSBhcmcgcGFnZXMgb250byB0aGUgc3RhY2sgKi9cXG5mcy9iaW5mbXRfZmxhdC5jOjkxMjpcXHRyZXMgPSB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrKGJwcm0sIFxcdTAwMjZjdXJyZW50LVxcdTAwM2VtbS1cXHUwMDNlc3RhcnRfc3RhY2spO1xcbmZzL2JpbmZtdF9mbGF0LmMtOTEzLVxcdGlmICghcmVzKVxcbi0tXFxuZnMvZXhlYy5jPTcyNj1FWFBPUlRfU1lNQk9MKHNldHVwX2FyZ19wYWdlcyk7XFxuLS1cXG5mcy9leGVjLmMtNzMzLSAqL1xcbmZzL2V4ZWMuYzo3MzQ6aW50IHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2soc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcXG5mcy9leGVjLmMtNzM1LVxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgKnNwX2xvY2F0aW9uKVxcbi0tXFxuZnMvZXhlYy5jLTc1OS19XFxuZnMvZXhlYy5jOjc2MDpFWFBPUlRfU1lNQk9MKHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2spO1xcbmZzL2V4ZWMuYy03NjEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDAzOjU1OjA3LjU2NTUxNDE4OVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDYyNTYzMzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgRUxGX0ZEUElDIGFuZCBNTVUgQ29tcGF0aWJpbGl0eSoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIFRoaXMgZG9lc24ndCBxdWl0ZSBhZGQgdXAuIFRoZSBjb2RlIHNlZW1zIHRvIGJlIGluZGljYXRpbmcgdGhhdCBgdHJhbnNmZXJfYXJnc190b19zdGFja2AgaXMgb25seSBkZWZpbmVkIGlmIHdlICpkb24ndCogaGF2ZSBgQ09ORklHX01NVWAgZW5hYmxlZC4gVGhhdCBmZWVscyB3cm9uZywgYmVjYXVzZSBJIGtub3cgd2UgaGF2ZSBFTEYgRkRQSUMgYmluYXJpZXMgdGhhdCBjb21waWxlIG9uIEFSTSBhcmNoaXRlY3R1cmVzICp3aXRoKiBhbiBNTVUuIEhvdyBpcyB0aGlzIHdvcmtpbmc/IEkgbmVlZCB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLlxuXG5UaGUgb2J2aW91cyBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgc291cmNlLiBMZXQgbWUgZ28gZGlyZWN0bHkgdG8gYGZzL2JpbmZtdF9lbGZfZmRwaWMuY2AgYW5kIGh1bnQgZm9yIHRoYXQgYCNpZm5kZWYgQ09ORklHX01NVWAgY29uZGl0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24gd2l0aGluIHRoYXQgZmlsZSwgaG93IGl0J3MgZGVhbGluZyB3aXRoIHRoZSBzdGFjayBhcmd1bWVudCB0cmFuc2ZlciwgYW5kIHdoZXJlIHRoaXMgcG90ZW50aWFsbHkgY29uZGl0aW9uYWwgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIGZyb20uIFRoZXJlIG11c3QgYmUgc29tZSBhZGRpdGlvbmFsIGxvZ2ljIHRoYXQgSSBhbSBtaXNzaW5nLiBMZXQncyBzZWUgaWYgdGhpcyByZXZlYWxzIHRoZSBkaXNjcmVwYW5jeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUwNzYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMzo1NToxMS4wMjgwODAyMTdaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMTQ5ODI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19NTVVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvYmluZm10X2VsZl9mZHBpYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2JpbmZtdF9lbGZfZmRwaWMuYz02ND1zdGF0aWMgaW50IGNyZWF0ZV9lbGZfZmRwaWNfdGFibGVzKHN0cnVjdCBsaW51eF9iaW5wcm0gKiwgc3RydWN0IG1tX3N0cnVjdCAqLFxcbi0tXFxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTY3LVxcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYzo2ODojaWZuZGVmIENPTkZJR19NTVVcXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtNjktc3RhdGljIGludCBlbGZfZmRwaWNfbWFwX2ZpbGVfY29uc3RkaXNwX29uX3VjbGludXgoc3RydWN0IGVsZl9mZHBpY19wYXJhbXMgKixcXG4tLVxcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYz0xODI9c3RhdGljIGludCBsb2FkX2VsZl9mZHBpY19iaW5hcnkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG4tLVxcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYy0xOTAtI2VuZGlmXFxuZnMvYmluZm10X2VsZl9mZHBpYy5jOjE5MTojaWZuZGVmIENPTkZJR19NTVVcXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtMTkyLVxcdHVuc2lnbmVkIGxvbmcgc3RhY2tfcHJvdDtcXG4tLVxcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYy0yMTItXFx0aWYgKCFlbGZfY2hlY2tfZmRwaWMoXFx1MDAyNmV4ZWNfcGFyYW1zLmhkcikpIHtcXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmM6MjEzOiNpZmRlZiBDT05GSUdfTU1VXFxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTIxNC1cXHRcXHQvKiBiaW5mbXRfZWxmIGhhbmRsZXMgbm9uLWZkcGljIGVsZiBleGNlcHQgb24gbm9tbXUgKi9cXG4tLVxcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYy0yODgtXFx0XFx0Y2FzZSBQVF9MT0FEOlxcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYzoyODk6I2lmZGVmIENPTkZJR19NTVVcXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtMjkwLVxcdFxcdFxcdGlmIChleGVjX3BhcmFtcy5sb2FkX2FkZHIgPT0gMClcXG4tLVxcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYy0zNjUtXFxuZnMvYmluZm10X2VsZl9mZHBpYy5jOjM2NjojaWZkZWYgQ09ORklHX01NVVxcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYy0zNjctXFx0ZWxmX2ZkcGljX2FyY2hfbGF5X291dF9tbShcXHUwMDI2ZXhlY19wYXJhbXMsXFxuLS1cXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtNDAxLVxcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYzo0MDI6I2lmZGVmIENPTkZJR19NTVVcXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtNDAzLVxcdGlmICghY3VycmVudC1cXHUwMDNlbW0tXFx1MDAzZXN0YXJ0X2JyaylcXG4tLVxcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYz00OTY9c3RhdGljIGludCBjcmVhdGVfZWxmX2ZkcGljX3RhYmxlcyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxcbi0tXFxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTUxMS1cXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmM6NTEyOiNpZmRlZiBDT05GSUdfTU1VXFxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTUxMy1cXHQvKiBJbiBzb21lIGNhc2VzIChlLmcuIEh5cGVyLVRocmVhZGluZyksIHdlIHdhbnQgdG8gYXZvaWQgTDEgZXZpY3Rpb25zXFxuLS1cXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtNjk1LVxcdC8qIGZpbGwgaW4gdGhlIGFyZ3ZbXSBhcnJheSAqL1xcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYzo2OTY6I2lmZGVmIENPTkZJR19NTVVcXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtNjk3LVxcdGN1cnJlbnQtXFx1MDAzZW1tLVxcdTAwM2Vhcmdfc3RhcnQgPSBicHJtLVxcdTAwM2VwO1xcbi0tXFxuZnMvYmluZm10X2VsZl9mZHBpYy5jPTc0NT1zdGF0aWMgaW50IGVsZl9mZHBpY19tYXBfZmlsZShzdHJ1Y3QgZWxmX2ZkcGljX3BhcmFtcyAqcGFyYW1zLFxcbi0tXFxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTc1MC1cXHRzdHJ1Y3QgZWxmX2ZkcGljX2xvYWRtYXAgKmxvYWRtYXA7XFxuZnMvYmluZm10X2VsZl9mZHBpYy5jOjc1MTojaWZkZWYgQ09ORklHX01NVVxcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYy03NTItXFx0c3RydWN0IGVsZl9mZHBpY19sb2Fkc2VnICptc2VnO1xcbi0tXFxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTc4Mi1cXHRjYXNlIEVMRl9GRFBJQ19GTEFHX0NPTlRJR1VPVVM6XFxuZnMvYmluZm10X2VsZl9mZHBpYy5jOjc4MzojaWZuZGVmIENPTkZJR19NTVVcXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtNzg0LVxcdFxcdHJldCA9IGVsZl9mZHBpY19tYXBfZmlsZV9jb25zdGRpc3Bfb25fdWNsaW51eChwYXJhbXMsIGZpbGUsIG1tKTtcXG4tLVxcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYy04NzctXFx0ICovXFxuZnMvYmluZm10X2VsZl9mZHBpYy5jOjg3ODojaWZkZWYgQ09ORklHX01NVVxcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYy04NzktXFx0bmxvYWRzID0gbG9hZG1hcC1cXHUwMDNlbnNlZ3M7XFxuLS1cXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtOTI4LSAqL1xcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYzo5Mjk6I2lmbmRlZiBDT05GSUdfTU1VXFxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTkzMC1zdGF0aWMgaW50IGVsZl9mZHBpY19tYXBfZmlsZV9jb25zdGRpc3Bfb25fdWNsaW51eChcXG4tLVxcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYz0xMDE1PXN0YXRpYyBpbnQgZWxmX2ZkcGljX21hcF9maWxlX2J5X2RpcmVjdF9tbWFwKHN0cnVjdCBlbGZfZmRwaWNfcGFyYW1zICpwYXJhbXMsXFxuLS1cXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtMTEyOS1cXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmM6MTEzMDojaWZkZWYgQ09ORklHX01NVVxcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYy0xMTMxLVxcdFxcdHVuc2lnbmVkIGxvbmcgZXhjZXNzMVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMzo1NToxMS4wOTEyNTYxNDVaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkyNjAwODk3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgRkRQSUMgRUxGIEludGVycHJldGVyKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCBiYXNlZCBvbiB0aGUgY3VycmVudCBjb250ZXh0LCB0aGUgaXNzdWUncyBwcm9iYWJseSByZWxhdGVkIHRvIGhvdyB3ZSdyZSBoYW5kbGluZyBGRFBJQy1zcGVjaWZpYyBFTEYgYmluYXJpZXMuIFRpbWUgdG8ganVtcCBpbnRvIHRoZSBjb2RlIGRpcmVjdGx5LiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBzdGFydCBieSBsb29raW5nIGF0IGBmcy9iaW5mbXRfZWxmX2ZkcGljLmNgIGFuZCB6ZXJvaW5nIGluIGFyb3VuZCBsaW5lIDUxMi4gVGhhdCBsb2NhdGlvbiBmZWVscyBsaWtlIGEgbGlrZWx5IHNwb3QgdG8gZmluZCB0aGUgY29yZSBsb2dpYyBmb3IgdGhlIGR5bmFtaWMgbGlua2luZyBvciByZWxvY2F0aW9uIHByb2Nlc3MsIHRoZSBhcmVhIEkgc3VzcGVjdCB0aGUgYnVnIG1pZ2h0IGJlIGx1cmtpbmcuIEl04oCZcyB3aGVyZSB0aGluZ3MgdXN1YWxseSBnZXQgaW50ZXJlc3Rpbmcgd2hlbiBkZWFsaW5nIHdpdGggRkRQSUMncyBhZGRyZXNzIHNwYWNlIG1hbmlwdWxhdGlvbnMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBleGFjdGx5IGhvdyB3ZSdyZSBtYW5hZ2luZyB0aGUgR09UL1BMVCBlbnRyaWVzIHRoZXJlIGFuZCBpZiB0aGVyZSdzIGFueSBvYnZpb3VzIGZsYXcgaW4gdGhlIGFyZ3VtZW50IGhhbmRsaW5nIG9yIHBvaW50ZXIgZGVyZWZlcmVuY2luZyB0aGF0IGNvdWxkIGJlIGNhdXNpbmcgdGhlIG9ic2VydmVkIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjYzMCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDAzOjU1OjE0LjAxNzI2NzUzMVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDIyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvYmluZm10X2VsZl9mZHBpYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUwMDpcXHR7XFxuIDUwMTpcXHRcXHRjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCA9IGN1cnJlbnRfY3JlZCgpO1xcbiA1MDI6XFx0XFx0dW5zaWduZWQgbG9uZyBzcCwgY3NwLCBuaXRlbXM7XFxuIDUwMzpcXHRcXHRlbGZfY2FkZHJfdCBfX3VzZXIgKmFyZ3YsICplbnZwO1xcbiA1MDQ6XFx0XFx0c2l6ZV90IHBsYXRmb3JtX2xlbiA9IDAsIGxlbjtcXG4gNTA1OlxcdFxcdGNoYXIgKmtfcGxhdGZvcm0sICprX2Jhc2VfcGxhdGZvcm07XFxuIDUwNjpcXHRcXHRjaGFyIF9fdXNlciAqdV9wbGF0Zm9ybSwgKnVfYmFzZV9wbGF0Zm9ybSwgKnA7XFxuIDUwNzpcXHRcXHRpbnQgbG9vcDtcXG4gNTA4OlxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwO1xcbiA1MDk6XFx0XFx0aW50IGVpX2luZGV4O1xcbiA1MTA6XFx0XFx0ZWxmX2FkZHJfdCAqZWxmX2luZm87XFxuIDUxMTpcXHRcXG4gNTEyOlxcdCNpZmRlZiBDT05GSUdfTU1VXFxuIDUxMzpcXHRcXHQvKiBJbiBzb21lIGNhc2VzIChlLmcuIEh5cGVyLVRocmVhZGluZyksIHdlIHdhbnQgdG8gYXZvaWQgTDEgZXZpY3Rpb25zXFxuIDUxNDpcXHRcXHQgKiBieSB0aGUgcHJvY2Vzc2VzIHJ1bm5pbmcgb24gdGhlIHNhbWUgcGFja2FnZS4gT25lIHRoaW5nIHdlIGNhbiBkbyBpc1xcbiA1MTU6XFx0XFx0ICogdG8gc2h1ZmZsZSB0aGUgaW5pdGlhbCBzdGFjayBmb3IgdGhlbSwgc28gd2UgZ2l2ZSB0aGUgYXJjaGl0ZWN0dXJlXFxuIDUxNjpcXHRcXHQgKiBhbiBvcHBvcnR1bml0eSB0byBkbyBzbyBoZXJlLlxcbiA1MTc6XFx0XFx0ICovXFxuIDUxODpcXHRcXHRzcCA9IGFyY2hfYWxpZ25fc3RhY2soYnBybS1cXHUwMDNlcCk7XFxuIDUxOTpcXHQjZWxzZVxcbiA1MjA6XFx0XFx0c3AgPSBtbS1cXHUwMDNlc3RhcnRfc3RhY2s7XFxuIDUyMTpcXHRcXG4gNTIyOlxcdFxcdC8qIHN0YWNrIHRoZSBwcm9ncmFtIGFyZ3VtZW50cyBhbmQgZW52aXJvbm1lbnQgKi9cXG4gNTIzOlxcdFxcdGlmICh0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrKGJwcm0sIFxcdTAwMjZzcCkgXFx1MDAzYyAwKVxcbiA1MjQ6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDUyNTpcXHRcXHRzcCBcXHUwMDI2PSB+MTU7XFxuIDUyNjpcXHQjZW5kaWZcXG4gNTI3OlxcdFxcbiA1Mjg6XFx0XFx0LypcXG4gNTI5OlxcdFxcdCAqIElmIHRoaXMgYXJjaGl0ZWN0dXJlIGhhcyBhIHBsYXRmb3JtIGNhcGFiaWxpdHkgc3RyaW5nLCBjb3B5IGl0XFxuIDUzMDpcXHRcXHQgKiB0byB1c2Vyc3BhY2UuICBJbiBzb21lIGNhc2VzIChTcGFyYyksIHRoaXMgaW5mbyBpcyBpbXBvc3NpYmxlXFxuIDUzMTpcXHRcXHQgKiBmb3IgdXNlcnNwYWNlIHRvIGdldCBhbnkgb3RoZXIgd2F5LCBpbiBvdGhlcnMgKGkzODYpIGl0IGlzXFxuIDUzMjpcXHRcXHQgKiBtZXJlbHkgZGlmZmljdWx0LlxcbiA1MzM6XFx0XFx0ICovXFxuIDUzNDpcXHRcXHRrX3BsYXRmb3JtID0gRUxGX1BMQVRGT1JNO1xcbiA1MzU6XFx0XFx0dV9wbGF0Zm9ybSA9IE5VTEw7XFxuIDUzNjpcXHRcXG4gNTM3OlxcdFxcdGlmIChrX3BsYXRmb3JtKSB7XFxuIDUzODpcXHRcXHRcXHRwbGF0Zm9ybV9sZW4gPSBzdHJsZW4oa19wbGF0Zm9ybSkgKyAxO1xcbiA1Mzk6XFx0XFx0XFx0c3AgLT0gcGxhdGZvcm1fbGVuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMzo1NToxNC4wMTczNzExMDFaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgxNDkzOTQyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBBcmNoaXRlY3R1cmUqKlxuXG5SaWdodCwgc28gYHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2tgLi4uIFRoYXQncyBvbmx5IHRyaWdnZXJlZCB3aGVuIGBDT05GSUdfTU1VYCBpcyAqbm90KiBkZWZpbmVkIHdpdGhpbiBgZnMvYmluZm10X2VsZl9mZHBpYy5jYC4gSW50ZXJlc3RpbmcuIE15IG1lbnRhbCBtYXAgaXMgc3RhcnRpbmcgdG8gbGlnaHQgdXAgd2l0aCBwb3NzaWJpbGl0aWVzLiBUaGlzIHN1Z2dlc3RzIGEgdmVyeSBzcGVjaWZpYywgcmVzb3VyY2UtY29uc3RyYWluZWQgYXJjaGl0ZWN0dXJlLCBwcm9iYWJseSBzb21ldGhpbmcgZW1iZWRkZWQgb3IgcmVhbC10aW1lLiBUaGUgbGFjayBvZiBhIE1lbW9yeSBNYW5hZ2VtZW50IFVuaXQgKE1NVSkgaXMgYSBzaWduaWZpY2FudCBjbHVlLiBJdCBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggYSBkaWZmZXJlbnQgcGFyYWRpZ20sIGxpa2VseSBzaW1wbGVyIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBhIG1vcmUgZGlyZWN0IGFkZHJlc3Mgc3BhY2UuIFRoZSBgdHJhbnNmZXJfYXJnc190b19zdGFja2AgZnVuY3Rpb24gaXRzZWxmIG11c3QgYmUgaGFuZGxpbmcgdGhlIGNyaXRpY2FsIHRhc2sgb2YgcGxhY2luZyBjb21tYW5kLWxpbmUgYXJndW1lbnRzIG9udG8gdGhlIHN0YWNrIGluIHRoaXMgZW52aXJvbm1lbnQsIHdoaWNoIGlzIGZ1bmRhbWVudGFsIGZvciBwcm9ncmFtIGV4ZWN1dGlvbi5cblxuTm93LCB3aGVyZSBlbHNlIG1pZ2h0IHdlIHNlZSB0aGlzIGtpbmQgb2YgY29uZGl0aW9uYWwgYmVoYXZpb3I/IE5hdHVyYWxseSwgSSBuZWVkIHRvIGNoZWNrIGBmcy9iaW5mbXRfZmxhdC5jYC4gR2l2ZW4gdGhhdCBgZWxmX2ZkcGljYCBpcyByZWxhdGVkIHRvIGR5bmFtaWNhbGx5IGxpbmtlZCBleGVjdXRhYmxlcywgYW5kIHRoZSBgZmxhdGAgYmluZm10IGlzIG9mdGVuIGFzc29jaWF0ZWQgd2l0aCBzaW1wbGVyLCBwb3RlbnRpYWxseSBub24tcmVsb2NhdGFibGUgZm9ybWF0cywgSSBzdXNwZWN0IGBmbGF0YCBtaWdodCBhbHNvIGhhdmUgYSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBmb3IgaGFuZGxpbmcgdGhlc2Ugc2FtZSBhcmd1bWVudHMgb24gbm9uLU1NVSBzeXN0ZW1zLiBUaGlzIGlzIGFsbCBhYm91dCBlbnN1cmluZyBjb21wYXRpYmlsaXR5IGFuZCBlZmZpY2llbnQgb3BlcmF0aW9uIGFjcm9zcyBkaWZmZXJlbnQgaGFyZHdhcmUgY29uZmlndXJhdGlvbnMuIEknbSBndWVzc2luZyB3ZSdsbCBzZWUgcGFyYWxsZWwgbG9naWMgb3Igc2ltaWxhciBtZWNoYW5pc21zIHRoZXJlIHRvIGFjY29tcGxpc2ggdGhlIHNhbWUgYXJndW1lbnQgdHJhbnNmZXIsIGJ1dCBwb3RlbnRpYWxseSB1c2luZyBhIG1vcmUgYmFzaWMgb3Igb3B0aW1pemVkIG1ldGhvZCBzdWl0YWJsZSBmb3IgZW52aXJvbm1lbnRzIHdpdGhvdXQgYW4gTU1VLiBMZXQncyBzZWUgd2hhdCdzIGluIGBmbGF0LmNgLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NTE5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMzo1NToxNy44MzIzMTM0MDNaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNDEzMzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19NTVVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvYmluZm10X2ZsYXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9iaW5mbXRfZmxhdC5jPTQwNj1zdGF0aWMgaW50IGxvYWRfZmxhdF9maWxlKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXFxuLS1cXG5mcy9iaW5mbXRfZmxhdC5jLTUyNy1cXHQgKi9cXG5mcy9iaW5mbXRfZmxhdC5jOjUyODpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX01NVSkgXFx1MDAyNlxcdTAwMjYgIShmbGFncyBcXHUwMDI2IChGTEFUX0ZMQUdfUkFNfEZMQVRfRkxBR19HWklQKSkpIHtcXG5mcy9iaW5mbXRfZmxhdC5jLTUyOS1cXHRcXHQvKlxcbi0tXFxuZnMvYmluZm10X2ZsYXQuYy02MjAtXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgRkxBVF9GTEFHX0daSVApIHtcXG5mcy9iaW5mbXRfZmxhdC5jOjYyMTojaWZuZGVmIENPTkZJR19NTVVcXG5mcy9iaW5mbXRfZmxhdC5jLTYyMi1cXHRcXHRcXHRyZXN1bHQgPSBkZWNvbXByZXNzX2V4ZWMoYnBybSwgc2l6ZW9mKHN0cnVjdCBmbGF0X2hkciksXFxuLS1cXG5mcy9iaW5mbXRfZmxhdC5jLTY1My1cXHRcXHRcXHRpZiAoIUlTX0VSUl9WQUxVRShyZXN1bHQpKSB7XFxuZnMvYmluZm10X2ZsYXQuYzo2NTQ6I2lmbmRlZiBDT05GSUdfTU1VXFxuZnMvYmluZm10X2ZsYXQuYy02NTUtXFx0XFx0XFx0XFx0cmVzdWx0ID0gZGVjb21wcmVzc19leGVjKGJwcm0sIHRleHRfbGVuLCAoY2hhciAqKSBkYXRhcG9zLFxcbi0tXFxuZnMvYmluZm10X2ZsYXQuYy03MDctXFx0Y3VycmVudC1cXHUwMDNlbW0tXFx1MDAzZWJyayA9IChjdXJyZW50LVxcdTAwM2VtbS1cXHUwMDNlc3RhcnRfYnJrICsgMykgXFx1MDAyNiB+MztcXG5mcy9iaW5mbXRfZmxhdC5jOjcwODojaWZuZGVmIENPTkZJR19NTVVcXG5mcy9iaW5mbXRfZmxhdC5jLTcwOS1cXHRjdXJyZW50LVxcdTAwM2VtbS1cXHUwMDNlY29udGV4dC5lbmRfYnJrID0gbWVtcCArIG1lbXBfc2l6ZSAtIHN0YWNrX2xlbjtcXG4tLVxcbmZzL2JpbmZtdF9mbGF0LmM9ODU1PXN0YXRpYyBpbnQgbG9hZF9mbGF0X2JpbmFyeShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbi0tXFxuZnMvYmluZm10X2ZsYXQuYy04NzItXFx0ICovXFxuZnMvYmluZm10X2ZsYXQuYzo4NzM6I2lmbmRlZiBDT05GSUdfTU1VXFxuZnMvYmluZm10X2ZsYXQuYy04NzQtXFx0c3RhY2tfbGVuICs9IFBBR0VfU0laRSAqIE1BWF9BUkdfUEFHRVMgLSBicHJtLVxcdTAwM2VwOyAvKiB0aGUgc3RyaW5ncyAqL1xcbi0tXFxuZnMvYmluZm10X2ZsYXQuYy05MDAtXFxuZnMvYmluZm10X2ZsYXQuYzo5MDE6I2lmZGVmIENPTkZJR19NTVVcXG5mcy9iaW5mbXRfZmxhdC5jLTkwMi1cXHRyZXMgPSBzZXR1cF9hcmdfcGFnZXMoYnBybSwgU1RBQ0tfVE9QLCBFWFNUQUNLX0RFRkFVTFQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMzo1NToxNy44OTM3MzExNzJaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg3MjA2NTQwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgZnMvYmluZm10X2ZsYXQuY2AqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBmbGF0IGJpbmFyeSBmb3JtYXQgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGhvdyBpdCdzIGxvYWRlZCBhbmQgZXhlY3V0ZWQuIEkga25vdyB0aGVyZSdzIGEgZ29vZCBjaHVuayBvZiBjb2RlIGRlYWxpbmcgd2l0aCB0aGlzIGluIHRoZSBmaWxlc3lzdGVtIGhhbmRsaW5nLiBTbywgSSdtIHRoaW5raW5nLCBsZXQncyB6b29tIGluIG9uIGBmcy9iaW5mbXRfZmxhdC5jYCBhcm91bmQgbGluZSA5MDEuIFRoYXQgZmVlbHMgbGlrZSBhIGdvb2Qgc3BvdCB0byBzdGFydCBkaWdnaW5nLiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgbWVhdCBvZiB0aGUgbG9hZGVyIG9yIGludGVycHJldGVyIGZ1bmN0aW9uIGJlZ2lucy4gSSB3YW50IHRvIHNlZSB3aGF0J3MgaGFwcGVuaW5nIGF0IHRoYXQgbGV2ZWwgdG8gcGllY2UgdG9nZXRoZXIgdGhlIGxvYWRpbmcgcHJvY2Vzcy4gSSBoYXZlIGEgaHVuY2ggaXQncyByZWxhdGVkIHRvIHRoZSBgbG9hZF9mbGF0X2JpbmFyeWAgb3IgYGV4ZWNfZmxhdGAgb3Igc29tZXRoaW5nIGFsb25nIHRob3NlIGxpbmVzLiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSBhdCB0aGF0IGxvY2F0aW9uIGlzIGRvaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODUwOSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDAzOjU1OjIwLjc2NTc5ODkzNVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9iaW5mbXRfZmxhdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg5MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg5MDpcXHRcXHRcXHRcXHRcXHRsaWJpbmZvLmxpYl9saXN0W2pdLnN0YXJ0X2RhdGEgOiBVTkxPQURFRF9MSUI7XFxuIDg5MTpcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIF9fdXNlciAqcCA9ICh1bnNpZ25lZCBsb25nIF9fdXNlciAqKVxcbiA4OTI6XFx0XFx0XFx0XFx0XFx0bGliaW5mby5saWJfbGlzdFtpXS5zdGFydF9kYXRhO1xcbiA4OTM6XFx0XFx0XFx0XFx0cCAtPSBqICsgMTtcXG4gODk0OlxcdFxcdFxcdFxcdGlmIChwdXRfdXNlcih2YWwsIHApKVxcbiA4OTU6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDg5NjpcXHRcXHRcXHR9XFxuIDg5NzpcXHRcXHR9XFxuIDg5ODpcXHRcXG4gODk5OlxcdFxcdHNldF9iaW5mbXQoXFx1MDAyNmZsYXRfZm9ybWF0KTtcXG4gOTAwOlxcdFxcbiA5MDE6XFx0I2lmZGVmIENPTkZJR19NTVVcXG4gOTAyOlxcdFxcdHJlcyA9IHNldHVwX2FyZ19wYWdlcyhicHJtLCBTVEFDS19UT1AsIEVYU1RBQ0tfREVGQVVMVCk7XFxuIDkwMzpcXHRcXHRpZiAoIXJlcylcXG4gOTA0OlxcdFxcdFxcdHJlcyA9IGNyZWF0ZV9mbGF0X3RhYmxlcyhicHJtLCBicHJtLVxcdTAwM2VwKTtcXG4gOTA1OlxcdCNlbHNlXFxuIDkwNjpcXHRcXHQvKiBTdGFzaCBvdXIgaW5pdGlhbCBzdGFjayBwb2ludGVyIGludG8gdGhlIG1tIHN0cnVjdHVyZSAqL1xcbiA5MDc6XFx0XFx0Y3VycmVudC1cXHUwMDNlbW0tXFx1MDAzZXN0YXJ0X3N0YWNrID1cXG4gOTA4OlxcdFxcdFxcdCgoY3VycmVudC1cXHUwMDNlbW0tXFx1MDAzZWNvbnRleHQuZW5kX2JyayArIHN0YWNrX2xlbiArIDMpIFxcdTAwMjYgfjMpIC0gNDtcXG4gOTA5OlxcdFxcdHByX2RlYnVnKFxcXCJzcD0lbHhcXFxcblxcXCIsIGN1cnJlbnQtXFx1MDAzZW1tLVxcdTAwM2VzdGFydF9zdGFjayk7XFxuIDkxMDpcXHRcXG4gOTExOlxcdFxcdC8qIGNvcHkgdGhlIGFyZyBwYWdlcyBvbnRvIHRoZSBzdGFjayAqL1xcbiA5MTI6XFx0XFx0cmVzID0gdHJhbnNmZXJfYXJnc190b19zdGFjayhicHJtLCBcXHUwMDI2Y3VycmVudC1cXHUwMDNlbW0tXFx1MDAzZXN0YXJ0X3N0YWNrKTtcXG4gOTEzOlxcdFxcdGlmICghcmVzKVxcbiA5MTQ6XFx0XFx0XFx0cmVzID0gY3JlYXRlX2ZsYXRfdGFibGVzKGJwcm0sIGN1cnJlbnQtXFx1MDAzZW1tLVxcdTAwM2VzdGFydF9zdGFjayk7XFxuIDkxNTpcXHQjZW5kaWZcXG4gOTE2OlxcdFxcdGlmIChyZXMpXFxuIDkxNzpcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbiA5MTg6XFx0XFxuIDkxOTpcXHRcXHQvKiBGYWtlIHNvbWUgcmV0dXJuIGFkZHJlc3NlcyB0byBlbnN1cmUgdGhlIGNhbGwgY2hhaW4gd2lsbFxcbiA5MjA6XFx0XFx0ICogaW5pdGlhbGlzZSBsaWJyYXJ5IGluIG9yZGVyIGZvciB1cy4gIFdlIGFyZSByZXF1aXJlZCB0byBjYWxsXFxuIDkyMTpcXHRcXHQgKiBsaWIgMSBmaXJzdCwgdGhlbiAyLCAuLi4gYW5kIGZpbmFsbHkgdGhlIG1haW4gcHJvZ3JhbSAoaWQgMCkuXFxuIDkyMjpcXHRcXHQgKi9cXG4gOTIzOlxcdFxcdHN0YXJ0X2FkZHIgPSBsaWJpbmZvLmxpYl9saXN0WzBdLmVudHJ5O1xcbiA5MjQ6XFx0XFxuIDkyNTpcXHQjaWZkZWYgRkxBVF9QTEFUX0lOSVRcXG4gOTI2OlxcdFxcdEZMQVRfUExBVF9JTklUKHJlZ3MpO1xcbiA5Mjc6XFx0I2VuZGlmXFxuIDkyODpcXHRcXG4gOTI5OlxcdFxcdGZpbmFsaXplX2V4ZWMoYnBybSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDAzOjU1OjIwLjc2NTg5Njc1NVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDQwMzUwMDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIENvZGUncyBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2tgIGlzIG9ubHkgY29tcGlsZWQgd2hlbiBgQ09ORklHX01NVWAgaXMgZGlzYWJsZWQsIGFuZCB0aGF0J3MgdGhlIG9ubHkgcGxhY2UgaXQncyBjYWxsZWQuIEhtbSwgc2luY2Ugc3l6a2FsbGVyIGRvZXNuJ3QgdGFyZ2V0IGAhQ09ORklHX01NVWAgc3lzdGVtcywgYW5kIHdlIGNhbid0IHNwZWNpZnkgYCFDT05GSUdfTU1VYCBpbiBgRW5hYmxlQ29uZmlnc2AgKGl0IGhhcyB0byBiZSBleHBsaWNpdGx5IGVuYWJsZWQpLCB0aGlzIGNvZGUgaXMgZXNzZW50aWFsbHkgdW5yZWFjaGFibGUgaW4gb3VyIGZ1enppbmcgc2V0dXAuIEkgd29uZGVyLCB0aG91Z2gsIGFyZSB0aGVyZSAqYW55KiBzeXprYWxsZXIgdGFyZ2V0cyBvdXQgdGhlcmUgd2hlcmUgYENPTkZJR19NTVVgIG1pZ2h0IGJlIGRpc2FibGVkP1xuXG5Ob3csIHRoZSBwcm9tcHQgZ2l2ZXMgdXMgc29tZSBndWlkYW5jZS4gSXQgc2F5cyB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoIHRhcmdldHMgY29kZSB0aGF0J3MgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZSBlbXVsYXRpb24uIEl0ICppcyogdGVjaG5pY2FsbHkgcG9zc2libGUgdG8gcnVuIGEgbm8tTU1VIGtlcm5lbCBpbiBRRU1VIOKAkyBsaWtlIHdpdGggYHFlbXUtc3lzdGVtLWFybWAgYW5kIGEgbm8tTU1VIG1hY2hpbmUgb3IgYHFlbXUtc3lzdGVtLXJpc2N2NjRgIHdpdGggYSBuby1NTVUgbWFjaGluZS4gQnV0LCBkb2VzIHN5emthbGxlciBoYXZlIGEgc3RhbmRhcmQgc2V0dXAgZm9yIG5vLU1NVSBtYWNoaW5lcz8gSSBkb24ndCB0aGluayBzby4gVGhlIHByb21wdCBhbHNvIHJlcXVpcmVzIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgY29kZSBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgYnV0IHRoaXMgY29kZSAqaXMqIHJlYWNoYWJsZS5cblxuVGhlIHByb21wdCBhbHNvIGFza3MgZm9yIFwia2VybmVsIGNvbmZpZyBmbGFncyB0aGF0IG11c3QgYmUgZXhwbGljaXRseSBlbmFibGVkIHRvIGNvbXBpbGUgYW5kIHRlc3QgdGhlIG1vZGlmaWVkIGNvZGUuXCIgQnV0IGlmIHdlIG5lZWQgdG8gKmRpc2FibGUqIGBDT05GSUdfTU1VYCwgd2UgY2FuJ3QgZG8gaXQgdmlhIGBFbmFibGVDb25maWdzYC4gVGhhdOKAmXMgYSBkZWFkIGVuZC5cblxuV2FpdCwgaXMgdGhlcmUgKmFueSogb3RoZXIgcGxhY2UgYHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2tgIGdldHMgY29tcGlsZWQ/IExldCBtZSBkb3VibGUtY2hlY2suIE5vLCBpdCdzIG9ubHkgaW5zaWRlIHRoZSBgI2lmbmRlZiBDT05GSUdfTU1VYCBibG9jayBpbiBgZnMvZXhlYy5jYC4gSSdtIGNlcnRhaW4gdGhlcmUgYXJlbid0IGFueSBvdGhlciBwbGFjZXMgd2hlcmUgaXQncyB1c2VkIGVpdGhlci5cblxuTGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrIGFnYWluIGlmIHRoZXJlIGlzIGFueSBvdGhlciBwbGFjZSBpdCBpcyB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTQwMSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDAzOjU1OjI2LjgwNjI0OTE0M1oiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk0OTIzOTQwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9iaW5mbXRfZWxmX2ZkcGljLmM9NDk2PXN0YXRpYyBpbnQgY3JlYXRlX2VsZl9mZHBpY190YWJsZXMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcXG4tLVxcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYy01MjItXFx0Lyogc3RhY2sgdGhlIHByb2dyYW0gYXJndW1lbnRzIGFuZCBlbnZpcm9ubWVudCAqL1xcbmZzL2JpbmZtdF9lbGZfZmRwaWMuYzo1MjM6XFx0aWYgKHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2soYnBybSwgXFx1MDAyNnNwKSBcXHUwMDNjIDApXFxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTUyNC1cXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4tLVxcbmZzL2JpbmZtdF9mbGF0LmM9ODU1PXN0YXRpYyBpbnQgbG9hZF9mbGF0X2JpbmFyeShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbi0tXFxuZnMvYmluZm10X2ZsYXQuYy05MTEtXFx0LyogY29weSB0aGUgYXJnIHBhZ2VzIG9udG8gdGhlIHN0YWNrICovXFxuZnMvYmluZm10X2ZsYXQuYzo5MTI6XFx0cmVzID0gdHJhbnNmZXJfYXJnc190b19zdGFjayhicHJtLCBcXHUwMDI2Y3VycmVudC1cXHUwMDNlbW0tXFx1MDAzZXN0YXJ0X3N0YWNrKTtcXG5mcy9iaW5mbXRfZmxhdC5jLTkxMy1cXHRpZiAoIXJlcylcXG4tLVxcbmZzL2V4ZWMuYz03MjY9RVhQT1JUX1NZTUJPTChzZXR1cF9hcmdfcGFnZXMpO1xcbi0tXFxuZnMvZXhlYy5jLTczMy0gKi9cXG5mcy9leGVjLmM6NzM0OmludCB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXFxuZnMvZXhlYy5jLTczNS1cXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nICpzcF9sb2NhdGlvbilcXG4tLVxcbmZzL2V4ZWMuYy03NTktfVxcbmZzL2V4ZWMuYzo3NjA6RVhQT1JUX1NZTUJPTCh0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrKTtcXG5mcy9leGVjLmMtNzYxLVxcbi0tXFxuaW5jbHVkZS9saW51eC9iaW5mbXRzLmg9MTQwPWV4dGVybiBpbnQgc2V0dXBfYXJnX3BhZ2VzKHN0cnVjdCBsaW51eF9iaW5wcm0gKiBicHJtLFxcbi0tXFxuaW5jbHVkZS9saW51eC9iaW5mbXRzLmgtMTQyLVxcdFxcdFxcdCAgIGludCBleGVjdXRhYmxlX3N0YWNrKTtcXG5pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaDoxNDM6ZXh0ZXJuIGludCB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXFxuaW5jbHVkZS9saW51eC9iaW5mbXRzLmgtMTQ0LVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyAqc3BfbG9jYXRpb24pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMzo1NToyOC43NTU0OTI5MTdaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODUxMjkxMDY1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFzb25pbmcgQWJvdXQgRnV6emluZyBhIE5vbi1NTVUgU3BlY2lmaWMgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGZ1bmN0aW9uIGB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrYCwgYW5kIGl0IHNlZW1zIHRvIGJlIHNvbGVseSB3aXRoaW4gdGhlIGAjZWxzZWAgYmxvY2sgb2YgYW4gYCNpZmRlZiBDT05GSUdfTU1VYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLiBUaGlzIG1lYW5zIGl0J3Mgb25seSBjb21waWxlZCBhbmQgdXNlZCBpbiBhcmNoaXRlY3R1cmVzIHdoZXJlIGBDT05GSUdfTU1VYCBpcyAqZGlzYWJsZWQqLCByaWdodD9cblxuTGV0J3Mgc2Vl4oCmIG02OGssIHJpc2N2LCBzaCwgeHRlbnNhLCBhcm0gYXJlIGFyY2hpdGVjdHVyZXMgd2hlcmUgYENPTkZJR19NTVVgIGlzIGVhc2lseSBkaXNhYmxlZC4gU3l6a2FsbGVyLCBob3dldmVyLCBwcmltYXJpbHkgdGFyZ2V0cyB4ODZfNjQsIGFybTY0LCByaXNjdjY0LCBhbmQgczM5MHguIE9uIHJpc2N2NjQsIGBDT05GSUdfTU1VYCAqY2FuKiBiZSBkaXNhYmxlZCwgYnV04oCmXG5cbklmIEkgcmV0dXJuIGBXb3J0aEZ1enppbmc9dHJ1ZWAsIEkgaGF2ZSB0byBzcGVjaWZ5IGBFbmFibGVDb25maWdzYC4gSSBjYW4ndCBkaXJlY3RseSBzcGVjaWZ5IGAhTU1VYCB0aGVyZSwgd2hpY2ggaXMgYSBwcm9ibGVtLiBJZiBJIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCwgSSBjYW4gZXhwbGFpbiB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgZm9yIG5vbW11IGFyY2hpdGVjdHVyZXMgb25seSwgd2hpY2ggYXJlIG5vdCB0eXBpY2FsIHN5emthbGxlciB0YXJnZXRzIHRoYXQgcmVxdWlyZSBkaXNhYmxpbmcgYENPTkZJR19NTVVgLlxuXG5IYW5nIG9uLCB3aGF0IGlmIEkganVzdCBzZXQgYFdvcnRoRnV6emluZz1mYWxzZWAgYW5kIHVzZSB0aGUgcmVhc29uaW5nIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNvbXBpbGVkIGZvciBgIUNPTkZJR19NTVVgIGtlcm5lbHMsIHdoaWNoIFN5emthbGxlciB0eXBpY2FsbHkgZG9lc24ndCBmdXp6IGR1ZSB0byB0aGUgbmVlZCB0byBkaXNhYmxlIGBDT05GSUdfTU1VYCwgc29tZXRoaW5nIEkgY2FuJ3Qgc3BlY2lmeS5cblxuQWx0ZXJuYXRpdmVseSwgY291bGQgSSByZXR1cm4gYFdvcnRoRnV6emluZz10cnVlYCB3aXRoIGFuIGVtcHR5IGBFbmFibGVDb25maWdzYCBhbmQgYWRkIGB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrYCB0byBgRm9jdXNTeW1ib2xzYD8gSWYgSSBkaWQgdGhhdCwgdGhlIGZ1enppbmcgaW5mcmFzdHJ1Y3R1cmUgKndvdWxkKiB0cnkgdG8gZnV6eiBpdC4gQnV0LCBhbmQgdGhpcyBpcyBjcnVjaWFsLCBpdCAqd29uJ3QqIGJlIGNvbXBpbGVkIGluIHRoZSBkZWZhdWx0IGtlcm5lbCB0aGF0IGhhcyBgQ09ORklHX01NVT15YC4gU28gdGhlIGNvZGUgd291bGQgbmV2ZXIgYmUgcmVhY2hlZCwgYW5kIHRoZSBjb3ZlcmFnZSB3b3VsZCBiZSB6ZXJvIGFueXdheS5cblxuVGhlcmVmb3JlLCB0aGUgYmVzdCBvcHRpb24gaXMgY2xlYXJseSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIExldCBtZSBjb25maXJtIHRoaXMgaXMgY29ycmVjdOKAplxuXG5Pa2F5LCBsZXQgbWUgY2hlY2sgdGhlIGNvZGUgZGlyZWN0bHkuIEluIGBmcy9leGVjLmNgLCBJIHNlZTpcblxuYGBgY1xuI2lmZGVmIENPTkZJR19NTVVcbi4uLlxuaW50IHNldHVwX2FyZ19wYWdlcyguLi4pXG4uLi5cbiNlbHNlXG4uLi5cbmludCB0cmFuc2Zlcl9hcmdzX3RvX3N0YWNrKC4uLilcbi4uLlxuI2VuZGlmXG5gYGBcblxuWXVwLiBUaGF0J3MgKmV4YWN0bHkqIGFzIEkgc3VzcGVjdGVkLiBgdHJhbnNmZXJfYXJnc190b19zdGFja2AgaXMgKnN0cmljdGx5KiB3aXRoaW4gdGhlIGAjZWxzZWAgYmxvY2suIEl0J3MgaW1wb3NzaWJsZSB0byBjb21waWxlIHRoaXMgZnVuY3Rpb24gd2l0aCBgQ09ORklHX01NVWAgZW5hYmxlZC4gQW5kLCBzaW5jZSBzdGFuZGFyZCBrZXJuZWxzIChlc3BlY2lhbGx5IHRob3NlIHVzZWQgYnkgU3l6a2FsbGVyKSBoYXZlIGBDT05GSUdfTU1VPXlgLCB0aGlzIGNvZGUgaXMgY29tcGxldGVseSBjb21waWxlZCBvdXQuIFRodXMsIEkgd2lsbCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAsIGFuZCB3aWxsIGV4cGxhaW4gdGhpcyBpbiB0aGUgYFJlYXNvbmluZ2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNzYxLCJPdXRwdXRUb2tlbnMiOjEyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMzo1NTozNy4yNjg0MDcxMThaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBtb2RpZmllZCBmdW5jdGlvbiBgdHJhbnNmZXJfYXJnc190b19zdGFja2AgaXMgb25seSBjb21waWxlZCBhbmQgdXNlZCBvbiBub21tdSBhcmNoaXRlY3R1cmVzIChpdCBpcyBsb2NhdGVkIGluc2lkZSBhbiBgI2lmbmRlZiBDT05GSUdfTU1VYCBibG9jayBpbiBgZnMvZXhlYy5jYCkuIFN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzIGFuZCB2aXJ0dWFsaXplZCBzZXR1cHMgKGxpa2UgeDg2XzY0L2FybTY0IFFFTVUgb3IgR0NFKSBydW4gd2l0aCBgQ09ORklHX01NVT15YCwgbWVhbmluZyB0aGlzIGNvZGUgaXMgY29tcGxldGVseSBjb21waWxlZCBvdXQgYW5kIHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgbW9kaWZpZWQgZnVuY3Rpb24gYHRyYW5zZmVyX2FyZ3NfdG9fc3RhY2tgIGlzIG9ubHkgY29tcGlsZWQgYW5kIHVzZWQgb24gbm9tbXUgYXJjaGl0ZWN0dXJlcyAoaXQgaXMgbG9jYXRlZCBpbnNpZGUgYW4gYCNpZm5kZWYgQ09ORklHX01NVWAgYmxvY2sgaW4gYGZzL2V4ZWMuY2ApLiBTdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cyBhbmQgdmlydHVhbGl6ZWQgc2V0dXBzIChsaWtlIHg4Nl82NC9hcm02NCBRRU1VIG9yIEdDRSkgcnVuIHdpdGggYENPTkZJR19NTVU9eWAsIG1lYW5pbmcgdGhpcyBjb2RlIGlzIGNvbXBsZXRlbHkgY29tcGlsZWQgb3V0IGFuZCB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlwnbj[1] Phase: Running StartedAt: 2026-07-22 03:55:44 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlwnbj[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-22 03:55:44 +0000 UTC FinishedAt: 2026-07-22 03:55:49 +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,}