Name: series-workflow7gfml Phase: Running StartedAt: 2026-06-29 07:03:23 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gfml[0] Phase: Running StartedAt: 2026-06-29 07:03:23 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gfml[0].run-triage Phase: Running StartedAt: 2026-06-29 07:03:23 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gfml[0].run-triage(0) Phase: Running StartedAt: 2026-06-29 07:03:23 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +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+CgkJCTx0ZD4yMDI2LzA2LzI5IDA3OjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGFza3Mgd2l0aCBhIG51bGwgcm9vdCBvciBjd2QsIGJ1dCB0aGVyZSBpcyBjdXJyZW50bHkgbm8gd2F5IHRvIGNyZWF0ZSBzdWNoIGEgdGFzayBvciBzZXQgYSB0YXNrJiMzOTtzIHJvb3QvY3dkIHRvIG51bGwgZnJvbSB1c2VyIHNwYWNlIChvciBldmVuIHdpdGhpbiB0aGUga2VybmVsLCBvdXRzaWRlIG9mIHRoZSBuZXdseSBhZGRlZCBLVW5pdCB0ZXN0KS4gVGhlIG5ldyBsb2dpYyBpbiBwYXRoIHJlc29sdXRpb24gaXMgdW5yZWFjaGFibGUgZHVyaW5nIG5vcm1hbCBleGVjdXRpb24gYW5kIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA3OjE3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZDQxM2I5NmY1MDhkOWIyMWFjOGRiZmU0ZTRlYmMzNjUxOGNlYTUzYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVuIDI5IDA3OjE3OjUzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL0tjb25maWcgYi9mcy9LY29uZmlnXG5pbmRleCBjZjZhZTY0Nzc2ZTYyYy4uOTAyMzU5N2I2ZTJiZTggMTAwNjQ0XG4tLS0gYS9mcy9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9LY29uZmlnXG5AQCAtMTgsNiAmIzQzOzE4LDE3IEBAIGNvbmZpZyBWQUxJREFURV9GU19QQVJTRVJcbiBjb25maWcgRlNfSU9NQVBcbiBcdGJvb2xcbiBcbiYjNDM7Y29uZmlnIE5VTExfUk9PVF9DV0RfS1VOSVRfVEVTVFxuJiM0MztcdGJvb2wgXCYjMzQ7S1VuaXQgdGVzdHMgZm9yIHRhc2tzIHdpdGggYSBudWxsIHJvb3Qgb3IgY3dkXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiYjNDM7XHRkZXBlbmRzIG9uIEtVTklUPXlcbiYjNDM7XHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuJiM0MztcdGhlbHBcbiYjNDM7XHQgIEJ1aWxkIEtVbml0IHRlc3RzIHRoYXQgZXhlcmNpc2UgcGF0aCByZXNvbHV0aW9uIGZvciB0YXNrcyB3aG9zZVxuJiM0MztcdCAgZnMtXHUwMDNlcm9vdCBhbmQvb3IgZnMtXHUwMDNlcHdkIGlzIHRoZSBOVUxMIHBhdGggKG5vIHJvb3QgZGlyZWN0b3J5IGFuZC9vclxuJiM0MztcdCAgbm8gY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSkuXG4mIzQzO1xuJiM0MztcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiYjNDM7XG4gIyBTdGFja2FibGUgZmlsZXN5c3RlbXNcbiBjb25maWcgRlNfU1RBQ0tcbiBcdGJvb2xcbmRpZmYgLS1naXQgYS9mcy9jYWNoZWZpbGVzL2RhZW1vbi5jIGIvZnMvY2FjaGVmaWxlcy9kYWVtb24uY1xuaW5kZXggNDExN2IxNDVhYzk0MzEuLjM0NGZlZWI4OWM2MTBjIDEwMDY0NFxuLS0tIGEvZnMvY2FjaGVmaWxlcy9kYWVtb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvY2FjaGVmaWxlcy9kYWVtb24uY1xuQEAgLTY1Miw3ICYjNDM7NjUyLDggQEAgc3RhdGljIGludCBjYWNoZWZpbGVzX2RhZW1vbl9jdWxsKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwgY2hhciAqYXJncylcbiBcbiBcdGdldF9mc19wd2QoY3VycmVudC1cdTAwM2VmcywgXHUwMDI2cGF0aCk7XG4gXG4tXHRpZiAoIWRfY2FuX2xvb2t1cChwYXRoLmRlbnRyeSkpXG4mIzQzO1x0LyogQSB0YXNrIG1heSBoYXZlIG5vIGN3ZC4gKi9cbiYjNDM7XHRpZiAoIXBhdGgubW50IHx8ICFkX2Nhbl9sb29rdXAocGF0aC5kZW50cnkpKVxuIFx0XHRnb3RvIG5vdGRpcjtcbiBcbiBcdGNhY2hlZmlsZXNfYmVnaW5fc2VjdXJlKGNhY2hlLCBcdTAwMjZzYXZlZF9jcmVkKTtcbkBAIC03MjMsNyAmIzQzOzcyNCw4IEBAIHN0YXRpYyBpbnQgY2FjaGVmaWxlc19kYWVtb25faW51c2Uoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLCBjaGFyICphcmdzKVxuIFxuIFx0Z2V0X2ZzX3B3ZChjdXJyZW50LVx1MDAzZWZzLCBcdTAwMjZwYXRoKTtcbiBcbi1cdGlmICghZF9jYW5fbG9va3VwKHBhdGguZGVudHJ5KSlcbiYjNDM7XHQvKiBBIHRhc2sgbWF5IGhhdmUgbm8gY3dkLiAqL1xuJiM0MztcdGlmICghcGF0aC5tbnQgfHwgIWRfY2FuX2xvb2t1cChwYXRoLmRlbnRyeSkpXG4gXHRcdGdvdG8gbm90ZGlyO1xuIFxuIFx0Y2FjaGVmaWxlc19iZWdpbl9zZWN1cmUoY2FjaGUsIFx1MDAyNnNhdmVkX2NyZWQpO1xuZGlmZiAtLWdpdCBhL2ZzL2RfcGF0aC5jIGIvZnMvZF9wYXRoLmNcbmluZGV4IGE0ODk1N2MwOTcxZWY2Li41ZjE2ZDFlZmEzN2NjZCAxMDA2NDRcbi0tLSBhL2ZzL2RfcGF0aC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9kX3BhdGguY1xuQEAgLTQyMiw3ICYjNDM7NDIyLDExIEBAIFNZU0NBTExfREVGSU5FMihnZXRjd2QsIGNoYXIgX191c2VyICosIGJ1ZiwgdW5zaWduZWQgbG9uZywgc2l6ZSlcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcdGdldF9mc19yb290X2FuZF9wd2RfcmN1KGN1cnJlbnQtXHUwMDNlZnMsIFx1MDAyNnJvb3QsIFx1MDAyNnB3ZCk7XG4gXG4tXHRpZiAodW5saWtlbHkoZF91bmxpbmtlZChwd2QuZGVudHJ5KSkpIHtcbiYjNDM7XHQvKiBBIHRhc2sgbWF5IGhhdmUgbm8gY3dkLiAqL1xuJiM0MztcdGlmICh1bmxpa2VseSghcHdkLm1udCkpIHtcbiYjNDM7XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdFx0ZXJyb3IgPSAtRU5PRU5UO1xuJiM0MztcdH0gZWxzZSBpZiAodW5saWtlbHkoZF91bmxpbmtlZChwd2QuZGVudHJ5KSkpIHtcbiBcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRcdGVycm9yID0gLUVOT0VOVDtcbiBcdH0gZWxzZSB7XG5kaWZmIC0tZ2l0IGEvZnMvZmhhbmRsZS5jIGIvZnMvZmhhbmRsZS5jXG5pbmRleCAxY2E3ZWIzYTZjYjUxNi4uNTYwZjg4ZjUzNjMzYzAgMTAwNjQ0XG4tLS0gYS9mcy9maGFuZGxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2ZoYW5kbGUuY1xuQEAgLTE4MCw2ICYjNDM7MTgwLDkgQEAgc3RhdGljIGludCBnZXRfcGF0aF9hbmNob3IoaW50IGZkLCBzdHJ1Y3QgcGF0aCAqcm9vdClcbiBcbiBcdGlmIChmZCA9PSBBVF9GRENXRCkge1xuIFx0XHRnZXRfZnNfcHdkKGN1cnJlbnQtXHUwMDNlZnMsIHJvb3QpO1xuJiM0MztcdFx0LyogQSB0YXNrIG1heSBoYXZlIG5vIGN3ZC4gKi9cbiYjNDM7XHRcdGlmICghcm9vdC1cdTAwM2VtbnQpXG4mIzQzO1x0XHRcdHJldHVybiAtRU5PRU5UO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9mcy9mc19zdHJ1Y3QuYyBiL2ZzL2ZzX3N0cnVjdC5jXG5pbmRleCAzOTQ4NzVkMDZmZDYwNi4uYmY2MjBiYmE3ZjM1ZTIgMTAwNjQ0XG4tLS0gYS9mcy9mc19zdHJ1Y3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZnNfc3RydWN0LmNcbkBAIC0xNTMsMyAmIzQzOzE1Myw3IEBAIHN0cnVjdCBmc19zdHJ1Y3QgaW5pdF9mcyA9IHtcbiBcdC5zZXFcdFx0PSBfX1NFUUxPQ0tfVU5MT0NLRUQoaW5pdF9mcy5zZXEpLFxuIFx0LnVtYXNrXHRcdD0gMDAyMixcbiB9O1xuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19OVUxMX1JPT1RfQ1dEX0tVTklUX1RFU1RcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jXCYjMzQ7XG4mIzQzOyNlbmRpZlxuZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jXG5pbmRleCA1Y2M5ZjBmNDY2YjgzMC4uMDZiMTY4MTVlODY2ODEgMTAwNjQ0XG4tLS0gYS9mcy9uYW1laS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9uYW1laS5jXG5AQCAtMTEyMCwxMSAmIzQzOzExMjAsMjAgQEAgc3RhdGljIGludCBzZXRfcm9vdChzdHJ1Y3QgbmFtZWlkYXRhICpuZClcbiBcdFx0ZG8ge1xuIFx0XHRcdHNlcSA9IHJlYWRfc2VxYmVnaW4oXHUwMDI2ZnMtXHUwMDNlc2VxKTtcbiBcdFx0XHRuZC1cdTAwM2Vyb290ID0gZnMtXHUwMDNlcm9vdDtcbi1cdFx0XHRuZC1cdTAwM2Vyb290X3NlcSA9IF9fcmVhZF9zZXFjb3VudF9iZWdpbihcdTAwMjZuZC1cdTAwM2Vyb290LmRlbnRyeS1cdTAwM2VkX3NlcSk7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIEEgdGFzayBtYXkgaGF2ZSBubyByb290LiBMZWF2ZSBuZC1cdTAwM2Vyb290IGFzIHRoZSBOVUxMXG4mIzQzO1x0XHRcdCAqIHBhdGggYW5kIHNraXAgdGhlIGRfc2VxIHJlYWQ6IGFic29sdXRlIGxvb2t1cHMgdHVyblxuJiM0MztcdFx0XHQgKiB0aGUgYWJzZW5jZSBpbnRvIC1FTk9FTlQgaW4gbmRfanVtcF9yb290KCksIHdoaWxlIFwmIzM0Oy4uXCYjMzQ7XG4mIzQzO1x0XHRcdCAqIHRyZWF0cyBhIE5VTEwgcm9vdCBhcyBcJiMzNDtubyBib3VuZGFyeVwmIzM0OyBhbmQgY2xpbWJzIHRvIGl0c1xuJiM0MztcdFx0XHQgKiBtb3VudCByb290LlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0aWYgKGxpa2VseShuZC1cdTAwM2Vyb290Lm1udCkpXG4mIzQzO1x0XHRcdFx0bmQtXHUwMDNlcm9vdF9zZXEgPSBfX3JlYWRfc2VxY291bnRfYmVnaW4oXHUwMDI2bmQtXHUwMDNlcm9vdC5kZW50cnktXHUwMDNlZF9zZXEpO1xuIFx0XHR9IHdoaWxlIChyZWFkX3NlcXJldHJ5KFx1MDAyNmZzLVx1MDAzZXNlcSwgc2VxKSk7XG4gXHR9IGVsc2Uge1xuIFx0XHRnZXRfZnNfcm9vdChmcywgXHUwMDI2bmQtXHUwMDNlcm9vdCk7XG4tXHRcdG5kLVx1MDAzZXN0YXRlIHw9IE5EX1JPT1RfR1JBQkJFRDtcbiYjNDM7XHRcdGlmIChsaWtlbHkobmQtXHUwMDNlcm9vdC5tbnQpKVxuJiM0MztcdFx0XHRuZC1cdTAwM2VzdGF0ZSB8PSBORF9ST09UX0dSQUJCRUQ7XG4gXHR9XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMTE0Myw2ICYjNDM7MTE1Miw5IEBAIHN0YXRpYyBpbnQgbmRfanVtcF9yb290KHN0cnVjdCBuYW1laWRhdGEgKm5kKVxuIFx0XHRpZiAodW5saWtlbHkoZXJyb3IpKVxuIFx0XHRcdHJldHVybiBlcnJvcjtcbiBcdH1cbiYjNDM7XHQvKiBBYnNvbHV0ZSBwYXRocyBuZWVkIGEgcm9vdCB0byBqdW1wIHRvOyBhIHRhc2sgbWF5IGhhdmUgbm9uZS4gKi9cbiYjNDM7XHRpZiAodW5saWtlbHkoIW5kLVx1MDAzZXJvb3QubW50KSlcbiYjNDM7XHRcdHJldHVybiAtRU5PRU5UO1xuIFx0aWYgKG5kLVx1MDAzZWZsYWdzIFx1MDAyNiBMT09LVVBfUkNVKSB7XG4gXHRcdHN0cnVjdCBkZW50cnkgKmQ7XG4gXHRcdG5kLVx1MDAzZXBhdGggPSBuZC1cdTAwM2Vyb290O1xuQEAgLTI3MzIsMTEgJiM0MzsyNzQ0LDE3IEBAIHN0YXRpYyBjb25zdCBjaGFyICpwYXRoX2luaXQoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHVuc2lnbmVkIGZsYWdzKVxuIFx0XHRcdGRvIHtcbiBcdFx0XHRcdHNlcSA9IHJlYWRfc2VxYmVnaW4oXHUwMDI2ZnMtXHUwMDNlc2VxKTtcbiBcdFx0XHRcdG5kLVx1MDAzZXBhdGggPSBmcy1cdTAwM2Vwd2Q7XG4mIzQzO1x0XHRcdFx0LyogQSB0YXNrIG1heSBoYXZlIG5vIGN3ZC4gKi9cbiYjNDM7XHRcdFx0XHRpZiAodW5saWtlbHkoIW5kLVx1MDAzZXBhdGgubW50KSlcbiYjNDM7XHRcdFx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xuIFx0XHRcdFx0bmQtXHUwMDNlaW5vZGUgPSBuZC1cdTAwM2VwYXRoLmRlbnRyeS1cdTAwM2VkX2lub2RlO1xuIFx0XHRcdFx0bmQtXHUwMDNlc2VxID0gX19yZWFkX3NlcWNvdW50X2JlZ2luKFx1MDAyNm5kLVx1MDAzZXBhdGguZGVudHJ5LVx1MDAzZWRfc2VxKTtcbiBcdFx0XHR9IHdoaWxlIChyZWFkX3NlcXJldHJ5KFx1MDAyNmZzLVx1MDAzZXNlcSwgc2VxKSk7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0Z2V0X2ZzX3B3ZChjdXJyZW50LVx1MDAzZWZzLCBcdTAwMjZuZC1cdTAwM2VwYXRoKTtcbiYjNDM7XHRcdFx0LyogQSB0YXNrIG1heSBoYXZlIG5vIGN3ZC4gKi9cbiYjNDM7XHRcdFx0aWYgKHVubGlrZWx5KCFuZC1cdTAwM2VwYXRoLm1udCkpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XG4gXHRcdFx0bmQtXHUwMDNlaW5vZGUgPSBuZC1cdTAwM2VwYXRoLmRlbnRyeS1cdTAwM2VkX2lub2RlO1xuIFx0XHR9XG4gXHR9IGVsc2Uge1xuZGlmZiAtLWdpdCBhL2ZzL3Byb2MvYmFzZS5jIGIvZnMvcHJvYy9iYXNlLmNcbmluZGV4IDc4MGY4MTI1OTA1MjdjLi43ZjdjYzg2Y2UyNjI0MiAxMDA2NDRcbi0tLSBhL2ZzL3Byb2MvYmFzZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9wcm9jL2Jhc2UuY1xuQEAgLTIxMyw3ICYjNDM7MjEzLDkgQEAgc3RhdGljIGludCBnZXRfdGFza19yb290KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHBhdGggKnJvb3QpXG4gXHR0YXNrX2xvY2sodGFzayk7XG4gXHRpZiAodGFzay1cdTAwM2Vmcykge1xuIFx0XHRnZXRfZnNfcm9vdCh0YXNrLVx1MDAzZWZzLCByb290KTtcbi1cdFx0cmVzdWx0ID0gMDtcbiYjNDM7XHRcdC8qIEEgdGFzayBtYXkgaGF2ZSBubyByb290LiAqL1xuJiM0MztcdFx0aWYgKHJvb3QtXHUwMDNlbW50KVxuJiM0MztcdFx0XHRyZXN1bHQgPSAwO1xuIFx0fVxuIFx0dGFza191bmxvY2sodGFzayk7XG4gXHRyZXR1cm4gcmVzdWx0O1xuQEAgLTIyNyw3ICYjNDM7MjI5LDkgQEAgc3RhdGljIGludCBwcm9jX2N3ZF9saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IHBhdGggKnBhdGgsXG4gXHR0YXNrX2xvY2sodGFzayk7XG4gXHRpZiAodGFzay1cdTAwM2Vmcykge1xuIFx0XHRnZXRfZnNfcHdkKHRhc2stXHUwMDNlZnMsIHBhdGgpO1xuLVx0XHRyZXN1bHQgPSAwO1xuJiM0MztcdFx0LyogQSB0YXNrIG1heSBoYXZlIG5vIGN3ZC4gKi9cbiYjNDM7XHRcdGlmIChwYXRoLVx1MDAzZW1udClcbiYjNDM7XHRcdFx0cmVzdWx0ID0gMDtcbiBcdH1cbiBcdHRhc2tfdW5sb2NrKHRhc2spO1xuIFx0cmV0dXJuIHJlc3VsdDtcbmRpZmYgLS1naXQgYS9mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmMgYi9mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uM2ZiN2U2MzU0NWY4YzZcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuY1xuQEAgLTAsMCAmIzQzOzEsMTQ3IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7LypcbiYjNDM7ICogS1VuaXQgdGVzdHMgZm9yIHRhc2tzIHdob3NlIGZzLVx1MDAzZXJvb3QgYW5kL29yIGZzLVx1MDAzZXB3ZCBpcyB0aGUgTlVMTCBwYXRoLlxuJiM0MzsgKiBTZWUgXCYjMzQ7ZnM6IHN1cHBvcnQgdGFza3Mgd2l0aCBhIG51bGwgcm9vdCBvciBjd2RcJiMzNDsuXG4mIzQzOyAqXG4mIzQzOyAqIEVhY2ggdGVzdCBydW5zIGFnYWluc3QgdGhpcyB0YXNrJiMzOTtzIG93biBmc19zdHJ1Y3QuIFdlIHVuc2hhcmUgaXQgZmlyc3RcbiYjNDM7ICogc28gd2Ugb25seSBldmVyIHRvdWNoIGEgcHJpdmF0ZSBjb3B5LCBuZXZlciB0aGUgc2hhcmVkIG9uZSwgYW5kIHdlXG4mIzQzOyAqIHJlc3RvcmUgdGhlIG9yaWdpbmFsIHJvb3QvY3dkIGFmdGVyd2FyZHMuXG4mIzQzOyAqL1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NrdW5pdC90ZXN0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZnNfc3RydWN0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbmFtZWkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wYXRoLmhcdTAwM2VcbiYjNDM7XG4mIzQzOy8qIFRoZSBOVUxMIHBhdGg6IHsgLm1udCA9IE5VTEwsIC5kZW50cnkgPSBOVUxMIH0uICovXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGF0aCBudWxsX3BhdGg7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgbnVsbF9mc19jdHgge1xuJiM0MztcdHN0cnVjdCBwYXRoIHNhdmVkX3Jvb3Q7XG4mIzQzO1x0c3RydWN0IHBhdGggc2F2ZWRfcHdkO1xuJiM0MztcdHN0cnVjdCBwYXRoIGFuY2hvcjtcdC8qIGEgcmVhbCBkaXJlY3RvcnksIHN0YW5kaW5nIGluIGZvciBhIGRpcmZkICovXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG51bGxfZnNfc2V0dXAoc3RydWN0IG51bGxfZnNfY3R4ICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRlcnIgPSB1bnNoYXJlX2ZzX3N0cnVjdCgpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdGVyciA9IGtlcm5fcGF0aChcJiMzNDsvXCYjMzQ7LCBMT09LVVBfRElSRUNUT1JZLCBcdTAwMjZjdHgtXHUwMDNlYW5jaG9yKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRnZXRfZnNfcm9vdChjdXJyZW50LVx1MDAzZWZzLCBcdTAwMjZjdHgtXHUwMDNlc2F2ZWRfcm9vdCk7XG4mIzQzO1x0Z2V0X2ZzX3B3ZChjdXJyZW50LVx1MDAzZWZzLCBcdTAwMjZjdHgtXHUwMDNlc2F2ZWRfcHdkKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbnVsbF9mc190ZWFyZG93bihzdHJ1Y3QgbnVsbF9mc19jdHggKmN0eClcbiYjNDM7e1xuJiM0MztcdHNldF9mc19yb290KGN1cnJlbnQtXHUwMDNlZnMsIFx1MDAyNmN0eC1cdTAwM2VzYXZlZF9yb290KTtcbiYjNDM7XHRzZXRfZnNfcHdkKGN1cnJlbnQtXHUwMDNlZnMsIFx1MDAyNmN0eC1cdTAwM2VzYXZlZF9wd2QpO1xuJiM0MztcdHBhdGhfcHV0KFx1MDAyNmN0eC1cdTAwM2VzYXZlZF9yb290KTtcbiYjNDM7XHRwYXRoX3B1dChcdTAwMjZjdHgtXHUwMDNlc2F2ZWRfcHdkKTtcbiYjNDM7XHRwYXRoX3B1dChcdTAwMjZjdHgtXHUwMDNlYW5jaG9yKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogUmVzb2x2ZSBAbmFtZSwgZHJvcCBhbnkgcmVmZXJlbmNlIGl0IHJldHVybnMsIGFuZCB5aWVsZCB0aGUgZXJybm8uICovXG4mIzQzO3N0YXRpYyBpbnQgdHJ5X2tlcm5fcGF0aChjb25zdCBjaGFyICpuYW1lKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBhdGggb3V0O1xuJiM0MztcdGludCBlcnIgPSBrZXJuX3BhdGgobmFtZSwgMCwgXHUwMDI2b3V0KTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFlcnIpXG4mIzQzO1x0XHRwYXRoX3B1dChcdTAwMjZvdXQpO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgdHJ5X2ZkX3JlbGF0aXZlKHN0cnVjdCBudWxsX2ZzX2N0eCAqY3R4LCBjb25zdCBjaGFyICpuYW1lKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBhdGggb3V0O1xuJiM0MztcdGludCBlcnIgPSB2ZnNfcGF0aF9sb29rdXAoY3R4LVx1MDAzZWFuY2hvci5kZW50cnksIGN0eC1cdTAwM2VhbmNob3IubW50LFxuJiM0MztcdFx0XHRcdCAgbmFtZSwgMCwgXHUwMDI2b3V0KTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFlcnIpXG4mIzQzO1x0XHRwYXRoX3B1dChcdTAwMjZvdXQpO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIE5vIHJvb3Q6IGFic29sdXRlIHBhdGhzIGZhaWwsIGJ1dCBcJiMzNDsuLlwmIzM0OyBjbGltYnMgYW5kIHRoZSBjd2Qgc3RpbGwgd29ya3MuICovXG4mIzQzO3N0YXRpYyB2b2lkIG51bGxfcm9vdF90ZXN0KHN0cnVjdCBrdW5pdCAqdGVzdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBudWxsX2ZzX2N0eCBjdHg7XG4mIzQzO1xuJiM0MztcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCBudWxsX2ZzX3NldHVwKFx1MDAyNmN0eCksIDApO1xuJiM0MztcdHNldF9mc19yb290KGN1cnJlbnQtXHUwMDNlZnMsIFx1MDAyNm51bGxfcGF0aCk7XG4mIzQzO1xuJiM0MztcdC8qIEEgbGVhZGluZyAmIzM5Oy8mIzM5OyBoYXMgbm90aGluZyB0byBhbmNob3IgdG8uICovXG4mIzQzO1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHRyeV9rZXJuX3BhdGgoXCYjMzQ7L1wmIzM0OyksIC1FTk9FTlQpO1xuJiM0MztcbiYjNDM7XHQvKiBcJiMzNDsuLlwmIzM0OyBpcyB1bmJvdW5kZWQgcmF0aGVyIHRoYW4gcmVmdXNlZCAoaXQgd291bGQgaGF2ZSBiZWVuXG4mIzQzO1x0ICogLUVOT0VOVCBiZWZvcmUgdGhpcyBmZWF0dXJlKS4gSXQgc3RhcnRzIGZyb20gdGhlIHN0aWxsLXByZXNlbnRcbiYjNDM7XHQgKiBjd2QgYW5kIHJ1bnMgb3V0IG9mIHBhcmVudHMgYXQgdGhlIG1vdW50IHJvb3QuXG4mIzQzO1x0ICovXG4mIzQzO1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHRyeV9rZXJuX3BhdGgoXCYjMzQ7Li5cJiMzNDspLCAwKTtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIGN3ZCBpcyB1bnRvdWNoZWQ6IEFUX0ZEQ1dELXJlbGF0aXZlIGxvb2t1cHMgc3RpbGwgcmVzb2x2ZS4gKi9cbiYjNDM7XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgdHJ5X2tlcm5fcGF0aChcJiMzNDsuXCYjMzQ7KSwgMCk7XG4mIzQzO1xuJiM0MztcdC8qIEEgZGlyZmQtYW5jaG9yZWQgbG9va3VwIG5ldmVyIGNvbnN1bHRzIGZzLVx1MDAzZXJvb3QuICovXG4mIzQzO1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHRyeV9mZF9yZWxhdGl2ZShcdTAwMjZjdHgsIFwmIzM0Oy5cJiMzNDspLCAwKTtcbiYjNDM7XG4mIzQzO1x0bnVsbF9mc190ZWFyZG93bihcdTAwMjZjdHgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBObyBjd2Q6IEFUX0ZEQ1dELXJlbGF0aXZlIHBhdGhzIGZhaWwsIGJ1dCBhYnNvbHV0ZSBhbmQgZGlyZmRzIHdvcmsuICovXG4mIzQzO3N0YXRpYyB2b2lkIG51bGxfY3dkX3Rlc3Qoc3RydWN0IGt1bml0ICp0ZXN0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG51bGxfZnNfY3R4IGN0eDtcbiYjNDM7XG4mIzQzO1x0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIG51bGxfZnNfc2V0dXAoXHUwMDI2Y3R4KSwgMCk7XG4mIzQzO1x0c2V0X2ZzX3B3ZChjdXJyZW50LVx1MDAzZWZzLCBcdTAwMjZudWxsX3BhdGgpO1xuJiM0MztcbiYjNDM7XHQvKiBSZWxhdGl2ZS10by1jd2QgbG9va3VwcyBoYXZlIG5vIHN0YXJ0aW5nIHBvaW50LiAqL1xuJiM0MztcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCB0cnlfa2Vybl9wYXRoKFwmIzM0Oy5cJiMzNDspLCAtRU5PRU5UKTtcbiYjNDM7XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgdHJ5X2tlcm5fcGF0aChcJiMzNDtmb29cJiMzNDspLCAtRU5PRU5UKTtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIHJvb3QgaXMgdW50b3VjaGVkOiBhYnNvbHV0ZSBsb29rdXBzIHN0aWxsIHJlc29sdmUuICovXG4mIzQzO1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHRyeV9rZXJuX3BhdGgoXCYjMzQ7L1wmIzM0OyksIDApO1xuJiM0MztcbiYjNDM7XHQvKiBBIGRpcmZkLWFuY2hvcmVkIGxvb2t1cCBuZXZlciBjb25zdWx0cyBmcy1cdTAwM2Vwd2QuICovXG4mIzQzO1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHRyeV9mZF9yZWxhdGl2ZShcdTAwMjZjdHgsIFwmIzM0Oy5cJiMzNDspLCAwKTtcbiYjNDM7XG4mIzQzO1x0bnVsbF9mc190ZWFyZG93bihcdTAwMjZjdHgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBOZWl0aGVyIHJvb3Qgbm9yIGN3ZDogb25seSBkZXNjcmlwdG9yLXJlbGF0aXZlIGxvb2t1cHMgcmVtYWluLiAqL1xuJiM0MztzdGF0aWMgdm9pZCBudWxsX3Jvb3RfYW5kX2N3ZF90ZXN0KHN0cnVjdCBrdW5pdCAqdGVzdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBudWxsX2ZzX2N0eCBjdHg7XG4mIzQzO1xuJiM0MztcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCBudWxsX2ZzX3NldHVwKFx1MDAyNmN0eCksIDApO1xuJiM0MztcdHNldF9mc19yb290KGN1cnJlbnQtXHUwMDNlZnMsIFx1MDAyNm51bGxfcGF0aCk7XG4mIzQzO1x0c2V0X2ZzX3B3ZChjdXJyZW50LVx1MDAzZWZzLCBcdTAwMjZudWxsX3BhdGgpO1xuJiM0MztcbiYjNDM7XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgdHJ5X2tlcm5fcGF0aChcJiMzNDsvXCYjMzQ7KSwgLUVOT0VOVCk7XG4mIzQzO1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHRyeV9rZXJuX3BhdGgoXCYjMzQ7LlwmIzM0OyksIC1FTk9FTlQpO1xuJiM0MztcbiYjNDM7XHQvKiBUaGUgaGVsZCBkZXNjcmlwdG9yIHN0aWxsIG5hbWVzIGZpbGVzLiAqL1xuJiM0MztcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCB0cnlfZmRfcmVsYXRpdmUoXHUwMDI2Y3R4LCBcJiMzNDsuXCYjMzQ7KSwgMCk7XG4mIzQzO1xuJiM0MztcdG51bGxfZnNfdGVhcmRvd24oXHUwMDI2Y3R4KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIG51bGxfcm9vdF9jd2RfdGVzdF9jYXNlc1tdID0ge1xuJiM0MztcdEtVTklUX0NBU0UobnVsbF9yb290X3Rlc3QpLFxuJiM0MztcdEtVTklUX0NBU0UobnVsbF9jd2RfdGVzdCksXG4mIzQzO1x0S1VOSVRfQ0FTRShudWxsX3Jvb3RfYW5kX2N3ZF90ZXN0KSxcbiYjNDM7XHR7fSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qga3VuaXRfc3VpdGUgbnVsbF9yb290X2N3ZF90ZXN0X3N1aXRlID0ge1xuJiM0MztcdC5uYW1lID0gXCYjMzQ7bnVsbF9yb290X2N3ZFwmIzM0OyxcbiYjNDM7XHQudGVzdF9jYXNlcyA9IG51bGxfcm9vdF9jd2RfdGVzdF9jYXNlcyxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO2t1bml0X3Rlc3Rfc3VpdGUobnVsbF9yb290X2N3ZF90ZXN0X3N1aXRlKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzX3N0cnVjdC5oIGIvaW5jbHVkZS9saW51eC9mc19zdHJ1Y3QuaFxuaW5kZXggMDA3MDc2NGI3OTBhM2UuLjg0NDIzYjRiZDIxYWU3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9mc19zdHJ1Y3QuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9mc19zdHJ1Y3QuaFxuQEAgLTEyLDcgJiM0MzsxMiwzNCBAQCBzdHJ1Y3QgZnNfc3RydWN0IHtcbiBcdHNlcWxvY2tfdCBzZXE7XG4gXHRpbnQgdW1hc2s7XG4gXHRpbnQgaW5fZXhlYztcbi1cdHN0cnVjdCBwYXRoIHJvb3QsIHB3ZDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBOb3RlIHRoYXQgdGhlc2UgcGF0aHMgYXJlIGV4cGxpY2l0bHkgaW50ZW5kZWQgdG8gYmUgbnVsbGFibGUuXG4mIzQzO1x0ICogU2luY2UgdGhleSBhcmUgaW5saW5lIHN0cnVjdHMgYW5kIG5vdCBwb2ludGVycywgd2UgdXNlIGAubW50XG4mIzQzO1x0ICogPT0gTlVMTGAgdG8gaW5kaWNhdGUgbnVsbGFiaWxpdHkgb2YgdGhlIHBhdGggYXMgYSB3aG9sZS5cbiYjNDM7XHQgKi9cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgcm9vdCBkaXJlY3RvcnkgZm9yIHRoZSB0YXNrKHMpIHRoYXQgcG9pbnRzIHRvIHRoaXNcbiYjNDM7XHQgKiBgZnNfc3RydWN0YC4gVGhlIHJvb3QgZGlyZWN0b3J5IGFsc28gY29udHJvbHMgaG93IGAuLmBcbiYjNDM7XHQgKiByZXNvbHZlOyBwYXRoIHRyYXZlcnNhbCBpcyBub3QgYWxsb3dlZCB0byByZXNvbHZlIHVwd2FyZHNcbiYjNDM7XHQgKiBiZXlvbmQgdGhlIHJvb3QgZGlyZWN0b3J5LiAoSXQgaXMgZm9yIHRoaXMgbGF0dGVyIHJlYXNvbiB0aGF0XG4mIzQzO1x0ICogYGNocm9vdGAgaXMgYSBwcml2aWxlZ2VkIG9wZXJhdGlvbi4pXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBJZiBudWxsIChhcyBkZXNjcmliZWQgYWJvdmUpLCBhYnNvbHV0ZSBwYXRocyB3aWxsIG5vdFxuJiM0MztcdCAqIHJlc29sdmUuIEluIGFkZGl0aW9uIGAuLmAgd2lsbCBiZSB1bmJvdW5kZWQsIHVudGlsIG9uZVxuJiM0MztcdCAqIHJlYWNoZXMgdGhlIHRvcCBvZiB0aGUgbW91bnQgdHJlZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzdHJ1Y3QgcGF0aCByb290O1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGZvciB0aGUgdGFzayhzKSB0aGF0IHBvaW50cyB0b1xuJiM0MztcdCAqIHRoaXMgYGZzX3N0cnVjdGAuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBJZiBudWxsIChhcyBkZXNjcmliZWQgYWJvdmUpLCByZWxhdGl2ZSBwYXRocyB3aXRoIGBBVF9GRENXRGBcbiYjNDM7XHQgKiB3aWxsIG5vdCByZXNvbHZlLlxuJiM0MztcdCAqL1xuJiM0MztcdHN0cnVjdCBwYXRoIHB3ZDtcbiB9IF9fcmFuZG9taXplX2xheW91dDtcbiBcbiBleHRlcm4gc3RydWN0IGttZW1fY2FjaGUgKmZzX2NhY2hlcDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwNzoxNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT41bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRhc2tzIHdpdGggYSBudWxsIHJvb3Qgb3IgY3dkLCBidXQgdGhlcmUgaXMgY3VycmVudGx5IG5vIHdheSB0byBjcmVhdGUgc3VjaCBhIHRhc2sgb3Igc2V0IGEgdGFzayYjMzk7cyByb290L2N3ZCB0byBudWxsIGZyb20gdXNlciBzcGFjZSAob3IgZXZlbiB3aXRoaW4gdGhlIGtlcm5lbCwgb3V0c2lkZSBvZiB0aGUgbmV3bHkgYWRkZWQgS1VuaXQgdGVzdCkuIFRoZSBuZXcgbG9naWMgaW4gcGF0aCByZXNvbHV0aW9uIGlzIHVucmVhY2hhYmxlIGR1cmluZyBub3JtYWwgZXhlY3V0aW9uIGFuZCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDQxM2I5NmY1MDhkOWIyMWFjOGRiZmU0ZTRlYmMzNjUxOGNlYTUzYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVuIDI5IDA3OjE3OjUzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvS2NvbmZpZyBiL2ZzL0tjb25maWcKaW5kZXggY2Y2YWU2NDc3NmU2MmMuLjkwMjM1OTdiNmUyYmU4IDEwMDY0NAotLS0gYS9mcy9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL0tjb25maWcKQEAgLTE4LDYgJiM0MzsxOCwxNyBAQCBjb25maWcgVkFMSURBVEVfRlNfUEFSU0VSCiBjb25maWcgRlNfSU9NQVAKIAlib29sCiAKJiM0Mztjb25maWcgTlVMTF9ST09UX0NXRF9LVU5JVF9URVNUCiYjNDM7CWJvb2wgJiMzNDtLVW5pdCB0ZXN0cyBmb3IgdGFza3Mgd2l0aCBhIG51bGwgcm9vdCBvciBjd2QmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTCiYjNDM7CWRlcGVuZHMgb24gS1VOSVQ9eQomIzQzOwlkZWZhdWx0IEtVTklUX0FMTF9URVNUUwomIzQzOwloZWxwCiYjNDM7CSAgQnVpbGQgS1VuaXQgdGVzdHMgdGhhdCBleGVyY2lzZSBwYXRoIHJlc29sdXRpb24gZm9yIHRhc2tzIHdob3NlCiYjNDM7CSAgZnMtJmd0O3Jvb3QgYW5kL29yIGZzLSZndDtwd2QgaXMgdGhlIE5VTEwgcGF0aCAobm8gcm9vdCBkaXJlY3RvcnkgYW5kL29yCiYjNDM7CSAgbm8gY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSkuCiYjNDM7CiYjNDM7CSAgSWYgdW5zdXJlLCBzYXkgTi4KJiM0MzsKICMgU3RhY2thYmxlIGZpbGVzeXN0ZW1zCiBjb25maWcgRlNfU1RBQ0sKIAlib29sCmRpZmYgLS1naXQgYS9mcy9jYWNoZWZpbGVzL2RhZW1vbi5jIGIvZnMvY2FjaGVmaWxlcy9kYWVtb24uYwppbmRleCA0MTE3YjE0NWFjOTQzMS4uMzQ0ZmVlYjg5YzYxMGMgMTAwNjQ0Ci0tLSBhL2ZzL2NhY2hlZmlsZXMvZGFlbW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvY2FjaGVmaWxlcy9kYWVtb24uYwpAQCAtNjUyLDcgJiM0Mzs2NTIsOCBAQCBzdGF0aWMgaW50IGNhY2hlZmlsZXNfZGFlbW9uX2N1bGwoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLCBjaGFyICphcmdzKQogCiAJZ2V0X2ZzX3B3ZChjdXJyZW50LSZndDtmcywgJmFtcDtwYXRoKTsKIAotCWlmICghZF9jYW5fbG9va3VwKHBhdGguZGVudHJ5KSkKJiM0MzsJLyogQSB0YXNrIG1heSBoYXZlIG5vIGN3ZC4gKi8KJiM0MzsJaWYgKCFwYXRoLm1udCB8fCAhZF9jYW5fbG9va3VwKHBhdGguZGVudHJ5KSkKIAkJZ290byBub3RkaXI7CiAKIAljYWNoZWZpbGVzX2JlZ2luX3NlY3VyZShjYWNoZSwgJmFtcDtzYXZlZF9jcmVkKTsKQEAgLTcyMyw3ICYjNDM7NzI0LDggQEAgc3RhdGljIGludCBjYWNoZWZpbGVzX2RhZW1vbl9pbnVzZShzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsIGNoYXIgKmFyZ3MpCiAKIAlnZXRfZnNfcHdkKGN1cnJlbnQtJmd0O2ZzLCAmYW1wO3BhdGgpOwogCi0JaWYgKCFkX2Nhbl9sb29rdXAocGF0aC5kZW50cnkpKQomIzQzOwkvKiBBIHRhc2sgbWF5IGhhdmUgbm8gY3dkLiAqLwomIzQzOwlpZiAoIXBhdGgubW50IHx8ICFkX2Nhbl9sb29rdXAocGF0aC5kZW50cnkpKQogCQlnb3RvIG5vdGRpcjsKIAogCWNhY2hlZmlsZXNfYmVnaW5fc2VjdXJlKGNhY2hlLCAmYW1wO3NhdmVkX2NyZWQpOwpkaWZmIC0tZ2l0IGEvZnMvZF9wYXRoLmMgYi9mcy9kX3BhdGguYwppbmRleCBhNDg5NTdjMDk3MWVmNi4uNWYxNmQxZWZhMzdjY2QgMTAwNjQ0Ci0tLSBhL2ZzL2RfcGF0aC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2RfcGF0aC5jCkBAIC00MjIsNyAmIzQzOzQyMiwxMSBAQCBTWVNDQUxMX0RFRklORTIoZ2V0Y3dkLCBjaGFyIF9fdXNlciAqLCBidWYsIHVuc2lnbmVkIGxvbmcsIHNpemUpCiAJcmN1X3JlYWRfbG9jaygpOwogCWdldF9mc19yb290X2FuZF9wd2RfcmN1KGN1cnJlbnQtJmd0O2ZzLCAmYW1wO3Jvb3QsICZhbXA7cHdkKTsKIAotCWlmICh1bmxpa2VseShkX3VubGlua2VkKHB3ZC5kZW50cnkpKSkgewomIzQzOwkvKiBBIHRhc2sgbWF5IGhhdmUgbm8gY3dkLiAqLwomIzQzOwlpZiAodW5saWtlbHkoIXB3ZC5tbnQpKSB7CiYjNDM7CQlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJCWVycm9yID0gLUVOT0VOVDsKJiM0MzsJfSBlbHNlIGlmICh1bmxpa2VseShkX3VubGlua2VkKHB3ZC5kZW50cnkpKSkgewogCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJZXJyb3IgPSAtRU5PRU5UOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9mcy9maGFuZGxlLmMgYi9mcy9maGFuZGxlLmMKaW5kZXggMWNhN2ViM2E2Y2I1MTYuLjU2MGY4OGY1MzYzM2MwIDEwMDY0NAotLS0gYS9mcy9maGFuZGxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmhhbmRsZS5jCkBAIC0xODAsNiAmIzQzOzE4MCw5IEBAIHN0YXRpYyBpbnQgZ2V0X3BhdGhfYW5jaG9yKGludCBmZCwgc3RydWN0IHBhdGggKnJvb3QpCiAKIAlpZiAoZmQgPT0gQVRfRkRDV0QpIHsKIAkJZ2V0X2ZzX3B3ZChjdXJyZW50LSZndDtmcywgcm9vdCk7CiYjNDM7CQkvKiBBIHRhc2sgbWF5IGhhdmUgbm8gY3dkLiAqLwomIzQzOwkJaWYgKCFyb290LSZndDttbnQpCiYjNDM7CQkJcmV0dXJuIC1FTk9FTlQ7CiAJCXJldHVybiAwOwogCX0KIApkaWZmIC0tZ2l0IGEvZnMvZnNfc3RydWN0LmMgYi9mcy9mc19zdHJ1Y3QuYwppbmRleCAzOTQ4NzVkMDZmZDYwNi4uYmY2MjBiYmE3ZjM1ZTIgMTAwNjQ0Ci0tLSBhL2ZzL2ZzX3N0cnVjdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2ZzX3N0cnVjdC5jCkBAIC0xNTMsMyAmIzQzOzE1Myw3IEBAIHN0cnVjdCBmc19zdHJ1Y3QgaW5pdF9mcyA9IHsKIAkuc2VxCQk9IF9fU0VRTE9DS19VTkxPQ0tFRChpbml0X2ZzLnNlcSksCiAJLnVtYXNrCQk9IDAwMjIsCiB9OwomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfTlVMTF9ST09UX0NXRF9LVU5JVF9URVNUCiYjNDM7I2luY2x1ZGUgJiMzNDt0ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmMmIzM0OwomIzQzOyNlbmRpZgpkaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmMKaW5kZXggNWNjOWYwZjQ2NmI4MzAuLjA2YjE2ODE1ZTg2NjgxIDEwMDY0NAotLS0gYS9mcy9uYW1laS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25hbWVpLmMKQEAgLTExMjAsMTEgJiM0MzsxMTIwLDIwIEBAIHN0YXRpYyBpbnQgc2V0X3Jvb3Qoc3RydWN0IG5hbWVpZGF0YSAqbmQpCiAJCWRvIHsKIAkJCXNlcSA9IHJlYWRfc2VxYmVnaW4oJmFtcDtmcy0mZ3Q7c2VxKTsKIAkJCW5kLSZndDtyb290ID0gZnMtJmd0O3Jvb3Q7Ci0JCQluZC0mZ3Q7cm9vdF9zZXEgPSBfX3JlYWRfc2VxY291bnRfYmVnaW4oJmFtcDtuZC0mZ3Q7cm9vdC5kZW50cnktJmd0O2Rfc2VxKTsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIEEgdGFzayBtYXkgaGF2ZSBubyByb290LiBMZWF2ZSBuZC0mZ3Q7cm9vdCBhcyB0aGUgTlVMTAomIzQzOwkJCSAqIHBhdGggYW5kIHNraXAgdGhlIGRfc2VxIHJlYWQ6IGFic29sdXRlIGxvb2t1cHMgdHVybgomIzQzOwkJCSAqIHRoZSBhYnNlbmNlIGludG8gLUVOT0VOVCBpbiBuZF9qdW1wX3Jvb3QoKSwgd2hpbGUgJiMzNDsuLiYjMzQ7CiYjNDM7CQkJICogdHJlYXRzIGEgTlVMTCByb290IGFzICYjMzQ7bm8gYm91bmRhcnkmIzM0OyBhbmQgY2xpbWJzIHRvIGl0cwomIzQzOwkJCSAqIG1vdW50IHJvb3QuCiYjNDM7CQkJICovCiYjNDM7CQkJaWYgKGxpa2VseShuZC0mZ3Q7cm9vdC5tbnQpKQomIzQzOwkJCQluZC0mZ3Q7cm9vdF9zZXEgPSBfX3JlYWRfc2VxY291bnRfYmVnaW4oJmFtcDtuZC0mZ3Q7cm9vdC5kZW50cnktJmd0O2Rfc2VxKTsKIAkJfSB3aGlsZSAocmVhZF9zZXFyZXRyeSgmYW1wO2ZzLSZndDtzZXEsIHNlcSkpOwogCX0gZWxzZSB7CiAJCWdldF9mc19yb290KGZzLCAmYW1wO25kLSZndDtyb290KTsKLQkJbmQtJmd0O3N0YXRlIHw9IE5EX1JPT1RfR1JBQkJFRDsKJiM0MzsJCWlmIChsaWtlbHkobmQtJmd0O3Jvb3QubW50KSkKJiM0MzsJCQluZC0mZ3Q7c3RhdGUgfD0gTkRfUk9PVF9HUkFCQkVEOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTExNDMsNiAmIzQzOzExNTIsOSBAQCBzdGF0aWMgaW50IG5kX2p1bXBfcm9vdChzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKIAkJaWYgKHVubGlrZWx5KGVycm9yKSkKIAkJCXJldHVybiBlcnJvcjsKIAl9CiYjNDM7CS8qIEFic29sdXRlIHBhdGhzIG5lZWQgYSByb290IHRvIGp1bXAgdG87IGEgdGFzayBtYXkgaGF2ZSBub25lLiAqLwomIzQzOwlpZiAodW5saWtlbHkoIW5kLSZndDtyb290Lm1udCkpCiYjNDM7CQlyZXR1cm4gLUVOT0VOVDsKIAlpZiAobmQtJmd0O2ZsYWdzICZhbXA7IExPT0tVUF9SQ1UpIHsKIAkJc3RydWN0IGRlbnRyeSAqZDsKIAkJbmQtJmd0O3BhdGggPSBuZC0mZ3Q7cm9vdDsKQEAgLTI3MzIsMTEgJiM0MzsyNzQ0LDE3IEBAIHN0YXRpYyBjb25zdCBjaGFyICpwYXRoX2luaXQoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHVuc2lnbmVkIGZsYWdzKQogCQkJZG8gewogCQkJCXNlcSA9IHJlYWRfc2VxYmVnaW4oJmFtcDtmcy0mZ3Q7c2VxKTsKIAkJCQluZC0mZ3Q7cGF0aCA9IGZzLSZndDtwd2Q7CiYjNDM7CQkJCS8qIEEgdGFzayBtYXkgaGF2ZSBubyBjd2QuICovCiYjNDM7CQkJCWlmICh1bmxpa2VseSghbmQtJmd0O3BhdGgubW50KSkKJiM0MzsJCQkJCXJldHVybiBFUlJfUFRSKC1FTk9FTlQpOwogCQkJCW5kLSZndDtpbm9kZSA9IG5kLSZndDtwYXRoLmRlbnRyeS0mZ3Q7ZF9pbm9kZTsKIAkJCQluZC0mZ3Q7c2VxID0gX19yZWFkX3NlcWNvdW50X2JlZ2luKCZhbXA7bmQtJmd0O3BhdGguZGVudHJ5LSZndDtkX3NlcSk7CiAJCQl9IHdoaWxlIChyZWFkX3NlcXJldHJ5KCZhbXA7ZnMtJmd0O3NlcSwgc2VxKSk7CiAJCX0gZWxzZSB7CiAJCQlnZXRfZnNfcHdkKGN1cnJlbnQtJmd0O2ZzLCAmYW1wO25kLSZndDtwYXRoKTsKJiM0MzsJCQkvKiBBIHRhc2sgbWF5IGhhdmUgbm8gY3dkLiAqLwomIzQzOwkJCWlmICh1bmxpa2VseSghbmQtJmd0O3BhdGgubW50KSkKJiM0MzsJCQkJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7CiAJCQluZC0mZ3Q7aW5vZGUgPSBuZC0mZ3Q7cGF0aC5kZW50cnktJmd0O2RfaW5vZGU7CiAJCX0KIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9iYXNlLmMgYi9mcy9wcm9jL2Jhc2UuYwppbmRleCA3ODBmODEyNTkwNTI3Yy4uN2Y3Y2M4NmNlMjYyNDIgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvYmFzZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Byb2MvYmFzZS5jCkBAIC0yMTMsNyAmIzQzOzIxMyw5IEBAIHN0YXRpYyBpbnQgZ2V0X3Rhc2tfcm9vdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBwYXRoICpyb290KQogCXRhc2tfbG9jayh0YXNrKTsKIAlpZiAodGFzay0mZ3Q7ZnMpIHsKIAkJZ2V0X2ZzX3Jvb3QodGFzay0mZ3Q7ZnMsIHJvb3QpOwotCQlyZXN1bHQgPSAwOwomIzQzOwkJLyogQSB0YXNrIG1heSBoYXZlIG5vIHJvb3QuICovCiYjNDM7CQlpZiAocm9vdC0mZ3Q7bW50KQomIzQzOwkJCXJlc3VsdCA9IDA7CiAJfQogCXRhc2tfdW5sb2NrKHRhc2spOwogCXJldHVybiByZXN1bHQ7CkBAIC0yMjcsNyAmIzQzOzIyOSw5IEBAIHN0YXRpYyBpbnQgcHJvY19jd2RfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBwYXRoICpwYXRoLAogCXRhc2tfbG9jayh0YXNrKTsKIAlpZiAodGFzay0mZ3Q7ZnMpIHsKIAkJZ2V0X2ZzX3B3ZCh0YXNrLSZndDtmcywgcGF0aCk7Ci0JCXJlc3VsdCA9IDA7CiYjNDM7CQkvKiBBIHRhc2sgbWF5IGhhdmUgbm8gY3dkLiAqLwomIzQzOwkJaWYgKHBhdGgtJmd0O21udCkKJiM0MzsJCQlyZXN1bHQgPSAwOwogCX0KIAl0YXNrX3VubG9jayh0YXNrKTsKIAlyZXR1cm4gcmVzdWx0OwpkaWZmIC0tZ2l0IGEvZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jIGIvZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zZmI3ZTYzNTQ1ZjhjNgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYwpAQCAtMCwwICYjNDM7MSwxNDcgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7LyoKJiM0MzsgKiBLVW5pdCB0ZXN0cyBmb3IgdGFza3Mgd2hvc2UgZnMtJmd0O3Jvb3QgYW5kL29yIGZzLSZndDtwd2QgaXMgdGhlIE5VTEwgcGF0aC4KJiM0MzsgKiBTZWUgJiMzNDtmczogc3VwcG9ydCB0YXNrcyB3aXRoIGEgbnVsbCByb290IG9yIGN3ZCYjMzQ7LgomIzQzOyAqCiYjNDM7ICogRWFjaCB0ZXN0IHJ1bnMgYWdhaW5zdCB0aGlzIHRhc2smIzM5O3Mgb3duIGZzX3N0cnVjdC4gV2UgdW5zaGFyZSBpdCBmaXJzdAomIzQzOyAqIHNvIHdlIG9ubHkgZXZlciB0b3VjaCBhIHByaXZhdGUgY29weSwgbmV2ZXIgdGhlIHNoYXJlZCBvbmUsIGFuZCB3ZQomIzQzOyAqIHJlc3RvcmUgdGhlIG9yaWdpbmFsIHJvb3QvY3dkIGFmdGVyd2FyZHMuCiYjNDM7ICovCiYjNDM7I2luY2x1ZGUgJmx0O2t1bml0L3Rlc3QuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZnNfc3RydWN0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L25hbWVpLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BhdGguaCZndDsKJiM0MzsKJiM0MzsvKiBUaGUgTlVMTCBwYXRoOiB7IC5tbnQgPSBOVUxMLCAuZGVudHJ5ID0gTlVMTCB9LiAqLwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGF0aCBudWxsX3BhdGg7CiYjNDM7CiYjNDM7c3RydWN0IG51bGxfZnNfY3R4IHsKJiM0MzsJc3RydWN0IHBhdGggc2F2ZWRfcm9vdDsKJiM0MzsJc3RydWN0IHBhdGggc2F2ZWRfcHdkOwomIzQzOwlzdHJ1Y3QgcGF0aCBhbmNob3I7CS8qIGEgcmVhbCBkaXJlY3RvcnksIHN0YW5kaW5nIGluIGZvciBhIGRpcmZkICovCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IG51bGxfZnNfc2V0dXAoc3RydWN0IG51bGxfZnNfY3R4ICpjdHgpCiYjNDM7ewomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwllcnIgPSB1bnNoYXJlX2ZzX3N0cnVjdCgpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsJZXJyID0ga2Vybl9wYXRoKCYjMzQ7LyYjMzQ7LCBMT09LVVBfRElSRUNUT1JZLCAmYW1wO2N0eC0mZ3Q7YW5jaG9yKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CWdldF9mc19yb290KGN1cnJlbnQtJmd0O2ZzLCAmYW1wO2N0eC0mZ3Q7c2F2ZWRfcm9vdCk7CiYjNDM7CWdldF9mc19wd2QoY3VycmVudC0mZ3Q7ZnMsICZhbXA7Y3R4LSZndDtzYXZlZF9wd2QpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbnVsbF9mc190ZWFyZG93bihzdHJ1Y3QgbnVsbF9mc19jdHggKmN0eCkKJiM0Mzt7CiYjNDM7CXNldF9mc19yb290KGN1cnJlbnQtJmd0O2ZzLCAmYW1wO2N0eC0mZ3Q7c2F2ZWRfcm9vdCk7CiYjNDM7CXNldF9mc19wd2QoY3VycmVudC0mZ3Q7ZnMsICZhbXA7Y3R4LSZndDtzYXZlZF9wd2QpOwomIzQzOwlwYXRoX3B1dCgmYW1wO2N0eC0mZ3Q7c2F2ZWRfcm9vdCk7CiYjNDM7CXBhdGhfcHV0KCZhbXA7Y3R4LSZndDtzYXZlZF9wd2QpOwomIzQzOwlwYXRoX3B1dCgmYW1wO2N0eC0mZ3Q7YW5jaG9yKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogUmVzb2x2ZSBAbmFtZSwgZHJvcCBhbnkgcmVmZXJlbmNlIGl0IHJldHVybnMsIGFuZCB5aWVsZCB0aGUgZXJybm8uICovCiYjNDM7c3RhdGljIGludCB0cnlfa2Vybl9wYXRoKGNvbnN0IGNoYXIgKm5hbWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGF0aCBvdXQ7CiYjNDM7CWludCBlcnIgPSBrZXJuX3BhdGgobmFtZSwgMCwgJmFtcDtvdXQpOwomIzQzOwomIzQzOwlpZiAoIWVycikKJiM0MzsJCXBhdGhfcHV0KCZhbXA7b3V0KTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB0cnlfZmRfcmVsYXRpdmUoc3RydWN0IG51bGxfZnNfY3R4ICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGF0aCBvdXQ7CiYjNDM7CWludCBlcnIgPSB2ZnNfcGF0aF9sb29rdXAoY3R4LSZndDthbmNob3IuZGVudHJ5LCBjdHgtJmd0O2FuY2hvci5tbnQsCiYjNDM7CQkJCSAgbmFtZSwgMCwgJmFtcDtvdXQpOwomIzQzOwomIzQzOwlpZiAoIWVycikKJiM0MzsJCXBhdGhfcHV0KCZhbXA7b3V0KTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogTm8gcm9vdDogYWJzb2x1dGUgcGF0aHMgZmFpbCwgYnV0ICYjMzQ7Li4mIzM0OyBjbGltYnMgYW5kIHRoZSBjd2Qgc3RpbGwgd29ya3MuICovCiYjNDM7c3RhdGljIHZvaWQgbnVsbF9yb290X3Rlc3Qoc3RydWN0IGt1bml0ICp0ZXN0KQomIzQzO3sKJiM0MzsJc3RydWN0IG51bGxfZnNfY3R4IGN0eDsKJiM0MzsKJiM0MzsJS1VOSVRfQVNTRVJUX0VRKHRlc3QsIG51bGxfZnNfc2V0dXAoJmFtcDtjdHgpLCAwKTsKJiM0MzsJc2V0X2ZzX3Jvb3QoY3VycmVudC0mZ3Q7ZnMsICZhbXA7bnVsbF9wYXRoKTsKJiM0MzsKJiM0MzsJLyogQSBsZWFkaW5nICYjMzk7LyYjMzk7IGhhcyBub3RoaW5nIHRvIGFuY2hvciB0by4gKi8KJiM0MzsJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIHRyeV9rZXJuX3BhdGgoJiMzNDsvJiMzNDspLCAtRU5PRU5UKTsKJiM0MzsKJiM0MzsJLyogJiMzNDsuLiYjMzQ7IGlzIHVuYm91bmRlZCByYXRoZXIgdGhhbiByZWZ1c2VkIChpdCB3b3VsZCBoYXZlIGJlZW4KJiM0MzsJICogLUVOT0VOVCBiZWZvcmUgdGhpcyBmZWF0dXJlKS4gSXQgc3RhcnRzIGZyb20gdGhlIHN0aWxsLXByZXNlbnQKJiM0MzsJICogY3dkIGFuZCBydW5zIG91dCBvZiBwYXJlbnRzIGF0IHRoZSBtb3VudCByb290LgomIzQzOwkgKi8KJiM0MzsJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIHRyeV9rZXJuX3BhdGgoJiMzNDsuLiYjMzQ7KSwgMCk7CiYjNDM7CiYjNDM7CS8qIFRoZSBjd2QgaXMgdW50b3VjaGVkOiBBVF9GRENXRC1yZWxhdGl2ZSBsb29rdXBzIHN0aWxsIHJlc29sdmUuICovCiYjNDM7CUtVTklUX0VYUEVDVF9FUSh0ZXN0LCB0cnlfa2Vybl9wYXRoKCYjMzQ7LiYjMzQ7KSwgMCk7CiYjNDM7CiYjNDM7CS8qIEEgZGlyZmQtYW5jaG9yZWQgbG9va3VwIG5ldmVyIGNvbnN1bHRzIGZzLSZndDtyb290LiAqLwomIzQzOwlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgdHJ5X2ZkX3JlbGF0aXZlKCZhbXA7Y3R4LCAmIzM0Oy4mIzM0OyksIDApOwomIzQzOwomIzQzOwludWxsX2ZzX3RlYXJkb3duKCZhbXA7Y3R4KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogTm8gY3dkOiBBVF9GRENXRC1yZWxhdGl2ZSBwYXRocyBmYWlsLCBidXQgYWJzb2x1dGUgYW5kIGRpcmZkcyB3b3JrLiAqLwomIzQzO3N0YXRpYyB2b2lkIG51bGxfY3dkX3Rlc3Qoc3RydWN0IGt1bml0ICp0ZXN0KQomIzQzO3sKJiM0MzsJc3RydWN0IG51bGxfZnNfY3R4IGN0eDsKJiM0MzsKJiM0MzsJS1VOSVRfQVNTRVJUX0VRKHRlc3QsIG51bGxfZnNfc2V0dXAoJmFtcDtjdHgpLCAwKTsKJiM0MzsJc2V0X2ZzX3B3ZChjdXJyZW50LSZndDtmcywgJmFtcDtudWxsX3BhdGgpOwomIzQzOwomIzQzOwkvKiBSZWxhdGl2ZS10by1jd2QgbG9va3VwcyBoYXZlIG5vIHN0YXJ0aW5nIHBvaW50LiAqLwomIzQzOwlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgdHJ5X2tlcm5fcGF0aCgmIzM0Oy4mIzM0OyksIC1FTk9FTlQpOwomIzQzOwlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgdHJ5X2tlcm5fcGF0aCgmIzM0O2ZvbyYjMzQ7KSwgLUVOT0VOVCk7CiYjNDM7CiYjNDM7CS8qIFRoZSByb290IGlzIHVudG91Y2hlZDogYWJzb2x1dGUgbG9va3VwcyBzdGlsbCByZXNvbHZlLiAqLwomIzQzOwlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgdHJ5X2tlcm5fcGF0aCgmIzM0Oy8mIzM0OyksIDApOwomIzQzOwomIzQzOwkvKiBBIGRpcmZkLWFuY2hvcmVkIGxvb2t1cCBuZXZlciBjb25zdWx0cyBmcy0mZ3Q7cHdkLiAqLwomIzQzOwlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgdHJ5X2ZkX3JlbGF0aXZlKCZhbXA7Y3R4LCAmIzM0Oy4mIzM0OyksIDApOwomIzQzOwomIzQzOwludWxsX2ZzX3RlYXJkb3duKCZhbXA7Y3R4KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogTmVpdGhlciByb290IG5vciBjd2Q6IG9ubHkgZGVzY3JpcHRvci1yZWxhdGl2ZSBsb29rdXBzIHJlbWFpbi4gKi8KJiM0MztzdGF0aWMgdm9pZCBudWxsX3Jvb3RfYW5kX2N3ZF90ZXN0KHN0cnVjdCBrdW5pdCAqdGVzdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBudWxsX2ZzX2N0eCBjdHg7CiYjNDM7CiYjNDM7CUtVTklUX0FTU0VSVF9FUSh0ZXN0LCBudWxsX2ZzX3NldHVwKCZhbXA7Y3R4KSwgMCk7CiYjNDM7CXNldF9mc19yb290KGN1cnJlbnQtJmd0O2ZzLCAmYW1wO251bGxfcGF0aCk7CiYjNDM7CXNldF9mc19wd2QoY3VycmVudC0mZ3Q7ZnMsICZhbXA7bnVsbF9wYXRoKTsKJiM0MzsKJiM0MzsJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIHRyeV9rZXJuX3BhdGgoJiMzNDsvJiMzNDspLCAtRU5PRU5UKTsKJiM0MzsJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIHRyeV9rZXJuX3BhdGgoJiMzNDsuJiMzNDspLCAtRU5PRU5UKTsKJiM0MzsKJiM0MzsJLyogVGhlIGhlbGQgZGVzY3JpcHRvciBzdGlsbCBuYW1lcyBmaWxlcy4gKi8KJiM0MzsJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIHRyeV9mZF9yZWxhdGl2ZSgmYW1wO2N0eCwgJiMzNDsuJiMzNDspLCAwKTsKJiM0MzsKJiM0MzsJbnVsbF9mc190ZWFyZG93bigmYW1wO2N0eCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBudWxsX3Jvb3RfY3dkX3Rlc3RfY2FzZXNbXSA9IHsKJiM0MzsJS1VOSVRfQ0FTRShudWxsX3Jvb3RfdGVzdCksCiYjNDM7CUtVTklUX0NBU0UobnVsbF9jd2RfdGVzdCksCiYjNDM7CUtVTklUX0NBU0UobnVsbF9yb290X2FuZF9jd2RfdGVzdCksCiYjNDM7CXt9LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBrdW5pdF9zdWl0ZSBudWxsX3Jvb3RfY3dkX3Rlc3Rfc3VpdGUgPSB7CiYjNDM7CS5uYW1lID0gJiMzNDtudWxsX3Jvb3RfY3dkJiMzNDssCiYjNDM7CS50ZXN0X2Nhc2VzID0gbnVsbF9yb290X2N3ZF90ZXN0X2Nhc2VzLAomIzQzO307CiYjNDM7CiYjNDM7a3VuaXRfdGVzdF9zdWl0ZShudWxsX3Jvb3RfY3dkX3Rlc3Rfc3VpdGUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mc19zdHJ1Y3QuaCBiL2luY2x1ZGUvbGludXgvZnNfc3RydWN0LmgKaW5kZXggMDA3MDc2NGI3OTBhM2UuLjg0NDIzYjRiZDIxYWU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzX3N0cnVjdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZnNfc3RydWN0LmgKQEAgLTEyLDcgJiM0MzsxMiwzNCBAQCBzdHJ1Y3QgZnNfc3RydWN0IHsKIAlzZXFsb2NrX3Qgc2VxOwogCWludCB1bWFzazsKIAlpbnQgaW5fZXhlYzsKLQlzdHJ1Y3QgcGF0aCByb290LCBwd2Q7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIE5vdGUgdGhhdCB0aGVzZSBwYXRocyBhcmUgZXhwbGljaXRseSBpbnRlbmRlZCB0byBiZSBudWxsYWJsZS4KJiM0MzsJICogU2luY2UgdGhleSBhcmUgaW5saW5lIHN0cnVjdHMgYW5kIG5vdCBwb2ludGVycywgd2UgdXNlIGAubW50CiYjNDM7CSAqID09IE5VTExgIHRvIGluZGljYXRlIG51bGxhYmlsaXR5IG9mIHRoZSBwYXRoIGFzIGEgd2hvbGUuCiYjNDM7CSAqLwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUaGUgcm9vdCBkaXJlY3RvcnkgZm9yIHRoZSB0YXNrKHMpIHRoYXQgcG9pbnRzIHRvIHRoaXMKJiM0MzsJICogYGZzX3N0cnVjdGAuIFRoZSByb290IGRpcmVjdG9yeSBhbHNvIGNvbnRyb2xzIGhvdyBgLi5gCiYjNDM7CSAqIHJlc29sdmU7IHBhdGggdHJhdmVyc2FsIGlzIG5vdCBhbGxvd2VkIHRvIHJlc29sdmUgdXB3YXJkcwomIzQzOwkgKiBiZXlvbmQgdGhlIHJvb3QgZGlyZWN0b3J5LiAoSXQgaXMgZm9yIHRoaXMgbGF0dGVyIHJlYXNvbiB0aGF0CiYjNDM7CSAqIGBjaHJvb3RgIGlzIGEgcHJpdmlsZWdlZCBvcGVyYXRpb24uKQomIzQzOwkgKgomIzQzOwkgKiBJZiBudWxsIChhcyBkZXNjcmliZWQgYWJvdmUpLCBhYnNvbHV0ZSBwYXRocyB3aWxsIG5vdAomIzQzOwkgKiByZXNvbHZlLiBJbiBhZGRpdGlvbiBgLi5gIHdpbGwgYmUgdW5ib3VuZGVkLCB1bnRpbCBvbmUKJiM0MzsJICogcmVhY2hlcyB0aGUgdG9wIG9mIHRoZSBtb3VudCB0cmVlLgomIzQzOwkgKi8KJiM0MzsJc3RydWN0IHBhdGggcm9vdDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgZm9yIHRoZSB0YXNrKHMpIHRoYXQgcG9pbnRzIHRvCiYjNDM7CSAqIHRoaXMgYGZzX3N0cnVjdGAuCiYjNDM7CSAqCiYjNDM7CSAqIElmIG51bGwgKGFzIGRlc2NyaWJlZCBhYm92ZSksIHJlbGF0aXZlIHBhdGhzIHdpdGggYEFUX0ZEQ1dEYAomIzQzOwkgKiB3aWxsIG5vdCByZXNvbHZlLgomIzQzOwkgKi8KJiM0MzsJc3RydWN0IHBhdGggcHdkOwogfSBfX3JhbmRvbWl6ZV9sYXlvdXQ7CiAKIGV4dGVybiBzdHJ1Y3Qga21lbV9jYWNoZSAqZnNfY2FjaGVwOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwNzoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTIzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTnVsbCBSb290L0NXRCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgYXBwZWFycyB0byBpbnRyb2R1Y2Ugc3VwcG9ydCBmb3IgdGFza3Mgd2l0aCBhIG51bGwgcm9vdCBvciBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiBUaGUgcGF0Y2ggdG91Y2hlcyBxdWl0ZSBhIGZldyBmaWxlczogYGZzL2NhY2hlZmlsZXMvZGFlbW9uLmNgLCBgZnMvZF9wYXRoLmNgLCBgZnMvZmhhbmRsZS5jYCwgYGZzL2ZzX3N0cnVjdC5jYCwgYGZzL25hbWVpLmNgLCBgZnMvcHJvYy9iYXNlLmNgLCBgZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jYCwgYW5kIGBpbmNsdWRlL2xpbnV4L2ZzX3N0cnVjdC5oYC4gSXQgYWxzbyBhZGRzIGEgbmV3IEtjb25maWcgb3B0aW9uLCBgTlVMTF9ST09UX0NXRF9LVU5JVF9URVNUYC4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgdGhlIG1vc3QgaW50ZXJlc3RpbmcgY2hhbmdlcyBhcmUgZGVmaW5pdGVseSBpbiBgZnMvbmFtZWkuY2AgYW5kIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyB0aGVzZSBudWxsIG1vdW50IHBvaW50cy4gVGhleSBzZWVtIHRvIGJlIG1vZGlmeWluZyB0aGUgcGF0aCByZXNvbHV0aW9uIGxvZ2ljIHRvIGRlYWwgd2l0aCBjYXNlcyB3aGVyZSBgIXBhdGgubW50YCBpcyB0cnVlIOKAkyBhbmQgZXZlbiBtb3JlLCBJIHNlZSB0aGV5JiMzOTtyZSBoYW5kbGluZyBgIW5kLSZndDtyb290Lm1udGAgYW5kIGAhbmQtJmd0O3BhdGgubW50YCBleHBsaWNpdGx5LiBUaGlzIHNlZW1zIGxpa2UgY29yZSBmdW5jdGlvbmFsIGxvZ2ljLCBub3QganVzdCBpbnRlcm5hbCBob3VzZWtlZXBpbmcuCgpOb3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBpcyBzb21ldGhpbmcgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIG9yIGlmIGl0IGlzIHB1cmVseSBpbnRlcm5hbC4gTXkgZ3V0IGZlZWxpbmcgaXMgdGVsbGluZyBtZSB0aGF0IGl0IG11c3QgYmUgcG9zc2libGUgdG8gdHJpZ2dlciBpdCBmcm9tIHVzZXIgc3BhY2UgaWYgdGhleSBhcmUgbW9kaWZ5aW5nIHNvIG1hbnkgY29yZSBmdW5jdGlvbnMuIEJ1dCBob3cgZG9lcyBhIHRhc2sgKmdldCogYSBudWxsIHJvb3Qgb3IgY3dkPyBJcyB0aGVyZSBhIHN5c2NhbGwgZm9yIHRoaXMsIG9yIHNvbWUgb3RoZXIgbWVjaGFuaXNtPyBUaGUgcGF0Y2ggZGVzY3JpcHRpb24gbWVudGlvbnMgJiMzNDtzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcmIzM0Oywgc28gaXQmIzM5O3MgcHJvYmFibHkgcmVsYXRlZCB0byBzeXprYWxsZXIgZnV6emluZy4KCkxldCYjMzk7cyBkaXZlIGRlZXBlciBpbnRvIHRoZSBgZnMvbmFtZWkuY2AgY2hhbmdlcyB0aGVtc2VsdmVzLiBBaCwgaGVyZSYjMzk7cyBhIGNydWNpYWwgc25pcHBldDoKCmBgYGMKQEAgLTExMjAsMTEgJiM0MzsxMTIwLDIwIEBAIHN0YXRpYyBpbnQgc2V0X3Jvb3Qoc3RydWN0IG5hbWVpZGF0YSAqbmQpCiAJCWRvIHsKIAkJCXNlcSA9IHJlYWRfc2VxYmVnaW4oJmFtcDtmcy0mZ3Q7c2VxKTsKIAkJCW5kLSZndDtyb290ID0gZnMtJmd0O3Jvb3Q7Ci0JCQluZC0mZ3Q7cm9vdF9zZXEgPSBfX3JlYWRfc2VxY291bnRfYmVnaW4oJmFtcDtuZC0mZ3Q7cm9vdC5kZW50cnktJmd0O2Rfc2VxKTsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIEEgdGFzayBtYXkgaGF2ZSBubyByb290LiBMZWF2ZSBuZC0mZ3Q7cm9vdCBhcyB0aGUgTlVMTAouLi4KYGBgCgpSaWdodCwgdGhlIGNvbW1lbnQgaXMgcHJldHR5IGNsZWFyIHRoYXQgJiMzNDtBIHRhc2sgbWF5IGhhdmUgbm8gcm9vdCYjMzQ7LiBOb3cgdGhlIHF1ZXN0aW9uIGJlY29tZXMsIGlzIHRoZXJlIHNvbWUgd2F5IHRvIHNldCBgZnMtJmd0O3Jvb3QubW50YCB0byBOVUxMIGZyb20gdXNlcnNwYWNlPyBUaW1lIHRvIGdvIGh1bnRpbmc6IEkmIzM5O20gZ29pbmcgdG8gc2VhcmNoIHRoZSBrZXJuZWwgc291cmNlIGZvciBhbnkgY2FsbHMgdG8gYHNldF9mc19yb290YCBvciBgc2V0X2ZzX3B3ZGAsIGxvb2tpbmcgc3BlY2lmaWNhbGx5IGZvciBpbnN0YW5jZXMgd2hlcmUgdGhleSBtaWdodCBiZSBwYXNzZWQgYSBOVUxMIHBvaW50ZXIuIFRoYXQgc2hvdWxkIGxlYWQgbWUgdG8gdGhlIGVudHJ5IHBvaW50IGZvciB0aGlzIGZ1bmN0aW9uYWxpdHksIGFuZCBoZWxwIG1lIGZpZ3VyZSBvdXQgaG93IHRoaXMgaXMgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA3OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NldF9mc19yb290LipudWxsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYz03MT1zdGF0aWMgdm9pZCBudWxsX3Jvb3RfdGVzdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jLTc1LVx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIG51bGxfZnNfc2V0dXAoXHUwMDI2Y3R4KSwgMCk7XG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmM6NzY6XHRzZXRfZnNfcm9vdChjdXJyZW50LVx1MDAzZWZzLCBcdTAwMjZudWxsX3BhdGgpO1xuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jLTc3LVxuLS1cbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYz0xMTg9c3RhdGljIHZvaWQgbnVsbF9yb290X2FuZF9jd2RfdGVzdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jLTEyMi1cdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCBudWxsX2ZzX3NldHVwKFx1MDAyNmN0eCksIDApO1xuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jOjEyMzpcdHNldF9mc19yb290KGN1cnJlbnQtXHUwMDNlZnMsIFx1MDAyNm51bGxfcGF0aCk7XG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmMtMTI0LVx0c2V0X2ZzX3B3ZChjdXJyZW50LVx1MDAzZWZzLCBcdTAwMjZudWxsX3BhdGgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA3OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0ODYKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MgbGFpZCBvdXQsIGFzc3VtaW5nIEkmIzM5O20gZGVlcCBpbiB0aGUgd2VlZHMgd2l0aCBmaWxlc3lzdGVtIGtlcm5lbCBjb2RlLCBhbmQgdGhpcyBpcyBhIHBvdGVudGlhbCBidWcgSSYjMzk7bSBjaGFzaW5nOgoKKipSb290IENhdXNlIEFuYWx5c2lzIC0gYGZzLSZndDtyb290Lm1udGAgTlVMTGlmaWNhdGlvbioqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gVGhlIGZhY3QgdGhhdCBgZnMtJmd0O3Jvb3QubW50YCBpcyBlbmRpbmcgdXAgYXMgTlVMTCBpcyBhIHNlcmlvdXMgcmVkIGZsYWcuIFdlIGtub3cgaXQgc2hvdWxkbiYjMzk7dCBiZSwgc28gbGV0JiMzOTtzIHRyYWNrIGRvd24gKndoZXJlKiB0aGlzIHZhbHVlIGlzIGJlaW5nIHplcm9lZCBvdXQuIFRoZSBwcmltYXJ5IGZvY3VzIG5lZWRzIHRvIGJlIGlkZW50aWZ5aW5nIGV2ZXJ5IGluc3RhbmNlIHdoZXJlIGBmcy0mZ3Q7cm9vdC5tbnRgIG1pZ2h0IGJlIGV4cGxpY2l0bHkgc2V0IHRvIE5VTEwuIEl04oCZcyBhIHByZXR0eSBkaXJlY3QgcGF0aCBmb3IgYSBrZXJuZWwgaXNzdWUsIHNvIGl0JiMzOTtzIGEgZ29vZCBwbGFjZSB0byBzdGFydC4gSSYjMzk7bGwgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSBjb2RlYmFzZSBhbmQgc2VhcmNoIGZvciBhbnl0aGluZyB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IG1vZGlmeSB0aGlzIGNydWNpYWwgZGF0YSBlbGVtZW50LCBhbmQgbWFrZSBzdXJlIHRvIGFjY291bnQgZm9yIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBtYXkgYmUgbWFuaXB1bGF0aW5nIHRoaXMgZGF0YSBhcyB3ZWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA3OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NldF9mc19yb290JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2ZzX3N0cnVjdC5jLTE1LSAqL1xuZnMvZnNfc3RydWN0LmM6MTY6dm9pZCBzZXRfZnNfcm9vdChzdHJ1Y3QgZnNfc3RydWN0ICpmcywgY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpXG5mcy9mc19zdHJ1Y3QuYy0xNy17XG4tLVxuZnMvaW5pdC5jPTc2PWludCBfX2luaXQgaW5pdF9jaHJvb3QoY29uc3QgY2hhciAqZmlsZW5hbWUpXG4tLVxuZnMvaW5pdC5jLTkyLVx0XHRnb3RvIGRwdXRfYW5kX291dDtcbmZzL2luaXQuYzo5MzpcdHNldF9mc19yb290KGN1cnJlbnQtXHUwMDNlZnMsIFx1MDAyNnBhdGgpO1xuZnMvaW5pdC5jLTk0LWRwdXRfYW5kX291dDpcbi0tXG5mcy9uYW1lc3BhY2UuYz02MTgwPXN0YXRpYyB2b2lkIF9faW5pdCBpbml0X21vdW50X3RyZWUodm9pZClcbi0tXG5mcy9uYW1lc3BhY2UuYy02MjM4LVx0c2V0X2ZzX3B3ZChjdXJyZW50LVx1MDAzZWZzLCBcdTAwMjZyb290KTtcbmZzL25hbWVzcGFjZS5jOjYyMzk6XHRzZXRfZnNfcm9vdChjdXJyZW50LVx1MDAzZWZzLCBcdTAwMjZyb290KTtcbmZzL25hbWVzcGFjZS5jLTYyNDAtXG4tLVxuZnMvbmFtZXNwYWNlLmM9NjQ3OT1zdGF0aWMgaW50IG1udG5zX2luc3RhbGwoc3RydWN0IG5zc2V0ICpuc3NldCwgc3RydWN0IG5zX2NvbW1vbiAqbnMpXG4tLVxuZnMvbmFtZXNwYWNlLmMtNjUxNi1cdHNldF9mc19wd2QoZnMsIFx1MDAyNnJvb3QpO1xuZnMvbmFtZXNwYWNlLmM6NjUxNzpcdHNldF9mc19yb290KGZzLCBcdTAwMjZyb290KTtcbmZzL25hbWVzcGFjZS5jLTY1MTgtXG4tLVxuZnMvb3Blbi5jPTU4OD1TWVNDQUxMX0RFRklORTEoY2hyb290LCBjb25zdCBjaGFyIF9fdXNlciAqLCBmaWxlbmFtZSlcbi0tXG5mcy9vcGVuLmMtNjA3LVx0aWYgKCFlcnJvcilcbmZzL29wZW4uYzo2MDg6XHRcdHNldF9mc19yb290KGN1cnJlbnQtXHUwMDNlZnMsIFx1MDAyNnBhdGgpO1xuZnMvb3Blbi5jLTYwOS1kcHV0X2FuZF9vdXQ6XG4tLVxuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jPTM5PXN0YXRpYyB2b2lkIG51bGxfZnNfdGVhcmRvd24oc3RydWN0IG51bGxfZnNfY3R4ICpjdHgpXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmMtNDAte1xuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jOjQxOlx0c2V0X2ZzX3Jvb3QoY3VycmVudC1cdTAwM2VmcywgXHUwMDI2Y3R4LVx1MDAzZXNhdmVkX3Jvb3QpO1xuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jLTQyLVx0c2V0X2ZzX3B3ZChjdXJyZW50LVx1MDAzZWZzLCBcdTAwMjZjdHgtXHUwMDNlc2F2ZWRfcHdkKTtcbi0tXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmM9NzE9c3RhdGljIHZvaWQgbnVsbF9yb290X3Rlc3Qoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYy03NS1cdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCBudWxsX2ZzX3NldHVwKFx1MDAyNmN0eCksIDApO1xuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jOjc2Olx0c2V0X2ZzX3Jvb3QoY3VycmVudC1cdTAwM2VmcywgXHUwMDI2bnVsbF9wYXRoKTtcbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYy03Ny1cbi0tXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmM9MTE4PXN0YXRpYyB2b2lkIG51bGxfcm9vdF9hbmRfY3dkX3Rlc3Qoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYy0xMjItXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgbnVsbF9mc19zZXR1cChcdTAwMjZjdHgpLCAwKTtcbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYzoxMjM6XHRzZXRfZnNfcm9vdChjdXJyZW50LVx1MDAzZWZzLCBcdTAwMjZudWxsX3BhdGgpO1xuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jLTEyNC1cdHNldF9mc19wd2QoY3VycmVudC1cdTAwM2VmcywgXHUwMDI2bnVsbF9wYXRoKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzX3N0cnVjdC5oPTQ3PWV4dGVybiB2b2lkIGV4aXRfZnMoc3RydWN0IHRhc2tfc3RydWN0ICopO1xuaW5jbHVkZS9saW51eC9mc19zdHJ1Y3QuaDo0ODpleHRlcm4gdm9pZCBzZXRfZnNfcm9vdChzdHJ1Y3QgZnNfc3RydWN0ICosIGNvbnN0IHN0cnVjdCBwYXRoICopO1xuaW5jbHVkZS9saW51eC9mc19zdHJ1Y3QuaC00OS1leHRlcm4gdm9pZCBzZXRfZnNfcHdkKHN0cnVjdCBmc19zdHJ1Y3QgKiwgY29uc3Qgc3RydWN0IHBhdGggKik7XG4tLVxua2VybmVsL25zcHJveHkuYz01MzU9c3RhdGljIHZvaWQgY29tbWl0X25zc2V0KHN0cnVjdCBuc3NldCAqbnNzZXQpXG4tLVxua2VybmVsL25zcHJveHkuYy01NDktXHRpZiAoKGZsYWdzIFx1MDAyNiBDTE9ORV9ORVdOUykgXHUwMDI2XHUwMDI2IChmbGFncyBcdTAwMjYgfkNMT05FX05FV05TKSkge1xua2VybmVsL25zcHJveHkuYzo1NTA6XHRcdHNldF9mc19yb290KG1lLVx1MDAzZWZzLCBcdTAwMjZuc3NldC1cdTAwM2Vmcy1cdTAwM2Vyb290KTtcbmtlcm5lbC9uc3Byb3h5LmMtNTUxLVx0XHRzZXRfZnNfcHdkKG1lLVx1MDAzZWZzLCBcdTAwMjZuc3NldC1cdTAwM2Vmcy1cdTAwM2Vwd2QpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA3OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4MDEKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkNvbnNpZGVyaW5nIERpcmVjdCBOdWxsaW5nIG9mIGBmcy0mZ3Q7cm9vdGAqKgoKT2theSwgc28gSSYjMzk7bSBtdWxsaW5nIG92ZXIgYSBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIG9yIHNpbXBsaWZpY2F0aW9uIGhlcmUuIFRoZSBjdXJyZW50IGFwcHJvYWNoIHRvIGhhbmRsaW5nIHRoZSBmaWxlIHN5c3RlbSByb290IChgZnMtJmd0O3Jvb3RgKSBzZWVtcyBhIGJpdCByb3VuZGFib3V0IGluIHRoaXMgc3BlY2lmaWMgc2NlbmFyaW8uIE15IGluaXRpYWwgdGhvdWdodCBpczogd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiBkaXJlY3RseSBzZXR0aW5nIGBmcy0mZ3Q7cm9vdGAgdG8gYE5VTExgPyBJJiMzOTttIHRyeWluZyB0byBtZW50YWxseSB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzIGFuZCB1bmRlcnN0YW5kIHdoZXJlIHRoYXQgdmFyaWFibGUgaXMgdXNlZCBkb3duIHRoZSBsaW5lLiBXb3VsZCB0aGlzIGJ5cGFzcyBuZWNlc3NhcnkgY2xlYW51cCByb3V0aW5lcyBvciBpbnRyb2R1Y2Ugc3VidGxlIHJhY2UgY29uZGl0aW9ucz8gQXJlIHRoZXJlIGFueSBpbnZhcmlhbnRzIEkmIzM5O20gaW5hZHZlcnRlbnRseSBicmVha2luZz8gSSBuZWVkIHRvIHF1aWNrbHkgcnVuIHRocm91Z2ggdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMgaW4gbXkgaGVhZCAtIHNwZWNpZmljYWxseSwgaW5pdGlhbGl6YXRpb24sIGRlLWluaXRpYWxpemF0aW9uLCBhbmQgYW55IGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IHJlbHkgb24gdGhlIGBmcy0mZ3Q7cm9vdGAgcG9pbnRlci4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgcG90ZW50aWFsIGZvciBtZW1vcnkgbGVha3Mgb3IgZGFuZ2xpbmcgcG9pbnRlcnMgaWYgSSBnbyB0aGlzIHJvdXRlLiBUaGUgc2ltcGxpY2l0eSBvZiBhIGRpcmVjdCBudWxsIGFzc2lnbm1lbnQgaXMgYXBwZWFsaW5nLCBidXQgYXMgYWx3YXlzLCBjb3JyZWN0bmVzcyB0cnVtcHMgZWxlZ2FuY2UuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhpcyB3b24mIzM5O3QgY2F1c2UgcHJvYmxlbXMgZnVydGhlciBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwNzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmcy1cdTAwM2Vyb290ID0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbmZpbmliYW5kL2h3L2hucy9obnNfcm9jZV9kZWJ1Z2ZzLmM9ODU9c3RhdGljIHZvaWQgY3JlYXRlX3N3X3N0YXRfZGVidWdmcyhzdHJ1Y3QgaG5zX3JvY2VfZGV2ICpocl9kZXYsXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hucy9obnNfcm9jZV9kZWJ1Z2ZzLmMtOTItXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL2huc19yb2NlX2RlYnVnZnMuYzo5MzpcdGRiZ2ZzLVx1MDAzZXJvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoXCYjMzQ7c3dfc3RhdFwmIzM0OywgcGFyZW50KTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvaG5zX3JvY2VfZGVidWdmcy5jLTk0LVx0ZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDtzd19zdGF0XCYjMzQ7LCAwNDAwLCBkYmdmcy1cdTAwM2Vyb290LCBcdTAwMjZkYmdmcy1cdTAwM2Vzd19zdGF0LFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvaG5zX3JvY2VfZGVidWdmcy5jPTMwMT1zdGF0aWMgdm9pZCBjcmVhdGVfY2NfcGFyYW1fZGVidWdmcyhzdHJ1Y3QgaG5zX3JvY2VfZGV2ICpocl9kZXYsXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hucy9obnNfcm9jZV9kZWJ1Z2ZzLmMtMzI0LVx0XHRkYmdmcyA9IFx1MDAyNmhyX2Rldi1cdTAwM2VkYmdmcy5jY19wYXJhbV9yb290W2ldO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hucy9obnNfcm9jZV9kZWJ1Z2ZzLmM6MzI1Olx0XHRkYmdmcy1cdTAwM2Vyb290ID0gZGVidWdmc19jcmVhdGVfZGlyKGNvbmdfYXR0ci1cdTAwM2VuYW1lLCBwYXJlbnQpO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hucy9obnNfcm9jZV9kZWJ1Z2ZzLmMtMzI2LVx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBITlNfUk9DRV9DQ19QQVJBTV9NQVhfTlVNOyBqJiM0MzsmIzQzOykge1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvaG5zX3JvY2VfZGVidWdmcy5jPTM0Mz12b2lkIGhuc19yb2NlX3JlZ2lzdGVyX2RlYnVnZnMoc3RydWN0IGhuc19yb2NlX2RldiAqaHJfZGV2KVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvaG5zX3JvY2VfZGVidWdmcy5jLTM0Ni1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvaG5zX3JvY2VfZGVidWdmcy5jOjM0NzpcdGRiZ2ZzLVx1MDAzZXJvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIocGNpX25hbWUoaHJfZGV2LVx1MDAzZXBjaV9kZXYpLFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hucy9obnNfcm9jZV9kZWJ1Z2ZzLmMtMzQ4LVx0XHRcdFx0XHQgaG5zX3JvY2VfZGJnZnNfcm9vdCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX2N0LmM9MjE5NT1tbHg1X2N0X3RjX2NyZWF0ZV9kYmdmcyhzdHJ1Y3QgbWx4NV90Y19jdF9wcml2ICpjdF9wcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y19jdC5jLTIxOTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfY3QuYzoyMTk5Olx0Y3RfZGJnZnMtXHUwMDNlcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcihcJiMzNDtjdFwmIzM0OywgbWx4NV9kZWJ1Z2ZzX2dldF9kZXZfcm9vdChjdF9wcml2LVx1MDAzZWRldikpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX2N0LmMtMjIwMC1cdGRlYnVnZnNfY3JlYXRlX2F0b21pY190KFwmIzM0O29mZmxvYWRlZFwmIzM0OywgMDQwMCwgY3RfZGJnZnMtXHUwMDNlcm9vdCxcbi0tXG5mcy9mc19zdHJ1Y3QuYz0xNj12b2lkIHNldF9mc19yb290KHN0cnVjdCBmc19zdHJ1Y3QgKmZzLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aClcbi0tXG5mcy9mc19zdHJ1Y3QuYy0yMi1cdG9sZF9yb290ID0gZnMtXHUwMDNlcm9vdDtcbmZzL2ZzX3N0cnVjdC5jOjIzOlx0ZnMtXHUwMDNlcm9vdCA9ICpwYXRoO1xuZnMvZnNfc3RydWN0LmMtMjQtXHR3cml0ZV9zZXF1bmxvY2soXHUwMDI2ZnMtXHUwMDNlc2VxKTtcbi0tXG5mcy9mc19zdHJ1Y3QuYz0xMDc9c3RydWN0IGZzX3N0cnVjdCAqY29weV9mc19zdHJ1Y3Qoc3RydWN0IGZzX3N0cnVjdCAqb2xkKVxuLS1cbmZzL2ZzX3N0cnVjdC5jLTExNy1cdFx0cmVhZF9zZXFsb2NrX2V4Y2woXHUwMDI2b2xkLVx1MDAzZXNlcSk7XG5mcy9mc19zdHJ1Y3QuYzoxMTg6XHRcdGZzLVx1MDAzZXJvb3QgPSBvbGQtXHUwMDNlcm9vdDtcbmZzL2ZzX3N0cnVjdC5jLTExOS1cdFx0cGF0aF9nZXQoXHUwMDI2ZnMtXHUwMDNlcm9vdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDc6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwNjIKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgJiMzNDtOdWxsIFJvb3QvQ1dEJiMzNDsgUGF0Y2gqKgoKT2theSwgc28gdGhlIHBhdGNoIG5vdGVzIG1lbnRpb24gc3VwcG9ydCBmb3IgdGFza3Mgd2l0aCBhIG51bGwgcm9vdCBvciBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IChDV0QpLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjZW5hcmlvcyB0aGlzIGFwcGxpZXMgdG8uIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBjb21taXQgbWVzc2FnZSBvciBjb3ZlciBsZXR0ZXIgZm9yIGNvbnRleHQsIGJ1dCBzaW5jZSBJIGRvbiYjMzk7dCBoYXZlIHRoYXQgaGFuZHksIEkmIzM5O2xsIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UuIE15IHRob3VnaHQgaXMsIGlzIHRoZXJlIGEgc3lzdGVtIGNhbGwgdGhhdCBleHBsaWNpdGx5IGFsbG93cyBzZXR0aW5nIHRoZXNlIHBhdGhzIHRvIE5VTEw/IAoKVGhlbiBpdCBoaXRzIG1lOiB3aGF0IGFib3V0IHVubGlua2luZz8gSWYgYSB0YXNrJiMzOTtzIGN1cnJlbnQgZGlyZWN0b3J5IGlzIHVubGlua2VkLCBkb2VzIHRoZSBDV0QgYmVjb21lIE5VTEw/IE5vLCB0aGF0JiMzOTtzIG5vdCByaWdodC4gVGhlIGRlbnRyeSBpcyBqdXN0IHVubGlua2VkLCBub3QgemVyb2VkIG91dC4gU28gdGhhdCBpc24mIzM5O3QgaXQuCgpBbHJpZ2h0LCB3aGF0IG90aGVyIHR5cGUgb2YgdGFza3Mgd291bGRuJiMzOTt0IGhhdmUgYSBDV0Q/IEkgc3RhcnQgdGhpbmtpbmcsIG1heWJlIGFuIGFub255bW91cyB3b3JrZXIgdGhyZWFkPyBTYXkgbGlrZSBhbiBgaW9fdXJpbmdgIHRocmVhZC4gVGhhdCYjMzk7cyBwbGF1c2libGU7IHRob3NlIG1pZ2h0IG5vdCBiZSBhc3NvY2lhdGVkIHdpdGggYSBmaWxlc3lzdGVtIHBhdGggYXQgYWxsLiAKCk9rYXksIG5ldyBzZWFyY2ggY3JpdGVyaWEuIExldCYjMzk7cyBsb29rIGZvciBjYWxscyB0byBgc2V0X2ZzX3Jvb3RgIG9yIGBzZXRfZnNfcHdkYCB3aXRoIGEgTlVMTCBwYXRoLCBvciBpbnN0YW5jZXMgd2hlcmUgYGZzLSZndDtyb290YCBpcyBiZWluZyBleHBsaWNpdGx5IHplcm9lZCBvdXQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB3aGVyZSB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgYmVpbmcgdXRpbGl6ZWQuIEkgbmVlZCB0byB0cmFjZSB0aGUgY29kZSB0byBzZWUgdGhlIHVzZSBjYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwNzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZzLVx1MDAzZXJvb3QgPSAuKm51bGwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwNzoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU1MwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2Ugb3B0aW9ucywgY29uc2lkZXJpbmcgbXkgZXhwZXJ0LWxldmVsIHVuZGVyc3RhbmRpbmc6CgoqKlRoaW5raW5nIFRocm91Z2ggQ29uY3VycmVuY3kgZm9yIE9wdGltYWwgUGVyZm9ybWFuY2UqKgoKUmlnaHQsIHNvIHdlIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBvcHRpbWFsIGNvbmN1cnJlbmN5IG1lY2hhbmlzbSBmb3IgdGhpcyB0YXNrLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gdGhlIGxpa2VseSByZXF1aXJlbWVudHMgZm9yIGhpZ2ggcGVyZm9ybWFuY2UgYW5kIHBvdGVudGlhbCBmb3IgSS9PIG9wZXJhdGlvbnMsIGlzIHRvIGltbWVkaWF0ZWx5IGFzc2VzcyBgaW9fdXJpbmdgLiBJdHMgYXN5bmNocm9ub3VzIG5hdHVyZSBhbmQgYWJpbGl0eSB0byBiYXRjaCBJL08gb3BlcmF0aW9ucyBtYWtlIGl0IGEgcHJpbWUgY2FuZGlkYXRlLCBidXQgSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBjb21wbGV4aXR5IG92ZXJoZWFkIGludm9sdmVkIGluIGltcGxlbWVudGF0aW9uLiBBcmUgd2UgYXQgYSBwb2ludCB3aGVyZSB0aGUgcGVyZm9ybWFuY2UgZ2FpbiBvZiBgaW9fdXJpbmdgIG91dHdlaWdocyB0aGUgZGV2ZWxvcG1lbnQgdGltZSBhbmQgcG90ZW50aWFsIGRlYnVnZ2luZyBjaGFsbGVuZ2VzPyBUaGF0JiMzOTtzIHRoZSBrZXkgcXVlc3Rpb24uCgpOZXh0IHVwLCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBrdGhyZWFkYC4gQSBrZXJuZWwgdGhyZWFkIGdpdmVzIHVzIGZpbmUtZ3JhaW5lZCBjb250cm9sIGFuZCBkaXJlY3QgYWNjZXNzIHRvIGtlcm5lbCByZXNvdXJjZXMsIHdoaWNoIGNvdWxkIGJlIGJlbmVmaWNpYWwuIEhvd2V2ZXIsIEkgbmVlZCB0byB3ZWlnaCB0aGUgY29udGV4dCBzd2l0Y2hpbmcgb3ZlcmhlYWQgYW5kIHdoZXRoZXIgaXQgbWlnaHQgYmUgb3ZlcmtpbGwgZm9yIHRoaXMgcGFydGljdWxhciBwcm9ibGVtLiBJcyB0aGUgbGV2ZWwgb2YgaXNvbGF0aW9uIGFuZCBjb250cm9sIGEgcmVhbCBuZWNlc3NpdHksIG9yIGNvdWxkIGEgbGVzcyBoZWF2eXdlaWdodCBhcHByb2FjaCBzdWZmaWNlPyBUaGlzIHJlcXVpcmVzIG1lIHRvIHRob3JvdWdobHkgYW5hbHl6ZSB0aGUga2VybmVsJiMzOTtzIGxvYWQgYW5kIHRoZSBzcGVjaWZpYyBkZW1hbmRzIG9mIG91ciBwcm9jZXNzZXMuCgpGaW5hbGx5LCBJJiMzOTttIGNvbnNpZGVyaW5nIGB3b3JrcXVldWVgLiBUaGlzIHByb3ZpZGVzIGEgbW9yZSBtYW5hZ2VhYmxlIGFuZCBwZXJoYXBzIG1vcmUgcm9idXN0IHdheSB0byBvZmZsb2FkIHRhc2tzIHRvIHRoZSBrZXJuZWwuIEl0JiMzOTtzIGJ1aWx0IGZvciBhc3luY2hyb25vdXMgd29yaywgYW5kIG9mZmVycyBidWlsdC1pbiBzY2hlZHVsaW5nLCB3aGljaCBjb3VsZCBzdHJlYW1saW5lIHRoZSBkZXZlbG9wbWVudCBhbmQgbWFrZSB0aGUgd2hvbGUgc3lzdGVtIGVhc2llciB0byBtYWludGFpbi4gT2YgY291cnNlLCB0aGUgc2NoZWR1bGluZyBvdmVyaGVhZCBvZiB0aGUgd29ya3F1ZXVlIGNvdWxkIGJlIGRldHJpbWVudGFsLCBhbmQgdGhlIHBvdGVudGlhbCB0aHJvdWdocHV0IG1heSBiZSBtdWNoIGxvd2VyIHRoYW4gdGhlIG90aGVyIG9wdGlvbnMuCgpVbHRpbWF0ZWx5LCBJIGhhdmUgdG8gdGhvcm91Z2hseSBldmFsdWF0ZSBlYWNoIG9uZSYjMzk7cyBzdHJlbmd0aHMgYW5kIHdlYWtuZXNzZXMsIGNvbnNpZGVyaW5nIHRoZSBzcGVjaWZpYyBjb25zdHJhaW50cyBvZiB0aGUgcHJvYmxlbSwgdGhlIGFudGljaXBhdGVkIHdvcmtsb2FkLCBhbmQgbXkgb3duIHRlYW0mIzM5O3MgZXhwZXJ0aXNlLiBJIGNhbiYjMzk7dCBqdXN0IHBpY2sgb25lIGF0IHJhbmRvbTsgdGhlIGNob2ljZSBoYXMgdG8gYmUgYmFzZWQgb24gYSByZWFzb25lZCBhbmFseXNpcyBvZiB0aGUgdHJhZGUtb2ZmcyBiZXR3ZWVuIHBlcmZvcm1hbmNlLCBjb21wbGV4aXR5LCBhbmQgbWFpbnRhaW5hYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwNzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NldF9mc19yb290LipOVUxMJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDc6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5ODkKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4KCioqQW5hbHl6aW5nIFBvdGVudGlhbCBOdWxsIFBvaW50ZXIgSXNzdWVzIGluIEZpbGUgU3lzdGVtIFJvb3QgU2V0dGluZyoqCgpIbW0sIGhvbGQgb24gYSBzZWNvbmQuIEkmIzM5O20gZm9jdXNpbmcgb24gYHBhdGhgIGhlcmUsIGFuZCBJJiMzOTttIHJlYWxpemluZyBpdCYjMzk7cyBkZWZpbmVkIGFzIGEgc3RydWN0LCBub3QgYSBwb2ludGVyLiBUaGF0IGNoYW5nZXMgdGhpbmdzIGEgYml0LiBTbywgaWYgSSYjMzk7bSBhaW1pbmcgdG8gcGFzcyBhIG51bGwgdmFsdWUgdG8gYHNldF9mc19yb290YCB0byBlZmZlY3RpdmVseSByZXNldCBvciBjbGVhciB0aGUgcm9vdCwgSSB3b3VsZG4mIzM5O3QgdXNlIGEgc3RyYWlnaHQgbnVsbCBwb2ludGVyLiBJbnN0ZWFkLCBJJiMzOTtkIG5lZWQgdG8gY29uc3RydWN0IGFuIGluc3RhbmNlIG9mIHRoZSBgcGF0aGAgc3RydWN0IGl0c2VsZiwgd2l0aCBhIHZhbHVlIHRoYXQgcmVwcmVzZW50cyBudWxsIG9yIGEgY2xlYXIgcGF0aC4gU29tZXRoaW5nIGxpa2UgYHNldF9mc19yb290KGZzLCAmYW1wO251bGxfcGF0aClgLCBhc3N1bWluZyBgbnVsbF9wYXRoYCBpcyBwcm9wZXJseSBkZWZpbmVkIGFzIGEgYHBhdGhgIHN0cnVjdCBpbml0aWFsaXplZCB3aXRoIGFwcHJvcHJpYXRlICYjMzQ7bnVsbCYjMzQ7IHZhbHVlcy4KClJpZ2h0LCBzbyB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgcmlza3MgYW5kIGltcGFjdCwgSSBuZWVkIHRvIHNlZSAqd2hlcmUqIGBzZXRfZnNfcm9vdGAgaXMgYmVpbmcgY2FsbGVkIGFuZCB3aXRoIHdoYXQgYXJndW1lbnRzLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGxvb2sgZm9yIGluc3RhbmNlcyBvZiBgc2V0X2ZzX3Jvb3RgIHdoZXJlIGEgdmFyaWFibGUgb3IgZXhwcmVzc2lvbiB0aGF0IGNvdWxkIGV2YWx1YXRlIHRvIGEgbnVsbCB2YWx1ZSAob3IgYSByZXByZXNlbnRhdGlvbiBvZiBhIGNsZWFyIG9yIHVuc2V0IHBhdGgpIGlzIGJlaW5nIHBhc3NlZC4gQSBzZWFyY2ggb2YgdGhlIGNvZGViYXNlIGZvciBpbnN0YW5jZXMgd2hlcmUgc3VjaCBhIHBhdHRlcm4gbWlnaHQgYmUgcHJlc2VudCBpcyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA3OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NldF9mc19yb290LipcdTAwMjYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaW5pdC5jPTc2PWludCBfX2luaXQgaW5pdF9jaHJvb3QoY29uc3QgY2hhciAqZmlsZW5hbWUpXG4tLVxuZnMvaW5pdC5jLTkyLVx0XHRnb3RvIGRwdXRfYW5kX291dDtcbmZzL2luaXQuYzo5MzpcdHNldF9mc19yb290KGN1cnJlbnQtXHUwMDNlZnMsIFx1MDAyNnBhdGgpO1xuZnMvaW5pdC5jLTk0LWRwdXRfYW5kX291dDpcbi0tXG5mcy9uYW1lc3BhY2UuYz02MTgwPXN0YXRpYyB2b2lkIF9faW5pdCBpbml0X21vdW50X3RyZWUodm9pZClcbi0tXG5mcy9uYW1lc3BhY2UuYy02MjM4LVx0c2V0X2ZzX3B3ZChjdXJyZW50LVx1MDAzZWZzLCBcdTAwMjZyb290KTtcbmZzL25hbWVzcGFjZS5jOjYyMzk6XHRzZXRfZnNfcm9vdChjdXJyZW50LVx1MDAzZWZzLCBcdTAwMjZyb290KTtcbmZzL25hbWVzcGFjZS5jLTYyNDAtXG4tLVxuZnMvbmFtZXNwYWNlLmM9NjQ3OT1zdGF0aWMgaW50IG1udG5zX2luc3RhbGwoc3RydWN0IG5zc2V0ICpuc3NldCwgc3RydWN0IG5zX2NvbW1vbiAqbnMpXG4tLVxuZnMvbmFtZXNwYWNlLmMtNjUxNi1cdHNldF9mc19wd2QoZnMsIFx1MDAyNnJvb3QpO1xuZnMvbmFtZXNwYWNlLmM6NjUxNzpcdHNldF9mc19yb290KGZzLCBcdTAwMjZyb290KTtcbmZzL25hbWVzcGFjZS5jLTY1MTgtXG4tLVxuZnMvb3Blbi5jPTU4OD1TWVNDQUxMX0RFRklORTEoY2hyb290LCBjb25zdCBjaGFyIF9fdXNlciAqLCBmaWxlbmFtZSlcbi0tXG5mcy9vcGVuLmMtNjA3LVx0aWYgKCFlcnJvcilcbmZzL29wZW4uYzo2MDg6XHRcdHNldF9mc19yb290KGN1cnJlbnQtXHUwMDNlZnMsIFx1MDAyNnBhdGgpO1xuZnMvb3Blbi5jLTYwOS1kcHV0X2FuZF9vdXQ6XG4tLVxuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jPTM5PXN0YXRpYyB2b2lkIG51bGxfZnNfdGVhcmRvd24oc3RydWN0IG51bGxfZnNfY3R4ICpjdHgpXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmMtNDAte1xuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jOjQxOlx0c2V0X2ZzX3Jvb3QoY3VycmVudC1cdTAwM2VmcywgXHUwMDI2Y3R4LVx1MDAzZXNhdmVkX3Jvb3QpO1xuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jLTQyLVx0c2V0X2ZzX3B3ZChjdXJyZW50LVx1MDAzZWZzLCBcdTAwMjZjdHgtXHUwMDNlc2F2ZWRfcHdkKTtcbi0tXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmM9NzE9c3RhdGljIHZvaWQgbnVsbF9yb290X3Rlc3Qoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYy03NS1cdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCBudWxsX2ZzX3NldHVwKFx1MDAyNmN0eCksIDApO1xuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jOjc2Olx0c2V0X2ZzX3Jvb3QoY3VycmVudC1cdTAwM2VmcywgXHUwMDI2bnVsbF9wYXRoKTtcbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYy03Ny1cbi0tXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmM9MTE4PXN0YXRpYyB2b2lkIG51bGxfcm9vdF9hbmRfY3dkX3Rlc3Qoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYy0xMjItXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgbnVsbF9mc19zZXR1cChcdTAwMjZjdHgpLCAwKTtcbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYzoxMjM6XHRzZXRfZnNfcm9vdChjdXJyZW50LVx1MDAzZWZzLCBcdTAwMjZudWxsX3BhdGgpO1xuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jLTEyNC1cdHNldF9mc19wd2QoY3VycmVudC1cdTAwM2VmcywgXHUwMDI2bnVsbF9wYXRoKTtcbi0tXG5rZXJuZWwvbnNwcm94eS5jPTUzNT1zdGF0aWMgdm9pZCBjb21taXRfbnNzZXQoc3RydWN0IG5zc2V0ICpuc3NldClcbi0tXG5rZXJuZWwvbnNwcm94eS5jLTU0OS1cdGlmICgoZmxhZ3MgXHUwMDI2IENMT05FX05FV05TKSBcdTAwMjZcdTAwMjYgKGZsYWdzIFx1MDAyNiB+Q0xPTkVfTkVXTlMpKSB7XG5rZXJuZWwvbnNwcm94eS5jOjU1MDpcdFx0c2V0X2ZzX3Jvb3QobWUtXHUwMDNlZnMsIFx1MDAyNm5zc2V0LVx1MDAzZWZzLVx1MDAzZXJvb3QpO1xua2VybmVsL25zcHJveHkuYy01NTEtXHRcdHNldF9mc19wd2QobWUtXHUwMDNlZnMsIFx1MDAyNm5zc2V0LVx1MDAzZWZzLVx1MDAzZXB3ZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA3OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjYzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydDoKCioqTmF2aWdhdGluZyB0aGUgRmlsZSBTeXN0ZW0gLSBBIFF1aWNrIENoZWNrKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgZmlsZSBzeXN0ZW0gdHJhdmVyc2FsIHJpZ2h0IG5vdy4gU29tZXRoaW5nIGp1c3QgcGluZ2VkIGluIG15IG1pbmQ6IGBmcy0mZ3Q7cHdkYC4gSXMgdGhhdCBhIHZpYWJsZSBvcHRpb24gZm9yIGdldHRpbmcgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnk/IEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBpZiB0aGF0IHBvaW50ZXIsIGlmIGl0IGV4aXN0cywgaXMgY29ycmVjdGx5IGluaXRpYWxpemVkIGFuZCB3aGF0IGl0IHBvaW50cyB0by4gSXMgaXQgcmVsaWFibGUsIG9yIGlzIHRoZXJlIGEgY2hhbmNlIGl0IGNvdWxkIGJlIHN0YWxlIG9yIGV2ZW4gY2F1c2UgYSBjcmFzaCBpZiBpdCYjMzk7cyBwb2ludGluZyB0byBzb21ldGhpbmcgaW52YWxpZD8gSSYjMzk7bSB0aGlua2luZyBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoYXQgc3RydWN0dXJlIHRvIHNlZSBpZiBpdCBtYWtlcyBzZW5zZSB0byB1c2UgYGZzLSZndDtwd2RgLiBJJiMzOTttIG1lbnRhbGx5IGNoZWNraW5nIHdoYXQgb3RoZXIgbWV0aG9kcyBtaWdodCBleGlzdCwgb3IgaWYgdGhpcyBpcyB0aGUgZmFzdGVzdCB3YXkgdG8gZ2V0IHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwNzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXRfZnNfcHdkLipcdTAwMjYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaW5pdC5jPTYxPWludCBfX2luaXQgaW5pdF9jaGRpcihjb25zdCBjaGFyICpmaWxlbmFtZSlcbi0tXG5mcy9pbml0LmMtNzAtXHRpZiAoIWVycm9yKVxuZnMvaW5pdC5jOjcxOlx0XHRzZXRfZnNfcHdkKGN1cnJlbnQtXHUwMDNlZnMsIFx1MDAyNnBhdGgpO1xuZnMvaW5pdC5jLTcyLVx0cGF0aF9wdXQoXHUwMDI2cGF0aCk7XG4tLVxuZnMvbmFtZXNwYWNlLmM9NjE4MD1zdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9tb3VudF90cmVlKHZvaWQpXG4tLVxuZnMvbmFtZXNwYWNlLmMtNjIzNy1cdHJvb3QuZGVudHJ5XHQ9IG1udC1cdTAwM2VtbnRfcm9vdDtcbmZzL25hbWVzcGFjZS5jOjYyMzg6XHRzZXRfZnNfcHdkKGN1cnJlbnQtXHUwMDNlZnMsIFx1MDAyNnJvb3QpO1xuZnMvbmFtZXNwYWNlLmMtNjIzOS1cdHNldF9mc19yb290KGN1cnJlbnQtXHUwMDNlZnMsIFx1MDAyNnJvb3QpO1xuLS1cbmZzL25hbWVzcGFjZS5jPTY0Nzk9c3RhdGljIGludCBtbnRuc19pbnN0YWxsKHN0cnVjdCBuc3NldCAqbnNzZXQsIHN0cnVjdCBuc19jb21tb24gKm5zKVxuLS1cbmZzL25hbWVzcGFjZS5jLTY1MTUtXHQvKiBVcGRhdGUgdGhlIHB3ZCBhbmQgcm9vdCAqL1xuZnMvbmFtZXNwYWNlLmM6NjUxNjpcdHNldF9mc19wd2QoZnMsIFx1MDAyNnJvb3QpO1xuZnMvbmFtZXNwYWNlLmMtNjUxNy1cdHNldF9mc19yb290KGZzLCBcdTAwMjZyb290KTtcbi0tXG5mcy9vcGVuLmM9NTUwPVNZU0NBTExfREVGSU5FMShjaGRpciwgY29uc3QgY2hhciBfX3VzZXIgKiwgZmlsZW5hbWUpXG4tLVxuZnMvb3Blbi5jLTU2MC1cdFx0aWYgKCFlcnJvcilcbmZzL29wZW4uYzo1NjE6XHRcdFx0c2V0X2ZzX3B3ZChjdXJyZW50LVx1MDAzZWZzLCBcdTAwMjZwYXRoKTtcbmZzL29wZW4uYy01NjItXHRcdHBhdGhfcHV0KFx1MDAyNnBhdGgpO1xuLS1cbmZzL29wZW4uYz01NzE9U1lTQ0FMTF9ERUZJTkUxKGZjaGRpciwgdW5zaWduZWQgaW50LCBmZClcbi0tXG5mcy9vcGVuLmMtNTgzLVx0aWYgKCFlcnJvcilcbmZzL29wZW4uYzo1ODQ6XHRcdHNldF9mc19wd2QoY3VycmVudC1cdTAwM2VmcywgXHUwMDI2ZmRfZmlsZShmKS1cdTAwM2VmX3BhdGgpO1xuZnMvb3Blbi5jLTU4NS1cdHJldHVybiBlcnJvcjtcbi0tXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmM9Mzk9c3RhdGljIHZvaWQgbnVsbF9mc190ZWFyZG93bihzdHJ1Y3QgbnVsbF9mc19jdHggKmN0eClcbi0tXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmMtNDEtXHRzZXRfZnNfcm9vdChjdXJyZW50LVx1MDAzZWZzLCBcdTAwMjZjdHgtXHUwMDNlc2F2ZWRfcm9vdCk7XG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmM6NDI6XHRzZXRfZnNfcHdkKGN1cnJlbnQtXHUwMDNlZnMsIFx1MDAyNmN0eC1cdTAwM2VzYXZlZF9wd2QpO1xuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jLTQzLVx0cGF0aF9wdXQoXHUwMDI2Y3R4LVx1MDAzZXNhdmVkX3Jvb3QpO1xuLS1cbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYz05Nz1zdGF0aWMgdm9pZCBudWxsX2N3ZF90ZXN0KHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmMtMTAxLVx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIG51bGxfZnNfc2V0dXAoXHUwMDI2Y3R4KSwgMCk7XG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmM6MTAyOlx0c2V0X2ZzX3B3ZChjdXJyZW50LVx1MDAzZWZzLCBcdTAwMjZudWxsX3BhdGgpO1xuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jLTEwMy1cbi0tXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmM9MTE4PXN0YXRpYyB2b2lkIG51bGxfcm9vdF9hbmRfY3dkX3Rlc3Qoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYy0xMjMtXHRzZXRfZnNfcm9vdChjdXJyZW50LVx1MDAzZWZzLCBcdTAwMjZudWxsX3BhdGgpO1xuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jOjEyNDpcdHNldF9mc19wd2QoY3VycmVudC1cdTAwM2VmcywgXHUwMDI2bnVsbF9wYXRoKTtcbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYy0xMjUtXG4tLVxua2VybmVsL25zcHJveHkuYz01MzU9c3RhdGljIHZvaWQgY29tbWl0X25zc2V0KHN0cnVjdCBuc3NldCAqbnNzZXQpXG4tLVxua2VybmVsL25zcHJveHkuYy01NTAtXHRcdHNldF9mc19yb290KG1lLVx1MDAzZWZzLCBcdTAwMjZuc3NldC1cdTAwM2Vmcy1cdTAwM2Vyb290KTtcbmtlcm5lbC9uc3Byb3h5LmM6NTUxOlx0XHRzZXRfZnNfcHdkKG1lLVx1MDAzZWZzLCBcdTAwMjZuc3NldC1cdTAwM2Vmcy1cdTAwM2Vwd2QpO1xua2VybmVsL25zcHJveHkuYy01NTItXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA3OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDc1CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guCgoqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgRmlsZSBTeXN0ZW0gU3RydWN0dXJlcyoqCgpIbW0sIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMga2VybmVsIGNvZGUgYW5kIHNvbWV0aGluZyYjMzk7cyBub3QgcXVpdGUgcmlnaHQuIEkgZG9uJiMzOTt0IHNlZSBhbnkgc3RhbmRhcmQgaW5pdGlhbGl6YXRpb25zIGZvciBgZnMtJmd0O3Jvb3RgIG9yIGBmcy0mZ3Q7cHdkYCB0byBhIG51bGwgcGF0aCBvdXRzaWRlIG9mIHRoYXQgS1VuaXQgdGVzdC4gVGhhdCYjMzk7cyBhIHJlZCBmbGFnLiBDb3VsZCBpdCBiZSB0aGF0IHRoZSBgZnNfc3RydWN0YCBpcyBiZWluZyBhbGxvY2F0ZWQgYnV0IGlzbiYjMzk7dCBiZWluZyBleHBsaWNpdGx5IHplcm9lZCBvdXQ/IE15IGluaXRpYWwgdGhvdWdodCBpcyBpdCBjb3VsZCBiZSBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY2AsIGluIHdoaWNoIGNhc2UgdGhvc2UgcG9pbnRlcnMgKnNob3VsZCogYmUgTlVMTCwgYnV0IHRoYXQgYXNzdW1wdGlvbiBuZWVkcyB0byBiZSB2ZXJpZmllZC4gTGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgYGNvcHlfZnNfc3RydWN0YCBhbmQgYGFsbG9jX2ZzX3N0cnVjdGAgZnVuY3Rpb25zLiBJIG5lZWQgdG8gY29uZmlybSBob3cgdGhlc2Ugc3RydWN0dXJlcyBhcmUgYmVpbmcgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCB0byB1bmRlcnN0YW5kIHdoeSBJJiMzOTttIHNlZWluZyB0aGlzIGJlaGF2aW9yLiBJdCBzZWVtcyBsaWtlIGl0JiMzOTtzIHVubGlrZWx5IHRoYXQgdW5pbml0aWFsaXplZCBwb2ludGVycyB3b3VsZCBiZSB1c2VkLCBidXQgaXQmIzM5O3Mgd29ydGggY2hlY2tpbmcgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgaXQmIzM5O3MgYWxsb2NhdGVkIHdpdGggYGttYWxsb2NgIG9yIGBremFsbG9jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDc6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY19mc19zdHJ1Y3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwNzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzgwNQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGBmc19jYWNoZXBgIEFsbG9jYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIHplcm8gaW4gb24gaG93IHdlJiMzOTtyZSBhbGxvY2F0aW5nIG1lbW9yeSBmcm9tIHRoZSBgZnNfY2FjaGVwYCBjYWNoZS4gTXkgaW5pdGlhbCBmb2N1cyBpcyB0aGUgYGttZW1fY2FjaGVfYWxsb2NgIGZ1bmN0aW9uIGNhbGxzIHJlbGF0ZWQgdG8gaXQuIFRoYXQmIzM5O3MgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrIEkgbmVlZCB0byB1bmRlcnN0YW5kIGZvciB0aGlzIHBhcnRpY3VsYXIgYXJlYSBvZiBmaWxlc3lzdGVtIG1lbW9yeSBtYW5hZ2VtZW50LiBJIHdhbnQgdG8gc2VlIGV4YWN0bHkgaG93IGFuZCB3aGVuIGBmc19jYWNoZXBgIG9iamVjdHMgYXJlIGJlaW5nIGNyZWF0ZWQuIEZyb20gdGhlcmUsIEkgY2FuIGJlZ2luIHRvIGFuYWx5emUgdGhlaXIgdXNhZ2UgcGF0dGVybnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA3OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ttZW1fY2FjaGVfYWxsb2MuKmZzX2NhY2hlcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9mc19zdHJ1Y3QuYz0xMDc9c3RydWN0IGZzX3N0cnVjdCAqY29weV9mc19zdHJ1Y3Qoc3RydWN0IGZzX3N0cnVjdCAqb2xkKVxuZnMvZnNfc3RydWN0LmMtMTA4LXtcbmZzL2ZzX3N0cnVjdC5jOjEwOTpcdHN0cnVjdCBmc19zdHJ1Y3QgKmZzID0ga21lbV9jYWNoZV9hbGxvYyhmc19jYWNoZXAsIEdGUF9LRVJORUwpO1xuZnMvZnNfc3RydWN0LmMtMTEwLVx0LyogV2UgZG9uJiMzOTt0IG5lZWQgdG8gbG9jayBmcyAtIHRoaW5rIHdoeSA7LSkgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDc6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwODkKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4gTXkgbWluZCYjMzk7cyB3b3JraW5nIHRocm91Z2ggdGhpcy4uLgoKKipEaWdnaW5nIGludG8gRmlsZXN5c3RlbSBTdHJ1Y3R1cmUgSW5pdGlhbGl6YXRpb24qKgoKV2FpdCBhIHNlY29uZCwgSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgYWJvdXQgdGhpcyBgZnNfc3RydWN0YC4gSSYjMzk7bSB3b25kZXJpbmcgaWYgYSBzaXR1YXRpb24gYXJpc2VzIHdoZXJlIGl0JiMzOTtzIGFsbG9jYXRlZCwgYnV0IGl0cyBmaWxlIHBhdGhzIGhhdmVuJiMzOTt0IGJlZW4gcHJvcGVybHkgaW5pdGlhbGl6ZWQsIHBlcmhhcHMgd2l0aCBudWxsIHZhbHVlcy4gSXQmIzM5O3MgYSBjcml0aWNhbCBwb2ludCB0byBjb25zaWRlciBhcyBpdCBjb3VsZCBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IgbGF0ZXIgb24uIFNvLCB0byBnZXQgYSBjbGVhciBwaWN0dXJlLCBJIG5lZWQgdG8gY2hlY2sgaG93IGBmc19zdHJ1Y3RgIGlzIGhhbmRsZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGhlYWQgb3ZlciB0byBgZnMvZnNfc3RydWN0LmNgLiBJIG5lZWQgdG8gemVybyBpbiBvbiBgZnNfY2FjaGVwYCBpbiB0aGF0IGZpbGUsIGFzIHRoYXQmIzM5O3MgcHJvYmFibHkgd2hlcmUgdGhlIGtleSB0byB0aGlzIHF1ZXN0aW9uIGxpZXMuIEkmIzM5O20gaG9waW5nIHRvIHNlZSBob3cgdGhlIHBhdGhzIGFyZSBzZXQgdXAuIElmIHRoZXJlJiMzOTtzIGFuIG9taXNzaW9uIHNvbWV3aGVyZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXQgZnVsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA3OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZzX2NhY2hlcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9mc19zdHJ1Y3QuYz04Mz12b2lkIGZyZWVfZnNfc3RydWN0KHN0cnVjdCBmc19zdHJ1Y3QgKmZzKVxuLS1cbmZzL2ZzX3N0cnVjdC5jLTg2LVx0cGF0aF9wdXQoXHUwMDI2ZnMtXHUwMDNlcHdkKTtcbmZzL2ZzX3N0cnVjdC5jOjg3Olx0a21lbV9jYWNoZV9mcmVlKGZzX2NhY2hlcCwgZnMpO1xuZnMvZnNfc3RydWN0LmMtODgtfVxuLS1cbmZzL2ZzX3N0cnVjdC5jPTEwNz1zdHJ1Y3QgZnNfc3RydWN0ICpjb3B5X2ZzX3N0cnVjdChzdHJ1Y3QgZnNfc3RydWN0ICpvbGQpXG5mcy9mc19zdHJ1Y3QuYy0xMDgte1xuZnMvZnNfc3RydWN0LmM6MTA5Olx0c3RydWN0IGZzX3N0cnVjdCAqZnMgPSBrbWVtX2NhY2hlX2FsbG9jKGZzX2NhY2hlcCwgR0ZQX0tFUk5FTCk7XG5mcy9mc19zdHJ1Y3QuYy0xMTAtXHQvKiBXZSBkb24mIzM5O3QgbmVlZCB0byBsb2NrIGZzIC0gdGhpbmsgd2h5IDstKSAqL1xuLS1cbmluY2x1ZGUvbGludXgvZnNfc3RydWN0Lmg9MTA9c3RydWN0IGZzX3N0cnVjdCB7XG4tLVxuaW5jbHVkZS9saW51eC9mc19zdHJ1Y3QuaC00NC1cbmluY2x1ZGUvbGludXgvZnNfc3RydWN0Lmg6NDU6ZXh0ZXJuIHN0cnVjdCBrbWVtX2NhY2hlICpmc19jYWNoZXA7XG5pbmNsdWRlL2xpbnV4L2ZzX3N0cnVjdC5oLTQ2LVxuLS1cbmtlcm5lbC9mb3JrLmM9NDc3PXN0cnVjdCBrbWVtX2NhY2hlICpmaWxlc19jYWNoZXA7XG4tLVxua2VybmVsL2ZvcmsuYy00NzktLyogU0xBQiBjYWNoZSBmb3IgZnNfc3RydWN0IHN0cnVjdHVyZXMgKHRzay1cdTAwM2VmcykgKi9cbmtlcm5lbC9mb3JrLmM6NDgwOnN0cnVjdCBrbWVtX2NhY2hlICpmc19jYWNoZXA7XG5rZXJuZWwvZm9yay5jLTQ4MS1cbi0tXG5rZXJuZWwvZm9yay5jPTMxMTU9dm9pZCBfX2luaXQgcHJvY19jYWNoZXNfaW5pdCh2b2lkKVxuLS1cbmtlcm5lbC9mb3JrLmMtMzEyOS1cdFx0XHROVUxMKTtcbmtlcm5lbC9mb3JrLmM6MzEzMDpcdGZzX2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKFwmIzM0O2ZzX2NhY2hlXCYjMzQ7LFxua2VybmVsL2ZvcmsuYy0zMTMxLVx0XHRcdHNpemVvZihzdHJ1Y3QgZnNfc3RydWN0KSwgMCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDc6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4MDIKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkNvbnNpZGVyaW5nIEFsdGVybmF0aXZlIGBmc19zdHJ1Y3RgIENyZWF0aW9uIE1ldGhvZHMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgZnNfc3RydWN0YCBidXNpbmVzcywgYW5kIEkmIzM5O20gd29uZGVyaW5nIGlmIHRoZXJlIGFyZSBhbnkgbGVzcy4uLiBjb252ZW50aW9uYWwgd2F5cyB0byBjb25qdXJlIG9uZSB1cCBiZXlvbmQgdGhlIHVzdWFsIHN1c3BlY3RzLiBJJiMzOTttIGhpdHRpbmcgYSB3YWxsIHdpdGggdGhlIGN1cnJlbnQgYXBwcm9hY2gsIGFuZCBJJiMzOTttIGFsd2F5cyB0aGlua2luZyBhYm91dCB0aGUgYmlnZ2VyIHBpY3R1cmUuCgpNeSBtYWluIHF1ZXN0aW9uIGlzOiBiZXNpZGVzIHRoZSBvYnZpb3VzIG1lY2hhbmlzbXMsIGFyZSB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb25zIG9yIHRlY2huaXF1ZXMgdGhhdCBjb3VsZCBhY2hpZXZlIHRoaXM/IFBlcmhhcHMgc29tZXRoaW5nIEkmIzM5O20gb3Zlcmxvb2tpbmcsIHNvbWUgZWRnZSBjYXNlIG9yIG5pY2hlIGZ1bmN0aW9uYWxpdHk/IEkmIzM5O20gc3BlY2lmaWNhbGx5IGN1cmlvdXMgYWJvdXQgbWV0aG9kcywgZnVuY3Rpb25zLCBvciB0ZWNobmlxdWVzIG91dHNpZGUgdGhlIHN0YW5kYXJkIHBhdGguCgpJJiMzOTttIHJhY2tpbmcgbXkgYnJhaW4sIGFuZCB0aGUgZnVuY3Rpb24gYHVuc2hhcmVfZnNfc3RydWN0KClgIHBvcHMgaW50byBteSBoZWFkLiBDb3VsZCB0aGF0IGJlIGEgdmlhYmxlLCB0aG91Z2ggcG90ZW50aWFsbHkgaW5kaXJlY3QsIGF2ZW51ZT8gSSYjMzk7bGwgbmVlZCB0byByZXZpZXcgdGhlIGRldGFpbHMgYW5kIGNvbmZpcm0gaWYgaXTigJlzIGFwcGxpY2FibGUgaGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGxpbWl0YXRpb25zLCBzaWRlIGVmZmVjdHMsIGFuZCBpZiBpdCYjMzk7cyBldmVuIGFwcHJvcHJpYXRlIGZvciB0aGUgY29udGV4dCBJJiMzOTttIHdvcmtpbmcgaW4uIFVsdGltYXRlbHksIEkmIzM5O20gdHJ5aW5nIHRvIGlkZW50aWZ5IHBvdGVudGlhbCBhbHRlcm5hdGl2ZXMgb3IgYXVnbWVudCBteSB0b29sa2l0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwNzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1bnNoYXJlX2ZzX3N0cnVjdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9mc19zdHJ1Y3QuYz0xMDc9c3RydWN0IGZzX3N0cnVjdCAqY29weV9mc19zdHJ1Y3Qoc3RydWN0IGZzX3N0cnVjdCAqb2xkKVxuLS1cbmZzL2ZzX3N0cnVjdC5jLTEyNi1cbmZzL2ZzX3N0cnVjdC5jOjEyNzppbnQgdW5zaGFyZV9mc19zdHJ1Y3Qodm9pZClcbmZzL2ZzX3N0cnVjdC5jLTEyOC17XG4tLVxuZnMvZnNfc3RydWN0LmMtMTQ3LX1cbmZzL2ZzX3N0cnVjdC5jOjE0ODpFWFBPUlRfU1lNQk9MX0dQTCh1bnNoYXJlX2ZzX3N0cnVjdCk7XG5mcy9mc19zdHJ1Y3QuYy0xNDktXG4tLVxuZnMvbmZzZC9uZnNzdmMuYz04ODM9bmZzZCh2b2lkICp2cnFzdHApXG4tLVxuZnMvbmZzZC9uZnNzdmMuYy04OTYtXHQgKi9cbmZzL25mc2QvbmZzc3ZjLmM6ODk3Olx0c3ZjX3RocmVhZF9pbml0X3N0YXR1cyhycXN0cCwgdW5zaGFyZV9mc19zdHJ1Y3QoKSk7XG5mcy9uZnNkL25mc3N2Yy5jLTg5OC1cbi0tXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmM9MjQ9c3RhdGljIGludCBudWxsX2ZzX3NldHVwKHN0cnVjdCBudWxsX2ZzX2N0eCAqY3R4KVxuLS1cbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYy0yNy1cbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYzoyODpcdGVyciA9IHVuc2hhcmVfZnNfc3RydWN0KCk7XG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmMtMjktXHRpZiAoZXJyKVxuLS1cbmluY2x1ZGUvbGludXgvZnNfc3RydWN0Lmg9NTE9ZXh0ZXJuIHZvaWQgZnJlZV9mc19zdHJ1Y3Qoc3RydWN0IGZzX3N0cnVjdCAqKTtcbmluY2x1ZGUvbGludXgvZnNfc3RydWN0Lmg6NTI6ZXh0ZXJuIGludCB1bnNoYXJlX2ZzX3N0cnVjdCh2b2lkKTtcbmluY2x1ZGUvbGludXgvZnNfc3RydWN0LmgtNTMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA3OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTE4CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgdGhlIEltcGxpY2F0aW9ucyBvZiBhIE5ldyBGaWxlc3lzdGVtIFBhdGNoKioKCkFscmlnaHQsIGEgbmV3IHBhdGNoIGlzIGNvbWluZyBhY3Jvc3MgbXkgZGVzaywgYW5kIHRoZSBkZXNjcmlwdGlvbiBtZW50aW9ucyBzdXBwb3J0IGZvciB0YXNrcyB3aXRoIGEgYG51bGxgIHJvb3Qgb3IgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSAoYGN3ZGApLiBJbW1lZGlhdGVseSwgbXkgbWluZCBqdW1wcyB0byB0aGUgcG90ZW50aWFsIGFyY2hpdGVjdHVyYWwgaW1wYWN0cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdWxseS4KCk15IGZpcnN0IHRob3VnaHQgaXMgdG8gZGlnIGEgbGl0dGxlIGRlZXBlciwgc2VlIGlmIHRoaXMgaXMgYW4gaXNvbGF0ZWQgY2hhbmdlIG9yIHBhcnQgb2YgYSBsYXJnZXIgdHJlbmQuIEFyZSB0aGVyZSBhbnkgb3RoZXIgcmVjZW50IHBhdGNoZXMsIHBhcnRpY3VsYXJseSBpbiBhIHBvdGVudGlhbGx5IHJlbGF0ZWQgc3Vic3lzdGVtLCB0aGF0IGFyZSBhbHNvIGRlYWxpbmcgd2l0aCB0aGlzIGNvbmNlcHQgb2YgYSBgbnVsbGAgcm9vdCBvciBgY3dkYD8gU3BlY2lmaWNhbGx5LCB0aGUgYGlvX3VyaW5nYCBzdWJzeXN0ZW0gc3ByaW5ncyB0byBtaW5kIGFzIGEgbGlrZWx5IGNhbmRpZGF0ZSBnaXZlbiBpdHMgZmlsZXN5c3RlbSBpbnRlcmFjdGlvbi4KClRvIGludmVzdGlnYXRlLCBJJiMzOTtsbCBuZWVkIHRvIGRvIHNvbWUgY29kZSBhcmNoYWVvbG9neS4gSSYjMzk7bGwgc2VhcmNoIHRoZSBgaW9fdXJpbmdgIGNvZGUgZm9yIGluc3RhbmNlcyBvZiByZWxhdGVkIGZpbGVzeXN0ZW0gbWFuaXB1bGF0aW9uczogc3BlY2lmaWNhbGx5LCBhbnkgdXNlcyBvZiBgc2V0X2ZzX3Jvb3RgLCBgc2V0X2ZzX3B3ZGAsIGFuZCBhY2Nlc3MgdG8gZmlsZXN5c3RlbSBkYXRhIHN1Y2ggYXMgYGZzLSZndDtyb290YCBvciBgZnMtJmd0O3B3ZGAuIFRoaXMgc2hvdWxkIGhlbHAgbWUgYXNzZXNzIGhvdyB0aGlzIGNoYW5nZSBwb3RlbnRpYWxseSBpbnRlZ3JhdGVzIHdpdGggb3IgbW9kaWZpZXMgZXhpc3RpbmcgYGlvX3VyaW5nYCBmaWxlc3lzdGVtIGludGVyYWN0aW9ucy4gRnJvbSB0aGVyZSBJIGNhbiBkZXRlcm1pbmUgaG93IHRoZSBgbnVsbGAgcm9vdCBvciBjd2Qgd2lsbCBhZmZlY3QgdGhlIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA3OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZzLVx1MDAzZXJvb3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wYXRoLWxvb2t1cC50eHQ9NDk9dGhlIHBhdGggZ2l2ZW4gYnkgdGhlIG5hbWUmIzM5O3Mgc3RhcnRpbmcgcG9pbnQgKHdoaWNoIHdlIGtub3cgaW4gYWR2YW5jZSAtLSBlZy5cbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcGF0aC1sb29rdXAudHh0OjUwOmN1cnJlbnQtXHUwMDNlZnMtXHUwMDNlY3dkIG9yIGN1cnJlbnQtXHUwMDNlZnMtXHUwMDNlcm9vdCkgYXMgdGhlIGZpcnN0IHBhcmVudCBvZiB0aGUgbG9va3VwLiBUaGVuXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BhdGgtbG9va3VwLnR4dC01MS1pdGVyYXRpdmVseSBmb3IgZWFjaCBzdWJzZXF1ZW50IG5hbWUgZWxlbWVudCwgbG9vayB1cCB0aGUgY2hpbGQgb2YgdGhlIGN1cnJlbnRcbi0tXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BhdGgtbG9va3VwLnR4dD0yNDA9U28gd2hlbiB2aSB3YW50cyB0byBvcGVuKFwmIzM0Oy9ob21lL25waWdnaW4vdGVzdC5jXCYjMzQ7LCBPX1JEV1IpLCB0aGVuIGl0IHdpbGxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcGF0aC1sb29rdXAudHh0OjI0MTpzdGFydCBmcm9tIGN1cnJlbnQtXHUwMDNlZnMtXHUwMDNlcm9vdCwgd2hpY2ggaXMgYSBwaW5uZWQgZGVudHJ5LiBBbHRlcm5hdGl2ZWx5LFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wYXRoLWxvb2t1cC50eHQtMjQyLVwmIzM0Oy4vdGVzdC5jXCYjMzQ7IHdvdWxkIHN0YXJ0IGZyb20gY3dkOyBib3RoIG5hbWVzIHJlZmVyIHRvIHRoZSBzYW1lIHBhdGggaW5cbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL2huc19yb2NlX2RlYnVnZnMuYz04NT1zdGF0aWMgdm9pZCBjcmVhdGVfc3dfc3RhdF9kZWJ1Z2ZzKHN0cnVjdCBobnNfcm9jZV9kZXYgKmhyX2Rldixcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL2huc19yb2NlX2RlYnVnZnMuYy05Mi1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvaG5zX3JvY2VfZGVidWdmcy5jOjkzOlx0ZGJnZnMtXHUwMDNlcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcihcJiMzNDtzd19zdGF0XCYjMzQ7LCBwYXJlbnQpO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hucy9obnNfcm9jZV9kZWJ1Z2ZzLmM6OTQ6XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O3N3X3N0YXRcJiMzNDssIDA0MDAsIGRiZ2ZzLVx1MDAzZXJvb3QsIFx1MDAyNmRiZ2ZzLVx1MDAzZXN3X3N0YXQsXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL2huc19yb2NlX2RlYnVnZnMuYy05NS1cdFx0XHQgICAgXHUwMDI2aG5zX2RlYnVnZnNfc2VxZmlsZV9mb3BzKTtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL2huc19yb2NlX2RlYnVnZnMuYz0zMDE9c3RhdGljIHZvaWQgY3JlYXRlX2NjX3BhcmFtX2RlYnVnZnMoc3RydWN0IGhuc19yb2NlX2RldiAqaHJfZGV2LFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvaG5zX3JvY2VfZGVidWdmcy5jLTMyNC1cdFx0ZGJnZnMgPSBcdTAwMjZocl9kZXYtXHUwMDNlZGJnZnMuY2NfcGFyYW1fcm9vdFtpXTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvaG5zX3JvY2VfZGVidWdmcy5jOjMyNTpcdFx0ZGJnZnMtXHUwMDNlcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2Rpcihjb25nX2F0dHItXHUwMDNlbmFtZSwgcGFyZW50KTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvaG5zX3JvY2VfZGVidWdmcy5jLTMyNi1cdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgSE5TX1JPQ0VfQ0NfUEFSQU1fTUFYX05VTTsgaiYjNDM7JiM0MzspIHtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL2huc19yb2NlX2RlYnVnZnMuYy0zMzQtXHRcdFx0ZGVidWdmc19jcmVhdGVfZmlsZShjb25nX2F0dHItXHUwMDNlcGFyYW1zW2pdLm5hbWUsIDA2MDAsXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL2huc19yb2NlX2RlYnVnZnMuYzozMzU6XHRcdFx0XHRcdCAgICBkYmdmcy1cdTAwM2Vyb290LFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hucy9obnNfcm9jZV9kZWJ1Z2ZzLmMtMzM2LVx0XHRcdFx0XHQgICAgXHUwMDI2ZGJnZnMtXHUwMDNlcGFyYW1zW2pdLnNlcWZpbGUsXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hucy9obnNfcm9jZV9kZWJ1Z2ZzLmM9MzQzPXZvaWQgaG5zX3JvY2VfcmVnaXN0ZXJfZGVidWdmcyhzdHJ1Y3QgaG5zX3JvY2VfZGV2ICpocl9kZXYpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hucy9obnNfcm9jZV9kZWJ1Z2ZzLmMtMzQ2LVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hucy9obnNfcm9jZV9kZWJ1Z2ZzLmM6MzQ3Olx0ZGJnZnMtXHUwMDNlcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcihwY2lfbmFtZShocl9kZXYtXHUwMDNlcGNpX2RldiksXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL2huc19yb2NlX2RlYnVnZnMuYy0zNDgtXHRcdFx0XHRcdCBobnNfcm9jZV9kYmdmc19yb290KTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvaG5zX3JvY2VfZGVidWdmcy5jLTM0OS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvaG5zX3JvY2VfZGVidWdmcy5jOjM1MDpcdGNyZWF0ZV9zd19zdGF0X2RlYnVnZnMoaHJfZGV2LCBkYmdmcy1cdTAwM2Vyb290KTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvaG5zX3JvY2VfZGVidWdmcy5jOjM1MTpcdGNyZWF0ZV9jY19wYXJhbV9kZWJ1Z2ZzKGhyX2RldiwgZGJnZnMtXHUwMDNlcm9vdCk7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL2huc19yb2NlX2RlYnVnZnMuYy0zNTItfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y19jdC5jPTIxOTU9bWx4NV9jdF90Y19jcmVhdGVfZGJnZnMoc3RydWN0IG1seDVfdGNfY3RfcHJpdiAqY3RfcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfY3QuYy0yMTk4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX2N0LmM6MjE5OTpcdGN0X2RiZ2ZzLVx1MDAzZXJvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoXCYjMzQ7Y3RcJiMzNDssIG1seDVfZGVidWdmc19nZXRfZGV2X3Jvb3QoY3RfcHJpdi1cdTAwM2VkZXYpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y19jdC5jOjIyMDA6XHRkZWJ1Z2ZzX2NyZWF0ZV9hdG9taWNfdChcJiMzNDtvZmZsb2FkZWRcJiMzNDssIDA0MDAsIGN0X2RiZ2ZzLVx1MDAzZXJvb3QsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfY3QuYy0yMjAxLVx0XHRcdFx0XHUwMDI2Y3RfZGJnZnMtXHUwMDNlc3RhdHMub2ZmbG9hZGVkKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y19jdC5jOjIyMDI6XHRkZWJ1Z2ZzX2NyZWF0ZV9hdG9taWNfdChcJiMzNDtyeF9kcm9wcGVkXCYjMzQ7LCAwNDAwLCBjdF9kYmdmcy1cdTAwM2Vyb290LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX2N0LmMtMjIwMy1cdFx0XHRcdFx1MDAyNmN0X2RiZ2ZzLVx1MDAzZXN0YXRzLnJ4X2Ryb3BwZWQpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93Y24zNnh4L2RlYnVnLmM9MTcxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHNfd2NuMzZ4eF9maXJtd2FyZV9mZWF0X2NhcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3djbjM2eHgvZGVidWcuYy0xNzktXHRcdGQgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKF9fc3RyaW5naWZ5KG5hbWUpLFx0XFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93Y24zNnh4L2RlYnVnLmM6MTgwOlx0XHRcdFx0XHRtb2RlLCBkZnMtXHUwMDNlcm9vdGRpcixcdFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2NuMzZ4eC9kZWJ1Zy5jLTE4MS1cdFx0XHRcdFx0cHJpdl9kYXRhLCBmb3ApO1x0XFxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2NuMzZ4eC9kZWJ1Zy5jPTE5MD12b2lkIHdjbjM2eHhfZGVidWdmc19pbml0KHN0cnVjdCB3Y24zNnh4ICp3Y24pXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3djbjM2eHgvZGVidWcuYy0xOTMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2NuMzZ4eC9kZWJ1Zy5jOjE5NDpcdGRmcy1cdTAwM2Vyb290ZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKEtCVUlMRF9NT0ROQU1FLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3djbjM2eHgvZGVidWcuYy0xOTUtXHRcdFx0XHRcdCAgd2NuLVx1MDAzZWh3LVx1MDAzZXdpcGh5LVx1MDAzZWRlYnVnZnNkaXIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3djbjM2eHgvZGVidWcuYzoxOTY6XHRpZiAoSVNfRVJSKGRmcy1cdTAwM2Vyb290ZGlyKSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3djbjM2eHgvZGVidWcuYy0xOTctXHRcdHdjbjM2eHhfd2FybihcJiMzNDtDcmVhdGUgdGhlIGRlYnVnZnMgZmFpbGVkXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93Y24zNnh4L2RlYnVnLmM6MTk4Olx0XHRkZnMtXHUwMDNlcm9vdGRpciA9IE5VTEw7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2NuMzZ4eC9kZWJ1Zy5jLTE5OS1cdH1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2NuMzZ4eC9kZWJ1Zy5jPTIwNz12b2lkIHdjbjM2eHhfZGVidWdmc19leGl0KHN0cnVjdCB3Y24zNnh4ICp3Y24pXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3djbjM2eHgvZGVidWcuYy0yMDktXHRzdHJ1Y3Qgd2NuMzZ4eF9kZnNfZW50cnkgKmRmcyA9IFx1MDAyNndjbi1cdTAwM2VkZnM7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2NuMzZ4eC9kZWJ1Zy5jOjIxMDpcdGRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShkZnMtXHUwMDNlcm9vdGRpcik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2NuMzZ4eC9kZWJ1Zy5jLTIxMS19XG4tLVxuZnMvS2NvbmZpZz0yMT1jb25maWcgTlVMTF9ST09UX0NXRF9LVU5JVF9URVNUXG4tLVxuZnMvS2NvbmZpZy0yNi1cdCAgQnVpbGQgS1VuaXQgdGVzdHMgdGhhdCBleGVyY2lzZSBwYXRoIHJlc29sdXRpb24gZm9yIHRhc2tzIHdob3NlXG5mcy9LY29uZmlnOjI3Olx0ICBmcy1cdTAwM2Vyb290IGFuZC9vciBmcy1cdTAwM2Vwd2QgaXMgdGhlIE5VTEwgcGF0aCAobm8gcm9vdCBkaXJlY3RvcnkgYW5kL29yXG5mcy9LY29uZmlnLTI4LVx0ICBubyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5KS5cbi0tXG5mcy9idHJmcy9leHRlbnQtdHJlZS5jPTIyMjg9aW50IGJ0cmZzX3J1bl9kZWxheWVkX3JlZnMoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsIHU2NCBtaW5fYnl0ZXMpXG4tLVxuZnMvYnRyZnMvZXh0ZW50LXRyZWUuYy0yMjQzLSNpZmRlZiBTQ1JBTUJMRV9ERUxBWUVEX1JFRlNcbmZzL2J0cmZzL2V4dGVudC10cmVlLmM6MjI0NDpcdGRlbGF5ZWRfcmVmcy1cdTAwM2VydW5fZGVsYXllZF9zdGFydCA9IGZpbmRfbWlkZGxlKFx1MDAyNmRlbGF5ZWRfcmVmcy1cdTAwM2Vyb290KTtcbmZzL2J0cmZzL2V4dGVudC10cmVlLmMtMjI0NS0jZW5kaWZcbi0tXG5mcy9idHJmcy9pb2N0bC5jPTIxMjI9c3RhdGljIGludCBidHJmc19pb2N0bF9nZXRfc3Vidm9sX3Jvb3RyZWYoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsXG4tLVxuZnMvYnRyZnMvaW9jdGwuYy0yMTgwLVx0XHRycmVmID0gYnRyZnNfaXRlbV9wdHIobGVhZiwgc2xvdCwgc3RydWN0IGJ0cmZzX3Jvb3RfcmVmKTtcbmZzL2J0cmZzL2lvY3RsLmM6MjE4MTpcdFx0cm9vdHJlZnMtXHUwMDNlcm9vdHJlZltmb3VuZF0udHJlZWlkID0ga2V5Lm9mZnNldDtcbmZzL2J0cmZzL2lvY3RsLmM6MjE4MjpcdFx0cm9vdHJlZnMtXHUwMDNlcm9vdHJlZltmb3VuZF0uZGlyaWQgPVxuZnMvYnRyZnMvaW9jdGwuYy0yMTgzLVx0XHRcdFx0ICBidHJmc19yb290X3JlZl9kaXJpZChsZWFmLCBycmVmKTtcbi0tXG5mcy9idHJmcy9pb2N0bC5jLTIyMDItXHRcdFx0cm9vdHJlZnMtXHUwMDNlbWluX3RyZWVpZCA9XG5mcy9idHJmcy9pb2N0bC5jOjIyMDM6XHRcdFx0XHRyb290cmVmcy1cdTAwM2Vyb290cmVmW2ZvdW5kIC0gMV0udHJlZWlkICYjNDM7IDE7XG5mcy9idHJmcy9pb2N0bC5jLTIyMDQtXHRcdGlmIChjb3B5X3RvX3VzZXIoYXJncCwgcm9vdHJlZnMsIHNpemVvZigqcm9vdHJlZnMpKSlcbi0tXG5mcy9jb3JlZHVtcC5jPTg3OD1zdGF0aWMgYm9vbCBjb3JlZHVtcF9maWxlKHN0cnVjdCBjb3JlX25hbWUgKmNuLCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtLFxuLS1cbmZzL2NvcmVkdW1wLmMtOTE4LVx0XHQgKiBVc2luZyB1c2VyIG5hbWVzcGFjZXMsIG5vcm1hbCB1c2VyIHRhc2tzIGNhbiBjaGFuZ2VcbmZzL2NvcmVkdW1wLmM6OTE5Olx0XHQgKiB0aGVpciBjdXJyZW50LVx1MDAzZWZzLVx1MDAzZXJvb3QgdG8gcG9pbnQgdG8gYXJiaXRyYXJ5XG5mcy9jb3JlZHVtcC5jLTkyMC1cdFx0ICogZGlyZWN0b3JpZXMuIFNpbmNlIHRoZSBpbnRlbnRpb24gb2YgdGhlIFwmIzM0O29ubHkgZHVtcFxuLS1cbmZzL2NvcmVkdW1wLmMtOTIyLVx0XHQgKiBjb3JlZHVtcHMgbWF5IGJlIHBsYWNlZCB1c2luZyByb290IHByaXZpbGVnZXMsXG5mcy9jb3JlZHVtcC5jOjkyMzpcdFx0ICogY3VycmVudC1cdTAwM2Vmcy1cdTAwM2Vyb290IG11c3Qgbm90IGJlIHVzZWQuIEluc3RlYWQsIHVzZSB0aGVcbmZzL2NvcmVkdW1wLmMtOTI0LVx0XHQgKiByb290IGRpcmVjdG9yeSBvZiBpbml0X3Rhc2suXG4tLVxuZnMvZF9wYXRoLmM9MjM5PXN0YXRpYyB2b2lkIGdldF9mc19yb290X3JjdShzdHJ1Y3QgZnNfc3RydWN0ICpmcywgc3RydWN0IHBhdGggKnJvb3QpXG4tLVxuZnMvZF9wYXRoLmMtMjQ0LVx0XHRzZXEgPSByZWFkX3NlcWJlZ2luKFx1MDAyNmZzLVx1MDAzZXNlcSk7XG5mcy9kX3BhdGguYzoyNDU6XHRcdCpyb290ID0gZnMtXHUwMDNlcm9vdDtcbmZzL2RfcGF0aC5jLTI0Ni1cdH0gd2hpbGUgKHJlYWRfc2VxcmV0cnkoXHUwMDI2ZnMtXHUwMDNlc2VxLCBzZXEpKTtcbi0tXG5mcy9kX3BhdGguYz0zODM9c3RhdGljIHZvaWQgZ2V0X2ZzX3Jvb3RfYW5kX3B3ZF9yY3Uoc3RydWN0IGZzX3N0cnVjdCAqZnMsIHN0cnVjdCBwYXRoICpyb290LFxuLS1cbmZzL2RfcGF0aC5jLTM4OS1cdFx0c2VxID0gcmVhZF9zZXFiZWdpbihcdTAwMjZmcy1cdTAwM2VzZXEpO1xuZnMvZF9wYXRoLmM6MzkwOlx0XHQqcm9vdCA9IGZzLVx1MDAzZXJvb3Q7XG5mcy9kX3BhdGguYy0zOTEtXHRcdCpwd2QgPSBmcy1cdTAwM2Vwd2Q7XG4tLVxuZnMvZnNfc3RydWN0LmM9MTY9dm9pZCBzZXRfZnNfcm9vdChzdHJ1Y3QgZnNfc3RydWN0ICpmcywgY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpXG4tLVxuZnMvZnNfc3RydWN0LmMtMjEtXHR3cml0ZV9zZXFsb2NrKFx1MDAyNmZzLVx1MDAzZXNlcSk7XG5mcy9mc19zdHJ1Y3QuYzoyMjpcdG9sZF9yb290ID0gZnMtXHUwMDNlcm9vdDtcbmZzL2ZzX3N0cnVjdC5jOjIzOlx0ZnMtXHUwMDNlcm9vdCA9ICpwYXRoO1xuZnMvZnNfc3RydWN0LmMtMjQtXHR3cml0ZV9zZXF1bmxvY2soXHUwMDI2ZnMtXHUwMDNlc2VxKTtcbi0tXG5mcy9mc19zdHJ1Y3QuYz01NT12b2lkIGNocm9vdF9mc19yZWZzKGNvbnN0IHN0cnVjdCBwYXRoICpvbGRfcm9vdCwgY29uc3Qgc3RydWN0IHBhdGggKm5ld19yb290KVxuLS1cbmZzL2ZzX3N0cnVjdC5jLTY3LVx0XHRcdHdyaXRlX3NlcWxvY2soXHUwMDI2ZnMtXHUwMDNlc2VxKTtcbmZzL2ZzX3N0cnVjdC5jOjY4Olx0XHRcdGhpdHMgJiM0Mzs9IHJlcGxhY2VfcGF0aChcdTAwMjZmcy1cdTAwM2Vyb290LCBvbGRfcm9vdCwgbmV3X3Jvb3QpO1xuZnMvZnNfc3RydWN0LmMtNjktXHRcdFx0aGl0cyAmIzQzOz0gcmVwbGFjZV9wYXRoKFx1MDAyNmZzLVx1MDAzZXB3ZCwgb2xkX3Jvb3QsIG5ld19yb290KTtcbi0tXG5mcy9mc19zdHJ1Y3QuYz04Mz12b2lkIGZyZWVfZnNfc3RydWN0KHN0cnVjdCBmc19zdHJ1Y3QgKmZzKVxuZnMvZnNfc3RydWN0LmMtODQte1xuZnMvZnNfc3RydWN0LmM6ODU6XHRwYXRoX3B1dChcdTAwMjZmcy1cdTAwM2Vyb290KTtcbmZzL2ZzX3N0cnVjdC5jLTg2LVx0cGF0aF9wdXQoXHUwMDI2ZnMtXHUwMDNlcHdkKTtcbi0tXG5mcy9mc19zdHJ1Y3QuYz0xMDc9c3RydWN0IGZzX3N0cnVjdCAqY29weV9mc19zdHJ1Y3Qoc3RydWN0IGZzX3N0cnVjdCAqb2xkKVxuLS1cbmZzL2ZzX3N0cnVjdC5jLTExNy1cdFx0cmVhZF9zZXFsb2NrX2V4Y2woXHUwMDI2b2xkLVx1MDAzZXNlcSk7XG5mcy9mc19zdHJ1Y3QuYzoxMTg6XHRcdGZzLVx1MDAzZXJvb3QgPSBvbGQtXHUwMDNlcm9vdDtcbmZzL2ZzX3N0cnVjdC5jOjExOTpcdFx0cGF0aF9nZXQoXHUwMDI2ZnMtXHUwMDNlcm9vdCk7XG5mcy9mc19zdHJ1Y3QuYy0xMjAtXHRcdGZzLVx1MDAzZXB3ZCA9IG9sZC1cdTAwM2Vwd2Q7XG4tLVxuZnMvbmFtZWkuYz0xMTA1PXN0YXRpYyBpbnQgc2V0X3Jvb3Qoc3RydWN0IG5hbWVpZGF0YSAqbmQpXG4tLVxuZnMvbmFtZWkuYy0xMTIxLVx0XHRcdHNlcSA9IHJlYWRfc2VxYmVnaW4oXHUwMDI2ZnMtXHUwMDNlc2VxKTtcbmZzL25hbWVpLmM6MTEyMjpcdFx0XHRuZC1cdTAwM2Vyb290ID0gZnMtXHUwMDNlcm9vdDtcbmZzL25hbWVpLmMtMTEyMy1cdFx0XHQvKlxuLS1cbmZzL25hbWVzcGFjZS5jPTE4NzA9c3RhdGljIGludCBkb191bW91bnQoc3RydWN0IG1vdW50ICptbnQsIGludCBmbGFncylcbi0tXG5mcy9uYW1lc3BhY2UuYy0xODg1LVx0aWYgKGZsYWdzIFx1MDAyNiBNTlRfRVhQSVJFKSB7XG5mcy9uYW1lc3BhY2UuYzoxODg2Olx0XHRpZiAoXHUwMDI2bW50LVx1MDAzZW1udCA9PSBjdXJyZW50LVx1MDAzZWZzLVx1MDAzZXJvb3QubW50IHx8XG5mcy9uYW1lc3BhY2UuYy0xODg3LVx0XHQgICAgZmxhZ3MgXHUwMDI2IChNTlRfRk9SQ0UgfCBNTlRfREVUQUNIKSlcbi0tXG5mcy9uYW1lc3BhY2UuYy0xOTI3LVx0ICovXG5mcy9uYW1lc3BhY2UuYzoxOTI4Olx0aWYgKFx1MDAyNm1udC1cdTAwM2VtbnQgPT0gY3VycmVudC1cdTAwM2Vmcy1cdTAwM2Vyb290Lm1udCBcdTAwMjZcdTAwMjYgIShmbGFncyBcdTAwMjYgTU5UX0RFVEFDSCkpIHtcbmZzL25hbWVzcGFjZS5jLTE5MjktXHRcdC8qXG4tLVxuZnMvbmFtZXNwYWNlLmM9NDIzMj1zdHJ1Y3QgbW50X25hbWVzcGFjZSAqY29weV9tbnRfbnModTY0IGZsYWdzLCBzdHJ1Y3QgbW50X25hbWVzcGFjZSAqbnMsXG4tLVxuZnMvbmFtZXNwYWNlLmMtNDI4NC1cdFx0aWYgKG5ld19mcykge1xuZnMvbmFtZXNwYWNlLmM6NDI4NTpcdFx0XHRvbGRfcm9vdCA9IG5ld19mcy1cdTAwM2Vyb290O1xuZnMvbmFtZXNwYWNlLmMtNDI4Ni1cdFx0XHRvbGRfcHdkID0gbmV3X2ZzLVx1MDAzZXB3ZDtcbmZzL25hbWVzcGFjZS5jLTQyODctXG5mcy9uYW1lc3BhY2UuYzo0Mjg4Olx0XHRcdG5ld19mcy1cdTAwM2Vyb290Lm1udCA9IG1udGdldChcdTAwMjZuZXctXHUwMDNlbW50KTtcbmZzL25hbWVzcGFjZS5jOjQyODk6XHRcdFx0bmV3X2ZzLVx1MDAzZXJvb3QuZGVudHJ5ID0gZGdldChuZXctXHUwMDNlbW50Lm1udF9yb290KTtcbmZzL25hbWVzcGFjZS5jLTQyOTAtXG4tLVxuZnMvbmFtZXNwYWNlLmMtNDMwOC1cdFx0XHRpZiAobmV3X2ZzKSB7XG5mcy9uYW1lc3BhY2UuYzo0MzA5Olx0XHRcdFx0aWYgKFx1MDAyNnAtXHUwMDNlbW50ID09IG5ld19mcy1cdTAwM2Vyb290Lm1udCkge1xuZnMvbmFtZXNwYWNlLmM6NDMxMDpcdFx0XHRcdFx0b2xkX3Jvb3QubW50ID0gbmV3X2ZzLVx1MDAzZXJvb3QubW50O1xuZnMvbmFtZXNwYWNlLmM6NDMxMTpcdFx0XHRcdFx0bmV3X2ZzLVx1MDAzZXJvb3QubW50ID0gbW50Z2V0KFx1MDAyNnEtXHUwMDNlbW50KTtcbmZzL25hbWVzcGFjZS5jLTQzMTItXHRcdFx0XHR9XG4tLVxuZnMvbmFtZXNwYWNlLmM9NTMzMD1zdGF0aWMgdm9pZCBzdGF0bW91bnRfcHJvcGFnYXRlX2Zyb20oc3RydWN0IGtzdGF0bW91bnQgKnMpXG4tLVxuZnMvbmFtZXNwYWNlLmMtNTMzNS1cdGlmIChJU19NTlRfU0xBVkUobSkpXG5mcy9uYW1lc3BhY2UuYzo1MzM2Olx0XHRzLVx1MDAzZXNtLnByb3BhZ2F0ZV9mcm9tID0gZ2V0X2RvbWluYXRpbmdfaWQobSwgXHUwMDI2Y3VycmVudC1cdTAwM2Vmcy1cdTAwM2Vyb290KTtcbmZzL25hbWVzcGFjZS5jLTUzMzctfVxuLS1cbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYy0yLS8qXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmM6MzogKiBLVW5pdCB0ZXN0cyBmb3IgdGFza3Mgd2hvc2UgZnMtXHUwMDNlcm9vdCBhbmQvb3IgZnMtXHUwMDNlcHdkIGlzIHRoZSBOVUxMIHBhdGguXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmMtNC0gKiBTZWUgXCYjMzQ7ZnM6IHN1cHBvcnQgdGFza3Mgd2l0aCBhIG51bGwgcm9vdCBvciBjd2RcJiMzNDsuXG4tLVxuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jPTcxPXN0YXRpYyB2b2lkIG51bGxfcm9vdF90ZXN0KHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmMtODktXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmM6OTA6XHQvKiBBIGRpcmZkLWFuY2hvcmVkIGxvb2t1cCBuZXZlciBjb25zdWx0cyBmcy1cdTAwM2Vyb290LiAqL1xuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jLTkxLVx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHRyeV9mZF9yZWxhdGl2ZShcdTAwMjZjdHgsIFwmIzM0Oy5cJiMzNDspLCAwKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzX3N0cnVjdC5oPTU0PXN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfZnNfcm9vdChzdHJ1Y3QgZnNfc3RydWN0ICpmcywgc3RydWN0IHBhdGggKnJvb3QpXG4tLVxuaW5jbHVkZS9saW51eC9mc19zdHJ1Y3QuaC01Ni1cdHJlYWRfc2VxbG9ja19leGNsKFx1MDAyNmZzLVx1MDAzZXNlcSk7XG5pbmNsdWRlL2xpbnV4L2ZzX3N0cnVjdC5oOjU3Olx0KnJvb3QgPSBmcy1cdTAwM2Vyb290O1xuaW5jbHVkZS9saW51eC9mc19zdHJ1Y3QuaC01OC1cdHBhdGhfZ2V0KHJvb3QpO1xuLS1cbmtlcm5lbC9uc3Byb3h5LmM9NTM1PXN0YXRpYyB2b2lkIGNvbW1pdF9uc3NldChzdHJ1Y3QgbnNzZXQgKm5zc2V0KVxuLS1cbmtlcm5lbC9uc3Byb3h5LmMtNTQ5LVx0aWYgKChmbGFncyBcdTAwMjYgQ0xPTkVfTkVXTlMpIFx1MDAyNlx1MDAyNiAoZmxhZ3MgXHUwMDI2IH5DTE9ORV9ORVdOUykpIHtcbmtlcm5lbC9uc3Byb3h5LmM6NTUwOlx0XHRzZXRfZnNfcm9vdChtZS1cdTAwM2VmcywgXHUwMDI2bnNzZXQtXHUwMDNlZnMtXHUwMDNlcm9vdCk7XG5rZXJuZWwvbnNwcm94eS5jLTU1MS1cdFx0c2V0X2ZzX3B3ZChtZS1cdTAwM2VmcywgXHUwMDI2bnNzZXQtXHUwMDNlZnMtXHUwMDNlcHdkKTtcbi0tXG5zZWN1cml0eS9pcGUvaG9va3MuYz0yMjA9dm9pZCBpcGVfdW5wYWNrX2luaXRyYW1mcyh2b2lkKVxuc2VjdXJpdHkvaXBlL2hvb2tzLmMtMjIxLXtcbnNlY3VyaXR5L2lwZS9ob29rcy5jOjIyMjpcdGlwZV9zYihjdXJyZW50LVx1MDAzZWZzLVx1MDAzZXJvb3QubW50LVx1MDAzZW1udF9zYiktXHUwMDNlaW5pdHJhbWZzID0gdHJ1ZTtcbnNlY3VyaXR5L2lwZS9ob29rcy5jLTIyMy19XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Zmc19yZWplY3QuYz0xMDI9aW50IEJQRl9QUk9HKHBhdGhfZF9wYXRoX2tmdW5jX3VudHJ1c3RlZF9mcm9tX2FyZ3VtZW50LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Zmc19yZWplY3QuYy0xMDgtXHQgKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl92ZnNfcmVqZWN0LmM6MTA5Olx0cm9vdCA9IFx1MDAyNnRhc2stXHUwMDNlZnMtXHUwMDNlcm9vdDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl92ZnNfcmVqZWN0LmMtMTEwLVx0YnBmX3BhdGhfZF9wYXRoKHJvb3QsIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL21vdmVfbW91bnQvbW92ZV9tb3VudF90ZXN0LmM9MTcyPVRFU1RfRihtb3ZlX21vdW50LCBiZW5lYXRoX3Jvb3Rmc19vbGRfcm9vdF9zdGFja2VkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL21vdmVfbW91bnQvbW92ZV9tb3VudF90ZXN0LmMtMjA1LSAqIFRlc3QgdGhhdCBNT1ZFX01PVU5UX0JFTkVBVEggb24gcm9vdGZzIGZhaWxzIHdoZW4gY2hyb290JiMzOTtkIGludG8gYVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvbW92ZV9tb3VudC9tb3ZlX21vdW50X3Rlc3QuYzoyMDY6ICogc3ViZGlyZWN0b3J5IG9mIHRoZSBzYW1lIG1vdW50LiBUaGUgY2FsbGVyJiMzOTtzIGZzLVx1MDAzZXJvb3QuZGVudHJ5IGRvZXNuJiMzOTt0XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9tb3ZlX21vdW50L21vdmVfbW91bnRfdGVzdC5jLTIwNy0gKiBtYXRjaCBtbnQtXHUwMDNlbW50X3Jvb3Qgc28gdGhlIGtlcm5lbCByZWplY3RzIGl0LlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL21vdmVfbW91bnQvbW92ZV9tb3VudF90ZXN0LmM9MjA5PVRFU1RfRihtb3ZlX21vdW50LCBiZW5lYXRoX3Jvb3Rmc19pbl9jaHJvb3RfZmFpbClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9tb3ZlX21vdW50L21vdmVfbW91bnRfdGVzdC5jLTIzNC1cdC8qXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9tb3ZlX21vdW50L21vdmVfbW91bnRfdGVzdC5jOjIzNTpcdCAqIFNob3VsZCBmYWlsOiBmcy1cdTAwM2Vyb290LmRlbnRyeSAoL2Nocm9vdF9kaXIpIGRvZXNuJiMzOTt0IG1hdGNoXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9tb3ZlX21vdW50L21vdmVfbW91bnRfdGVzdC5jLTIzNi1cdCAqIHRoZSBtb3VudCYjMzk7cyBtbnRfcm9vdCAoLykuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA3OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMTA4CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMzc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEZpbGVzeXN0ZW0gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNlZSBjaGFuZ2VzIHRvIGBmcy9LY29uZmlnYC4gSXQmIzM5O3MgYWRkaW5nIGBOVUxMX1JPT1RfQ1dEX0tVTklUX1RFU1RgLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiBJcyB0aGlzIHNvbGVseSBmb3IgdGVzdCBwdXJwb3Nlcywgb3IgaXMgdGhpcyBhY3R1YWxseSBzdXBwb3J0aW5nIGEgZnVuY3Rpb25hbCBjaGFuZ2U/IFRoZSBkZXNjcmlwdGlvbiBtZW50aW9ucyBzdXBwb3J0IGZvciB0YXNrcyB3aXRoIG51bGwgcm9vdC9jd2QsIHdoaWNoIHJhaXNlcyBhIGZsYWcuCgpHaXZlbiB0aGF0IHRoaXMgc2VlbXMgbGlrZSBhIG5ldyBmZWF0dXJlIGluIHRoZSBjb3JlIFZGUywgYW5kIGl04oCZcyBiZWluZyBhZGRlZCBub3csIGl0IHJlYWxseSBmZWVscyBsaWtlIGl0JiMzOTtzIHByZXBhcmF0b3J5IHdvcmsuIElzIGl0IGJlaW5nIGJ1aWx0IHVwIHRvIGFub3RoZXIgcGF0Y2ggdGhhdCYjMzk7cyBnb2luZyB0byB1dGlsaXplIHRoaXMgZnVuY3Rpb25hbGl0eT8gSSBub3RlIHRoYXQgaXQgaGFzIGJlZW4gYXBwbGllZCBhZnRlciByZXZpZXcuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaWYgdGhpcyBpcyBwYXJ0IG9mIGEgc2VyaWVzOyBhcmUgdGhlcmUgbW9yZSBwYXRjaGVzPwoKQWxyaWdodCwgSSBkb24mIzM5O3Qgc2VlIGFueSByZWxhdGVkIHBhdGNoZXMsIGJ1dCBJIGNhbiBzZWUgdGhhdCB0aGUgY2hhbmdlcyBhcmUgbW9kaWZ5aW5nIHNvbWUga2V5IFZGUyBmaWxlczogYGZzL25hbWVpLmNgLCBgZnMvZF9wYXRoLmNgLCBgZnMvZmhhbmRsZS5jYCwgYGZzL3Byb2MvYmFzZS5jYCwgYW5kIGBmcy9jYWNoZWZpbGVzL2RhZW1vbi5jYC4gVGhhdCB0ZWxscyBtZSB0aGVzZSBjb3JlIGZpbGVzeXN0ZW0gZnVuY3Rpb25zIGFyZSBiZWluZyB1cGRhdGVkIHRvIGdyYWNlZnVsbHkgaGFuZGxlIGEgbnVsbCByb290IG9yIENXRCwgcmF0aGVyIHRoYW4gY3Jhc2hpbmcgd2hlbiBlbmNvdW50ZXJlZC4KCk5vdywgbXkgbWluZCBzdGFydHMgcmFjaW5nLiBIb3cgY291bGQgYSB0YXNrIGV2ZW4gKmdldCogYSBudWxsIHJvb3Qgb3IgQ1dEIGZyb20gdXNlcnNwYWNlPyBDb3VsZCB0aGV5IHVzZSBgY2hyb290YCBhbmQgdGhlbiB1bm1vdW50PyBCdXQgbm8sIGBjaHJvb3RgIHBpbnMgdGhlIG1vdW50LiBDb3VsZCBhIHRhc2sgYmUgY3JlYXRlZCAqd2l0aG91dCogYW4gYGZzX3N0cnVjdGA/IFRoZSB1c2Ugb2YgYENMT05FX0ZTYCB3b3VsZG4mIzM5O3Qgd29yazsgaWYgYSB0YXNrIGlzIGNyZWF0ZWQgd2l0aCBgQ0xPTkVfRlNgIGFuZCB0aGUgb3RoZXIgdGFzayBleGl0cywgdGhlIGBmc19zdHJ1Y3RgIGlzIHJlZmNvdW50ZWQuCgpXYWl0IGEgc2Vjb25k4oCmIHdoYXQgYWJvdXQgaW9fdXJpbmcgdGhyZWFkcz8gVGhleSBtYXkgbm90IGhhdmUgYGZzX3N0cnVjdGAhIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBwb3NzaWJpbGl0eS4gSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byB0aGUgaW9fdXJpbmcgY29kZSB0byBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIHRoZSBgZnNfc3RydWN0YCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDc6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnNfc3RydWN0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMjctI2luY2x1ZGUgXHUwMDNjbGludXgvZnMuaFx1MDAzZVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzoyODojaW5jbHVkZSBcdTAwM2NsaW51eC9mc19zdHJ1Y3QuaFx1MDAzZVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yOS0jaW5jbHVkZSBcdTAwM2NsaW51eC9wc3AuaFx1MDAzZVxuLS1cbmZzLzlwL2FjbC5jLTgtI2luY2x1ZGUgXHUwMDNjbGludXgvZnMuaFx1MDAzZVxuZnMvOXAvYWNsLmM6OTojaW5jbHVkZSBcdTAwM2NsaW51eC9mc19zdHJ1Y3QuaFx1MDAzZVxuZnMvOXAvYWNsLmMtMTAtI2luY2x1ZGUgXHUwMDNjbmV0LzlwLzlwLmhcdTAwM2Vcbi0tXG5mcy9NYWtlZmlsZT0xMD1vYmoteSA6PVx0b3Blbi5vIHJlYWRfd3JpdGUubyBmaWxlX3RhYmxlLm8gc3VwZXIubyBcXFxuLS1cbmZzL01ha2VmaWxlLTE1LVx0XHRwbm9kZS5vIHNwbGljZS5vIHN5bmMubyB1dGltZXMubyBkX3BhdGgubyBcXFxuZnMvTWFrZWZpbGU6MTY6XHRcdHN0YWNrLm8gZnNfc3RydWN0Lm8gc3RhdGZzLm8gZnNfcGluLm8gbnNmcy5vIFxcXG5mcy9NYWtlZmlsZS0xNy1cdFx0ZnNfZGlyZW50Lm8gZnNfY29udGV4dC5vIGZzX3BhcnNlci5vIGZzb3Blbi5vIGluaXQubyBcXFxuLS1cbmZzL2J0cmZzL2lub2RlLmMtMTEtI2luY2x1ZGUgXHUwMDNjbGludXgvZnMuaFx1MDAzZVxuZnMvYnRyZnMvaW5vZGUuYzoxMjojaW5jbHVkZSBcdTAwM2NsaW51eC9mc19zdHJ1Y3QuaFx1MDAzZVxuZnMvYnRyZnMvaW5vZGUuYy0xMy0jaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlbWFwLmhcdTAwM2Vcbi0tXG5mcy9jYWNoZWZpbGVzL2RhZW1vbi5jLTIxLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZy5oXHUwMDNlXG5mcy9jYWNoZWZpbGVzL2RhZW1vbi5jOjIyOiNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzX3N0cnVjdC5oXHUwMDNlXG5mcy9jYWNoZWZpbGVzL2RhZW1vbi5jLTIzLSNpbmNsdWRlIFwmIzM0O2ludGVybmFsLmhcJiMzNDtcbi0tXG5mcy9jb3JlZHVtcC5jLTM2LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2Zzbm90aWZ5LmhcdTAwM2VcbmZzL2NvcmVkdW1wLmM6Mzc6I2luY2x1ZGUgXHUwMDNjbGludXgvZnNfc3RydWN0LmhcdTAwM2VcbmZzL2NvcmVkdW1wLmMtMzgtI2luY2x1ZGUgXHUwMDNjbGludXgvcGlwZV9mc19pLmhcdTAwM2Vcbi0tXG5mcy9kX3BhdGguYy00LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFx1MDAzZVxuZnMvZF9wYXRoLmM6NTojaW5jbHVkZSBcdTAwM2NsaW51eC9mc19zdHJ1Y3QuaFx1MDAzZVxuZnMvZF9wYXRoLmMtNi0jaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4tLVxuZnMvZF9wYXRoLmM9MjI3PWNoYXIgKmRfYWJzb2x1dGVfcGF0aChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCxcbi0tXG5mcy9kX3BhdGguYy0yMzgtXG5mcy9kX3BhdGguYzoyMzk6c3RhdGljIHZvaWQgZ2V0X2ZzX3Jvb3RfcmN1KHN0cnVjdCBmc19zdHJ1Y3QgKmZzLCBzdHJ1Y3QgcGF0aCAqcm9vdClcbmZzL2RfcGF0aC5jLTI0MC17XG4tLVxuZnMvZF9wYXRoLmM9MzcyPWNoYXIgKmRlbnRyeV9wYXRoKGNvbnN0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqYnVmLCBpbnQgYnVmbGVuKVxuLS1cbmZzL2RfcGF0aC5jLTM4Mi1cbmZzL2RfcGF0aC5jOjM4MzpzdGF0aWMgdm9pZCBnZXRfZnNfcm9vdF9hbmRfcHdkX3JjdShzdHJ1Y3QgZnNfc3RydWN0ICpmcywgc3RydWN0IHBhdGggKnJvb3QsXG5mcy9kX3BhdGguYy0zODQtXHRcdFx0XHQgICAgc3RydWN0IHBhdGggKnB3ZClcbi0tXG5mcy9leGVjLmMtNjAtI2luY2x1ZGUgXHUwMDNjbGludXgvZnNub3RpZnkuaFx1MDAzZVxuZnMvZXhlYy5jOjYxOiNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzX3N0cnVjdC5oXHUwMDNlXG5mcy9leGVjLmMtNjItI2luY2x1ZGUgXHUwMDNjbGludXgvb29tLmhcdTAwM2Vcbi0tXG5mcy9leGZhdC9zdXBlci5jLTE1LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jsa2Rldi5oXHUwMDNlXG5mcy9leGZhdC9zdXBlci5jOjE2OiNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzX3N0cnVjdC5oXHUwMDNlXG5mcy9leGZhdC9zdXBlci5jLTE3LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2l2ZXJzaW9uLmhcdTAwM2Vcbi0tXG5mcy9mMmZzL2FjbC5jLTExLSAqL1xuZnMvZjJmcy9hY2wuYzoxMjojaW5jbHVkZSBcdTAwM2NsaW51eC9mc19zdHJ1Y3QuaFx1MDAzZVxuZnMvZjJmcy9hY2wuYy0xMy0jaW5jbHVkZSBcdTAwM2NsaW51eC9mMmZzX2ZzLmhcdTAwM2Vcbi0tXG5mcy9mYXQvaW5vZGUuYy0yNC0jaW5jbHVkZSBcdTAwM2NsaW51eC9pdmVyc2lvbi5oXHUwMDNlXG5mcy9mYXQvaW5vZGUuYzoyNTojaW5jbHVkZSBcdTAwM2NsaW51eC9mc19zdHJ1Y3QuaFx1MDAzZVxuZnMvZmF0L2lub2RlLmMtMjYtI2luY2x1ZGUgXCYjMzQ7ZmF0LmhcJiMzNDtcbi0tXG5mcy9maGFuZGxlLmMtOC0jaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnRmcy5oXHUwMDNlXG5mcy9maGFuZGxlLmM6OTojaW5jbHVkZSBcdTAwM2NsaW51eC9mc19zdHJ1Y3QuaFx1MDAzZVxuZnMvZmhhbmRsZS5jLTEwLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2Zzbm90aWZ5LmhcdTAwM2Vcbi0tXG5mcy9mc19zdHJ1Y3QuYy03LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuZnMvZnNfc3RydWN0LmM6ODojaW5jbHVkZSBcdTAwM2NsaW51eC9mc19zdHJ1Y3QuaFx1MDAzZVxuZnMvZnNfc3RydWN0LmMtOS0jaW5jbHVkZSBcdTAwM2NsaW51eC9pbml0X3Rhc2suaFx1MDAzZVxuLS1cbmZzL2ZzX3N0cnVjdC5jLTE1LSAqL1xuZnMvZnNfc3RydWN0LmM6MTY6dm9pZCBzZXRfZnNfcm9vdChzdHJ1Y3QgZnNfc3RydWN0ICpmcywgY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpXG5mcy9mc19zdHJ1Y3QuYy0xNy17XG4tLVxuZnMvZnNfc3RydWN0LmMtMzItICovXG5mcy9mc19zdHJ1Y3QuYzozMzp2b2lkIHNldF9mc19wd2Qoc3RydWN0IGZzX3N0cnVjdCAqZnMsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoKVxuZnMvZnNfc3RydWN0LmMtMzQte1xuLS1cbmZzL2ZzX3N0cnVjdC5jPTU1PXZvaWQgY2hyb290X2ZzX3JlZnMoY29uc3Qgc3RydWN0IHBhdGggKm9sZF9yb290LCBjb25zdCBzdHJ1Y3QgcGF0aCAqbmV3X3Jvb3QpXG4tLVxuZnMvZnNfc3RydWN0LmMtNTctXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmcsICpwO1xuZnMvZnNfc3RydWN0LmM6NTg6XHRzdHJ1Y3QgZnNfc3RydWN0ICpmcztcbmZzL2ZzX3N0cnVjdC5jLTU5LVx0aW50IGNvdW50ID0gMDtcbi0tXG5mcy9mc19zdHJ1Y3QuYy04Mi1cbmZzL2ZzX3N0cnVjdC5jOjgzOnZvaWQgZnJlZV9mc19zdHJ1Y3Qoc3RydWN0IGZzX3N0cnVjdCAqZnMpXG5mcy9mc19zdHJ1Y3QuYy04NC17XG4tLVxuZnMvZnNfc3RydWN0LmM9OTA9dm9pZCBleGl0X2ZzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuZnMvZnNfc3RydWN0LmMtOTEte1xuZnMvZnNfc3RydWN0LmM6OTI6XHRzdHJ1Y3QgZnNfc3RydWN0ICpmcyA9IHRzay1cdTAwM2VmcztcbmZzL2ZzX3N0cnVjdC5jLTkzLVxuLS1cbmZzL2ZzX3N0cnVjdC5jLTEwMi1cdFx0aWYgKGtpbGwpXG5mcy9mc19zdHJ1Y3QuYzoxMDM6XHRcdFx0ZnJlZV9mc19zdHJ1Y3QoZnMpO1xuZnMvZnNfc3RydWN0LmMtMTA0LVx0fVxuLS1cbmZzL2ZzX3N0cnVjdC5jLTEwNi1cbmZzL2ZzX3N0cnVjdC5jOjEwNzpzdHJ1Y3QgZnNfc3RydWN0ICpjb3B5X2ZzX3N0cnVjdChzdHJ1Y3QgZnNfc3RydWN0ICpvbGQpXG5mcy9mc19zdHJ1Y3QuYy0xMDgte1xuZnMvZnNfc3RydWN0LmM6MTA5Olx0c3RydWN0IGZzX3N0cnVjdCAqZnMgPSBrbWVtX2NhY2hlX2FsbG9jKGZzX2NhY2hlcCwgR0ZQX0tFUk5FTCk7XG5mcy9mc19zdHJ1Y3QuYy0xMTAtXHQvKiBXZSBkb24mIzM5O3QgbmVlZCB0byBsb2NrIGZzIC0gdGhpbmsgd2h5IDstKSAqL1xuLS1cbmZzL2ZzX3N0cnVjdC5jLTEyNi1cbmZzL2ZzX3N0cnVjdC5jOjEyNzppbnQgdW5zaGFyZV9mc19zdHJ1Y3Qodm9pZClcbmZzL2ZzX3N0cnVjdC5jLTEyOC17XG5mcy9mc19zdHJ1Y3QuYzoxMjk6XHRzdHJ1Y3QgZnNfc3RydWN0ICpmcyA9IGN1cnJlbnQtXHUwMDNlZnM7XG5mcy9mc19zdHJ1Y3QuYzoxMzA6XHRzdHJ1Y3QgZnNfc3RydWN0ICpuZXdfZnMgPSBjb3B5X2ZzX3N0cnVjdChmcyk7XG5mcy9mc19zdHJ1Y3QuYy0xMzEtXHRpbnQga2lsbDtcbi0tXG5mcy9mc19zdHJ1Y3QuYy0xNDMtXHRpZiAoa2lsbClcbmZzL2ZzX3N0cnVjdC5jOjE0NDpcdFx0ZnJlZV9mc19zdHJ1Y3QoZnMpO1xuZnMvZnNfc3RydWN0LmMtMTQ1LVxuLS1cbmZzL2ZzX3N0cnVjdC5jLTE0Ny19XG5mcy9mc19zdHJ1Y3QuYzoxNDg6RVhQT1JUX1NZTUJPTF9HUEwodW5zaGFyZV9mc19zdHJ1Y3QpO1xuZnMvZnNfc3RydWN0LmMtMTQ5LVxuZnMvZnNfc3RydWN0LmMtMTUwLS8qIHRvIGJlIG1lbnRpb25lZCBvbmx5IGluIElOSVRfVEFTSyAqL1xuZnMvZnNfc3RydWN0LmM6MTUxOnN0cnVjdCBmc19zdHJ1Y3QgaW5pdF9mcyA9IHtcbmZzL2ZzX3N0cnVjdC5jLTE1Mi1cdC51c2Vyc1x0XHQ9IDEsXG4tLVxuZnMvaGZzcGx1cy9vcHRpb25zLmMtMTQtI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuZnMvaGZzcGx1cy9vcHRpb25zLmM6MTU6I2luY2x1ZGUgXHUwMDNjbGludXgvZnNfc3RydWN0LmhcdTAwM2VcbmZzL2hmc3BsdXMvb3B0aW9ucy5jLTE2LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzX2NvbnRleHQuaFx1MDAzZVxuLS1cbmZzL2hwZnMvc3VwZXIuYy0xMS0jaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuZnMvaHBmcy9zdXBlci5jOjEyOiNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzX3N0cnVjdC5oXHUwMDNlXG5mcy9ocGZzL3N1cGVyLmMtMTMtI2luY2x1ZGUgXHUwMDNjbGludXgvZnNfY29udGV4dC5oXHUwMDNlXG4tLVxuZnMvaW5pdC5jLTktI2luY2x1ZGUgXHUwMDNjbGludXgvZnMuaFx1MDAzZVxuZnMvaW5pdC5jOjEwOiNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzX3N0cnVjdC5oXHUwMDNlXG5mcy9pbml0LmMtMTEtI2luY2x1ZGUgXHUwMDNjbGludXgvZmlsZS5oXHUwMDNlXG4tLVxuZnMvaW50ZXJuYWwuaD05Nz1pbnQgc2hvd19wYXRoKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGRlbnRyeSAqcm9vdCk7XG4tLVxuZnMvaW50ZXJuYWwuaC05OS0vKlxuZnMvaW50ZXJuYWwuaDoxMDA6ICogZnNfc3RydWN0LmNcbmZzL2ludGVybmFsLmgtMTAxLSAqL1xuLS1cbmZzL2tlcm5lbF9yZWFkX2ZpbGUuYy0yLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzLmhcdTAwM2VcbmZzL2tlcm5lbF9yZWFkX2ZpbGUuYzozOiNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzX3N0cnVjdC5oXHUwMDNlXG5mcy9rZXJuZWxfcmVhZF9maWxlLmMtNC0jaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWxfcmVhZF9maWxlLmhcdTAwM2Vcbi0tXG5mcy9uYW1laS5jLTM2LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2RldmljZV9jZ3JvdXAuaFx1MDAzZVxuZnMvbmFtZWkuYzozNzojaW5jbHVkZSBcdTAwM2NsaW51eC9mc19zdHJ1Y3QuaFx1MDAzZVxuZnMvbmFtZWkuYy0zOC0jaW5jbHVkZSBcdTAwM2NsaW51eC9wb3NpeF9hY2wuaFx1MDAzZVxuLS1cbmZzL25hbWVpLmM9MTEwNT1zdGF0aWMgaW50IHNldF9yb290KHN0cnVjdCBuYW1laWRhdGEgKm5kKVxuZnMvbmFtZWkuYy0xMTA2LXtcbmZzL25hbWVpLmM6MTEwNzpcdHN0cnVjdCBmc19zdHJ1Y3QgKmZzID0gY3VycmVudC1cdTAwM2VmcztcbmZzL25hbWVpLmMtMTEwOC1cbi0tXG5mcy9uYW1laS5jPTI2ODk9c3RhdGljIGNvbnN0IGNoYXIgKnBhdGhfaW5pdChzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgdW5zaWduZWQgZmxhZ3MpXG4tLVxuZnMvbmFtZWkuYy0yNzQwLVx0XHRpZiAoZmxhZ3MgXHUwMDI2IExPT0tVUF9SQ1UpIHtcbmZzL25hbWVpLmM6Mjc0MTpcdFx0XHRzdHJ1Y3QgZnNfc3RydWN0ICpmcyA9IGN1cnJlbnQtXHUwMDNlZnM7XG5mcy9uYW1laS5jLTI3NDItXHRcdFx0dW5zaWduZWQgc2VxO1xuLS1cbmZzL25hbWVzcGFjZS5jLTIwLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVx0XHQvKiBpbml0X3Jvb3RmcyAqL1xuZnMvbmFtZXNwYWNlLmM6MjE6I2luY2x1ZGUgXHUwMDNjbGludXgvZnNfc3RydWN0LmhcdTAwM2VcdC8qIGdldF9mc19yb290IGV0LmFsLiAqL1xuZnMvbmFtZXNwYWNlLmMtMjItI2luY2x1ZGUgXHUwMDNjbGludXgvZnNub3RpZnkuaFx1MDAzZVx0LyogZnNub3RpZnlfdmZzbW91bnRfZGVsZXRlICovXG4tLVxuZnMvbmFtZXNwYWNlLmM9NDIzMj1zdHJ1Y3QgbW50X25hbWVzcGFjZSAqY29weV9tbnRfbnModTY0IGZsYWdzLCBzdHJ1Y3QgbW50X25hbWVzcGFjZSAqbnMsXG5mcy9uYW1lc3BhY2UuYzo0MjMzOlx0XHRzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMsIHN0cnVjdCBmc19zdHJ1Y3QgKm5ld19mcylcbmZzL25hbWVzcGFjZS5jLTQyMzQte1xuLS1cbmZzL25hbWVzcGFjZS5jLTQzMDAtXHRcdCAqIGJlbG9uZ2luZyB0byBuZXcgbmFtZXNwYWNlLiAgV2UgaGF2ZSBhbHJlYWR5IGFjcXVpcmVkIGFcbmZzL25hbWVzcGFjZS5jOjQzMDE6XHRcdCAqIHByaXZhdGUgZnNfc3RydWN0LCBzbyB0c2stXHUwMDNlZnMtXHUwMDNlbG9jayBpcyBub3QgbmVlZGVkLlxuZnMvbmFtZXNwYWNlLmMtNDMwMi1cdFx0ICovXG4tLVxuZnMvbmFtZXNwYWNlLmM9NjQ3OT1zdGF0aWMgaW50IG1udG5zX2luc3RhbGwoc3RydWN0IG5zc2V0ICpuc3NldCwgc3RydWN0IG5zX2NvbW1vbiAqbnMpXG4tLVxuZnMvbmFtZXNwYWNlLmMtNjQ4MS1cdHN0cnVjdCBuc3Byb3h5ICpuc3Byb3h5ID0gbnNzZXQtXHUwMDNlbnNwcm94eTtcbmZzL25hbWVzcGFjZS5jOjY0ODI6XHRzdHJ1Y3QgZnNfc3RydWN0ICpmcyA9IG5zc2V0LVx1MDAzZWZzO1xuZnMvbmFtZXNwYWNlLmMtNjQ4My1cdHN0cnVjdCBtbnRfbmFtZXNwYWNlICptbnRfbnMgPSB0b19tbnRfbnMobnMpLCAqb2xkX21udF9ucztcbi0tXG5mcy9uZnNkL25mczRwcm9jLmMtMzQtICovXG5mcy9uZnNkL25mczRwcm9jLmM6MzU6I2luY2x1ZGUgXHUwMDNjbGludXgvZnNfc3RydWN0LmhcdTAwM2VcbmZzL25mc2QvbmZzNHByb2MuYy0zNi0jaW5jbHVkZSBcdTAwM2NsaW51eC9maWxlLmhcdTAwM2Vcbi0tXG5mcy9uZnNkL25mc3N2Yy5jLTEyLSNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG5mcy9uZnNkL25mc3N2Yy5jOjEzOiNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzX3N0cnVjdC5oXHUwMDNlXG5mcy9uZnNkL25mc3N2Yy5jLTE0LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3N3YXAuaFx1MDAzZVxuLS1cbmZzL25mc2QvbmZzc3ZjLmM9ODgzPW5mc2Qodm9pZCAqdnJxc3RwKVxuLS1cbmZzL25mc2QvbmZzc3ZjLmMtODk2LVx0ICovXG5mcy9uZnNkL25mc3N2Yy5jOjg5NzpcdHN2Y190aHJlYWRfaW5pdF9zdGF0dXMocnFzdHAsIHVuc2hhcmVfZnNfc3RydWN0KCkpO1xuZnMvbmZzZC9uZnNzdmMuYy04OTgtXG4tLVxuZnMvbmlsZnMyL25pbGZzLmgtMTYtI2luY2x1ZGUgXHUwMDNjbGludXgvYmxrZGV2LmhcdTAwM2VcbmZzL25pbGZzMi9uaWxmcy5oOjE3OiNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzX3N0cnVjdC5oXHUwMDNlXG5mcy9uaWxmczIvbmlsZnMuaC0xOC0jaW5jbHVkZSBcdTAwM2NsaW51eC9uaWxmczJfYXBpLmhcdTAwM2Vcbi0tXG5mcy9udGZzL3N1cGVyLmMtMTItI2luY2x1ZGUgXHUwMDNjbGludXgvdmZzLmhcdTAwM2VcbmZzL250ZnMvc3VwZXIuYzoxMzojaW5jbHVkZSBcdTAwM2NsaW51eC9mc19zdHJ1Y3QuaFx1MDAzZVxuZnMvbnRmcy9zdXBlci5jLTE0LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL21tLmhcdTAwM2Vcbi0tXG5mcy9udGZzMy9zdXBlci5jLTYyLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzX3BhcnNlci5oXHUwMDNlXG5mcy9udGZzMy9zdXBlci5jOjYzOiNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzX3N0cnVjdC5oXHUwMDNlXG5mcy9udGZzMy9zdXBlci5jLTY0LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2xvZzIuaFx1MDAzZVxuLS1cbmZzL29jZnMyL2FjbC5jLTE1LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZy5oXHUwMDNlXG5mcy9vY2ZzMi9hY2wuYzoxNjojaW5jbHVkZSBcdTAwM2NsaW51eC9mc19zdHJ1Y3QuaFx1MDAzZVxuZnMvb2NmczIvYWNsLmMtMTctXG4tLVxuZnMvb21mcy9pbm9kZS5jLTE2LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2NyYy1pdHUtdC5oXHUwMDNlXG5mcy9vbWZzL2lub2RlLmM6MTc6I2luY2x1ZGUgXHUwMDNjbGludXgvZnNfc3RydWN0LmhcdTAwM2VcbmZzL29tZnMvaW5vZGUuYy0xOC0jaW5jbHVkZSBcdTAwM2NsaW51eC9mc19jb250ZXh0LmhcdTAwM2Vcbi0tXG5mcy9vcGVuLmMtMzAtI2luY2x1ZGUgXHUwMDNjbGludXgvZmFsbG9jLmhcdTAwM2VcbmZzL29wZW4uYzozMTojaW5jbHVkZSBcdTAwM2NsaW51eC9mc19zdHJ1Y3QuaFx1MDAzZVxuZnMvb3Blbi5jLTMyLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2Rub3RpZnkuaFx1MDAzZVxuLS1cbmZzL3Byb2MvYXJyYXkuYy05Mi0jaW5jbHVkZSBcdTAwM2NsaW51eC91c2VyX25hbWVzcGFjZS5oXHUwMDNlXG5mcy9wcm9jL2FycmF5LmM6OTM6I2luY2x1ZGUgXHUwMDNjbGludXgvZnNfc3RydWN0LmhcdTAwM2VcbmZzL3Byb2MvYXJyYXkuYy05NC0jaW5jbHVkZSBcdTAwM2NsaW51eC9rdGhyZWFkLmhcdTAwM2Vcbi0tXG5mcy9wcm9jL2Jhc2UuYy04Ny0jaW5jbHVkZSBcdTAwM2NsaW51eC9mc19wYXJzZXIuaFx1MDAzZVxuZnMvcHJvYy9iYXNlLmM6ODg6I2luY2x1ZGUgXHUwMDNjbGludXgvZnNfc3RydWN0LmhcdTAwM2VcbmZzL3Byb2MvYmFzZS5jLTg5LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuLS1cbmZzL3Byb2MvdGFza19ub21tdS5jLTUtI2luY2x1ZGUgXHUwMDNjbGludXgvZmR0YWJsZS5oXHUwMDNlXG5mcy9wcm9jL3Rhc2tfbm9tbXUuYzo2OiNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzX3N0cnVjdC5oXHUwMDNlXG5mcy9wcm9jL3Rhc2tfbm9tbXUuYy03LSNpbmNsdWRlIFx1MDAzY2xpbnV4L21vdW50LmhcdTAwM2Vcbi0tXG5mcy9wcm9jX25hbWVzcGFjZS5jLTEyLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlY3VyaXR5LmhcdTAwM2VcbmZzL3Byb2NfbmFtZXNwYWNlLmM6MTM6I2luY2x1ZGUgXHUwMDNjbGludXgvZnNfc3RydWN0LmhcdTAwM2VcbmZzL3Byb2NfbmFtZXNwYWNlLmMtMTQtI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvdGFzay5oXHUwMDNlXG4tLVxuZnMvc21iL2NsaWVudC9maWxlLmMtMTEtI2luY2x1ZGUgXHUwMDNjbGludXgvZnMuaFx1MDAzZVxuZnMvc21iL2NsaWVudC9maWxlLmM6MTI6I2luY2x1ZGUgXHUwMDNjbGludXgvZnNfc3RydWN0LmhcdTAwM2VcbmZzL3NtYi9jbGllbnQvZmlsZS5jLTEzLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZpbGVsb2NrLmhcdTAwM2Vcbi0tXG5mcy9zbWIvY2xpZW50L2lub2RlLmMtOC0jaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG5mcy9zbWIvY2xpZW50L2lub2RlLmM6OTojaW5jbHVkZSBcdTAwM2NsaW51eC9mc19zdHJ1Y3QuaFx1MDAzZVxuZnMvc21iL2NsaWVudC9pbm9kZS5jLTEwLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0YXQuaFx1MDAzZVxuLS1cbmZzL3NtYi9jbGllbnQvc21iMW9wcy5jLTktI2luY2x1ZGUgXHUwMDNjbGludXgvdmZzLmhcdTAwM2VcbmZzL3NtYi9jbGllbnQvc21iMW9wcy5jOjEwOiNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzX3N0cnVjdC5oXHUwMDNlXG5mcy9zbWIvY2xpZW50L3NtYjFvcHMuYy0xMS0jaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L21hZ2ljLmhcdTAwM2Vcbi0tXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmMtNS0gKlxuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jOjY6ICogRWFjaCB0ZXN0IHJ1bnMgYWdhaW5zdCB0aGlzIHRhc2smIzM5O3Mgb3duIGZzX3N0cnVjdC4gV2UgdW5zaGFyZSBpdCBmaXJzdFxuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jLTctICogc28gd2Ugb25seSBldmVyIHRvdWNoIGEgcHJpdmF0ZSBjb3B5LCBuZXZlciB0aGUgc2hhcmVkIG9uZSwgYW5kIHdlXG4tLVxuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jLTEwLSNpbmNsdWRlIFx1MDAzY2t1bml0L3Rlc3QuaFx1MDAzZVxuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jOjExOiNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzX3N0cnVjdC5oXHUwMDNlXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmMtMTItI2luY2x1ZGUgXHUwMDNjbGludXgvbmFtZWkuaFx1MDAzZVxuLS1cbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYz0yND1zdGF0aWMgaW50IG51bGxfZnNfc2V0dXAoc3RydWN0IG51bGxfZnNfY3R4ICpjdHgpXG4tLVxuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jLTI3LVxuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jOjI4Olx0ZXJyID0gdW5zaGFyZV9mc19zdHJ1Y3QoKTtcbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYy0yOS1cdGlmIChlcnIpXG4tLVxuaW5jbHVkZS9saW51eC9mc19zdHJ1Y3QuaC05LVxuaW5jbHVkZS9saW51eC9mc19zdHJ1Y3QuaDoxMDpzdHJ1Y3QgZnNfc3RydWN0IHtcbmluY2x1ZGUvbGludXgvZnNfc3RydWN0LmgtMTEtXHRpbnQgdXNlcnM7XG4tLVxuaW5jbHVkZS9saW51eC9mc19zdHJ1Y3QuaC0yMy1cdCAqIFRoZSByb290IGRpcmVjdG9yeSBmb3IgdGhlIHRhc2socykgdGhhdCBwb2ludHMgdG8gdGhpc1xuaW5jbHVkZS9saW51eC9mc19zdHJ1Y3QuaDoyNDpcdCAqIGBmc19zdHJ1Y3RgLiBUaGUgcm9vdCBkaXJlY3RvcnkgYWxzbyBjb250cm9scyBob3cgYC4uYFxuaW5jbHVkZS9saW51eC9mc19zdHJ1Y3QuaC0yNS1cdCAqIHJlc29sdmU7IHBhdGggdHJhdmVyc2FsIGlzIG5vdCBhbGxvd2VkIHRvIHJlc29sdmUgdXB3YXJkc1xuLS1cbmluY2x1ZGUvbGludXgvZnNfc3RydWN0LmgtMzYtXHQgKiBUaGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBmb3IgdGhlIHRhc2socykgdGhhdCBwb2ludHMgdG9cbmluY2x1ZGUvbGludXgvZnNfc3RydWN0Lmg6Mzc6XHQgKiB0aGlzIGBmc19zdHJ1Y3RgLlxuaW5jbHVkZS9saW51eC9mc19zdHJ1Y3QuaC0zOC1cdCAqXG4tLVxuaW5jbHVkZS9saW51eC9mc19zdHJ1Y3QuaD00Nz1leHRlcm4gdm9pZCBleGl0X2ZzKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTtcbmluY2x1ZGUvbGludXgvZnNfc3RydWN0Lmg6NDg6ZXh0ZXJuIHZvaWQgc2V0X2ZzX3Jvb3Qoc3RydWN0IGZzX3N0cnVjdCAqLCBjb25zdCBzdHJ1Y3QgcGF0aCAqKTtcbmluY2x1ZGUvbGludXgvZnNfc3RydWN0Lmg6NDk6ZXh0ZXJuIHZvaWQgc2V0X2ZzX3B3ZChzdHJ1Y3QgZnNfc3RydWN0ICosIGNvbnN0IHN0cnVjdCBwYXRoICopO1xuaW5jbHVkZS9saW51eC9mc19zdHJ1Y3QuaDo1MDpleHRlcm4gc3RydWN0IGZzX3N0cnVjdCAqY29weV9mc19zdHJ1Y3Qoc3RydWN0IGZzX3N0cnVjdCAqKTtcbmluY2x1ZGUvbGludXgvZnNfc3RydWN0Lmg6NTE6ZXh0ZXJuIHZvaWQgZnJlZV9mc19zdHJ1Y3Qoc3RydWN0IGZzX3N0cnVjdCAqKTtcbmluY2x1ZGUvbGludXgvZnNfc3RydWN0Lmg6NTI6ZXh0ZXJuIGludCB1bnNoYXJlX2ZzX3N0cnVjdCh2b2lkKTtcbmluY2x1ZGUvbGludXgvZnNfc3RydWN0LmgtNTMtXG5pbmNsdWRlL2xpbnV4L2ZzX3N0cnVjdC5oOjU0OnN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfZnNfcm9vdChzdHJ1Y3QgZnNfc3RydWN0ICpmcywgc3RydWN0IHBhdGggKnJvb3QpXG5pbmNsdWRlL2xpbnV4L2ZzX3N0cnVjdC5oLTU1LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzX3N0cnVjdC5oLTYxLVxuaW5jbHVkZS9saW51eC9mc19zdHJ1Y3QuaDo2MjpzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X2ZzX3B3ZChzdHJ1Y3QgZnNfc3RydWN0ICpmcywgc3RydWN0IHBhdGggKnB3ZClcbmluY2x1ZGUvbGludXgvZnNfc3RydWN0LmgtNjMte1xuLS1cbmluY2x1ZGUvbGludXgvaW5pdF90YXNrLmg9MjU9ZXh0ZXJuIHN0cnVjdCBmaWxlc19zdHJ1Y3QgaW5pdF9maWxlcztcbmluY2x1ZGUvbGludXgvaW5pdF90YXNrLmg6MjY6ZXh0ZXJuIHN0cnVjdCBmc19zdHJ1Y3QgaW5pdF9mcztcbmluY2x1ZGUvbGludXgvaW5pdF90YXNrLmgtMjctZXh0ZXJuIHN0cnVjdCBuc3Byb3h5IGluaXRfbnNwcm94eTtcbi0tXG5pbmNsdWRlL2xpbnV4L21udF9uYW1lc3BhY2UuaD05PXN0cnVjdCBtbnRfbmFtZXNwYWNlO1xuaW5jbHVkZS9saW51eC9tbnRfbmFtZXNwYWNlLmg6MTA6c3RydWN0IGZzX3N0cnVjdDtcbmluY2x1ZGUvbGludXgvbW50X25hbWVzcGFjZS5oLTExLXN0cnVjdCB1c2VyX25hbWVzcGFjZTtcbi0tXG5pbmNsdWRlL2xpbnV4L21udF9uYW1lc3BhY2UuaD0xNj1leHRlcm4gc3RydWN0IG1udF9uYW1lc3BhY2UgKmNvcHlfbW50X25zKHU2NCwgc3RydWN0IG1udF9uYW1lc3BhY2UgKixcbmluY2x1ZGUvbGludXgvbW50X25hbWVzcGFjZS5oOjE3Olx0XHRzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKiwgc3RydWN0IGZzX3N0cnVjdCAqKTtcbmluY2x1ZGUvbGludXgvbW50X25hbWVzcGFjZS5oLTE4LWV4dGVybiB2b2lkIHB1dF9tbnRfbnMoc3RydWN0IG1udF9uYW1lc3BhY2UgKm5zKTtcbi0tXG5pbmNsdWRlL2xpbnV4L25hbWVpLmgtOS0jaW5jbHVkZSBcdTAwM2NsaW51eC9lcnJuby5oXHUwMDNlXG5pbmNsdWRlL2xpbnV4L25hbWVpLmg6MTA6I2luY2x1ZGUgXHUwMDNjbGludXgvZnNfc3RydWN0LmhcdTAwM2VcbmluY2x1ZGUvbGludXgvbmFtZWkuaC0xMS1cbi0tXG5pbmNsdWRlL2xpbnV4L25zcHJveHkuaD0xMz1zdHJ1Y3QgY2dyb3VwX25hbWVzcGFjZTtcbmluY2x1ZGUvbGludXgvbnNwcm94eS5oOjE0OnN0cnVjdCBmc19zdHJ1Y3Q7XG5pbmNsdWRlL2xpbnV4L25zcHJveHkuaC0xNS1cbi0tXG5pbmNsdWRlL2xpbnV4L25zcHJveHkuaD01ND1zdHJ1Y3QgbnNzZXQge1xuLS1cbmluY2x1ZGUvbGludXgvbnNwcm94eS5oLTU2LVx0c3RydWN0IG5zcHJveHkgKm5zcHJveHk7XG5pbmNsdWRlL2xpbnV4L25zcHJveHkuaDo1NzpcdHN0cnVjdCBmc19zdHJ1Y3QgKmZzO1xuaW5jbHVkZS9saW51eC9uc3Byb3h5LmgtNTgtXHRjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZDtcbi0tXG5pbmNsdWRlL2xpbnV4L25zcHJveHkuaD0xMDM9aW50IHVuc2hhcmVfbnNwcm94eV9uYW1lc3BhY2VzKHVuc2lnbmVkIGxvbmcsIHN0cnVjdCBuc3Byb3h5ICoqLFxuaW5jbHVkZS9saW51eC9uc3Byb3h5Lmg6MTA0Olx0c3RydWN0IGNyZWQgKiwgc3RydWN0IGZzX3N0cnVjdCAqKTtcbmluY2x1ZGUvbGludXgvbnNwcm94eS5oLTEwNS1pbnQgX19pbml0IG5zcHJveHlfY2FjaGVfaW5pdCh2b2lkKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg9NjY9c3RydWN0IGNmc19ycTtcbmluY2x1ZGUvbGludXgvc2NoZWQuaDo2NzpzdHJ1Y3QgZnNfc3RydWN0O1xuaW5jbHVkZS9saW51eC9zY2hlZC5oLTY4LXN0cnVjdCBpb19jb250ZXh0O1xuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQuaD04MjY9c3RydWN0IHRhc2tfc3RydWN0IHtcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTE5My1cdC8qIEZpbGVzeXN0ZW0gaW5mb3JtYXRpb246ICovXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg6MTE5NDpcdHN0cnVjdCBmc19zdHJ1Y3RcdFx0KmZzO1xuaW5jbHVkZS9saW51eC9zY2hlZC5oLTExOTUtXG4tLVxuaW5pdC9kb19tb3VudHMuYy0xNi0jaW5jbHVkZSBcdTAwM2NsaW51eC9hc3luYy5oXHUwMDNlXG5pbml0L2RvX21vdW50cy5jOjE3OiNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzX3N0cnVjdC5oXHUwMDNlXG5pbml0L2RvX21vdW50cy5jLTE4LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuLS1cbmtlcm5lbC9hdWRpdHNjLmMtNTctI2luY2x1ZGUgXHUwMDNjbGludXgvY2FwYWJpbGl0eS5oXHUwMDNlXG5rZXJuZWwvYXVkaXRzYy5jOjU4OiNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzX3N0cnVjdC5oXHUwMDNlXG5rZXJuZWwvYXVkaXRzYy5jLTU5LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBhdC5oXHUwMDNlXG4tLVxua2VybmVsL2V4aXQuYy01Mi0jaW5jbHVkZSBcdTAwM2NsaW51eC90YXNrX3dvcmsuaFx1MDAzZVxua2VybmVsL2V4aXQuYzo1MzojaW5jbHVkZSBcdTAwM2NsaW51eC9mc19zdHJ1Y3QuaFx1MDAzZVxua2VybmVsL2V4aXQuYy01NC0jaW5jbHVkZSBcdTAwM2NsaW51eC9pbml0X3Rhc2suaFx1MDAzZVxuLS1cbmtlcm5lbC9mb3JrLmMtODItI2luY2x1ZGUgXHUwMDNjbGludXgvdHR5LmhcdTAwM2Vcbmtlcm5lbC9mb3JrLmM6ODM6I2luY2x1ZGUgXHUwMDNjbGludXgvZnNfc3RydWN0LmhcdTAwM2Vcbmtlcm5lbC9mb3JrLmMtODQtI2luY2x1ZGUgXHUwMDNjbGludXgvbWFnaWMuaFx1MDAzZVxuLS1cbmtlcm5lbC9mb3JrLmM9NDc3PXN0cnVjdCBrbWVtX2NhY2hlICpmaWxlc19jYWNoZXA7XG5rZXJuZWwvZm9yay5jLTQ3OC1cbmtlcm5lbC9mb3JrLmM6NDc5Oi8qIFNMQUIgY2FjaGUgZm9yIGZzX3N0cnVjdCBzdHJ1Y3R1cmVzICh0c2stXHUwMDNlZnMpICovXG5rZXJuZWwvZm9yay5jLTQ4MC1zdHJ1Y3Qga21lbV9jYWNoZSAqZnNfY2FjaGVwO1xuLS1cbmtlcm5lbC9mb3JrLmM9MTYxNj1zdGF0aWMgaW50IGNvcHlfZnModTY0IGNsb25lX2ZsYWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbmtlcm5lbC9mb3JrLmMtMTYxNy17XG5rZXJuZWwvZm9yay5jOjE2MTg6XHRzdHJ1Y3QgZnNfc3RydWN0ICpmcyA9IGN1cnJlbnQtXHUwMDNlZnM7XG5rZXJuZWwvZm9yay5jLTE2MTktXHRpZiAoY2xvbmVfZmxhZ3MgXHUwMDI2IENMT05FX0ZTKSB7XG4tLVxua2VybmVsL2ZvcmsuYy0xNjMwLVx0fVxua2VybmVsL2ZvcmsuYzoxNjMxOlx0dHNrLVx1MDAzZWZzID0gY29weV9mc19zdHJ1Y3QoZnMpO1xua2VybmVsL2ZvcmsuYy0xNjMyLVx0aWYgKCF0c2stXHUwMDNlZnMpXG4tLVxua2VybmVsL2ZvcmsuYz0zMTE1PXZvaWQgX19pbml0IHByb2NfY2FjaGVzX2luaXQodm9pZClcbi0tXG5rZXJuZWwvZm9yay5jLTMxMzAtXHRmc19jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZShcJiMzNDtmc19jYWNoZVwmIzM0Oyxcbmtlcm5lbC9mb3JrLmM6MzEzMTpcdFx0XHRzaXplb2Yoc3RydWN0IGZzX3N0cnVjdCksIDAsXG5rZXJuZWwvZm9yay5jLTMxMzItXHRcdFx0U0xBQl9IV0NBQ0hFX0FMSUdOfFNMQUJfUEFOSUN8U0xBQl9BQ0NPVU5ULFxuLS1cbmtlcm5lbC9mb3JrLmM9MzE0MT1zdGF0aWMgaW50IGNoZWNrX3Vuc2hhcmVfZmxhZ3ModW5zaWduZWQgbG9uZyB1bnNoYXJlX2ZsYWdzKVxuLS1cbmtlcm5lbC9mb3JrLmMtMzE3MS0gKi9cbmtlcm5lbC9mb3JrLmM6MzE3MjpzdGF0aWMgaW50IHVuc2hhcmVfZnModW5zaWduZWQgbG9uZyB1bnNoYXJlX2ZsYWdzLCBzdHJ1Y3QgZnNfc3RydWN0ICoqbmV3X2ZzcClcbmtlcm5lbC9mb3JrLmMtMzE3My17XG5rZXJuZWwvZm9yay5jOjMxNzQ6XHRzdHJ1Y3QgZnNfc3RydWN0ICpmcyA9IGN1cnJlbnQtXHUwMDNlZnM7XG5rZXJuZWwvZm9yay5jLTMxNzUtXG4tLVxua2VybmVsL2ZvcmsuYy0zMTgyLVxua2VybmVsL2ZvcmsuYzozMTgzOlx0Km5ld19mc3AgPSBjb3B5X2ZzX3N0cnVjdChmcyk7XG5rZXJuZWwvZm9yay5jLTMxODQtXHRpZiAoISpuZXdfZnNwKVxuLS1cbmtlcm5lbC9mb3JrLmM9MzIxNj1pbnQga3N5c191bnNoYXJlKHVuc2lnbmVkIGxvbmcgdW5zaGFyZV9mbGFncylcbmtlcm5lbC9mb3JrLmMtMzIxNy17XG5rZXJuZWwvZm9yay5jOjMyMTg6XHRzdHJ1Y3QgZnNfc3RydWN0ICpmcywgKm5ld19mcyA9IE5VTEw7XG5rZXJuZWwvZm9yay5jLTMyMTktXHRzdHJ1Y3QgZmlsZXNfc3RydWN0ICpuZXdfZmQgPSBOVUxMO1xuLS1cbmtlcm5lbC9mb3JrLmMtMzMzMy1cdGlmIChuZXdfZnMpXG5rZXJuZWwvZm9yay5jOjMzMzQ6XHRcdGZyZWVfZnNfc3RydWN0KG5ld19mcyk7XG5rZXJuZWwvZm9yay5jLTMzMzUtXG4tLVxua2VybmVsL25zcHJveHkuYy0yMi0jaW5jbHVkZSBcdTAwM2NsaW51eC90aW1lX25hbWVzcGFjZS5oXHUwMDNlXG5rZXJuZWwvbnNwcm94eS5jOjIzOiNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzX3N0cnVjdC5oXHUwMDNlXG5rZXJuZWwvbnNwcm94eS5jLTI0LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb2NfZnMuaFx1MDAzZVxuLS1cbmtlcm5lbC9uc3Byb3h5LmM9ODg9c3RhdGljIHN0cnVjdCBuc3Byb3h5ICpjcmVhdGVfbmV3X25hbWVzcGFjZXModTY0IGZsYWdzLFxua2VybmVsL25zcHJveHkuYy04OS1cdHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMsXG5rZXJuZWwvbnNwcm94eS5jOjkwOlx0c3RydWN0IGZzX3N0cnVjdCAqbmV3X2ZzKVxua2VybmVsL25zcHJveHkuYy05MS17XG4tLVxua2VybmVsL25zcHJveHkuYz0yMTE9aW50IHVuc2hhcmVfbnNwcm94eV9uYW1lc3BhY2VzKHVuc2lnbmVkIGxvbmcgdW5zaGFyZV9mbGFncyxcbmtlcm5lbC9uc3Byb3h5LmM6MjEyOlx0c3RydWN0IG5zcHJveHkgKipuZXdfbnNwLCBzdHJ1Y3QgY3JlZCAqbmV3X2NyZWQsIHN0cnVjdCBmc19zdHJ1Y3QgKm5ld19mcylcbmtlcm5lbC9uc3Byb3h5LmMtMjEzLXtcbi0tXG5rZXJuZWwvbnNwcm94eS5jPTMzOD1zdGF0aWMgdm9pZCBwdXRfbnNzZXQoc3RydWN0IG5zc2V0ICpuc3NldClcbi0tXG5rZXJuZWwvbnNwcm94eS5jLTM0OC1cdGlmIChuc3NldC1cdTAwM2VmcyBcdTAwMjZcdTAwMjYgKGZsYWdzIFx1MDAyNiBDTE9ORV9ORVdOUykgXHUwMDI2XHUwMDI2IChmbGFncyBcdTAwMjYgfkNMT05FX05FV05TKSlcbmtlcm5lbC9uc3Byb3h5LmM6MzQ5Olx0XHRmcmVlX2ZzX3N0cnVjdChuc3NldC1cdTAwM2Vmcyk7XG5rZXJuZWwvbnNwcm94eS5jLTM1MC1cdGlmIChuc3NldC1cdTAwM2Vuc3Byb3h5KVxuLS1cbmtlcm5lbC9uc3Byb3h5LmM9MzU0PXN0YXRpYyBpbnQgcHJlcGFyZV9uc3NldCh1bnNpZ25lZCBmbGFncywgc3RydWN0IG5zc2V0ICpuc3NldClcbi0tXG5rZXJuZWwvbnNwcm94eS5jLTM2OC1cbmtlcm5lbC9uc3Byb3h5LmM6MzY5Olx0LyogT25seSBjcmVhdGUgYSB0ZW1wb3JhcnkgY29weSBvZiBmc19zdHJ1Y3QgaWYgd2UgcmVhbGx5IG5lZWQgdG8uICovXG5rZXJuZWwvbnNwcm94eS5jLTM3MC1cdGlmIChmbGFncyA9PSBDTE9ORV9ORVdOUykge1xuLS1cbmtlcm5lbC9uc3Byb3h5LmMtMzcyLVx0fSBlbHNlIGlmIChmbGFncyBcdTAwMjYgQ0xPTkVfTkVXTlMpIHtcbmtlcm5lbC9uc3Byb3h5LmM6MzczOlx0XHRuc3NldC1cdTAwM2VmcyA9IGNvcHlfZnNfc3RydWN0KG1lLVx1MDAzZWZzKTtcbmtlcm5lbC9uc3Byb3h5LmMtMzc0LVx0XHRpZiAoIW5zc2V0LVx1MDAzZWZzKVxuLS1cbmtlcm5lbC9uc3Byb3h5LmM9NTM1PXN0YXRpYyB2b2lkIGNvbW1pdF9uc3NldChzdHJ1Y3QgbnNzZXQgKm5zc2V0KVxuLS1cbmtlcm5lbC9uc3Byb3h5LmMtNTQ3LVxua2VybmVsL25zcHJveHkuYzo1NDg6XHQvKiBXZSBvbmx5IG5lZWQgdG8gY29tbWl0IGlmIHdlIGhhdmUgdXNlZCBhIHRlbXBvcmFyeSBmc19zdHJ1Y3QuICovXG5rZXJuZWwvbnNwcm94eS5jLTU0OS1cdGlmICgoZmxhZ3MgXHUwMDI2IENMT05FX05FV05TKSBcdTAwMjZcdTAwMjYgKGZsYWdzIFx1MDAyNiB+Q0xPTkVfTkVXTlMpKSB7XG4tLVxua2VybmVsL3N5cy5jLTM4LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cmFjZS5oXHUwMDNlXG5rZXJuZWwvc3lzLmM6Mzk6I2luY2x1ZGUgXHUwMDNjbGludXgvZnNfc3RydWN0LmhcdTAwM2Vcbmtlcm5lbC9zeXMuYy00MC0jaW5jbHVkZSBcdTAwM2NsaW51eC9maWxlLmhcdTAwM2Vcbi0tXG5rZXJuZWwvdW1oLmMtMTUtI2luY2x1ZGUgXHUwMDNjbGludXgvZmlsZS5oXHUwMDNlXG5rZXJuZWwvdW1oLmM6MTY6I2luY2x1ZGUgXHUwMDNjbGludXgvZnNfc3RydWN0LmhcdTAwM2Vcbmtlcm5lbC91bWguYy0xNy0jaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuLS1cbmtlcm5lbC91bWguYz02Mz1zdGF0aWMgaW50IGNhbGxfdXNlcm1vZGVoZWxwZXJfZXhlY19hc3luYyh2b2lkICpkYXRhKVxuLS1cbmtlcm5lbC91bWguYy03Ni1cdCAqIHRocmVhZCB0aGF0IGlzIGdvaW5nIHRvIGV4ZWN2ZSBhIHVzZXIgcHJvY2VzcyBhbmQgaGFzIGl0cyBvd25cbmtlcm5lbC91bWguYzo3NzpcdCAqICYjMzk7c3RydWN0IGZzX3N0cnVjdCYjMzk7LiBSZXNldCB1bWFzayB0byB0aGUgZGVmYXVsdC5cbmtlcm5lbC91bWguYy03OC1cdCAqL1xuLS1cbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTIwLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb2ppZC5oXHUwMDNlXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYzoyMTojaW5jbHVkZSBcdTAwM2NsaW51eC9mc19zdHJ1Y3QuaFx1MDAzZVxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtMjItI2luY2x1ZGUgXHUwMDNjbGludXgvYnNlYXJjaC5oXHUwMDNlXG4tLVxubmV0L3VuaXgvYWZfdW5peC5jLTg3LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzLmhcdTAwM2Vcbm5ldC91bml4L2FmX3VuaXguYzo4ODojaW5jbHVkZSBcdTAwM2NsaW51eC9mc19zdHJ1Y3QuaFx1MDAzZVxubmV0L3VuaXgvYWZfdW5peC5jLTg5LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuLS1cbnNlY3VyaXR5L2FwcGFybW9yL3BhdGguYy0xNy0jaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbnNlY3VyaXR5L2FwcGFybW9yL3BhdGguYzoxODojaW5jbHVkZSBcdTAwM2NsaW51eC9mc19zdHJ1Y3QuaFx1MDAzZVxuc2VjdXJpdHkvYXBwYXJtb3IvcGF0aC5jLTE5LVxuLS1cbnNlY3VyaXR5L2lwZS9ob29rcy5jLTYtI2luY2x1ZGUgXHUwMDNjbGludXgvZnMuaFx1MDAzZVxuc2VjdXJpdHkvaXBlL2hvb2tzLmM6NzojaW5jbHVkZSBcdTAwM2NsaW51eC9mc19zdHJ1Y3QuaFx1MDAzZVxuc2VjdXJpdHkvaXBlL2hvb2tzLmMtOC0jaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA3OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NTM2CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNjMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIE5VTExfUk9PVF9DV0RfS1VOSVRfVEVTVCBTY2VuYXJpbyoqCgpPa2F5LCBzbyBJIHNhdyB0aGF0IGBOVUxMX1JPT1RfQ1dEX0tVTklUX1RFU1RgIGluIGBmcy9LY29uZmlnYCwgYW5kIG15IGZpcnN0IHRob3VnaHQgaXMsICYjMzQ7V2hhdCBvdGhlciB3YXlzIGFyZSB0aGVyZSBmb3IgdGhpcyBjb25kaXRpb24gdG8gYmUgdHJpZ2dlcmVkPyYjMzQ7IE5vdywgaWYgYm90aCBgZnMtJmd0O3Jvb3RgIGFuZCBgZnMtJmd0O3B3ZGAgYXJlIG51bGwsIHRoYXQgaW50cmluc2ljYWxseSBtZWFucyBgZnMtJmd0O3Jvb3QubW50YCBpcyBhbHNvIE5VTEwuIFNvIEkgbmVlZCB0byB0cmFjZSBob3cgYGZzX3N0cnVjdGAgaXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZC4KCkxldCBtZSB0aGluay4uLiBJcyBgZnNfc3RydWN0YCBjcmVhdGVkIGluIGBjb3B5X2ZzX3N0cnVjdGAgb3Igd2l0aCBga21lbV9jYWNoZV9hbGxvY2A/IEFuZCBpZiBpdCYjMzk7cyB0aGUgbGF0dGVyLCBkb2VzIGl0IHVzZSBgR0ZQX1pFUk9gPyBJZiBub3QsIHRoZSBzdHJ1Y3R1cmUgaXNuJiMzOTt0IHplcm9lZCBvdXQuIE9oIHdhaXQsIGBjb3B5X2ZzX3N0cnVjdGAgYWN0dWFsbHkgY29waWVzIGFuIGV4aXN0aW5nIG9uZS4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IGhvdyBgaW5pdF9mc2AgaXMgaW5pdGlhbGl6ZWQ6CgpgYGBjCnN0cnVjdCBmc19zdHJ1Y3QgaW5pdF9mcyA9IHsKCS51c2VycwkJPSAxLAoJLmxvY2sJCT0gX19TUElOX0xPQ0tfVU5MT0NLRUQoaW5pdF9mcy5sb2NrKSwKCS5zZXEJCT0gX19TRVFMT0NLX1VOTE9DS0VEKGluaXRfZnMuc2VxKSwKCS51bWFzawkJPSAwMDIyLAp9OwpgYGAKClJpZ2h0LCB0aGlzIGRvZXNuJiMzOTt0IGluaXRpYWxpemUgYC5yb290YCBvciBgLnB3ZGAhIEJ1dC4uLiBgaW5pdF9mc2AgaXMgc3RhdGljYWxseSBhbGxvY2F0ZWQsIHNvIGl0ICppcyogemVyb2VkIG91dCwgbWVhbmluZyBgaW5pdF9mcy5yb290Lm1udGAgaXMgaW5kZWVkIE5VTEwgaW5pdGlhbGx5LiBPa2F5LCBzbyB3aGVuIGRvZXMgaXQgZ2V0IGl0cyByb290IGFuZCBwd2Qgc2V0PwoKQWgsIGl0JiMzOTtzIHNldCBpbiBgaW5pdF9tb3VudF90cmVlKClgOgoKYGBgYwoJc2V0X2ZzX3B3ZChjdXJyZW50LSZndDtmcywgJmFtcDtyb290KTsKCXNldF9mc19yb290KGN1cnJlbnQtJmd0O2ZzLCAmYW1wO3Jvb3QpOwpgYGAKClNvLCBiZWZvcmUgYGluaXRfbW91bnRfdHJlZSgpYCBpcyBjYWxsZWQsIGBpbml0X2ZzYCB3aWxsIGhhdmUgdGhhdCBOVUxMIHJvb3QgYW5kIHB3ZC4gQXJlIHRoZXJlIGFueSB0YXNrcyBydW5uaW5nIGJlZm9yZSB0aGF0IHBvaW50PyBEZWZpbml0ZWx5LiBLZXJuZWwgdGhyZWFkcy4gQW5kIHRob3NlIHRocmVhZHMgc2hhcmUgYGluaXRfZnNgIChvciB0aGV5JiMzOTtsbCBoYXZlIHRoZWlyIG93biBjb3B5LCBidXQgdGhleSB3aWxsIGluaXRpYWxseSBpbmhlcml0IHRoZSBwYXJlbnQpLgoKV2FpdCwgdGhlIGBpbml0X3Rhc2tgIHVzZXMgYGluaXRfZnNgLiBBbmQga2VybmVsIHRocmVhZHMgY3JlYXRlZCBieSBga3RocmVhZF9jcmVhdGVgIGluaGVyaXQgdGhlIGBpbml0X3Rhc2tgJiMzOTtzIGBmc19zdHJ1Y3RgLCB3aGljaCAqaXMqIGBpbml0X2ZzYC4KCk5vdywgd2hlcmUgaXMgYGluaXRfbW91bnRfdHJlZWAgY2FsbGVkPyBJbiBgdmZzX2NhY2hlc19pbml0KClgLCB3aGljaCBpcyBjYWxsZWQgcHJldHR5IGVhcmx5IGluIGBzdGFydF9rZXJuZWwoKWAuIE9rYXkuIFRoYXQmIzM5O3MgYSBnb29kIHBpZWNlIG9mIHRoZSBwdXp6bGUuCgpCdXQgd2FpdCwgd2hhdCBhYm91dCBgaW9fdXJpbmdgPyBJdCBjcmVhdGVzIHdvcmtlciB0aHJlYWRzLiBEbyB0aG9zZSB0aHJlYWRzIGhhdmUgYW4gYGZzX3N0cnVjdGA/IFRoZSBwYXRjaCBkZXNjcmlwdGlvbiBzYXlzIGl0IHN1cHBvcnRzIHRhc2tzIHdpdGggbnVsbCByb290L2N3ZC4gUmlnaHQsIHNvIG5vdyBteSBmb2N1cyBpcyBvbiB3aGV0aGVyIGBpb191cmluZ2AgY2FuIGNyZWF0ZSB0aGlzIHNpdHVhdGlvbiwgb3IgaWYgdGhlcmUmIzM5O3MgYW55IG90aGVyIGNvZGUgcGF0aCB0aGF0IG1pZ2h0IHNldCB0aG9zZSBwb2ludGVycyB0byBOVUxMLiBJIGRvbiYjMzk7dCBoYXZlIHRoZSBmdWxsIGNvbW1pdCBtZXNzYWdlIGhhbmR5IHRvIHZlcmlmeSwgYnV0IHRoZSBLVW5pdCB0ZXN0IHNwZWNpZmljYWxseSBzZXRzIGBmcy0mZ3Q7cm9vdGAgYW5kIGBmcy0mZ3Q7cHdkYCB0byBOVUxMLiBTbywgdGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGV4cGxpY2l0bHkgc2V0IGVsc2V3aGVyZT8gSXMgaXQgcG9zc2libGUgZm9yIGBpb191cmluZ2AgdG8gc2V0IHRoaXMgdG8gTlVMTD8gVGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGxpa2VseSBzdXNwZWN0IHRvIG1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwNzoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXRfZnNfLipudWxsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYz03MT1zdGF0aWMgdm9pZCBudWxsX3Jvb3RfdGVzdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jLTc1LVx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIG51bGxfZnNfc2V0dXAoXHUwMDI2Y3R4KSwgMCk7XG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmM6NzY6XHRzZXRfZnNfcm9vdChjdXJyZW50LVx1MDAzZWZzLCBcdTAwMjZudWxsX3BhdGgpO1xuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jLTc3LVxuLS1cbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYz05Nz1zdGF0aWMgdm9pZCBudWxsX2N3ZF90ZXN0KHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmMtMTAxLVx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIG51bGxfZnNfc2V0dXAoXHUwMDI2Y3R4KSwgMCk7XG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmM6MTAyOlx0c2V0X2ZzX3B3ZChjdXJyZW50LVx1MDAzZWZzLCBcdTAwMjZudWxsX3BhdGgpO1xuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jLTEwMy1cbi0tXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmM9MTE4PXN0YXRpYyB2b2lkIG51bGxfcm9vdF9hbmRfY3dkX3Rlc3Qoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYy0xMjItXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgbnVsbF9mc19zZXR1cChcdTAwMjZjdHgpLCAwKTtcbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYzoxMjM6XHRzZXRfZnNfcm9vdChjdXJyZW50LVx1MDAzZWZzLCBcdTAwMjZudWxsX3BhdGgpO1xuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jOjEyNDpcdHNldF9mc19wd2QoY3VycmVudC1cdTAwM2VmcywgXHUwMDI2bnVsbF9wYXRoKTtcbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYy0xMjUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA3OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMzYwCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgSSYjMzk7bSB0aGlua2luZyB0aGVzZSB0aGluZ3MgbXlzZWxmOgoKKipBIFBvdGVudGlhbGx5IEVsZWdhbnQgU29sdXRpb24gRW1lcmdlcyoqCgpSaWdodCwgaG9sZCBvbiBhIHNlY29uZC4gSSYjMzk7dmUgYmVlbiB3cmVzdGxpbmcgd2l0aCB0aGlzIHByb2JsZW0gYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gcGlucG9pbnQgdGhlIGlzc3VlIHdpdGhpbiB0aGlzIGNvbXBsZXggdHJlZSBzdHJ1Y3R1cmUuIEJ1dCB3YWl0Li4uIGEgdGhvdWdodCBqdXN0IGNsaWNrZWQuIEluc3RlYWQgb2YgdHJ5aW5nIHRvIGl0ZXJhdGl2ZWx5IHRyYWNlIHNwZWNpZmljIHBhdGhzIG9yIGNvbmRpdGlvbnMsIEkgcmVhbGl6ZSBJIGNhbiBsZXZlcmFnZSBhIG1vcmUgZ2xvYmFsIGFwcHJvYWNoLiBJIGNhbiBzaW1wbHkgc2VhcmNoIGZvciBgbnVsbF9wYXRoYCB0aHJvdWdob3V0IHRoZSAqZW50aXJlKiB0cmVlLiBUaGlzIGtleXdvcmQgd2lsbCBxdWlja2x5IHJldmVhbCB3aGV0aGVyIHRoYXQgaXNzdWUgaXMgcHJlc2VudCBpbiB0aGUgd2hvbGUgdHJlZSB3aXRob3V0IGhhdmluZyB0byB3b3JyeSBhYm91dCBtb3JlIGNvbnZvbHV0ZWQgbWV0aG9kcy4gVGhhdCBzaG91bGQgeWllbGQgdGhlIGFuc3dlcnMgSSBuZWVkLiBJdCBpcyBhIG1vcmUgZGlyZWN0IGFwcHJvYWNoIHRoYXQgc2hvdWxkIHNhdmUgYSBsb3Qgb2YgdGltZSBhbmQgcG90ZW50aWFsIGVycm9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwNzoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudWxsX3BhdGgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jLTE1LS8qIFRoZSBOVUxMIHBhdGg6IHsgLm1udCA9IE5VTEwsIC5kZW50cnkgPSBOVUxMIH0uICovXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmM6MTY6c3RhdGljIGNvbnN0IHN0cnVjdCBwYXRoIG51bGxfcGF0aDtcbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYy0xNy1cbi0tXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmM9NzE9c3RhdGljIHZvaWQgbnVsbF9yb290X3Rlc3Qoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYy03NS1cdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCBudWxsX2ZzX3NldHVwKFx1MDAyNmN0eCksIDApO1xuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jOjc2Olx0c2V0X2ZzX3Jvb3QoY3VycmVudC1cdTAwM2VmcywgXHUwMDI2bnVsbF9wYXRoKTtcbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYy03Ny1cbi0tXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmM9OTc9c3RhdGljIHZvaWQgbnVsbF9jd2RfdGVzdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jLTEwMS1cdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCBudWxsX2ZzX3NldHVwKFx1MDAyNmN0eCksIDApO1xuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jOjEwMjpcdHNldF9mc19wd2QoY3VycmVudC1cdTAwM2VmcywgXHUwMDI2bnVsbF9wYXRoKTtcbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYy0xMDMtXG4tLVxuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jPTExOD1zdGF0aWMgdm9pZCBudWxsX3Jvb3RfYW5kX2N3ZF90ZXN0KHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmMtMTIyLVx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIG51bGxfZnNfc2V0dXAoXHUwMDI2Y3R4KSwgMCk7XG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmM6MTIzOlx0c2V0X2ZzX3Jvb3QoY3VycmVudC1cdTAwM2VmcywgXHUwMDI2bnVsbF9wYXRoKTtcbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYzoxMjQ6XHRzZXRfZnNfcHdkKGN1cnJlbnQtXHUwMDNlZnMsIFx1MDAyNm51bGxfcGF0aCk7XG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmMtMTI1LVxuLS1cbnNlY3VyaXR5L2xhbmRsb2NrL2RvbWFpbi5jPTc5PXN0YXRpYyBzdHJ1Y3QgbGFuZGxvY2tfZGV0YWlscyAqZ2V0X2N1cnJlbnRfZGV0YWlscyh2b2lkKVxuLS1cbnNlY3VyaXR5L2xhbmRsb2NrL2RvbWFpbi5jLTgxLVx0LyogQ2YuIGF1ZGl0X2xvZ19kX3BhdGhfZXhlKCkgKi9cbnNlY3VyaXR5L2xhbmRsb2NrL2RvbWFpbi5jOjgyOlx0c3RhdGljIGNvbnN0IGNoYXIgbnVsbF9wYXRoW10gPSBcJiMzNDsobnVsbClcJiMzNDs7XG5zZWN1cml0eS9sYW5kbG9jay9kb21haW4uYzo4MzpcdGNvbnN0IGNoYXIgKnBhdGhfc3RyID0gbnVsbF9wYXRoO1xuc2VjdXJpdHkvbGFuZGxvY2svZG9tYWluLmM6ODQ6XHRzaXplX3QgcGF0aF9zaXplID0gc2l6ZW9mKG51bGxfcGF0aCk7XG5zZWN1cml0eS9sYW5kbG9jay9kb21haW4uYy04NS1cdGNvbnN0IHZvaWQgKmJ1ZmZlciBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9sYW5kbG9jay9mc190ZXN0LmM9NzEwNT1zdGF0aWMgdm9pZCBsYXllcjNfZnNfdGFnX2lub2RlKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKmNvbnN0IF9tZXRhZGF0YSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9sYW5kbG9jay9mc190ZXN0LmMtNzExNi1cdH07XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9sYW5kbG9jay9mc190ZXN0LmM6NzExNzpcdGNvbnN0IGNoYXIgKmNvbnN0IGRldl9udWxsX3BhdGggPSBcJiMzNDsvZGV2L251bGxcJiMzNDs7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9sYW5kbG9jay9mc190ZXN0LmMtNzExOC1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9sYW5kbG9jay9mc190ZXN0LmMtNzEyMi1cdC8qIENoZWNrcyB3aXRob3V0IExhbmRsb2NrLiAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbGFuZGxvY2svZnNfdGVzdC5jOjcxMjM6XHRFWFBFQ1RfRVEoMCwgdGVzdF9vcGVuKGRldl9udWxsX3BhdGgsIE9fUkRPTkxZIHwgT19DTE9FWEVDKSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9sYW5kbG9jay9mc190ZXN0LmMtNzEyNC1cdEVYUEVDVF9FUSgwLCB0ZXN0X29wZW4odmFyaWFudC1cdTAwM2VmaWxlX3BhdGgsIE9fUkRPTkxZIHwgT19DTE9FWEVDKSk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbGFuZGxvY2svZnNfdGVzdC5jLTcxMjgtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9sYW5kbG9jay9mc190ZXN0LmM6NzEyOTpcdEVYUEVDVF9FUShFQUNDRVMsIHRlc3Rfb3BlbihkZXZfbnVsbF9wYXRoLCBPX1JET05MWSB8IE9fQ0xPRVhFQykpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbGFuZGxvY2svZnNfdGVzdC5jLTcxMzAtXHRFWFBFQ1RfRVEoMCwgdGVzdF9vcGVuKHZhcmlhbnQtXHUwMDNlZmlsZV9wYXRoLCBPX1JET05MWSB8IE9fQ0xPRVhFQykpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2xhbmRsb2NrL2ZzX3Rlc3QuYy03MTM1LVx0LyogQ2hlY2tzIHdpdGggTGFuZGxvY2sgYW5kIGZvcmJpZGRlbiBhY2Nlc3MuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9sYW5kbG9jay9mc190ZXN0LmM6NzEzNjpcdEVYUEVDVF9FUShFQUNDRVMsIHRlc3Rfb3BlbihkZXZfbnVsbF9wYXRoLCBPX1JET05MWSB8IE9fQ0xPRVhFQykpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbGFuZGxvY2svZnNfdGVzdC5jLTcxMzctXHRFWFBFQ1RfRVEoRUFDQ0VTLCB0ZXN0X29wZW4odmFyaWFudC1cdTAwM2VmaWxlX3BhdGgsIE9fUkRPTkxZIHwgT19DTE9FWEVDKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA3OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNzk3CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNjMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBGaWxlc3lzdGVtIEluaXRpYWxpemF0aW9uIGFuZCBQb3RlbnRpYWwgUmFjZSBDb25kaXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIGlmIGBmcy0mZ3Q7cm9vdGAgYW5kIGBmcy0mZ3Q7cHdkYCBhcmUgb25seSBzZXQgdG8gTlVMTCBpbiB0aGF0IEtVbml0IHRlc3QsIHRoZW4gdGhpcyBpcyBiYXNpY2FsbHkganVzdCBhZGRpbmcgc3VwcG9ydCBmb3IgYSBmZWF0dXJlIHRoYXQgaXNuJiMzOTt0IGV2ZW4gdXNlZCB5ZXQgd2l0aGluIHRoZSBrZXJuZWwgaXRzZWxmLCBhdCBsZWFzdCBhcyBmYXIgYXMgSSBjYW4gdGVsbC4gSXQmIzM5O3MgcHJvYmFibHkgaW50ZW5kZWQgZm9yIHNvbWUgb3V0LW9mLXRyZWUgbW9kdWxlIG9yIG1heWJlIGEgZnV0dXJlIHBhdGNoIHRoYXQgbGV2ZXJhZ2VzIHRoaXMuCgpUaGVuIG15IG1pbmQganVtcHMgdG8gdGhlIGFsbG9jYXRpb24gb2YgdGhlIGBmc19zdHJ1Y3RgLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyBga21lbV9jYWNoZV9hbGxvY2AgaXMgdXNlZCwgYW5kIG1vcmUgaW1wb3J0YW50bHksICpub3QqIGluaXRpYWxpemVkLiBJIHNlZSBgY29weV9mc19zdHJ1Y3RgIGlzIHdoZXJlIHRoZSBhc3NpZ25tZW50IGhhcHBlbnM6CgpgYGBjCglzdHJ1Y3QgZnNfc3RydWN0ICpmcyA9IGttZW1fY2FjaGVfYWxsb2MoZnNfY2FjaGVwLCBHRlBfS0VSTkVMKTsKCWlmIChmcykgewoJCWZzLSZndDt1c2VycyA9IDE7CgkJZnMtJmd0O2luX2V4ZWMgPSAwOwoJCXNwaW5fbG9ja19pbml0KCZhbXA7ZnMtJmd0O2xvY2spOwoJCXNlcWNvdW50X3NwaW5sb2NrX2luaXQoJmFtcDtmcy0mZ3Q7c2VxLCAmYW1wO2ZzLSZndDtsb2NrKTsKCQlmcy0mZ3Q7dW1hc2sgPSBvbGQtJmd0O3VtYXNrOwoKCQlyZWFkX3NlcWxvY2tfZXhjbCgmYW1wO29sZC0mZ3Q7c2VxKTsKCQlmcy0mZ3Q7cm9vdCA9IG9sZC0mZ3Q7cm9vdDsKCQlwYXRoX2dldCgmYW1wO2ZzLSZndDtyb290KTsKCQlmcy0mZ3Q7cHdkID0gb2xkLSZndDtwd2Q7CgkJcGF0aF9nZXQoJmFtcDtmcy0mZ3Q7cHdkKTsKCQlyZWFkX3NlcXVubG9ja19leGNsKCZhbXA7b2xkLSZndDtzZXEpOwoJfQpgYGAKCk9rYXksIHNvIGBmcy0mZ3Q7cm9vdGAgYW5kIGBmcy0mZ3Q7cHdkYCBhcmUgYWx3YXlzIGJlaW5nIGNvcGllZCBmcm9tIGBvbGQtJmd0O3Jvb3RgIGFuZCBgb2xkLSZndDtwd2RgLiBUaGF0JiMzOTtzIGdvb2QsIGJ1dCBpdCBtYWtlcyBtZSB0aGluayBhYm91dCB3aGVyZSB0aGUgdmVyeSBmaXJzdCBgZnNfc3RydWN0YCBjb21lcyBmcm9tLCB0aGUgYGluaXRfZnNgLiBUaGlzIG9uZSBpcyB0aGUgcm9vdCBvZiBhbGwgdGhlc2Ugc3RydWN0dXJlcy4gSSBrbm93IGl0IGdldHMgaXRzIGluaXRpYWwgYHJvb3RgIGFuZCBgcHdkYCBzZXQgaW4gYGluaXRfbW91bnRfdHJlZSgpYC4KCk5vdyBoZXJlJiMzOTtzIHdoZXJlIG15IGFsYXJtIGJlbGxzIHN0YXJ0IHRvIGdvIG9mZi4gV2hhdCBpZiBhIGtlcm5lbCB0aHJlYWQgaXMgY3JlYXRlZCAqYmVmb3JlKiBgaW5pdF9tb3VudF90cmVlKClgIHJ1bnM/IEkgbWVhbiwgd2UmIzM5O3ZlIGdvdCB0byBjb25zaWRlciBhbGwgdGhlIHBvc3NpYmlsaXRpZXMuIFN1Y2ggdGhyZWFkcyB3b3VsZCBoYXZlIGBpbml0X2ZzYCB3aXRoIGJvdGggYHJvb3QubW50YCBhbmQgYHB3ZC5tbnRgIGFzIGBOVUxMYC4gSWYgc3VjaCBhIHRocmVhZCB0cmllZCB0byBkbyBhbnkga2luZCBvZiBwYXRoIHJlc29sdXRpb24sIGl0IHdvdWxkIGNyYXNoIGJlZm9yZSB0aGlzIHBhdGNoIGV2ZW4gZXhpc3RzIQoKQnV0IHRoZW4gSSBjYWxtIG15c2VsZiBkb3duIGEgbGl0dGxlLi4uIHdhaXQsIGRvIGtlcm5lbCB0aHJlYWRzIGV2ZW4gKmRvKiBwYXRoIHJlc29sdXRpb24gYmVmb3JlIGFueSBmaWxlc3lzdGVtcyBhcmUgbW91bnRlZD8gUHJvYmFibHkgbm90LiBObyBmaWxlc3lzdGVtcywgbm8gcGF0aHMgdG8gcmVzb2x2ZS4KCkJ1dC4uLiAodGhlcmUmIzM5O3MgYWx3YXlzIGEgJiMzNDtidXQmIzM0OyBpbiB0aGVzZSBhbmFseXNlcykgd2hhdCBpZiBhIGtlcm5lbCB0aHJlYWQgaXMgY3JlYXRlZCAqYmVmb3JlKiBgaW5pdF9tb3VudF90cmVlKClgIGFuZCB0aGVuLCBmb3Igd2hhdGV2ZXIgcmVhc29uLCBzdXJ2aXZlcyBhbmQgbGF0ZXIgdHJpZXMgdG8gZG8gcGF0aCByZXNvbHV0aW9uPyBCZWNhdXNlIHRoZXkgKnNoYXJlKiBgaW5pdF9mc2AhIFRoYXQgbWVhbnMgdGhhdCB3aGVuIGBpbml0X21vdW50X3RyZWUoKWAgc2V0cyBgaW5pdF9mcy5yb290YCBhbmQgYGluaXRfZnMucHdkYCwgdGhlIGtlcm5lbCB0aHJlYWQgd2lsbCAqc2VlKiB0aGUgY29ycmVjdCB2YWx1ZXMuIFNvIGZhciwgc28gZ29vZC4KCk5vdyBJJiMzOTttIHJlYWxseSBnZXR0aW5nIGludG8gaXQuIFdoYXQgaWYgYSBrZXJuZWwgdGhyZWFkIGNhbGxzIGB1bnNoYXJlX2ZzX3N0cnVjdCgpYCAqYmVmb3JlKiBgaW5pdF9tb3VudF90cmVlKClgPyBUaGVuIGl0JiMzOTtsbCBnZXQgYSAqY29weSogb2YgYGluaXRfZnNgLCBhbmQgdGhhdCBjb3B5IHdvdWxkIHN0aWxsIGhhdmUgYHJvb3QubW50ID09IE5VTExgIGFuZCBgcHdkLm1udCA9PSBOVUxMYC4gQW5kIHRoZW4gYGluaXRfbW91bnRfdHJlZSgpYCB1cGRhdGVzIHRoZSAqb3JpZ2luYWwqIGBpbml0X2ZzYCwgYnV0IHRoZSB0aHJlYWQmIzM5O3MgYGZzX3N0cnVjdGAgaXMgc3RpbGwgbGVmdCB3aXRoIE5VTEwgdmFsdWVzISBUaGF0JiMzOTtzIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbiBzY2VuYXJpby4KCklzIHRoZXJlIGFueSBjb2RlIGluIHRoZSBrZXJuZWwgdGhhdCBldmVuIGRvZXMgdGhpcz8gSSBuZWVkIHRvIGNoZWNrLiBJJiMzOTttIGdvaW5nIHRvIHNjYW4gdGhlIHNvdXJjZSB0byBzZWUgaWYgSSBjYW4gZmluZCBrZXJuZWwgdGhyZWFkcyB0aGF0IGFyZSBjYWxsaW5nIGB1bnNoYXJlX2ZzX3N0cnVjdCgpYC4gVGhpcyBpcyBnb2luZyB0byByZXF1aXJlIHNvbWUgZGlnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDc6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dW5zaGFyZV9mc19zdHJ1Y3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZnNfc3RydWN0LmM9MTA3PXN0cnVjdCBmc19zdHJ1Y3QgKmNvcHlfZnNfc3RydWN0KHN0cnVjdCBmc19zdHJ1Y3QgKm9sZClcbi0tXG5mcy9mc19zdHJ1Y3QuYy0xMjYtXG5mcy9mc19zdHJ1Y3QuYzoxMjc6aW50IHVuc2hhcmVfZnNfc3RydWN0KHZvaWQpXG5mcy9mc19zdHJ1Y3QuYy0xMjgte1xuLS1cbmZzL2ZzX3N0cnVjdC5jLTE0Ny19XG5mcy9mc19zdHJ1Y3QuYzoxNDg6RVhQT1JUX1NZTUJPTF9HUEwodW5zaGFyZV9mc19zdHJ1Y3QpO1xuZnMvZnNfc3RydWN0LmMtMTQ5LVxuLS1cbmZzL25mc2QvbmZzc3ZjLmM9ODgzPW5mc2Qodm9pZCAqdnJxc3RwKVxuLS1cbmZzL25mc2QvbmZzc3ZjLmMtODk2LVx0ICovXG5mcy9uZnNkL25mc3N2Yy5jOjg5NzpcdHN2Y190aHJlYWRfaW5pdF9zdGF0dXMocnFzdHAsIHVuc2hhcmVfZnNfc3RydWN0KCkpO1xuZnMvbmZzZC9uZnNzdmMuYy04OTgtXG4tLVxuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jPTI0PXN0YXRpYyBpbnQgbnVsbF9mc19zZXR1cChzdHJ1Y3QgbnVsbF9mc19jdHggKmN0eClcbi0tXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmMtMjctXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmM6Mjg6XHRlcnIgPSB1bnNoYXJlX2ZzX3N0cnVjdCgpO1xuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jLTI5LVx0aWYgKGVycilcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzX3N0cnVjdC5oPTUxPWV4dGVybiB2b2lkIGZyZWVfZnNfc3RydWN0KHN0cnVjdCBmc19zdHJ1Y3QgKik7XG5pbmNsdWRlL2xpbnV4L2ZzX3N0cnVjdC5oOjUyOmV4dGVybiBpbnQgdW5zaGFyZV9mc19zdHJ1Y3Qodm9pZCk7XG5pbmNsdWRlL2xpbnV4L2ZzX3N0cnVjdC5oLTUzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwNzoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDcxMgoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDExOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIEVhcmx5IEZpbGVzeXN0ZW0gTmFtZXNwYWNlIE9wZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgZmlsZXN5c3RlbSBuYW1lc3BhY2UgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgYW5kIEkmIzM5O3ZlIGhpdCBhIHBvdGVudGlhbCB3cmlua2xlLiBUaGUgY29kZSBzZWVtcyB0byBzdWdnZXN0IHRoYXQgb25seSBgbmZzZGAgY2FsbHMgYHVuc2hhcmVfZnNfc3RydWN0KClgLiBBbmQsIGFzIGZhciBhcyBJIGNhbiB0ZWxsLCBgbmZzZGAgaXNuJiMzOTt0IHN1cHBvc2VkIHRvIGJlIHJ1bm5pbmcgYmVmb3JlIGBpbml0X21vdW50X3RyZWUoKWAgZ2V0cyBjYWxsZWQuIFRoYXQgZmVlbHMgcHJldHR5IGNsZWFuLi4uYnV0LCB3YWl0LiBXaGF0IGFib3V0IGBjb3B5X2ZzX3N0cnVjdCgpYD8gV2hlcmUgYW5kIHdoZW4gZG9lcyB0aGF0IGdldCB1c2VkPwoKUmlnaHQsIGBjb3B5X2ZzX3N0cnVjdCgpYCBpcyBwYXJ0IG9mIHRoZSBgY29weV9mcygpYCBmdW5jdGlvbiwgd2hpY2ggaXMsIG9idmlvdXNseSwgdXNlZCBkdXJpbmcgYGZvcmsoKWAuIEJ1dC4uLiBvbmx5IGlmIHRoZSBgQ0xPTkVfRlNgIGZsYWcgaXNuJiMzOTt0IHNldC4gVGhlIHF1ZXN0aW9uIG5vdyBiZWNvbWVzOiBBcmUgdGhlcmUgYW55ICprZXJuZWwgdGhyZWFkcyogdGhhdCBhcmUgZm9ya2luZyB3aXRob3V0IGBDTE9ORV9GU2AgYmVmb3JlIGBpbml0X21vdW50X3RyZWUoKWAgaXMgY2FsbGVkPyBUaGF0IHdvdWxkIGJyZWFrIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGV4ZWN1dGlvbiBwYXRoLgoKSG1tLCBsZXQmIzM5O3Mgc2VlLiBJZiBga2VybmVsX3RocmVhZCgpYCBpcyB1c2VkLCB0aGF0IHNob3VsZCB1c2UgYENMT05FX0ZTYCwgcmlnaHQ/IExldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGUgYGtlcm5lbF90aHJlYWRgIGltcGxlbWVudGF0aW9uLiBUaGF0JiMzOTtzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcC4gTmVlZCB0byBjb25maXJtIHRoYXQgdGhhdCBwYXRoIGlzIGNsZWFuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwNzoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrZXJuZWxfdGhyZWFkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA3MDAgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbkRvY3VtZW50YXRpb24vUkNVL2xvY2tkZXAtc3BsYXQucnN0PTI4PW90aGVyIGluZm8gdGhhdCBtaWdodCBoZWxwIHVzIGRlYnVnIHRoaXM6OlxuLS1cbkRvY3VtZW50YXRpb24vUkNVL2xvY2tkZXAtc3BsYXQucnN0LTYxLSAgICBbXHUwMDNjZmZmZmZmZmY4MTA5NzViNlx1MDAzZV0ga3RocmVhZCYjNDM7MHhhNi8weGIwXG5Eb2N1bWVudGF0aW9uL1JDVS9sb2NrZGVwLXNwbGF0LnJzdDo2MjogICAgW1x1MDAzY2ZmZmZmZmZmODE3ZGIxNTRcdTAwM2VdIGtlcm5lbF90aHJlYWRfaGVscGVyJiM0MzsweDQvMHgxMFxuRG9jdW1lbnRhdGlvbi9SQ1UvbG9ja2RlcC1zcGxhdC5yc3QtNjMtICAgIFtcdTAwM2NmZmZmZmZmZjgxMDY2NDMwXHUwMDNlXSA/IGZpbmlzaF90YXNrX3N3aXRjaCYjNDM7MHg4MC8weDExMFxuLS1cbkRvY3VtZW50YXRpb24vbW0vdm1hbGxvY2VkLWtlcm5lbC1zdGFja3MucnN0PTEwNT1UaHJlYWQgc3RhY2sgYWxsb2NhdGlvbiBpcyBpbml0aWF0ZWQgZnJvbSBjbG9uZSgpLCBmb3JrKCksIHZmb3JrKCksXG5Eb2N1bWVudGF0aW9uL21tL3ZtYWxsb2NlZC1rZXJuZWwtc3RhY2tzLnJzdDoxMDY6a2VybmVsX3RocmVhZCgpIHZpYSBrZXJuZWxfY2xvbmUoKS4gVGhlc2UgYXJlIGEgZmV3IGhpbnRzIGZvciBzZWFyY2hpbmdcbkRvY3VtZW50YXRpb24vbW0vdm1hbGxvY2VkLWtlcm5lbC1zdGFja3MucnN0LTEwNy10aGUgY29kZSBiYXNlIHRvIHVuZGVyc3RhbmQgd2hlbiBhbmQgaG93IGEgdGhyZWFkIHN0YWNrIGlzIGFsbG9jYXRlZC5cbi0tXG5Eb2N1bWVudGF0aW9uL3Bvd2VyL2ZyZWV6aW5nLW9mLXRhc2tzLnJzdD04Nj1mcmVlemVfcHJvY2Vzc2VzKCk6XG4tLVxuRG9jdW1lbnRhdGlvbi9wb3dlci9mcmVlemluZy1vZi10YXNrcy5yc3QtODgtXG5Eb2N1bWVudGF0aW9uL3Bvd2VyL2ZyZWV6aW5nLW9mLXRhc2tzLnJzdDo4OTpmcmVlemVfa2VybmVsX3RocmVhZHMoKTpcbkRvY3VtZW50YXRpb24vcG93ZXIvZnJlZXppbmctb2YtdGFza3MucnN0LTkwLSAgLSBmcmVlemVzIGFsbCB0YXNrcyAoaW5jbHVkaW5nIGtlcm5lbCB0aHJlYWRzKSBiZWNhdXNlIHdlIGNhbiYjMzk7dCBmcmVlemVcbi0tXG5Eb2N1bWVudGF0aW9uL3Bvd2VyL2ZyZWV6aW5nLW9mLXRhc2tzLnJzdC05Mi1cbkRvY3VtZW50YXRpb24vcG93ZXIvZnJlZXppbmctb2YtdGFza3MucnN0OjkzOnRoYXdfa2VybmVsX3RocmVhZHMoKTpcbkRvY3VtZW50YXRpb24vcG93ZXIvZnJlZXppbmctb2YtdGFza3MucnN0LTk0LSAgLSB0aGF3cyBvbmx5IGtlcm5lbCB0aHJlYWRzOyB0aGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgaWYgd2UgbmVlZCB0byBkb1xuLS1cbkRvY3VtZW50YXRpb24vdHJhY2UvaGlzdG9ncmFtLnJzdD01PURvY3VtZW50YXRpb24gd3JpdHRlbiBieSBUb20gWmFudXNzaVxuLS1cbkRvY3VtZW50YXRpb24vdHJhY2UvaGlzdG9ncmFtLnJzdC0xNTA4LSAgICAgICAgICAgICBrZXJuZWxfY2xvbmUmIzQzOzB4MThlLzB4MzMwXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2hpc3RvZ3JhbS5yc3Q6MTUwOTogICAgICAgICAgICAga2VybmVsX3RocmVhZCYjNDM7MHgyOS8weDMwXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2hpc3RvZ3JhbS5yc3QtMTUxMC0gICAgICAgICAgICAga3RocmVhZGQmIzQzOzB4MTU0LzB4MWIwXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vdm1hbGxvY2VkLWtlcm5lbC1zdGFja3MucnN0PTgzPWFsbG9jX3RocmVhZF9zdGFja19ub2RlKCnosIPnlKhfX3ZtYWxsb2Nfbm9kZV9yYW5nZSgp5p2l5YiG6YWN5bim5pyJUEFHRV9LRVJORUxcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS92bWFsbG9jZWQta2VybmVsLXN0YWNrcy5yc3QtOTMtXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS92bWFsbG9jZWQta2VybmVsLXN0YWNrcy5yc3Q6OTQ657q/56iL5qCI5YiG6YWN5piv55SxY2xvbmUoKeOAgWZvcmsoKeOAgXZmb3JrKCnjgIFrZXJuZWxfdGhyZWFkKCnpgJrov4drZXJuZWxfY2xvbmUoKVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vdm1hbGxvY2VkLWtlcm5lbC1zdGFja3MucnN0LTk1LeWQr+WKqOeahOOAgueVmeeCueaPkOekuuWcqOi/me+8jOS7peS+v+aQnOe0ouS7o+eggeW6k++8jOS6huino+e6v+eoi+agiOS9leaXtuS7peWPiuWmguS9leWIhumFjeOAglxuLS1cbmFyY2gvYWxwaGEva2VybmVsL2VudHJ5LlM9ODM3PXJldF9mcm9tX2Zvcms6XG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvZW50cnkuUy04NDYtXHQuYWxpZ24gNFxuYXJjaC9hbHBoYS9rZXJuZWwvZW50cnkuUzo4NDc6XHQuZ2xvYmxcdHJldF9mcm9tX2tlcm5lbF90aHJlYWRcbmFyY2gvYWxwaGEva2VybmVsL2VudHJ5LlM6ODQ4Olx0LmVudFx0cmV0X2Zyb21fa2VybmVsX3RocmVhZFxuYXJjaC9hbHBoYS9rZXJuZWwvZW50cnkuUzo4NDk6cmV0X2Zyb21fa2VybmVsX3RocmVhZDpcbmFyY2gvYWxwaGEva2VybmVsL2VudHJ5LlMtODUwLVx0bW92XHQkMTcsICQxNlxuLS1cbmFyY2gvYWxwaGEva2VybmVsL2VudHJ5LlMtODU1LVx0YnJcdCQzMSwgcmV0X3RvX3VzZXJcbmFyY2gvYWxwaGEva2VybmVsL2VudHJ5LlM6ODU2Oi5lbmQgcmV0X2Zyb21fa2VybmVsX3RocmVhZFxuYXJjaC9hbHBoYS9rZXJuZWwvZW50cnkuUy04NTctXG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvcHJvY2Vzcy5jPTIzMj1pbnQgY29weV90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBjb25zdCBzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgKmFyZ3MpXG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvcHJvY2Vzcy5jLTIzNy1cdGV4dGVybiB2b2lkIHJldF9mcm9tX2Zvcmsodm9pZCk7XG5hcmNoL2FscGhhL2tlcm5lbC9wcm9jZXNzLmM6MjM4Olx0ZXh0ZXJuIHZvaWQgcmV0X2Zyb21fa2VybmVsX3RocmVhZCh2b2lkKTtcbmFyY2gvYWxwaGEva2VybmVsL3Byb2Nlc3MuYy0yMzktXG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvcHJvY2Vzcy5jLTI1My1cdFx0XHRzaXplb2Yoc3RydWN0IHN3aXRjaF9zdGFjaykgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSk7XG5hcmNoL2FscGhhL2tlcm5lbC9wcm9jZXNzLmM6MjU0Olx0XHRjaGlsZHN0YWNrLVx1MDAzZXIyNiA9ICh1bnNpZ25lZCBsb25nKSByZXRfZnJvbV9rZXJuZWxfdGhyZWFkO1xuYXJjaC9hbHBoYS9rZXJuZWwvcHJvY2Vzcy5jLTI1NS1cdFx0Y2hpbGRzdGFjay1cdTAwM2VyOSA9ICh1bnNpZ25lZCBsb25nKSBhcmdzLVx1MDAzZWZuO1xuLS1cbmFyY2gvYXJjL2tlcm5lbC9wcm9jZXNzLmM9MTY3PWludCBjb3B5X3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGNvbnN0IHN0cnVjdCBrZXJuZWxfY2xvbmVfYXJncyAqYXJncylcbi0tXG5hcmNoL2FyYy9rZXJuZWwvcHJvY2Vzcy5jLTE4OC1cdCAqIHRoaXMgdG8gcG9wdWxhdGUga2VybmVsIHRocmVhZCBlbnRyeS1wdC9hcmdzIGludG8gY2FsbGVlIHJlZ3MsXG5hcmNoL2FyYy9rZXJuZWwvcHJvY2Vzcy5jOjE4OTpcdCAqIHNvIHRoYXQgcmV0X2Zyb21fa2VybmVsX3RocmVhZCgpIGJlY29tZXMgc2ltcGxlci5cbmFyY2gvYXJjL2tlcm5lbC9wcm9jZXNzLmMtMTkwLVx0ICovXG4tLVxuYXJjaC9jc2t5L2tlcm5lbC9lbnRyeS5TPTg1PWNza3lfc3lzY2FsbF90cmFjZTpcbi0tXG5hcmNoL2Nza3kva2VybmVsL2VudHJ5LlMtMTE0LVxuYXJjaC9jc2t5L2tlcm5lbC9lbnRyeS5TOjExNTpFTlRSWShyZXRfZnJvbV9rZXJuZWxfdGhyZWFkKVxuYXJjaC9jc2t5L2tlcm5lbC9lbnRyeS5TLTExNi1cdGpic3JcdHNjaGVkdWxlX3RhaWxcbi0tXG5hcmNoL2Nza3kva2VybmVsL3Byb2Nlc3MuYz0yNT1hc21saW5rYWdlIHZvaWQgcmV0X2Zyb21fZm9yayh2b2lkKTtcbmFyY2gvY3NreS9rZXJuZWwvcHJvY2Vzcy5jOjI2OmFzbWxpbmthZ2Ugdm9pZCByZXRfZnJvbV9rZXJuZWxfdGhyZWFkKHZvaWQpO1xuYXJjaC9jc2t5L2tlcm5lbC9wcm9jZXNzLmMtMjctXG4tLVxuYXJjaC9jc2t5L2tlcm5lbC9wcm9jZXNzLmM9MzM9aW50IGNvcHlfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY29uc3Qgc3RydWN0IGtlcm5lbF9jbG9uZV9hcmdzICphcmdzKVxuLS1cbmFyY2gvY3NreS9rZXJuZWwvcHJvY2Vzcy5jLTUyLVx0XHRtZW1zZXQoY2hpbGRyZWdzLCAwLCBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpKTtcbmFyY2gvY3NreS9rZXJuZWwvcHJvY2Vzcy5jOjUzOlx0XHRjaGlsZHN0YWNrLVx1MDAzZXIxNSA9ICh1bnNpZ25lZCBsb25nKSByZXRfZnJvbV9rZXJuZWxfdGhyZWFkO1xuYXJjaC9jc2t5L2tlcm5lbC9wcm9jZXNzLmMtNTQtXHRcdGNoaWxkc3RhY2stXHUwMDNlcjEwID0gKHVuc2lnbmVkIGxvbmcpIGFyZ3MtXHUwMDNlZm5fYXJnO1xuLS1cbmFyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2FzbS1wcm90b3R5cGVzLmg9MTY9YXNtbGlua2FnZSB2b2lkIG5vaW5zdHIgX19ub19zdGFja19wcm90ZWN0b3IgcmV0X2Zyb21fZm9yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsXG4tLVxuYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vYXNtLXByb3RvdHlwZXMuaC0xOC1cbmFyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2FzbS1wcm90b3R5cGVzLmg6MTk6YXNtbGlua2FnZSB2b2lkIG5vaW5zdHIgX19ub19zdGFja19wcm90ZWN0b3IgcmV0X2Zyb21fa2VybmVsX3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsXG5hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9hc20tcHJvdG90eXBlcy5oLTIwLVx0XHRcdFx0XHRcdFx0XHQgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXG4tLVxuYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vc3dpdGNoX3RvLmg9MjQ9ZXh0ZXJuIGFzbWxpbmthZ2Ugc3RydWN0IHRhc2tfc3RydWN0ICpfX3N3aXRjaF90byhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsXG4tLVxuYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vc3dpdGNoX3RvLmgtMjgtICogRm9yIG5ld2x5IGNyZWF0ZWQga2VybmVsIHRocmVhZHMgc3dpdGNoX3RvKCkgd2lsbCByZXR1cm4gdG9cbmFyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3N3aXRjaF90by5oOjI5OiAqIHJldF9mcm9tX2tlcm5lbF90aHJlYWQsIG5ld2x5IGNyZWF0ZWQgdXNlciB0aHJlYWRzIHRvIHJldF9mcm9tX2ZvcmsuXG5hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9zd2l0Y2hfdG8uaC0zMC0gKiBUaGF0IGlzLCBldmVyeXRoaW5nIGZvbGxvd2luZyBfX3N3aXRjaF90bygpIHdpbGwgYmUgc2tpcHBlZCBmb3IgbmV3IHRocmVhZHMuXG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL2VudHJ5LlM9OTI9U1lNX0NPREVfRU5EKHJldF9mcm9tX2ZvcmtfYXNtKVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL2VudHJ5LlMtOTMtXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvZW50cnkuUzo5NDpTWU1fQ09ERV9TVEFSVChyZXRfZnJvbV9rZXJuZWxfdGhyZWFkX2FzbSlcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9lbnRyeS5TLTk1LVx0VU5XSU5EX0hJTlRfUkVHU1xuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9lbnRyeS5TLTk4LVx0bW92ZVx0XHRhMywgczFcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9lbnRyeS5TOjk5Olx0YmxcdFx0cmV0X2Zyb21fa2VybmVsX3RocmVhZFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL2VudHJ5LlMtMTAwLVx0U1RBQ0tMRUFLX0VSQVNFXG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL2VudHJ5LlMtMTAzLVx0UkVTVE9SRV9TUF9BTkRfUkVUXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvZW50cnkuUzoxMDQ6U1lNX0NPREVfRU5EKHJldF9mcm9tX2tlcm5lbF90aHJlYWRfYXNtKVxuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9wcm9jZXNzLmM9NzM9YXNtbGlua2FnZSB2b2lkIHJldF9mcm9tX2ZvcmtfYXNtKHZvaWQpO1xuYXJjaC9sb29uZ2FyY2gva2VybmVsL3Byb2Nlc3MuYzo3NDphc21saW5rYWdlIHZvaWQgcmV0X2Zyb21fa2VybmVsX3RocmVhZF9hc20odm9pZCk7XG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvcHJvY2Vzcy5jLTc1LVxuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9wcm9jZXNzLmM9MTU1PWFzbWxpbmthZ2Ugdm9pZCBub2luc3RyIF9fbm9fc3RhY2tfcHJvdGVjdG9yIHJldF9mcm9tX2Zvcmsoc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LFxuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9wcm9jZXNzLmMtMTYxLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3Byb2Nlc3MuYzoxNjI6YXNtbGlua2FnZSB2b2lkIG5vaW5zdHIgX19ub19zdGFja19wcm90ZWN0b3IgcmV0X2Zyb21fa2VybmVsX3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvcHJvY2Vzcy5jLTE2My1cdFx0XHRcdFx0XHRcdFx0ICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzLFxuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9wcm9jZXNzLmM9MTc1PWludCBjb3B5X3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGNvbnN0IHN0cnVjdCBrZXJuZWxfY2xvbmVfYXJncyAqYXJncylcbi0tXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvcHJvY2Vzcy5jLTE5OC1cdFx0cC1cdTAwM2V0aHJlYWQucmVnMjQgPSAodW5zaWduZWQgbG9uZylhcmdzLVx1MDAzZWZuX2FyZztcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9wcm9jZXNzLmM6MTk5Olx0XHRwLVx1MDAzZXRocmVhZC5yZWcwMSA9ICh1bnNpZ25lZCBsb25nKXJldF9mcm9tX2tlcm5lbF90aHJlYWRfYXNtO1xuYXJjaC9sb29uZ2FyY2gva2VybmVsL3Byb2Nlc3MuYzoyMDA6XHRcdHAtXHUwMDNldGhyZWFkLnNjaGVkX3JhID0gKHVuc2lnbmVkIGxvbmcpcmV0X2Zyb21fa2VybmVsX3RocmVhZF9hc207XG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvcHJvY2Vzcy5jLTIwMS1cdFx0bWVtc2V0KGNoaWxkcmVncywgMCwgc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSk7XG4tLVxuYXJjaC9tNjhrL2tlcm5lbC9lbnRyeS5TPTEzMD1FTlRSWShyZXRfZnJvbV9mb3JrKVxuLS1cbmFyY2gvbTY4ay9rZXJuZWwvZW50cnkuUy0xMzUtXG5hcmNoL202OGsva2VybmVsL2VudHJ5LlM6MTM2OkVOVFJZKHJldF9mcm9tX2tlcm5lbF90aHJlYWQpXG5hcmNoL202OGsva2VybmVsL2VudHJ5LlMtMTM3LVx0fCBhMyBjb250YWlucyB0aGUga2VybmVsIHRocmVhZCBwYXlsb2FkLCBkNyAtIGl0cyBhcmd1bWVudFxuLS1cbmFyY2gvbTY4ay9rZXJuZWwvcHJvY2Vzcy5jPTQzPWFzbWxpbmthZ2Ugdm9pZCByZXRfZnJvbV9mb3JrKHZvaWQpO1xuYXJjaC9tNjhrL2tlcm5lbC9wcm9jZXNzLmM6NDQ6YXNtbGlua2FnZSB2b2lkIHJldF9mcm9tX2tlcm5lbF90aHJlYWQodm9pZCk7XG5hcmNoL202OGsva2VybmVsL3Byb2Nlc3MuYy00NS1cbi0tXG5hcmNoL202OGsva2VybmVsL3Byb2Nlc3MuYz0xNDI9aW50IGNvcHlfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY29uc3Qgc3RydWN0IGtlcm5lbF9jbG9uZV9hcmdzICphcmdzKVxuLS1cbmFyY2gvbTY4ay9rZXJuZWwvcHJvY2Vzcy5jLTE2OC1cdFx0ZnJhbWUtXHUwMDNlc3cuZDcgPSAodW5zaWduZWQgbG9uZylhcmdzLVx1MDAzZWZuX2FyZztcbmFyY2gvbTY4ay9rZXJuZWwvcHJvY2Vzcy5jOjE2OTpcdFx0ZnJhbWUtXHUwMDNlc3cucmV0cGMgPSAodW5zaWduZWQgbG9uZylyZXRfZnJvbV9rZXJuZWxfdGhyZWFkO1xuYXJjaC9tNjhrL2tlcm5lbC9wcm9jZXNzLmMtMTcwLVx0XHRwLVx1MDAzZXRocmVhZC51c3AgPSAwO1xuLS1cbmFyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaD0yOT1leHRlcm4gdm9pZCByZXRfZnJvbV9mb3JrKHZvaWQpO1xuYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oOjMwOmV4dGVybiB2b2lkIHJldF9mcm9tX2tlcm5lbF90aHJlYWQodm9pZCk7XG5hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgtMzEtXG4tLVxuYXJjaC9taWNyb2JsYXplL2tlcm5lbC9lbnRyeS5TPTUwMz1DX0VOVFJZKHJldF9mcm9tX2ZvcmspOlxuLS1cbmFyY2gvbWljcm9ibGF6ZS9rZXJuZWwvZW50cnkuUy01MDktXG5hcmNoL21pY3JvYmxhemUva2VybmVsL2VudHJ5LlM6NTEwOkNfRU5UUlkocmV0X2Zyb21fa2VybmVsX3RocmVhZCk6XG5hcmNoL21pY3JvYmxhemUva2VybmVsL2VudHJ5LlMtNTExLVx0YnJhbGlkXHRyMTUsIHNjaGVkdWxlX3RhaWw7IC8qIC4uLndoaWNoIGlzIHNjaGVkdWxlX3RhaWwmIzM5O3MgYXJnICovXG4tLVxuYXJjaC9taWNyb2JsYXplL2tlcm5lbC9wcm9jZXNzLmM9NTU9aW50IGNvcHlfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY29uc3Qgc3RydWN0IGtlcm5lbF9jbG9uZV9hcmdzICphcmdzKVxuLS1cbmFyY2gvbWljcm9ibGF6ZS9rZXJuZWwvcHJvY2Vzcy5jLTczLVx0XHR0aS1cdTAwM2VjcHVfY29udGV4dC5tc3IgPSBjaGlsZHJlZ3MtXHUwMDNlbXNyIFx1MDAyNiB+TVNSX0lFO1xuYXJjaC9taWNyb2JsYXplL2tlcm5lbC9wcm9jZXNzLmM6NzQ6XHRcdHRpLVx1MDAzZWNwdV9jb250ZXh0LnIxNSA9ICh1bnNpZ25lZCBsb25nKXJldF9mcm9tX2tlcm5lbF90aHJlYWQgLSA4O1xuYXJjaC9taWNyb2JsYXplL2tlcm5lbC9wcm9jZXNzLmMtNzUtXHRcdHJldHVybiAwO1xuLS1cbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9zd2l0Y2hfdG8uaD04OT1kbyB7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbi0tXG5hcmNoL21pcHMvaW5jbHVkZS9hc20vc3dpdGNoX3RvLmgtMTA0LSAqIEZvciBuZXdseSBjcmVhdGVkIGtlcm5lbCB0aHJlYWRzIHN3aXRjaF90bygpIHdpbGwgcmV0dXJuIHRvXG5hcmNoL21pcHMvaW5jbHVkZS9hc20vc3dpdGNoX3RvLmg6MTA1OiAqIHJldF9mcm9tX2tlcm5lbF90aHJlYWQsIG5ld2x5IGNyZWF0ZWQgdXNlciB0aHJlYWRzIHRvIHJldF9mcm9tX2ZvcmsuXG5hcmNoL21pcHMvaW5jbHVkZS9hc20vc3dpdGNoX3RvLmgtMTA2LSAqIFRoYXQgaXMsIGV2ZXJ5dGhpbmcgZm9sbG93aW5nIHJlc3VtZSgpIHdpbGwgYmUgc2tpcHBlZCBmb3IgbmV3IHRocmVhZHMuXG4tLVxuYXJjaC9taXBzL2tlcm5lbC9lbnRyeS5TPTU2PXJlc3VtZV9rZXJuZWw6XG4tLVxuYXJjaC9taXBzL2tlcm5lbC9lbnRyeS5TLTY5LVxuYXJjaC9taXBzL2tlcm5lbC9lbnRyeS5TOjcwOkZFWFBPUlQocmV0X2Zyb21fa2VybmVsX3RocmVhZClcbmFyY2gvbWlwcy9rZXJuZWwvZW50cnkuUy03MS1cdGphbFx0c2NoZWR1bGVfdGFpbFx0XHQjIGEwID0gc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2XG4tLVxuYXJjaC9taXBzL2tlcm5lbC9wcm9jZXNzLmM9NDk9YXNtbGlua2FnZSB2b2lkIHJldF9mcm9tX2Zvcmsodm9pZCk7XG5hcmNoL21pcHMva2VybmVsL3Byb2Nlc3MuYzo1MDphc21saW5rYWdlIHZvaWQgcmV0X2Zyb21fa2VybmVsX3RocmVhZCh2b2lkKTtcbmFyY2gvbWlwcy9rZXJuZWwvcHJvY2Vzcy5jLTUxLVxuLS1cbmFyY2gvbWlwcy9rZXJuZWwvcHJvY2Vzcy5jPTEwOD1pbnQgY29weV90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBjb25zdCBzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgKmFyZ3MpXG4tLVxuYXJjaC9taXBzL2tlcm5lbC9wcm9jZXNzLmMtMTQzLVx0XHRwLVx1MDAzZXRocmVhZC5yZWcyOSA9IGNoaWxka3NwO1xuYXJjaC9taXBzL2tlcm5lbC9wcm9jZXNzLmM6MTQ0Olx0XHRwLVx1MDAzZXRocmVhZC5yZWczMSA9ICh1bnNpZ25lZCBsb25nKSByZXRfZnJvbV9rZXJuZWxfdGhyZWFkO1xuYXJjaC9taXBzL2tlcm5lbC9wcm9jZXNzLmMtMTQ1LSNpZiBkZWZpbmVkKENPTkZJR19DUFVfUjMwMDApXG4tLVxuYXJjaC9uaW9zMi9rZXJuZWwvZW50cnkuUz01MDg9RU5UUlkocmV0X2Zyb21fZm9yaylcbi0tXG5hcmNoL25pb3MyL2tlcm5lbC9lbnRyeS5TLTUxMS1cbmFyY2gvbmlvczIva2VybmVsL2VudHJ5LlM6NTEyOkVOVFJZKHJldF9mcm9tX2tlcm5lbF90aHJlYWQpXG5hcmNoL25pb3MyL2tlcm5lbC9lbnRyeS5TLTUxMy1cdGNhbGxcdHNjaGVkdWxlX3RhaWxcbi0tXG5hcmNoL25pb3MyL2tlcm5lbC9wcm9jZXNzLmM9Mjg9YXNtbGlua2FnZSB2b2lkIHJldF9mcm9tX2Zvcmsodm9pZCk7XG5hcmNoL25pb3MyL2tlcm5lbC9wcm9jZXNzLmM6Mjk6YXNtbGlua2FnZSB2b2lkIHJldF9mcm9tX2tlcm5lbF90aHJlYWQodm9pZCk7XG5hcmNoL25pb3MyL2tlcm5lbC9wcm9jZXNzLmMtMzAtXG4tLVxuYXJjaC9uaW9zMi9rZXJuZWwvcHJvY2Vzcy5jPTEwMj1pbnQgY29weV90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBjb25zdCBzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgKmFyZ3MpXG4tLVxuYXJjaC9uaW9zMi9rZXJuZWwvcHJvY2Vzcy5jLTExOC1cdFx0Y2hpbGRzdGFjay1cdTAwM2VyMTcgPSAodW5zaWduZWQgbG9uZykgYXJncy1cdTAwM2Vmbl9hcmc7XG5hcmNoL25pb3MyL2tlcm5lbC9wcm9jZXNzLmM6MTE5Olx0XHRjaGlsZHN0YWNrLVx1MDAzZXJhID0gKHVuc2lnbmVkIGxvbmcpIHJldF9mcm9tX2tlcm5lbF90aHJlYWQ7XG5hcmNoL25pb3MyL2tlcm5lbC9wcm9jZXNzLmMtMTIwLVx0XHRjaGlsZHJlZ3MtXHUwMDNlZXN0YXR1cyA9IFNUQVRVU19QSUU7XG4tLVxuYXJjaC9vcGVucmlzYy9rZXJuZWwvZW50cnkuUz0xMDgyPUVOVFJZKF9zd2l0Y2gpXG4tLVxuYXJjaC9vcGVucmlzYy9rZXJuZWwvZW50cnkuUy0xMTQ5LVx0ICogdGhhdCBtYXkgYmUgZWl0aGVyIHNjaGVkdWxlKCksIHJldF9mcm9tX2ZvcmsoKSwgb3JcbmFyY2gvb3BlbnJpc2Mva2VybmVsL2VudHJ5LlM6MTE1MDpcdCAqIHJldF9mcm9tX2tlcm5lbF90aHJlYWQoKS4gIElmIHdlIGFyZSByZXR1cm5pbmcgdG8gYSBuZXcgdGhyZWFkLFxuYXJjaC9vcGVucmlzYy9rZXJuZWwvZW50cnkuUy0xMTUxLVx0ICogd2UgYXJlIGV4cGVjdGVkIHRvIGhhdmUgc2V0IHVwIHRoZSBhcmcgdG8gc2NoZWR1bGVfdGFpbCBhbHJlYWR5LFxuLS1cbmFyY2gvcGFyaXNjL2tlcm5lbC9lbnRyeS5TPTcyOD1FTkQoZmF1bHRfdmVjdG9yXzExKVxuLS1cbmFyY2gvcGFyaXNjL2tlcm5lbC9lbnRyeS5TLTc0Mi1cbmFyY2gvcGFyaXNjL2tlcm5lbC9lbnRyeS5TOjc0MzpFTlRSWShyZXRfZnJvbV9rZXJuZWxfdGhyZWFkKVxuYXJjaC9wYXJpc2Mva2VybmVsL2VudHJ5LlMtNzQ0LVx0LyogQ2FsbCBzY2hlZHVsZV90YWlsIGZpcnN0IHRob3VnaCAqL1xuLS1cbmFyY2gvcGFyaXNjL2tlcm5lbC9lbnRyeS5TLTc1Ny1cdG5vcFxuYXJjaC9wYXJpc2Mva2VybmVsL2VudHJ5LlM6NzU4OkVORChyZXRfZnJvbV9rZXJuZWxfdGhyZWFkKVxuYXJjaC9wYXJpc2Mva2VybmVsL2VudHJ5LlMtNzU5LVxuLS1cbmFyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzLmM9MjA1PWNvcHlfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY29uc3Qgc3RydWN0IGtlcm5lbF9jbG9uZV9hcmdzICphcmdzKVxuLS1cbmFyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzLmMtMjE1LVx0ICogTWFrZSB0aGVtIGNvbnN0IHNvIHRoZSBjb21waWxlciBrbm93cyB0aGV5IGxpdmUgaW4gLnRleHQgKi9cbmFyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzLmM6MjE2Olx0ZXh0ZXJuIHZvaWQgKiBjb25zdCByZXRfZnJvbV9rZXJuZWxfdGhyZWFkO1xuYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3MuYy0yMTctXHRleHRlcm4gdm9pZCAqIGNvbnN0IGNoaWxkX3JldHVybjtcbi0tXG5hcmNoL3BhcmlzYy9rZXJuZWwvcHJvY2Vzcy5jLTIyMy1cdFx0XHRyZXR1cm4gMDtcbmFyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzLmM6MjI0Olx0XHQvKiBNdXN0IGV4aXQgdmlhIHJldF9mcm9tX2tlcm5lbF90aHJlYWQgaW4gb3JkZXJcbmFyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzLmMtMjI1LVx0XHQgKiB0byBjYWxsIHNjaGVkdWxlX3RhaWwoKVxuLS1cbmFyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzLmMtMjI3LVx0XHRjcmVncy1cdTAwM2Vrc3AgPSAodW5zaWduZWQgbG9uZykgc3RhY2sgJiM0MzsgRlJBTUVfU0laRSAmIzQzOyBQVF9TWl9BTEdOO1xuYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3MuYzoyMjg6XHRcdGNyZWdzLVx1MDAzZWtwYyA9ICh1bnNpZ25lZCBsb25nKSBcdTAwMjZyZXRfZnJvbV9rZXJuZWxfdGhyZWFkO1xuYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3MuYy0yMjktXHRcdC8qXG5hcmNoL3BhcmlzYy9rZXJuZWwvcHJvY2Vzcy5jLTIzMC1cdFx0ICogQ29weSBmdW5jdGlvbiBhbmQgYXJndW1lbnQgdG8gYmUgY2FsbGVkIGZyb21cbmFyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzLmM6MjMxOlx0XHQgKiByZXRfZnJvbV9rZXJuZWxfdGhyZWFkLlxuYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3MuYy0yMzItXHRcdCAqL1xuLS1cbmFyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYz0yMTc9c3RhdGljIGludCB1bndpbmRfc3BlY2lhbChzdHJ1Y3QgdW53aW5kX2ZyYW1lX2luZm8gKmluZm8sIHVuc2lnbmVkIGxvbmcgcGMsIGludCBmcmFtZV9zaXplKVxuLS1cbmFyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYy0yMjUtXHQgKi9cbmFyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYzoyMjY6XHRleHRlcm4gdm9pZCAqIGNvbnN0IHJldF9mcm9tX2tlcm5lbF90aHJlYWQ7XG5hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmMtMjI3LVx0ZXh0ZXJuIHZvaWQgKiBjb25zdCBzeXNjYWxsX2V4aXQ7XG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jLTI0MS1cbmFyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYzoyNDI6XHRpZiAocGMgPT0gKHVuc2lnbmVkIGxvbmcpXHUwMDI2cmV0X2Zyb21fa2VybmVsX3RocmVhZCB8fFxuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jLTI0My1cdCAgICBwYyA9PSAodW5zaWduZWQgbG9uZylcdTAwMjZzeXNjYWxsX2V4aXQpIHtcbi0tXG5hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzMyLlM9MTg5PXJldF9mcm9tX2tlcm5lbF91c2VyX3RocmVhZDpcbi0tXG5hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzMyLlMtMTk3LVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV8zMi5TOjE5ODpcdC5nbG9ibFx0c3RhcnRfa2VybmVsX3RocmVhZFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV8zMi5TOjE5OTpzdGFydF9rZXJuZWxfdGhyZWFkOlxuYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV8zMi5TLTIwMC1cdGJsXHRzY2hlZHVsZV90YWlsXG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9pbnRlcnJ1cHRfNjQuUz03NDI9X0dMT0JBTChyZXRfZnJvbV9rZXJuZWxfdXNlcl90aHJlYWQpXG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9pbnRlcnJ1cHRfNjQuUy03NTctXG5hcmNoL3Bvd2VycGMva2VybmVsL2ludGVycnVwdF82NC5TOjc1ODpfR0xPQkFMKHN0YXJ0X2tlcm5lbF90aHJlYWQpXG5hcmNoL3Bvd2VycGMva2VybmVsL2ludGVycnVwdF82NC5TLTc1OS1cdGJsXHRDRlVOQyhzY2hlZHVsZV90YWlsKVxuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jPTEyNzk9c3RydWN0IHRhc2tfc3RydWN0ICpfX3N3aXRjaF90byhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsXG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMtMTM0MS1cdCAqIGZyYW1lIGZvciBuZXcgdGFza3MgdGhhdCBkaXJlY3RseSByZXR1cm5zIHRocm91Z2ggcmV0X2Zyb21fZm9yaygpIG9yXG5hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYzoxMzQyOlx0ICogcmV0X2Zyb21fa2VybmVsX3RocmVhZCgpLiBTZWUgY29weV90aHJlYWQoKSBmb3IgZGV0YWlscy5cbmFyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jLTEzNDMtXHQgKi9cbi0tXG5hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYy0xMzU0LVx0ICogTm90aGluZyBhZnRlciBfc3dpdGNoIHdpbGwgYmUgcnVuIGZvciBuZXdseSBjcmVhdGVkIHRhc2tzLFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmM6MTM1NTpcdCAqIGJlY2F1c2UgdGhleSBzd2l0Y2ggZGlyZWN0bHkgdG8gcmV0X2Zyb21fZm9yay9yZXRfZnJvbV9rZXJuZWxfdGhyZWFkXG5hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYy0xMzU2LVx0ICogZXRjLiBDb2RlIGFkZGVkIGhlcmUgc2hvdWxkIGhhdmUgYSBjb21tZW50IGV4cGxhaW5pbmcgd2h5IHRoYXQgaXNcbi0tXG5hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYz0xNzMzPWludCBjb3B5X3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGNvbnN0IHN0cnVjdCBrZXJuZWxfY2xvbmVfYXJncyAqYXJncylcbi0tXG5hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYy0xNzM4LVx0ZXh0ZXJuIHZvaWQgcmV0X2Zyb21fa2VybmVsX3VzZXJfdGhyZWFkKHZvaWQpO1xuYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmM6MTczOTpcdGV4dGVybiB2b2lkIHN0YXJ0X2tlcm5lbF90aHJlYWQodm9pZCk7XG5hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYy0xNzQwLVx0dm9pZCAoKmYpKHZvaWQpO1xuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jLTE3NTQtXG5hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYzoxNzU1Olx0XHRmID0gc3RhcnRfa2VybmVsX3RocmVhZDtcbmFyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jLTE3NTYtXHRcdHAtXHUwMDNldGhyZWFkLnJlZ3MgPSBOVUxMO1x0Lyogbm8gdXNlciByZWdpc3RlciBzdGF0ZSAqL1xuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jLTE4MjktXHRcdCAqIHN3aXRjaCBmcmFtZSBzbyB0aGV5IGFyZSBsb2FkZWQgYnkgX3N3aXRjaCBiZWZvcmUgaXQgcmV0dXJuc1xuYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmM6MTgzMDpcdFx0ICogdG8gcmV0X2Zyb21fa2VybmVsX3RocmVhZC5cbmFyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jLTE4MzEtXHRcdCAqL1xuLS1cbmFyY2gvc2gva2VybmVsL2VudHJ5LWNvbW1vbi5TPTI2OT1yZXRfZnJvbV9mb3JrOlxuLS1cbmFyY2gvc2gva2VybmVsL2VudHJ5LWNvbW1vbi5TLTI3Ni1cdC5hbGlnblx0MlxuYXJjaC9zaC9rZXJuZWwvZW50cnktY29tbW9uLlM6Mjc3Olx0Lmdsb2JsXHRyZXRfZnJvbV9rZXJuZWxfdGhyZWFkXG5hcmNoL3NoL2tlcm5lbC9lbnRyeS1jb21tb24uUzoyNzg6cmV0X2Zyb21fa2VybmVsX3RocmVhZDpcbmFyY2gvc2gva2VybmVsL2VudHJ5LWNvbW1vbi5TLTI3OS1cdG1vdi5sXHQxZiwgcjhcbi0tXG5hcmNoL3NoL2tlcm5lbC9wcm9jZXNzXzMyLmM9ODc9YXNtbGlua2FnZSB2b2lkIHJldF9mcm9tX2Zvcmsodm9pZCk7XG5hcmNoL3NoL2tlcm5lbC9wcm9jZXNzXzMyLmM6ODg6YXNtbGlua2FnZSB2b2lkIHJldF9mcm9tX2tlcm5lbF90aHJlYWQodm9pZCk7XG5hcmNoL3NoL2tlcm5lbC9wcm9jZXNzXzMyLmMtODktXG5hcmNoL3NoL2tlcm5lbC9wcm9jZXNzXzMyLmM9OTA9aW50IGNvcHlfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY29uc3Qgc3RydWN0IGtlcm5lbF9jbG9uZV9hcmdzICphcmdzKVxuLS1cbmFyY2gvc2gva2VybmVsL3Byb2Nlc3NfMzIuYy0xMTUtXHRcdG1lbXNldChjaGlsZHJlZ3MsIDAsIHNpemVvZihzdHJ1Y3QgcHRfcmVncykpO1xuYXJjaC9zaC9rZXJuZWwvcHJvY2Vzc18zMi5jOjExNjpcdFx0cC1cdTAwM2V0aHJlYWQucGMgPSAodW5zaWduZWQgbG9uZykgcmV0X2Zyb21fa2VybmVsX3RocmVhZDtcbmFyY2gvc2gva2VybmVsL3Byb2Nlc3NfMzIuYy0xMTctXHRcdGNoaWxkcmVncy1cdTAwM2VyZWdzWzRdID0gKHVuc2lnbmVkIGxvbmcpIGFyZ3MtXHUwMDNlZm5fYXJnO1xuLS1cbmFyY2gvc3BhcmMva2VybmVsL2VudHJ5LlM9OTYzPXJldF9mcm9tX2Zvcms6XG4tLVxuYXJjaC9zcGFyYy9rZXJuZWwvZW50cnkuUy05NjgtXG5hcmNoL3NwYXJjL2tlcm5lbC9lbnRyeS5TOjk2OTpcdC5nbG9ibFx0cmV0X2Zyb21fa2VybmVsX3RocmVhZFxuYXJjaC9zcGFyYy9rZXJuZWwvZW50cnkuUzo5NzA6cmV0X2Zyb21fa2VybmVsX3RocmVhZDpcbmFyY2gvc3BhcmMva2VybmVsL2VudHJ5LlMtOTcxLVx0Y2FsbFx0c2NoZWR1bGVfdGFpbFxuLS1cbmFyY2gvc3BhcmMva2VybmVsL3Byb2Nlc3NfMzIuYz0yNjA9ZXh0ZXJuIHZvaWQgcmV0X2Zyb21fZm9yayh2b2lkKTtcbmFyY2gvc3BhcmMva2VybmVsL3Byb2Nlc3NfMzIuYzoyNjE6ZXh0ZXJuIHZvaWQgcmV0X2Zyb21fa2VybmVsX3RocmVhZCh2b2lkKTtcbmFyY2gvc3BhcmMva2VybmVsL3Byb2Nlc3NfMzIuYy0yNjItXG5hcmNoL3NwYXJjL2tlcm5lbC9wcm9jZXNzXzMyLmM9MjYzPWludCBjb3B5X3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGNvbnN0IHN0cnVjdCBrZXJuZWxfY2xvbmVfYXJncyAqYXJncylcbi0tXG5hcmNoL3NwYXJjL2tlcm5lbC9wcm9jZXNzXzMyLmMtMzA1LVx0XHRtZW1zZXQobmV3X3N0YWNrLCAwLCBTVEFDS0ZSQU1FX1NaICYjNDM7IFRSQUNFUkVHX1NaKTtcbmFyY2gvc3BhcmMva2VybmVsL3Byb2Nlc3NfMzIuYzozMDY6XHRcdHRpLVx1MDAzZWtwYyA9ICgoKHVuc2lnbmVkIGxvbmcpIHJldF9mcm9tX2tlcm5lbF90aHJlYWQpIC0gMHg4KTtcbmFyY2gvc3BhcmMva2VybmVsL3Byb2Nlc3NfMzIuYy0zMDctXHRcdGNoaWxkcmVncy1cdTAwM2V1X3JlZ3NbVVJFR19HMV0gPSAodW5zaWduZWQgbG9uZykgYXJncy1cdTAwM2Vmbjtcbi0tXG5hcmNoL3g4Ni9lbnRyeS9lbnRyeV8zMi5TPTEwNDY9aGFuZGxlX2V4Y2VwdGlvbl9yZXR1cm46XG4tLVxuYXJjaC94ODYvZW50cnkvZW50cnlfMzIuUy0xMDUyLVx0LypcbmFyY2gveDg2L2VudHJ5L2VudHJ5XzMyLlM6MTA1MzpcdCAqIFdlIGNhbiBiZSBjb21pbmcgaGVyZSBmcm9tIGNoaWxkIHNwYXduZWQgYnkga2VybmVsX3RocmVhZCgpLlxuYXJjaC94ODYvZW50cnkvZW50cnlfMzIuUy0xMDU0LVx0ICovXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGxiZmx1c2guaD0xNzM9REVDTEFSRV9QRVJfQ1BVX1NIQVJFRF9BTElHTkVEKHN0cnVjdCB0bGJfc3RhdGVfc2hhcmVkLCBjcHVfdGxic3RhdGVfc2hhcmVkKTtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90bGJmbHVzaC5oLTE3Ni0gKiBQbGVhc2UgaWdub3JlIHRoZSBuYW1lIG9mIHRoaXMgZnVuY3Rpb24uICBJdCBzaG91bGQgYmUgY2FsbGVkXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90bGJmbHVzaC5oOjE3NzogKiBzd2l0Y2hfdG9fa2VybmVsX3RocmVhZCgpLlxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGxiZmx1c2guaC0xNzgtICpcbi0tXG5hcmNoL3h0ZW5zYS9rZXJuZWwvZW50cnkuUz0yMTU4PUVORFBST0MocmV0X2Zyb21fZm9yaylcbi0tXG5hcmNoL3h0ZW5zYS9rZXJuZWwvZW50cnkuUy0yMTY0LSAqL1xuYXJjaC94dGVuc2Eva2VybmVsL2VudHJ5LlM6MjE2NTpFTlRSWShyZXRfZnJvbV9rZXJuZWxfdGhyZWFkKVxuYXJjaC94dGVuc2Eva2VybmVsL2VudHJ5LlMtMjE2Ni1cbi0tXG5hcmNoL3h0ZW5zYS9rZXJuZWwvZW50cnkuUy0yMTcxLVxuYXJjaC94dGVuc2Eva2VybmVsL2VudHJ5LlM6MjE3MjpFTkRQUk9DKHJldF9mcm9tX2tlcm5lbF90aHJlYWQpXG5hcmNoL3h0ZW5zYS9rZXJuZWwvZW50cnkuUy0yMTczLVxuLS1cbmFyY2gveHRlbnNhL2tlcm5lbC9wcm9jZXNzLmM9NTM9ZXh0ZXJuIHZvaWQgcmV0X2Zyb21fZm9yayh2b2lkKTtcbmFyY2gveHRlbnNhL2tlcm5lbC9wcm9jZXNzLmM6NTQ6ZXh0ZXJuIHZvaWQgcmV0X2Zyb21fa2VybmVsX3RocmVhZCh2b2lkKTtcbmFyY2gveHRlbnNhL2tlcm5lbC9wcm9jZXNzLmMtNTUtXG4tLVxuYXJjaC94dGVuc2Eva2VybmVsL3Byb2Nlc3MuYz0yMTc9aW50IGFyY2hfZHVwX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNyYylcbi0tXG5hcmNoL3h0ZW5zYS9rZXJuZWwvcHJvY2Vzcy5jLTI0Ny0gKiBXZSBjcmVhdGUgYSBkdW1teSBmcmFtZSB0byByZXR1cm4gdG8gZWl0aGVyIHJldF9mcm9tX2Zvcmsgb3JcbmFyY2gveHRlbnNhL2tlcm5lbC9wcm9jZXNzLmM6MjQ4OiAqICAgcmV0X2Zyb21fa2VybmVsX3RocmVhZDpcbmFyY2gveHRlbnNhL2tlcm5lbC9wcm9jZXNzLmM6MjQ5OiAqICAgYTAgcG9pbnRzIHRvIHJldF9mcm9tX2ZvcmsvcmV0X2Zyb21fa2VybmVsX3RocmVhZCAoc2ltdWxhdGluZyBhIGNhbGw0KVxuYXJjaC94dGVuc2Eva2VybmVsL3Byb2Nlc3MuYy0yNTAtICogICBzcCBwb2ludHMgdG8gaXRzZWxmICh0aHJlYWQuc3ApXG4tLVxuYXJjaC94dGVuc2Eva2VybmVsL3Byb2Nlc3MuYz0yNjg9aW50IGNvcHlfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY29uc3Qgc3RydWN0IGtlcm5lbF9jbG9uZV9hcmdzICphcmdzKVxuLS1cbmFyY2gveHRlbnNhL2tlcm5lbC9wcm9jZXNzLmMtMzM0LVx0XHRwLVx1MDAzZXRocmVhZC5yYSA9IE1BS0VfUkFfRk9SX0NBTEwoXG5hcmNoL3h0ZW5zYS9rZXJuZWwvcHJvY2Vzcy5jOjMzNTpcdFx0XHRcdCh1bnNpZ25lZCBsb25nKXJldF9mcm9tX2tlcm5lbF90aHJlYWQsIDEpO1xuYXJjaC94dGVuc2Eva2VybmVsL3Byb2Nlc3MuYy0zMzYtXG5hcmNoL3h0ZW5zYS9rZXJuZWwvcHJvY2Vzcy5jOjMzNzpcdFx0LyogcGFzcyBwYXJhbWV0ZXJzIHRvIHJldF9mcm9tX2tlcm5lbF90aHJlYWQ6ICovXG5hcmNoL3h0ZW5zYS9rZXJuZWwvcHJvY2Vzcy5jLTMzOC0jaWYgZGVmaW5lZChfX1hURU5TQV9XSU5ET1dFRF9BQklfXylcbi0tXG5kcml2ZXJzL21lZGlhL2NlYy9jb3JlL2NlYy1jb3JlLmM9MjIzPXN0cnVjdCBjZWNfYWRhcHRlciAqY2VjX2FsbG9jYXRlX2FkYXB0ZXIoY29uc3Qgc3RydWN0IGNlY19hZGFwX29wcyAqb3BzLFxuLS1cbmRyaXZlcnMvbWVkaWEvY2VjL2NvcmUvY2VjLWNvcmUuYy0yNjctXHRpZiAoSVNfRVJSKGFkYXAtXHUwMDNla3RocmVhZCkpIHtcbmRyaXZlcnMvbWVkaWEvY2VjL2NvcmUvY2VjLWNvcmUuYzoyNjg6XHRcdHByX2VycihcJiMzNDtjZWMtJXM6IGtlcm5lbF90aHJlYWQoKSBmYWlsZWRcXG5cJiMzNDssIG5hbWUpO1xuZHJpdmVycy9tZWRpYS9jZWMvY29yZS9jZWMtY29yZS5jLTI2OS1cdFx0cmVzID0gUFRSX0VSUihhZGFwLVx1MDAzZWt0aHJlYWQpO1xuLS1cbmRyaXZlcnMvbWVkaWEvY2VjL2NvcmUvY2VjLXBpbi5jPTExNTg9c3RhdGljIGludCBjZWNfcGluX2FkYXBfZW5hYmxlKHN0cnVjdCBjZWNfYWRhcHRlciAqYWRhcCwgYm9vbCBlbmFibGUpXG4tLVxuZHJpdmVycy9tZWRpYS9jZWMvY29yZS9jZWMtcGluLmMtMTE3My1cbmRyaXZlcnMvbWVkaWEvY2VjL2NvcmUvY2VjLXBpbi5jOjExNzQ6XHRcdFx0XHRwcl9lcnIoXCYjMzQ7Y2VjLXBpbjoga2VybmVsX3RocmVhZCgpIGZhaWxlZFxcblwmIzM0Oyk7XG5kcml2ZXJzL21lZGlhL2NlYy9jb3JlL2NlYy1waW4uYy0xMTc1LVx0XHRcdFx0cGluLVx1MDAzZWt0aHJlYWQgPSBOVUxMO1xuLS1cbmRyaXZlcnMvbWVkaWEvZHZiLWNvcmUvZHZiX2NhX2VuNTAyMjEuYz0xODcwPWludCBkdmJfY2FfZW41MDIyMV9pbml0KHN0cnVjdCBkdmJfYWRhcHRlciAqZHZiX2FkYXB0ZXIsXG4tLVxuZHJpdmVycy9tZWRpYS9kdmItY29yZS9kdmJfY2FfZW41MDIyMS5jLTE5MzMtXHRcdHJldCA9IFBUUl9FUlIoY2EtXHUwMDNldGhyZWFkKTtcbmRyaXZlcnMvbWVkaWEvZHZiLWNvcmUvZHZiX2NhX2VuNTAyMjEuYzoxOTM0Olx0XHRwcl9lcnIoXCYjMzQ7ZHZiX2NhX2luaXQ6IGZhaWxlZCB0byBzdGFydCBrZXJuZWxfdGhyZWFkICglZClcXG5cJiMzNDssXG5kcml2ZXJzL21lZGlhL2R2Yi1jb3JlL2R2Yl9jYV9lbjUwMjIxLmMtMTkzNS1cdFx0ICAgICAgIHJldCk7XG4tLVxuZHJpdmVycy9tZWRpYS9pMmMvbXNwMzQwMC1kcml2ZXIuYz02NTg9c3RhdGljIGludCBtc3BfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbi0tXG5kcml2ZXJzL21lZGlhL2kyYy9tc3AzNDAwLWRyaXZlci5jLTg0OC1cdFx0aWYgKElTX0VSUihzdGF0ZS1cdTAwM2VrdGhyZWFkKSlcbmRyaXZlcnMvbWVkaWEvaTJjL21zcDM0MDAtZHJpdmVyLmM6ODQ5Olx0XHRcdGRldl93YXJuKFx1MDAyNmNsaWVudC1cdTAwM2VkZXYsIFwmIzM0O2tlcm5lbF90aHJlYWQoKSBmYWlsZWRcXG5cJiMzNDspO1xuZHJpdmVycy9tZWRpYS9pMmMvbXNwMzQwMC1kcml2ZXIuYy04NTAtXHRcdG1zcF93YWtlX3RocmVhZChjbGllbnQpO1xuLS1cbmRyaXZlcnMvbWVkaWEvcGNpL3NhYTcxMzQvc2FhNzEzNC10dmF1ZGlvLmM9MTAwMD1pbnQgc2FhNzEzNF90dmF1ZGlvX2luaXQyKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2KVxuLS1cbmRyaXZlcnMvbWVkaWEvcGNpL3NhYTcxMzQvc2FhNzEzNC10dmF1ZGlvLmMtMTAyMC1cdFx0aWYgKElTX0VSUihkZXYtXHUwMDNldGhyZWFkLnRocmVhZCkpIHtcbmRyaXZlcnMvbWVkaWEvcGNpL3NhYTcxMzQvc2FhNzEzNC10dmF1ZGlvLmM6MTAyMTpcdFx0XHRwcl93YXJuKFwmIzM0OyVzOiBrZXJuZWxfdGhyZWFkKCkgZmFpbGVkXFxuXCYjMzQ7LFxuZHJpdmVycy9tZWRpYS9wY2kvc2FhNzEzNC9zYWE3MTM0LXR2YXVkaW8uYy0xMDIyLVx0XHRcdCAgICAgICBkZXYtXHUwMDNlbmFtZSk7XG4tLVxuZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1taXJvcGNtMjAuYz0zNzg9c3RhdGljIGludCBwY20yMF9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbmRyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbWlyb3BjbTIwLmMtMzg3LVx0XHRpZiAoSVNfRVJSKGRldi1cdTAwM2VrdGhyZWFkKSkge1xuZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1taXJvcGNtMjAuYzozODg6XHRcdFx0djRsMl9lcnIoXHUwMDI2ZGV2LVx1MDAzZXY0bDJfZGV2LCBcJiMzNDtrZXJuZWxfdGhyZWFkKCkgZmFpbGVkXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbWlyb3BjbTIwLmMtMzg5LVx0XHRcdHY0bDJfZmhfcmVsZWFzZShmaWxlKTtcbi0tXG5kcml2ZXJzL21lZGlhL3Rlc3QtZHJpdmVycy92aXZpZC92aXZpZC1jb3JlLmM9MTgwMD1zdGF0aWMgaW50IHZpdmlkX2NyZWF0ZV9pbnN0YW5jZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgaW5zdClcbi0tXG5kcml2ZXJzL21lZGlhL3Rlc3QtZHJpdmVycy92aXZpZC92aXZpZC1jb3JlLmMtMjAyMi1cdFx0XHRkZXYtXHUwMDNla3RocmVhZF9jZWMgPSBOVUxMO1xuZHJpdmVycy9tZWRpYS90ZXN0LWRyaXZlcnMvdml2aWQvdml2aWQtY29yZS5jOjIwMjM6XHRcdFx0djRsMl9lcnIoXHUwMDI2ZGV2LVx1MDAzZXY0bDJfZGV2LCBcJiMzNDtrZXJuZWxfdGhyZWFkKCkgZmFpbGVkXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbWVkaWEvdGVzdC1kcml2ZXJzL3ZpdmlkL3ZpdmlkLWNvcmUuYy0yMDI0LVx0XHRcdGdvdG8gdW5yZWdfZGV2O1xuLS1cbmRyaXZlcnMvbWVkaWEvdGVzdC1kcml2ZXJzL3ZpdmlkL3ZpdmlkLWt0aHJlYWQtY2FwLmM9ODEyPWludCB2aXZpZF9zdGFydF9nZW5lcmF0aW5nX3ZpZF9jYXAoc3RydWN0IHZpdmlkX2RldiAqZGV2LCBib29sICpwc3RyZWFtaW5nKVxuLS1cbmRyaXZlcnMvbWVkaWEvdGVzdC1kcml2ZXJzL3ZpdmlkL3ZpdmlkLWt0aHJlYWQtY2FwLmMtODQyLVx0XHRkZXYtXHUwMDNla3RocmVhZF92aWRfY2FwID0gTlVMTDtcbmRyaXZlcnMvbWVkaWEvdGVzdC1kcml2ZXJzL3ZpdmlkL3ZpdmlkLWt0aHJlYWQtY2FwLmM6ODQzOlx0XHR2NGwyX2VycihcdTAwMjZkZXYtXHUwMDNldjRsMl9kZXYsIFwmIzM0O2tlcm5lbF90aHJlYWQoKSBmYWlsZWRcXG5cJiMzNDspO1xuZHJpdmVycy9tZWRpYS90ZXN0LWRyaXZlcnMvdml2aWQvdml2aWQta3RocmVhZC1jYXAuYy04NDQtXHRcdHJldHVybiBlcnI7XG4tLVxuZHJpdmVycy9tZWRpYS90ZXN0LWRyaXZlcnMvdml2aWQvdml2aWQta3RocmVhZC1vdXQuYz0yNjA9aW50IHZpdmlkX3N0YXJ0X2dlbmVyYXRpbmdfdmlkX291dChzdHJ1Y3Qgdml2aWRfZGV2ICpkZXYsIGJvb2wgKnBzdHJlYW1pbmcpXG4tLVxuZHJpdmVycy9tZWRpYS90ZXN0LWRyaXZlcnMvdml2aWQvdml2aWQta3RocmVhZC1vdXQuYy0yODktXHRcdGRldi1cdTAwM2VrdGhyZWFkX3ZpZF9vdXQgPSBOVUxMO1xuZHJpdmVycy9tZWRpYS90ZXN0LWRyaXZlcnMvdml2aWQvdml2aWQta3RocmVhZC1vdXQuYzoyOTA6XHRcdHY0bDJfZXJyKFx1MDAyNmRldi1cdTAwM2V2NGwyX2RldiwgXCYjMzQ7a2VybmVsX3RocmVhZCgpIGZhaWxlZFxcblwmIzM0Oyk7XG5kcml2ZXJzL21lZGlhL3Rlc3QtZHJpdmVycy92aXZpZC92aXZpZC1rdGhyZWFkLW91dC5jLTI5MS1cdFx0cmV0dXJuIGVycjtcbi0tXG5kcml2ZXJzL21lZGlhL3Rlc3QtZHJpdmVycy92aXZpZC92aXZpZC1rdGhyZWFkLXRvdWNoLmM9MTUxPWludCB2aXZpZF9zdGFydF9nZW5lcmF0aW5nX3RvdWNoX2NhcChzdHJ1Y3Qgdml2aWRfZGV2ICpkZXYpXG4tLVxuZHJpdmVycy9tZWRpYS90ZXN0LWRyaXZlcnMvdml2aWQvdml2aWQta3RocmVhZC10b3VjaC5jLTE2NS1cdFx0ZGV2LVx1MDAzZWt0aHJlYWRfdG91Y2hfY2FwID0gTlVMTDtcbmRyaXZlcnMvbWVkaWEvdGVzdC1kcml2ZXJzL3ZpdmlkL3ZpdmlkLWt0aHJlYWQtdG91Y2guYzoxNjY6XHRcdHY0bDJfZXJyKFx1MDAyNmRldi1cdTAwM2V2NGwyX2RldiwgXCYjMzQ7a2VybmVsX3RocmVhZCgpIGZhaWxlZFxcblwmIzM0Oyk7XG5kcml2ZXJzL21lZGlhL3Rlc3QtZHJpdmVycy92aXZpZC92aXZpZC1rdGhyZWFkLXRvdWNoLmMtMTY3LVx0XHRyZXR1cm4gZXJyO1xuLS1cbmRyaXZlcnMvbWVkaWEvdGVzdC1kcml2ZXJzL3ZpdmlkL3ZpdmlkLXNkci1jYXAuYz0yNzU9c3RhdGljIGludCBzZHJfY2FwX3N0YXJ0X3N0cmVhbWluZyhzdHJ1Y3QgdmIyX3F1ZXVlICp2cSwgdW5zaWduZWQgY291bnQpXG4tLVxuZHJpdmVycy9tZWRpYS90ZXN0LWRyaXZlcnMvdml2aWQvdml2aWQtc2RyLWNhcC5jLTI4OS1cdFx0aWYgKElTX0VSUihkZXYtXHUwMDNla3RocmVhZF9zZHJfY2FwKSkge1xuZHJpdmVycy9tZWRpYS90ZXN0LWRyaXZlcnMvdml2aWQvdml2aWQtc2RyLWNhcC5jOjI5MDpcdFx0XHR2NGwyX2VycihcdTAwMjZkZXYtXHUwMDNldjRsMl9kZXYsIFwmIzM0O2tlcm5lbF90aHJlYWQoKSBmYWlsZWRcXG5cJiMzNDspO1xuZHJpdmVycy9tZWRpYS90ZXN0LWRyaXZlcnMvdml2aWQvdml2aWQtc2RyLWNhcC5jLTI5MS1cdFx0XHRlcnIgPSBQVFJfRVJSKGRldi1cdTAwM2VrdGhyZWFkX3Nkcl9jYXApO1xuLS1cbmRyaXZlcnMvbWlzYy9zZ2kteHAveHBjLmg9MjA1PXN0cnVjdCB4cGNfYWN0aXZhdGVfbXFfbXNnX2NoY3RsX29wZW5jb21wbGV0ZV91diB7XG4tLVxuZHJpdmVycy9taXNjL3NnaS14cC94cGMuaC0yMTAtLypcbmRyaXZlcnMvbWlzYy9zZ2kteHAveHBjLmg6MjExOiAqIEZ1bmN0aW9ucyByZWdpc3RlcmVkIGJ5IGFkZF90aW1lcigpIG9yIGNhbGxlZCBieSBrZXJuZWxfdGhyZWFkKCkgb25seVxuZHJpdmVycy9taXNjL3NnaS14cC94cGMuaC0yMTItICogYWxsb3cgZm9yIGEgc2luZ2xlIDY0LWJpdCBhcmd1bWVudC4gVGhlIGZvbGxvd2luZyBtYWNyb3MgY2FuIGJlIHVzZWQgdG9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYz04MjM9bGlxdWlkaW9fcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkICplbnQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2xpb19tYWluLmMtODg5LVx0XHRcdFx0ZGV2X2VycihcdTAwMjZvY3RfZGV2LVx1MDAzZXBjaV9kZXYtXHUwMDNlZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2xpb19tYWluLmM6ODkwOlx0XHRcdFx0XHRcJiMzNDtmYWlsZWQgdG8gY3JlYXRlIGtlcm5lbF90aHJlYWRcXG5cJiMzNDspO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2xpb19tYWluLmMtODkxLVx0XHRcdFx0bGlxdWlkaW9fcmVtb3ZlKHBkZXYpO1xuLS1cbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlLmg9ODAzPXN0cnVjdCBxZXRoX2NhcmQge1xuLS1cbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlLmgtODM0LVx0c3RydWN0IHdvcmtfc3RydWN0IHJ4X21vZGVfd29yaztcbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlLmg6ODM1Olx0c3RydWN0IHdvcmtfc3RydWN0IGtlcm5lbF90aHJlYWRfc3RhcnRlcjtcbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlLmgtODM2LVx0c3BpbmxvY2tfdCB0aHJlYWRfbWFza19sb2NrO1xuLS1cbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYz0xMDk1PWludCBxZXRoX3NjaGVkdWxlX3JlY292ZXJ5KHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpXG4tLVxuZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jLTExMDItXHRpZiAoIXJjKVxuZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jOjExMDM6XHRcdHNjaGVkdWxlX3dvcmsoXHUwMDI2Y2FyZC1cdTAwM2VrZXJuZWxfdGhyZWFkX3N0YXJ0ZXIpO1xuZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jLTExMDQtXG4tLVxuZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jPTE1Njg9c3RhdGljIGludCBxZXRoX2RvX3Jlc2V0KHZvaWQgKmRhdGEpO1xuZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jOjE1Njk6c3RhdGljIHZvaWQgcWV0aF9zdGFydF9rZXJuZWxfdGhyZWFkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYy0xNTcwLXtcbi0tXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMtMTU3Mi1cdHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHFldGhfY2FyZCxcbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYzoxNTczOlx0XHRcdFx0XHRrZXJuZWxfdGhyZWFkX3N0YXJ0ZXIpO1xuZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jLTE1NzQtXHRRRVRIX0NBUkRfVEVYVChjYXJkLCAyLCBcJiMzNDtzdHJ0aHJkXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmM9MTU5MD1zdGF0aWMgdm9pZCBxZXRoX3NldHVwX2NhcmQoc3RydWN0IHFldGhfY2FyZCAqY2FyZClcbi0tXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMtMTU5OS1cdG11dGV4X2luaXQoXHUwMDI2Y2FyZC1cdTAwM2VkaXNjaXBsaW5lX211dGV4KTtcbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYzoxNjAwOlx0SU5JVF9XT1JLKFx1MDAyNmNhcmQtXHUwMDNla2VybmVsX3RocmVhZF9zdGFydGVyLCBxZXRoX3N0YXJ0X2tlcm5lbF90aHJlYWQpO1xuZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jLTE2MDEtXHRJTklUX0xJU1RfSEVBRChcdTAwMjZjYXJkLVx1MDAzZWNtZF93YWl0ZXJfbGlzdCk7XG4tLVxuZHJpdmVycy90dHkvaHZjL2h2Y3MuYz0yMjY9c3RhdGljIGludCBodmNzX2luZGV4X2NvdW50O1xuLS1cbmRyaXZlcnMvdHR5L2h2Yy9odmNzLmMtMjI4LS8qXG5kcml2ZXJzL3R0eS9odmMvaHZjcy5jOjIyOTogKiBVc2VkIGJ5IHRoZSBraHZjc2QgdG8gcGljayB1cCBJL08gb3BlcmF0aW9ucyB3aGVuIHRoZSBrZXJuZWxfdGhyZWFkIGlzXG5kcml2ZXJzL3R0eS9odmMvaHZjcy5jLTIzMC0gKiBhbHJlYWR5IGF3YWtlIGJ1dCBwb3RlbnRpYWxseSBzaGlmdGVkIHRvIFRBU0tfSU5URVJSVVBUSUJMRSBzdGF0ZS5cbi0tXG5kcml2ZXJzL3R0eS9odmMvaHZjcy5jPTI1MD1zdHJ1Y3QgaHZjc19zdHJ1Y3Qge1xuLS1cbmRyaXZlcnMvdHR5L2h2Yy9odmNzLmMtMjYwLVx0LypcbmRyaXZlcnMvdHR5L2h2Yy9odmNzLmM6MjYxOlx0ICogVXNlZCB0byB0ZWxsIHRoZSBkcml2ZXIga2VybmVsX3RocmVhZCB3aGF0IG9wZXJhdGlvbnMgbmVlZCB0byB0YWtlXG5kcml2ZXJzL3R0eS9odmMvaHZjcy5jLTI2Mi1cdCAqIHBsYWNlIHVwb24gdGhpcyBodmNzX3N0cnVjdCBpbnN0YW5jZS5cbi0tXG5kcml2ZXJzL3R0eS9odmMvaHZjcy5jPTExNTM9c3RhdGljIHZvaWQgaHZjc19jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlscClcbi0tXG5kcml2ZXJzL3R0eS9odmMvaHZjcy5jLTExODQtXHRcdC8qXG5kcml2ZXJzL3R0eS9odmMvaHZjcy5jOjExODU6XHRcdCAqIE5VTEwgdGhpcyBlYXJseSBzbyB0aGF0IHRoZSBrZXJuZWxfdGhyZWFkIGRvZXNuJiMzOTt0IHRyeSB0b1xuZHJpdmVycy90dHkvaHZjL2h2Y3MuYy0xMTg2LVx0XHQgKiBleGVjdXRlIGFueSBvcGVyYXRpb25zIG9uIHRoZSBUVFkgZXZlbiB0aG91Z2ggaXQgaXMgb2JsaWdhdGVkXG4tLVxuZHJpdmVycy90dHkvaHZjL2h2Y3MuYz0xMjU4PXN0YXRpYyBzc2l6ZV90IGh2Y3Nfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvdHR5L2h2Yy9odmNzLmMtMTMxOC1cdFx0ICogSWYgdGhpcyBpcyB0cnVlIHRoZW4gd2UgZG9uJiMzOTt0IHdhbnQgdG8gdHJ5IHdyaXRpbmcgdG8gdGhlXG5kcml2ZXJzL3R0eS9odmMvaHZjcy5jOjEzMTk6XHRcdCAqIGh5cGVydmlzb3IgYmVjYXVzZSB0aGF0IGlzIHRoZSBrZXJuZWxfdGhyZWFkcyBqb2Igbm93LiAgV2UmIzM5O2xsXG5kcml2ZXJzL3R0eS9odmMvaHZjcy5jLTEzMjAtXHRcdCAqIGp1c3QgYWRkIHRvIHRoZSBidWZmZXIuXG4tLVxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jPTk3NT1zdGF0aWMgaW50IHVzYmF0bV9oZWF2eV9pbml0KHN0cnVjdCB1c2JhdG1fZGF0YSAqaW5zdGFuY2UpXG4tLVxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jLTk4MS1cdGlmIChJU19FUlIodCkpIHtcbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYzo5ODI6XHRcdHVzYl9lcnIoaW5zdGFuY2UsIFwmIzM0OyVzOiBmYWlsZWQgdG8gY3JlYXRlIGtlcm5lbF90aHJlYWQgKCVsZCkhXFxuXCYjMzQ7LFxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jLTk4My1cdFx0XHRcdF9fZnVuY19fLCBQVFJfRVJSKHQpKTtcbi0tXG5kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jPTYwNjc9aW50IHVzYl9odWJfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvdXNiL2NvcmUvaHViLmMtNjA4NC1cbmRyaXZlcnMvdXNiL2NvcmUvaHViLmM6NjA4NTpcdC8qIEZhbGwgdGhyb3VnaCBpZiBrZXJuZWxfdGhyZWFkIGZhaWxlZCAqL1xuZHJpdmVycy91c2IvY29yZS9odWIuYy02MDg2LVx0dXNiX2RlcmVnaXN0ZXIoXHUwMDI2aHViX2RyaXZlcik7XG4tLVxuZHJpdmVycy94ZW4vbWFuYWdlLmM9OTI9c3RhdGljIHZvaWQgZG9fc3VzcGVuZCh2b2lkKVxuLS1cbmRyaXZlcnMveGVuL21hbmFnZS5jLTExMC1cbmRyaXZlcnMveGVuL21hbmFnZS5jOjExMTpcdGVyciA9IGZyZWV6ZV9rZXJuZWxfdGhyZWFkcygpO1xuZHJpdmVycy94ZW4vbWFuYWdlLmMtMTEyLVx0aWYgKGVycikge1xuLS1cbmZzL2J1ZmZlci5jLTgtLypcbmZzL2J1ZmZlci5jOjk6ICogU3RhcnQgYmRmbHVzaCgpIHdpdGgga2VybmVsX3RocmVhZCBub3Qgc3lzY2FsbCAtIFBhdWwgR29ydG1ha2VyLCAxMi85NVxuZnMvYnVmZmVyLmMtMTAtICpcbi0tXG5pbmNsdWRlL2xpbnV4L2ZyZWV6ZXIuaD01MD1leHRlcm4gaW50IGZyZWV6ZV9wcm9jZXNzZXModm9pZCk7XG5pbmNsdWRlL2xpbnV4L2ZyZWV6ZXIuaDo1MTpleHRlcm4gaW50IGZyZWV6ZV9rZXJuZWxfdGhyZWFkcyh2b2lkKTtcbmluY2x1ZGUvbGludXgvZnJlZXplci5oLTUyLWV4dGVybiB2b2lkIHRoYXdfcHJvY2Vzc2VzKHZvaWQpO1xuaW5jbHVkZS9saW51eC9mcmVlemVyLmg6NTM6ZXh0ZXJuIHZvaWQgdGhhd19rZXJuZWxfdGhyZWFkcyh2b2lkKTtcbmluY2x1ZGUvbGludXgvZnJlZXplci5oLTU0LWV4dGVybiB2b2lkIHRoYXdfcHJvY2VzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApO1xuLS1cbmluY2x1ZGUvbGludXgvZnJlZXplci5oPTg0PXN0YXRpYyBpbmxpbmUgaW50IGZyZWV6ZV9wcm9jZXNzZXModm9pZCkgeyByZXR1cm4gLUVOT1NZUzsgfVxuaW5jbHVkZS9saW51eC9mcmVlemVyLmg6ODU6c3RhdGljIGlubGluZSBpbnQgZnJlZXplX2tlcm5lbF90aHJlYWRzKHZvaWQpIHsgcmV0dXJuIC1FTk9TWVM7IH1cbmluY2x1ZGUvbGludXgvZnJlZXplci5oLTg2LXN0YXRpYyBpbmxpbmUgdm9pZCB0aGF3X3Byb2Nlc3Nlcyh2b2lkKSB7fVxuaW5jbHVkZS9saW51eC9mcmVlemVyLmg6ODc6c3RhdGljIGlubGluZSB2b2lkIHRoYXdfa2VybmVsX3RocmVhZHModm9pZCkge31cblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwNzoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjEzMQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLgoKKipEaXZpbmcgaW50byBLZXJuZWwgVGhyZWFkIENyZWF0aW9uKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IGBrZXJuZWxfdGhyZWFkYCBjcmVhdGVzIG5ldyBrZXJuZWwgdGhyZWFkcy4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGl0IHByb2JhYmx5IGxldmVyYWdlcyBga2VybmVsX2Nsb25lYCBhbmQsIGFzIGV4cGVjdGVkLCBpdCBhcHBlYXJzIHRvIHVzZSBga2VybmVsX2Nsb25lYC4gQW5kLCBsb29raW5nIGF0IHRoZSBmbGFncyBpdCBwYXNzZXMsIGl0JiMzOTtzIHByZXR0eSBzdGFuZGFyZCwgdXNpbmcgYENMT05FX1ZNYCB0byBzaGFyZSB0aGUgdmlydHVhbCBtZW1vcnkgc3BhY2UsIGFuZCBgQ0xPTkVfVU5UUkFDRURgIHdoaWNoIG1ha2VzIHNlbnNlIGZvciBhIGtlcm5lbC1sZXZlbCB0aHJlYWQgdG8gbm90IGJlIGRpcmVjdGx5IGRlYnVnZ2FibGUuCgpCdXQgaG9sZCBvbi4uLiB0aGF0IGRldGFpbCBhYm91dCBgQ0xPTkVfRlNgIGlzIHJpbmdpbmcgYSBiZWxsLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYGtlcm5lbF90aHJlYWRgICpkb2VzbiYjMzk7dCogc2hhcmUgdGhlIGZpbGUgc3lzdGVtIGluZm9ybWF0aW9uLCB1bmxpa2UgYSByZWd1bGFyIHRocmVhZCB3aXRoaW4gYSBwcm9jZXNzLiBUaGF0JiMzOTtzIGEga2V5IGRpc3RpbmN0aW9uISBMZXQmIzM5O3MganVzdCBjb25maXJtIHRoYXQgaHVuY2ggd2l0aCBhIHF1aWNrIGxvb2sgYXQgdGhlIGBrZXJuZWxfdGhyZWFkYCBpbXBsZW1lbnRhdGlvbiB0byB2ZXJpZnkgdGhhdC4gR290dGEgbWFrZSBzdXJlIG15IHVuZGVyc3RhbmRpbmcgaXMgc3BvdC1vbi4gSSYjMzk7ZCBoYXRlIHRvIGJlIHdyb25nIGFib3V0IHN1Y2ggYSBmdW5kYW1lbnRhbCBwaWVjZSBvZiB0aGUgcHV6emxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwNzoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwaWRfdCBrZXJuZWxfdGhyZWFkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2NoZWQvdGFzay5oPTEwMj1zdHJ1Y3QgdGFza19zdHJ1Y3QgKmZvcmtfaWRsZShpbnQpO1xuaW5jbHVkZS9saW51eC9zY2hlZC90YXNrLmg6MTAzOmV4dGVybiBwaWRfdCBrZXJuZWxfdGhyZWFkKGludCAoKmZuKSh2b2lkICopLCB2b2lkICphcmcsIGNvbnN0IGNoYXIgKm5hbWUsXG5pbmNsdWRlL2xpbnV4L3NjaGVkL3Rhc2suaC0xMDQtXHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpO1xuLS1cbmtlcm5lbC9mb3JrLmM9MjY5Mz1waWRfdCBrZXJuZWxfY2xvbmUoc3RydWN0IGtlcm5lbF9jbG9uZV9hcmdzICphcmdzKVxuLS1cbmtlcm5lbC9mb3JrLmMtMjc5NS0gKi9cbmtlcm5lbC9mb3JrLmM6Mjc5NjpwaWRfdCBrZXJuZWxfdGhyZWFkKGludCAoKmZuKSh2b2lkICopLCB2b2lkICphcmcsIGNvbnN0IGNoYXIgKm5hbWUsXG5rZXJuZWwvZm9yay5jLTI3OTctXHRcdCAgICB1bnNpZ25lZCBsb25nIGZsYWdzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwNzoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjYyOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBga2VybmVsX3RocmVhZGAgaW4gYGtlcm5lbC9mb3JrLmNgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIHJpZ2h0IGluLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyBjbGVhcmx5IGZvY3VzZWQgb24gcGlucG9pbnRpbmcgYSBzcGVjaWZpYyBmdW5jdGlvbiwgYGtlcm5lbF90aHJlYWRgLCBhbmQgaXRzIGxvY2F0aW9uIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZSBjb2RlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZGlyZWN0aW5nIG15c2VsZiB0byBpbnZlc3RpZ2F0ZSB0aGUgYGtlcm5lbC9mb3JrLmNgIGZpbGUuIFRoaXMgdGVsbHMgbWUgSSYjMzk7bSBsaWtlbHkgbG9va2luZyBhdCBob3cgdGhyZWFkcyBhcmUgY3JlYXRlZCBvciBtYW5hZ2VkIHdpdGhpbiB0aGUga2VybmVsLCBhbmQgdGhlIGBmb3JrLmNgIGNvbnRleHQgc3Ryb25nbHkgc3VnZ2VzdHMgSSYjMzk7bSBmb2N1c2luZyBvbiBwcm9jZXNzIGNyZWF0aW9uIGFuZCwgYnkgZXh0ZW5zaW9uLCB0aHJlYWRpbmcuIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBmb3IgdGhlIG51YW5jZXMgb2YgdGhpcyBmdW5jdGlvbi4gUGVyaGFwcyBJJiMzOTttIHRyeWluZyB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIGEgc3BlY2lmaWMgc2NlbmFyaW8sIGRlYnVnIGFuIGlzc3VlIHJlbGF0ZWQgdG8gdGhyZWFkIGNyZWF0aW9uLCBvciBJJiMzOTttIHNpbXBseSB0cnlpbmcgdG8gYnJ1c2ggdXAgb24gdGhpcyBwYXJ0IG9mIHRoZSBrZXJuZWwmIzM5O3MgaW5uZXIgd29ya2luZ3MuIFRoZSBjaG9pY2Ugb2YgYGtlcm5lbF90aHJlYWRgIHN1Z2dlc3RzIEkmIzM5O20gaW50ZXJlc3RlZCBpbiB0aGUgbWVjaGFuaXNtcyBmb3IgY3JlYXRpbmcga2VybmVsLWxldmVsIHRocmVhZHMgdmVyc3VzIHVzZXItbGV2ZWwgdGhyZWFkcywgYXMgb3Bwb3NlZCB0byB0aGUgbW9yZSBjb21tb24gYGZvcmtgIHN5c3RlbSBjYWxsIHdoaWNoIGlzIGdlbmVyYWxseSB1c2VkIHRvIGNyZWF0ZSBwcm9jZXNzZXMuIFRoaXMgbGV2ZWwgb2YgZ3JhbnVsYXJpdHkgaXMga2V5IHRvIHdoYXQgSSBhbSBkb2luZyBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA3OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2ZvcmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3OTYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjc5NjpcdHBpZF90IGtlcm5lbF90aHJlYWQoaW50ICgqZm4pKHZvaWQgKiksIHZvaWQgKmFyZywgY29uc3QgY2hhciAqbmFtZSxcbjI3OTc6XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4yNzk4Olx0e1xuMjc5OTpcdFx0c3RydWN0IGtlcm5lbF9jbG9uZV9hcmdzIGFyZ3MgPSB7XG4yODAwOlx0XHRcdC5mbGFnc1x0XHQ9ICgoZmxhZ3MgfCBDTE9ORV9WTSB8IENMT05FX1VOVFJBQ0VEKSBcdTAwMjYgfkNTSUdOQUwpLFxuMjgwMTpcdFx0XHQuZXhpdF9zaWduYWxcdD0gKGZsYWdzIFx1MDAyNiBDU0lHTkFMKSxcbjI4MDI6XHRcdFx0LmZuXHRcdD0gZm4sXG4yODAzOlx0XHRcdC5mbl9hcmdcdFx0PSBhcmcsXG4yODA0Olx0XHRcdC5uYW1lXHRcdD0gbmFtZSxcbjI4MDU6XHRcdFx0Lmt0aHJlYWRcdD0gMSxcbjI4MDY6XHRcdH07XG4yODA3Olx0XG4yODA4Olx0XHRyZXR1cm4ga2VybmVsX2Nsb25lKFx1MDAyNmFyZ3MpO1xuMjgwOTpcdH1cbjI4MTA6XHRcbjI4MTE6XHQvKlxuMjgxMjpcdCAqIENyZWF0ZSBhIHVzZXIgbW9kZSB0aHJlYWQuXG4yODEzOlx0ICovXG4yODE0Olx0cGlkX3QgdXNlcl9tb2RlX3RocmVhZChpbnQgKCpmbikodm9pZCAqKSwgdm9pZCAqYXJnLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxuMjgxNTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDc6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcyMjEKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOgoKKipLZXJuZWwgVGhyZWFkIENyZWF0aW9uOiBBIERlZXAgRGl2ZSoqCgpBbHJpZ2h0LCBzbyBJIHdhcyB1bmRlciB0aGUgaW1wcmVzc2lvbiB0aGF0IHVzaW5nIGBrZXJuZWxfdGhyZWFkYCB3b3VsZCBpbXBsaWNpdGx5IGhhbmRsZSBmaWxlc3lzdGVtIGNvbnRleHQgY2xvbmluZywgYnV0IHRoYXQmIzM5O3MgaW5jb3JyZWN0LiBJIG5lZWQgdG8gZXhwbGljaXRseSBoYW5kbGUgaXQgaWYgSSB3YW50IHRoYXQuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgbWFpbnRhaW5pbmcgcHJvcGVyIGlzb2xhdGlvbiwgYXMgSSBuZWVkIHRvIGJlIHN1cmUgdGhlIG5ld2x5IGNyZWF0ZWQgdGhyZWFkIG9wZXJhdGVzIHdpdGggdGhlIGNvcnJlY3QgZmlsZXN5c3RlbSBuYW1lc3BhY2UuCgpOb3csIGEgcXVpY2sgY2hlY2suLi5kb2VzIGBrdGhyZWFkX2NyZWF0ZWAgdXNlIGBrZXJuZWxfdGhyZWFkYCBpbnRlcm5hbGx5PyBJIG5lZWQgdG8gY2xhcmlmeSB0aGF0IGRlcGVuZGVuY3kuIElmIGl0IGRvZXMsIHRoZW4gdGhlIGltcGxpY2F0aW9ucyBleHRlbmQgdG8gYW55IHVzZSBvZiBga3RocmVhZF9jcmVhdGVgIGFzIHdlbGwuIExldCBtZSBqdW1wIGludG8gdGhlIGNvZGUgYW5kIHZlcmlmeS4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBsb29rIGF0IGBrdGhyZWFkX2NyZWF0ZV9vbl9ub2RlYCBpbiBga2VybmVsL2t0aHJlYWQuY2AuIFRoYXQgc2hvdWxkIGNsZWFyIHRoaW5ncyB1cC4gTmVlZCB0byBlbnN1cmUgdGhpcyBpcyBoYW5kbGVkIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDc6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2VybmVsX3RocmVhZC4qa3RocmVhZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L21haW4uYz02NzE9c3RhdGljIG5vaW5saW5lIHZvaWQgX19yZWYgX19ub3JldHVybiByZXN0X2luaXQodm9pZClcbi0tXG5pbml0L21haW4uYy02OTQtXHRudW1hX2RlZmF1bHRfcG9saWN5KCk7XG5pbml0L21haW4uYzo2OTU6XHRwaWQgPSBrZXJuZWxfdGhyZWFkKGt0aHJlYWRkLCBOVUxMLCBOVUxMLCBDTE9ORV9GUyB8IENMT05FX0ZJTEVTKTtcbmluaXQvbWFpbi5jLTY5Ni1cdHJjdV9yZWFkX2xvY2soKTtcbi0tXG5rZXJuZWwva3RocmVhZC5jPTQ1MT1zdGF0aWMgdm9pZCBjcmVhdGVfa3RocmVhZChzdHJ1Y3Qga3RocmVhZF9jcmVhdGVfaW5mbyAqY3JlYXRlKVxuLS1cbmtlcm5lbC9rdGhyZWFkLmMtNDU4LVx0LyogV2Ugd2FudCBvdXIgb3duIHNpZ25hbCBoYW5kbGVyICh3ZSB0YWtlIG5vIHNpZ25hbHMgYnkgZGVmYXVsdCkuICovXG5rZXJuZWwva3RocmVhZC5jOjQ1OTpcdHBpZCA9IGtlcm5lbF90aHJlYWQoa3RocmVhZCwgY3JlYXRlLCBjcmVhdGUtXHUwMDNlZnVsbF9uYW1lLFxua2VybmVsL2t0aHJlYWQuYy00NjAtXHRcdFx0ICAgIENMT05FX0ZTIHwgQ0xPTkVfRklMRVMgfCBTSUdDSExEKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDc6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc3MjQKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgTGluZSBvZiBSZWFzb25pbmcgQWJvdXQga3RocmVhZCBGaWxlc3lzdGVtIENvbnRleHQqKgoKT2theSwgaGVyZSYjMzk7cyBob3cgdGhpcyBjbGlja3MgaW50byBwbGFjZSBpbiBteSBtaW5kLiBTbywgYGt0aHJlYWRkYCBnZXRzIGNyZWF0ZWQgd2l0aCBgQ0xPTkVfRlNgIGFuZCBgQ0xPTkVfRklMRVNgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCYjMzk7cyB0aGUgcm9vdCBvZiBhbGwga2VybmVsIHRocmVhZHMuIFRoZW4sIEkgcmVtZW1iZXIgdGhhdCBgY3JlYXRlX2t0aHJlYWRgICphbHNvKiB1c2VzIGBDTE9ORV9GU2AgYW5kIGBDTE9ORV9GSUxFU2AuIFRoYXQgbWVhbnMgdGhhdCAqYWxsKiBrdGhyZWFkcyBhcmUgc2hhcmluZyB0aGUgYGluaXRfZnNgIHN0cnVjdHVyZS4KCkFoYSEgU28sIGlmIHRoZXkgc2hhcmUgYGluaXRfZnNgLCBhbmQgYGluaXRfbW91bnRfdHJlZSgpYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBldmVudHVhbGx5IHNldHMgdXAgYGluaXRfZnMucm9vdGAgYW5kIGBpbml0X2ZzLnB3ZGAgKHRoZSByb290IGFuZCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5KSwgdGhlbiAqZXZlcnkqIGt0aHJlYWQgd2lsbCBzZWUgdGhvc2UgY2hhbmdlcyBnbG9iYWxseS4gVGhhdCBleHBsYWlucyBpdCEgSXQgbWVhbnMgbm8ga3RocmVhZCB3aWxsIGV2ZXIgaGF2ZSBhIG51bGwgcm9vdCBvciBjd2QgKmFmdGVyKiBgaW5pdF9tb3VudF90cmVlKClgIHJ1bnMuIEFuZCByZWFsbHksIGl0IG1ha2VzIHNlbnNlLCBiZWNhdXNlIGJlZm9yZSBgaW5pdF9tb3VudF90cmVlKClgIGRvZXMgaXRzIHdvcmssIG5vIGt0aHJlYWQgY2FuIGV2ZW4gKmF0dGVtcHQqIHRvIGRvIGFueSBwYXRoIHJlc29sdXRpb24gYmVjYXVzZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBmaWxlc3lzdGVtcyBtb3VudGVkIHlldCEKCk5vdywgdGhlIG5hZ2dpbmcgcXVlc3Rpb246IHdoYXQgYWJvdXQgdGhvc2UgYGlvX3VyaW5nYCB3b3JrZXIgdGhyZWFkcz8gSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGBpb191cmluZ2Agd29ya2VyIHRocmVhZCBjcmVhdGlvbiBsb2dpYyB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgc29tZXRoaW5nLiBJJiMzOTtsbCBtYWtlIGEgbWVudGFsIG5vdGUgdG8gZG8gdGhhdCBuZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwNzoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjcmVhdGVfaW9fd29ya2VyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2lvLXdxLmM9MTM5PXN0cnVjdCBpb19jYl9jYW5jZWxfZGF0YSB7XG4tLVxuaW9fdXJpbmcvaW8td3EuYy0xNDYtXG5pb191cmluZy9pby13cS5jOjE0NzpzdGF0aWMgYm9vbCBjcmVhdGVfaW9fd29ya2VyKHN0cnVjdCBpb193cSAqd3EsIHN0cnVjdCBpb193cV9hY2N0ICphY2N0KTtcbmlvX3VyaW5nL2lvLXdxLmMtMTQ4LXN0YXRpYyB2b2lkIGlvX3dxX2RlY19ydW5uaW5nKHN0cnVjdCBpb193b3JrZXIgKndvcmtlcik7XG4tLVxuaW9fdXJpbmcvaW8td3EuYz0zMjM9c3RhdGljIGJvb2wgaW9fd3FfY3JlYXRlX3dvcmtlcihzdHJ1Y3QgaW9fd3EgKndxLCBzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdClcbi0tXG5pb191cmluZy9pby13cS5jLTM0MC1cdGF0b21pY19pbmMoXHUwMDI2d3EtXHUwMDNld29ya2VyX3JlZnMpO1xuaW9fdXJpbmcvaW8td3EuYzozNDE6XHRyZXR1cm4gY3JlYXRlX2lvX3dvcmtlcih3cSwgYWNjdCk7XG5pb191cmluZy9pby13cS5jLTM0Mi19XG4tLVxuaW9fdXJpbmcvaW8td3EuYz0zNTE9c3RhdGljIHZvaWQgY3JlYXRlX3dvcmtlcl9jYihzdHJ1Y3QgY2FsbGJhY2tfaGVhZCAqY2IpXG4tLVxuaW9fdXJpbmcvaW8td3EuYy0zNzYtXHRpZiAoZG9fY3JlYXRlKSB7XG5pb191cmluZy9pby13cS5jOjM3NzpcdFx0Y3JlYXRlX2lvX3dvcmtlcih3cSwgYWNjdCk7XG5pb191cmluZy9pby13cS5jLTM3OC1cdH0gZWxzZSB7XG4tLVxuaW9fdXJpbmcvaW8td3EuYz04ODM9c3RhdGljIHZvaWQgaW9fd29ya3F1ZXVlX2NyZWF0ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuaW9fdXJpbmcvaW8td3EuYy04OTItXG5pb191cmluZy9pby13cS5jOjg5MzpzdGF0aWMgYm9vbCBjcmVhdGVfaW9fd29ya2VyKHN0cnVjdCBpb193cSAqd3EsIHN0cnVjdCBpb193cV9hY2N0ICphY2N0KVxuaW9fdXJpbmcvaW8td3EuYy04OTQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwNzoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODY2NwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYGNyZWF0ZV9pb193b3JrZXJgKioKCk9rYXksIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBpb191cmluZ2AgaW1wbGVtZW50YXRpb24gYmV0dGVyLCBhbmQgdGhlIGZ1bmN0aW9uIGBjcmVhdGVfaW9fd29ya2VyYCBpbiBgaW9fdXJpbmcvaW8td3EuY2Agc2VlbXMgbGlrZSBhIGtleSBjb21wb25lbnQuIEkmIzM5O20gYXNzdW1pbmcgdGhpcyBpcyB3aGVyZSB0aGUgYWN0dWFsIHdvcmtlciB0aHJlYWRzIGFyZSBzcGF3bmVkIGFuZCBpbml0aWFsaXplZCBmb3IgdGhlIElPIHF1ZXVlLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGV5JiMzOTtyZSBtYW5hZ2VkLCB3aGF0IHJlc291cmNlcyBhcmUgYWxsb2NhdGVkLCBhbmQgaG93IHRoZXkmIzM5O3JlIHRpZWQgdG8gdGhlIHN1Ym1pc3Npb24gYW5kIGNvbXBsZXRpb24gcXVldWVzLiBJcyB0aGVyZSBhIHRocmVhZCBwb29sIGludm9sdmVkLCBvciBhcmUgdGhleSBkZWRpY2F0ZWQgdG8gZWFjaCBxdWV1ZT8gV2hhdCBhcmd1bWVudHMgYXJlIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYXJlYXMgZm9yIHBvdGVudGlhbCBjb250ZW50aW9uIG9yIGJvdHRsZW5lY2tzIGluIHRoaXMgc2VjdGlvbj8gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIHRvIGxvb2sgZm9yIHRoaW5ncyBsaWtlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIChtdXRleGVzLCBzZW1hcGhvcmVzLCBhdG9taWMgb3BlcmF0aW9ucyksIHRocmVhZCBjcmVhdGlvbiBkZXRhaWxzIChrZXJuZWwgY2FsbHMsIHNjaGVkdWxpbmcgaGludHMpLCBhbmQgYW55IGluaXRpYWxpemF0aW9uIG9mIHBlci13b3JrZXIgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gcGVyZm9ybWFuY2Ugb3IgcmVzb3VyY2UgbWFuYWdlbWVudC4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZyBhcyB3ZWxsOyBpcyBpdCByb2J1c3QsIG9yIGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgZmFpbHVyZSBzY2VuYXJpb3M/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA3OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW9fdXJpbmcvaW8td3EuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg5MywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODkzOlx0c3RhdGljIGJvb2wgY3JlYXRlX2lvX3dvcmtlcihzdHJ1Y3QgaW9fd3EgKndxLCBzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdClcbiA4OTQ6XHR7XG4gODk1Olx0XHRzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXI7XG4gODk2Olx0XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaztcbiA4OTc6XHRcbiA4OTg6XHRcdF9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTtcbiA4OTk6XHRcbiA5MDA6XHRcdHdvcmtlciA9IGt6YWxsb2Nfb2JqKCp3b3JrZXIpO1xuIDkwMTpcdFx0aWYgKCF3b3JrZXIpIHtcbiA5MDI6XHRmYWlsOlxuIDkwMzpcdFx0XHRhdG9taWNfZGVjKFx1MDAyNmFjY3QtXHUwMDNlbnJfcnVubmluZyk7XG4gOTA0Olx0XHRcdHJhd19zcGluX2xvY2soXHUwMDI2YWNjdC1cdTAwM2V3b3JrZXJzX2xvY2spO1xuIDkwNTpcdFx0XHRhY2N0LVx1MDAzZW5yX3dvcmtlcnMtLTtcbiA5MDY6XHRcdFx0cmF3X3NwaW5fdW5sb2NrKFx1MDAyNmFjY3QtXHUwMDNld29ya2Vyc19sb2NrKTtcbiA5MDc6XHRcdFx0aW9fd29ya2VyX3JlZl9wdXQod3EpO1xuIDkwODpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gOTA5Olx0XHR9XG4gOTEwOlx0XG4gOTExOlx0XHRyZWZjb3VudF9zZXQoXHUwMDI2d29ya2VyLVx1MDAzZXJlZiwgMSk7XG4gOTEyOlx0XHR3b3JrZXItXHUwMDNld3EgPSB3cTtcbiA5MTM6XHRcdHdvcmtlci1cdTAwM2VhY2N0ID0gYWNjdDtcbiA5MTQ6XHRcdHJhd19zcGluX2xvY2tfaW5pdChcdTAwMjZ3b3JrZXItXHUwMDNlbG9jayk7XG4gOTE1Olx0XHRpbml0X2NvbXBsZXRpb24oXHUwMDI2d29ya2VyLVx1MDAzZXJlZl9kb25lKTtcbiA5MTY6XHRcbiA5MTc6XHRcdHRzayA9IGNyZWF0ZV9pb190aHJlYWQoaW9fd3Ffd29ya2VyLCB3b3JrZXIsIE5VTUFfTk9fTk9ERSk7XG4gOTE4Olx0XHRpZiAoIUlTX0VSUih0c2spKSB7XG4gOTE5Olx0XHRcdGlvX2luaXRfbmV3X3dvcmtlcih3cSwgYWNjdCwgd29ya2VyLCB0c2spO1xuIDkyMDpcdFx0fSBlbHNlIGlmICghaW9fc2hvdWxkX3JldHJ5X3RocmVhZCh3b3JrZXIsIFBUUl9FUlIodHNrKSkpIHtcbiA5MjE6XHRcdFx0a2ZyZWUod29ya2VyKTtcbiA5MjI6XHRcdFx0Z290byBmYWlsO1xuIDkyMzpcdFx0fSBlbHNlIHtcbiA5MjQ6XHRcdFx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2d29ya2VyLVx1MDAzZXdvcmssIGlvX3dvcmtxdWV1ZV9jcmVhdGUpO1xuIDkyNTpcdFx0XHRxdWV1ZV9jcmVhdGVfd29ya2VyX3JldHJ5KHdvcmtlcik7XG4gOTI2Olx0XHR9XG4gOTI3Olx0XG4gOTI4Olx0XHRyZXR1cm4gdHJ1ZTtcbiA5Mjk6XHR9XG4gOTMwOlx0XG4gOTMxOlx0LypcbiA5MzI6XHQgKiBJdGVyYXRlIHRoZSBwYXNzZWQgaW4gbGlzdCBhbmQgY2FsbCB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gZm9yIGVhY2hcbiA5MzM6XHQgKiB3b3JrZXIgdGhhdCBpc24mIzM5O3QgZXhpdGluZ1xuIDkzNDpcdCAqL1xuIDkzNTpcdHN0YXRpYyBib29sIGlvX2FjY3RfZm9yX2VhY2hfd29ya2VyKHN0cnVjdCBpb193cV9hY2N0ICphY2N0LFxuIDkzNjpcdFx0XHRcdFx0ICAgIGJvb2wgKCpmdW5jKShzdHJ1Y3QgaW9fd29ya2VyICosIHZvaWQgKiksXG4gOTM3Olx0XHRcdFx0XHQgICAgdm9pZCAqZGF0YSlcbiA5Mzg6XHR7XG4gOTM5Olx0XHRzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXI7XG4gOTQwOlx0XHRib29sIHJldCA9IGZhbHNlO1xuIDk0MTpcdFxuIDk0MjpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uod29ya2VyLCBcdTAwMjZhY2N0LVx1MDAzZWFsbF9saXN0LCBhbGxfbGlzdCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwNzoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTcyNgoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBjcmVhdGVfaW9fdGhyZWFkYCoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IGEgY2FsbCB0byBgY3JlYXRlX2lvX3RocmVhZGAgaGVyZS4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIHRoYXQgZnVuY3Rpb24uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoZSBvdmVyYWxsIHN5c3RlbSBhcmNoaXRlY3R1cmUsIGVzcGVjaWFsbHkgaG93IGl0JiMzOTtzIGludGVyZmFjaW5nIHdpdGggb3RoZXIgdGhyZWFkcywgYW55IHNoYXJlZCByZXNvdXJjZXMsIGFuZCB0aGUgc2NoZWR1bGluZyBtZWNoYW5pc20uIFdoYXQmIzM5O3MgdGhlIHRocmVhZCBhZmZpbml0eT8gV2hhdCYjMzk7cyB0aGUgcHJpb3JpdHk/IFdoYXQgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMsIGxpa2UgbXV0ZXhlcyBvciBjb25kaXRpb24gdmFyaWFibGVzLCBhcmUgYmVpbmcgdXNlZCB3aXRoaW4gdGhpcyBjb250ZXh0PyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBkZWFkbG9jayBzY2VuYXJpb3MgSSBuZWVkIHRvIGNvbnNpZGVyPyBJcyB0aGlzIHRocmVhZCBwcmltYXJpbHkgSS9PLWJvdW5kLCBDUFUtYm91bmQsIG9yIGEgbWl4IG9mIGJvdGg/IFRoaXMgaW5pdGlhbCBpbnZlc3RpZ2F0aW9uIGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCByYWNlIGNvbmRpdGlvbnMsIGFuZCBvdmVyYWxsIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBvZiB0aGlzIHBvcnRpb24gb2YgdGhlIGNvZGViYXNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgdGhyZWFkZWQgbW9kZWwgaXMgbm90IGNyZWF0aW5nIGEgbmV3IHBlcmZvcm1hbmNlIGlzc3VlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwNzoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjcmVhdGVfaW9fdGhyZWFkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2NoZWQvdGFzay5oPTk5PXN0cnVjdCB0YXNrX3N0cnVjdCAqY29weV9wcm9jZXNzKHN0cnVjdCBwaWQgKnBpZCwgaW50IHRyYWNlLCBpbnQgbm9kZSxcbmluY2x1ZGUvbGludXgvc2NoZWQvdGFzay5oLTEwMC1cdFx0XHRcdCBzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgKmFyZ3MpO1xuaW5jbHVkZS9saW51eC9zY2hlZC90YXNrLmg6MTAxOnN0cnVjdCB0YXNrX3N0cnVjdCAqY3JlYXRlX2lvX3RocmVhZChpbnQgKCpmbikodm9pZCAqKSwgdm9pZCAqYXJnLCBpbnQgbm9kZSk7XG5pbmNsdWRlL2xpbnV4L3NjaGVkL3Rhc2suaC0xMDItc3RydWN0IHRhc2tfc3RydWN0ICpmb3JrX2lkbGUoaW50KTtcbi0tXG5pb191cmluZy9pby13cS5jPTg0MT1zdGF0aWMgdm9pZCBjcmVhdGVfd29ya2VyX2NvbnQoc3RydWN0IGNhbGxiYWNrX2hlYWQgKmNiKVxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtODUxLVx0YWNjdCA9IGlvX3dxX2dldF9hY2N0KHdvcmtlcik7XG5pb191cmluZy9pby13cS5jOjg1MjpcdHRzayA9IGNyZWF0ZV9pb190aHJlYWQoaW9fd3Ffd29ya2VyLCB3b3JrZXIsIE5VTUFfTk9fTk9ERSk7XG5pb191cmluZy9pby13cS5jLTg1My1cdGlmICghSVNfRVJSKHRzaykpIHtcbi0tXG5pb191cmluZy9pby13cS5jPTg5Mz1zdGF0aWMgYm9vbCBjcmVhdGVfaW9fd29ya2VyKHN0cnVjdCBpb193cSAqd3EsIHN0cnVjdCBpb193cV9hY2N0ICphY2N0KVxuLS1cbmlvX3VyaW5nL2lvLXdxLmMtOTE2LVxuaW9fdXJpbmcvaW8td3EuYzo5MTc6XHR0c2sgPSBjcmVhdGVfaW9fdGhyZWFkKGlvX3dxX3dvcmtlciwgd29ya2VyLCBOVU1BX05PX05PREUpO1xuaW9fdXJpbmcvaW8td3EuYy05MTgtXHRpZiAoIUlTX0VSUih0c2spKSB7XG4tLVxuaW9fdXJpbmcvc3Fwb2xsLmM9NDM2PV9fY29sZCBpbnQgaW9fc3Ffb2ZmbG9hZF9jcmVhdGUoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tLVxuaW9fdXJpbmcvc3Fwb2xsLmMtNTA3LVx0XHRzcWQtXHUwMDNldGFza190Z2lkID0gY3VycmVudC1cdTAwM2V0Z2lkO1xuaW9fdXJpbmcvc3Fwb2xsLmM6NTA4Olx0XHR0c2sgPSBjcmVhdGVfaW9fdGhyZWFkKGlvX3NxX3RocmVhZCwgc3FkLCBOVU1BX05PX05PREUpO1xuaW9fdXJpbmcvc3Fwb2xsLmMtNTA5LVx0XHRpZiAoSVNfRVJSKHRzaykpIHtcbi0tXG5rZXJuZWwvZm9yay5jPTI2NDY9c3RydWN0IHRhc2tfc3RydWN0ICogX19pbml0IGZvcmtfaWRsZShpbnQgY3B1KVxuLS1cbmtlcm5lbC9mb3JrLmMtMjY3MS0gKi9cbmtlcm5lbC9mb3JrLmM6MjY3MjpzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNyZWF0ZV9pb190aHJlYWQoaW50ICgqZm4pKHZvaWQgKiksIHZvaWQgKmFyZywgaW50IG5vZGUpXG5rZXJuZWwvZm9yay5jLTI2NzMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwNzoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDU4NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGBjcmVhdGVfaW9fdGhyZWFkYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgSS9PIHRocmVhZHMgYXJlIGNyZWF0ZWQuIExldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gYGNyZWF0ZV9pb190aHJlYWRgIHdpdGhpbiBga2VybmVsL2ZvcmsuY2AuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4sIGdpdmVuIHRoYXQgSSYjMzk7bSBkZWFsaW5nIHdpdGggdGhlIGNyZWF0aW9uIHByb2Nlc3MuIEkmIzM5O20gaG9waW5nIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgbWVjaGFuaWNzIGludm9sdmVkLCBsb29raW5nIGZvciBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBsb3ctbGV2ZWwgZGV0YWlscyBvZiBzZXR0aW5nIHVwIHRoZXNlIHRocmVhZHMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgaW5mb3JtYXRpb24gYWJvdXQgcmVzb3VyY2UgYWxsb2NhdGlvbiwgdGhyZWFkIHN0cnVjdHVyZXMsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIGZvcmtpbmcgcHJvY2VzcyBvdmVyYWxsLiBIb3BlZnVsbHkgdGhpcyB3aWxsIHNoZWQgbGlnaHQgb24gdGhlIGNvcmUgaW1wbGVtZW50YXRpb24gYW5kIGFueSBwb3RlbnRpYWwgbnVhbmNlcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBjcmVhdGlvbiBvZiB0aGUgSS9PIHRocmVhZCBhbmQgdGhlIGNvbnRleHQgb2YgaXRzIHBhcmVudCBwcm9jZXNzLiBJIGFtIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHRoZSBzeXN0ZW0gY2FsbHMgYW5kIGludGVybmFsIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA3OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2ZvcmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI2NzIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjY3MjpcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3JlYXRlX2lvX3RocmVhZChpbnQgKCpmbikodm9pZCAqKSwgdm9pZCAqYXJnLCBpbnQgbm9kZSlcbjI2NzM6XHR7XG4yNjc0Olx0XHR1bnNpZ25lZCBsb25nIGZsYWdzID0gQ0xPTkVfRlN8Q0xPTkVfRklMRVN8Q0xPTkVfU0lHSEFORHxDTE9ORV9USFJFQUR8XG4yNjc1Olx0XHRcdFx0ICAgICAgQ0xPTkVfSU98Q0xPTkVfVk18Q0xPTkVfVU5UUkFDRUQ7XG4yNjc2Olx0XHRzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgYXJncyA9IHtcbjI2Nzc6XHRcdFx0LmZsYWdzXHRcdD0gZmxhZ3MsXG4yNjc4Olx0XHRcdC5mblx0XHQ9IGZuLFxuMjY3OTpcdFx0XHQuZm5fYXJnXHRcdD0gYXJnLFxuMjY4MDpcdFx0XHQuaW9fdGhyZWFkXHQ9IDEsXG4yNjgxOlx0XHRcdC51c2VyX3dvcmtlclx0PSAxLFxuMjY4MjpcdFx0fTtcbjI2ODM6XHRcbjI2ODQ6XHRcdHJldHVybiBjb3B5X3Byb2Nlc3MoTlVMTCwgMCwgbm9kZSwgXHUwMDI2YXJncyk7XG4yNjg1Olx0fVxuMjY4NjpcdFxuMjY4NzpcdC8qXG4yNjg4Olx0ICogIE9rLCB0aGlzIGlzIHRoZSBtYWluIGZvcmstcm91dGluZS5cbjI2ODk6XHQgKlxuMjY5MDpcdCAqIEl0IGNvcGllcyB0aGUgcHJvY2VzcywgYW5kIGlmIHN1Y2Nlc3NmdWwga2ljay1zdGFydHNcbjI2OTE6XHQgKiBpdCBhbmQgd2FpdHMgZm9yIGl0IHRvIGZpbmlzaCB1c2luZyB0aGUgVk0gaWYgcmVxdWlyZWQuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA3OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMTU5CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmNlcm5zIFJlZ2FyZGluZyBpb191cmluZyBhbmQgRmlsZXN5c3RlbSBDb250ZXh0KioKCk9rYXksIHNvIGBjcmVhdGVfaW9fdGhyZWFkYCB1c2VzIGBDTE9ORV9GU2AuIFRoYXQgbWVhbnMgdGhlIG5ldyB0aHJlYWQgaW5oZXJpdHMgdGhlIGNhbGxlciYjMzk7cyBgZnNfc3RydWN0YC4gSGFuZyBvbiBhIHNlY29uZC4uLiBzaW5jZSB0aGUgY2FsbGVyIGlzIGEgdXNlciBwcm9jZXNzLCBpdCYjMzk7bGwgaGF2ZSBhICp2YWxpZCogYGZzX3N0cnVjdGAsIHdpdGggYWN0dWFsIGByb290YCBhbmQgYHB3ZGAgcG9pbnRlcnMuIEJ1dCB3aGF0IGlmIHRoZSB1c2VyIGNhbGxzIGB1bnNoYXJlKENMT05FX0ZTKWAgYmVmb3JlIGFueXRoaW5nIGFjdHVhbGx5IGhhcHBlbnM/CgpUaGUgaW9fdXJpbmcgd29ya2VyIHRocmVhZCAqc2hhcmVzKiB0aGF0IGBmc19zdHJ1Y3RgLiBBbmQgdGhhdCBoYXMgc29tZSBpbnRlcmVzdGluZyBpbXBsaWNhdGlvbnMuIElmIHRoZSB1c2VyIHByb2Nlc3MgZXhpdHMsIHRoZSB3b3JrZXIgdGhyZWFkIGtlZXBzIHRoZSBgZnNfc3RydWN0YCBhbGl2ZS4gRG9lcyB0aGlzIG1ha2UgdGhlIHVzZXIgcHJvY2VzcyYjMzk7cyBmaWxlc3lzdGVtIGNvbnRleHQgcGVyc2lzdGVudCBmb3IgdGhlIHdvcmtlciB0aHJlYWQ/IFdoYXQgaGFwcGVucyBpZiB0aGUgdXNlciBwcm9jZXNzIGRvZXMgYSBgY2hyb290YD8gVGhhdCBtZWFucyB0aGUgd29ya2VyIHRocmVhZCBjYW4gc2VlIHRoYXQgbmV3IHJvb3QsIHRvby4KCk5vdywgaXMgdGhlcmUgKmFueSogd2F5IGZvciBhIHVzZXIgcHJvY2VzcyB0byBlbmQgdXAgd2l0aCBhIG51bGwgcm9vdCBvciBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5PyBObywgYGNocm9vdGAgYWJzb2x1dGVseSBuZWVkcyBhIHZhbGlkIHBhdGggdG8gd29yaywgYW5kIHRoZSBzYW1lIGdvZXMgZm9yIGBjaGRpcmAuCgpXYWl0LCB3aGF0IGFib3V0IG1vdW50IG5hbWVzcGFjZXM/IElmIHRoZSB1c2VyIHByb2Nlc3MgaXMgaW4gYSBtb3VudCBuYW1lc3BhY2UgYW5kIHRoYXQgbW91bnQgbmFtZXNwYWNlIGlzIGRlc3Ryb3llZD8gVGhlIGBmc19zdHJ1Y3RgIGlzIHN0aWxsIHBvaW50aW5nIGF0IHVubGlua2VkIGRlbnRyeSBzdHJ1Y3R1cmVzLCBidXQgdGhlIGBtbnRgIGZpZWxkIGlzbiYjMzk7dCBOVUxMISBTbywgZG9lcyB0aGF0IG1lYW4gdGhhdCB0aGVyZSBpcyBubyB3YXkgdG8gc2V0IGBmcy0mZ3Q7cm9vdC5tbnRgIHRvIE5VTEw/IEkgbmVlZCB0byBnbyBiYWNrIGFuZCBkb3VibGUgY2hlY2sgYGZzL2ZzX3N0cnVjdC5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDc6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnMtXHUwMDNlcm9vdC5tbnQgPSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uYW1lc3BhY2UuYz00MjMyPXN0cnVjdCBtbnRfbmFtZXNwYWNlICpjb3B5X21udF9ucyh1NjQgZmxhZ3MsIHN0cnVjdCBtbnRfbmFtZXNwYWNlICpucyxcbi0tXG5mcy9uYW1lc3BhY2UuYy00Mjg3LVxuZnMvbmFtZXNwYWNlLmM6NDI4ODpcdFx0XHRuZXdfZnMtXHUwMDNlcm9vdC5tbnQgPSBtbnRnZXQoXHUwMDI2bmV3LVx1MDAzZW1udCk7XG5mcy9uYW1lc3BhY2UuYy00Mjg5LVx0XHRcdG5ld19mcy1cdTAwM2Vyb290LmRlbnRyeSA9IGRnZXQobmV3LVx1MDAzZW1udC5tbnRfcm9vdCk7XG4tLVxuZnMvbmFtZXNwYWNlLmMtNDMxMC1cdFx0XHRcdFx0b2xkX3Jvb3QubW50ID0gbmV3X2ZzLVx1MDAzZXJvb3QubW50O1xuZnMvbmFtZXNwYWNlLmM6NDMxMTpcdFx0XHRcdFx0bmV3X2ZzLVx1MDAzZXJvb3QubW50ID0gbW50Z2V0KFx1MDAyNnEtXHUwMDNlbW50KTtcbmZzL25hbWVzcGFjZS5jLTQzMTItXHRcdFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA3OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxOTc2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBjb2RlOgoKKipOYXZpZ2F0aW5nIEZpbGVzeXN0ZW0gTmFtZXNwYWNlIENvcHlpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBtb3VudCBuYW1lc3BhY2VzIGFyZSBjb3BpZWQuIEl0JiMzOTtzIGhpdHRpbmcgbWUgdGhhdCBgY29weV9tbnRfbnNgIGlzIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB0aGUgYG5ld19mcy0mZ3Q7cm9vdC5tbnRgIHZhbHVlLiBJbnRlcmVzdGluZy4gTXkgZ3V0IHRlbGxzIG1lIHRoaXMgaXMgYSBrZXkgc3RlcCBpbiBjcmVhdGluZyB0aGUgbmV3IG5hbWVzcGFjZS4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGF0JiMzOTtzIHRoZSBpbnRlbnRpb24sIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCBhc3NpZ25tZW50LiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgY29kZSBhcm91bmQgdGhlcmUsIGluIHBhcnRpY3VsYXIsIGBmcy9uYW1lc3BhY2UuY2AuIEkgaGF2ZSBhIGZlZWxpbmcgdGhlcmUgbWlnaHQgYmUgc3VidGxlIGRldGFpbHMgcmVnYXJkaW5nIHJlZmVyZW5jZXMsIG93bmVyc2hpcCwgYW5kIHByb3BhZ2F0aW9uIG9mIGNoYW5nZXMgdGhhdCBhcmUgaW1wb3J0YW50IHRvIHRyYWNrIGRvd24gaW4gdGhlIGNvcHlpbmcgcHJvY2Vzcy4gSXQmIzM5O3MgYSBjcml0aWNhbCBhcmVhLCBzbyBJJiMzOTtsbCBzdGFydCB0aGVyZS4gSSYjMzk7bGwgZm9jdXMgb24gdGhlIGRhdGEgc3RydWN0dXJlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDc6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9uYW1lc3BhY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQyODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDI4MDpcdFx0XHQvKlxuNDI4MTpcdFx0XHQgKiBFbXB0eSBtb3VudCBuYW1lc3BhY2U6IG9ubHkgdGhlIHJvb3QgbW91bnQgZXhpc3RzLlxuNDI4MjpcdFx0XHQgKiBSZXNldCByb290IGFuZCBwd2QgdG8gdGhlIGNsb25lZCBtb3VudCYjMzk7cyByb290IGRlbnRyeS5cbjQyODM6XHRcdFx0ICovXG40Mjg0Olx0XHRcdGlmIChuZXdfZnMpIHtcbjQyODU6XHRcdFx0XHRvbGRfcm9vdCA9IG5ld19mcy1cdTAwM2Vyb290O1xuNDI4NjpcdFx0XHRcdG9sZF9wd2QgPSBuZXdfZnMtXHUwMDNlcHdkO1xuNDI4NzpcdFxuNDI4ODpcdFx0XHRcdG5ld19mcy1cdTAwM2Vyb290Lm1udCA9IG1udGdldChcdTAwMjZuZXctXHUwMDNlbW50KTtcbjQyODk6XHRcdFx0XHRuZXdfZnMtXHUwMDNlcm9vdC5kZW50cnkgPSBkZ2V0KG5ldy1cdTAwM2VtbnQubW50X3Jvb3QpO1xuNDI5MDpcdFxuNDI5MTpcdFx0XHRcdG5ld19mcy1cdTAwM2Vwd2QubW50ID0gbW50Z2V0KFx1MDAyNm5ldy1cdTAwM2VtbnQpO1xuNDI5MjpcdFx0XHRcdG5ld19mcy1cdTAwM2Vwd2QuZGVudHJ5ID0gZGdldChuZXctXHUwMDNlbW50Lm1udF9yb290KTtcbjQyOTM6XHRcdFx0fVxuNDI5NDpcdFx0XHRtbnRfYWRkX3RvX25zKG5ld19ucywgbmV3KTtcbjQyOTU6XHRcdFx0bmV3X25zLVx1MDAzZW5yX21vdW50cyYjNDM7JiM0Mzs7XG40Mjk2Olx0XHR9IGVsc2Uge1xuNDI5NzpcdFx0XHQvKlxuNDI5ODpcdFx0XHQgKiBGdWxsIGNvcHk6IHdhbGsgb2xkIGFuZCBuZXcgdHJlZXMgaW4gcGFyYWxsZWwsIHN3aXRjaGluZ1xuNDI5OTpcdFx0XHQgKiB0aGUgdHNrLVx1MDAzZWZzLVx1MDAzZSogZWxlbWVudHMgYW5kIG1hcmtpbmcgbmV3IHZmc21vdW50cyBhc1xuNDMwMDpcdFx0XHQgKiBiZWxvbmdpbmcgdG8gbmV3IG5hbWVzcGFjZS4gIFdlIGhhdmUgYWxyZWFkeSBhY3F1aXJlZCBhXG40MzAxOlx0XHRcdCAqIHByaXZhdGUgZnNfc3RydWN0LCBzbyB0c2stXHUwMDNlZnMtXHUwMDNlbG9jayBpcyBub3QgbmVlZGVkLlxuNDMwMjpcdFx0XHQgKi9cbjQzMDM6XHRcdFx0cCA9IG9sZDtcbjQzMDQ6XHRcdFx0cSA9IG5ldztcbjQzMDU6XHRcdFx0d2hpbGUgKHApIHtcbjQzMDY6XHRcdFx0XHRtbnRfYWRkX3RvX25zKG5ld19ucywgcSk7XG40MzA3Olx0XHRcdFx0bmV3X25zLVx1MDAzZW5yX21vdW50cyYjNDM7JiM0Mzs7XG40MzA4Olx0XHRcdFx0aWYgKG5ld19mcykge1xuNDMwOTpcdFx0XHRcdFx0aWYgKFx1MDAyNnAtXHUwMDNlbW50ID09IG5ld19mcy1cdTAwM2Vyb290Lm1udCkge1xuNDMxMDpcdFx0XHRcdFx0XHRvbGRfcm9vdC5tbnQgPSBuZXdfZnMtXHUwMDNlcm9vdC5tbnQ7XG40MzExOlx0XHRcdFx0XHRcdG5ld19mcy1cdTAwM2Vyb290Lm1udCA9IG1udGdldChcdTAwMjZxLVx1MDAzZW1udCk7XG40MzEyOlx0XHRcdFx0XHR9XG40MzEzOlx0XHRcdFx0XHRpZiAoXHUwMDI2cC1cdTAwM2VtbnQgPT0gbmV3X2ZzLVx1MDAzZXB3ZC5tbnQpIHtcbjQzMTQ6XHRcdFx0XHRcdFx0b2xkX3B3ZC5tbnQgPSBuZXdfZnMtXHUwMDNlcHdkLm1udDtcbjQzMTU6XHRcdFx0XHRcdFx0bmV3X2ZzLVx1MDAzZXB3ZC5tbnQgPSBtbnRnZXQoXHUwMDI2cS1cdTAwM2VtbnQpO1xuNDMxNjpcdFx0XHRcdFx0fVxuNDMxNzpcdFx0XHRcdH1cbjQzMTg6XHRcdFx0XHRwID0gbmV4dF9tbnQocCwgb2xkKTtcbjQzMTk6XHRcdFx0XHRxID0gbmV4dF9tbnQocSwgbmV3KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDc6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI4OTUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgZm9yIE5VTEwgTW91bnRzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBgbW50Z2V0YC4gVGhlIGRvY3VtZW50YXRpb24gaXMgY2xlYXIg4oCTIGBtbnRnZXRgIHNob3VsZCByZXR1cm4gdGhlIG1vdW50LCByaWdodD8gSXQgc2hvdWxkbiYjMzk7dCByZXR1cm4gYE5VTExgIGV2ZW4gaWYgdGhlIG1vdW50IGl0c2VsZiAqaXMqIGBOVUxMYC4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQuIFNvLCB0aGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzLCB3aGVyZSBjb3VsZCB3ZSBwb3NzaWJseSBlbmQgdXAgd2l0aCBhIHNpdHVhdGlvbiB3aGVyZSBgZnMtJmd0O3Jvb3QubW50YCBpcyBhY3R1YWxseSBzZXQgdG8gYE5VTExgPwoKSW5pdGlhbGx5LCBpdCBzZWVtZWQgbGlrZSB0aGUgb25seSBwbGFjZSB3YXMgaW4gdGhhdCBLVW5pdCB0ZXN0LCB3aGljaCBpcyBhIGJpZyByZWQgZmxhZy4gQnV0IHdhaXQsIEkgbmVlZCB0byBsb29rIGF0IHRoZSBwYXRjaCBkZXNjcmlwdGlvbiBhZ2Fpbi4gSXQgc3RhdGVzLCAmIzM0O2ZzOiBzdXBwb3J0IHRhc2tzIHdpdGggYSBudWxsIHJvb3Qgb3IgY3dkJiMzNDsuIEFoYSEgV2h5IHdvdWxkIHRoZXkgYWRkICp0aGlzKiBjYXBhYmlsaXR5PyBUaGlzIGlzIHRoZSBjb3JlIG9mIHRoZSBpc3N1ZS4gSXMgdGhlcmUgYW5vdGhlciBwYXRjaCBpbnRyb2R1Y2luZyBhbm9ueW1vdXMgdGFza3MgdGhhdCBtaWdodCBoYXZlIG5vIHJvb3Qgb3IgY3dkPyBJcyB0aGlzIHJlbGF0ZWQgdG8gYHZob3N0YCBvciBgaW9fdXJpbmdgIHRocmVhZHM/CgpOb3cgSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdGhlc2UgdGhyZWFkcyBhcmUgY3JlYXRlZC4gYGlvX3VyaW5nYCB0aHJlYWRzIGFyZSB0eXBpY2FsbHkgY3JlYXRlZCB3aXRoIGBDTE9ORV9GU2AsIHdoaWNoIHdvdWxkIG5vcm1hbGx5IGluY2x1ZGUgdGhlIGBmc19zdHJ1Y3RgLiBJcyB0aGVyZSBhIHBhdGNoIHRoYXQgKnJlbW92ZXMqIHRoaXMgYmVoYXZpb3I/IE9yIHBlcmhhcHMgdXNlcyBzb21ldGhpbmcgbGlrZSBga3RocmVhZF91c2VfbW1gPyBXYWl0LCBga3RocmVhZF91c2VfbW1gIGRvZXNuJiMzOTt0IG1vZGlmeSB0aGUgYGZzX3N0cnVjdGAuIFdoYXQgYWJvdXQgYHVuc2hhcmVfZnNfc3RydWN0KClgPyBJZiBhIHRhc2sgaGFzIG5vIHJvb3Qgb3IgY3dkLCB0aGF0IGltcGxpZXMgYW4gYW5vbnltb3VzIHRhc2suCgpPa2F5LCBsZXQmIzM5O3Mgc3RlcCBiYWNrIGFuZCBjb25zaWRlciB3aGF0IHRoZSBwYXRjaCAqYWN0dWFsbHkqIHNheXMuICYjMzQ7QSB0YXNrIG1heSBoYXZlIG5vIHJvb3QuJiMzNDsgYW5kICYjMzQ7QSB0YXNrIG1heSBoYXZlIG5vIGN3ZC4mIzM0OyBJZiB0aGlzIHBhdGNoIGlzIHRoZSAqb25seSogb25lLCB0aGVuIGl0JiMzOTtzIGp1c3QgYWRkaW5nIHRoZSBzdXBwb3J0LCBidXQgbm90aGluZyBjdXJyZW50bHkgdXNlcyBpdCwgZXhjZXB0IHRoZSBLVW5pdCB0ZXN0LCBhbmQgaXQmIzM5O3MgdW5yZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlLiBCdXQgd2FpdCwgdGhpcyBwYXRjaCBpc24mIzM5O3QganVzdCBhYm91dCBhIGh5cG90aGV0aWNhbCBzY2VuYXJpbyEgSXQgbW9kaWZpZXMgYSBidW5jaCBvZiBvdGhlciBjb3JlIGZpbGVzLCBsaWtlIGBmcy9uYW1laS5jYCwgYGZzL2RfcGF0aC5jYCwgYGZzL3Byb2MvYmFzZS5jYCwgYW5kIG1vcmUuCgpUaGlzIGlzIGNyaXRpY2FsLiBDb3VsZCBgZnMtJmd0O3Jvb3QubW50YCAqYWxyZWFkeSogYmUgYE5VTExgIGluIHNvbWUgKmV4aXN0aW5nKiBzY2VuYXJpbz8gSSBuZWVkIHRvIGxvb2sgYXQgYGV4aXRfZnNgIGFuZCBzZWUgaWYgYW55dGhpbmcgY2FuIHRyaWdnZXIgdGhhdCBzY2VuYXJpbywgZXZlbiBpZiBJIGRvbiYjMzk7dCBzZWUgYW55dGhpbmcgb2J2aW91cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDc6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9mc19zdHJ1Y3QuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgOTA6XHR2b2lkIGV4aXRfZnMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4gIDkxOlx0e1xuICA5MjpcdFx0c3RydWN0IGZzX3N0cnVjdCAqZnMgPSB0c2stXHUwMDNlZnM7XG4gIDkzOlx0XG4gIDk0Olx0XHRpZiAoZnMpIHtcbiAgOTU6XHRcdFx0aW50IGtpbGw7XG4gIDk2Olx0XHRcdHRhc2tfbG9jayh0c2spO1xuICA5NzpcdFx0XHRyZWFkX3NlcWxvY2tfZXhjbChcdTAwMjZmcy1cdTAwM2VzZXEpO1xuICA5ODpcdFx0XHR0c2stXHUwMDNlZnMgPSBOVUxMO1xuICA5OTpcdFx0XHRraWxsID0gIS0tZnMtXHUwMDNldXNlcnM7XG4gMTAwOlx0XHRcdHJlYWRfc2VxdW5sb2NrX2V4Y2woXHUwMDI2ZnMtXHUwMDNlc2VxKTtcbiAxMDE6XHRcdFx0dGFza191bmxvY2sodHNrKTtcbiAxMDI6XHRcdFx0aWYgKGtpbGwpXG4gMTAzOlx0XHRcdFx0ZnJlZV9mc19zdHJ1Y3QoZnMpO1xuIDEwNDpcdFx0fVxuIDEwNTpcdH1cbiAxMDY6XHRcbiAxMDc6XHRzdHJ1Y3QgZnNfc3RydWN0ICpjb3B5X2ZzX3N0cnVjdChzdHJ1Y3QgZnNfc3RydWN0ICpvbGQpXG4gMTA4Olx0e1xuIDEwOTpcdFx0c3RydWN0IGZzX3N0cnVjdCAqZnMgPSBrbWVtX2NhY2hlX2FsbG9jKGZzX2NhY2hlcCwgR0ZQX0tFUk5FTCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA3OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MDk4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBGaWxlc3lzdGVtIFVubW91bnQgTG9naWMqKgoKT2theSwgc28gYGV4aXRfZnNgIGlzIHN1cHBvc2VkIHRvIGNsZWFuIHVwIHRoZSBmaWxlc3lzdGVtIHN0YXRlIHdoZW4gYSB0YXNrIGV4aXRzLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHNldHRpbmcgYHRzay0mZ3Q7ZnNgIHRvIE5VTEwsIHdoaWNoIGlzIHRoZSBleHBlY3RlZCBiZWhhdmlvci4gQnV0IGhvbGQgb24gYSBzZWNvbmQuLi4gaXQgKmRvZXNuJiMzOTt0KiBhcHBlYXIgdG8gYmUgdW5saW5raW5nIHRoZSBtb3VudCBhdCBhbGwsIHNwZWNpZmljYWxseSBgZnMtJmd0O3Jvb3QubW50YCByZW1haW5zIGludGFjdC4gVGhpcyBzZWVtcyBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYy4gSWYgSSYjMzk7bSB1bmRlcnN0YW5kaW5nIHRoaXMgY29ycmVjdGx5LCBsYXRlciBjYWxscyB0byBhY2Nlc3MgdGhlIGZpbGVzeXN0ZW0gbWlnaHQgYmUgcmVmZXJlbmNpbmcgYSBzdGFsZSBvciBwb3RlbnRpYWxseSBkYW5nbGluZyBtb3VudCBwb2ludCwgcmlnaHQ/CgpJIHdvbmRlci4uLiBpZiBgdHNrLSZndDtmc2AgaXMgbm93IE5VTEwsIHdoYXQgaGFwcGVucyB3aGVuIHNvbWV0aGluZyB0cmllcyB0byBnZXQgdGhlIGZpbGVzeXN0ZW0gcm9vdCB1c2luZyBgZ2V0X2ZzX3Jvb3RgPyBXaWxsIGl0IHRyeSB0byBkZXJlZmVyZW5jZSBhIE5VTEwgcG9pbnRlcj8gVGhpcyBjb3VsZCBsZWFkIHRvIGEgc2VyaW91cyBvb3BzLiBCZXN0IHRvIGRvdWJsZS1jaGVjayB0aGUgYGdldF9mc19yb290YCBmdW5jdGlvbiBpbW1lZGlhdGVseS4gSSBuZWVkIHRvIGJlIGNlcnRhaW4gdGhlcmUmIzM5O3MgcHJvcGVyIE5VTEwgY2hlY2tpbmcgdGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgd2lsbCBiZWNvbWUgYW4gaXNzdWUsIGFuZCBpZiBzbywgaG93IHRvIHByZXZlbnQgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA3OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9mc19zdHJ1Y3QuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNTQ6XHRzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X2ZzX3Jvb3Qoc3RydWN0IGZzX3N0cnVjdCAqZnMsIHN0cnVjdCBwYXRoICpyb290KVxuICA1NTpcdHtcbiAgNTY6XHRcdHJlYWRfc2VxbG9ja19leGNsKFx1MDAyNmZzLVx1MDAzZXNlcSk7XG4gIDU3Olx0XHQqcm9vdCA9IGZzLVx1MDAzZXJvb3Q7XG4gIDU4Olx0XHRwYXRoX2dldChyb290KTtcbiAgNTk6XHRcdHJlYWRfc2VxdW5sb2NrX2V4Y2woXHUwMDI2ZnMtXHUwMDNlc2VxKTtcbiAgNjA6XHR9XG4gIDYxOlx0XG4gIDYyOlx0c3RhdGljIGlubGluZSB2b2lkIGdldF9mc19wd2Qoc3RydWN0IGZzX3N0cnVjdCAqZnMsIHN0cnVjdCBwYXRoICpwd2QpXG4gIDYzOlx0e1xuICA2NDpcdFx0cmVhZF9zZXFsb2NrX2V4Y2woXHUwMDI2ZnMtXHUwMDNlc2VxKTtcbiAgNjU6XHRcdCpwd2QgPSBmcy1cdTAwM2Vwd2Q7XG4gIDY2Olx0XHRwYXRoX2dldChwd2QpO1xuICA2NzpcdFx0cmVhZF9zZXF1bmxvY2tfZXhjbChcdTAwMjZmcy1cdTAwM2VzZXEpO1xuICA2ODpcdH1cbiAgNjk6XHRcbiAgNzA6XHRleHRlcm4gYm9vbCBjdXJyZW50X2Nocm9vdGVkKHZvaWQpO1xuICA3MTpcdFxuICA3MjpcdHN0YXRpYyBpbmxpbmUgaW50IGN1cnJlbnRfdW1hc2sodm9pZClcbiAgNzM6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA3OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0Njk5CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMTcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgTnVsbCBQb2ludGVyIERlcmVmZXJlbmNlcyBpbiBGaWxlc3lzdGVtIE9wZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIGBnZXRfZnNfcm9vdGAgZnVuY3Rpb24gYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgZmlsZSBzeXN0ZW0gc3RydWN0dXJlLiBJIHNlZSB0aGF0IGl0IGRlcmVmZXJlbmNlcyBgZnNgLCB3aGljaCBtZWFucyBpZiBgdHNrLSZndDtmc2AgaXMgbnVsbCwga2Fib29tLCB3ZSBnZXQgYW4gb29wcy4gQnV0IEkgcmVtZW1iZXIgdGhhdCBgZ2V0X2ZzX3Jvb3QoY3VycmVudC0mZ3Q7ZnMsIC4uLilgIHNob3VsZCBiZSBzYWZlIGJlY2F1c2UsIGluIGEgcnVubmluZyB0YXNrLCBgY3VycmVudC0mZ3Q7ZnNgIHNob3VsZCBuZXZlciBiZSBudWxsLCB1bmxlc3MgaXQmIzM5O3MgZXhpdGluZy4KCldhaXQgYSBzZWNvbmQsIHdoYXQgYWJvdXQgdGhlIGNhc2Ugd2hlcmUgYSB0YXNrIGNhbGxzIGBjaHJvb3RgIHdpdGggc29tZSBwYXRoIGFuZCB0aGVuIHRoYXQgcGF0aCBnZXRzIHVubW91bnRlZCB1bmRlcm5lYXRoIGl0PyBJIGhhdmUgdG8gY29uc2lkZXIgYWxsIGVkZ2UgY2FzZXMuCgpBaCwgYnV0IGBjaHJvb3RgIHBpbnMgdGhlIG1vdW50LiBTbywgZXZlbiBpZiB0aGUgdW5kZXJseWluZyBkZXZpY2UgaXMgZ29uZSwgdGhlIG1vdW50IHJlbWFpbnMuIEl0IGJlY29tZXMgYSBsYXp5IHVubW91bnQsIGJ1dCB0aGUgbW91bnQgb2JqZWN0IGl0c2VsZiBzdGF5cyBhbGl2ZS4gU28gdGhhdCBtZWFucyBgZnMtJmd0O3Jvb3QubW50YCBzaG91bGQgKm5ldmVyKiBiZSBudWxsIGFmdGVyIGEgYGNocm9vdGAsIG9yIGFtIEkgbWlzc2luZyBzb21ldGhpbmc/CgpOb3cgSSYjMzk7bSBzdHVjayBvbiB0aGlzLCB0aGUgbGluZ2VyaW5nIHF1ZXN0aW9uIGlzLCBhcmUgdGhlcmUgKmFueSogc2NlbmFyaW9zIGF0IGFsbCB3aGVyZSB3ZSBjYW4gZW5kIHVwIHdpdGggYGZzLSZndDtyb290Lm1udGAgYXMgYSBudWxsIHBvaW50ZXI/IEkgbmVlZCB0byBjaGVjay4gVG8gbWFrZSBzdXJlIEkgY292ZXIgYWxsIHRoZSBjYXNlcywgSSYjMzk7bSBnb2luZyB0byBzZWFyY2ggdGhyb3VnaCB0aGUgY29kZWJhc2UgZm9yIGV2ZXJ5IGluc3RhbmNlIHdoZXJlIGBmcy0mZ3Q7cm9vdC5tbnQgPSBOVUxMYCBvciBgZnMtJmd0O3B3ZC5tbnQgPSBOVUxMYCBpcyBzZXQgdG8gdmVyaWZ5IGFsbCBwb3NzaWJsZSBlZGdlIGNhc2VzLiBUaGlzIGlzIGNyaXRpY2FsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwNzoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtcXC5tbnQgPSBOVUxMJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2J0cmZzL3ZvbHVtZXMuYz03NDM9c3RhdGljIGJvb2wgaXNfc2FtZV9kZXZpY2Uoc3RydWN0IGJ0cmZzX2RldmljZSAqZGV2aWNlLCBjb25zdCBjaGFyICpuZXdfcGF0aClcbmZzL2J0cmZzL3ZvbHVtZXMuYy03NDQte1xuZnMvYnRyZnMvdm9sdW1lcy5jOjc0NTpcdHN0cnVjdCBwYXRoIG9sZCA9IHsgLm1udCA9IE5VTEwsIC5kZW50cnkgPSBOVUxMIH07XG5mcy9idHJmcy92b2x1bWVzLmM6NzQ2Olx0c3RydWN0IHBhdGggbmV3ID0geyAubW50ID0gTlVMTCwgLmRlbnRyeSA9IE5VTEwgfTtcbmZzL2J0cmZzL3ZvbHVtZXMuYy03NDctXHRjaGFyIEFVVE9fS0ZSRUUob2xkX3BhdGgpO1xuLS1cbmZzL25hbWVpLmM9NzU3PXN0YXRpYyB2b2lkIF9fc2V0X25hbWVpZGF0YShzdHJ1Y3QgbmFtZWlkYXRhICpwLCBpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUpXG4tLVxuZnMvbmFtZWkuYy03NjQtXHRwLVx1MDAzZXBhdGhuYW1lID0gbGlrZWx5KG5hbWUpID8gbmFtZS1cdTAwM2VuYW1lIDogXCYjMzQ7XCYjMzQ7O1xuZnMvbmFtZWkuYzo3NjU6XHRwLVx1MDAzZXBhdGgubW50ID0gTlVMTDtcbmZzL25hbWVpLmMtNzY2LVx0cC1cdTAwM2VwYXRoLmRlbnRyeSA9IE5VTEw7XG4tLVxuZnMvbmFtZWkuYz04NDM9c3RhdGljIHZvaWQgdGVybWluYXRlX3dhbGsoc3RydWN0IG5hbWVpZGF0YSAqbmQpXG4tLVxuZnMvbmFtZWkuYy04NTktXHRuZC1cdTAwM2VkZXB0aCA9IDA7XG5mcy9uYW1laS5jOjg2MDpcdG5kLVx1MDAzZXBhdGgubW50ID0gTlVMTDtcbmZzL25hbWVpLmMtODYxLVx0bmQtXHUwMDNlcGF0aC5kZW50cnkgPSBOVUxMO1xuLS1cbmZzL25hbWVpLmM9OTM1PXN0YXRpYyBib29sIHRyeV90b191bmxhenkoc3RydWN0IG5hbWVpZGF0YSAqbmQpXG4tLVxuZnMvbmFtZWkuYy05NTYtb3V0MTpcbmZzL25hbWVpLmM6OTU3Olx0bmQtXHUwMDNlcGF0aC5tbnQgPSBOVUxMO1xuZnMvbmFtZWkuYy05NTgtXHRuZC1cdTAwM2VwYXRoLmRlbnRyeSA9IE5VTEw7XG4tLVxuZnMvbmFtZWkuYz05NzY9c3RhdGljIGJvb2wgdHJ5X3RvX3VubGF6eV9uZXh0KHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4tLVxuZnMvbmFtZWkuYy0xMDE4LW91dDI6XG5mcy9uYW1laS5jOjEwMTk6XHRuZC1cdTAwM2VwYXRoLm1udCA9IE5VTEw7XG5mcy9uYW1laS5jLTEwMjAtb3V0MTpcbi0tXG5mcy9uYW1laS5jPTEwNTA9c3RhdGljIGludCBjb21wbGV0ZV93YWxrKHN0cnVjdCBuYW1laWRhdGEgKm5kKVxuLS1cbmZzL25hbWVpLmMtMTA2MS1cdFx0XHRpZiAobGlrZWx5KCEobmQtXHUwMDNlZmxhZ3MgXHUwMDI2IExPT0tVUF9JU19TQ09QRUQpKSlcbmZzL25hbWVpLmM6MTA2MjpcdFx0XHRcdG5kLVx1MDAzZXJvb3QubW50ID0gTlVMTDtcbmZzL25hbWVpLmMtMTA2My1cdFx0bmQtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+TE9PS1VQX0NBQ0hFRDtcbi0tXG5mcy9uYW1laS5jPTI2ODk9c3RhdGljIGNvbnN0IGNoYXIgKnBhdGhfaW5pdChzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgdW5zaWduZWQgZmxhZ3MpXG4tLVxuZnMvbmFtZWkuYy0yNzI3LVxuZnMvbmFtZWkuYzoyNzI4Olx0bmQtXHUwMDNlcm9vdC5tbnQgPSBOVUxMO1xuZnMvbmFtZWkuYy0yNzI5LVxuLS1cbmZzL25hbWVpLmM9MjgxOT1zdGF0aWMgaW50IHBhdGhfbG9va3VwYXQoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHVuc2lnbmVkIGZsYWdzLCBzdHJ1Y3QgcGF0aCAqcGF0aClcbi0tXG5mcy9uYW1laS5jLTI4NDQtXHRcdCpwYXRoID0gbmQtXHUwMDNlcGF0aDtcbmZzL25hbWVpLmM6Mjg0NTpcdFx0bmQtXHUwMDNlcGF0aC5tbnQgPSBOVUxMO1xuZnMvbmFtZWkuYy0yODQ2LVx0XHRuZC1cdTAwM2VwYXRoLmRlbnRyeSA9IE5VTEw7XG4tLVxuZnMvbmFtZWkuYz0yODc0PXN0YXRpYyBpbnQgcGF0aF9wYXJlbnRhdChzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgdW5zaWduZWQgZmxhZ3MsXG4tLVxuZnMvbmFtZWkuYy0yODgyLVx0XHQqcGFyZW50ID0gbmQtXHUwMDNlcGF0aDtcbmZzL25hbWVpLmM6Mjg4MzpcdFx0bmQtXHUwMDNlcGF0aC5tbnQgPSBOVUxMO1xuZnMvbmFtZWkuYy0yODg0LVx0XHRuZC1cdTAwM2VwYXRoLmRlbnRyeSA9IE5VTEw7XG4tLVxuZnMvb3Blbi5jPTg4NT1zdGF0aWMgaW50IGRvX2RlbnRyeV9vcGVuKHN0cnVjdCBmaWxlICpmLFxuLS1cbmZzL29wZW4uYy05NzktXHRwYXRoX3B1dChcdTAwMjZmLVx1MDAzZWZfcGF0aCk7XG5mcy9vcGVuLmM6OTgwOlx0Zi1cdTAwM2VfX2ZfcGF0aC5tbnQgPSBOVUxMO1xuZnMvb3Blbi5jLTk4MS1cdGYtXHUwMDNlX19mX3BhdGguZGVudHJ5ID0gTlVMTDtcbi0tXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmMtMTQtXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmM6MTU6LyogVGhlIE5VTEwgcGF0aDogeyAubW50ID0gTlVMTCwgLmRlbnRyeSA9IE5VTEwgfS4gKi9cbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYy0xNi1zdGF0aWMgY29uc3Qgc3RydWN0IHBhdGggbnVsbF9wYXRoO1xuLS1cbmtlcm5lbC9hdWRpdHNjLmM9OTMwPXN0YXRpYyBpbmxpbmUgdm9pZCBhdWRpdF9mcmVlX25hbWVzKHN0cnVjdCBhdWRpdF9jb250ZXh0ICpjb250ZXh0KVxuLS1cbmtlcm5lbC9hdWRpdHNjLmMtOTQzLVx0Y29udGV4dC1cdTAwM2Vwd2QuZGVudHJ5ID0gTlVMTDtcbmtlcm5lbC9hdWRpdHNjLmM6OTQ0Olx0Y29udGV4dC1cdTAwM2Vwd2QubW50ID0gTlVMTDtcbmtlcm5lbC9hdWRpdHNjLmMtOTQ1LX1cbi0tXG5uZXQvdW5peC9hZl91bml4LmM9NjY1PXN0YXRpYyB2b2lkIHVuaXhfcmVsZWFzZV9zb2NrKHN0cnVjdCBzb2NrICpzaywgaW50IGVtYnJpb24pXG4tLVxubmV0L3VuaXgvYWZfdW5peC5jLTY4MS1cdHUtXHUwMDNlcGF0aC5kZW50cnkgPSBOVUxMO1xubmV0L3VuaXgvYWZfdW5peC5jOjY4MjpcdHUtXHUwMDNlcGF0aC5tbnQgPSBOVUxMO1xubmV0L3VuaXgvYWZfdW5peC5jLTY4My1cdHN0YXRlID0gc2stXHUwMDNlc2tfc3RhdGU7XG4tLVxubmV0L3VuaXgvYWZfdW5peC5jPTEwODI9c3RhdGljIHN0cnVjdCBzb2NrICp1bml4X2NyZWF0ZTEoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQga2VybiwgaW50IHR5cGUpXG4tLVxubmV0L3VuaXgvYWZfdW5peC5jLTExMTctXHR1LVx1MDAzZXBhdGguZGVudHJ5ID0gTlVMTDtcbm5ldC91bml4L2FmX3VuaXguYzoxMTE4Olx0dS1cdTAwM2VwYXRoLm1udCA9IE5VTEw7XG5uZXQvdW5peC9hZl91bml4LmMtMTExOS1cdHNwaW5fbG9ja19pbml0KFx1MDAyNnUtXHUwMDNlbG9jayk7XG4tLVxuc2VjdXJpdHkva2V5cy9iaWdfa2V5LmM9MTc4PXZvaWQgYmlnX2tleV9kZXN0cm95KHN0cnVjdCBrZXkgKmtleSlcbi0tXG5zZWN1cml0eS9rZXlzL2JpZ19rZXkuYy0xODMtXHRcdHBhdGhfcHV0KFx1MDAyNnBheWxvYWQtXHUwMDNlcGF0aCk7XG5zZWN1cml0eS9rZXlzL2JpZ19rZXkuYzoxODQ6XHRcdHBheWxvYWQtXHUwMDNlcGF0aC5tbnQgPSBOVUxMO1xuc2VjdXJpdHkva2V5cy9iaWdfa2V5LmMtMTg1LVx0XHRwYXlsb2FkLVx1MDAzZXBhdGguZGVudHJ5ID0gTlVMTDtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jPTE5NzQ9aW50IF9faW5pdCBpbml0X3NlbF9mcyh2b2lkKVxuLS1cbnNlY3VyaXR5L3NlbGludXgvc2VsaW51eGZzLmMtMTk5NS1cdFx0ZXJyID0gUFRSX0VSUihzZWxpbnV4X251bGwubW50KTtcbnNlY3VyaXR5L3NlbGludXgvc2VsaW51eGZzLmM6MTk5NjpcdFx0c2VsaW51eF9udWxsLm1udCA9IE5VTEw7XG5zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jLTE5OTctXHRcdHJldHVybiBlcnI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA3OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2ODYxCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMTkxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgS2VybmVsIFBhdGNoJiMzOTtzIFJlYWNoYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXM6IHdhaXQgYSBtaW51dGUsIGBmcy0mZ3Q7cm9vdC5tbnRgIGlzIG9ubHkgZXZlciBzZXQgdG8gYE5VTExgIGluIHRoYXQgS1VuaXQgdGVzdC4gRXZlcnl3aGVyZSBlbHNlLCBpdCBzZWVtcyB0byBiZSBpbml0aWFsaXplZCB3aXRoIGEgdmFsaWQgbW91bnQgcG9pbnQuIFNvLCB0aGlzIHBhdGNoIGlzIGJhc2ljYWxseSBhZGRpbmcgY29kZSBmb3IgYSBmZWF0dXJlIHRoYXQgKmRvZXNuJiMzOTt0KiBleGlzdCB5ZXQgaW4gdGhlIGtlcm5lbCwgcmlnaHQ/IEV4Y2VwdCBtYXliZSBmb3Igc29tZSBvdXQtb2YtdHJlZSBtb2R1bGVzIG9yIGZ1dHVyZSBzdHVmZi4KCkkgbmVlZCB0byBjb25maXJtIHRoaXMuIFdoYXQgYWJvdXQgYGlvX3VyaW5nYD8gSSBxdWlja2x5IHJlbWVtYmVyZWQgd2UgY2hlY2tlZCB0aGF0IGVhcmxpZXIgYW5kIHRoYXQgYGlvX3VyaW5nYCBkb2VzbiYjMzk7dCB1c2UgYHVuc2hhcmVfZnNfc3RydWN0KClgLiBEb2VzIGl0ICpldmVyKiBzZXQgYGZzLSZndDtyb290Lm1udCA9IE5VTExgPyBOb3BlLgoKT2theSwgbGV0JiMzOTtzIHBsYXkgZGV2aWwmIzM5O3MgYWR2b2NhdGU6IHdoYXQgaWYgYGZzX3N0cnVjdGAgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgPyBXZSBhbHJlYWR5IGtub3cgaXQmIzM5O3MgYWxsb2NhdGVkIHRocm91Z2ggYGttZW1fY2FjaGVfYWxsb2NgIGFuZCBpcyBpbml0aWFsaXplZCBieSBjb3B5aW5nIGZyb20gYG9sZGAuIEJ1dCB3aGF0IGlmIGBvbGRgIGhhZCBgcm9vdC5tbnQgPT0gTlVMTGA/IEhtbSwgdGhlIG9ubHkgdGltZSB0aGF0IGNvdWxkIGJlIHRydWUgaXMgaWYgaXQmIzM5O3MgdGhlIGBpbml0X2ZzYCBiZWZvcmUgYGluaXRfbW91bnRfdHJlZSgpYCBpcyBjYWxsZWQuIEJ1dCwgbm8gdGFzayAqc2hvdWxkKiBiZSBhYmxlIHRvIGRvIGFueSBwYXRoIHJlc29sdXRpb24gYmVmb3JlIGBpbml0X21vdW50X3RyZWUoKWAgaXMgY2FsbGVkLCBjb3JyZWN0PyBTbyB0aGF0JiMzOTtzIHByb2JhYmx5IG5vdCBpdC4KCkFscmlnaHQsIHdoYXQgYWJvdXQgZWRnZSBjYXNlcz8gQ2FuIEkgc29tZWhvdyBnZXQgYGZzLSZndDtyb290Lm1udGAgdG8gYE5VTExgIHZpYSBgY2hyb290YD8gSWYgSSBjYWxsIGBjaHJvb3RgIHdpdGggYW4gZW1wdHkgcGF0aCwgaXQgcmV0dXJucyBgLUVOT0VOVGAuIElmIEkgY2FsbCBpdCB3aXRoIGEgZmlsZSBwYXRoLCBpdCByZXR1cm5zIGAtRU5PVERJUmAuIElmIEkgY2FsbCBpdCB3aXRoIGEgZGlyZWN0b3J5LCBhbmQgdGhlbiB0aGUgZGlyZWN0b3J5IGdldHMgcmVtb3ZlZCwgdGhlIGRlbnRyeSBpcyB1bmxpbmtlZCwgYnV0IGBtbnRgIGlzbiYjMzk7dCBgTlVMTGAuIElmIHRoZSBtb3VudCBpcyB1bm1vdW50ZWQsIGl0JiMzOTtzIGxhenkgdW5tb3VudGVkLCBidXQgdGhlIGBtbnRgIG9iamVjdCB3b24mIzM5O3QgYmUgZnJlZWQgdW50aWwgdGhlIHJlZmVyZW5jZSBjb3VudCBkcm9wcyB0byAwLCB3aGljaCBtZWFucyBgbW50YCBpc24mIzM5O3QgYE5VTExgLiBTYW1lIHN0b3J5IGlmIHRoZSBtb3VudCBuYW1lc3BhY2UgaXMgZGVzdHJveWVkIC0gdGhlIGBtbnRgIG9iamVjdCBwZXJzaXN0cyB1bnRpbCB0aGUgcmVmIGNvdW50IGhpdHMgemVybywgd2hpY2ggbWVhbnMgYG1udGAgd29uJiMzOTt0IGJlIGBOVUxMYC4gSWYgSSBtb3ZlIHRoZSB0YXNrIHRvIGEgbmV3IG1vdW50IG5hbWVzcGFjZSwgaXRzIGBmcy0mZ3Q7cm9vdGAgaXMgdXBkYXRlZCB0byB0aGUgbmV3IG5hbWVzcGFjZSYjMzk7cyByb290LCBzbyBhZ2Fpbiwgbm8gYE5VTExgIGhlcmUuIEZpbmFsbHksIGEgbW91bnQgbmFtZXNwYWNlIGFsd2F5cyBoYXMgYSByb290LgoKSXMgdGhlcmUgKmFueSogb3RoZXIgd2F5PyBMZXQmIzM5O3MgdHJ5IGNoZWNraW5nIHRoZSBjb21taXQgbWVzc2FnZS4gSSBkb24mIzM5O3QgaGF2ZSB0aGUgY29tbWl0IG1lc3NhZ2UsIHNvIEkmIzM5O2xsIGNoZWNrIHRoZSBzb3VyY2UgY29kZSB0byBmaW5kIGFueSBzeXNjYWxscyB0aGF0IHNldCBgZnMtJmd0O3Jvb3QubW50ID0gTlVMTGAuIEkgZGlkIHNlYXJjaCBmb3IgdGhhdCBhbmQgY2FtZSB1cCBlbXB0eS4KCldoYXQgYWJvdXQgdGhvc2UgYW5vbnltb3VzIHdvcmtlciB0aHJlYWRzIGxpa2UgdGhvc2UgdXNlZCBpbiBgaW9fdXJpbmdgPyBUaG9zZSB0aHJlYWRzIG1pZ2h0IG5vdCBoYXZlIGEgcm9vdCBvciBDV0Qgc2V0LCBtYXliZT8gQnV0LCB3ZSBhbHJlYWR5IHNlYXJjaGVkIGZvciBgc2V0X2ZzX3Jvb3RgIG9yIGBzZXRfZnNfcHdkYCBiZWluZyBjYWxsZWQgd2l0aCBgTlVMTGAgYW5kIGNhbWUgdXAgd2l0aCBub3RoaW5nLgoKSXMgYGZzLSZndDtyb290YCBzZXQgdG8gTlVMTCBieSBvdGhlciBmdW5jdGlvbnM/IE5vLCBgY29weV9mc19zdHJ1Y3RgIGNvcGllcyBmcm9tIGBvbGRgLiBgdW5zaGFyZV9mc19zdHJ1Y3RgIGNvcGllcyBmcm9tIGBjdXJyZW50LSZndDtmc2AuIGBleGl0X2ZzYCBqdXN0IHNldHMgYHRzay0mZ3Q7ZnNgIHRvIGBOVUxMYCwgKm5vdCogYGZzLSZndDtyb290Lm1udGAuIGBmcmVlX2ZzX3N0cnVjdGAgY2FsbHMgYHBhdGhfcHV0YCwgYnV0IGRvZXNuJiMzOTt0IHNldCBgZnMtJmd0O3Jvb3QubW50YCB0byBgTlVMTGAuIGBjaHJvb3RfZnNfcmVmc2AganVzdCByZXBsYWNlcyB0aGUgb2xkIHJvb3Qgd2l0aCB0aGUgbmV3IHJvb3QsIGJ1dCBkb2VzbiYjMzk7dCBzZXQgaXQgdG8gYE5VTExgLgoKV2hhdCBhYm91dCBgc2V0X2ZzX3Jvb3RgPyBUaGF0IHRha2VzIGEgcGF0aCwgc28gaWYgdGhlIHBhdGgmIzM5O3MgYG1udGAgaXMgYE5VTExgLCB0aGVuIGBmcy0mZ3Q7cm9vdC5tbnRgICp3aWxsKiBiZSBgTlVMTGAuIEJ1dCwgd2hlbiBpcyB0aGlzIGV2ZXIgY2FsbGVkIHdpdGggYSBwYXRoIHRoYXQgaGFzIGBtbnQgPT0gTlVMTGA/IFdlIHNlYXJjaGVkIGZvciBgc2V0X2ZzX3Jvb3QuKm51bGxgIGFuZCBmb3VuZCBvbmx5IHRoZSBLVW5pdCB0ZXN0LiBCdXQgd2Ugc2VhcmNoZWQgZm9yIGBzZXRfZnNfcm9vdC4qJmFtcDtgIGFuZCBmb3VuZCB0aGVzZTogYGluaXRfY2hyb290YCwgYGluaXRfbW91bnRfdHJlZWAsIGBtbnRuc19pbnN0YWxsYCwgYHN5c19jaHJvb3RgLCBgY29tbWl0X25zc2V0YCwgYW5kLCB5ZXAsIGBudWxsX3Jvb3RfY3dkX2t1bml0LmNgLgoKV2hhdCBhYm91dCBgc2V0X2ZzX3B3ZGA/IFNhbWUgc3RvcnksIGJ1dCB3ZSBmb3VuZCB0aGVzZTogYGluaXRfY2hkaXJgLCBgaW5pdF9tb3VudF90cmVlYCwgYG1udG5zX2luc3RhbGxgLCBgc3lzX2NoZGlyYCwgYHN5c19mY2hkaXJgLCBgY29tbWl0X25zc2V0YCwgYW5kIGFnYWluLCB0aGUgS1VuaXQgdGVzdCwgYG51bGxfcm9vdF9jd2Rfa3VuaXQuY2AuCgpTbyBpdCBzZWVtcyB0aGVyZSYjMzk7cyBhYnNvbHV0ZWx5IE5PIHdheSB0byBzZXQgYGZzLSZndDtyb290Lm1udCA9IE5VTExgIG9yIGBmcy0mZ3Q7cHdkLm1udCA9IE5VTExgIGZyb20gdXNlciBzcGFjZQoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA3OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZzLVx1MDAzZXB3ZCA9JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2ZzX3N0cnVjdC5jPTMzPXZvaWQgc2V0X2ZzX3B3ZChzdHJ1Y3QgZnNfc3RydWN0ICpmcywgY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpXG4tLVxuZnMvZnNfc3RydWN0LmMtMzktXHRvbGRfcHdkID0gZnMtXHUwMDNlcHdkO1xuZnMvZnNfc3RydWN0LmM6NDA6XHRmcy1cdTAwM2Vwd2QgPSAqcGF0aDtcbmZzL2ZzX3N0cnVjdC5jLTQxLVx0d3JpdGVfc2VxdW5sb2NrKFx1MDAyNmZzLVx1MDAzZXNlcSk7XG4tLVxuZnMvZnNfc3RydWN0LmM9MTA3PXN0cnVjdCBmc19zdHJ1Y3QgKmNvcHlfZnNfc3RydWN0KHN0cnVjdCBmc19zdHJ1Y3QgKm9sZClcbi0tXG5mcy9mc19zdHJ1Y3QuYy0xMTktXHRcdHBhdGhfZ2V0KFx1MDAyNmZzLVx1MDAzZXJvb3QpO1xuZnMvZnNfc3RydWN0LmM6MTIwOlx0XHRmcy1cdTAwM2Vwd2QgPSBvbGQtXHUwMDNlcHdkO1xuZnMvZnNfc3RydWN0LmMtMTIxLVx0XHRwYXRoX2dldChcdTAwMjZmcy1cdTAwM2Vwd2QpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwNzoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDAyNQoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDczMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEZpbGUgU3lzdGVtIFJvb3QgSXNzdWVzKioKCk9rYXksIHNvIHRoZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgcG90ZW50aWFsIHByb2JsZW1zIHN0ZW1taW5nIGZyb20gZmlsZSBzeXN0ZW0gcm9vdCBtb2RpZmljYXRpb25zLCBvciByYXRoZXIsIHRoZSBhYnNlbmNlIG9mIGRpcmVjdCBtb2RpZmljYXRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgYWJvdXQgd2hhdCBoYXBwZW5zIGlmIGEgdGFzayYjMzk7cyBgZnNgIHN0cnVjdHVyZSBpcyBOVUxMLiBBIE5VTEwgYHRzay0mZ3Q7ZnNgIHdvdWxkIGNhdXNlIGBnZXRfZnNfcm9vdGAgdG8gb29wcywgcmlnaHQ/IEJ1dCB0aGUgcGF0Y2ggSSYjMzk7bSBsb29raW5nIGF0IHNlZW1zIHRvIGNoZWNrIHRoZSBgcm9vdC0mZ3Q7bW50YCB2YWx1ZSAqYWZ0ZXIqIGNhbGxpbmcgYGdldF9mc19yb290YC4gRm9yIGluc3RhbmNlLCBpbiBgZnMvcHJvYy9iYXNlLmNgLCB0aGUgcGF0Y2ggbW9kaWZpZXMgYGdldF90YXNrX3Jvb3RgIHRvIGluY2x1ZGUgdGhpcyBjaGVjay4KClNvLCBpZiBgdGFzay0mZ3Q7ZnNgIGlzIE5VTEwsIGBnZXRfZnNfcm9vdGAgaXNuJiMzOTt0IGV2ZW4gY2FsbGVkLiBUaGF0JiMzOTtzIGdvb2QuIElmIGB0YXNrLSZndDtmc2AgaXNuJiMzOTt0IE5VTEwsIHRoZW4gaXQgY2FsbHMgYGdldF9mc19yb290YCwgYW5kIHRoYXQgY29waWVzIHRoZSBgdGFzay0mZ3Q7ZnMtJmd0O3Jvb3RgIHRvIHRoZSBgcm9vdGAgcGF0aCBzdHJ1Y3QuIFRoZW4sICphZnRlciogdGhlIGNvcHksIHdlIGNoZWNrIGByb290LSZndDttbnRgLiBUaGlzIG1lYW5zIGB0YXNrLSZndDtmcy0mZ3Q7cm9vdC5tbnRgIGl0c2VsZiBjYW4gYmUgTlVMTCEgSG93IGNhbiB0aGlzIGV2ZW4gaGFwcGVuPwoKQ291bGQgaXQgYmUgdGhhdCBhIGtlcm5lbCB0aHJlYWQgaXMgY3JlYXRlZCB3aXRoIGEgTlVMTCByb290LCBzb21laG93PyBNeSBndXQgcmVhY3Rpb24gaXMgdGhhdCB0aGUga2VybmVsIHdvdWxkIHByZXZlbnQgaXQuIEkgY2hlY2tlZCB0aGUgYGtlcm5lbF90aHJlYWRgIGFuZCBga3RocmVhZF9jcmVhdGVgIGZ1bmN0aW9ucywgYW5kIGJvdGggc2hhcmUgYGluaXRfZnNgLiBBbmQgSSYjMzk7bSBwcmV0dHkgc3VyZSBgaW5pdF9mc2AgaGFzIGEgdmFsaWQgcm9vdCBhbmQgcHdkIGFmdGVyIGBpbml0X21vdW50X3RyZWUoKWAuIFNvIEkgd291bGQgZXhwZWN0IGFsbCBrZXJuZWwgdGhyZWFkcyB0byBoYXZlIHZhbGlkIHJvb3RzL3B3ZHMgYWZ0ZXIgdGhpcyBjYWxsLCByaWdodD8KCkJ1dCB3YWl0ISBXaGF0IGlmIGEga2VybmVsIHRocmVhZCBpcyBjcmVhdGVkIHVzaW5nIGBrZXJuZWxfdGhyZWFkYCAqd2l0aG91dCogYENMT05FX0ZTYD8gTGV0IG1lIHNlZS4uLiB5ZXMsIGluIGBrZXJuZWwvZm9yay5jYCwgYGtlcm5lbF90aHJlYWRgIHVzZXMgYENMT05FX1ZNIHwgQ0xPTkVfVU5UUkFDRURgLiBJZiBgQ0xPTkVfRlNgIGlzICpub3QqIHByZXNlbnQgaW4gdGhlIGZsYWdzLCB0aGVuIGBjb3B5X2ZzX3N0cnVjdGAgaXMgY2FsbGVkLiBJdCBjb3BpZXMgdGhlIGBjdXJyZW50LSZndDtmc2Agc3RydWN0LiBJZiBgY3VycmVudGAgaXMgYSBrZXJuZWwgdGhyZWFkLCBpdCBoYXMgYGluaXRfZnNgLiBUaGlzIG5ldyB0aHJlYWQgZ2V0cyBhICpjb3B5KiBvZiBgaW5pdF9mc2AuCgpOb3csIGlmIHRoaXMgY29weSBoYXBwZW5zICpiZWZvcmUqIGBpbml0X21vdW50X3RyZWUoKWAgaXMgY2FsbGVkLCB0aGUgbmV3IGtlcm5lbCB0aHJlYWQmIzM5O3MgYGZzYCB3b3VsZCBoYXZlIGEgYHJvb3QubW50ID09IE5VTExgIGFuZCBgcHdkLm1udCA9PSBOVUxMYC4gQW5kIHRoZW4gYGluaXRfbW91bnRfdHJlZSgpYCBtb2RpZmllcyBgaW5pdF9mc2AsIGJ1dCB0aGUgY29weSByZW1haW5zIHVuY2hhbmdlZCwgd2l0aCB0aGUgTlVMTCB2YWx1ZXMuIFRoYXQmIzM5O3MgdGhlIGNhdGNoISBBcmUgdGhlcmUgYW55IGtlcm5lbCB0aHJlYWRzIGNyZWF0ZWQgYmVmb3JlIGB2ZnNfY2FjaGVzX2luaXQoKWAgdGhhdCAqZG9uJiMzOTt0KiBjbG9uZSB0aGUgZmlsZSBzeXN0ZW0/IEkgbmVlZCB0byBjaGVjayBgaW5pdC9tYWluLmNgIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA3OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tlcm5lbF90aHJlYWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDcwMCBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuRG9jdW1lbnRhdGlvbi9SQ1UvbG9ja2RlcC1zcGxhdC5yc3Q9Mjg9b3RoZXIgaW5mbyB0aGF0IG1pZ2h0IGhlbHAgdXMgZGVidWcgdGhpczo6XG4tLVxuRG9jdW1lbnRhdGlvbi9SQ1UvbG9ja2RlcC1zcGxhdC5yc3QtNjEtICAgIFtcdTAwM2NmZmZmZmZmZjgxMDk3NWI2XHUwMDNlXSBrdGhyZWFkJiM0MzsweGE2LzB4YjBcbkRvY3VtZW50YXRpb24vUkNVL2xvY2tkZXAtc3BsYXQucnN0OjYyOiAgICBbXHUwMDNjZmZmZmZmZmY4MTdkYjE1NFx1MDAzZV0ga2VybmVsX3RocmVhZF9oZWxwZXImIzQzOzB4NC8weDEwXG5Eb2N1bWVudGF0aW9uL1JDVS9sb2NrZGVwLXNwbGF0LnJzdC02My0gICAgW1x1MDAzY2ZmZmZmZmZmODEwNjY0MzBcdTAwM2VdID8gZmluaXNoX3Rhc2tfc3dpdGNoJiM0MzsweDgwLzB4MTEwXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS92bWFsbG9jZWQta2VybmVsLXN0YWNrcy5yc3Q9MTA1PVRocmVhZCBzdGFjayBhbGxvY2F0aW9uIGlzIGluaXRpYXRlZCBmcm9tIGNsb25lKCksIGZvcmsoKSwgdmZvcmsoKSxcbkRvY3VtZW50YXRpb24vbW0vdm1hbGxvY2VkLWtlcm5lbC1zdGFja3MucnN0OjEwNjprZXJuZWxfdGhyZWFkKCkgdmlhIGtlcm5lbF9jbG9uZSgpLiBUaGVzZSBhcmUgYSBmZXcgaGludHMgZm9yIHNlYXJjaGluZ1xuRG9jdW1lbnRhdGlvbi9tbS92bWFsbG9jZWQta2VybmVsLXN0YWNrcy5yc3QtMTA3LXRoZSBjb2RlIGJhc2UgdG8gdW5kZXJzdGFuZCB3aGVuIGFuZCBob3cgYSB0aHJlYWQgc3RhY2sgaXMgYWxsb2NhdGVkLlxuLS1cbkRvY3VtZW50YXRpb24vcG93ZXIvZnJlZXppbmctb2YtdGFza3MucnN0PTg2PWZyZWV6ZV9wcm9jZXNzZXMoKTpcbi0tXG5Eb2N1bWVudGF0aW9uL3Bvd2VyL2ZyZWV6aW5nLW9mLXRhc2tzLnJzdC04OC1cbkRvY3VtZW50YXRpb24vcG93ZXIvZnJlZXppbmctb2YtdGFza3MucnN0Ojg5OmZyZWV6ZV9rZXJuZWxfdGhyZWFkcygpOlxuRG9jdW1lbnRhdGlvbi9wb3dlci9mcmVlemluZy1vZi10YXNrcy5yc3QtOTAtICAtIGZyZWV6ZXMgYWxsIHRhc2tzIChpbmNsdWRpbmcga2VybmVsIHRocmVhZHMpIGJlY2F1c2Ugd2UgY2FuJiMzOTt0IGZyZWV6ZVxuLS1cbkRvY3VtZW50YXRpb24vcG93ZXIvZnJlZXppbmctb2YtdGFza3MucnN0LTkyLVxuRG9jdW1lbnRhdGlvbi9wb3dlci9mcmVlemluZy1vZi10YXNrcy5yc3Q6OTM6dGhhd19rZXJuZWxfdGhyZWFkcygpOlxuRG9jdW1lbnRhdGlvbi9wb3dlci9mcmVlemluZy1vZi10YXNrcy5yc3QtOTQtICAtIHRoYXdzIG9ubHkga2VybmVsIHRocmVhZHM7IHRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBpZiB3ZSBuZWVkIHRvIGRvXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFjZS9oaXN0b2dyYW0ucnN0PTU9RG9jdW1lbnRhdGlvbiB3cml0dGVuIGJ5IFRvbSBaYW51c3NpXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFjZS9oaXN0b2dyYW0ucnN0LTE1MDgtICAgICAgICAgICAgIGtlcm5lbF9jbG9uZSYjNDM7MHgxOGUvMHgzMzBcbkRvY3VtZW50YXRpb24vdHJhY2UvaGlzdG9ncmFtLnJzdDoxNTA5OiAgICAgICAgICAgICBrZXJuZWxfdGhyZWFkJiM0MzsweDI5LzB4MzBcbkRvY3VtZW50YXRpb24vdHJhY2UvaGlzdG9ncmFtLnJzdC0xNTEwLSAgICAgICAgICAgICBrdGhyZWFkZCYjNDM7MHgxNTQvMHgxYjBcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS92bWFsbG9jZWQta2VybmVsLXN0YWNrcy5yc3Q9ODM9YWxsb2NfdGhyZWFkX3N0YWNrX25vZGUoKeiwg+eUqF9fdm1hbGxvY19ub2RlX3JhbmdlKCnmnaXliIbphY3luKbmnIlQQUdFX0tFUk5FTFxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3ZtYWxsb2NlZC1rZXJuZWwtc3RhY2tzLnJzdC05My1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3ZtYWxsb2NlZC1rZXJuZWwtc3RhY2tzLnJzdDo5NDrnur/nqIvmoIjliIbphY3mmK/nlLFjbG9uZSgp44CBZm9yaygp44CBdmZvcmsoKeOAgWtlcm5lbF90aHJlYWQoKemAmui/h2tlcm5lbF9jbG9uZSgpXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS92bWFsbG9jZWQta2VybmVsLXN0YWNrcy5yc3QtOTUt5ZCv5Yqo55qE44CC55WZ54K55o+Q56S65Zyo6L+Z77yM5Lul5L6/5pCc57Si5Luj56CB5bqT77yM5LqG6Kej57q/56iL5qCI5L2V5pe25Lul5Y+K5aaC5L2V5YiG6YWN44CCXG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvZW50cnkuUz04Mzc9cmV0X2Zyb21fZm9yazpcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9lbnRyeS5TLTg0Ni1cdC5hbGlnbiA0XG5hcmNoL2FscGhhL2tlcm5lbC9lbnRyeS5TOjg0NzpcdC5nbG9ibFx0cmV0X2Zyb21fa2VybmVsX3RocmVhZFxuYXJjaC9hbHBoYS9rZXJuZWwvZW50cnkuUzo4NDg6XHQuZW50XHRyZXRfZnJvbV9rZXJuZWxfdGhyZWFkXG5hcmNoL2FscGhhL2tlcm5lbC9lbnRyeS5TOjg0OTpyZXRfZnJvbV9rZXJuZWxfdGhyZWFkOlxuYXJjaC9hbHBoYS9rZXJuZWwvZW50cnkuUy04NTAtXHRtb3ZcdCQxNywgJDE2XG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvZW50cnkuUy04NTUtXHRiclx0JDMxLCByZXRfdG9fdXNlclxuYXJjaC9hbHBoYS9rZXJuZWwvZW50cnkuUzo4NTY6LmVuZCByZXRfZnJvbV9rZXJuZWxfdGhyZWFkXG5hcmNoL2FscGhhL2tlcm5lbC9lbnRyeS5TLTg1Ny1cbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9wcm9jZXNzLmM9MjMyPWludCBjb3B5X3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGNvbnN0IHN0cnVjdCBrZXJuZWxfY2xvbmVfYXJncyAqYXJncylcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9wcm9jZXNzLmMtMjM3LVx0ZXh0ZXJuIHZvaWQgcmV0X2Zyb21fZm9yayh2b2lkKTtcbmFyY2gvYWxwaGEva2VybmVsL3Byb2Nlc3MuYzoyMzg6XHRleHRlcm4gdm9pZCByZXRfZnJvbV9rZXJuZWxfdGhyZWFkKHZvaWQpO1xuYXJjaC9hbHBoYS9rZXJuZWwvcHJvY2Vzcy5jLTIzOS1cbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9wcm9jZXNzLmMtMjUzLVx0XHRcdHNpemVvZihzdHJ1Y3Qgc3dpdGNoX3N0YWNrKSAmIzQzOyBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpKTtcbmFyY2gvYWxwaGEva2VybmVsL3Byb2Nlc3MuYzoyNTQ6XHRcdGNoaWxkc3RhY2stXHUwMDNlcjI2ID0gKHVuc2lnbmVkIGxvbmcpIHJldF9mcm9tX2tlcm5lbF90aHJlYWQ7XG5hcmNoL2FscGhhL2tlcm5lbC9wcm9jZXNzLmMtMjU1LVx0XHRjaGlsZHN0YWNrLVx1MDAzZXI5ID0gKHVuc2lnbmVkIGxvbmcpIGFyZ3MtXHUwMDNlZm47XG4tLVxuYXJjaC9hcmMva2VybmVsL3Byb2Nlc3MuYz0xNjc9aW50IGNvcHlfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY29uc3Qgc3RydWN0IGtlcm5lbF9jbG9uZV9hcmdzICphcmdzKVxuLS1cbmFyY2gvYXJjL2tlcm5lbC9wcm9jZXNzLmMtMTg4LVx0ICogdGhpcyB0byBwb3B1bGF0ZSBrZXJuZWwgdGhyZWFkIGVudHJ5LXB0L2FyZ3MgaW50byBjYWxsZWUgcmVncyxcbmFyY2gvYXJjL2tlcm5lbC9wcm9jZXNzLmM6MTg5Olx0ICogc28gdGhhdCByZXRfZnJvbV9rZXJuZWxfdGhyZWFkKCkgYmVjb21lcyBzaW1wbGVyLlxuYXJjaC9hcmMva2VybmVsL3Byb2Nlc3MuYy0xOTAtXHQgKi9cbi0tXG5hcmNoL2Nza3kva2VybmVsL2VudHJ5LlM9ODU9Y3NreV9zeXNjYWxsX3RyYWNlOlxuLS1cbmFyY2gvY3NreS9rZXJuZWwvZW50cnkuUy0xMTQtXG5hcmNoL2Nza3kva2VybmVsL2VudHJ5LlM6MTE1OkVOVFJZKHJldF9mcm9tX2tlcm5lbF90aHJlYWQpXG5hcmNoL2Nza3kva2VybmVsL2VudHJ5LlMtMTE2LVx0amJzclx0c2NoZWR1bGVfdGFpbFxuLS1cbmFyY2gvY3NreS9rZXJuZWwvcHJvY2Vzcy5jPTI1PWFzbWxpbmthZ2Ugdm9pZCByZXRfZnJvbV9mb3JrKHZvaWQpO1xuYXJjaC9jc2t5L2tlcm5lbC9wcm9jZXNzLmM6MjY6YXNtbGlua2FnZSB2b2lkIHJldF9mcm9tX2tlcm5lbF90aHJlYWQodm9pZCk7XG5hcmNoL2Nza3kva2VybmVsL3Byb2Nlc3MuYy0yNy1cbi0tXG5hcmNoL2Nza3kva2VybmVsL3Byb2Nlc3MuYz0zMz1pbnQgY29weV90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBjb25zdCBzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgKmFyZ3MpXG4tLVxuYXJjaC9jc2t5L2tlcm5lbC9wcm9jZXNzLmMtNTItXHRcdG1lbXNldChjaGlsZHJlZ3MsIDAsIHNpemVvZihzdHJ1Y3QgcHRfcmVncykpO1xuYXJjaC9jc2t5L2tlcm5lbC9wcm9jZXNzLmM6NTM6XHRcdGNoaWxkc3RhY2stXHUwMDNlcjE1ID0gKHVuc2lnbmVkIGxvbmcpIHJldF9mcm9tX2tlcm5lbF90aHJlYWQ7XG5hcmNoL2Nza3kva2VybmVsL3Byb2Nlc3MuYy01NC1cdFx0Y2hpbGRzdGFjay1cdTAwM2VyMTAgPSAodW5zaWduZWQgbG9uZykgYXJncy1cdTAwM2Vmbl9hcmc7XG4tLVxuYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vYXNtLXByb3RvdHlwZXMuaD0xNj1hc21saW5rYWdlIHZvaWQgbm9pbnN0ciBfX25vX3N0YWNrX3Byb3RlY3RvciByZXRfZnJvbV9mb3JrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldixcbi0tXG5hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9hc20tcHJvdG90eXBlcy5oLTE4LVxuYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vYXNtLXByb3RvdHlwZXMuaDoxOTphc21saW5rYWdlIHZvaWQgbm9pbnN0ciBfX25vX3N0YWNrX3Byb3RlY3RvciByZXRfZnJvbV9rZXJuZWxfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldixcbmFyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2FzbS1wcm90b3R5cGVzLmgtMjAtXHRcdFx0XHRcdFx0XHRcdCAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncyxcbi0tXG5hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9zd2l0Y2hfdG8uaD0yND1leHRlcm4gYXNtbGlua2FnZSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKl9fc3dpdGNoX3RvKHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldixcbi0tXG5hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9zd2l0Y2hfdG8uaC0yOC0gKiBGb3IgbmV3bHkgY3JlYXRlZCBrZXJuZWwgdGhyZWFkcyBzd2l0Y2hfdG8oKSB3aWxsIHJldHVybiB0b1xuYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vc3dpdGNoX3RvLmg6Mjk6ICogcmV0X2Zyb21fa2VybmVsX3RocmVhZCwgbmV3bHkgY3JlYXRlZCB1c2VyIHRocmVhZHMgdG8gcmV0X2Zyb21fZm9yay5cbmFyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3N3aXRjaF90by5oLTMwLSAqIFRoYXQgaXMsIGV2ZXJ5dGhpbmcgZm9sbG93aW5nIF9fc3dpdGNoX3RvKCkgd2lsbCBiZSBza2lwcGVkIGZvciBuZXcgdGhyZWFkcy5cbi0tXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvZW50cnkuUz05Mj1TWU1fQ09ERV9FTkQocmV0X2Zyb21fZm9ya19hc20pXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvZW50cnkuUy05My1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9lbnRyeS5TOjk0OlNZTV9DT0RFX1NUQVJUKHJldF9mcm9tX2tlcm5lbF90aHJlYWRfYXNtKVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL2VudHJ5LlMtOTUtXHRVTldJTkRfSElOVF9SRUdTXG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL2VudHJ5LlMtOTgtXHRtb3ZlXHRcdGEzLCBzMVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL2VudHJ5LlM6OTk6XHRibFx0XHRyZXRfZnJvbV9rZXJuZWxfdGhyZWFkXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvZW50cnkuUy0xMDAtXHRTVEFDS0xFQUtfRVJBU0Vcbi0tXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvZW50cnkuUy0xMDMtXHRSRVNUT1JFX1NQX0FORF9SRVRcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9lbnRyeS5TOjEwNDpTWU1fQ09ERV9FTkQocmV0X2Zyb21fa2VybmVsX3RocmVhZF9hc20pXG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3Byb2Nlc3MuYz03Mz1hc21saW5rYWdlIHZvaWQgcmV0X2Zyb21fZm9ya19hc20odm9pZCk7XG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvcHJvY2Vzcy5jOjc0OmFzbWxpbmthZ2Ugdm9pZCByZXRfZnJvbV9rZXJuZWxfdGhyZWFkX2FzbSh2b2lkKTtcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9wcm9jZXNzLmMtNzUtXG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3Byb2Nlc3MuYz0xNTU9YXNtbGlua2FnZSB2b2lkIG5vaW5zdHIgX19ub19zdGFja19wcm90ZWN0b3IgcmV0X2Zyb21fZm9yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsXG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3Byb2Nlc3MuYy0xNjEtXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvcHJvY2Vzcy5jOjE2Mjphc21saW5rYWdlIHZvaWQgbm9pbnN0ciBfX25vX3N0YWNrX3Byb3RlY3RvciByZXRfZnJvbV9rZXJuZWxfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldixcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9wcm9jZXNzLmMtMTYzLVx0XHRcdFx0XHRcdFx0XHQgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3Byb2Nlc3MuYz0xNzU9aW50IGNvcHlfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY29uc3Qgc3RydWN0IGtlcm5lbF9jbG9uZV9hcmdzICphcmdzKVxuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9wcm9jZXNzLmMtMTk4LVx0XHRwLVx1MDAzZXRocmVhZC5yZWcyNCA9ICh1bnNpZ25lZCBsb25nKWFyZ3MtXHUwMDNlZm5fYXJnO1xuYXJjaC9sb29uZ2FyY2gva2VybmVsL3Byb2Nlc3MuYzoxOTk6XHRcdHAtXHUwMDNldGhyZWFkLnJlZzAxID0gKHVuc2lnbmVkIGxvbmcpcmV0X2Zyb21fa2VybmVsX3RocmVhZF9hc207XG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvcHJvY2Vzcy5jOjIwMDpcdFx0cC1cdTAwM2V0aHJlYWQuc2NoZWRfcmEgPSAodW5zaWduZWQgbG9uZylyZXRfZnJvbV9rZXJuZWxfdGhyZWFkX2FzbTtcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9wcm9jZXNzLmMtMjAxLVx0XHRtZW1zZXQoY2hpbGRyZWdzLCAwLCBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpKTtcbi0tXG5hcmNoL202OGsva2VybmVsL2VudHJ5LlM9MTMwPUVOVFJZKHJldF9mcm9tX2ZvcmspXG4tLVxuYXJjaC9tNjhrL2tlcm5lbC9lbnRyeS5TLTEzNS1cbmFyY2gvbTY4ay9rZXJuZWwvZW50cnkuUzoxMzY6RU5UUlkocmV0X2Zyb21fa2VybmVsX3RocmVhZClcbmFyY2gvbTY4ay9rZXJuZWwvZW50cnkuUy0xMzctXHR8IGEzIGNvbnRhaW5zIHRoZSBrZXJuZWwgdGhyZWFkIHBheWxvYWQsIGQ3IC0gaXRzIGFyZ3VtZW50XG4tLVxuYXJjaC9tNjhrL2tlcm5lbC9wcm9jZXNzLmM9NDM9YXNtbGlua2FnZSB2b2lkIHJldF9mcm9tX2Zvcmsodm9pZCk7XG5hcmNoL202OGsva2VybmVsL3Byb2Nlc3MuYzo0NDphc21saW5rYWdlIHZvaWQgcmV0X2Zyb21fa2VybmVsX3RocmVhZCh2b2lkKTtcbmFyY2gvbTY4ay9rZXJuZWwvcHJvY2Vzcy5jLTQ1LVxuLS1cbmFyY2gvbTY4ay9rZXJuZWwvcHJvY2Vzcy5jPTE0Mj1pbnQgY29weV90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBjb25zdCBzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgKmFyZ3MpXG4tLVxuYXJjaC9tNjhrL2tlcm5lbC9wcm9jZXNzLmMtMTY4LVx0XHRmcmFtZS1cdTAwM2Vzdy5kNyA9ICh1bnNpZ25lZCBsb25nKWFyZ3MtXHUwMDNlZm5fYXJnO1xuYXJjaC9tNjhrL2tlcm5lbC9wcm9jZXNzLmM6MTY5Olx0XHRmcmFtZS1cdTAwM2Vzdy5yZXRwYyA9ICh1bnNpZ25lZCBsb25nKXJldF9mcm9tX2tlcm5lbF90aHJlYWQ7XG5hcmNoL202OGsva2VybmVsL3Byb2Nlc3MuYy0xNzAtXHRcdHAtXHUwMDNldGhyZWFkLnVzcCA9IDA7XG4tLVxuYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oPTI5PWV4dGVybiB2b2lkIHJldF9mcm9tX2Zvcmsodm9pZCk7XG5hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmg6MzA6ZXh0ZXJuIHZvaWQgcmV0X2Zyb21fa2VybmVsX3RocmVhZCh2b2lkKTtcbmFyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaC0zMS1cbi0tXG5hcmNoL21pY3JvYmxhemUva2VybmVsL2VudHJ5LlM9NTAzPUNfRU5UUlkocmV0X2Zyb21fZm9yayk6XG4tLVxuYXJjaC9taWNyb2JsYXplL2tlcm5lbC9lbnRyeS5TLTUwOS1cbmFyY2gvbWljcm9ibGF6ZS9rZXJuZWwvZW50cnkuUzo1MTA6Q19FTlRSWShyZXRfZnJvbV9rZXJuZWxfdGhyZWFkKTpcbmFyY2gvbWljcm9ibGF6ZS9rZXJuZWwvZW50cnkuUy01MTEtXHRicmFsaWRcdHIxNSwgc2NoZWR1bGVfdGFpbDsgLyogLi4ud2hpY2ggaXMgc2NoZWR1bGVfdGFpbCYjMzk7cyBhcmcgKi9cbi0tXG5hcmNoL21pY3JvYmxhemUva2VybmVsL3Byb2Nlc3MuYz01NT1pbnQgY29weV90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBjb25zdCBzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgKmFyZ3MpXG4tLVxuYXJjaC9taWNyb2JsYXplL2tlcm5lbC9wcm9jZXNzLmMtNzMtXHRcdHRpLVx1MDAzZWNwdV9jb250ZXh0Lm1zciA9IGNoaWxkcmVncy1cdTAwM2Vtc3IgXHUwMDI2IH5NU1JfSUU7XG5hcmNoL21pY3JvYmxhemUva2VybmVsL3Byb2Nlc3MuYzo3NDpcdFx0dGktXHUwMDNlY3B1X2NvbnRleHQucjE1ID0gKHVuc2lnbmVkIGxvbmcpcmV0X2Zyb21fa2VybmVsX3RocmVhZCAtIDg7XG5hcmNoL21pY3JvYmxhemUva2VybmVsL3Byb2Nlc3MuYy03NS1cdFx0cmV0dXJuIDA7XG4tLVxuYXJjaC9taXBzL2luY2x1ZGUvYXNtL3N3aXRjaF90by5oPTg5PWRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9zd2l0Y2hfdG8uaC0xMDQtICogRm9yIG5ld2x5IGNyZWF0ZWQga2VybmVsIHRocmVhZHMgc3dpdGNoX3RvKCkgd2lsbCByZXR1cm4gdG9cbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9zd2l0Y2hfdG8uaDoxMDU6ICogcmV0X2Zyb21fa2VybmVsX3RocmVhZCwgbmV3bHkgY3JlYXRlZCB1c2VyIHRocmVhZHMgdG8gcmV0X2Zyb21fZm9yay5cbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9zd2l0Y2hfdG8uaC0xMDYtICogVGhhdCBpcywgZXZlcnl0aGluZyBmb2xsb3dpbmcgcmVzdW1lKCkgd2lsbCBiZSBza2lwcGVkIGZvciBuZXcgdGhyZWFkcy5cbi0tXG5hcmNoL21pcHMva2VybmVsL2VudHJ5LlM9NTY9cmVzdW1lX2tlcm5lbDpcbi0tXG5hcmNoL21pcHMva2VybmVsL2VudHJ5LlMtNjktXG5hcmNoL21pcHMva2VybmVsL2VudHJ5LlM6NzA6RkVYUE9SVChyZXRfZnJvbV9rZXJuZWxfdGhyZWFkKVxuYXJjaC9taXBzL2tlcm5lbC9lbnRyeS5TLTcxLVx0amFsXHRzY2hlZHVsZV90YWlsXHRcdCMgYTAgPSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXZcbi0tXG5hcmNoL21pcHMva2VybmVsL3Byb2Nlc3MuYz00OT1hc21saW5rYWdlIHZvaWQgcmV0X2Zyb21fZm9yayh2b2lkKTtcbmFyY2gvbWlwcy9rZXJuZWwvcHJvY2Vzcy5jOjUwOmFzbWxpbmthZ2Ugdm9pZCByZXRfZnJvbV9rZXJuZWxfdGhyZWFkKHZvaWQpO1xuYXJjaC9taXBzL2tlcm5lbC9wcm9jZXNzLmMtNTEtXG4tLVxuYXJjaC9taXBzL2tlcm5lbC9wcm9jZXNzLmM9MTA4PWludCBjb3B5X3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGNvbnN0IHN0cnVjdCBrZXJuZWxfY2xvbmVfYXJncyAqYXJncylcbi0tXG5hcmNoL21pcHMva2VybmVsL3Byb2Nlc3MuYy0xNDMtXHRcdHAtXHUwMDNldGhyZWFkLnJlZzI5ID0gY2hpbGRrc3A7XG5hcmNoL21pcHMva2VybmVsL3Byb2Nlc3MuYzoxNDQ6XHRcdHAtXHUwMDNldGhyZWFkLnJlZzMxID0gKHVuc2lnbmVkIGxvbmcpIHJldF9mcm9tX2tlcm5lbF90aHJlYWQ7XG5hcmNoL21pcHMva2VybmVsL3Byb2Nlc3MuYy0xNDUtI2lmIGRlZmluZWQoQ09ORklHX0NQVV9SMzAwMClcbi0tXG5hcmNoL25pb3MyL2tlcm5lbC9lbnRyeS5TPTUwOD1FTlRSWShyZXRfZnJvbV9mb3JrKVxuLS1cbmFyY2gvbmlvczIva2VybmVsL2VudHJ5LlMtNTExLVxuYXJjaC9uaW9zMi9rZXJuZWwvZW50cnkuUzo1MTI6RU5UUlkocmV0X2Zyb21fa2VybmVsX3RocmVhZClcbmFyY2gvbmlvczIva2VybmVsL2VudHJ5LlMtNTEzLVx0Y2FsbFx0c2NoZWR1bGVfdGFpbFxuLS1cbmFyY2gvbmlvczIva2VybmVsL3Byb2Nlc3MuYz0yOD1hc21saW5rYWdlIHZvaWQgcmV0X2Zyb21fZm9yayh2b2lkKTtcbmFyY2gvbmlvczIva2VybmVsL3Byb2Nlc3MuYzoyOTphc21saW5rYWdlIHZvaWQgcmV0X2Zyb21fa2VybmVsX3RocmVhZCh2b2lkKTtcbmFyY2gvbmlvczIva2VybmVsL3Byb2Nlc3MuYy0zMC1cbi0tXG5hcmNoL25pb3MyL2tlcm5lbC9wcm9jZXNzLmM9MTAyPWludCBjb3B5X3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGNvbnN0IHN0cnVjdCBrZXJuZWxfY2xvbmVfYXJncyAqYXJncylcbi0tXG5hcmNoL25pb3MyL2tlcm5lbC9wcm9jZXNzLmMtMTE4LVx0XHRjaGlsZHN0YWNrLVx1MDAzZXIxNyA9ICh1bnNpZ25lZCBsb25nKSBhcmdzLVx1MDAzZWZuX2FyZztcbmFyY2gvbmlvczIva2VybmVsL3Byb2Nlc3MuYzoxMTk6XHRcdGNoaWxkc3RhY2stXHUwMDNlcmEgPSAodW5zaWduZWQgbG9uZykgcmV0X2Zyb21fa2VybmVsX3RocmVhZDtcbmFyY2gvbmlvczIva2VybmVsL3Byb2Nlc3MuYy0xMjAtXHRcdGNoaWxkcmVncy1cdTAwM2Vlc3RhdHVzID0gU1RBVFVTX1BJRTtcbi0tXG5hcmNoL29wZW5yaXNjL2tlcm5lbC9lbnRyeS5TPTEwODI9RU5UUlkoX3N3aXRjaClcbi0tXG5hcmNoL29wZW5yaXNjL2tlcm5lbC9lbnRyeS5TLTExNDktXHQgKiB0aGF0IG1heSBiZSBlaXRoZXIgc2NoZWR1bGUoKSwgcmV0X2Zyb21fZm9yaygpLCBvclxuYXJjaC9vcGVucmlzYy9rZXJuZWwvZW50cnkuUzoxMTUwOlx0ICogcmV0X2Zyb21fa2VybmVsX3RocmVhZCgpLiAgSWYgd2UgYXJlIHJldHVybmluZyB0byBhIG5ldyB0aHJlYWQsXG5hcmNoL29wZW5yaXNjL2tlcm5lbC9lbnRyeS5TLTExNTEtXHQgKiB3ZSBhcmUgZXhwZWN0ZWQgdG8gaGF2ZSBzZXQgdXAgdGhlIGFyZyB0byBzY2hlZHVsZV90YWlsIGFscmVhZHksXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL2VudHJ5LlM9NzI4PUVORChmYXVsdF92ZWN0b3JfMTEpXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL2VudHJ5LlMtNzQyLVxuYXJjaC9wYXJpc2Mva2VybmVsL2VudHJ5LlM6NzQzOkVOVFJZKHJldF9mcm9tX2tlcm5lbF90aHJlYWQpXG5hcmNoL3BhcmlzYy9rZXJuZWwvZW50cnkuUy03NDQtXHQvKiBDYWxsIHNjaGVkdWxlX3RhaWwgZmlyc3QgdGhvdWdoICovXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL2VudHJ5LlMtNzU3LVx0bm9wXG5hcmNoL3BhcmlzYy9rZXJuZWwvZW50cnkuUzo3NTg6RU5EKHJldF9mcm9tX2tlcm5lbF90aHJlYWQpXG5hcmNoL3BhcmlzYy9rZXJuZWwvZW50cnkuUy03NTktXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3MuYz0yMDU9Y29weV90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBjb25zdCBzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgKmFyZ3MpXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3MuYy0yMTUtXHQgKiBNYWtlIHRoZW0gY29uc3Qgc28gdGhlIGNvbXBpbGVyIGtub3dzIHRoZXkgbGl2ZSBpbiAudGV4dCAqL1xuYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3MuYzoyMTY6XHRleHRlcm4gdm9pZCAqIGNvbnN0IHJldF9mcm9tX2tlcm5lbF90aHJlYWQ7XG5hcmNoL3BhcmlzYy9rZXJuZWwvcHJvY2Vzcy5jLTIxNy1cdGV4dGVybiB2b2lkICogY29uc3QgY2hpbGRfcmV0dXJuO1xuLS1cbmFyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzLmMtMjIzLVx0XHRcdHJldHVybiAwO1xuYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3MuYzoyMjQ6XHRcdC8qIE11c3QgZXhpdCB2aWEgcmV0X2Zyb21fa2VybmVsX3RocmVhZCBpbiBvcmRlclxuYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3MuYy0yMjUtXHRcdCAqIHRvIGNhbGwgc2NoZWR1bGVfdGFpbCgpXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3MuYy0yMjctXHRcdGNyZWdzLVx1MDAzZWtzcCA9ICh1bnNpZ25lZCBsb25nKSBzdGFjayAmIzQzOyBGUkFNRV9TSVpFICYjNDM7IFBUX1NaX0FMR047XG5hcmNoL3BhcmlzYy9rZXJuZWwvcHJvY2Vzcy5jOjIyODpcdFx0Y3JlZ3MtXHUwMDNla3BjID0gKHVuc2lnbmVkIGxvbmcpIFx1MDAyNnJldF9mcm9tX2tlcm5lbF90aHJlYWQ7XG5hcmNoL3BhcmlzYy9rZXJuZWwvcHJvY2Vzcy5jLTIyOS1cdFx0LypcbmFyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzLmMtMjMwLVx0XHQgKiBDb3B5IGZ1bmN0aW9uIGFuZCBhcmd1bWVudCB0byBiZSBjYWxsZWQgZnJvbVxuYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3MuYzoyMzE6XHRcdCAqIHJldF9mcm9tX2tlcm5lbF90aHJlYWQuXG5hcmNoL3BhcmlzYy9rZXJuZWwvcHJvY2Vzcy5jLTIzMi1cdFx0ICovXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jPTIxNz1zdGF0aWMgaW50IHVud2luZF9zcGVjaWFsKHN0cnVjdCB1bndpbmRfZnJhbWVfaW5mbyAqaW5mbywgdW5zaWduZWQgbG9uZyBwYywgaW50IGZyYW1lX3NpemUpXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jLTIyNS1cdCAqL1xuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jOjIyNjpcdGV4dGVybiB2b2lkICogY29uc3QgcmV0X2Zyb21fa2VybmVsX3RocmVhZDtcbmFyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYy0yMjctXHRleHRlcm4gdm9pZCAqIGNvbnN0IHN5c2NhbGxfZXhpdDtcbi0tXG5hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmMtMjQxLVxuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jOjI0MjpcdGlmIChwYyA9PSAodW5zaWduZWQgbG9uZylcdTAwMjZyZXRfZnJvbV9rZXJuZWxfdGhyZWFkIHx8XG5hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmMtMjQzLVx0ICAgIHBjID09ICh1bnNpZ25lZCBsb25nKVx1MDAyNnN5c2NhbGxfZXhpdCkge1xuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfMzIuUz0xODk9cmV0X2Zyb21fa2VybmVsX3VzZXJfdGhyZWFkOlxuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfMzIuUy0xOTctXG5hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzMyLlM6MTk4Olx0Lmdsb2JsXHRzdGFydF9rZXJuZWxfdGhyZWFkXG5hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzMyLlM6MTk5OnN0YXJ0X2tlcm5lbF90aHJlYWQ6XG5hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzMyLlMtMjAwLVx0YmxcdHNjaGVkdWxlX3RhaWxcbi0tXG5hcmNoL3Bvd2VycGMva2VybmVsL2ludGVycnVwdF82NC5TPTc0Mj1fR0xPQkFMKHJldF9mcm9tX2tlcm5lbF91c2VyX3RocmVhZClcbi0tXG5hcmNoL3Bvd2VycGMva2VybmVsL2ludGVycnVwdF82NC5TLTc1Ny1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvaW50ZXJydXB0XzY0LlM6NzU4Ol9HTE9CQUwoc3RhcnRfa2VybmVsX3RocmVhZClcbmFyY2gvcG93ZXJwYy9rZXJuZWwvaW50ZXJydXB0XzY0LlMtNzU5LVx0YmxcdENGVU5DKHNjaGVkdWxlX3RhaWwpXG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmM9MTI3OT1zdHJ1Y3QgdGFza19zdHJ1Y3QgKl9fc3dpdGNoX3RvKHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldixcbi0tXG5hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYy0xMzQxLVx0ICogZnJhbWUgZm9yIG5ldyB0YXNrcyB0aGF0IGRpcmVjdGx5IHJldHVybnMgdGhyb3VnaCByZXRfZnJvbV9mb3JrKCkgb3JcbmFyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jOjEzNDI6XHQgKiByZXRfZnJvbV9rZXJuZWxfdGhyZWFkKCkuIFNlZSBjb3B5X3RocmVhZCgpIGZvciBkZXRhaWxzLlxuYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMtMTM0My1cdCAqL1xuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jLTEzNTQtXHQgKiBOb3RoaW5nIGFmdGVyIF9zd2l0Y2ggd2lsbCBiZSBydW4gZm9yIG5ld2x5IGNyZWF0ZWQgdGFza3MsXG5hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYzoxMzU1Olx0ICogYmVjYXVzZSB0aGV5IHN3aXRjaCBkaXJlY3RseSB0byByZXRfZnJvbV9mb3JrL3JldF9mcm9tX2tlcm5lbF90aHJlYWRcbmFyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jLTEzNTYtXHQgKiBldGMuIENvZGUgYWRkZWQgaGVyZSBzaG91bGQgaGF2ZSBhIGNvbW1lbnQgZXhwbGFpbmluZyB3aHkgdGhhdCBpc1xuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jPTE3MzM9aW50IGNvcHlfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY29uc3Qgc3RydWN0IGtlcm5lbF9jbG9uZV9hcmdzICphcmdzKVxuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jLTE3MzgtXHRleHRlcm4gdm9pZCByZXRfZnJvbV9rZXJuZWxfdXNlcl90aHJlYWQodm9pZCk7XG5hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYzoxNzM5Olx0ZXh0ZXJuIHZvaWQgc3RhcnRfa2VybmVsX3RocmVhZCh2b2lkKTtcbmFyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jLTE3NDAtXHR2b2lkICgqZikodm9pZCk7XG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMtMTc1NC1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jOjE3NTU6XHRcdGYgPSBzdGFydF9rZXJuZWxfdGhyZWFkO1xuYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMtMTc1Ni1cdFx0cC1cdTAwM2V0aHJlYWQucmVncyA9IE5VTEw7XHQvKiBubyB1c2VyIHJlZ2lzdGVyIHN0YXRlICovXG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMtMTgyOS1cdFx0ICogc3dpdGNoIGZyYW1lIHNvIHRoZXkgYXJlIGxvYWRlZCBieSBfc3dpdGNoIGJlZm9yZSBpdCByZXR1cm5zXG5hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYzoxODMwOlx0XHQgKiB0byByZXRfZnJvbV9rZXJuZWxfdGhyZWFkLlxuYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMtMTgzMS1cdFx0ICovXG4tLVxuYXJjaC9zaC9rZXJuZWwvZW50cnktY29tbW9uLlM9MjY5PXJldF9mcm9tX2Zvcms6XG4tLVxuYXJjaC9zaC9rZXJuZWwvZW50cnktY29tbW9uLlMtMjc2LVx0LmFsaWduXHQyXG5hcmNoL3NoL2tlcm5lbC9lbnRyeS1jb21tb24uUzoyNzc6XHQuZ2xvYmxcdHJldF9mcm9tX2tlcm5lbF90aHJlYWRcbmFyY2gvc2gva2VybmVsL2VudHJ5LWNvbW1vbi5TOjI3ODpyZXRfZnJvbV9rZXJuZWxfdGhyZWFkOlxuYXJjaC9zaC9rZXJuZWwvZW50cnktY29tbW9uLlMtMjc5LVx0bW92LmxcdDFmLCByOFxuLS1cbmFyY2gvc2gva2VybmVsL3Byb2Nlc3NfMzIuYz04Nz1hc21saW5rYWdlIHZvaWQgcmV0X2Zyb21fZm9yayh2b2lkKTtcbmFyY2gvc2gva2VybmVsL3Byb2Nlc3NfMzIuYzo4ODphc21saW5rYWdlIHZvaWQgcmV0X2Zyb21fa2VybmVsX3RocmVhZCh2b2lkKTtcbmFyY2gvc2gva2VybmVsL3Byb2Nlc3NfMzIuYy04OS1cbmFyY2gvc2gva2VybmVsL3Byb2Nlc3NfMzIuYz05MD1pbnQgY29weV90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBjb25zdCBzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgKmFyZ3MpXG4tLVxuYXJjaC9zaC9rZXJuZWwvcHJvY2Vzc18zMi5jLTExNS1cdFx0bWVtc2V0KGNoaWxkcmVncywgMCwgc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSk7XG5hcmNoL3NoL2tlcm5lbC9wcm9jZXNzXzMyLmM6MTE2Olx0XHRwLVx1MDAzZXRocmVhZC5wYyA9ICh1bnNpZ25lZCBsb25nKSByZXRfZnJvbV9rZXJuZWxfdGhyZWFkO1xuYXJjaC9zaC9rZXJuZWwvcHJvY2Vzc18zMi5jLTExNy1cdFx0Y2hpbGRyZWdzLVx1MDAzZXJlZ3NbNF0gPSAodW5zaWduZWQgbG9uZykgYXJncy1cdTAwM2Vmbl9hcmc7XG4tLVxuYXJjaC9zcGFyYy9rZXJuZWwvZW50cnkuUz05NjM9cmV0X2Zyb21fZm9yazpcbi0tXG5hcmNoL3NwYXJjL2tlcm5lbC9lbnRyeS5TLTk2OC1cbmFyY2gvc3BhcmMva2VybmVsL2VudHJ5LlM6OTY5Olx0Lmdsb2JsXHRyZXRfZnJvbV9rZXJuZWxfdGhyZWFkXG5hcmNoL3NwYXJjL2tlcm5lbC9lbnRyeS5TOjk3MDpyZXRfZnJvbV9rZXJuZWxfdGhyZWFkOlxuYXJjaC9zcGFyYy9rZXJuZWwvZW50cnkuUy05NzEtXHRjYWxsXHRzY2hlZHVsZV90YWlsXG4tLVxuYXJjaC9zcGFyYy9rZXJuZWwvcHJvY2Vzc18zMi5jPTI2MD1leHRlcm4gdm9pZCByZXRfZnJvbV9mb3JrKHZvaWQpO1xuYXJjaC9zcGFyYy9rZXJuZWwvcHJvY2Vzc18zMi5jOjI2MTpleHRlcm4gdm9pZCByZXRfZnJvbV9rZXJuZWxfdGhyZWFkKHZvaWQpO1xuYXJjaC9zcGFyYy9rZXJuZWwvcHJvY2Vzc18zMi5jLTI2Mi1cbmFyY2gvc3BhcmMva2VybmVsL3Byb2Nlc3NfMzIuYz0yNjM9aW50IGNvcHlfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY29uc3Qgc3RydWN0IGtlcm5lbF9jbG9uZV9hcmdzICphcmdzKVxuLS1cbmFyY2gvc3BhcmMva2VybmVsL3Byb2Nlc3NfMzIuYy0zMDUtXHRcdG1lbXNldChuZXdfc3RhY2ssIDAsIFNUQUNLRlJBTUVfU1ogJiM0MzsgVFJBQ0VSRUdfU1opO1xuYXJjaC9zcGFyYy9rZXJuZWwvcHJvY2Vzc18zMi5jOjMwNjpcdFx0dGktXHUwMDNla3BjID0gKCgodW5zaWduZWQgbG9uZykgcmV0X2Zyb21fa2VybmVsX3RocmVhZCkgLSAweDgpO1xuYXJjaC9zcGFyYy9rZXJuZWwvcHJvY2Vzc18zMi5jLTMwNy1cdFx0Y2hpbGRyZWdzLVx1MDAzZXVfcmVnc1tVUkVHX0cxXSA9ICh1bnNpZ25lZCBsb25nKSBhcmdzLVx1MDAzZWZuO1xuLS1cbmFyY2gveDg2L2VudHJ5L2VudHJ5XzMyLlM9MTA0Nj1oYW5kbGVfZXhjZXB0aW9uX3JldHVybjpcbi0tXG5hcmNoL3g4Ni9lbnRyeS9lbnRyeV8zMi5TLTEwNTItXHQvKlxuYXJjaC94ODYvZW50cnkvZW50cnlfMzIuUzoxMDUzOlx0ICogV2UgY2FuIGJlIGNvbWluZyBoZXJlIGZyb20gY2hpbGQgc3Bhd25lZCBieSBrZXJuZWxfdGhyZWFkKCkuXG5hcmNoL3g4Ni9lbnRyeS9lbnRyeV8zMi5TLTEwNTQtXHQgKi9cbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90bGJmbHVzaC5oPTE3Mz1ERUNMQVJFX1BFUl9DUFVfU0hBUkVEX0FMSUdORUQoc3RydWN0IHRsYl9zdGF0ZV9zaGFyZWQsIGNwdV90bGJzdGF0ZV9zaGFyZWQpO1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgtMTc2LSAqIFBsZWFzZSBpZ25vcmUgdGhlIG5hbWUgb2YgdGhpcyBmdW5jdGlvbi4gIEl0IHNob3VsZCBiZSBjYWxsZWRcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RsYmZsdXNoLmg6MTc3OiAqIHN3aXRjaF90b19rZXJuZWxfdGhyZWFkKCkuXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90bGJmbHVzaC5oLTE3OC0gKlxuLS1cbmFyY2gveHRlbnNhL2tlcm5lbC9lbnRyeS5TPTIxNTg9RU5EUFJPQyhyZXRfZnJvbV9mb3JrKVxuLS1cbmFyY2gveHRlbnNhL2tlcm5lbC9lbnRyeS5TLTIxNjQtICovXG5hcmNoL3h0ZW5zYS9rZXJuZWwvZW50cnkuUzoyMTY1OkVOVFJZKHJldF9mcm9tX2tlcm5lbF90aHJlYWQpXG5hcmNoL3h0ZW5zYS9rZXJuZWwvZW50cnkuUy0yMTY2LVxuLS1cbmFyY2gveHRlbnNhL2tlcm5lbC9lbnRyeS5TLTIxNzEtXG5hcmNoL3h0ZW5zYS9rZXJuZWwvZW50cnkuUzoyMTcyOkVORFBST0MocmV0X2Zyb21fa2VybmVsX3RocmVhZClcbmFyY2gveHRlbnNhL2tlcm5lbC9lbnRyeS5TLTIxNzMtXG4tLVxuYXJjaC94dGVuc2Eva2VybmVsL3Byb2Nlc3MuYz01Mz1leHRlcm4gdm9pZCByZXRfZnJvbV9mb3JrKHZvaWQpO1xuYXJjaC94dGVuc2Eva2VybmVsL3Byb2Nlc3MuYzo1NDpleHRlcm4gdm9pZCByZXRfZnJvbV9rZXJuZWxfdGhyZWFkKHZvaWQpO1xuYXJjaC94dGVuc2Eva2VybmVsL3Byb2Nlc3MuYy01NS1cbi0tXG5hcmNoL3h0ZW5zYS9rZXJuZWwvcHJvY2Vzcy5jPTIxNz1pbnQgYXJjaF9kdXBfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICpkc3QsIHN0cnVjdCB0YXNrX3N0cnVjdCAqc3JjKVxuLS1cbmFyY2gveHRlbnNhL2tlcm5lbC9wcm9jZXNzLmMtMjQ3LSAqIFdlIGNyZWF0ZSBhIGR1bW15IGZyYW1lIHRvIHJldHVybiB0byBlaXRoZXIgcmV0X2Zyb21fZm9yayBvclxuYXJjaC94dGVuc2Eva2VybmVsL3Byb2Nlc3MuYzoyNDg6ICogICByZXRfZnJvbV9rZXJuZWxfdGhyZWFkOlxuYXJjaC94dGVuc2Eva2VybmVsL3Byb2Nlc3MuYzoyNDk6ICogICBhMCBwb2ludHMgdG8gcmV0X2Zyb21fZm9yay9yZXRfZnJvbV9rZXJuZWxfdGhyZWFkIChzaW11bGF0aW5nIGEgY2FsbDQpXG5hcmNoL3h0ZW5zYS9rZXJuZWwvcHJvY2Vzcy5jLTI1MC0gKiAgIHNwIHBvaW50cyB0byBpdHNlbGYgKHRocmVhZC5zcClcbi0tXG5hcmNoL3h0ZW5zYS9rZXJuZWwvcHJvY2Vzcy5jPTI2OD1pbnQgY29weV90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBjb25zdCBzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgKmFyZ3MpXG4tLVxuYXJjaC94dGVuc2Eva2VybmVsL3Byb2Nlc3MuYy0zMzQtXHRcdHAtXHUwMDNldGhyZWFkLnJhID0gTUFLRV9SQV9GT1JfQ0FMTChcbmFyY2gveHRlbnNhL2tlcm5lbC9wcm9jZXNzLmM6MzM1Olx0XHRcdFx0KHVuc2lnbmVkIGxvbmcpcmV0X2Zyb21fa2VybmVsX3RocmVhZCwgMSk7XG5hcmNoL3h0ZW5zYS9rZXJuZWwvcHJvY2Vzcy5jLTMzNi1cbmFyY2gveHRlbnNhL2tlcm5lbC9wcm9jZXNzLmM6MzM3Olx0XHQvKiBwYXNzIHBhcmFtZXRlcnMgdG8gcmV0X2Zyb21fa2VybmVsX3RocmVhZDogKi9cbmFyY2gveHRlbnNhL2tlcm5lbC9wcm9jZXNzLmMtMzM4LSNpZiBkZWZpbmVkKF9fWFRFTlNBX1dJTkRPV0VEX0FCSV9fKVxuLS1cbmRyaXZlcnMvbWVkaWEvY2VjL2NvcmUvY2VjLWNvcmUuYz0yMjM9c3RydWN0IGNlY19hZGFwdGVyICpjZWNfYWxsb2NhdGVfYWRhcHRlcihjb25zdCBzdHJ1Y3QgY2VjX2FkYXBfb3BzICpvcHMsXG4tLVxuZHJpdmVycy9tZWRpYS9jZWMvY29yZS9jZWMtY29yZS5jLTI2Ny1cdGlmIChJU19FUlIoYWRhcC1cdTAwM2VrdGhyZWFkKSkge1xuZHJpdmVycy9tZWRpYS9jZWMvY29yZS9jZWMtY29yZS5jOjI2ODpcdFx0cHJfZXJyKFwmIzM0O2NlYy0lczoga2VybmVsX3RocmVhZCgpIGZhaWxlZFxcblwmIzM0OywgbmFtZSk7XG5kcml2ZXJzL21lZGlhL2NlYy9jb3JlL2NlYy1jb3JlLmMtMjY5LVx0XHRyZXMgPSBQVFJfRVJSKGFkYXAtXHUwMDNla3RocmVhZCk7XG4tLVxuZHJpdmVycy9tZWRpYS9jZWMvY29yZS9jZWMtcGluLmM9MTE1OD1zdGF0aWMgaW50IGNlY19waW5fYWRhcF9lbmFibGUoc3RydWN0IGNlY19hZGFwdGVyICphZGFwLCBib29sIGVuYWJsZSlcbi0tXG5kcml2ZXJzL21lZGlhL2NlYy9jb3JlL2NlYy1waW4uYy0xMTczLVxuZHJpdmVycy9tZWRpYS9jZWMvY29yZS9jZWMtcGluLmM6MTE3NDpcdFx0XHRcdHByX2VycihcJiMzNDtjZWMtcGluOiBrZXJuZWxfdGhyZWFkKCkgZmFpbGVkXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbWVkaWEvY2VjL2NvcmUvY2VjLXBpbi5jLTExNzUtXHRcdFx0XHRwaW4tXHUwMDNla3RocmVhZCA9IE5VTEw7XG4tLVxuZHJpdmVycy9tZWRpYS9kdmItY29yZS9kdmJfY2FfZW41MDIyMS5jPTE4NzA9aW50IGR2Yl9jYV9lbjUwMjIxX2luaXQoc3RydWN0IGR2Yl9hZGFwdGVyICpkdmJfYWRhcHRlcixcbi0tXG5kcml2ZXJzL21lZGlhL2R2Yi1jb3JlL2R2Yl9jYV9lbjUwMjIxLmMtMTkzMy1cdFx0cmV0ID0gUFRSX0VSUihjYS1cdTAwM2V0aHJlYWQpO1xuZHJpdmVycy9tZWRpYS9kdmItY29yZS9kdmJfY2FfZW41MDIyMS5jOjE5MzQ6XHRcdHByX2VycihcJiMzNDtkdmJfY2FfaW5pdDogZmFpbGVkIHRvIHN0YXJ0IGtlcm5lbF90aHJlYWQgKCVkKVxcblwmIzM0OyxcbmRyaXZlcnMvbWVkaWEvZHZiLWNvcmUvZHZiX2NhX2VuNTAyMjEuYy0xOTM1LVx0XHQgICAgICAgcmV0KTtcbi0tXG5kcml2ZXJzL21lZGlhL2kyYy9tc3AzNDAwLWRyaXZlci5jPTY1OD1zdGF0aWMgaW50IG1zcF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KVxuLS1cbmRyaXZlcnMvbWVkaWEvaTJjL21zcDM0MDAtZHJpdmVyLmMtODQ4LVx0XHRpZiAoSVNfRVJSKHN0YXRlLVx1MDAzZWt0aHJlYWQpKVxuZHJpdmVycy9tZWRpYS9pMmMvbXNwMzQwMC1kcml2ZXIuYzo4NDk6XHRcdFx0ZGV2X3dhcm4oXHUwMDI2Y2xpZW50LVx1MDAzZWRldiwgXCYjMzQ7a2VybmVsX3RocmVhZCgpIGZhaWxlZFxcblwmIzM0Oyk7XG5kcml2ZXJzL21lZGlhL2kyYy9tc3AzNDAwLWRyaXZlci5jLTg1MC1cdFx0bXNwX3dha2VfdGhyZWFkKGNsaWVudCk7XG4tLVxuZHJpdmVycy9tZWRpYS9wY2kvc2FhNzEzNC9zYWE3MTM0LXR2YXVkaW8uYz0xMDAwPWludCBzYWE3MTM0X3R2YXVkaW9faW5pdDIoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYpXG4tLVxuZHJpdmVycy9tZWRpYS9wY2kvc2FhNzEzNC9zYWE3MTM0LXR2YXVkaW8uYy0xMDIwLVx0XHRpZiAoSVNfRVJSKGRldi1cdTAwM2V0aHJlYWQudGhyZWFkKSkge1xuZHJpdmVycy9tZWRpYS9wY2kvc2FhNzEzNC9zYWE3MTM0LXR2YXVkaW8uYzoxMDIxOlx0XHRcdHByX3dhcm4oXCYjMzQ7JXM6IGtlcm5lbF90aHJlYWQoKSBmYWlsZWRcXG5cJiMzNDssXG5kcml2ZXJzL21lZGlhL3BjaS9zYWE3MTM0L3NhYTcxMzQtdHZhdWRpby5jLTEwMjItXHRcdFx0ICAgICAgIGRldi1cdTAwM2VuYW1lKTtcbi0tXG5kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1pcm9wY20yMC5jPTM3OD1zdGF0aWMgaW50IHBjbTIwX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxuZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1taXJvcGNtMjAuYy0zODctXHRcdGlmIChJU19FUlIoZGV2LVx1MDAzZWt0aHJlYWQpKSB7XG5kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1pcm9wY20yMC5jOjM4ODpcdFx0XHR2NGwyX2VycihcdTAwMjZkZXYtXHUwMDNldjRsMl9kZXYsIFwmIzM0O2tlcm5lbF90aHJlYWQoKSBmYWlsZWRcXG5cJiMzNDspO1xuZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1taXJvcGNtMjAuYy0zODktXHRcdFx0djRsMl9maF9yZWxlYXNlKGZpbGUpO1xuLS1cbmRyaXZlcnMvbWVkaWEvdGVzdC1kcml2ZXJzL3ZpdmlkL3ZpdmlkLWNvcmUuYz0xODAwPXN0YXRpYyBpbnQgdml2aWRfY3JlYXRlX2luc3RhbmNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCBpbnN0KVxuLS1cbmRyaXZlcnMvbWVkaWEvdGVzdC1kcml2ZXJzL3ZpdmlkL3ZpdmlkLWNvcmUuYy0yMDIyLVx0XHRcdGRldi1cdTAwM2VrdGhyZWFkX2NlYyA9IE5VTEw7XG5kcml2ZXJzL21lZGlhL3Rlc3QtZHJpdmVycy92aXZpZC92aXZpZC1jb3JlLmM6MjAyMzpcdFx0XHR2NGwyX2VycihcdTAwMjZkZXYtXHUwMDNldjRsMl9kZXYsIFwmIzM0O2tlcm5lbF90aHJlYWQoKSBmYWlsZWRcXG5cJiMzNDspO1xuZHJpdmVycy9tZWRpYS90ZXN0LWRyaXZlcnMvdml2aWQvdml2aWQtY29yZS5jLTIwMjQtXHRcdFx0Z290byB1bnJlZ19kZXY7XG4tLVxuZHJpdmVycy9tZWRpYS90ZXN0LWRyaXZlcnMvdml2aWQvdml2aWQta3RocmVhZC1jYXAuYz04MTI9aW50IHZpdmlkX3N0YXJ0X2dlbmVyYXRpbmdfdmlkX2NhcChzdHJ1Y3Qgdml2aWRfZGV2ICpkZXYsIGJvb2wgKnBzdHJlYW1pbmcpXG4tLVxuZHJpdmVycy9tZWRpYS90ZXN0LWRyaXZlcnMvdml2aWQvdml2aWQta3RocmVhZC1jYXAuYy04NDItXHRcdGRldi1cdTAwM2VrdGhyZWFkX3ZpZF9jYXAgPSBOVUxMO1xuZHJpdmVycy9tZWRpYS90ZXN0LWRyaXZlcnMvdml2aWQvdml2aWQta3RocmVhZC1jYXAuYzo4NDM6XHRcdHY0bDJfZXJyKFx1MDAyNmRldi1cdTAwM2V2NGwyX2RldiwgXCYjMzQ7a2VybmVsX3RocmVhZCgpIGZhaWxlZFxcblwmIzM0Oyk7XG5kcml2ZXJzL21lZGlhL3Rlc3QtZHJpdmVycy92aXZpZC92aXZpZC1rdGhyZWFkLWNhcC5jLTg0NC1cdFx0cmV0dXJuIGVycjtcbi0tXG5kcml2ZXJzL21lZGlhL3Rlc3QtZHJpdmVycy92aXZpZC92aXZpZC1rdGhyZWFkLW91dC5jPTI2MD1pbnQgdml2aWRfc3RhcnRfZ2VuZXJhdGluZ192aWRfb3V0KHN0cnVjdCB2aXZpZF9kZXYgKmRldiwgYm9vbCAqcHN0cmVhbWluZylcbi0tXG5kcml2ZXJzL21lZGlhL3Rlc3QtZHJpdmVycy92aXZpZC92aXZpZC1rdGhyZWFkLW91dC5jLTI4OS1cdFx0ZGV2LVx1MDAzZWt0aHJlYWRfdmlkX291dCA9IE5VTEw7XG5kcml2ZXJzL21lZGlhL3Rlc3QtZHJpdmVycy92aXZpZC92aXZpZC1rdGhyZWFkLW91dC5jOjI5MDpcdFx0djRsMl9lcnIoXHUwMDI2ZGV2LVx1MDAzZXY0bDJfZGV2LCBcJiMzNDtrZXJuZWxfdGhyZWFkKCkgZmFpbGVkXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbWVkaWEvdGVzdC1kcml2ZXJzL3ZpdmlkL3ZpdmlkLWt0aHJlYWQtb3V0LmMtMjkxLVx0XHRyZXR1cm4gZXJyO1xuLS1cbmRyaXZlcnMvbWVkaWEvdGVzdC1kcml2ZXJzL3ZpdmlkL3ZpdmlkLWt0aHJlYWQtdG91Y2guYz0xNTE9aW50IHZpdmlkX3N0YXJ0X2dlbmVyYXRpbmdfdG91Y2hfY2FwKHN0cnVjdCB2aXZpZF9kZXYgKmRldilcbi0tXG5kcml2ZXJzL21lZGlhL3Rlc3QtZHJpdmVycy92aXZpZC92aXZpZC1rdGhyZWFkLXRvdWNoLmMtMTY1LVx0XHRkZXYtXHUwMDNla3RocmVhZF90b3VjaF9jYXAgPSBOVUxMO1xuZHJpdmVycy9tZWRpYS90ZXN0LWRyaXZlcnMvdml2aWQvdml2aWQta3RocmVhZC10b3VjaC5jOjE2NjpcdFx0djRsMl9lcnIoXHUwMDI2ZGV2LVx1MDAzZXY0bDJfZGV2LCBcJiMzNDtrZXJuZWxfdGhyZWFkKCkgZmFpbGVkXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbWVkaWEvdGVzdC1kcml2ZXJzL3ZpdmlkL3ZpdmlkLWt0aHJlYWQtdG91Y2guYy0xNjctXHRcdHJldHVybiBlcnI7XG4tLVxuZHJpdmVycy9tZWRpYS90ZXN0LWRyaXZlcnMvdml2aWQvdml2aWQtc2RyLWNhcC5jPTI3NT1zdGF0aWMgaW50IHNkcl9jYXBfc3RhcnRfc3RyZWFtaW5nKHN0cnVjdCB2YjJfcXVldWUgKnZxLCB1bnNpZ25lZCBjb3VudClcbi0tXG5kcml2ZXJzL21lZGlhL3Rlc3QtZHJpdmVycy92aXZpZC92aXZpZC1zZHItY2FwLmMtMjg5LVx0XHRpZiAoSVNfRVJSKGRldi1cdTAwM2VrdGhyZWFkX3Nkcl9jYXApKSB7XG5kcml2ZXJzL21lZGlhL3Rlc3QtZHJpdmVycy92aXZpZC92aXZpZC1zZHItY2FwLmM6MjkwOlx0XHRcdHY0bDJfZXJyKFx1MDAyNmRldi1cdTAwM2V2NGwyX2RldiwgXCYjMzQ7a2VybmVsX3RocmVhZCgpIGZhaWxlZFxcblwmIzM0Oyk7XG5kcml2ZXJzL21lZGlhL3Rlc3QtZHJpdmVycy92aXZpZC92aXZpZC1zZHItY2FwLmMtMjkxLVx0XHRcdGVyciA9IFBUUl9FUlIoZGV2LVx1MDAzZWt0aHJlYWRfc2RyX2NhcCk7XG4tLVxuZHJpdmVycy9taXNjL3NnaS14cC94cGMuaD0yMDU9c3RydWN0IHhwY19hY3RpdmF0ZV9tcV9tc2dfY2hjdGxfb3BlbmNvbXBsZXRlX3V2IHtcbi0tXG5kcml2ZXJzL21pc2Mvc2dpLXhwL3hwYy5oLTIxMC0vKlxuZHJpdmVycy9taXNjL3NnaS14cC94cGMuaDoyMTE6ICogRnVuY3Rpb25zIHJlZ2lzdGVyZWQgYnkgYWRkX3RpbWVyKCkgb3IgY2FsbGVkIGJ5IGtlcm5lbF90aHJlYWQoKSBvbmx5XG5kcml2ZXJzL21pc2Mvc2dpLXhwL3hwYy5oLTIxMi0gKiBhbGxvdyBmb3IgYSBzaW5nbGUgNjQtYml0IGFyZ3VtZW50LiBUaGUgZm9sbG93aW5nIG1hY3JvcyBjYW4gYmUgdXNlZCB0b1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jPTgyMz1saXF1aWRpb19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgKmVudClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYy04ODktXHRcdFx0XHRkZXZfZXJyKFx1MDAyNm9jdF9kZXYtXHUwMDNlcGNpX2Rldi1cdTAwM2VkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYzo4OTA6XHRcdFx0XHRcdFwmIzM0O2ZhaWxlZCB0byBjcmVhdGUga2VybmVsX3RocmVhZFxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYy04OTEtXHRcdFx0XHRsaXF1aWRpb19yZW1vdmUocGRldik7XG4tLVxuZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmUuaD04MDM9c3RydWN0IHFldGhfY2FyZCB7XG4tLVxuZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmUuaC04MzQtXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcnhfbW9kZV93b3JrO1xuZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmUuaDo4MzU6XHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qga2VybmVsX3RocmVhZF9zdGFydGVyO1xuZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmUuaC04MzYtXHRzcGlubG9ja190IHRocmVhZF9tYXNrX2xvY2s7XG4tLVxuZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jPTEwOTU9aW50IHFldGhfc2NoZWR1bGVfcmVjb3Zlcnkoc3RydWN0IHFldGhfY2FyZCAqY2FyZClcbi0tXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMtMTEwMi1cdGlmICghcmMpXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmM6MTEwMzpcdFx0c2NoZWR1bGVfd29yayhcdTAwMjZjYXJkLVx1MDAzZWtlcm5lbF90aHJlYWRfc3RhcnRlcik7XG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMtMTEwNC1cbi0tXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmM9MTU2OD1zdGF0aWMgaW50IHFldGhfZG9fcmVzZXQodm9pZCAqZGF0YSk7XG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmM6MTU2OTpzdGF0aWMgdm9pZCBxZXRoX3N0YXJ0X2tlcm5lbF90aHJlYWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jLTE1NzAte1xuLS1cbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYy0xNTcyLVx0c3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcWV0aF9jYXJkLFxuZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jOjE1NzM6XHRcdFx0XHRcdGtlcm5lbF90aHJlYWRfc3RhcnRlcik7XG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMtMTU3NC1cdFFFVEhfQ0FSRF9URVhUKGNhcmQsIDIsIFwmIzM0O3N0cnRocmRcJiMzNDspO1xuLS1cbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYz0xNTkwPXN0YXRpYyB2b2lkIHFldGhfc2V0dXBfY2FyZChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKVxuLS1cbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYy0xNTk5LVx0bXV0ZXhfaW5pdChcdTAwMjZjYXJkLVx1MDAzZWRpc2NpcGxpbmVfbXV0ZXgpO1xuZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jOjE2MDA6XHRJTklUX1dPUksoXHUwMDI2Y2FyZC1cdTAwM2VrZXJuZWxfdGhyZWFkX3N0YXJ0ZXIsIHFldGhfc3RhcnRfa2VybmVsX3RocmVhZCk7XG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMtMTYwMS1cdElOSVRfTElTVF9IRUFEKFx1MDAyNmNhcmQtXHUwMDNlY21kX3dhaXRlcl9saXN0KTtcbi0tXG5kcml2ZXJzL3R0eS9odmMvaHZjcy5jPTIyNj1zdGF0aWMgaW50IGh2Y3NfaW5kZXhfY291bnQ7XG4tLVxuZHJpdmVycy90dHkvaHZjL2h2Y3MuYy0yMjgtLypcbmRyaXZlcnMvdHR5L2h2Yy9odmNzLmM6MjI5OiAqIFVzZWQgYnkgdGhlIGtodmNzZCB0byBwaWNrIHVwIEkvTyBvcGVyYXRpb25zIHdoZW4gdGhlIGtlcm5lbF90aHJlYWQgaXNcbmRyaXZlcnMvdHR5L2h2Yy9odmNzLmMtMjMwLSAqIGFscmVhZHkgYXdha2UgYnV0IHBvdGVudGlhbGx5IHNoaWZ0ZWQgdG8gVEFTS19JTlRFUlJVUFRJQkxFIHN0YXRlLlxuLS1cbmRyaXZlcnMvdHR5L2h2Yy9odmNzLmM9MjUwPXN0cnVjdCBodmNzX3N0cnVjdCB7XG4tLVxuZHJpdmVycy90dHkvaHZjL2h2Y3MuYy0yNjAtXHQvKlxuZHJpdmVycy90dHkvaHZjL2h2Y3MuYzoyNjE6XHQgKiBVc2VkIHRvIHRlbGwgdGhlIGRyaXZlciBrZXJuZWxfdGhyZWFkIHdoYXQgb3BlcmF0aW9ucyBuZWVkIHRvIHRha2VcbmRyaXZlcnMvdHR5L2h2Yy9odmNzLmMtMjYyLVx0ICogcGxhY2UgdXBvbiB0aGlzIGh2Y3Nfc3RydWN0IGluc3RhbmNlLlxuLS1cbmRyaXZlcnMvdHR5L2h2Yy9odmNzLmM9MTE1Mz1zdGF0aWMgdm9pZCBodmNzX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwKVxuLS1cbmRyaXZlcnMvdHR5L2h2Yy9odmNzLmMtMTE4NC1cdFx0LypcbmRyaXZlcnMvdHR5L2h2Yy9odmNzLmM6MTE4NTpcdFx0ICogTlVMTCB0aGlzIGVhcmx5IHNvIHRoYXQgdGhlIGtlcm5lbF90aHJlYWQgZG9lc24mIzM5O3QgdHJ5IHRvXG5kcml2ZXJzL3R0eS9odmMvaHZjcy5jLTExODYtXHRcdCAqIGV4ZWN1dGUgYW55IG9wZXJhdGlvbnMgb24gdGhlIFRUWSBldmVuIHRob3VnaCBpdCBpcyBvYmxpZ2F0ZWRcbi0tXG5kcml2ZXJzL3R0eS9odmMvaHZjcy5jPTEyNTg9c3RhdGljIHNzaXplX3QgaHZjc193cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1OCAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxuZHJpdmVycy90dHkvaHZjL2h2Y3MuYy0xMzE4LVx0XHQgKiBJZiB0aGlzIGlzIHRydWUgdGhlbiB3ZSBkb24mIzM5O3Qgd2FudCB0byB0cnkgd3JpdGluZyB0byB0aGVcbmRyaXZlcnMvdHR5L2h2Yy9odmNzLmM6MTMxOTpcdFx0ICogaHlwZXJ2aXNvciBiZWNhdXNlIHRoYXQgaXMgdGhlIGtlcm5lbF90aHJlYWRzIGpvYiBub3cuICBXZSYjMzk7bGxcbmRyaXZlcnMvdHR5L2h2Yy9odmNzLmMtMTMyMC1cdFx0ICoganVzdCBhZGQgdG8gdGhlIGJ1ZmZlci5cbi0tXG5kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmM9OTc1PXN0YXRpYyBpbnQgdXNiYXRtX2hlYXZ5X2luaXQoc3RydWN0IHVzYmF0bV9kYXRhICppbnN0YW5jZSlcbi0tXG5kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmMtOTgxLVx0aWYgKElTX0VSUih0KSkge1xuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jOjk4MjpcdFx0dXNiX2VycihpbnN0YW5jZSwgXCYjMzQ7JXM6IGZhaWxlZCB0byBjcmVhdGUga2VybmVsX3RocmVhZCAoJWxkKSFcXG5cJiMzNDssXG5kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmMtOTgzLVx0XHRcdFx0X19mdW5jX18sIFBUUl9FUlIodCkpO1xuLS1cbmRyaXZlcnMvdXNiL2NvcmUvaHViLmM9NjA2Nz1pbnQgdXNiX2h1Yl9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy91c2IvY29yZS9odWIuYy02MDg0LVxuZHJpdmVycy91c2IvY29yZS9odWIuYzo2MDg1Olx0LyogRmFsbCB0aHJvdWdoIGlmIGtlcm5lbF90aHJlYWQgZmFpbGVkICovXG5kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jLTYwODYtXHR1c2JfZGVyZWdpc3RlcihcdTAwMjZodWJfZHJpdmVyKTtcbi0tXG5kcml2ZXJzL3hlbi9tYW5hZ2UuYz05Mj1zdGF0aWMgdm9pZCBkb19zdXNwZW5kKHZvaWQpXG4tLVxuZHJpdmVycy94ZW4vbWFuYWdlLmMtMTEwLVxuZHJpdmVycy94ZW4vbWFuYWdlLmM6MTExOlx0ZXJyID0gZnJlZXplX2tlcm5lbF90aHJlYWRzKCk7XG5kcml2ZXJzL3hlbi9tYW5hZ2UuYy0xMTItXHRpZiAoZXJyKSB7XG4tLVxuZnMvYnVmZmVyLmMtOC0vKlxuZnMvYnVmZmVyLmM6OTogKiBTdGFydCBiZGZsdXNoKCkgd2l0aCBrZXJuZWxfdGhyZWFkIG5vdCBzeXNjYWxsIC0gUGF1bCBHb3J0bWFrZXIsIDEyLzk1XG5mcy9idWZmZXIuYy0xMC0gKlxuLS1cbmluY2x1ZGUvbGludXgvZnJlZXplci5oPTUwPWV4dGVybiBpbnQgZnJlZXplX3Byb2Nlc3Nlcyh2b2lkKTtcbmluY2x1ZGUvbGludXgvZnJlZXplci5oOjUxOmV4dGVybiBpbnQgZnJlZXplX2tlcm5lbF90aHJlYWRzKHZvaWQpO1xuaW5jbHVkZS9saW51eC9mcmVlemVyLmgtNTItZXh0ZXJuIHZvaWQgdGhhd19wcm9jZXNzZXModm9pZCk7XG5pbmNsdWRlL2xpbnV4L2ZyZWV6ZXIuaDo1MzpleHRlcm4gdm9pZCB0aGF3X2tlcm5lbF90aHJlYWRzKHZvaWQpO1xuaW5jbHVkZS9saW51eC9mcmVlemVyLmgtNTQtZXh0ZXJuIHZvaWQgdGhhd19wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7XG4tLVxuaW5jbHVkZS9saW51eC9mcmVlemVyLmg9ODQ9c3RhdGljIGlubGluZSBpbnQgZnJlZXplX3Byb2Nlc3Nlcyh2b2lkKSB7IHJldHVybiAtRU5PU1lTOyB9XG5pbmNsdWRlL2xpbnV4L2ZyZWV6ZXIuaDo4NTpzdGF0aWMgaW5saW5lIGludCBmcmVlemVfa2VybmVsX3RocmVhZHModm9pZCkgeyByZXR1cm4gLUVOT1NZUzsgfVxuaW5jbHVkZS9saW51eC9mcmVlemVyLmgtODYtc3RhdGljIGlubGluZSB2b2lkIHRoYXdfcHJvY2Vzc2VzKHZvaWQpIHt9XG5pbmNsdWRlL2xpbnV4L2ZyZWV6ZXIuaDo4NzpzdGF0aWMgaW5saW5lIHZvaWQgdGhhd19rZXJuZWxfdGhyZWFkcyh2b2lkKSB7fVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA3OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyMzc3CgkJCQkJCQlvdXRwdXQ6IDEwMAoJCQkJCQkJdGhvdWdodHM6IDEyNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgS2VybmVsIFBhdGNoIGZvciBOdWxsIFJvb3QvQ1dEIFN1cHBvcnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgdGFza3Mgd2l0aCBhIGBOVUxMYCByb290IG9yIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgKENXRCksIHdoaWNoIHNlZW1zIHVudXN1YWwuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCBjcmVhdGVzIGFuZCBtYW5hZ2VzIHRoZXNlIGZpbGVzeXN0ZW0gc3RydWN0dXJlcy4gSSBzdGFydGVkIGJ5IGxvb2tpbmcgYXQgaG93IGBrdGhyZWFkZGAgY3JlYXRlcyBga3RocmVhZHNgLCBhbmQgaG93IGBrZXJuZWxfaW5pdGAgaXMgY3JlYXRlZCwgYW5kIG5vdGljZWQgdGhhdCB0aGV5IGFsbCBzaGFyZSBgaW5pdF9mc2AuIFRoaXMgbWVhbnMgaW5pdGlhbGx5LCBubyBrZXJuZWwgdGhyZWFkIGhhcyBpdHMgKm93biogc2VwYXJhdGUgZmlsZXN5c3RlbSBzdHJ1Y3R1cmUuIFRoZXkgYWxsIHNoYXJlIGBpbml0X2ZzYCwgYW5kIGBpbml0X2ZzYCBnZXRzIGl0cyByb290IGFuZCBwd2Qgc2V0IGR1cmluZyBgaW5pdF9tb3VudF90cmVlKClgLiBUaGVyZWZvcmUsIG5vIGtlcm5lbCB0aHJlYWQgY2FuICppbml0aWFsbHkqIGhhdmUgYSBgTlVMTGAgcm9vdCBvciBDV0QgYWZ0ZXIgYGluaXRfbW91bnRfdHJlZSgpYC4KCk5leHQsIEkgbG9va2VkIGF0IG90aGVyIHRocmVhZHMsIGxpa2UgYGlvX3VyaW5nYCBhbmQgYHZob3N0YCB0aHJlYWRzLiBUaGVzZSBhcmUgY3JlYXRlZCBkaWZmZXJlbnRseSwgYnV0IHVsdGltYXRlbHkgdGhleSBpbmhlcml0IG9yIGFyZSBjbG9uZWQgZnJvbSBleGlzdGluZyBwcm9jZXNzZXMsIGd1YXJhbnRlZWluZyBhIHZhbGlkIHJvb3QgYW5kIENXRC4gYGlvX3VyaW5nYCB0aHJlYWRzIGluaGVyaXQgZnJvbSB0aGUgdXNlciBwcm9jZXNzLCBhbmQgYHZob3N0YCB0aHJlYWRzIGFyZSBjcmVhdGVkIGJ5IGBrdGhyZWFkX2NyZWF0ZWAgb3IgYHZob3N0X3Rhc2tfY3JlYXRlYCwgYm90aCBvZiB3aGljaCB1c2UgYENMT05FX0ZTYCBtZWFuaW5nIHRoZXkgc2hhcmUgYSB2YWxpZCBtb3VudCBuYW1lc3BhY2UuCgpTbywgdGhlIGNvbmNsdXNpb24gaXMgdGhhdCwgKmV4Y2VwdCogZm9yIHRoZSBzcGVjaWZpYyBLVW5pdCB0ZXN0IGV4cGxpY2l0bHkgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLCB0aGVyZSYjMzk7cyBubyBwYXRoIGluIHRoZSAqdXBzdHJlYW0ga2VybmVsKiBmb3IgYSB0YXNrIHRvIGVuZCB1cCB3aXRoIGEgYE5VTExgIHJvb3Qgb3IgQ1dELiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgdGhpcyBwYXRjaCBpcyBwcmltYXJpbHkgYWRkaW5nIHN1cHBvcnQgZm9yIGEgZmVhdHVyZSB0aGF0IGlzbiYjMzk7dCBjdXJyZW50bHkgKnVzZWQqIGJ5IGFueSBvdGhlciBwYXJ0IG9mIHRoZSBrZXJuZWwsICpleGNlcHQgdGhlIEtVbml0IHRlc3QqLgoKSWYgdGhpcyBzdXBwb3J0IGlzIG5vdCBjdXJyZW50bHkgdXNlZCBieSBhbnl0aGluZyBvdGhlciB0aGFuIHRoZSBLVW5pdCB0ZXN0LCB0aGVuIHN5emthbGxlciwgdGhlIGZ1enplciwgKmNhbm5vdCogdHJpZ2dlciBpdC4gU3l6a2FsbGVyIGNhbm5vdCBydW4gS1VuaXQgdGVzdHMsIGJ5IGl0cyBuYXR1cmUuIFRoZXJlZm9yZSwgdGhlIGNydWNpYWwgcGFydDogYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGBmYWxzZWAuIEl0JiMzOTtzIHVucmVhY2hhYmxlLgoKTGV0IG1lIGRvdWJsZS1jaGVjay4gSSBoYXZlIHRvIGJlIHN1cmUuIENhbiBhIHVzZXItc3BhY2UgcHJvY2VzcyBzb21laG93IHNldCBgZnMtJmd0O3Jvb3QubW50YCB0byBgTlVMTGA/IEkgY29uc2lkZXJlZCBgY2hyb290YCwgYnV0IGFuIGVtcHR5IHN0cmluZyBgZmlsZW5hbWVgIHJldHVybnMgYC1FTk9FTlRgLiBgcGl2b3Rfcm9vdGAgZG9lc24mIzM5O3Qgc2V0IGl0IHRvIGBOVUxMYCBlaXRoZXIuIGB1bW91bnRgIHdpdGggYE1OVF9ERVRBQ0hgIGRldGFjaGVzIGEgbW91bnQsIGJ1dCB0aGUgcG9pbnRlciBzdGlsbCBwb2ludHMgdG8gdGhlIGRldGFjaGVkIG1vdW50IG9iamVjdCwgaXQmIzM5O3MgKm5vdCogYE5VTExgLiBgbW91bnRgPyBOby4gU28gaXQmIzM5O3Mgbm90IHBvc3NpYmxlIHRvIHNldCB0aGUgcm9vdCB0byBgTlVMTGAgZnJvbSB1c2VyLXNwYWNlLiBJIHRyaWVkIHRvIHRoaW5rIGlmIEkgbWlzc2VkIHNvbWUgc3lzY2FsbC4gYHVuc2hhcmUoQ0xPTkVfTkVXTlMpYD8gYGNvcHlfbW50X25zYCBjb3BpZXMgYSB2YWxpZCByb290LCBhbmQgdGhlcmVmb3JlIG5vdGhpbmcgY2FuIGJlIGBOVUxMYC4gYHNldG5zYD8gYGNvbW1pdF9uc3NldGAgdGFrZXMgY2FyZSBvZiB0aGlzLCBhbmQgaXQgY29waWVzIGEgdmFsaWQgb25lLiBgYnBmYD8gQlBGIHByb2dyYW1zIGRvbiYjMzk7dCBoYXZlIHRoaXMgY2FwYWJpbGl0eSwgdW5sZXNzIHNwZWNpZmljIGhlbHBlcnMuIE5vIHN1Y2ggaGVscGVyIGV4aXN0cy4KClRoZSBwYXRjaCBkZXNjcmlwdGlvbiBzYXlzICYjMzQ7ZnM6IHN1cHBvcnQgdGFza3Mgd2l0aCBhIG51bGwgcm9vdCBvciBjd2QuJiMzNDsgVGhpcyBsaWtlbHkgbWVhbnMgaXQmIzM5O3MgcHJlcCB3b3JrIGZvciBhIGZ1dHVyZSBwYXRjaCwgb3IgaXQmIzM5O3MgZm9yIG91dC1vZi10cmVlIGNvZGUsIG9yIGp1c3QgdG8gbWFrZSB0aGUgVkZTIG1vcmUgcm9idXN0LgoKSSByZXZpZXdlZCB0aGUgcGF0Y2guIEl0IGFkZHMgYE5VTExfUk9PVF9DV0RfS1VOSVRfVEVTVGAuIFRoZSBjaGFuZ2VzIGluIGBmcy9uYW1laS5jYCBhbmQgb3RoZXJzIGFyZSBqdXN0IGNoZWNraW5nIGZvciBgIXBhdGgubW50YCBhbmQgcmV0dXJuaW5nIGAtRU5PRU5UYCBvciBoYW5kbGluZyBpdCBncmFjZWZ1bGx5LiBUaGVzZSBjb2RlIHBhdGhzIGFyZSAqZGVhZCogYmVjYXVzZSB0aGV5IHdpbGwgbm90IGJlIGVudGVyZWQgZHVyaW5nIG5vcm1hbCBleGVjdXRpb24uIFNvLCB0aGUgbmV3IGxvZ2ljIGlzbiYjMzk7dCB3b3J0aCBmdXp6aW5nLgoKTXkgY29uY2x1c2lvbiBpczogYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSBuZXcgbG9naWMgaXMgdW5yZWFjaGFibGUgZHVyaW5nIG5vcm1hbCBleGVjdXRpb24gYW5kIGZ1enppbmcsIGJlY2F1c2UgdGhlcmUmIzM5O3MgY3VycmVudGx5IG5vIHdheSB0byBjcmVhdGUgYSB0YXNrIHdpdGggYSBgTlVMTGAgcm9vdCBvciBDV0QsIG9yIHRvIHNldCBhIHRhc2smIzM5O3Mgcm9vdC9DV0QgdG8gYE5VTExgIGZyb20gdXNlciBzcGFjZSAob3IgZXZlbiB3aXRoaW4gdGhlIGtlcm5lbCBvdXRzaWRlIG9mIHRoZSBLVW5pdCB0ZXN0KS4gVGhpcyBpcyBwcmVwYXJhdGlvbiBmb3IgdGhlIGZ1dHVyZSwgb3IganVzdCBnZW5lcmFsIHJvYnVzdG5lc3MsIG5vdCBhIG5ldyBmZWF0dXJlIHRoYXQgY2FuIGJlIGV4cGxvaXRlZC4gSSB3aWxsIGNhbGwgYHNldC1yZXN1bHRzYCB3aXRoIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwNzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGFza3Mgd2l0aCBhIG51bGwgcm9vdCBvciBjd2QsIGJ1dCB0aGVyZSBpcyBjdXJyZW50bHkgbm8gd2F5IHRvIGNyZWF0ZSBzdWNoIGEgdGFzayBvciBzZXQgYSB0YXNrJiMzOTtzIHJvb3QvY3dkIHRvIG51bGwgZnJvbSB1c2VyIHNwYWNlIChvciBldmVuIHdpdGhpbiB0aGUga2VybmVsLCBvdXRzaWRlIG9mIHRoZSBuZXdseSBhZGRlZCBLVW5pdCB0ZXN0KS4gVGhlIG5ldyBsb2dpYyBpbiBwYXRoIHJlc29sdXRpb24gaXMgdW5yZWFjaGFibGUgZHVyaW5nIG5vcm1hbCBleGVjdXRpb24gYW5kIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRhc2tzIHdpdGggYSBudWxsIHJvb3Qgb3IgY3dkLCBidXQgdGhlcmUgaXMgY3VycmVudGx5IG5vIHdheSB0byBjcmVhdGUgc3VjaCBhIHRhc2sgb3Igc2V0IGEgdGFzayYjMzk7cyByb290L2N3ZCB0byBudWxsIGZyb20gdXNlciBzcGFjZSAob3IgZXZlbiB3aXRoaW4gdGhlIGtlcm5lbCwgb3V0c2lkZSBvZiB0aGUgbmV3bHkgYWRkZWQgS1VuaXQgdGVzdCkuIFRoZSBuZXcgbG9naWMgaW4gcGF0aCByZXNvbHV0aW9uIGlzIHVucmVhY2hhYmxlIGR1cmluZyBub3JtYWwgZXhlY3V0aW9uIGFuZCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA3OjE3OjU1Ljc1NDc4MzY1N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNzMyMjQ3ODIxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0YXNrcyB3aXRoIGEgbnVsbCByb290IG9yIGN3ZCwgYnV0IHRoZXJlIGlzIGN1cnJlbnRseSBubyB3YXkgdG8gY3JlYXRlIHN1Y2ggYSB0YXNrIG9yIHNldCBhIHRhc2sncyByb290L2N3ZCB0byBudWxsIGZyb20gdXNlciBzcGFjZSAob3IgZXZlbiB3aXRoaW4gdGhlIGtlcm5lbCwgb3V0c2lkZSBvZiB0aGUgbmV3bHkgYWRkZWQgS1VuaXQgdGVzdCkuIFRoZSBuZXcgbG9naWMgaW4gcGF0aCByZXNvbHV0aW9uIGlzIHVucmVhY2hhYmxlIGR1cmluZyBub3JtYWwgZXhlY3V0aW9uIGFuZCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDc6MTc6NTUuNzU0NzkxNzc3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjMzNzA1OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkNDEzYjk2ZjUwOGQ5YjIxYWM4ZGJmZTRlNGViYzM2NTE4Y2VhNTNhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVuIDI5IDA3OjE3OjUzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL0tjb25maWcgYi9mcy9LY29uZmlnXFxuaW5kZXggY2Y2YWU2NDc3NmU2MmMuLjkwMjM1OTdiNmUyYmU4IDEwMDY0NFxcbi0tLSBhL2ZzL0tjb25maWdcXG4rKysgYi9mcy9LY29uZmlnXFxuQEAgLTE4LDYgKzE4LDE3IEBAIGNvbmZpZyBWQUxJREFURV9GU19QQVJTRVJcXG4gY29uZmlnIEZTX0lPTUFQXFxuIFxcdGJvb2xcXG4gXFxuK2NvbmZpZyBOVUxMX1JPT1RfQ1dEX0tVTklUX1RFU1RcXG4rXFx0Ym9vbCBcXFwiS1VuaXQgdGVzdHMgZm9yIHRhc2tzIHdpdGggYSBudWxsIHJvb3Qgb3IgY3dkXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuK1xcdGRlcGVuZHMgb24gS1VOSVQ9eVxcbitcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbitcXHRoZWxwXFxuK1xcdCAgQnVpbGQgS1VuaXQgdGVzdHMgdGhhdCBleGVyY2lzZSBwYXRoIHJlc29sdXRpb24gZm9yIHRhc2tzIHdob3NlXFxuK1xcdCAgZnMtXFx1MDAzZXJvb3QgYW5kL29yIGZzLVxcdTAwM2Vwd2QgaXMgdGhlIE5VTEwgcGF0aCAobm8gcm9vdCBkaXJlY3RvcnkgYW5kL29yXFxuK1xcdCAgbm8gY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSkuXFxuK1xcbitcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuK1xcbiAjIFN0YWNrYWJsZSBmaWxlc3lzdGVtc1xcbiBjb25maWcgRlNfU1RBQ0tcXG4gXFx0Ym9vbFxcbmRpZmYgLS1naXQgYS9mcy9jYWNoZWZpbGVzL2RhZW1vbi5jIGIvZnMvY2FjaGVmaWxlcy9kYWVtb24uY1xcbmluZGV4IDQxMTdiMTQ1YWM5NDMxLi4zNDRmZWViODljNjEwYyAxMDA2NDRcXG4tLS0gYS9mcy9jYWNoZWZpbGVzL2RhZW1vbi5jXFxuKysrIGIvZnMvY2FjaGVmaWxlcy9kYWVtb24uY1xcbkBAIC02NTIsNyArNjUyLDggQEAgc3RhdGljIGludCBjYWNoZWZpbGVzX2RhZW1vbl9jdWxsKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwgY2hhciAqYXJncylcXG4gXFxuIFxcdGdldF9mc19wd2QoY3VycmVudC1cXHUwMDNlZnMsIFxcdTAwMjZwYXRoKTtcXG4gXFxuLVxcdGlmICghZF9jYW5fbG9va3VwKHBhdGguZGVudHJ5KSlcXG4rXFx0LyogQSB0YXNrIG1heSBoYXZlIG5vIGN3ZC4gKi9cXG4rXFx0aWYgKCFwYXRoLm1udCB8fCAhZF9jYW5fbG9va3VwKHBhdGguZGVudHJ5KSlcXG4gXFx0XFx0Z290byBub3RkaXI7XFxuIFxcbiBcXHRjYWNoZWZpbGVzX2JlZ2luX3NlY3VyZShjYWNoZSwgXFx1MDAyNnNhdmVkX2NyZWQpO1xcbkBAIC03MjMsNyArNzI0LDggQEAgc3RhdGljIGludCBjYWNoZWZpbGVzX2RhZW1vbl9pbnVzZShzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsIGNoYXIgKmFyZ3MpXFxuIFxcbiBcXHRnZXRfZnNfcHdkKGN1cnJlbnQtXFx1MDAzZWZzLCBcXHUwMDI2cGF0aCk7XFxuIFxcbi1cXHRpZiAoIWRfY2FuX2xvb2t1cChwYXRoLmRlbnRyeSkpXFxuK1xcdC8qIEEgdGFzayBtYXkgaGF2ZSBubyBjd2QuICovXFxuK1xcdGlmICghcGF0aC5tbnQgfHwgIWRfY2FuX2xvb2t1cChwYXRoLmRlbnRyeSkpXFxuIFxcdFxcdGdvdG8gbm90ZGlyO1xcbiBcXG4gXFx0Y2FjaGVmaWxlc19iZWdpbl9zZWN1cmUoY2FjaGUsIFxcdTAwMjZzYXZlZF9jcmVkKTtcXG5kaWZmIC0tZ2l0IGEvZnMvZF9wYXRoLmMgYi9mcy9kX3BhdGguY1xcbmluZGV4IGE0ODk1N2MwOTcxZWY2Li41ZjE2ZDFlZmEzN2NjZCAxMDA2NDRcXG4tLS0gYS9mcy9kX3BhdGguY1xcbisrKyBiL2ZzL2RfcGF0aC5jXFxuQEAgLTQyMiw3ICs0MjIsMTEgQEAgU1lTQ0FMTF9ERUZJTkUyKGdldGN3ZCwgY2hhciBfX3VzZXIgKiwgYnVmLCB1bnNpZ25lZCBsb25nLCBzaXplKVxcbiBcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcdGdldF9mc19yb290X2FuZF9wd2RfcmN1KGN1cnJlbnQtXFx1MDAzZWZzLCBcXHUwMDI2cm9vdCwgXFx1MDAyNnB3ZCk7XFxuIFxcbi1cXHRpZiAodW5saWtlbHkoZF91bmxpbmtlZChwd2QuZGVudHJ5KSkpIHtcXG4rXFx0LyogQSB0YXNrIG1heSBoYXZlIG5vIGN3ZC4gKi9cXG4rXFx0aWYgKHVubGlrZWx5KCFwd2QubW50KSkge1xcbitcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFx0XFx0ZXJyb3IgPSAtRU5PRU5UO1xcbitcXHR9IGVsc2UgaWYgKHVubGlrZWx5KGRfdW5saW5rZWQocHdkLmRlbnRyeSkpKSB7XFxuIFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXHRcXHRlcnJvciA9IC1FTk9FTlQ7XFxuIFxcdH0gZWxzZSB7XFxuZGlmZiAtLWdpdCBhL2ZzL2ZoYW5kbGUuYyBiL2ZzL2ZoYW5kbGUuY1xcbmluZGV4IDFjYTdlYjNhNmNiNTE2Li41NjBmODhmNTM2MzNjMCAxMDA2NDRcXG4tLS0gYS9mcy9maGFuZGxlLmNcXG4rKysgYi9mcy9maGFuZGxlLmNcXG5AQCAtMTgwLDYgKzE4MCw5IEBAIHN0YXRpYyBpbnQgZ2V0X3BhdGhfYW5jaG9yKGludCBmZCwgc3RydWN0IHBhdGggKnJvb3QpXFxuIFxcbiBcXHRpZiAoZmQgPT0gQVRfRkRDV0QpIHtcXG4gXFx0XFx0Z2V0X2ZzX3B3ZChjdXJyZW50LVxcdTAwM2Vmcywgcm9vdCk7XFxuK1xcdFxcdC8qIEEgdGFzayBtYXkgaGF2ZSBubyBjd2QuICovXFxuK1xcdFxcdGlmICghcm9vdC1cXHUwMDNlbW50KVxcbitcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL2ZzX3N0cnVjdC5jIGIvZnMvZnNfc3RydWN0LmNcXG5pbmRleCAzOTQ4NzVkMDZmZDYwNi4uYmY2MjBiYmE3ZjM1ZTIgMTAwNjQ0XFxuLS0tIGEvZnMvZnNfc3RydWN0LmNcXG4rKysgYi9mcy9mc19zdHJ1Y3QuY1xcbkBAIC0xNTMsMyArMTUzLDcgQEAgc3RydWN0IGZzX3N0cnVjdCBpbml0X2ZzID0ge1xcbiBcXHQuc2VxXFx0XFx0PSBfX1NFUUxPQ0tfVU5MT0NLRUQoaW5pdF9mcy5zZXEpLFxcbiBcXHQudW1hc2tcXHRcXHQ9IDAwMjIsXFxuIH07XFxuK1xcbisjaWZkZWYgQ09ORklHX05VTExfUk9PVF9DV0RfS1VOSVRfVEVTVFxcbisjaW5jbHVkZSBcXFwidGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jXFxcIlxcbisjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmNcXG5pbmRleCA1Y2M5ZjBmNDY2YjgzMC4uMDZiMTY4MTVlODY2ODEgMTAwNjQ0XFxuLS0tIGEvZnMvbmFtZWkuY1xcbisrKyBiL2ZzL25hbWVpLmNcXG5AQCAtMTEyMCwxMSArMTEyMCwyMCBAQCBzdGF0aWMgaW50IHNldF9yb290KHN0cnVjdCBuYW1laWRhdGEgKm5kKVxcbiBcXHRcXHRkbyB7XFxuIFxcdFxcdFxcdHNlcSA9IHJlYWRfc2VxYmVnaW4oXFx1MDAyNmZzLVxcdTAwM2VzZXEpO1xcbiBcXHRcXHRcXHRuZC1cXHUwMDNlcm9vdCA9IGZzLVxcdTAwM2Vyb290O1xcbi1cXHRcXHRcXHRuZC1cXHUwMDNlcm9vdF9zZXEgPSBfX3JlYWRfc2VxY291bnRfYmVnaW4oXFx1MDAyNm5kLVxcdTAwM2Vyb290LmRlbnRyeS1cXHUwMDNlZF9zZXEpO1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBBIHRhc2sgbWF5IGhhdmUgbm8gcm9vdC4gTGVhdmUgbmQtXFx1MDAzZXJvb3QgYXMgdGhlIE5VTExcXG4rXFx0XFx0XFx0ICogcGF0aCBhbmQgc2tpcCB0aGUgZF9zZXEgcmVhZDogYWJzb2x1dGUgbG9va3VwcyB0dXJuXFxuK1xcdFxcdFxcdCAqIHRoZSBhYnNlbmNlIGludG8gLUVOT0VOVCBpbiBuZF9qdW1wX3Jvb3QoKSwgd2hpbGUgXFxcIi4uXFxcIlxcbitcXHRcXHRcXHQgKiB0cmVhdHMgYSBOVUxMIHJvb3QgYXMgXFxcIm5vIGJvdW5kYXJ5XFxcIiBhbmQgY2xpbWJzIHRvIGl0c1xcbitcXHRcXHRcXHQgKiBtb3VudCByb290LlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0aWYgKGxpa2VseShuZC1cXHUwMDNlcm9vdC5tbnQpKVxcbitcXHRcXHRcXHRcXHRuZC1cXHUwMDNlcm9vdF9zZXEgPSBfX3JlYWRfc2VxY291bnRfYmVnaW4oXFx1MDAyNm5kLVxcdTAwM2Vyb290LmRlbnRyeS1cXHUwMDNlZF9zZXEpO1xcbiBcXHRcXHR9IHdoaWxlIChyZWFkX3NlcXJldHJ5KFxcdTAwMjZmcy1cXHUwMDNlc2VxLCBzZXEpKTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0Z2V0X2ZzX3Jvb3QoZnMsIFxcdTAwMjZuZC1cXHUwMDNlcm9vdCk7XFxuLVxcdFxcdG5kLVxcdTAwM2VzdGF0ZSB8PSBORF9ST09UX0dSQUJCRUQ7XFxuK1xcdFxcdGlmIChsaWtlbHkobmQtXFx1MDAzZXJvb3QubW50KSlcXG4rXFx0XFx0XFx0bmQtXFx1MDAzZXN0YXRlIHw9IE5EX1JPT1RfR1JBQkJFRDtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC0xMTQzLDYgKzExNTIsOSBAQCBzdGF0aWMgaW50IG5kX2p1bXBfcm9vdChzdHJ1Y3QgbmFtZWlkYXRhICpuZClcXG4gXFx0XFx0aWYgKHVubGlrZWx5KGVycm9yKSlcXG4gXFx0XFx0XFx0cmV0dXJuIGVycm9yO1xcbiBcXHR9XFxuK1xcdC8qIEFic29sdXRlIHBhdGhzIG5lZWQgYSByb290IHRvIGp1bXAgdG87IGEgdGFzayBtYXkgaGF2ZSBub25lLiAqL1xcbitcXHRpZiAodW5saWtlbHkoIW5kLVxcdTAwM2Vyb290Lm1udCkpXFxuK1xcdFxcdHJldHVybiAtRU5PRU5UO1xcbiBcXHRpZiAobmQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTE9PS1VQX1JDVSkge1xcbiBcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpkO1xcbiBcXHRcXHRuZC1cXHUwMDNlcGF0aCA9IG5kLVxcdTAwM2Vyb290O1xcbkBAIC0yNzMyLDExICsyNzQ0LDE3IEBAIHN0YXRpYyBjb25zdCBjaGFyICpwYXRoX2luaXQoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHVuc2lnbmVkIGZsYWdzKVxcbiBcXHRcXHRcXHRkbyB7XFxuIFxcdFxcdFxcdFxcdHNlcSA9IHJlYWRfc2VxYmVnaW4oXFx1MDAyNmZzLVxcdTAwM2VzZXEpO1xcbiBcXHRcXHRcXHRcXHRuZC1cXHUwMDNlcGF0aCA9IGZzLVxcdTAwM2Vwd2Q7XFxuK1xcdFxcdFxcdFxcdC8qIEEgdGFzayBtYXkgaGF2ZSBubyBjd2QuICovXFxuK1xcdFxcdFxcdFxcdGlmICh1bmxpa2VseSghbmQtXFx1MDAzZXBhdGgubW50KSlcXG4rXFx0XFx0XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XFxuIFxcdFxcdFxcdFxcdG5kLVxcdTAwM2Vpbm9kZSA9IG5kLVxcdTAwM2VwYXRoLmRlbnRyeS1cXHUwMDNlZF9pbm9kZTtcXG4gXFx0XFx0XFx0XFx0bmQtXFx1MDAzZXNlcSA9IF9fcmVhZF9zZXFjb3VudF9iZWdpbihcXHUwMDI2bmQtXFx1MDAzZXBhdGguZGVudHJ5LVxcdTAwM2VkX3NlcSk7XFxuIFxcdFxcdFxcdH0gd2hpbGUgKHJlYWRfc2VxcmV0cnkoXFx1MDAyNmZzLVxcdTAwM2VzZXEsIHNlcSkpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRnZXRfZnNfcHdkKGN1cnJlbnQtXFx1MDAzZWZzLCBcXHUwMDI2bmQtXFx1MDAzZXBhdGgpO1xcbitcXHRcXHRcXHQvKiBBIHRhc2sgbWF5IGhhdmUgbm8gY3dkLiAqL1xcbitcXHRcXHRcXHRpZiAodW5saWtlbHkoIW5kLVxcdTAwM2VwYXRoLm1udCkpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xcbiBcXHRcXHRcXHRuZC1cXHUwMDNlaW5vZGUgPSBuZC1cXHUwMDNlcGF0aC5kZW50cnktXFx1MDAzZWRfaW5vZGU7XFxuIFxcdFxcdH1cXG4gXFx0fSBlbHNlIHtcXG5kaWZmIC0tZ2l0IGEvZnMvcHJvYy9iYXNlLmMgYi9mcy9wcm9jL2Jhc2UuY1xcbmluZGV4IDc4MGY4MTI1OTA1MjdjLi43ZjdjYzg2Y2UyNjI0MiAxMDA2NDRcXG4tLS0gYS9mcy9wcm9jL2Jhc2UuY1xcbisrKyBiL2ZzL3Byb2MvYmFzZS5jXFxuQEAgLTIxMyw3ICsyMTMsOSBAQCBzdGF0aWMgaW50IGdldF90YXNrX3Jvb3Qoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcGF0aCAqcm9vdClcXG4gXFx0dGFza19sb2NrKHRhc2spO1xcbiBcXHRpZiAodGFzay1cXHUwMDNlZnMpIHtcXG4gXFx0XFx0Z2V0X2ZzX3Jvb3QodGFzay1cXHUwMDNlZnMsIHJvb3QpO1xcbi1cXHRcXHRyZXN1bHQgPSAwO1xcbitcXHRcXHQvKiBBIHRhc2sgbWF5IGhhdmUgbm8gcm9vdC4gKi9cXG4rXFx0XFx0aWYgKHJvb3QtXFx1MDAzZW1udClcXG4rXFx0XFx0XFx0cmVzdWx0ID0gMDtcXG4gXFx0fVxcbiBcXHR0YXNrX3VubG9jayh0YXNrKTtcXG4gXFx0cmV0dXJuIHJlc3VsdDtcXG5AQCAtMjI3LDcgKzIyOSw5IEBAIHN0YXRpYyBpbnQgcHJvY19jd2RfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBwYXRoICpwYXRoLFxcbiBcXHR0YXNrX2xvY2sodGFzayk7XFxuIFxcdGlmICh0YXNrLVxcdTAwM2Vmcykge1xcbiBcXHRcXHRnZXRfZnNfcHdkKHRhc2stXFx1MDAzZWZzLCBwYXRoKTtcXG4tXFx0XFx0cmVzdWx0ID0gMDtcXG4rXFx0XFx0LyogQSB0YXNrIG1heSBoYXZlIG5vIGN3ZC4gKi9cXG4rXFx0XFx0aWYgKHBhdGgtXFx1MDAzZW1udClcXG4rXFx0XFx0XFx0cmVzdWx0ID0gMDtcXG4gXFx0fVxcbiBcXHR0YXNrX3VubG9jayh0YXNrKTtcXG4gXFx0cmV0dXJuIHJlc3VsdDtcXG5kaWZmIC0tZ2l0IGEvZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jIGIvZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uM2ZiN2U2MzU0NWY4YzZcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jXFxuQEAgLTAsMCArMSwxNDcgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbisvKlxcbisgKiBLVW5pdCB0ZXN0cyBmb3IgdGFza3Mgd2hvc2UgZnMtXFx1MDAzZXJvb3QgYW5kL29yIGZzLVxcdTAwM2Vwd2QgaXMgdGhlIE5VTEwgcGF0aC5cXG4rICogU2VlIFxcXCJmczogc3VwcG9ydCB0YXNrcyB3aXRoIGEgbnVsbCByb290IG9yIGN3ZFxcXCIuXFxuKyAqXFxuKyAqIEVhY2ggdGVzdCBydW5zIGFnYWluc3QgdGhpcyB0YXNrJ3Mgb3duIGZzX3N0cnVjdC4gV2UgdW5zaGFyZSBpdCBmaXJzdFxcbisgKiBzbyB3ZSBvbmx5IGV2ZXIgdG91Y2ggYSBwcml2YXRlIGNvcHksIG5ldmVyIHRoZSBzaGFyZWQgb25lLCBhbmQgd2VcXG4rICogcmVzdG9yZSB0aGUgb3JpZ2luYWwgcm9vdC9jd2QgYWZ0ZXJ3YXJkcy5cXG4rICovXFxuKyNpbmNsdWRlIFxcdTAwM2NrdW5pdC90ZXN0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9mc19zdHJ1Y3QuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25hbWVpLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wYXRoLmhcXHUwMDNlXFxuK1xcbisvKiBUaGUgTlVMTCBwYXRoOiB7IC5tbnQgPSBOVUxMLCAuZGVudHJ5ID0gTlVMTCB9LiAqL1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHBhdGggbnVsbF9wYXRoO1xcbitcXG4rc3RydWN0IG51bGxfZnNfY3R4IHtcXG4rXFx0c3RydWN0IHBhdGggc2F2ZWRfcm9vdDtcXG4rXFx0c3RydWN0IHBhdGggc2F2ZWRfcHdkO1xcbitcXHRzdHJ1Y3QgcGF0aCBhbmNob3I7XFx0LyogYSByZWFsIGRpcmVjdG9yeSwgc3RhbmRpbmcgaW4gZm9yIGEgZGlyZmQgKi9cXG4rfTtcXG4rXFxuK3N0YXRpYyBpbnQgbnVsbF9mc19zZXR1cChzdHJ1Y3QgbnVsbF9mc19jdHggKmN0eClcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0ZXJyID0gdW5zaGFyZV9mc19zdHJ1Y3QoKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0ZXJyID0ga2Vybl9wYXRoKFxcXCIvXFxcIiwgTE9PS1VQX0RJUkVDVE9SWSwgXFx1MDAyNmN0eC1cXHUwMDNlYW5jaG9yKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0Z2V0X2ZzX3Jvb3QoY3VycmVudC1cXHUwMDNlZnMsIFxcdTAwMjZjdHgtXFx1MDAzZXNhdmVkX3Jvb3QpO1xcbitcXHRnZXRfZnNfcHdkKGN1cnJlbnQtXFx1MDAzZWZzLCBcXHUwMDI2Y3R4LVxcdTAwM2VzYXZlZF9wd2QpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbnVsbF9mc190ZWFyZG93bihzdHJ1Y3QgbnVsbF9mc19jdHggKmN0eClcXG4re1xcbitcXHRzZXRfZnNfcm9vdChjdXJyZW50LVxcdTAwM2VmcywgXFx1MDAyNmN0eC1cXHUwMDNlc2F2ZWRfcm9vdCk7XFxuK1xcdHNldF9mc19wd2QoY3VycmVudC1cXHUwMDNlZnMsIFxcdTAwMjZjdHgtXFx1MDAzZXNhdmVkX3B3ZCk7XFxuK1xcdHBhdGhfcHV0KFxcdTAwMjZjdHgtXFx1MDAzZXNhdmVkX3Jvb3QpO1xcbitcXHRwYXRoX3B1dChcXHUwMDI2Y3R4LVxcdTAwM2VzYXZlZF9wd2QpO1xcbitcXHRwYXRoX3B1dChcXHUwMDI2Y3R4LVxcdTAwM2VhbmNob3IpO1xcbit9XFxuK1xcbisvKiBSZXNvbHZlIEBuYW1lLCBkcm9wIGFueSByZWZlcmVuY2UgaXQgcmV0dXJucywgYW5kIHlpZWxkIHRoZSBlcnJuby4gKi9cXG4rc3RhdGljIGludCB0cnlfa2Vybl9wYXRoKGNvbnN0IGNoYXIgKm5hbWUpXFxuK3tcXG4rXFx0c3RydWN0IHBhdGggb3V0O1xcbitcXHRpbnQgZXJyID0ga2Vybl9wYXRoKG5hbWUsIDAsIFxcdTAwMjZvdXQpO1xcbitcXG4rXFx0aWYgKCFlcnIpXFxuK1xcdFxcdHBhdGhfcHV0KFxcdTAwMjZvdXQpO1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHRyeV9mZF9yZWxhdGl2ZShzdHJ1Y3QgbnVsbF9mc19jdHggKmN0eCwgY29uc3QgY2hhciAqbmFtZSlcXG4re1xcbitcXHRzdHJ1Y3QgcGF0aCBvdXQ7XFxuK1xcdGludCBlcnIgPSB2ZnNfcGF0aF9sb29rdXAoY3R4LVxcdTAwM2VhbmNob3IuZGVudHJ5LCBjdHgtXFx1MDAzZWFuY2hvci5tbnQsXFxuK1xcdFxcdFxcdFxcdCAgbmFtZSwgMCwgXFx1MDAyNm91dCk7XFxuK1xcbitcXHRpZiAoIWVycilcXG4rXFx0XFx0cGF0aF9wdXQoXFx1MDAyNm91dCk7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuKy8qIE5vIHJvb3Q6IGFic29sdXRlIHBhdGhzIGZhaWwsIGJ1dCBcXFwiLi5cXFwiIGNsaW1icyBhbmQgdGhlIGN3ZCBzdGlsbCB3b3Jrcy4gKi9cXG4rc3RhdGljIHZvaWQgbnVsbF9yb290X3Rlc3Qoc3RydWN0IGt1bml0ICp0ZXN0KVxcbit7XFxuK1xcdHN0cnVjdCBudWxsX2ZzX2N0eCBjdHg7XFxuK1xcbitcXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgbnVsbF9mc19zZXR1cChcXHUwMDI2Y3R4KSwgMCk7XFxuK1xcdHNldF9mc19yb290KGN1cnJlbnQtXFx1MDAzZWZzLCBcXHUwMDI2bnVsbF9wYXRoKTtcXG4rXFxuK1xcdC8qIEEgbGVhZGluZyAnLycgaGFzIG5vdGhpbmcgdG8gYW5jaG9yIHRvLiAqL1xcbitcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgdHJ5X2tlcm5fcGF0aChcXFwiL1xcXCIpLCAtRU5PRU5UKTtcXG4rXFxuK1xcdC8qIFxcXCIuLlxcXCIgaXMgdW5ib3VuZGVkIHJhdGhlciB0aGFuIHJlZnVzZWQgKGl0IHdvdWxkIGhhdmUgYmVlblxcbitcXHQgKiAtRU5PRU5UIGJlZm9yZSB0aGlzIGZlYXR1cmUpLiBJdCBzdGFydHMgZnJvbSB0aGUgc3RpbGwtcHJlc2VudFxcbitcXHQgKiBjd2QgYW5kIHJ1bnMgb3V0IG9mIHBhcmVudHMgYXQgdGhlIG1vdW50IHJvb3QuXFxuK1xcdCAqL1xcbitcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgdHJ5X2tlcm5fcGF0aChcXFwiLi5cXFwiKSwgMCk7XFxuK1xcbitcXHQvKiBUaGUgY3dkIGlzIHVudG91Y2hlZDogQVRfRkRDV0QtcmVsYXRpdmUgbG9va3VwcyBzdGlsbCByZXNvbHZlLiAqL1xcbitcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgdHJ5X2tlcm5fcGF0aChcXFwiLlxcXCIpLCAwKTtcXG4rXFxuK1xcdC8qIEEgZGlyZmQtYW5jaG9yZWQgbG9va3VwIG5ldmVyIGNvbnN1bHRzIGZzLVxcdTAwM2Vyb290LiAqL1xcbitcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgdHJ5X2ZkX3JlbGF0aXZlKFxcdTAwMjZjdHgsIFxcXCIuXFxcIiksIDApO1xcbitcXG4rXFx0bnVsbF9mc190ZWFyZG93bihcXHUwMDI2Y3R4KTtcXG4rfVxcbitcXG4rLyogTm8gY3dkOiBBVF9GRENXRC1yZWxhdGl2ZSBwYXRocyBmYWlsLCBidXQgYWJzb2x1dGUgYW5kIGRpcmZkcyB3b3JrLiAqL1xcbitzdGF0aWMgdm9pZCBudWxsX2N3ZF90ZXN0KHN0cnVjdCBrdW5pdCAqdGVzdClcXG4re1xcbitcXHRzdHJ1Y3QgbnVsbF9mc19jdHggY3R4O1xcbitcXG4rXFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIG51bGxfZnNfc2V0dXAoXFx1MDAyNmN0eCksIDApO1xcbitcXHRzZXRfZnNfcHdkKGN1cnJlbnQtXFx1MDAzZWZzLCBcXHUwMDI2bnVsbF9wYXRoKTtcXG4rXFxuK1xcdC8qIFJlbGF0aXZlLXRvLWN3ZCBsb29rdXBzIGhhdmUgbm8gc3RhcnRpbmcgcG9pbnQuICovXFxuK1xcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCB0cnlfa2Vybl9wYXRoKFxcXCIuXFxcIiksIC1FTk9FTlQpO1xcbitcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgdHJ5X2tlcm5fcGF0aChcXFwiZm9vXFxcIiksIC1FTk9FTlQpO1xcbitcXG4rXFx0LyogVGhlIHJvb3QgaXMgdW50b3VjaGVkOiBhYnNvbHV0ZSBsb29rdXBzIHN0aWxsIHJlc29sdmUuICovXFxuK1xcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCB0cnlfa2Vybl9wYXRoKFxcXCIvXFxcIiksIDApO1xcbitcXG4rXFx0LyogQSBkaXJmZC1hbmNob3JlZCBsb29rdXAgbmV2ZXIgY29uc3VsdHMgZnMtXFx1MDAzZXB3ZC4gKi9cXG4rXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHRyeV9mZF9yZWxhdGl2ZShcXHUwMDI2Y3R4LCBcXFwiLlxcXCIpLCAwKTtcXG4rXFxuK1xcdG51bGxfZnNfdGVhcmRvd24oXFx1MDAyNmN0eCk7XFxuK31cXG4rXFxuKy8qIE5laXRoZXIgcm9vdCBub3IgY3dkOiBvbmx5IGRlc2NyaXB0b3ItcmVsYXRpdmUgbG9va3VwcyByZW1haW4uICovXFxuK3N0YXRpYyB2b2lkIG51bGxfcm9vdF9hbmRfY3dkX3Rlc3Qoc3RydWN0IGt1bml0ICp0ZXN0KVxcbit7XFxuK1xcdHN0cnVjdCBudWxsX2ZzX2N0eCBjdHg7XFxuK1xcbitcXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgbnVsbF9mc19zZXR1cChcXHUwMDI2Y3R4KSwgMCk7XFxuK1xcdHNldF9mc19yb290KGN1cnJlbnQtXFx1MDAzZWZzLCBcXHUwMDI2bnVsbF9wYXRoKTtcXG4rXFx0c2V0X2ZzX3B3ZChjdXJyZW50LVxcdTAwM2VmcywgXFx1MDAyNm51bGxfcGF0aCk7XFxuK1xcbitcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgdHJ5X2tlcm5fcGF0aChcXFwiL1xcXCIpLCAtRU5PRU5UKTtcXG4rXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHRyeV9rZXJuX3BhdGgoXFxcIi5cXFwiKSwgLUVOT0VOVCk7XFxuK1xcbitcXHQvKiBUaGUgaGVsZCBkZXNjcmlwdG9yIHN0aWxsIG5hbWVzIGZpbGVzLiAqL1xcbitcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgdHJ5X2ZkX3JlbGF0aXZlKFxcdTAwMjZjdHgsIFxcXCIuXFxcIiksIDApO1xcbitcXG4rXFx0bnVsbF9mc190ZWFyZG93bihcXHUwMDI2Y3R4KTtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIG51bGxfcm9vdF9jd2RfdGVzdF9jYXNlc1tdID0ge1xcbitcXHRLVU5JVF9DQVNFKG51bGxfcm9vdF90ZXN0KSxcXG4rXFx0S1VOSVRfQ0FTRShudWxsX2N3ZF90ZXN0KSxcXG4rXFx0S1VOSVRfQ0FTRShudWxsX3Jvb3RfYW5kX2N3ZF90ZXN0KSxcXG4rXFx0e30sXFxuK307XFxuK1xcbitzdGF0aWMgc3RydWN0IGt1bml0X3N1aXRlIG51bGxfcm9vdF9jd2RfdGVzdF9zdWl0ZSA9IHtcXG4rXFx0Lm5hbWUgPSBcXFwibnVsbF9yb290X2N3ZFxcXCIsXFxuK1xcdC50ZXN0X2Nhc2VzID0gbnVsbF9yb290X2N3ZF90ZXN0X2Nhc2VzLFxcbit9O1xcbitcXG4ra3VuaXRfdGVzdF9zdWl0ZShudWxsX3Jvb3RfY3dkX3Rlc3Rfc3VpdGUpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzX3N0cnVjdC5oIGIvaW5jbHVkZS9saW51eC9mc19zdHJ1Y3QuaFxcbmluZGV4IDAwNzA3NjRiNzkwYTNlLi44NDQyM2I0YmQyMWFlNyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzX3N0cnVjdC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9mc19zdHJ1Y3QuaFxcbkBAIC0xMiw3ICsxMiwzNCBAQCBzdHJ1Y3QgZnNfc3RydWN0IHtcXG4gXFx0c2VxbG9ja190IHNlcTtcXG4gXFx0aW50IHVtYXNrO1xcbiBcXHRpbnQgaW5fZXhlYztcXG4tXFx0c3RydWN0IHBhdGggcm9vdCwgcHdkO1xcbitcXG4rXFx0LypcXG4rXFx0ICogTm90ZSB0aGF0IHRoZXNlIHBhdGhzIGFyZSBleHBsaWNpdGx5IGludGVuZGVkIHRvIGJlIG51bGxhYmxlLlxcbitcXHQgKiBTaW5jZSB0aGV5IGFyZSBpbmxpbmUgc3RydWN0cyBhbmQgbm90IHBvaW50ZXJzLCB3ZSB1c2UgYC5tbnRcXG4rXFx0ICogPT0gTlVMTGAgdG8gaW5kaWNhdGUgbnVsbGFiaWxpdHkgb2YgdGhlIHBhdGggYXMgYSB3aG9sZS5cXG4rXFx0ICovXFxuK1xcbitcXHQvKlxcbitcXHQgKiBUaGUgcm9vdCBkaXJlY3RvcnkgZm9yIHRoZSB0YXNrKHMpIHRoYXQgcG9pbnRzIHRvIHRoaXNcXG4rXFx0ICogYGZzX3N0cnVjdGAuIFRoZSByb290IGRpcmVjdG9yeSBhbHNvIGNvbnRyb2xzIGhvdyBgLi5gXFxuK1xcdCAqIHJlc29sdmU7IHBhdGggdHJhdmVyc2FsIGlzIG5vdCBhbGxvd2VkIHRvIHJlc29sdmUgdXB3YXJkc1xcbitcXHQgKiBiZXlvbmQgdGhlIHJvb3QgZGlyZWN0b3J5LiAoSXQgaXMgZm9yIHRoaXMgbGF0dGVyIHJlYXNvbiB0aGF0XFxuK1xcdCAqIGBjaHJvb3RgIGlzIGEgcHJpdmlsZWdlZCBvcGVyYXRpb24uKVxcbitcXHQgKlxcbitcXHQgKiBJZiBudWxsIChhcyBkZXNjcmliZWQgYWJvdmUpLCBhYnNvbHV0ZSBwYXRocyB3aWxsIG5vdFxcbitcXHQgKiByZXNvbHZlLiBJbiBhZGRpdGlvbiBgLi5gIHdpbGwgYmUgdW5ib3VuZGVkLCB1bnRpbCBvbmVcXG4rXFx0ICogcmVhY2hlcyB0aGUgdG9wIG9mIHRoZSBtb3VudCB0cmVlLlxcbitcXHQgKi9cXG4rXFx0c3RydWN0IHBhdGggcm9vdDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGZvciB0aGUgdGFzayhzKSB0aGF0IHBvaW50cyB0b1xcbitcXHQgKiB0aGlzIGBmc19zdHJ1Y3RgLlxcbitcXHQgKlxcbitcXHQgKiBJZiBudWxsIChhcyBkZXNjcmliZWQgYWJvdmUpLCByZWxhdGl2ZSBwYXRocyB3aXRoIGBBVF9GRENXRGBcXG4rXFx0ICogd2lsbCBub3QgcmVzb2x2ZS5cXG4rXFx0ICovXFxuK1xcdHN0cnVjdCBwYXRoIHB3ZDtcXG4gfSBfX3JhbmRvbWl6ZV9sYXlvdXQ7XFxuIFxcbiBleHRlcm4gc3RydWN0IGttZW1fY2FjaGUgKmZzX2NhY2hlcDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDc6MTc6NTYuNzE5MjE3Mzg0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDYzNTgwMzI0ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGFza3Mgd2l0aCBhIG51bGwgcm9vdCBvciBjd2QsIGJ1dCB0aGVyZSBpcyBjdXJyZW50bHkgbm8gd2F5IHRvIGNyZWF0ZSBzdWNoIGEgdGFzayBvciBzZXQgYSB0YXNrJ3Mgcm9vdC9jd2QgdG8gbnVsbCBmcm9tIHVzZXIgc3BhY2UgKG9yIGV2ZW4gd2l0aGluIHRoZSBrZXJuZWwsIG91dHNpZGUgb2YgdGhlIG5ld2x5IGFkZGVkIEtVbml0IHRlc3QpLiBUaGUgbmV3IGxvZ2ljIGluIHBhdGggcmVzb2x1dGlvbiBpcyB1bnJlYWNoYWJsZSBkdXJpbmcgbm9ybWFsIGV4ZWN1dGlvbiBhbmQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDQxM2I5NmY1MDhkOWIyMWFjOGRiZmU0ZTRlYmMzNjUxOGNlYTUzYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVuIDI5IDA3OjE3OjUzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvS2NvbmZpZyBiL2ZzL0tjb25maWdcbmluZGV4IGNmNmFlNjQ3NzZlNjJjLi45MDIzNTk3YjZlMmJlOCAxMDA2NDRcbi0tLSBhL2ZzL0tjb25maWdcbisrKyBiL2ZzL0tjb25maWdcbkBAIC0xOCw2ICsxOCwxNyBAQCBjb25maWcgVkFMSURBVEVfRlNfUEFSU0VSXG4gY29uZmlnIEZTX0lPTUFQXG4gXHRib29sXG4gXG4rY29uZmlnIE5VTExfUk9PVF9DV0RfS1VOSVRfVEVTVFxuK1x0Ym9vbCBcIktVbml0IHRlc3RzIGZvciB0YXNrcyB3aXRoIGEgbnVsbCByb290IG9yIGN3ZFwiIGlmICFLVU5JVF9BTExfVEVTVFNcbitcdGRlcGVuZHMgb24gS1VOSVQ9eVxuK1x0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbitcdGhlbHBcbitcdCAgQnVpbGQgS1VuaXQgdGVzdHMgdGhhdCBleGVyY2lzZSBwYXRoIHJlc29sdXRpb24gZm9yIHRhc2tzIHdob3NlXG4rXHQgIGZzLVx1MDAzZXJvb3QgYW5kL29yIGZzLVx1MDAzZXB3ZCBpcyB0aGUgTlVMTCBwYXRoIChubyByb290IGRpcmVjdG9yeSBhbmQvb3JcbitcdCAgbm8gY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSkuXG4rXG4rXHQgIElmIHVuc3VyZSwgc2F5IE4uXG4rXG4gIyBTdGFja2FibGUgZmlsZXN5c3RlbXNcbiBjb25maWcgRlNfU1RBQ0tcbiBcdGJvb2xcbmRpZmYgLS1naXQgYS9mcy9jYWNoZWZpbGVzL2RhZW1vbi5jIGIvZnMvY2FjaGVmaWxlcy9kYWVtb24uY1xuaW5kZXggNDExN2IxNDVhYzk0MzEuLjM0NGZlZWI4OWM2MTBjIDEwMDY0NFxuLS0tIGEvZnMvY2FjaGVmaWxlcy9kYWVtb24uY1xuKysrIGIvZnMvY2FjaGVmaWxlcy9kYWVtb24uY1xuQEAgLTY1Miw3ICs2NTIsOCBAQCBzdGF0aWMgaW50IGNhY2hlZmlsZXNfZGFlbW9uX2N1bGwoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLCBjaGFyICphcmdzKVxuIFxuIFx0Z2V0X2ZzX3B3ZChjdXJyZW50LVx1MDAzZWZzLCBcdTAwMjZwYXRoKTtcbiBcbi1cdGlmICghZF9jYW5fbG9va3VwKHBhdGguZGVudHJ5KSlcbitcdC8qIEEgdGFzayBtYXkgaGF2ZSBubyBjd2QuICovXG4rXHRpZiAoIXBhdGgubW50IHx8ICFkX2Nhbl9sb29rdXAocGF0aC5kZW50cnkpKVxuIFx0XHRnb3RvIG5vdGRpcjtcbiBcbiBcdGNhY2hlZmlsZXNfYmVnaW5fc2VjdXJlKGNhY2hlLCBcdTAwMjZzYXZlZF9jcmVkKTtcbkBAIC03MjMsNyArNzI0LDggQEAgc3RhdGljIGludCBjYWNoZWZpbGVzX2RhZW1vbl9pbnVzZShzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsIGNoYXIgKmFyZ3MpXG4gXG4gXHRnZXRfZnNfcHdkKGN1cnJlbnQtXHUwMDNlZnMsIFx1MDAyNnBhdGgpO1xuIFxuLVx0aWYgKCFkX2Nhbl9sb29rdXAocGF0aC5kZW50cnkpKVxuK1x0LyogQSB0YXNrIG1heSBoYXZlIG5vIGN3ZC4gKi9cbitcdGlmICghcGF0aC5tbnQgfHwgIWRfY2FuX2xvb2t1cChwYXRoLmRlbnRyeSkpXG4gXHRcdGdvdG8gbm90ZGlyO1xuIFxuIFx0Y2FjaGVmaWxlc19iZWdpbl9zZWN1cmUoY2FjaGUsIFx1MDAyNnNhdmVkX2NyZWQpO1xuZGlmZiAtLWdpdCBhL2ZzL2RfcGF0aC5jIGIvZnMvZF9wYXRoLmNcbmluZGV4IGE0ODk1N2MwOTcxZWY2Li41ZjE2ZDFlZmEzN2NjZCAxMDA2NDRcbi0tLSBhL2ZzL2RfcGF0aC5jXG4rKysgYi9mcy9kX3BhdGguY1xuQEAgLTQyMiw3ICs0MjIsMTEgQEAgU1lTQ0FMTF9ERUZJTkUyKGdldGN3ZCwgY2hhciBfX3VzZXIgKiwgYnVmLCB1bnNpZ25lZCBsb25nLCBzaXplKVxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0Z2V0X2ZzX3Jvb3RfYW5kX3B3ZF9yY3UoY3VycmVudC1cdTAwM2VmcywgXHUwMDI2cm9vdCwgXHUwMDI2cHdkKTtcbiBcbi1cdGlmICh1bmxpa2VseShkX3VubGlua2VkKHB3ZC5kZW50cnkpKSkge1xuK1x0LyogQSB0YXNrIG1heSBoYXZlIG5vIGN3ZC4gKi9cbitcdGlmICh1bmxpa2VseSghcHdkLm1udCkpIHtcbitcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRcdGVycm9yID0gLUVOT0VOVDtcbitcdH0gZWxzZSBpZiAodW5saWtlbHkoZF91bmxpbmtlZChwd2QuZGVudHJ5KSkpIHtcbiBcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRcdGVycm9yID0gLUVOT0VOVDtcbiBcdH0gZWxzZSB7XG5kaWZmIC0tZ2l0IGEvZnMvZmhhbmRsZS5jIGIvZnMvZmhhbmRsZS5jXG5pbmRleCAxY2E3ZWIzYTZjYjUxNi4uNTYwZjg4ZjUzNjMzYzAgMTAwNjQ0XG4tLS0gYS9mcy9maGFuZGxlLmNcbisrKyBiL2ZzL2ZoYW5kbGUuY1xuQEAgLTE4MCw2ICsxODAsOSBAQCBzdGF0aWMgaW50IGdldF9wYXRoX2FuY2hvcihpbnQgZmQsIHN0cnVjdCBwYXRoICpyb290KVxuIFxuIFx0aWYgKGZkID09IEFUX0ZEQ1dEKSB7XG4gXHRcdGdldF9mc19wd2QoY3VycmVudC1cdTAwM2Vmcywgcm9vdCk7XG4rXHRcdC8qIEEgdGFzayBtYXkgaGF2ZSBubyBjd2QuICovXG4rXHRcdGlmICghcm9vdC1cdTAwM2VtbnQpXG4rXHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL2ZzL2ZzX3N0cnVjdC5jIGIvZnMvZnNfc3RydWN0LmNcbmluZGV4IDM5NDg3NWQwNmZkNjA2Li5iZjYyMGJiYTdmMzVlMiAxMDA2NDRcbi0tLSBhL2ZzL2ZzX3N0cnVjdC5jXG4rKysgYi9mcy9mc19zdHJ1Y3QuY1xuQEAgLTE1MywzICsxNTMsNyBAQCBzdHJ1Y3QgZnNfc3RydWN0IGluaXRfZnMgPSB7XG4gXHQuc2VxXHRcdD0gX19TRVFMT0NLX1VOTE9DS0VEKGluaXRfZnMuc2VxKSxcbiBcdC51bWFza1x0XHQ9IDAwMjIsXG4gfTtcbitcbisjaWZkZWYgQ09ORklHX05VTExfUk9PVF9DV0RfS1VOSVRfVEVTVFxuKyNpbmNsdWRlIFwidGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jXCJcbisjZW5kaWZcbmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuY1xuaW5kZXggNWNjOWYwZjQ2NmI4MzAuLjA2YjE2ODE1ZTg2NjgxIDEwMDY0NFxuLS0tIGEvZnMvbmFtZWkuY1xuKysrIGIvZnMvbmFtZWkuY1xuQEAgLTExMjAsMTEgKzExMjAsMjAgQEAgc3RhdGljIGludCBzZXRfcm9vdChzdHJ1Y3QgbmFtZWlkYXRhICpuZClcbiBcdFx0ZG8ge1xuIFx0XHRcdHNlcSA9IHJlYWRfc2VxYmVnaW4oXHUwMDI2ZnMtXHUwMDNlc2VxKTtcbiBcdFx0XHRuZC1cdTAwM2Vyb290ID0gZnMtXHUwMDNlcm9vdDtcbi1cdFx0XHRuZC1cdTAwM2Vyb290X3NlcSA9IF9fcmVhZF9zZXFjb3VudF9iZWdpbihcdTAwMjZuZC1cdTAwM2Vyb290LmRlbnRyeS1cdTAwM2VkX3NlcSk7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBBIHRhc2sgbWF5IGhhdmUgbm8gcm9vdC4gTGVhdmUgbmQtXHUwMDNlcm9vdCBhcyB0aGUgTlVMTFxuK1x0XHRcdCAqIHBhdGggYW5kIHNraXAgdGhlIGRfc2VxIHJlYWQ6IGFic29sdXRlIGxvb2t1cHMgdHVyblxuK1x0XHRcdCAqIHRoZSBhYnNlbmNlIGludG8gLUVOT0VOVCBpbiBuZF9qdW1wX3Jvb3QoKSwgd2hpbGUgXCIuLlwiXG4rXHRcdFx0ICogdHJlYXRzIGEgTlVMTCByb290IGFzIFwibm8gYm91bmRhcnlcIiBhbmQgY2xpbWJzIHRvIGl0c1xuK1x0XHRcdCAqIG1vdW50IHJvb3QuXG4rXHRcdFx0ICovXG4rXHRcdFx0aWYgKGxpa2VseShuZC1cdTAwM2Vyb290Lm1udCkpXG4rXHRcdFx0XHRuZC1cdTAwM2Vyb290X3NlcSA9IF9fcmVhZF9zZXFjb3VudF9iZWdpbihcdTAwMjZuZC1cdTAwM2Vyb290LmRlbnRyeS1cdTAwM2VkX3NlcSk7XG4gXHRcdH0gd2hpbGUgKHJlYWRfc2VxcmV0cnkoXHUwMDI2ZnMtXHUwMDNlc2VxLCBzZXEpKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGdldF9mc19yb290KGZzLCBcdTAwMjZuZC1cdTAwM2Vyb290KTtcbi1cdFx0bmQtXHUwMDNlc3RhdGUgfD0gTkRfUk9PVF9HUkFCQkVEO1xuK1x0XHRpZiAobGlrZWx5KG5kLVx1MDAzZXJvb3QubW50KSlcbitcdFx0XHRuZC1cdTAwM2VzdGF0ZSB8PSBORF9ST09UX0dSQUJCRUQ7XG4gXHR9XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMTE0Myw2ICsxMTUyLDkgQEAgc3RhdGljIGludCBuZF9qdW1wX3Jvb3Qoc3RydWN0IG5hbWVpZGF0YSAqbmQpXG4gXHRcdGlmICh1bmxpa2VseShlcnJvcikpXG4gXHRcdFx0cmV0dXJuIGVycm9yO1xuIFx0fVxuK1x0LyogQWJzb2x1dGUgcGF0aHMgbmVlZCBhIHJvb3QgdG8ganVtcCB0bzsgYSB0YXNrIG1heSBoYXZlIG5vbmUuICovXG4rXHRpZiAodW5saWtlbHkoIW5kLVx1MDAzZXJvb3QubW50KSlcbitcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXHRpZiAobmQtXHUwMDNlZmxhZ3MgXHUwMDI2IExPT0tVUF9SQ1UpIHtcbiBcdFx0c3RydWN0IGRlbnRyeSAqZDtcbiBcdFx0bmQtXHUwMDNlcGF0aCA9IG5kLVx1MDAzZXJvb3Q7XG5AQCAtMjczMiwxMSArMjc0NCwxNyBAQCBzdGF0aWMgY29uc3QgY2hhciAqcGF0aF9pbml0KHN0cnVjdCBuYW1laWRhdGEgKm5kLCB1bnNpZ25lZCBmbGFncylcbiBcdFx0XHRkbyB7XG4gXHRcdFx0XHRzZXEgPSByZWFkX3NlcWJlZ2luKFx1MDAyNmZzLVx1MDAzZXNlcSk7XG4gXHRcdFx0XHRuZC1cdTAwM2VwYXRoID0gZnMtXHUwMDNlcHdkO1xuK1x0XHRcdFx0LyogQSB0YXNrIG1heSBoYXZlIG5vIGN3ZC4gKi9cbitcdFx0XHRcdGlmICh1bmxpa2VseSghbmQtXHUwMDNlcGF0aC5tbnQpKVxuK1x0XHRcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTtcbiBcdFx0XHRcdG5kLVx1MDAzZWlub2RlID0gbmQtXHUwMDNlcGF0aC5kZW50cnktXHUwMDNlZF9pbm9kZTtcbiBcdFx0XHRcdG5kLVx1MDAzZXNlcSA9IF9fcmVhZF9zZXFjb3VudF9iZWdpbihcdTAwMjZuZC1cdTAwM2VwYXRoLmRlbnRyeS1cdTAwM2VkX3NlcSk7XG4gXHRcdFx0fSB3aGlsZSAocmVhZF9zZXFyZXRyeShcdTAwMjZmcy1cdTAwM2VzZXEsIHNlcSkpO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdGdldF9mc19wd2QoY3VycmVudC1cdTAwM2VmcywgXHUwMDI2bmQtXHUwMDNlcGF0aCk7XG4rXHRcdFx0LyogQSB0YXNrIG1heSBoYXZlIG5vIGN3ZC4gKi9cbitcdFx0XHRpZiAodW5saWtlbHkoIW5kLVx1MDAzZXBhdGgubW50KSlcbitcdFx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xuIFx0XHRcdG5kLVx1MDAzZWlub2RlID0gbmQtXHUwMDNlcGF0aC5kZW50cnktXHUwMDNlZF9pbm9kZTtcbiBcdFx0fVxuIFx0fSBlbHNlIHtcbmRpZmYgLS1naXQgYS9mcy9wcm9jL2Jhc2UuYyBiL2ZzL3Byb2MvYmFzZS5jXG5pbmRleCA3ODBmODEyNTkwNTI3Yy4uN2Y3Y2M4NmNlMjYyNDIgMTAwNjQ0XG4tLS0gYS9mcy9wcm9jL2Jhc2UuY1xuKysrIGIvZnMvcHJvYy9iYXNlLmNcbkBAIC0yMTMsNyArMjEzLDkgQEAgc3RhdGljIGludCBnZXRfdGFza19yb290KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHBhdGggKnJvb3QpXG4gXHR0YXNrX2xvY2sodGFzayk7XG4gXHRpZiAodGFzay1cdTAwM2Vmcykge1xuIFx0XHRnZXRfZnNfcm9vdCh0YXNrLVx1MDAzZWZzLCByb290KTtcbi1cdFx0cmVzdWx0ID0gMDtcbitcdFx0LyogQSB0YXNrIG1heSBoYXZlIG5vIHJvb3QuICovXG4rXHRcdGlmIChyb290LVx1MDAzZW1udClcbitcdFx0XHRyZXN1bHQgPSAwO1xuIFx0fVxuIFx0dGFza191bmxvY2sodGFzayk7XG4gXHRyZXR1cm4gcmVzdWx0O1xuQEAgLTIyNyw3ICsyMjksOSBAQCBzdGF0aWMgaW50IHByb2NfY3dkX2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgcGF0aCAqcGF0aCxcbiBcdHRhc2tfbG9jayh0YXNrKTtcbiBcdGlmICh0YXNrLVx1MDAzZWZzKSB7XG4gXHRcdGdldF9mc19wd2QodGFzay1cdTAwM2VmcywgcGF0aCk7XG4tXHRcdHJlc3VsdCA9IDA7XG4rXHRcdC8qIEEgdGFzayBtYXkgaGF2ZSBubyBjd2QuICovXG4rXHRcdGlmIChwYXRoLVx1MDAzZW1udClcbitcdFx0XHRyZXN1bHQgPSAwO1xuIFx0fVxuIFx0dGFza191bmxvY2sodGFzayk7XG4gXHRyZXR1cm4gcmVzdWx0O1xuZGlmZiAtLWdpdCBhL2ZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYyBiL2ZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zZmI3ZTYzNTQ1ZjhjNlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jXG5AQCAtMCwwICsxLDE0NyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisvKlxuKyAqIEtVbml0IHRlc3RzIGZvciB0YXNrcyB3aG9zZSBmcy1cdTAwM2Vyb290IGFuZC9vciBmcy1cdTAwM2Vwd2QgaXMgdGhlIE5VTEwgcGF0aC5cbisgKiBTZWUgXCJmczogc3VwcG9ydCB0YXNrcyB3aXRoIGEgbnVsbCByb290IG9yIGN3ZFwiLlxuKyAqXG4rICogRWFjaCB0ZXN0IHJ1bnMgYWdhaW5zdCB0aGlzIHRhc2sncyBvd24gZnNfc3RydWN0LiBXZSB1bnNoYXJlIGl0IGZpcnN0XG4rICogc28gd2Ugb25seSBldmVyIHRvdWNoIGEgcHJpdmF0ZSBjb3B5LCBuZXZlciB0aGUgc2hhcmVkIG9uZSwgYW5kIHdlXG4rICogcmVzdG9yZSB0aGUgb3JpZ2luYWwgcm9vdC9jd2QgYWZ0ZXJ3YXJkcy5cbisgKi9cbisjaW5jbHVkZSBcdTAwM2NrdW5pdC90ZXN0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9mc19zdHJ1Y3QuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L25hbWVpLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wYXRoLmhcdTAwM2VcbitcbisvKiBUaGUgTlVMTCBwYXRoOiB7IC5tbnQgPSBOVUxMLCAuZGVudHJ5ID0gTlVMTCB9LiAqL1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGF0aCBudWxsX3BhdGg7XG4rXG4rc3RydWN0IG51bGxfZnNfY3R4IHtcbitcdHN0cnVjdCBwYXRoIHNhdmVkX3Jvb3Q7XG4rXHRzdHJ1Y3QgcGF0aCBzYXZlZF9wd2Q7XG4rXHRzdHJ1Y3QgcGF0aCBhbmNob3I7XHQvKiBhIHJlYWwgZGlyZWN0b3J5LCBzdGFuZGluZyBpbiBmb3IgYSBkaXJmZCAqL1xuK307XG4rXG4rc3RhdGljIGludCBudWxsX2ZzX3NldHVwKHN0cnVjdCBudWxsX2ZzX2N0eCAqY3R4KVxuK3tcbitcdGludCBlcnI7XG4rXG4rXHRlcnIgPSB1bnNoYXJlX2ZzX3N0cnVjdCgpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcdGVyciA9IGtlcm5fcGF0aChcIi9cIiwgTE9PS1VQX0RJUkVDVE9SWSwgXHUwMDI2Y3R4LVx1MDAzZWFuY2hvcik7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1x0Z2V0X2ZzX3Jvb3QoY3VycmVudC1cdTAwM2VmcywgXHUwMDI2Y3R4LVx1MDAzZXNhdmVkX3Jvb3QpO1xuK1x0Z2V0X2ZzX3B3ZChjdXJyZW50LVx1MDAzZWZzLCBcdTAwMjZjdHgtXHUwMDNlc2F2ZWRfcHdkKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBudWxsX2ZzX3RlYXJkb3duKHN0cnVjdCBudWxsX2ZzX2N0eCAqY3R4KVxuK3tcbitcdHNldF9mc19yb290KGN1cnJlbnQtXHUwMDNlZnMsIFx1MDAyNmN0eC1cdTAwM2VzYXZlZF9yb290KTtcbitcdHNldF9mc19wd2QoY3VycmVudC1cdTAwM2VmcywgXHUwMDI2Y3R4LVx1MDAzZXNhdmVkX3B3ZCk7XG4rXHRwYXRoX3B1dChcdTAwMjZjdHgtXHUwMDNlc2F2ZWRfcm9vdCk7XG4rXHRwYXRoX3B1dChcdTAwMjZjdHgtXHUwMDNlc2F2ZWRfcHdkKTtcbitcdHBhdGhfcHV0KFx1MDAyNmN0eC1cdTAwM2VhbmNob3IpO1xuK31cbitcbisvKiBSZXNvbHZlIEBuYW1lLCBkcm9wIGFueSByZWZlcmVuY2UgaXQgcmV0dXJucywgYW5kIHlpZWxkIHRoZSBlcnJuby4gKi9cbitzdGF0aWMgaW50IHRyeV9rZXJuX3BhdGgoY29uc3QgY2hhciAqbmFtZSlcbit7XG4rXHRzdHJ1Y3QgcGF0aCBvdXQ7XG4rXHRpbnQgZXJyID0ga2Vybl9wYXRoKG5hbWUsIDAsIFx1MDAyNm91dCk7XG4rXG4rXHRpZiAoIWVycilcbitcdFx0cGF0aF9wdXQoXHUwMDI2b3V0KTtcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyBpbnQgdHJ5X2ZkX3JlbGF0aXZlKHN0cnVjdCBudWxsX2ZzX2N0eCAqY3R4LCBjb25zdCBjaGFyICpuYW1lKVxuK3tcbitcdHN0cnVjdCBwYXRoIG91dDtcbitcdGludCBlcnIgPSB2ZnNfcGF0aF9sb29rdXAoY3R4LVx1MDAzZWFuY2hvci5kZW50cnksIGN0eC1cdTAwM2VhbmNob3IubW50LFxuK1x0XHRcdFx0ICBuYW1lLCAwLCBcdTAwMjZvdXQpO1xuK1xuK1x0aWYgKCFlcnIpXG4rXHRcdHBhdGhfcHV0KFx1MDAyNm91dCk7XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbisvKiBObyByb290OiBhYnNvbHV0ZSBwYXRocyBmYWlsLCBidXQgXCIuLlwiIGNsaW1icyBhbmQgdGhlIGN3ZCBzdGlsbCB3b3Jrcy4gKi9cbitzdGF0aWMgdm9pZCBudWxsX3Jvb3RfdGVzdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4re1xuK1x0c3RydWN0IG51bGxfZnNfY3R4IGN0eDtcbitcbitcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCBudWxsX2ZzX3NldHVwKFx1MDAyNmN0eCksIDApO1xuK1x0c2V0X2ZzX3Jvb3QoY3VycmVudC1cdTAwM2VmcywgXHUwMDI2bnVsbF9wYXRoKTtcbitcbitcdC8qIEEgbGVhZGluZyAnLycgaGFzIG5vdGhpbmcgdG8gYW5jaG9yIHRvLiAqL1xuK1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHRyeV9rZXJuX3BhdGgoXCIvXCIpLCAtRU5PRU5UKTtcbitcbitcdC8qIFwiLi5cIiBpcyB1bmJvdW5kZWQgcmF0aGVyIHRoYW4gcmVmdXNlZCAoaXQgd291bGQgaGF2ZSBiZWVuXG4rXHQgKiAtRU5PRU5UIGJlZm9yZSB0aGlzIGZlYXR1cmUpLiBJdCBzdGFydHMgZnJvbSB0aGUgc3RpbGwtcHJlc2VudFxuK1x0ICogY3dkIGFuZCBydW5zIG91dCBvZiBwYXJlbnRzIGF0IHRoZSBtb3VudCByb290LlxuK1x0ICovXG4rXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgdHJ5X2tlcm5fcGF0aChcIi4uXCIpLCAwKTtcbitcbitcdC8qIFRoZSBjd2QgaXMgdW50b3VjaGVkOiBBVF9GRENXRC1yZWxhdGl2ZSBsb29rdXBzIHN0aWxsIHJlc29sdmUuICovXG4rXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgdHJ5X2tlcm5fcGF0aChcIi5cIiksIDApO1xuK1xuK1x0LyogQSBkaXJmZC1hbmNob3JlZCBsb29rdXAgbmV2ZXIgY29uc3VsdHMgZnMtXHUwMDNlcm9vdC4gKi9cbitcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCB0cnlfZmRfcmVsYXRpdmUoXHUwMDI2Y3R4LCBcIi5cIiksIDApO1xuK1xuK1x0bnVsbF9mc190ZWFyZG93bihcdTAwMjZjdHgpO1xuK31cbitcbisvKiBObyBjd2Q6IEFUX0ZEQ1dELXJlbGF0aXZlIHBhdGhzIGZhaWwsIGJ1dCBhYnNvbHV0ZSBhbmQgZGlyZmRzIHdvcmsuICovXG4rc3RhdGljIHZvaWQgbnVsbF9jd2RfdGVzdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4re1xuK1x0c3RydWN0IG51bGxfZnNfY3R4IGN0eDtcbitcbitcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCBudWxsX2ZzX3NldHVwKFx1MDAyNmN0eCksIDApO1xuK1x0c2V0X2ZzX3B3ZChjdXJyZW50LVx1MDAzZWZzLCBcdTAwMjZudWxsX3BhdGgpO1xuK1xuK1x0LyogUmVsYXRpdmUtdG8tY3dkIGxvb2t1cHMgaGF2ZSBubyBzdGFydGluZyBwb2ludC4gKi9cbitcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCB0cnlfa2Vybl9wYXRoKFwiLlwiKSwgLUVOT0VOVCk7XG4rXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgdHJ5X2tlcm5fcGF0aChcImZvb1wiKSwgLUVOT0VOVCk7XG4rXG4rXHQvKiBUaGUgcm9vdCBpcyB1bnRvdWNoZWQ6IGFic29sdXRlIGxvb2t1cHMgc3RpbGwgcmVzb2x2ZS4gKi9cbitcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCB0cnlfa2Vybl9wYXRoKFwiL1wiKSwgMCk7XG4rXG4rXHQvKiBBIGRpcmZkLWFuY2hvcmVkIGxvb2t1cCBuZXZlciBjb25zdWx0cyBmcy1cdTAwM2Vwd2QuICovXG4rXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgdHJ5X2ZkX3JlbGF0aXZlKFx1MDAyNmN0eCwgXCIuXCIpLCAwKTtcbitcbitcdG51bGxfZnNfdGVhcmRvd24oXHUwMDI2Y3R4KTtcbit9XG4rXG4rLyogTmVpdGhlciByb290IG5vciBjd2Q6IG9ubHkgZGVzY3JpcHRvci1yZWxhdGl2ZSBsb29rdXBzIHJlbWFpbi4gKi9cbitzdGF0aWMgdm9pZCBudWxsX3Jvb3RfYW5kX2N3ZF90ZXN0KHN0cnVjdCBrdW5pdCAqdGVzdClcbit7XG4rXHRzdHJ1Y3QgbnVsbF9mc19jdHggY3R4O1xuK1xuK1x0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIG51bGxfZnNfc2V0dXAoXHUwMDI2Y3R4KSwgMCk7XG4rXHRzZXRfZnNfcm9vdChjdXJyZW50LVx1MDAzZWZzLCBcdTAwMjZudWxsX3BhdGgpO1xuK1x0c2V0X2ZzX3B3ZChjdXJyZW50LVx1MDAzZWZzLCBcdTAwMjZudWxsX3BhdGgpO1xuK1xuK1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHRyeV9rZXJuX3BhdGgoXCIvXCIpLCAtRU5PRU5UKTtcbitcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCB0cnlfa2Vybl9wYXRoKFwiLlwiKSwgLUVOT0VOVCk7XG4rXG4rXHQvKiBUaGUgaGVsZCBkZXNjcmlwdG9yIHN0aWxsIG5hbWVzIGZpbGVzLiAqL1xuK1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHRyeV9mZF9yZWxhdGl2ZShcdTAwMjZjdHgsIFwiLlwiKSwgMCk7XG4rXG4rXHRudWxsX2ZzX3RlYXJkb3duKFx1MDAyNmN0eCk7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBudWxsX3Jvb3RfY3dkX3Rlc3RfY2FzZXNbXSA9IHtcbitcdEtVTklUX0NBU0UobnVsbF9yb290X3Rlc3QpLFxuK1x0S1VOSVRfQ0FTRShudWxsX2N3ZF90ZXN0KSxcbitcdEtVTklUX0NBU0UobnVsbF9yb290X2FuZF9jd2RfdGVzdCksXG4rXHR7fSxcbit9O1xuK1xuK3N0YXRpYyBzdHJ1Y3Qga3VuaXRfc3VpdGUgbnVsbF9yb290X2N3ZF90ZXN0X3N1aXRlID0ge1xuK1x0Lm5hbWUgPSBcIm51bGxfcm9vdF9jd2RcIixcbitcdC50ZXN0X2Nhc2VzID0gbnVsbF9yb290X2N3ZF90ZXN0X2Nhc2VzLFxuK307XG4rXG4ra3VuaXRfdGVzdF9zdWl0ZShudWxsX3Jvb3RfY3dkX3Rlc3Rfc3VpdGUpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnNfc3RydWN0LmggYi9pbmNsdWRlL2xpbnV4L2ZzX3N0cnVjdC5oXG5pbmRleCAwMDcwNzY0Yjc5MGEzZS4uODQ0MjNiNGJkMjFhZTcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzX3N0cnVjdC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZzX3N0cnVjdC5oXG5AQCAtMTIsNyArMTIsMzQgQEAgc3RydWN0IGZzX3N0cnVjdCB7XG4gXHRzZXFsb2NrX3Qgc2VxO1xuIFx0aW50IHVtYXNrO1xuIFx0aW50IGluX2V4ZWM7XG4tXHRzdHJ1Y3QgcGF0aCByb290LCBwd2Q7XG4rXG4rXHQvKlxuK1x0ICogTm90ZSB0aGF0IHRoZXNlIHBhdGhzIGFyZSBleHBsaWNpdGx5IGludGVuZGVkIHRvIGJlIG51bGxhYmxlLlxuK1x0ICogU2luY2UgdGhleSBhcmUgaW5saW5lIHN0cnVjdHMgYW5kIG5vdCBwb2ludGVycywgd2UgdXNlIGAubW50XG4rXHQgKiA9PSBOVUxMYCB0byBpbmRpY2F0ZSBudWxsYWJpbGl0eSBvZiB0aGUgcGF0aCBhcyBhIHdob2xlLlxuK1x0ICovXG4rXG4rXHQvKlxuK1x0ICogVGhlIHJvb3QgZGlyZWN0b3J5IGZvciB0aGUgdGFzayhzKSB0aGF0IHBvaW50cyB0byB0aGlzXG4rXHQgKiBgZnNfc3RydWN0YC4gVGhlIHJvb3QgZGlyZWN0b3J5IGFsc28gY29udHJvbHMgaG93IGAuLmBcbitcdCAqIHJlc29sdmU7IHBhdGggdHJhdmVyc2FsIGlzIG5vdCBhbGxvd2VkIHRvIHJlc29sdmUgdXB3YXJkc1xuK1x0ICogYmV5b25kIHRoZSByb290IGRpcmVjdG9yeS4gKEl0IGlzIGZvciB0aGlzIGxhdHRlciByZWFzb24gdGhhdFxuK1x0ICogYGNocm9vdGAgaXMgYSBwcml2aWxlZ2VkIG9wZXJhdGlvbi4pXG4rXHQgKlxuK1x0ICogSWYgbnVsbCAoYXMgZGVzY3JpYmVkIGFib3ZlKSwgYWJzb2x1dGUgcGF0aHMgd2lsbCBub3RcbitcdCAqIHJlc29sdmUuIEluIGFkZGl0aW9uIGAuLmAgd2lsbCBiZSB1bmJvdW5kZWQsIHVudGlsIG9uZVxuK1x0ICogcmVhY2hlcyB0aGUgdG9wIG9mIHRoZSBtb3VudCB0cmVlLlxuK1x0ICovXG4rXHRzdHJ1Y3QgcGF0aCByb290O1xuK1xuK1x0LypcbitcdCAqIFRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGZvciB0aGUgdGFzayhzKSB0aGF0IHBvaW50cyB0b1xuK1x0ICogdGhpcyBgZnNfc3RydWN0YC5cbitcdCAqXG4rXHQgKiBJZiBudWxsIChhcyBkZXNjcmliZWQgYWJvdmUpLCByZWxhdGl2ZSBwYXRocyB3aXRoIGBBVF9GRENXRGBcbitcdCAqIHdpbGwgbm90IHJlc29sdmUuXG4rXHQgKi9cbitcdHN0cnVjdCBwYXRoIHB3ZDtcbiB9IF9fcmFuZG9taXplX2xheW91dDtcbiBcbiBleHRlcm4gc3RydWN0IGttZW1fY2FjaGUgKmZzX2NhY2hlcDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA3OjE3OjU2LjcxOTIyMTE2NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0NjM2ODE4OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOdWxsIFJvb3QvQ1dEIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgYXBwZWFycyB0byBpbnRyb2R1Y2Ugc3VwcG9ydCBmb3IgdGFza3Mgd2l0aCBhIG51bGwgcm9vdCBvciBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiBUaGUgcGF0Y2ggdG91Y2hlcyBxdWl0ZSBhIGZldyBmaWxlczogYGZzL2NhY2hlZmlsZXMvZGFlbW9uLmNgLCBgZnMvZF9wYXRoLmNgLCBgZnMvZmhhbmRsZS5jYCwgYGZzL2ZzX3N0cnVjdC5jYCwgYGZzL25hbWVpLmNgLCBgZnMvcHJvYy9iYXNlLmNgLCBgZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jYCwgYW5kIGBpbmNsdWRlL2xpbnV4L2ZzX3N0cnVjdC5oYC4gSXQgYWxzbyBhZGRzIGEgbmV3IEtjb25maWcgb3B0aW9uLCBgTlVMTF9ST09UX0NXRF9LVU5JVF9URVNUYC5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCB0aGUgbW9zdCBpbnRlcmVzdGluZyBjaGFuZ2VzIGFyZSBkZWZpbml0ZWx5IGluIGBmcy9uYW1laS5jYCBhbmQgaG93IHRoZXkncmUgaGFuZGxpbmcgdGhlc2UgbnVsbCBtb3VudCBwb2ludHMuIFRoZXkgc2VlbSB0byBiZSBtb2RpZnlpbmcgdGhlIHBhdGggcmVzb2x1dGlvbiBsb2dpYyB0byBkZWFsIHdpdGggY2FzZXMgd2hlcmUgYCFwYXRoLm1udGAgaXMgdHJ1ZSDigJMgYW5kIGV2ZW4gbW9yZSwgSSBzZWUgdGhleSdyZSBoYW5kbGluZyBgIW5kLVx1MDAzZXJvb3QubW50YCBhbmQgYCFuZC1cdTAwM2VwYXRoLm1udGAgZXhwbGljaXRseS4gVGhpcyBzZWVtcyBsaWtlIGNvcmUgZnVuY3Rpb25hbCBsb2dpYywgbm90IGp1c3QgaW50ZXJuYWwgaG91c2VrZWVwaW5nLlxuXG5Ob3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBpcyBzb21ldGhpbmcgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIG9yIGlmIGl0IGlzIHB1cmVseSBpbnRlcm5hbC4gTXkgZ3V0IGZlZWxpbmcgaXMgdGVsbGluZyBtZSB0aGF0IGl0IG11c3QgYmUgcG9zc2libGUgdG8gdHJpZ2dlciBpdCBmcm9tIHVzZXIgc3BhY2UgaWYgdGhleSBhcmUgbW9kaWZ5aW5nIHNvIG1hbnkgY29yZSBmdW5jdGlvbnMuIEJ1dCBob3cgZG9lcyBhIHRhc2sgKmdldCogYSBudWxsIHJvb3Qgb3IgY3dkPyBJcyB0aGVyZSBhIHN5c2NhbGwgZm9yIHRoaXMsIG9yIHNvbWUgb3RoZXIgbWVjaGFuaXNtPyBUaGUgcGF0Y2ggZGVzY3JpcHRpb24gbWVudGlvbnMgXCJzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcIiwgc28gaXQncyBwcm9iYWJseSByZWxhdGVkIHRvIHN5emthbGxlciBmdXp6aW5nLlxuXG5MZXQncyBkaXZlIGRlZXBlciBpbnRvIHRoZSBgZnMvbmFtZWkuY2AgY2hhbmdlcyB0aGVtc2VsdmVzLiBBaCwgaGVyZSdzIGEgY3J1Y2lhbCBzbmlwcGV0OlxuXG5gYGBjXG5AQCAtMTEyMCwxMSArMTEyMCwyMCBAQCBzdGF0aWMgaW50IHNldF9yb290KHN0cnVjdCBuYW1laWRhdGEgKm5kKVxuIFx0XHRkbyB7XG4gXHRcdFx0c2VxID0gcmVhZF9zZXFiZWdpbihcdTAwMjZmcy1cdTAwM2VzZXEpO1xuIFx0XHRcdG5kLVx1MDAzZXJvb3QgPSBmcy1cdTAwM2Vyb290O1xuLVx0XHRcdG5kLVx1MDAzZXJvb3Rfc2VxID0gX19yZWFkX3NlcWNvdW50X2JlZ2luKFx1MDAyNm5kLVx1MDAzZXJvb3QuZGVudHJ5LVx1MDAzZWRfc2VxKTtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIEEgdGFzayBtYXkgaGF2ZSBubyByb290LiBMZWF2ZSBuZC1cdTAwM2Vyb290IGFzIHRoZSBOVUxMXG4uLi5cbmBgYFxuXG5SaWdodCwgdGhlIGNvbW1lbnQgaXMgcHJldHR5IGNsZWFyIHRoYXQgXCJBIHRhc2sgbWF5IGhhdmUgbm8gcm9vdFwiLiBOb3cgdGhlIHF1ZXN0aW9uIGJlY29tZXMsIGlzIHRoZXJlIHNvbWUgd2F5IHRvIHNldCBgZnMtXHUwMDNlcm9vdC5tbnRgIHRvIE5VTEwgZnJvbSB1c2Vyc3BhY2U/IFRpbWUgdG8gZ28gaHVudGluZzogSSdtIGdvaW5nIHRvIHNlYXJjaCB0aGUga2VybmVsIHNvdXJjZSBmb3IgYW55IGNhbGxzIHRvIGBzZXRfZnNfcm9vdGAgb3IgYHNldF9mc19wd2RgLCBsb29raW5nIHNwZWNpZmljYWxseSBmb3IgaW5zdGFuY2VzIHdoZXJlIHRoZXkgbWlnaHQgYmUgcGFzc2VkIGEgTlVMTCBwb2ludGVyLiBUaGF0IHNob3VsZCBsZWFkIG1lIHRvIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5LCBhbmQgaGVscCBtZSBmaWd1cmUgb3V0IGhvdyB0aGlzIGlzIGhhcHBlbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjEyMywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA3OjE4OjA0LjE4MjkwNjA5M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzU5MjU5NjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNldF9mc19yb290LipudWxsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYz03MT1zdGF0aWMgdm9pZCBudWxsX3Jvb3RfdGVzdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmMtNzUtXFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIG51bGxfZnNfc2V0dXAoXFx1MDAyNmN0eCksIDApO1xcbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYzo3NjpcXHRzZXRfZnNfcm9vdChjdXJyZW50LVxcdTAwM2VmcywgXFx1MDAyNm51bGxfcGF0aCk7XFxuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jLTc3LVxcbi0tXFxuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jPTExOD1zdGF0aWMgdm9pZCBudWxsX3Jvb3RfYW5kX2N3ZF90ZXN0KHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYy0xMjItXFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIG51bGxfZnNfc2V0dXAoXFx1MDAyNmN0eCksIDApO1xcbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYzoxMjM6XFx0c2V0X2ZzX3Jvb3QoY3VycmVudC1cXHUwMDNlZnMsIFxcdTAwMjZudWxsX3BhdGgpO1xcbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYy0xMjQtXFx0c2V0X2ZzX3B3ZChjdXJyZW50LVxcdTAwM2VmcywgXFx1MDAyNm51bGxfcGF0aCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA3OjE4OjExLjU0MjE3OTgzMloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMTIzNTYxODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MgbGFpZCBvdXQsIGFzc3VtaW5nIEknbSBkZWVwIGluIHRoZSB3ZWVkcyB3aXRoIGZpbGVzeXN0ZW0ga2VybmVsIGNvZGUsIGFuZCB0aGlzIGlzIGEgcG90ZW50aWFsIGJ1ZyBJJ20gY2hhc2luZzpcblxuKipSb290IENhdXNlIEFuYWx5c2lzIC0gYGZzLVx1MDAzZXJvb3QubW50YCBOVUxMaWZpY2F0aW9uKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIFRoZSBmYWN0IHRoYXQgYGZzLVx1MDAzZXJvb3QubW50YCBpcyBlbmRpbmcgdXAgYXMgTlVMTCBpcyBhIHNlcmlvdXMgcmVkIGZsYWcuIFdlIGtub3cgaXQgc2hvdWxkbid0IGJlLCBzbyBsZXQncyB0cmFjayBkb3duICp3aGVyZSogdGhpcyB2YWx1ZSBpcyBiZWluZyB6ZXJvZWQgb3V0LiBUaGUgcHJpbWFyeSBmb2N1cyBuZWVkcyB0byBiZSBpZGVudGlmeWluZyBldmVyeSBpbnN0YW5jZSB3aGVyZSBgZnMtXHUwMDNlcm9vdC5tbnRgIG1pZ2h0IGJlIGV4cGxpY2l0bHkgc2V0IHRvIE5VTEwuIEl04oCZcyBhIHByZXR0eSBkaXJlY3QgcGF0aCBmb3IgYSBrZXJuZWwgaXNzdWUsIHNvIGl0J3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LiBJJ2xsIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgY29kZWJhc2UgYW5kIHNlYXJjaCBmb3IgYW55dGhpbmcgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBtb2RpZnkgdGhpcyBjcnVjaWFsIGRhdGEgZWxlbWVudCwgYW5kIG1ha2Ugc3VyZSB0byBhY2NvdW50IGZvciBhbnkgb3RoZXIgZnVuY3Rpb25zIHRoYXQgbWF5IGJlIG1hbmlwdWxhdGluZyB0aGlzIGRhdGEgYXMgd2VsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQ4NiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA3OjE4OjE0LjY1NDUzOTQwMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTMwMjAyMzk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNldF9mc19yb290XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2ZzX3N0cnVjdC5jLTE1LSAqL1xcbmZzL2ZzX3N0cnVjdC5jOjE2OnZvaWQgc2V0X2ZzX3Jvb3Qoc3RydWN0IGZzX3N0cnVjdCAqZnMsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoKVxcbmZzL2ZzX3N0cnVjdC5jLTE3LXtcXG4tLVxcbmZzL2luaXQuYz03Nj1pbnQgX19pbml0IGluaXRfY2hyb290KGNvbnN0IGNoYXIgKmZpbGVuYW1lKVxcbi0tXFxuZnMvaW5pdC5jLTkyLVxcdFxcdGdvdG8gZHB1dF9hbmRfb3V0O1xcbmZzL2luaXQuYzo5MzpcXHRzZXRfZnNfcm9vdChjdXJyZW50LVxcdTAwM2VmcywgXFx1MDAyNnBhdGgpO1xcbmZzL2luaXQuYy05NC1kcHV0X2FuZF9vdXQ6XFxuLS1cXG5mcy9uYW1lc3BhY2UuYz02MTgwPXN0YXRpYyB2b2lkIF9faW5pdCBpbml0X21vdW50X3RyZWUodm9pZClcXG4tLVxcbmZzL25hbWVzcGFjZS5jLTYyMzgtXFx0c2V0X2ZzX3B3ZChjdXJyZW50LVxcdTAwM2VmcywgXFx1MDAyNnJvb3QpO1xcbmZzL25hbWVzcGFjZS5jOjYyMzk6XFx0c2V0X2ZzX3Jvb3QoY3VycmVudC1cXHUwMDNlZnMsIFxcdTAwMjZyb290KTtcXG5mcy9uYW1lc3BhY2UuYy02MjQwLVxcbi0tXFxuZnMvbmFtZXNwYWNlLmM9NjQ3OT1zdGF0aWMgaW50IG1udG5zX2luc3RhbGwoc3RydWN0IG5zc2V0ICpuc3NldCwgc3RydWN0IG5zX2NvbW1vbiAqbnMpXFxuLS1cXG5mcy9uYW1lc3BhY2UuYy02NTE2LVxcdHNldF9mc19wd2QoZnMsIFxcdTAwMjZyb290KTtcXG5mcy9uYW1lc3BhY2UuYzo2NTE3OlxcdHNldF9mc19yb290KGZzLCBcXHUwMDI2cm9vdCk7XFxuZnMvbmFtZXNwYWNlLmMtNjUxOC1cXG4tLVxcbmZzL29wZW4uYz01ODg9U1lTQ0FMTF9ERUZJTkUxKGNocm9vdCwgY29uc3QgY2hhciBfX3VzZXIgKiwgZmlsZW5hbWUpXFxuLS1cXG5mcy9vcGVuLmMtNjA3LVxcdGlmICghZXJyb3IpXFxuZnMvb3Blbi5jOjYwODpcXHRcXHRzZXRfZnNfcm9vdChjdXJyZW50LVxcdTAwM2VmcywgXFx1MDAyNnBhdGgpO1xcbmZzL29wZW4uYy02MDktZHB1dF9hbmRfb3V0Olxcbi0tXFxuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jPTM5PXN0YXRpYyB2b2lkIG51bGxfZnNfdGVhcmRvd24oc3RydWN0IG51bGxfZnNfY3R4ICpjdHgpXFxuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jLTQwLXtcXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmM6NDE6XFx0c2V0X2ZzX3Jvb3QoY3VycmVudC1cXHUwMDNlZnMsIFxcdTAwMjZjdHgtXFx1MDAzZXNhdmVkX3Jvb3QpO1xcbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYy00Mi1cXHRzZXRfZnNfcHdkKGN1cnJlbnQtXFx1MDAzZWZzLCBcXHUwMDI2Y3R4LVxcdTAwM2VzYXZlZF9wd2QpO1xcbi0tXFxuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jPTcxPXN0YXRpYyB2b2lkIG51bGxfcm9vdF90ZXN0KHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYy03NS1cXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgbnVsbF9mc19zZXR1cChcXHUwMDI2Y3R4KSwgMCk7XFxuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jOjc2OlxcdHNldF9mc19yb290KGN1cnJlbnQtXFx1MDAzZWZzLCBcXHUwMDI2bnVsbF9wYXRoKTtcXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmMtNzctXFxuLS1cXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmM9MTE4PXN0YXRpYyB2b2lkIG51bGxfcm9vdF9hbmRfY3dkX3Rlc3Qoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jLTEyMi1cXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgbnVsbF9mc19zZXR1cChcXHUwMDI2Y3R4KSwgMCk7XFxuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jOjEyMzpcXHRzZXRfZnNfcm9vdChjdXJyZW50LVxcdTAwM2VmcywgXFx1MDAyNm51bGxfcGF0aCk7XFxuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jLTEyNC1cXHRzZXRfZnNfcHdkKGN1cnJlbnQtXFx1MDAzZWZzLCBcXHUwMDI2bnVsbF9wYXRoKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvZnNfc3RydWN0Lmg9NDc9ZXh0ZXJuIHZvaWQgZXhpdF9mcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7XFxuaW5jbHVkZS9saW51eC9mc19zdHJ1Y3QuaDo0ODpleHRlcm4gdm9pZCBzZXRfZnNfcm9vdChzdHJ1Y3QgZnNfc3RydWN0ICosIGNvbnN0IHN0cnVjdCBwYXRoICopO1xcbmluY2x1ZGUvbGludXgvZnNfc3RydWN0LmgtNDktZXh0ZXJuIHZvaWQgc2V0X2ZzX3B3ZChzdHJ1Y3QgZnNfc3RydWN0ICosIGNvbnN0IHN0cnVjdCBwYXRoICopO1xcbi0tXFxua2VybmVsL25zcHJveHkuYz01MzU9c3RhdGljIHZvaWQgY29tbWl0X25zc2V0KHN0cnVjdCBuc3NldCAqbnNzZXQpXFxuLS1cXG5rZXJuZWwvbnNwcm94eS5jLTU0OS1cXHRpZiAoKGZsYWdzIFxcdTAwMjYgQ0xPTkVfTkVXTlMpIFxcdTAwMjZcXHUwMDI2IChmbGFncyBcXHUwMDI2IH5DTE9ORV9ORVdOUykpIHtcXG5rZXJuZWwvbnNwcm94eS5jOjU1MDpcXHRcXHRzZXRfZnNfcm9vdChtZS1cXHUwMDNlZnMsIFxcdTAwMjZuc3NldC1cXHUwMDNlZnMtXFx1MDAzZXJvb3QpO1xcbmtlcm5lbC9uc3Byb3h5LmMtNTUxLVxcdFxcdHNldF9mc19wd2QobWUtXFx1MDAzZWZzLCBcXHUwMDI2bnNzZXQtXFx1MDAzZWZzLVxcdTAwM2Vwd2QpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwNzoxODoxOS41ODQ3NTYxNDVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDY0Mzk5Njc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNvbnNpZGVyaW5nIERpcmVjdCBOdWxsaW5nIG9mIGBmcy1cdTAwM2Vyb290YCoqXG5cbk9rYXksIHNvIEknbSBtdWxsaW5nIG92ZXIgYSBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIG9yIHNpbXBsaWZpY2F0aW9uIGhlcmUuIFRoZSBjdXJyZW50IGFwcHJvYWNoIHRvIGhhbmRsaW5nIHRoZSBmaWxlIHN5c3RlbSByb290IChgZnMtXHUwMDNlcm9vdGApIHNlZW1zIGEgYml0IHJvdW5kYWJvdXQgaW4gdGhpcyBzcGVjaWZpYyBzY2VuYXJpby4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzOiB3aGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGRpcmVjdGx5IHNldHRpbmcgYGZzLVx1MDAzZXJvb3RgIHRvIGBOVUxMYD8gSSdtIHRyeWluZyB0byBtZW50YWxseSB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzIGFuZCB1bmRlcnN0YW5kIHdoZXJlIHRoYXQgdmFyaWFibGUgaXMgdXNlZCBkb3duIHRoZSBsaW5lLiBXb3VsZCB0aGlzIGJ5cGFzcyBuZWNlc3NhcnkgY2xlYW51cCByb3V0aW5lcyBvciBpbnRyb2R1Y2Ugc3VidGxlIHJhY2UgY29uZGl0aW9ucz8gQXJlIHRoZXJlIGFueSBpbnZhcmlhbnRzIEknbSBpbmFkdmVydGVudGx5IGJyZWFraW5nPyBJIG5lZWQgdG8gcXVpY2tseSBydW4gdGhyb3VnaCB0aGUgcmVsZXZhbnQgY29kZSBwYXRocyBpbiBteSBoZWFkIC0gc3BlY2lmaWNhbGx5LCBpbml0aWFsaXphdGlvbiwgZGUtaW5pdGlhbGl6YXRpb24sIGFuZCBhbnkgZnVuY3Rpb25zIHRoYXQgbWlnaHQgcmVseSBvbiB0aGUgYGZzLVx1MDAzZXJvb3RgIHBvaW50ZXIuIEknbSBmb2N1c2luZyBvbiB0aGUgcG90ZW50aWFsIGZvciBtZW1vcnkgbGVha3Mgb3IgZGFuZ2xpbmcgcG9pbnRlcnMgaWYgSSBnbyB0aGlzIHJvdXRlLiBUaGUgc2ltcGxpY2l0eSBvZiBhIGRpcmVjdCBudWxsIGFzc2lnbm1lbnQgaXMgYXBwZWFsaW5nLCBidXQgYXMgYWx3YXlzLCBjb3JyZWN0bmVzcyB0cnVtcHMgZWxlZ2FuY2UuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhpcyB3b24ndCBjYXVzZSBwcm9ibGVtcyBmdXJ0aGVyIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODAxLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDc6MTg6MjMuNjQ5MTYwMDIyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NDUwMDkxMjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnMtXFx1MDAzZXJvb3QgPVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL2huc19yb2NlX2RlYnVnZnMuYz04NT1zdGF0aWMgdm9pZCBjcmVhdGVfc3dfc3RhdF9kZWJ1Z2ZzKHN0cnVjdCBobnNfcm9jZV9kZXYgKmhyX2RldixcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvaG5zX3JvY2VfZGVidWdmcy5jLTkyLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvaG5zX3JvY2VfZGVidWdmcy5jOjkzOlxcdGRiZ2ZzLVxcdTAwM2Vyb290ID0gZGVidWdmc19jcmVhdGVfZGlyKFxcXCJzd19zdGF0XFxcIiwgcGFyZW50KTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL2huc19yb2NlX2RlYnVnZnMuYy05NC1cXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJzd19zdGF0XFxcIiwgMDQwMCwgZGJnZnMtXFx1MDAzZXJvb3QsIFxcdTAwMjZkYmdmcy1cXHUwMDNlc3dfc3RhdCxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvaG5zX3JvY2VfZGVidWdmcy5jPTMwMT1zdGF0aWMgdm9pZCBjcmVhdGVfY2NfcGFyYW1fZGVidWdmcyhzdHJ1Y3QgaG5zX3JvY2VfZGV2ICpocl9kZXYsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL2huc19yb2NlX2RlYnVnZnMuYy0zMjQtXFx0XFx0ZGJnZnMgPSBcXHUwMDI2aHJfZGV2LVxcdTAwM2VkYmdmcy5jY19wYXJhbV9yb290W2ldO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvaG5zX3JvY2VfZGVidWdmcy5jOjMyNTpcXHRcXHRkYmdmcy1cXHUwMDNlcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2Rpcihjb25nX2F0dHItXFx1MDAzZW5hbWUsIHBhcmVudCk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hucy9obnNfcm9jZV9kZWJ1Z2ZzLmMtMzI2LVxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBITlNfUk9DRV9DQ19QQVJBTV9NQVhfTlVNOyBqKyspIHtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvaG5zX3JvY2VfZGVidWdmcy5jPTM0Mz12b2lkIGhuc19yb2NlX3JlZ2lzdGVyX2RlYnVnZnMoc3RydWN0IGhuc19yb2NlX2RldiAqaHJfZGV2KVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hucy9obnNfcm9jZV9kZWJ1Z2ZzLmMtMzQ2LVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvaG5zX3JvY2VfZGVidWdmcy5jOjM0NzpcXHRkYmdmcy1cXHUwMDNlcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcihwY2lfbmFtZShocl9kZXYtXFx1MDAzZXBjaV9kZXYpLFxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvaG5zX3JvY2VfZGVidWdmcy5jLTM0OC1cXHRcXHRcXHRcXHRcXHQgaG5zX3JvY2VfZGJnZnNfcm9vdCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfY3QuYz0yMTk1PW1seDVfY3RfdGNfY3JlYXRlX2RiZ2ZzKHN0cnVjdCBtbHg1X3RjX2N0X3ByaXYgKmN0X3ByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfY3QuYy0yMTk4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y19jdC5jOjIxOTk6XFx0Y3RfZGJnZnMtXFx1MDAzZXJvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoXFxcImN0XFxcIiwgbWx4NV9kZWJ1Z2ZzX2dldF9kZXZfcm9vdChjdF9wcml2LVxcdTAwM2VkZXYpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfY3QuYy0yMjAwLVxcdGRlYnVnZnNfY3JlYXRlX2F0b21pY190KFxcXCJvZmZsb2FkZWRcXFwiLCAwNDAwLCBjdF9kYmdmcy1cXHUwMDNlcm9vdCxcXG4tLVxcbmZzL2ZzX3N0cnVjdC5jPTE2PXZvaWQgc2V0X2ZzX3Jvb3Qoc3RydWN0IGZzX3N0cnVjdCAqZnMsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoKVxcbi0tXFxuZnMvZnNfc3RydWN0LmMtMjItXFx0b2xkX3Jvb3QgPSBmcy1cXHUwMDNlcm9vdDtcXG5mcy9mc19zdHJ1Y3QuYzoyMzpcXHRmcy1cXHUwMDNlcm9vdCA9ICpwYXRoO1xcbmZzL2ZzX3N0cnVjdC5jLTI0LVxcdHdyaXRlX3NlcXVubG9jayhcXHUwMDI2ZnMtXFx1MDAzZXNlcSk7XFxuLS1cXG5mcy9mc19zdHJ1Y3QuYz0xMDc9c3RydWN0IGZzX3N0cnVjdCAqY29weV9mc19zdHJ1Y3Qoc3RydWN0IGZzX3N0cnVjdCAqb2xkKVxcbi0tXFxuZnMvZnNfc3RydWN0LmMtMTE3LVxcdFxcdHJlYWRfc2VxbG9ja19leGNsKFxcdTAwMjZvbGQtXFx1MDAzZXNlcSk7XFxuZnMvZnNfc3RydWN0LmM6MTE4OlxcdFxcdGZzLVxcdTAwM2Vyb290ID0gb2xkLVxcdTAwM2Vyb290O1xcbmZzL2ZzX3N0cnVjdC5jLTExOS1cXHRcXHRwYXRoX2dldChcXHUwMDI2ZnMtXFx1MDAzZXJvb3QpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwNzoxODoyOC41OTQxNzc4NjVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzYxMjUwMzMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIFwiTnVsbCBSb290L0NXRFwiIFBhdGNoKipcblxuT2theSwgc28gdGhlIHBhdGNoIG5vdGVzIG1lbnRpb24gc3VwcG9ydCBmb3IgdGFza3Mgd2l0aCBhIG51bGwgcm9vdCBvciBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IChDV0QpLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjZW5hcmlvcyB0aGlzIGFwcGxpZXMgdG8uIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBjb21taXQgbWVzc2FnZSBvciBjb3ZlciBsZXR0ZXIgZm9yIGNvbnRleHQsIGJ1dCBzaW5jZSBJIGRvbid0IGhhdmUgdGhhdCBoYW5keSwgSSdsbCBnbyBkaXJlY3RseSB0byB0aGUgc291cmNlLiBNeSB0aG91Z2h0IGlzLCBpcyB0aGVyZSBhIHN5c3RlbSBjYWxsIHRoYXQgZXhwbGljaXRseSBhbGxvd3Mgc2V0dGluZyB0aGVzZSBwYXRocyB0byBOVUxMPyBcblxuVGhlbiBpdCBoaXRzIG1lOiB3aGF0IGFib3V0IHVubGlua2luZz8gSWYgYSB0YXNrJ3MgY3VycmVudCBkaXJlY3RvcnkgaXMgdW5saW5rZWQsIGRvZXMgdGhlIENXRCBiZWNvbWUgTlVMTD8gTm8sIHRoYXQncyBub3QgcmlnaHQuIFRoZSBkZW50cnkgaXMganVzdCB1bmxpbmtlZCwgbm90IHplcm9lZCBvdXQuIFNvIHRoYXQgaXNuJ3QgaXQuXG5cbkFscmlnaHQsIHdoYXQgb3RoZXIgdHlwZSBvZiB0YXNrcyB3b3VsZG4ndCBoYXZlIGEgQ1dEPyBJIHN0YXJ0IHRoaW5raW5nLCBtYXliZSBhbiBhbm9ueW1vdXMgd29ya2VyIHRocmVhZD8gU2F5IGxpa2UgYW4gYGlvX3VyaW5nYCB0aHJlYWQuIFRoYXQncyBwbGF1c2libGU7IHRob3NlIG1pZ2h0IG5vdCBiZSBhc3NvY2lhdGVkIHdpdGggYSBmaWxlc3lzdGVtIHBhdGggYXQgYWxsLiBcblxuT2theSwgbmV3IHNlYXJjaCBjcml0ZXJpYS4gTGV0J3MgbG9vayBmb3IgY2FsbHMgdG8gYHNldF9mc19yb290YCBvciBgc2V0X2ZzX3B3ZGAgd2l0aCBhIE5VTEwgcGF0aCwgb3IgaW5zdGFuY2VzIHdoZXJlIGBmcy1cdTAwM2Vyb290YCBpcyBiZWluZyBleHBsaWNpdGx5IHplcm9lZCBvdXQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB3aGVyZSB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgYmVpbmcgdXRpbGl6ZWQuIEkgbmVlZCB0byB0cmFjZSB0aGUgY29kZSB0byBzZWUgdGhlIHVzZSBjYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDA2MiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwNzoxODozMy45NTU0MzIxNTdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxODcwODc1NDksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZzLVxcdTAwM2Vyb290ID0gLipudWxsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwNzoxODozOS4xNDI1MzQ5ODZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMwNjI4NTQ1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2Ugb3B0aW9ucywgY29uc2lkZXJpbmcgbXkgZXhwZXJ0LWxldmVsIHVuZGVyc3RhbmRpbmc6XG5cbioqVGhpbmtpbmcgVGhyb3VnaCBDb25jdXJyZW5jeSBmb3IgT3B0aW1hbCBQZXJmb3JtYW5jZSoqXG5cblJpZ2h0LCBzbyB3ZSBuZWVkIHRvIG5haWwgZG93biB0aGUgb3B0aW1hbCBjb25jdXJyZW5jeSBtZWNoYW5pc20gZm9yIHRoaXMgdGFzay4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIHRoZSBsaWtlbHkgcmVxdWlyZW1lbnRzIGZvciBoaWdoIHBlcmZvcm1hbmNlIGFuZCBwb3RlbnRpYWwgZm9yIEkvTyBvcGVyYXRpb25zLCBpcyB0byBpbW1lZGlhdGVseSBhc3Nlc3MgYGlvX3VyaW5nYC4gSXRzIGFzeW5jaHJvbm91cyBuYXR1cmUgYW5kIGFiaWxpdHkgdG8gYmF0Y2ggSS9PIG9wZXJhdGlvbnMgbWFrZSBpdCBhIHByaW1lIGNhbmRpZGF0ZSwgYnV0IEkgbmVlZCB0byBjb25zaWRlciB0aGUgY29tcGxleGl0eSBvdmVyaGVhZCBpbnZvbHZlZCBpbiBpbXBsZW1lbnRhdGlvbi4gQXJlIHdlIGF0IGEgcG9pbnQgd2hlcmUgdGhlIHBlcmZvcm1hbmNlIGdhaW4gb2YgYGlvX3VyaW5nYCBvdXR3ZWlnaHMgdGhlIGRldmVsb3BtZW50IHRpbWUgYW5kIHBvdGVudGlhbCBkZWJ1Z2dpbmcgY2hhbGxlbmdlcz8gVGhhdCdzIHRoZSBrZXkgcXVlc3Rpb24uXG5cbk5leHQgdXAsIEknbSB0aGlua2luZyBhYm91dCBga3RocmVhZGAuIEEga2VybmVsIHRocmVhZCBnaXZlcyB1cyBmaW5lLWdyYWluZWQgY29udHJvbCBhbmQgZGlyZWN0IGFjY2VzcyB0byBrZXJuZWwgcmVzb3VyY2VzLCB3aGljaCBjb3VsZCBiZSBiZW5lZmljaWFsLiBIb3dldmVyLCBJIG5lZWQgdG8gd2VpZ2ggdGhlIGNvbnRleHQgc3dpdGNoaW5nIG92ZXJoZWFkIGFuZCB3aGV0aGVyIGl0IG1pZ2h0IGJlIG92ZXJraWxsIGZvciB0aGlzIHBhcnRpY3VsYXIgcHJvYmxlbS4gSXMgdGhlIGxldmVsIG9mIGlzb2xhdGlvbiBhbmQgY29udHJvbCBhIHJlYWwgbmVjZXNzaXR5LCBvciBjb3VsZCBhIGxlc3MgaGVhdnl3ZWlnaHQgYXBwcm9hY2ggc3VmZmljZT8gVGhpcyByZXF1aXJlcyBtZSB0byB0aG9yb3VnaGx5IGFuYWx5emUgdGhlIGtlcm5lbCdzIGxvYWQgYW5kIHRoZSBzcGVjaWZpYyBkZW1hbmRzIG9mIG91ciBwcm9jZXNzZXMuXG5cbkZpbmFsbHksIEknbSBjb25zaWRlcmluZyBgd29ya3F1ZXVlYC4gVGhpcyBwcm92aWRlcyBhIG1vcmUgbWFuYWdlYWJsZSBhbmQgcGVyaGFwcyBtb3JlIHJvYnVzdCB3YXkgdG8gb2ZmbG9hZCB0YXNrcyB0byB0aGUga2VybmVsLiBJdCdzIGJ1aWx0IGZvciBhc3luY2hyb25vdXMgd29yaywgYW5kIG9mZmVycyBidWlsdC1pbiBzY2hlZHVsaW5nLCB3aGljaCBjb3VsZCBzdHJlYW1saW5lIHRoZSBkZXZlbG9wbWVudCBhbmQgbWFrZSB0aGUgd2hvbGUgc3lzdGVtIGVhc2llciB0byBtYWludGFpbi4gT2YgY291cnNlLCB0aGUgc2NoZWR1bGluZyBvdmVyaGVhZCBvZiB0aGUgd29ya3F1ZXVlIGNvdWxkIGJlIGRldHJpbWVudGFsLCBhbmQgdGhlIHBvdGVudGlhbCB0aHJvdWdocHV0IG1heSBiZSBtdWNoIGxvd2VyIHRoYW4gdGhlIG90aGVyIG9wdGlvbnMuXG5cblVsdGltYXRlbHksIEkgaGF2ZSB0byB0aG9yb3VnaGx5IGV2YWx1YXRlIGVhY2ggb25lJ3Mgc3RyZW5ndGhzIGFuZCB3ZWFrbmVzc2VzLCBjb25zaWRlcmluZyB0aGUgc3BlY2lmaWMgY29uc3RyYWludHMgb2YgdGhlIHByb2JsZW0sIHRoZSBhbnRpY2lwYXRlZCB3b3JrbG9hZCwgYW5kIG15IG93biB0ZWFtJ3MgZXhwZXJ0aXNlLiBJIGNhbid0IGp1c3QgcGljayBvbmUgYXQgcmFuZG9tOyB0aGUgY2hvaWNlIGhhcyB0byBiZSBiYXNlZCBvbiBhIHJlYXNvbmVkIGFuYWx5c2lzIG9mIHRoZSB0cmFkZS1vZmZzIGJldHdlZW4gcGVyZm9ybWFuY2UsIGNvbXBsZXhpdHksIGFuZCBtYWludGFpbmFiaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTUzLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDc6MTg6NDMuNDQ4ODIzOTFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3ODAzNjg3MzgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNldF9mc19yb290LipOVUxMXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwNzoxODo0OC4yMjkyMDQ2NzhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc2MjkwNjQwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC5cblxuKipBbmFseXppbmcgUG90ZW50aWFsIE51bGwgUG9pbnRlciBJc3N1ZXMgaW4gRmlsZSBTeXN0ZW0gUm9vdCBTZXR0aW5nKipcblxuSG1tLCBob2xkIG9uIGEgc2Vjb25kLiBJJ20gZm9jdXNpbmcgb24gYHBhdGhgIGhlcmUsIGFuZCBJJ20gcmVhbGl6aW5nIGl0J3MgZGVmaW5lZCBhcyBhIHN0cnVjdCwgbm90IGEgcG9pbnRlci4gVGhhdCBjaGFuZ2VzIHRoaW5ncyBhIGJpdC4gU28sIGlmIEknbSBhaW1pbmcgdG8gcGFzcyBhIG51bGwgdmFsdWUgdG8gYHNldF9mc19yb290YCB0byBlZmZlY3RpdmVseSByZXNldCBvciBjbGVhciB0aGUgcm9vdCwgSSB3b3VsZG4ndCB1c2UgYSBzdHJhaWdodCBudWxsIHBvaW50ZXIuIEluc3RlYWQsIEknZCBuZWVkIHRvIGNvbnN0cnVjdCBhbiBpbnN0YW5jZSBvZiB0aGUgYHBhdGhgIHN0cnVjdCBpdHNlbGYsIHdpdGggYSB2YWx1ZSB0aGF0IHJlcHJlc2VudHMgbnVsbCBvciBhIGNsZWFyIHBhdGguIFNvbWV0aGluZyBsaWtlIGBzZXRfZnNfcm9vdChmcywgXHUwMDI2bnVsbF9wYXRoKWAsIGFzc3VtaW5nIGBudWxsX3BhdGhgIGlzIHByb3Blcmx5IGRlZmluZWQgYXMgYSBgcGF0aGAgc3RydWN0IGluaXRpYWxpemVkIHdpdGggYXBwcm9wcmlhdGUgXCJudWxsXCIgdmFsdWVzLlxuXG5SaWdodCwgc28gdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIHJpc2tzIGFuZCBpbXBhY3QsIEkgbmVlZCB0byBzZWUgKndoZXJlKiBgc2V0X2ZzX3Jvb3RgIGlzIGJlaW5nIGNhbGxlZCBhbmQgd2l0aCB3aGF0IGFyZ3VtZW50cy4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBsb29rIGZvciBpbnN0YW5jZXMgb2YgYHNldF9mc19yb290YCB3aGVyZSBhIHZhcmlhYmxlIG9yIGV4cHJlc3Npb24gdGhhdCBjb3VsZCBldmFsdWF0ZSB0byBhIG51bGwgdmFsdWUgKG9yIGEgcmVwcmVzZW50YXRpb24gb2YgYSBjbGVhciBvciB1bnNldCBwYXRoKSBpcyBiZWluZyBwYXNzZWQuIEEgc2VhcmNoIG9mIHRoZSBjb2RlYmFzZSBmb3IgaW5zdGFuY2VzIHdoZXJlIHN1Y2ggYSBwYXR0ZXJuIG1pZ2h0IGJlIHByZXNlbnQgaXMgdGhlIG5leHQgbG9naWNhbCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDk4OSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA3OjE4OjUxLjk5MjExNTIwNVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE0NjEwMTkxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXRfZnNfcm9vdC4qXFx1MDAyNlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9pbml0LmM9NzY9aW50IF9faW5pdCBpbml0X2Nocm9vdChjb25zdCBjaGFyICpmaWxlbmFtZSlcXG4tLVxcbmZzL2luaXQuYy05Mi1cXHRcXHRnb3RvIGRwdXRfYW5kX291dDtcXG5mcy9pbml0LmM6OTM6XFx0c2V0X2ZzX3Jvb3QoY3VycmVudC1cXHUwMDNlZnMsIFxcdTAwMjZwYXRoKTtcXG5mcy9pbml0LmMtOTQtZHB1dF9hbmRfb3V0Olxcbi0tXFxuZnMvbmFtZXNwYWNlLmM9NjE4MD1zdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9tb3VudF90cmVlKHZvaWQpXFxuLS1cXG5mcy9uYW1lc3BhY2UuYy02MjM4LVxcdHNldF9mc19wd2QoY3VycmVudC1cXHUwMDNlZnMsIFxcdTAwMjZyb290KTtcXG5mcy9uYW1lc3BhY2UuYzo2MjM5OlxcdHNldF9mc19yb290KGN1cnJlbnQtXFx1MDAzZWZzLCBcXHUwMDI2cm9vdCk7XFxuZnMvbmFtZXNwYWNlLmMtNjI0MC1cXG4tLVxcbmZzL25hbWVzcGFjZS5jPTY0Nzk9c3RhdGljIGludCBtbnRuc19pbnN0YWxsKHN0cnVjdCBuc3NldCAqbnNzZXQsIHN0cnVjdCBuc19jb21tb24gKm5zKVxcbi0tXFxuZnMvbmFtZXNwYWNlLmMtNjUxNi1cXHRzZXRfZnNfcHdkKGZzLCBcXHUwMDI2cm9vdCk7XFxuZnMvbmFtZXNwYWNlLmM6NjUxNzpcXHRzZXRfZnNfcm9vdChmcywgXFx1MDAyNnJvb3QpO1xcbmZzL25hbWVzcGFjZS5jLTY1MTgtXFxuLS1cXG5mcy9vcGVuLmM9NTg4PVNZU0NBTExfREVGSU5FMShjaHJvb3QsIGNvbnN0IGNoYXIgX191c2VyICosIGZpbGVuYW1lKVxcbi0tXFxuZnMvb3Blbi5jLTYwNy1cXHRpZiAoIWVycm9yKVxcbmZzL29wZW4uYzo2MDg6XFx0XFx0c2V0X2ZzX3Jvb3QoY3VycmVudC1cXHUwMDNlZnMsIFxcdTAwMjZwYXRoKTtcXG5mcy9vcGVuLmMtNjA5LWRwdXRfYW5kX291dDpcXG4tLVxcbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYz0zOT1zdGF0aWMgdm9pZCBudWxsX2ZzX3RlYXJkb3duKHN0cnVjdCBudWxsX2ZzX2N0eCAqY3R4KVxcbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYy00MC17XFxuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jOjQxOlxcdHNldF9mc19yb290KGN1cnJlbnQtXFx1MDAzZWZzLCBcXHUwMDI2Y3R4LVxcdTAwM2VzYXZlZF9yb290KTtcXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmMtNDItXFx0c2V0X2ZzX3B3ZChjdXJyZW50LVxcdTAwM2VmcywgXFx1MDAyNmN0eC1cXHUwMDNlc2F2ZWRfcHdkKTtcXG4tLVxcbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYz03MT1zdGF0aWMgdm9pZCBudWxsX3Jvb3RfdGVzdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmMtNzUtXFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIG51bGxfZnNfc2V0dXAoXFx1MDAyNmN0eCksIDApO1xcbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYzo3NjpcXHRzZXRfZnNfcm9vdChjdXJyZW50LVxcdTAwM2VmcywgXFx1MDAyNm51bGxfcGF0aCk7XFxuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jLTc3LVxcbi0tXFxuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jPTExOD1zdGF0aWMgdm9pZCBudWxsX3Jvb3RfYW5kX2N3ZF90ZXN0KHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYy0xMjItXFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIG51bGxfZnNfc2V0dXAoXFx1MDAyNmN0eCksIDApO1xcbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYzoxMjM6XFx0c2V0X2ZzX3Jvb3QoY3VycmVudC1cXHUwMDNlZnMsIFxcdTAwMjZudWxsX3BhdGgpO1xcbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYy0xMjQtXFx0c2V0X2ZzX3B3ZChjdXJyZW50LVxcdTAwM2VmcywgXFx1MDAyNm51bGxfcGF0aCk7XFxuLS1cXG5rZXJuZWwvbnNwcm94eS5jPTUzNT1zdGF0aWMgdm9pZCBjb21taXRfbnNzZXQoc3RydWN0IG5zc2V0ICpuc3NldClcXG4tLVxcbmtlcm5lbC9uc3Byb3h5LmMtNTQ5LVxcdGlmICgoZmxhZ3MgXFx1MDAyNiBDTE9ORV9ORVdOUykgXFx1MDAyNlxcdTAwMjYgKGZsYWdzIFxcdTAwMjYgfkNMT05FX05FV05TKSkge1xcbmtlcm5lbC9uc3Byb3h5LmM6NTUwOlxcdFxcdHNldF9mc19yb290KG1lLVxcdTAwM2VmcywgXFx1MDAyNm5zc2V0LVxcdTAwM2Vmcy1cXHUwMDNlcm9vdCk7XFxua2VybmVsL25zcHJveHkuYy01NTEtXFx0XFx0c2V0X2ZzX3B3ZChtZS1cXHUwMDNlZnMsIFxcdTAwMjZuc3NldC1cXHUwMDNlZnMtXFx1MDAzZXB3ZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA3OjE4OjU3LjEzODIyNTY0N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTI2NTY4MzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydDpcblxuKipOYXZpZ2F0aW5nIHRoZSBGaWxlIFN5c3RlbSAtIEEgUXVpY2sgQ2hlY2sqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgZmlsZSBzeXN0ZW0gdHJhdmVyc2FsIHJpZ2h0IG5vdy4gU29tZXRoaW5nIGp1c3QgcGluZ2VkIGluIG15IG1pbmQ6IGBmcy1cdTAwM2Vwd2RgLiBJcyB0aGF0IGEgdmlhYmxlIG9wdGlvbiBmb3IgZ2V0dGluZyB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeT8gSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIGlmIHRoYXQgcG9pbnRlciwgaWYgaXQgZXhpc3RzLCBpcyBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQgYW5kIHdoYXQgaXQgcG9pbnRzIHRvLiBJcyBpdCByZWxpYWJsZSwgb3IgaXMgdGhlcmUgYSBjaGFuY2UgaXQgY291bGQgYmUgc3RhbGUgb3IgZXZlbiBjYXVzZSBhIGNyYXNoIGlmIGl0J3MgcG9pbnRpbmcgdG8gc29tZXRoaW5nIGludmFsaWQ/IEknbSB0aGlua2luZyBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoYXQgc3RydWN0dXJlIHRvIHNlZSBpZiBpdCBtYWtlcyBzZW5zZSB0byB1c2UgYGZzLVx1MDAzZXB3ZGAuIEknbSBtZW50YWxseSBjaGVja2luZyB3aGF0IG90aGVyIG1ldGhvZHMgbWlnaHQgZXhpc3QsIG9yIGlmIHRoaXMgaXMgdGhlIGZhc3Rlc3Qgd2F5IHRvIGdldCB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyNjMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA3OjE5OjAwLjA2NDgyNzQ0NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAwODQ4ODg1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXRfZnNfcHdkLipcXHUwMDI2XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2luaXQuYz02MT1pbnQgX19pbml0IGluaXRfY2hkaXIoY29uc3QgY2hhciAqZmlsZW5hbWUpXFxuLS1cXG5mcy9pbml0LmMtNzAtXFx0aWYgKCFlcnJvcilcXG5mcy9pbml0LmM6NzE6XFx0XFx0c2V0X2ZzX3B3ZChjdXJyZW50LVxcdTAwM2VmcywgXFx1MDAyNnBhdGgpO1xcbmZzL2luaXQuYy03Mi1cXHRwYXRoX3B1dChcXHUwMDI2cGF0aCk7XFxuLS1cXG5mcy9uYW1lc3BhY2UuYz02MTgwPXN0YXRpYyB2b2lkIF9faW5pdCBpbml0X21vdW50X3RyZWUodm9pZClcXG4tLVxcbmZzL25hbWVzcGFjZS5jLTYyMzctXFx0cm9vdC5kZW50cnlcXHQ9IG1udC1cXHUwMDNlbW50X3Jvb3Q7XFxuZnMvbmFtZXNwYWNlLmM6NjIzODpcXHRzZXRfZnNfcHdkKGN1cnJlbnQtXFx1MDAzZWZzLCBcXHUwMDI2cm9vdCk7XFxuZnMvbmFtZXNwYWNlLmMtNjIzOS1cXHRzZXRfZnNfcm9vdChjdXJyZW50LVxcdTAwM2VmcywgXFx1MDAyNnJvb3QpO1xcbi0tXFxuZnMvbmFtZXNwYWNlLmM9NjQ3OT1zdGF0aWMgaW50IG1udG5zX2luc3RhbGwoc3RydWN0IG5zc2V0ICpuc3NldCwgc3RydWN0IG5zX2NvbW1vbiAqbnMpXFxuLS1cXG5mcy9uYW1lc3BhY2UuYy02NTE1LVxcdC8qIFVwZGF0ZSB0aGUgcHdkIGFuZCByb290ICovXFxuZnMvbmFtZXNwYWNlLmM6NjUxNjpcXHRzZXRfZnNfcHdkKGZzLCBcXHUwMDI2cm9vdCk7XFxuZnMvbmFtZXNwYWNlLmMtNjUxNy1cXHRzZXRfZnNfcm9vdChmcywgXFx1MDAyNnJvb3QpO1xcbi0tXFxuZnMvb3Blbi5jPTU1MD1TWVNDQUxMX0RFRklORTEoY2hkaXIsIGNvbnN0IGNoYXIgX191c2VyICosIGZpbGVuYW1lKVxcbi0tXFxuZnMvb3Blbi5jLTU2MC1cXHRcXHRpZiAoIWVycm9yKVxcbmZzL29wZW4uYzo1NjE6XFx0XFx0XFx0c2V0X2ZzX3B3ZChjdXJyZW50LVxcdTAwM2VmcywgXFx1MDAyNnBhdGgpO1xcbmZzL29wZW4uYy01NjItXFx0XFx0cGF0aF9wdXQoXFx1MDAyNnBhdGgpO1xcbi0tXFxuZnMvb3Blbi5jPTU3MT1TWVNDQUxMX0RFRklORTEoZmNoZGlyLCB1bnNpZ25lZCBpbnQsIGZkKVxcbi0tXFxuZnMvb3Blbi5jLTU4My1cXHRpZiAoIWVycm9yKVxcbmZzL29wZW4uYzo1ODQ6XFx0XFx0c2V0X2ZzX3B3ZChjdXJyZW50LVxcdTAwM2VmcywgXFx1MDAyNmZkX2ZpbGUoZiktXFx1MDAzZWZfcGF0aCk7XFxuZnMvb3Blbi5jLTU4NS1cXHRyZXR1cm4gZXJyb3I7XFxuLS1cXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmM9Mzk9c3RhdGljIHZvaWQgbnVsbF9mc190ZWFyZG93bihzdHJ1Y3QgbnVsbF9mc19jdHggKmN0eClcXG4tLVxcbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYy00MS1cXHRzZXRfZnNfcm9vdChjdXJyZW50LVxcdTAwM2VmcywgXFx1MDAyNmN0eC1cXHUwMDNlc2F2ZWRfcm9vdCk7XFxuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jOjQyOlxcdHNldF9mc19wd2QoY3VycmVudC1cXHUwMDNlZnMsIFxcdTAwMjZjdHgtXFx1MDAzZXNhdmVkX3B3ZCk7XFxuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jLTQzLVxcdHBhdGhfcHV0KFxcdTAwMjZjdHgtXFx1MDAzZXNhdmVkX3Jvb3QpO1xcbi0tXFxuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jPTk3PXN0YXRpYyB2b2lkIG51bGxfY3dkX3Rlc3Qoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jLTEwMS1cXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgbnVsbF9mc19zZXR1cChcXHUwMDI2Y3R4KSwgMCk7XFxuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jOjEwMjpcXHRzZXRfZnNfcHdkKGN1cnJlbnQtXFx1MDAzZWZzLCBcXHUwMDI2bnVsbF9wYXRoKTtcXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmMtMTAzLVxcbi0tXFxuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jPTExOD1zdGF0aWMgdm9pZCBudWxsX3Jvb3RfYW5kX2N3ZF90ZXN0KHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYy0xMjMtXFx0c2V0X2ZzX3Jvb3QoY3VycmVudC1cXHUwMDNlZnMsIFxcdTAwMjZudWxsX3BhdGgpO1xcbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYzoxMjQ6XFx0c2V0X2ZzX3B3ZChjdXJyZW50LVxcdTAwM2VmcywgXFx1MDAyNm51bGxfcGF0aCk7XFxuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jLTEyNS1cXG4tLVxcbmtlcm5lbC9uc3Byb3h5LmM9NTM1PXN0YXRpYyB2b2lkIGNvbW1pdF9uc3NldChzdHJ1Y3QgbnNzZXQgKm5zc2V0KVxcbi0tXFxua2VybmVsL25zcHJveHkuYy01NTAtXFx0XFx0c2V0X2ZzX3Jvb3QobWUtXFx1MDAzZWZzLCBcXHUwMDI2bnNzZXQtXFx1MDAzZWZzLVxcdTAwM2Vyb290KTtcXG5rZXJuZWwvbnNwcm94eS5jOjU1MTpcXHRcXHRzZXRfZnNfcHdkKG1lLVxcdTAwM2VmcywgXFx1MDAyNm5zc2V0LVxcdTAwM2Vmcy1cXHUwMDNlcHdkKTtcXG5rZXJuZWwvbnNwcm94eS5jLTU1Mi1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA3OjE5OjA1LjA3MzMyNTQzMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzcwMjcwNTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLlxuXG4qKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgRmlsZSBTeXN0ZW0gU3RydWN0dXJlcyoqXG5cbkhtbSwgSSdtIGRpZ2dpbmcgaW50byB0aGlzIGtlcm5lbCBjb2RlIGFuZCBzb21ldGhpbmcncyBub3QgcXVpdGUgcmlnaHQuIEkgZG9uJ3Qgc2VlIGFueSBzdGFuZGFyZCBpbml0aWFsaXphdGlvbnMgZm9yIGBmcy1cdTAwM2Vyb290YCBvciBgZnMtXHUwMDNlcHdkYCB0byBhIG51bGwgcGF0aCBvdXRzaWRlIG9mIHRoYXQgS1VuaXQgdGVzdC4gVGhhdCdzIGEgcmVkIGZsYWcuIENvdWxkIGl0IGJlIHRoYXQgdGhlIGBmc19zdHJ1Y3RgIGlzIGJlaW5nIGFsbG9jYXRlZCBidXQgaXNuJ3QgYmVpbmcgZXhwbGljaXRseSB6ZXJvZWQgb3V0PyBNeSBpbml0aWFsIHRob3VnaHQgaXMgaXQgY291bGQgYmUgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgLCBpbiB3aGljaCBjYXNlIHRob3NlIHBvaW50ZXJzICpzaG91bGQqIGJlIE5VTEwsIGJ1dCB0aGF0IGFzc3VtcHRpb24gbmVlZHMgdG8gYmUgdmVyaWZpZWQuIExldCdzIGRvdWJsZS1jaGVjayB0aGUgYGNvcHlfZnNfc3RydWN0YCBhbmQgYGFsbG9jX2ZzX3N0cnVjdGAgZnVuY3Rpb25zLiBJIG5lZWQgdG8gY29uZmlybSBob3cgdGhlc2Ugc3RydWN0dXJlcyBhcmUgYmVpbmcgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCB0byB1bmRlcnN0YW5kIHdoeSBJJ20gc2VlaW5nIHRoaXMgYmVoYXZpb3IuIEl0IHNlZW1zIGxpa2UgaXQncyB1bmxpa2VseSB0aGF0IHVuaW5pdGlhbGl6ZWQgcG9pbnRlcnMgd291bGQgYmUgdXNlZCwgYnV0IGl0J3Mgd29ydGggY2hlY2tpbmcgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgaXQncyBhbGxvY2F0ZWQgd2l0aCBga21hbGxvY2Agb3IgYGt6YWxsb2NgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ3NSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA3OjE5OjA5LjQ0MzYwMDkzOVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzIwMzMyNTE2MSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2NfZnNfc3RydWN0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwNzoxOToxMi42NDY5NDQ5MzlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5NDgzOTMwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYGZzX2NhY2hlcGAgQWxsb2NhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIHplcm8gaW4gb24gaG93IHdlJ3JlIGFsbG9jYXRpbmcgbWVtb3J5IGZyb20gdGhlIGBmc19jYWNoZXBgIGNhY2hlLiBNeSBpbml0aWFsIGZvY3VzIGlzIHRoZSBga21lbV9jYWNoZV9hbGxvY2AgZnVuY3Rpb24gY2FsbHMgcmVsYXRlZCB0byBpdC4gVGhhdCdzIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9jayBJIG5lZWQgdG8gdW5kZXJzdGFuZCBmb3IgdGhpcyBwYXJ0aWN1bGFyIGFyZWEgb2YgZmlsZXN5c3RlbSBtZW1vcnkgbWFuYWdlbWVudC4gSSB3YW50IHRvIHNlZSBleGFjdGx5IGhvdyBhbmQgd2hlbiBgZnNfY2FjaGVwYCBvYmplY3RzIGFyZSBiZWluZyBjcmVhdGVkLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byBhbmFseXplIHRoZWlyIHVzYWdlIHBhdHRlcm5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzgwNSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA3OjE5OjE2LjA0MTc4Njk0MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgxMzM0OTUwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrbWVtX2NhY2hlX2FsbG9jLipmc19jYWNoZXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZnNfc3RydWN0LmM9MTA3PXN0cnVjdCBmc19zdHJ1Y3QgKmNvcHlfZnNfc3RydWN0KHN0cnVjdCBmc19zdHJ1Y3QgKm9sZClcXG5mcy9mc19zdHJ1Y3QuYy0xMDgte1xcbmZzL2ZzX3N0cnVjdC5jOjEwOTpcXHRzdHJ1Y3QgZnNfc3RydWN0ICpmcyA9IGttZW1fY2FjaGVfYWxsb2MoZnNfY2FjaGVwLCBHRlBfS0VSTkVMKTtcXG5mcy9mc19zdHJ1Y3QuYy0xMTAtXFx0LyogV2UgZG9uJ3QgbmVlZCB0byBsb2NrIGZzIC0gdGhpbmsgd2h5IDstKSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwNzoxOToyMC44NTUxNDgwMTZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTgwMDYwNDM4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLiBNeSBtaW5kJ3Mgd29ya2luZyB0aHJvdWdoIHRoaXMuLi5cblxuKipEaWdnaW5nIGludG8gRmlsZXN5c3RlbSBTdHJ1Y3R1cmUgSW5pdGlhbGl6YXRpb24qKlxuXG5XYWl0IGEgc2Vjb25kLCBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyBhYm91dCB0aGlzIGBmc19zdHJ1Y3RgLiBJJ20gd29uZGVyaW5nIGlmIGEgc2l0dWF0aW9uIGFyaXNlcyB3aGVyZSBpdCdzIGFsbG9jYXRlZCwgYnV0IGl0cyBmaWxlIHBhdGhzIGhhdmVuJ3QgYmVlbiBwcm9wZXJseSBpbml0aWFsaXplZCwgcGVyaGFwcyB3aXRoIG51bGwgdmFsdWVzLiBJdCdzIGEgY3JpdGljYWwgcG9pbnQgdG8gY29uc2lkZXIgYXMgaXQgY291bGQgbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW9yIGxhdGVyIG9uLiBTbywgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSwgSSBuZWVkIHRvIGNoZWNrIGhvdyBgZnNfc3RydWN0YCBpcyBoYW5kbGVkIGR1cmluZyBpbml0aWFsaXphdGlvbi5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGhlYWQgb3ZlciB0byBgZnMvZnNfc3RydWN0LmNgLiBJIG5lZWQgdG8gemVybyBpbiBvbiBgZnNfY2FjaGVwYCBpbiB0aGF0IGZpbGUsIGFzIHRoYXQncyBwcm9iYWJseSB3aGVyZSB0aGUga2V5IHRvIHRoaXMgcXVlc3Rpb24gbGllcy4gSSdtIGhvcGluZyB0byBzZWUgaG93IHRoZSBwYXRocyBhcmUgc2V0IHVwLiBJZiB0aGVyZSdzIGFuIG9taXNzaW9uIHNvbWV3aGVyZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXQgZnVsbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDg5LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDc6MTk6MjYuNjU1NzU1NjU2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzYyNDQ1MTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZzX2NhY2hlcFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9mc19zdHJ1Y3QuYz04Mz12b2lkIGZyZWVfZnNfc3RydWN0KHN0cnVjdCBmc19zdHJ1Y3QgKmZzKVxcbi0tXFxuZnMvZnNfc3RydWN0LmMtODYtXFx0cGF0aF9wdXQoXFx1MDAyNmZzLVxcdTAwM2Vwd2QpO1xcbmZzL2ZzX3N0cnVjdC5jOjg3OlxcdGttZW1fY2FjaGVfZnJlZShmc19jYWNoZXAsIGZzKTtcXG5mcy9mc19zdHJ1Y3QuYy04OC19XFxuLS1cXG5mcy9mc19zdHJ1Y3QuYz0xMDc9c3RydWN0IGZzX3N0cnVjdCAqY29weV9mc19zdHJ1Y3Qoc3RydWN0IGZzX3N0cnVjdCAqb2xkKVxcbmZzL2ZzX3N0cnVjdC5jLTEwOC17XFxuZnMvZnNfc3RydWN0LmM6MTA5OlxcdHN0cnVjdCBmc19zdHJ1Y3QgKmZzID0ga21lbV9jYWNoZV9hbGxvYyhmc19jYWNoZXAsIEdGUF9LRVJORUwpO1xcbmZzL2ZzX3N0cnVjdC5jLTExMC1cXHQvKiBXZSBkb24ndCBuZWVkIHRvIGxvY2sgZnMgLSB0aGluayB3aHkgOy0pICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZzX3N0cnVjdC5oPTEwPXN0cnVjdCBmc19zdHJ1Y3Qge1xcbi0tXFxuaW5jbHVkZS9saW51eC9mc19zdHJ1Y3QuaC00NC1cXG5pbmNsdWRlL2xpbnV4L2ZzX3N0cnVjdC5oOjQ1OmV4dGVybiBzdHJ1Y3Qga21lbV9jYWNoZSAqZnNfY2FjaGVwO1xcbmluY2x1ZGUvbGludXgvZnNfc3RydWN0LmgtNDYtXFxuLS1cXG5rZXJuZWwvZm9yay5jPTQ3Nz1zdHJ1Y3Qga21lbV9jYWNoZSAqZmlsZXNfY2FjaGVwO1xcbi0tXFxua2VybmVsL2ZvcmsuYy00NzktLyogU0xBQiBjYWNoZSBmb3IgZnNfc3RydWN0IHN0cnVjdHVyZXMgKHRzay1cXHUwMDNlZnMpICovXFxua2VybmVsL2ZvcmsuYzo0ODA6c3RydWN0IGttZW1fY2FjaGUgKmZzX2NhY2hlcDtcXG5rZXJuZWwvZm9yay5jLTQ4MS1cXG4tLVxcbmtlcm5lbC9mb3JrLmM9MzExNT12b2lkIF9faW5pdCBwcm9jX2NhY2hlc19pbml0KHZvaWQpXFxuLS1cXG5rZXJuZWwvZm9yay5jLTMxMjktXFx0XFx0XFx0TlVMTCk7XFxua2VybmVsL2ZvcmsuYzozMTMwOlxcdGZzX2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKFxcXCJmc19jYWNoZVxcXCIsXFxua2VybmVsL2ZvcmsuYy0zMTMxLVxcdFxcdFxcdHNpemVvZihzdHJ1Y3QgZnNfc3RydWN0KSwgMCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDc6MTk6MzAuMDE4MjA4OTMxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MTU1MDQyNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ29uc2lkZXJpbmcgQWx0ZXJuYXRpdmUgYGZzX3N0cnVjdGAgQ3JlYXRpb24gTWV0aG9kcyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgZnNfc3RydWN0YCBidXNpbmVzcywgYW5kIEknbSB3b25kZXJpbmcgaWYgdGhlcmUgYXJlIGFueSBsZXNzLi4uIGNvbnZlbnRpb25hbCB3YXlzIHRvIGNvbmp1cmUgb25lIHVwIGJleW9uZCB0aGUgdXN1YWwgc3VzcGVjdHMuIEknbSBoaXR0aW5nIGEgd2FsbCB3aXRoIHRoZSBjdXJyZW50IGFwcHJvYWNoLCBhbmQgSSdtIGFsd2F5cyB0aGlua2luZyBhYm91dCB0aGUgYmlnZ2VyIHBpY3R1cmUuXG5cbk15IG1haW4gcXVlc3Rpb24gaXM6IGJlc2lkZXMgdGhlIG9idmlvdXMgbWVjaGFuaXNtcywgYXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgb3IgdGVjaG5pcXVlcyB0aGF0IGNvdWxkIGFjaGlldmUgdGhpcz8gUGVyaGFwcyBzb21ldGhpbmcgSSdtIG92ZXJsb29raW5nLCBzb21lIGVkZ2UgY2FzZSBvciBuaWNoZSBmdW5jdGlvbmFsaXR5PyBJJ20gc3BlY2lmaWNhbGx5IGN1cmlvdXMgYWJvdXQgbWV0aG9kcywgZnVuY3Rpb25zLCBvciB0ZWNobmlxdWVzIG91dHNpZGUgdGhlIHN0YW5kYXJkIHBhdGguXG5cbkknbSByYWNraW5nIG15IGJyYWluLCBhbmQgdGhlIGZ1bmN0aW9uIGB1bnNoYXJlX2ZzX3N0cnVjdCgpYCBwb3BzIGludG8gbXkgaGVhZC4gQ291bGQgdGhhdCBiZSBhIHZpYWJsZSwgdGhvdWdoIHBvdGVudGlhbGx5IGluZGlyZWN0LCBhdmVudWU/IEknbGwgbmVlZCB0byByZXZpZXcgdGhlIGRldGFpbHMgYW5kIGNvbmZpcm0gaWYgaXTigJlzIGFwcGxpY2FibGUgaGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGxpbWl0YXRpb25zLCBzaWRlIGVmZmVjdHMsIGFuZCBpZiBpdCdzIGV2ZW4gYXBwcm9wcmlhdGUgZm9yIHRoZSBjb250ZXh0IEknbSB3b3JraW5nIGluLiBVbHRpbWF0ZWx5LCBJJ20gdHJ5aW5nIHRvIGlkZW50aWZ5IHBvdGVudGlhbCBhbHRlcm5hdGl2ZXMgb3IgYXVnbWVudCBteSB0b29sa2l0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDgwMiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA3OjE5OjM0LjczMzcxNjA1NloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYwOTk5NzcyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1bnNoYXJlX2ZzX3N0cnVjdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9mc19zdHJ1Y3QuYz0xMDc9c3RydWN0IGZzX3N0cnVjdCAqY29weV9mc19zdHJ1Y3Qoc3RydWN0IGZzX3N0cnVjdCAqb2xkKVxcbi0tXFxuZnMvZnNfc3RydWN0LmMtMTI2LVxcbmZzL2ZzX3N0cnVjdC5jOjEyNzppbnQgdW5zaGFyZV9mc19zdHJ1Y3Qodm9pZClcXG5mcy9mc19zdHJ1Y3QuYy0xMjgte1xcbi0tXFxuZnMvZnNfc3RydWN0LmMtMTQ3LX1cXG5mcy9mc19zdHJ1Y3QuYzoxNDg6RVhQT1JUX1NZTUJPTF9HUEwodW5zaGFyZV9mc19zdHJ1Y3QpO1xcbmZzL2ZzX3N0cnVjdC5jLTE0OS1cXG4tLVxcbmZzL25mc2QvbmZzc3ZjLmM9ODgzPW5mc2Qodm9pZCAqdnJxc3RwKVxcbi0tXFxuZnMvbmZzZC9uZnNzdmMuYy04OTYtXFx0ICovXFxuZnMvbmZzZC9uZnNzdmMuYzo4OTc6XFx0c3ZjX3RocmVhZF9pbml0X3N0YXR1cyhycXN0cCwgdW5zaGFyZV9mc19zdHJ1Y3QoKSk7XFxuZnMvbmZzZC9uZnNzdmMuYy04OTgtXFxuLS1cXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmM9MjQ9c3RhdGljIGludCBudWxsX2ZzX3NldHVwKHN0cnVjdCBudWxsX2ZzX2N0eCAqY3R4KVxcbi0tXFxuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jLTI3LVxcbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYzoyODpcXHRlcnIgPSB1bnNoYXJlX2ZzX3N0cnVjdCgpO1xcbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYy0yOS1cXHRpZiAoZXJyKVxcbi0tXFxuaW5jbHVkZS9saW51eC9mc19zdHJ1Y3QuaD01MT1leHRlcm4gdm9pZCBmcmVlX2ZzX3N0cnVjdChzdHJ1Y3QgZnNfc3RydWN0ICopO1xcbmluY2x1ZGUvbGludXgvZnNfc3RydWN0Lmg6NTI6ZXh0ZXJuIGludCB1bnNoYXJlX2ZzX3N0cnVjdCh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L2ZzX3N0cnVjdC5oLTUzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwNzoxOTozOS4zNDM3MjIyNFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODc2NTQ4MzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgSW1wbGljYXRpb25zIG9mIGEgTmV3IEZpbGVzeXN0ZW0gUGF0Y2gqKlxuXG5BbHJpZ2h0LCBhIG5ldyBwYXRjaCBpcyBjb21pbmcgYWNyb3NzIG15IGRlc2ssIGFuZCB0aGUgZGVzY3JpcHRpb24gbWVudGlvbnMgc3VwcG9ydCBmb3IgdGFza3Mgd2l0aCBhIGBudWxsYCByb290IG9yIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgKGBjd2RgKS4gSW1tZWRpYXRlbHksIG15IG1pbmQganVtcHMgdG8gdGhlIHBvdGVudGlhbCBhcmNoaXRlY3R1cmFsIGltcGFjdHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZnVsbHkuXG5cbk15IGZpcnN0IHRob3VnaHQgaXMgdG8gZGlnIGEgbGl0dGxlIGRlZXBlciwgc2VlIGlmIHRoaXMgaXMgYW4gaXNvbGF0ZWQgY2hhbmdlIG9yIHBhcnQgb2YgYSBsYXJnZXIgdHJlbmQuIEFyZSB0aGVyZSBhbnkgb3RoZXIgcmVjZW50IHBhdGNoZXMsIHBhcnRpY3VsYXJseSBpbiBhIHBvdGVudGlhbGx5IHJlbGF0ZWQgc3Vic3lzdGVtLCB0aGF0IGFyZSBhbHNvIGRlYWxpbmcgd2l0aCB0aGlzIGNvbmNlcHQgb2YgYSBgbnVsbGAgcm9vdCBvciBgY3dkYD8gU3BlY2lmaWNhbGx5LCB0aGUgYGlvX3VyaW5nYCBzdWJzeXN0ZW0gc3ByaW5ncyB0byBtaW5kIGFzIGEgbGlrZWx5IGNhbmRpZGF0ZSBnaXZlbiBpdHMgZmlsZXN5c3RlbSBpbnRlcmFjdGlvbi5cblxuVG8gaW52ZXN0aWdhdGUsIEknbGwgbmVlZCB0byBkbyBzb21lIGNvZGUgYXJjaGFlb2xvZ3kuIEknbGwgc2VhcmNoIHRoZSBgaW9fdXJpbmdgIGNvZGUgZm9yIGluc3RhbmNlcyBvZiByZWxhdGVkIGZpbGVzeXN0ZW0gbWFuaXB1bGF0aW9uczogc3BlY2lmaWNhbGx5LCBhbnkgdXNlcyBvZiBgc2V0X2ZzX3Jvb3RgLCBgc2V0X2ZzX3B3ZGAsIGFuZCBhY2Nlc3MgdG8gZmlsZXN5c3RlbSBkYXRhIHN1Y2ggYXMgYGZzLVx1MDAzZXJvb3RgIG9yIGBmcy1cdTAwM2Vwd2RgLiBUaGlzIHNob3VsZCBoZWxwIG1lIGFzc2VzcyBob3cgdGhpcyBjaGFuZ2UgcG90ZW50aWFsbHkgaW50ZWdyYXRlcyB3aXRoIG9yIG1vZGlmaWVzIGV4aXN0aW5nIGBpb191cmluZ2AgZmlsZXN5c3RlbSBpbnRlcmFjdGlvbnMuIEZyb20gdGhlcmUgSSBjYW4gZGV0ZXJtaW5lIGhvdyB0aGUgYG51bGxgIHJvb3Qgb3IgY3dkIHdpbGwgYWZmZWN0IHRoZSBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTUxOCwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA3OjE5OjQzLjIyMDI3MzgwNloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzMzMDg3MTU2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmcy1cXHUwMDNlcm9vdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BhdGgtbG9va3VwLnR4dD00OT10aGUgcGF0aCBnaXZlbiBieSB0aGUgbmFtZSdzIHN0YXJ0aW5nIHBvaW50ICh3aGljaCB3ZSBrbm93IGluIGFkdmFuY2UgLS0gZWcuXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wYXRoLWxvb2t1cC50eHQ6NTA6Y3VycmVudC1cXHUwMDNlZnMtXFx1MDAzZWN3ZCBvciBjdXJyZW50LVxcdTAwM2Vmcy1cXHUwMDNlcm9vdCkgYXMgdGhlIGZpcnN0IHBhcmVudCBvZiB0aGUgbG9va3VwLiBUaGVuXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wYXRoLWxvb2t1cC50eHQtNTEtaXRlcmF0aXZlbHkgZm9yIGVhY2ggc3Vic2VxdWVudCBuYW1lIGVsZW1lbnQsIGxvb2sgdXAgdGhlIGNoaWxkIG9mIHRoZSBjdXJyZW50XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BhdGgtbG9va3VwLnR4dD0yNDA9U28gd2hlbiB2aSB3YW50cyB0byBvcGVuKFxcXCIvaG9tZS9ucGlnZ2luL3Rlc3QuY1xcXCIsIE9fUkRXUiksIHRoZW4gaXQgd2lsbFxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcGF0aC1sb29rdXAudHh0OjI0MTpzdGFydCBmcm9tIGN1cnJlbnQtXFx1MDAzZWZzLVxcdTAwM2Vyb290LCB3aGljaCBpcyBhIHBpbm5lZCBkZW50cnkuIEFsdGVybmF0aXZlbHksXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wYXRoLWxvb2t1cC50eHQtMjQyLVxcXCIuL3Rlc3QuY1xcXCIgd291bGQgc3RhcnQgZnJvbSBjd2Q7IGJvdGggbmFtZXMgcmVmZXIgdG8gdGhlIHNhbWUgcGF0aCBpblxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hucy9obnNfcm9jZV9kZWJ1Z2ZzLmM9ODU9c3RhdGljIHZvaWQgY3JlYXRlX3N3X3N0YXRfZGVidWdmcyhzdHJ1Y3QgaG5zX3JvY2VfZGV2ICpocl9kZXYsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL2huc19yb2NlX2RlYnVnZnMuYy05Mi1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL2huc19yb2NlX2RlYnVnZnMuYzo5MzpcXHRkYmdmcy1cXHUwMDNlcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcihcXFwic3dfc3RhdFxcXCIsIHBhcmVudCk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hucy9obnNfcm9jZV9kZWJ1Z2ZzLmM6OTQ6XFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwic3dfc3RhdFxcXCIsIDA0MDAsIGRiZ2ZzLVxcdTAwM2Vyb290LCBcXHUwMDI2ZGJnZnMtXFx1MDAzZXN3X3N0YXQsXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hucy9obnNfcm9jZV9kZWJ1Z2ZzLmMtOTUtXFx0XFx0XFx0ICAgIFxcdTAwMjZobnNfZGVidWdmc19zZXFmaWxlX2ZvcHMpO1xcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hucy9obnNfcm9jZV9kZWJ1Z2ZzLmM9MzAxPXN0YXRpYyB2b2lkIGNyZWF0ZV9jY19wYXJhbV9kZWJ1Z2ZzKHN0cnVjdCBobnNfcm9jZV9kZXYgKmhyX2RldixcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvaG5zX3JvY2VfZGVidWdmcy5jLTMyNC1cXHRcXHRkYmdmcyA9IFxcdTAwMjZocl9kZXYtXFx1MDAzZWRiZ2ZzLmNjX3BhcmFtX3Jvb3RbaV07XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hucy9obnNfcm9jZV9kZWJ1Z2ZzLmM6MzI1OlxcdFxcdGRiZ2ZzLVxcdTAwM2Vyb290ID0gZGVidWdmc19jcmVhdGVfZGlyKGNvbmdfYXR0ci1cXHUwMDNlbmFtZSwgcGFyZW50KTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL2huc19yb2NlX2RlYnVnZnMuYy0zMjYtXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIEhOU19ST0NFX0NDX1BBUkFNX01BWF9OVU07IGorKykge1xcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hucy9obnNfcm9jZV9kZWJ1Z2ZzLmMtMzM0LVxcdFxcdFxcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoY29uZ19hdHRyLVxcdTAwM2VwYXJhbXNbal0ubmFtZSwgMDYwMCxcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL2huc19yb2NlX2RlYnVnZnMuYzozMzU6XFx0XFx0XFx0XFx0XFx0ICAgIGRiZ2ZzLVxcdTAwM2Vyb290LFxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvaG5zX3JvY2VfZGVidWdmcy5jLTMzNi1cXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmRiZ2ZzLVxcdTAwM2VwYXJhbXNbal0uc2VxZmlsZSxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvaG5zX3JvY2VfZGVidWdmcy5jPTM0Mz12b2lkIGhuc19yb2NlX3JlZ2lzdGVyX2RlYnVnZnMoc3RydWN0IGhuc19yb2NlX2RldiAqaHJfZGV2KVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hucy9obnNfcm9jZV9kZWJ1Z2ZzLmMtMzQ2LVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvaG5zX3JvY2VfZGVidWdmcy5jOjM0NzpcXHRkYmdmcy1cXHUwMDNlcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcihwY2lfbmFtZShocl9kZXYtXFx1MDAzZXBjaV9kZXYpLFxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvaG5zX3JvY2VfZGVidWdmcy5jLTM0OC1cXHRcXHRcXHRcXHRcXHQgaG5zX3JvY2VfZGJnZnNfcm9vdCk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hucy9obnNfcm9jZV9kZWJ1Z2ZzLmMtMzQ5LVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvaG5zX3JvY2VfZGVidWdmcy5jOjM1MDpcXHRjcmVhdGVfc3dfc3RhdF9kZWJ1Z2ZzKGhyX2RldiwgZGJnZnMtXFx1MDAzZXJvb3QpO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvaG5zX3JvY2VfZGVidWdmcy5jOjM1MTpcXHRjcmVhdGVfY2NfcGFyYW1fZGVidWdmcyhocl9kZXYsIGRiZ2ZzLVxcdTAwM2Vyb290KTtcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL2huc19yb2NlX2RlYnVnZnMuYy0zNTItfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX2N0LmM9MjE5NT1tbHg1X2N0X3RjX2NyZWF0ZV9kYmdmcyhzdHJ1Y3QgbWx4NV90Y19jdF9wcml2ICpjdF9wcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX2N0LmMtMjE5OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfY3QuYzoyMTk5OlxcdGN0X2RiZ2ZzLVxcdTAwM2Vyb290ID0gZGVidWdmc19jcmVhdGVfZGlyKFxcXCJjdFxcXCIsIG1seDVfZGVidWdmc19nZXRfZGV2X3Jvb3QoY3RfcHJpdi1cXHUwMDNlZGV2KSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX2N0LmM6MjIwMDpcXHRkZWJ1Z2ZzX2NyZWF0ZV9hdG9taWNfdChcXFwib2ZmbG9hZGVkXFxcIiwgMDQwMCwgY3RfZGJnZnMtXFx1MDAzZXJvb3QsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX2N0LmMtMjIwMS1cXHRcXHRcXHRcXHRcXHUwMDI2Y3RfZGJnZnMtXFx1MDAzZXN0YXRzLm9mZmxvYWRlZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX2N0LmM6MjIwMjpcXHRkZWJ1Z2ZzX2NyZWF0ZV9hdG9taWNfdChcXFwicnhfZHJvcHBlZFxcXCIsIDA0MDAsIGN0X2RiZ2ZzLVxcdTAwM2Vyb290LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y19jdC5jLTIyMDMtXFx0XFx0XFx0XFx0XFx1MDAyNmN0X2RiZ2ZzLVxcdTAwM2VzdGF0cy5yeF9kcm9wcGVkKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93Y24zNnh4L2RlYnVnLmM9MTcxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHNfd2NuMzZ4eF9maXJtd2FyZV9mZWF0X2NhcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2NuMzZ4eC9kZWJ1Zy5jLTE3OS1cXHRcXHRkID0gZGVidWdmc19jcmVhdGVfZmlsZShfX3N0cmluZ2lmeShuYW1lKSxcXHRcXFxcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3djbjM2eHgvZGVidWcuYzoxODA6XFx0XFx0XFx0XFx0XFx0bW9kZSwgZGZzLVxcdTAwM2Vyb290ZGlyLFxcdFxcXFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2NuMzZ4eC9kZWJ1Zy5jLTE4MS1cXHRcXHRcXHRcXHRcXHRwcml2X2RhdGEsIGZvcCk7XFx0XFxcXFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3djbjM2eHgvZGVidWcuYz0xOTA9dm9pZCB3Y24zNnh4X2RlYnVnZnNfaW5pdChzdHJ1Y3Qgd2NuMzZ4eCAqd2NuKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3djbjM2eHgvZGVidWcuYy0xOTMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3djbjM2eHgvZGVidWcuYzoxOTQ6XFx0ZGZzLVxcdTAwM2Vyb290ZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKEtCVUlMRF9NT0ROQU1FLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93Y24zNnh4L2RlYnVnLmMtMTk1LVxcdFxcdFxcdFxcdFxcdCAgd2NuLVxcdTAwM2Vody1cXHUwMDNld2lwaHktXFx1MDAzZWRlYnVnZnNkaXIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93Y24zNnh4L2RlYnVnLmM6MTk2OlxcdGlmIChJU19FUlIoZGZzLVxcdTAwM2Vyb290ZGlyKSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93Y24zNnh4L2RlYnVnLmMtMTk3LVxcdFxcdHdjbjM2eHhfd2FybihcXFwiQ3JlYXRlIHRoZSBkZWJ1Z2ZzIGZhaWxlZFxcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3djbjM2eHgvZGVidWcuYzoxOTg6XFx0XFx0ZGZzLVxcdTAwM2Vyb290ZGlyID0gTlVMTDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2NuMzZ4eC9kZWJ1Zy5jLTE5OS1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2NuMzZ4eC9kZWJ1Zy5jPTIwNz12b2lkIHdjbjM2eHhfZGVidWdmc19leGl0KHN0cnVjdCB3Y24zNnh4ICp3Y24pXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2NuMzZ4eC9kZWJ1Zy5jLTIwOS1cXHRzdHJ1Y3Qgd2NuMzZ4eF9kZnNfZW50cnkgKmRmcyA9IFxcdTAwMjZ3Y24tXFx1MDAzZWRmcztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2NuMzZ4eC9kZWJ1Zy5jOjIxMDpcXHRkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoZGZzLVxcdTAwM2Vyb290ZGlyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2NuMzZ4eC9kZWJ1Zy5jLTIxMS19XFxuLS1cXG5mcy9LY29uZmlnPTIxPWNvbmZpZyBOVUxMX1JPT1RfQ1dEX0tVTklUX1RFU1RcXG4tLVxcbmZzL0tjb25maWctMjYtXFx0ICBCdWlsZCBLVW5pdCB0ZXN0cyB0aGF0IGV4ZXJjaXNlIHBhdGggcmVzb2x1dGlvbiBmb3IgdGFza3Mgd2hvc2VcXG5mcy9LY29uZmlnOjI3OlxcdCAgZnMtXFx1MDAzZXJvb3QgYW5kL29yIGZzLVxcdTAwM2Vwd2QgaXMgdGhlIE5VTEwgcGF0aCAobm8gcm9vdCBkaXJlY3RvcnkgYW5kL29yXFxuZnMvS2NvbmZpZy0yOC1cXHQgIG5vIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkpLlxcbi0tXFxuZnMvYnRyZnMvZXh0ZW50LXRyZWUuYz0yMjI4PWludCBidHJmc19ydW5fZGVsYXllZF9yZWZzKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLCB1NjQgbWluX2J5dGVzKVxcbi0tXFxuZnMvYnRyZnMvZXh0ZW50LXRyZWUuYy0yMjQzLSNpZmRlZiBTQ1JBTUJMRV9ERUxBWUVEX1JFRlNcXG5mcy9idHJmcy9leHRlbnQtdHJlZS5jOjIyNDQ6XFx0ZGVsYXllZF9yZWZzLVxcdTAwM2VydW5fZGVsYXllZF9zdGFydCA9IGZpbmRfbWlkZGxlKFxcdTAwMjZkZWxheWVkX3JlZnMtXFx1MDAzZXJvb3QpO1xcbmZzL2J0cmZzL2V4dGVudC10cmVlLmMtMjI0NS0jZW5kaWZcXG4tLVxcbmZzL2J0cmZzL2lvY3RsLmM9MjEyMj1zdGF0aWMgaW50IGJ0cmZzX2lvY3RsX2dldF9zdWJ2b2xfcm9vdHJlZihzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCxcXG4tLVxcbmZzL2J0cmZzL2lvY3RsLmMtMjE4MC1cXHRcXHRycmVmID0gYnRyZnNfaXRlbV9wdHIobGVhZiwgc2xvdCwgc3RydWN0IGJ0cmZzX3Jvb3RfcmVmKTtcXG5mcy9idHJmcy9pb2N0bC5jOjIxODE6XFx0XFx0cm9vdHJlZnMtXFx1MDAzZXJvb3RyZWZbZm91bmRdLnRyZWVpZCA9IGtleS5vZmZzZXQ7XFxuZnMvYnRyZnMvaW9jdGwuYzoyMTgyOlxcdFxcdHJvb3RyZWZzLVxcdTAwM2Vyb290cmVmW2ZvdW5kXS5kaXJpZCA9XFxuZnMvYnRyZnMvaW9jdGwuYy0yMTgzLVxcdFxcdFxcdFxcdCAgYnRyZnNfcm9vdF9yZWZfZGlyaWQobGVhZiwgcnJlZik7XFxuLS1cXG5mcy9idHJmcy9pb2N0bC5jLTIyMDItXFx0XFx0XFx0cm9vdHJlZnMtXFx1MDAzZW1pbl90cmVlaWQgPVxcbmZzL2J0cmZzL2lvY3RsLmM6MjIwMzpcXHRcXHRcXHRcXHRyb290cmVmcy1cXHUwMDNlcm9vdHJlZltmb3VuZCAtIDFdLnRyZWVpZCArIDE7XFxuZnMvYnRyZnMvaW9jdGwuYy0yMjA0LVxcdFxcdGlmIChjb3B5X3RvX3VzZXIoYXJncCwgcm9vdHJlZnMsIHNpemVvZigqcm9vdHJlZnMpKSlcXG4tLVxcbmZzL2NvcmVkdW1wLmM9ODc4PXN0YXRpYyBib29sIGNvcmVkdW1wX2ZpbGUoc3RydWN0IGNvcmVfbmFtZSAqY24sIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0sXFxuLS1cXG5mcy9jb3JlZHVtcC5jLTkxOC1cXHRcXHQgKiBVc2luZyB1c2VyIG5hbWVzcGFjZXMsIG5vcm1hbCB1c2VyIHRhc2tzIGNhbiBjaGFuZ2VcXG5mcy9jb3JlZHVtcC5jOjkxOTpcXHRcXHQgKiB0aGVpciBjdXJyZW50LVxcdTAwM2Vmcy1cXHUwMDNlcm9vdCB0byBwb2ludCB0byBhcmJpdHJhcnlcXG5mcy9jb3JlZHVtcC5jLTkyMC1cXHRcXHQgKiBkaXJlY3Rvcmllcy4gU2luY2UgdGhlIGludGVudGlvbiBvZiB0aGUgXFxcIm9ubHkgZHVtcFxcbi0tXFxuZnMvY29yZWR1bXAuYy05MjItXFx0XFx0ICogY29yZWR1bXBzIG1heSBiZSBwbGFjZWQgdXNpbmcgcm9vdCBwcml2aWxlZ2VzLFxcbmZzL2NvcmVkdW1wLmM6OTIzOlxcdFxcdCAqIGN1cnJlbnQtXFx1MDAzZWZzLVxcdTAwM2Vyb290IG11c3Qgbm90IGJlIHVzZWQuIEluc3RlYWQsIHVzZSB0aGVcXG5mcy9jb3JlZHVtcC5jLTkyNC1cXHRcXHQgKiByb290IGRpcmVjdG9yeSBvZiBpbml0X3Rhc2suXFxuLS1cXG5mcy9kX3BhdGguYz0yMzk9c3RhdGljIHZvaWQgZ2V0X2ZzX3Jvb3RfcmN1KHN0cnVjdCBmc19zdHJ1Y3QgKmZzLCBzdHJ1Y3QgcGF0aCAqcm9vdClcXG4tLVxcbmZzL2RfcGF0aC5jLTI0NC1cXHRcXHRzZXEgPSByZWFkX3NlcWJlZ2luKFxcdTAwMjZmcy1cXHUwMDNlc2VxKTtcXG5mcy9kX3BhdGguYzoyNDU6XFx0XFx0KnJvb3QgPSBmcy1cXHUwMDNlcm9vdDtcXG5mcy9kX3BhdGguYy0yNDYtXFx0fSB3aGlsZSAocmVhZF9zZXFyZXRyeShcXHUwMDI2ZnMtXFx1MDAzZXNlcSwgc2VxKSk7XFxuLS1cXG5mcy9kX3BhdGguYz0zODM9c3RhdGljIHZvaWQgZ2V0X2ZzX3Jvb3RfYW5kX3B3ZF9yY3Uoc3RydWN0IGZzX3N0cnVjdCAqZnMsIHN0cnVjdCBwYXRoICpyb290LFxcbi0tXFxuZnMvZF9wYXRoLmMtMzg5LVxcdFxcdHNlcSA9IHJlYWRfc2VxYmVnaW4oXFx1MDAyNmZzLVxcdTAwM2VzZXEpO1xcbmZzL2RfcGF0aC5jOjM5MDpcXHRcXHQqcm9vdCA9IGZzLVxcdTAwM2Vyb290O1xcbmZzL2RfcGF0aC5jLTM5MS1cXHRcXHQqcHdkID0gZnMtXFx1MDAzZXB3ZDtcXG4tLVxcbmZzL2ZzX3N0cnVjdC5jPTE2PXZvaWQgc2V0X2ZzX3Jvb3Qoc3RydWN0IGZzX3N0cnVjdCAqZnMsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoKVxcbi0tXFxuZnMvZnNfc3RydWN0LmMtMjEtXFx0d3JpdGVfc2VxbG9jayhcXHUwMDI2ZnMtXFx1MDAzZXNlcSk7XFxuZnMvZnNfc3RydWN0LmM6MjI6XFx0b2xkX3Jvb3QgPSBmcy1cXHUwMDNlcm9vdDtcXG5mcy9mc19zdHJ1Y3QuYzoyMzpcXHRmcy1cXHUwMDNlcm9vdCA9ICpwYXRoO1xcbmZzL2ZzX3N0cnVjdC5jLTI0LVxcdHdyaXRlX3NlcXVubG9jayhcXHUwMDI2ZnMtXFx1MDAzZXNlcSk7XFxuLS1cXG5mcy9mc19zdHJ1Y3QuYz01NT12b2lkIGNocm9vdF9mc19yZWZzKGNvbnN0IHN0cnVjdCBwYXRoICpvbGRfcm9vdCwgY29uc3Qgc3RydWN0IHBhdGggKm5ld19yb290KVxcbi0tXFxuZnMvZnNfc3RydWN0LmMtNjctXFx0XFx0XFx0d3JpdGVfc2VxbG9jayhcXHUwMDI2ZnMtXFx1MDAzZXNlcSk7XFxuZnMvZnNfc3RydWN0LmM6Njg6XFx0XFx0XFx0aGl0cyArPSByZXBsYWNlX3BhdGgoXFx1MDAyNmZzLVxcdTAwM2Vyb290LCBvbGRfcm9vdCwgbmV3X3Jvb3QpO1xcbmZzL2ZzX3N0cnVjdC5jLTY5LVxcdFxcdFxcdGhpdHMgKz0gcmVwbGFjZV9wYXRoKFxcdTAwMjZmcy1cXHUwMDNlcHdkLCBvbGRfcm9vdCwgbmV3X3Jvb3QpO1xcbi0tXFxuZnMvZnNfc3RydWN0LmM9ODM9dm9pZCBmcmVlX2ZzX3N0cnVjdChzdHJ1Y3QgZnNfc3RydWN0ICpmcylcXG5mcy9mc19zdHJ1Y3QuYy04NC17XFxuZnMvZnNfc3RydWN0LmM6ODU6XFx0cGF0aF9wdXQoXFx1MDAyNmZzLVxcdTAwM2Vyb290KTtcXG5mcy9mc19zdHJ1Y3QuYy04Ni1cXHRwYXRoX3B1dChcXHUwMDI2ZnMtXFx1MDAzZXB3ZCk7XFxuLS1cXG5mcy9mc19zdHJ1Y3QuYz0xMDc9c3RydWN0IGZzX3N0cnVjdCAqY29weV9mc19zdHJ1Y3Qoc3RydWN0IGZzX3N0cnVjdCAqb2xkKVxcbi0tXFxuZnMvZnNfc3RydWN0LmMtMTE3LVxcdFxcdHJlYWRfc2VxbG9ja19leGNsKFxcdTAwMjZvbGQtXFx1MDAzZXNlcSk7XFxuZnMvZnNfc3RydWN0LmM6MTE4OlxcdFxcdGZzLVxcdTAwM2Vyb290ID0gb2xkLVxcdTAwM2Vyb290O1xcbmZzL2ZzX3N0cnVjdC5jOjExOTpcXHRcXHRwYXRoX2dldChcXHUwMDI2ZnMtXFx1MDAzZXJvb3QpO1xcbmZzL2ZzX3N0cnVjdC5jLTEyMC1cXHRcXHRmcy1cXHUwMDNlcHdkID0gb2xkLVxcdTAwM2Vwd2Q7XFxuLS1cXG5mcy9uYW1laS5jPTExMDU9c3RhdGljIGludCBzZXRfcm9vdChzdHJ1Y3QgbmFtZWlkYXRhICpuZClcXG4tLVxcbmZzL25hbWVpLmMtMTEyMS1cXHRcXHRcXHRzZXEgPSByZWFkX3NlcWJlZ2luKFxcdTAwMjZmcy1cXHUwMDNlc2VxKTtcXG5mcy9uYW1laS5jOjExMjI6XFx0XFx0XFx0bmQtXFx1MDAzZXJvb3QgPSBmcy1cXHUwMDNlcm9vdDtcXG5mcy9uYW1laS5jLTExMjMtXFx0XFx0XFx0LypcXG4tLVxcbmZzL25hbWVzcGFjZS5jPTE4NzA9c3RhdGljIGludCBkb191bW91bnQoc3RydWN0IG1vdW50ICptbnQsIGludCBmbGFncylcXG4tLVxcbmZzL25hbWVzcGFjZS5jLTE4ODUtXFx0aWYgKGZsYWdzIFxcdTAwMjYgTU5UX0VYUElSRSkge1xcbmZzL25hbWVzcGFjZS5jOjE4ODY6XFx0XFx0aWYgKFxcdTAwMjZtbnQtXFx1MDAzZW1udCA9PSBjdXJyZW50LVxcdTAwM2Vmcy1cXHUwMDNlcm9vdC5tbnQgfHxcXG5mcy9uYW1lc3BhY2UuYy0xODg3LVxcdFxcdCAgICBmbGFncyBcXHUwMDI2IChNTlRfRk9SQ0UgfCBNTlRfREVUQUNIKSlcXG4tLVxcbmZzL25hbWVzcGFjZS5jLTE5MjctXFx0ICovXFxuZnMvbmFtZXNwYWNlLmM6MTkyODpcXHRpZiAoXFx1MDAyNm1udC1cXHUwMDNlbW50ID09IGN1cnJlbnQtXFx1MDAzZWZzLVxcdTAwM2Vyb290Lm1udCBcXHUwMDI2XFx1MDAyNiAhKGZsYWdzIFxcdTAwMjYgTU5UX0RFVEFDSCkpIHtcXG5mcy9uYW1lc3BhY2UuYy0xOTI5LVxcdFxcdC8qXFxuLS1cXG5mcy9uYW1lc3BhY2UuYz00MjMyPXN0cnVjdCBtbnRfbmFtZXNwYWNlICpjb3B5X21udF9ucyh1NjQgZmxhZ3MsIHN0cnVjdCBtbnRfbmFtZXNwYWNlICpucyxcXG4tLVxcbmZzL25hbWVzcGFjZS5jLTQyODQtXFx0XFx0aWYgKG5ld19mcykge1xcbmZzL25hbWVzcGFjZS5jOjQyODU6XFx0XFx0XFx0b2xkX3Jvb3QgPSBuZXdfZnMtXFx1MDAzZXJvb3Q7XFxuZnMvbmFtZXNwYWNlLmMtNDI4Ni1cXHRcXHRcXHRvbGRfcHdkID0gbmV3X2ZzLVxcdTAwM2Vwd2Q7XFxuZnMvbmFtZXNwYWNlLmMtNDI4Ny1cXG5mcy9uYW1lc3BhY2UuYzo0Mjg4OlxcdFxcdFxcdG5ld19mcy1cXHUwMDNlcm9vdC5tbnQgPSBtbnRnZXQoXFx1MDAyNm5ldy1cXHUwMDNlbW50KTtcXG5mcy9uYW1lc3BhY2UuYzo0Mjg5OlxcdFxcdFxcdG5ld19mcy1cXHUwMDNlcm9vdC5kZW50cnkgPSBkZ2V0KG5ldy1cXHUwMDNlbW50Lm1udF9yb290KTtcXG5mcy9uYW1lc3BhY2UuYy00MjkwLVxcbi0tXFxuZnMvbmFtZXNwYWNlLmMtNDMwOC1cXHRcXHRcXHRpZiAobmV3X2ZzKSB7XFxuZnMvbmFtZXNwYWNlLmM6NDMwOTpcXHRcXHRcXHRcXHRpZiAoXFx1MDAyNnAtXFx1MDAzZW1udCA9PSBuZXdfZnMtXFx1MDAzZXJvb3QubW50KSB7XFxuZnMvbmFtZXNwYWNlLmM6NDMxMDpcXHRcXHRcXHRcXHRcXHRvbGRfcm9vdC5tbnQgPSBuZXdfZnMtXFx1MDAzZXJvb3QubW50O1xcbmZzL25hbWVzcGFjZS5jOjQzMTE6XFx0XFx0XFx0XFx0XFx0bmV3X2ZzLVxcdTAwM2Vyb290Lm1udCA9IG1udGdldChcXHUwMDI2cS1cXHUwMDNlbW50KTtcXG5mcy9uYW1lc3BhY2UuYy00MzEyLVxcdFxcdFxcdFxcdH1cXG4tLVxcbmZzL25hbWVzcGFjZS5jPTUzMzA9c3RhdGljIHZvaWQgc3RhdG1vdW50X3Byb3BhZ2F0ZV9mcm9tKHN0cnVjdCBrc3RhdG1vdW50ICpzKVxcbi0tXFxuZnMvbmFtZXNwYWNlLmMtNTMzNS1cXHRpZiAoSVNfTU5UX1NMQVZFKG0pKVxcbmZzL25hbWVzcGFjZS5jOjUzMzY6XFx0XFx0cy1cXHUwMDNlc20ucHJvcGFnYXRlX2Zyb20gPSBnZXRfZG9taW5hdGluZ19pZChtLCBcXHUwMDI2Y3VycmVudC1cXHUwMDNlZnMtXFx1MDAzZXJvb3QpO1xcbmZzL25hbWVzcGFjZS5jLTUzMzctfVxcbi0tXFxuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jLTItLypcXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmM6MzogKiBLVW5pdCB0ZXN0cyBmb3IgdGFza3Mgd2hvc2UgZnMtXFx1MDAzZXJvb3QgYW5kL29yIGZzLVxcdTAwM2Vwd2QgaXMgdGhlIE5VTEwgcGF0aC5cXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmMtNC0gKiBTZWUgXFxcImZzOiBzdXBwb3J0IHRhc2tzIHdpdGggYSBudWxsIHJvb3Qgb3IgY3dkXFxcIi5cXG4tLVxcbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYz03MT1zdGF0aWMgdm9pZCBudWxsX3Jvb3RfdGVzdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmMtODktXFxuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jOjkwOlxcdC8qIEEgZGlyZmQtYW5jaG9yZWQgbG9va3VwIG5ldmVyIGNvbnN1bHRzIGZzLVxcdTAwM2Vyb290LiAqL1xcbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYy05MS1cXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgdHJ5X2ZkX3JlbGF0aXZlKFxcdTAwMjZjdHgsIFxcXCIuXFxcIiksIDApO1xcbi0tXFxuaW5jbHVkZS9saW51eC9mc19zdHJ1Y3QuaD01ND1zdGF0aWMgaW5saW5lIHZvaWQgZ2V0X2ZzX3Jvb3Qoc3RydWN0IGZzX3N0cnVjdCAqZnMsIHN0cnVjdCBwYXRoICpyb290KVxcbi0tXFxuaW5jbHVkZS9saW51eC9mc19zdHJ1Y3QuaC01Ni1cXHRyZWFkX3NlcWxvY2tfZXhjbChcXHUwMDI2ZnMtXFx1MDAzZXNlcSk7XFxuaW5jbHVkZS9saW51eC9mc19zdHJ1Y3QuaDo1NzpcXHQqcm9vdCA9IGZzLVxcdTAwM2Vyb290O1xcbmluY2x1ZGUvbGludXgvZnNfc3RydWN0LmgtNTgtXFx0cGF0aF9nZXQocm9vdCk7XFxuLS1cXG5rZXJuZWwvbnNwcm94eS5jPTUzNT1zdGF0aWMgdm9pZCBjb21taXRfbnNzZXQoc3RydWN0IG5zc2V0ICpuc3NldClcXG4tLVxcbmtlcm5lbC9uc3Byb3h5LmMtNTQ5LVxcdGlmICgoZmxhZ3MgXFx1MDAyNiBDTE9ORV9ORVdOUykgXFx1MDAyNlxcdTAwMjYgKGZsYWdzIFxcdTAwMjYgfkNMT05FX05FV05TKSkge1xcbmtlcm5lbC9uc3Byb3h5LmM6NTUwOlxcdFxcdHNldF9mc19yb290KG1lLVxcdTAwM2VmcywgXFx1MDAyNm5zc2V0LVxcdTAwM2Vmcy1cXHUwMDNlcm9vdCk7XFxua2VybmVsL25zcHJveHkuYy01NTEtXFx0XFx0c2V0X2ZzX3B3ZChtZS1cXHUwMDNlZnMsIFxcdTAwMjZuc3NldC1cXHUwMDNlZnMtXFx1MDAzZXB3ZCk7XFxuLS1cXG5zZWN1cml0eS9pcGUvaG9va3MuYz0yMjA9dm9pZCBpcGVfdW5wYWNrX2luaXRyYW1mcyh2b2lkKVxcbnNlY3VyaXR5L2lwZS9ob29rcy5jLTIyMS17XFxuc2VjdXJpdHkvaXBlL2hvb2tzLmM6MjIyOlxcdGlwZV9zYihjdXJyZW50LVxcdTAwM2Vmcy1cXHUwMDNlcm9vdC5tbnQtXFx1MDAzZW1udF9zYiktXFx1MDAzZWluaXRyYW1mcyA9IHRydWU7XFxuc2VjdXJpdHkvaXBlL2hvb2tzLmMtMjIzLX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl92ZnNfcmVqZWN0LmM9MTAyPWludCBCUEZfUFJPRyhwYXRoX2RfcGF0aF9rZnVuY191bnRydXN0ZWRfZnJvbV9hcmd1bWVudCwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Zmc19yZWplY3QuYy0xMDgtXFx0ICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3Zmc19yZWplY3QuYzoxMDk6XFx0cm9vdCA9IFxcdTAwMjZ0YXNrLVxcdTAwM2Vmcy1cXHUwMDNlcm9vdDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfdmZzX3JlamVjdC5jLTExMC1cXHRicGZfcGF0aF9kX3BhdGgocm9vdCwgYnVmLCBzaXplb2YoYnVmKSk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9tb3ZlX21vdW50L21vdmVfbW91bnRfdGVzdC5jPTE3Mj1URVNUX0YobW92ZV9tb3VudCwgYmVuZWF0aF9yb290ZnNfb2xkX3Jvb3Rfc3RhY2tlZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL21vdmVfbW91bnQvbW92ZV9tb3VudF90ZXN0LmMtMjA1LSAqIFRlc3QgdGhhdCBNT1ZFX01PVU5UX0JFTkVBVEggb24gcm9vdGZzIGZhaWxzIHdoZW4gY2hyb290J2QgaW50byBhXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvbW92ZV9tb3VudC9tb3ZlX21vdW50X3Rlc3QuYzoyMDY6ICogc3ViZGlyZWN0b3J5IG9mIHRoZSBzYW1lIG1vdW50LiBUaGUgY2FsbGVyJ3MgZnMtXFx1MDAzZXJvb3QuZGVudHJ5IGRvZXNuJ3RcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9tb3ZlX21vdW50L21vdmVfbW91bnRfdGVzdC5jLTIwNy0gKiBtYXRjaCBtbnQtXFx1MDAzZW1udF9yb290IHNvIHRoZSBrZXJuZWwgcmVqZWN0cyBpdC5cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL21vdmVfbW91bnQvbW92ZV9tb3VudF90ZXN0LmM9MjA5PVRFU1RfRihtb3ZlX21vdW50LCBiZW5lYXRoX3Jvb3Rmc19pbl9jaHJvb3RfZmFpbClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL21vdmVfbW91bnQvbW92ZV9tb3VudF90ZXN0LmMtMjM0LVxcdC8qXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvbW92ZV9tb3VudC9tb3ZlX21vdW50X3Rlc3QuYzoyMzU6XFx0ICogU2hvdWxkIGZhaWw6IGZzLVxcdTAwM2Vyb290LmRlbnRyeSAoL2Nocm9vdF9kaXIpIGRvZXNuJ3QgbWF0Y2hcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9tb3ZlX21vdW50L21vdmVfbW91bnRfdGVzdC5jLTIzNi1cXHQgKiB0aGUgbW91bnQncyBtbnRfcm9vdCAoLykuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA3OjE5OjQ2LjU1MTE1NDAwNFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzY3NjI2MTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEZpbGVzeXN0ZW0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBzZWUgY2hhbmdlcyB0byBgZnMvS2NvbmZpZ2AuIEl0J3MgYWRkaW5nIGBOVUxMX1JPT1RfQ1dEX0tVTklUX1RFU1RgLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiBJcyB0aGlzIHNvbGVseSBmb3IgdGVzdCBwdXJwb3Nlcywgb3IgaXMgdGhpcyBhY3R1YWxseSBzdXBwb3J0aW5nIGEgZnVuY3Rpb25hbCBjaGFuZ2U/IFRoZSBkZXNjcmlwdGlvbiBtZW50aW9ucyBzdXBwb3J0IGZvciB0YXNrcyB3aXRoIG51bGwgcm9vdC9jd2QsIHdoaWNoIHJhaXNlcyBhIGZsYWcuXG5cbkdpdmVuIHRoYXQgdGhpcyBzZWVtcyBsaWtlIGEgbmV3IGZlYXR1cmUgaW4gdGhlIGNvcmUgVkZTLCBhbmQgaXTigJlzIGJlaW5nIGFkZGVkIG5vdywgaXQgcmVhbGx5IGZlZWxzIGxpa2UgaXQncyBwcmVwYXJhdG9yeSB3b3JrLiBJcyBpdCBiZWluZyBidWlsdCB1cCB0byBhbm90aGVyIHBhdGNoIHRoYXQncyBnb2luZyB0byB1dGlsaXplIHRoaXMgZnVuY3Rpb25hbGl0eT8gSSBub3RlIHRoYXQgaXQgaGFzIGJlZW4gYXBwbGllZCBhZnRlciByZXZpZXcuIEknbGwgbmVlZCB0byBjaGVjayBpZiB0aGlzIGlzIHBhcnQgb2YgYSBzZXJpZXM7IGFyZSB0aGVyZSBtb3JlIHBhdGNoZXM/XG5cbkFscmlnaHQsIEkgZG9uJ3Qgc2VlIGFueSByZWxhdGVkIHBhdGNoZXMsIGJ1dCBJIGNhbiBzZWUgdGhhdCB0aGUgY2hhbmdlcyBhcmUgbW9kaWZ5aW5nIHNvbWUga2V5IFZGUyBmaWxlczogYGZzL25hbWVpLmNgLCBgZnMvZF9wYXRoLmNgLCBgZnMvZmhhbmRsZS5jYCwgYGZzL3Byb2MvYmFzZS5jYCwgYW5kIGBmcy9jYWNoZWZpbGVzL2RhZW1vbi5jYC4gVGhhdCB0ZWxscyBtZSB0aGVzZSBjb3JlIGZpbGVzeXN0ZW0gZnVuY3Rpb25zIGFyZSBiZWluZyB1cGRhdGVkIHRvIGdyYWNlZnVsbHkgaGFuZGxlIGEgbnVsbCByb290IG9yIENXRCwgcmF0aGVyIHRoYW4gY3Jhc2hpbmcgd2hlbiBlbmNvdW50ZXJlZC5cblxuTm93LCBteSBtaW5kIHN0YXJ0cyByYWNpbmcuIEhvdyBjb3VsZCBhIHRhc2sgZXZlbiAqZ2V0KiBhIG51bGwgcm9vdCBvciBDV0QgZnJvbSB1c2Vyc3BhY2U/IENvdWxkIHRoZXkgdXNlIGBjaHJvb3RgIGFuZCB0aGVuIHVubW91bnQ/IEJ1dCBubywgYGNocm9vdGAgcGlucyB0aGUgbW91bnQuIENvdWxkIGEgdGFzayBiZSBjcmVhdGVkICp3aXRob3V0KiBhbiBgZnNfc3RydWN0YD8gVGhlIHVzZSBvZiBgQ0xPTkVfRlNgIHdvdWxkbid0IHdvcms7IGlmIGEgdGFzayBpcyBjcmVhdGVkIHdpdGggYENMT05FX0ZTYCBhbmQgdGhlIG90aGVyIHRhc2sgZXhpdHMsIHRoZSBgZnNfc3RydWN0YCBpcyByZWZjb3VudGVkLlxuXG5XYWl0IGEgc2Vjb25k4oCmIHdoYXQgYWJvdXQgaW9fdXJpbmcgdGhyZWFkcz8gVGhleSBtYXkgbm90IGhhdmUgYGZzX3N0cnVjdGAhIFRoYXQncyBhIGRlZmluaXRlIHBvc3NpYmlsaXR5LiBJJ20gZ29pbmcgdG8gZGlnIGludG8gdGhlIGlvX3VyaW5nIGNvZGUgdG8gc2VlIHdoYXQncyBnb2luZyBvbiB3aXRoIHRoZSBgZnNfc3RydWN0YCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExMDgsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDc6MTk6NTMuOTE4NzgzNTAzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDY4MTUxMTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZzX3N0cnVjdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTI3LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9mcy5oXFx1MDAzZVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6Mjg6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzX3N0cnVjdC5oXFx1MDAzZVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMjktI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BzcC5oXFx1MDAzZVxcbi0tXFxuZnMvOXAvYWNsLmMtOC0jaW5jbHVkZSBcXHUwMDNjbGludXgvZnMuaFxcdTAwM2VcXG5mcy85cC9hY2wuYzo5OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9mc19zdHJ1Y3QuaFxcdTAwM2VcXG5mcy85cC9hY2wuYy0xMC0jaW5jbHVkZSBcXHUwMDNjbmV0LzlwLzlwLmhcXHUwMDNlXFxuLS1cXG5mcy9NYWtlZmlsZT0xMD1vYmoteSA6PVxcdG9wZW4ubyByZWFkX3dyaXRlLm8gZmlsZV90YWJsZS5vIHN1cGVyLm8gXFxcXFxcbi0tXFxuZnMvTWFrZWZpbGUtMTUtXFx0XFx0cG5vZGUubyBzcGxpY2UubyBzeW5jLm8gdXRpbWVzLm8gZF9wYXRoLm8gXFxcXFxcbmZzL01ha2VmaWxlOjE2OlxcdFxcdHN0YWNrLm8gZnNfc3RydWN0Lm8gc3RhdGZzLm8gZnNfcGluLm8gbnNmcy5vIFxcXFxcXG5mcy9NYWtlZmlsZS0xNy1cXHRcXHRmc19kaXJlbnQubyBmc19jb250ZXh0Lm8gZnNfcGFyc2VyLm8gZnNvcGVuLm8gaW5pdC5vIFxcXFxcXG4tLVxcbmZzL2J0cmZzL2lub2RlLmMtMTEtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzLmhcXHUwMDNlXFxuZnMvYnRyZnMvaW5vZGUuYzoxMjojaW5jbHVkZSBcXHUwMDNjbGludXgvZnNfc3RydWN0LmhcXHUwMDNlXFxuZnMvYnRyZnMvaW5vZGUuYy0xMy0jaW5jbHVkZSBcXHUwMDNjbGludXgvcGFnZW1hcC5oXFx1MDAzZVxcbi0tXFxuZnMvY2FjaGVmaWxlcy9kYWVtb24uYy0yMS0jaW5jbHVkZSBcXHUwMDNjbGludXgvc3RyaW5nLmhcXHUwMDNlXFxuZnMvY2FjaGVmaWxlcy9kYWVtb24uYzoyMjojaW5jbHVkZSBcXHUwMDNjbGludXgvZnNfc3RydWN0LmhcXHUwMDNlXFxuZnMvY2FjaGVmaWxlcy9kYWVtb24uYy0yMy0jaW5jbHVkZSBcXFwiaW50ZXJuYWwuaFxcXCJcXG4tLVxcbmZzL2NvcmVkdW1wLmMtMzYtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Zzbm90aWZ5LmhcXHUwMDNlXFxuZnMvY29yZWR1bXAuYzozNzojaW5jbHVkZSBcXHUwMDNjbGludXgvZnNfc3RydWN0LmhcXHUwMDNlXFxuZnMvY29yZWR1bXAuYy0zOC0jaW5jbHVkZSBcXHUwMDNjbGludXgvcGlwZV9mc19pLmhcXHUwMDNlXFxuLS1cXG5mcy9kX3BhdGguYy00LSNpbmNsdWRlIFxcdTAwM2NsaW51eC91YWNjZXNzLmhcXHUwMDNlXFxuZnMvZF9wYXRoLmM6NTojaW5jbHVkZSBcXHUwMDNjbGludXgvZnNfc3RydWN0LmhcXHUwMDNlXFxuZnMvZF9wYXRoLmMtNi0jaW5jbHVkZSBcXHUwMDNjbGludXgvZnMuaFxcdTAwM2VcXG4tLVxcbmZzL2RfcGF0aC5jPTIyNz1jaGFyICpkX2Fic29sdXRlX3BhdGgoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsXFxuLS1cXG5mcy9kX3BhdGguYy0yMzgtXFxuZnMvZF9wYXRoLmM6MjM5OnN0YXRpYyB2b2lkIGdldF9mc19yb290X3JjdShzdHJ1Y3QgZnNfc3RydWN0ICpmcywgc3RydWN0IHBhdGggKnJvb3QpXFxuZnMvZF9wYXRoLmMtMjQwLXtcXG4tLVxcbmZzL2RfcGF0aC5jPTM3Mj1jaGFyICpkZW50cnlfcGF0aChjb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNoYXIgKmJ1ZiwgaW50IGJ1ZmxlbilcXG4tLVxcbmZzL2RfcGF0aC5jLTM4Mi1cXG5mcy9kX3BhdGguYzozODM6c3RhdGljIHZvaWQgZ2V0X2ZzX3Jvb3RfYW5kX3B3ZF9yY3Uoc3RydWN0IGZzX3N0cnVjdCAqZnMsIHN0cnVjdCBwYXRoICpyb290LFxcbmZzL2RfcGF0aC5jLTM4NC1cXHRcXHRcXHRcXHQgICAgc3RydWN0IHBhdGggKnB3ZClcXG4tLVxcbmZzL2V4ZWMuYy02MC0jaW5jbHVkZSBcXHUwMDNjbGludXgvZnNub3RpZnkuaFxcdTAwM2VcXG5mcy9leGVjLmM6NjE6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzX3N0cnVjdC5oXFx1MDAzZVxcbmZzL2V4ZWMuYy02Mi0jaW5jbHVkZSBcXHUwMDNjbGludXgvb29tLmhcXHUwMDNlXFxuLS1cXG5mcy9leGZhdC9zdXBlci5jLTE1LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9ibGtkZXYuaFxcdTAwM2VcXG5mcy9leGZhdC9zdXBlci5jOjE2OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9mc19zdHJ1Y3QuaFxcdTAwM2VcXG5mcy9leGZhdC9zdXBlci5jLTE3LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9pdmVyc2lvbi5oXFx1MDAzZVxcbi0tXFxuZnMvZjJmcy9hY2wuYy0xMS0gKi9cXG5mcy9mMmZzL2FjbC5jOjEyOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9mc19zdHJ1Y3QuaFxcdTAwM2VcXG5mcy9mMmZzL2FjbC5jLTEzLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9mMmZzX2ZzLmhcXHUwMDNlXFxuLS1cXG5mcy9mYXQvaW5vZGUuYy0yNC0jaW5jbHVkZSBcXHUwMDNjbGludXgvaXZlcnNpb24uaFxcdTAwM2VcXG5mcy9mYXQvaW5vZGUuYzoyNTojaW5jbHVkZSBcXHUwMDNjbGludXgvZnNfc3RydWN0LmhcXHUwMDNlXFxuZnMvZmF0L2lub2RlLmMtMjYtI2luY2x1ZGUgXFxcImZhdC5oXFxcIlxcbi0tXFxuZnMvZmhhbmRsZS5jLTgtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V4cG9ydGZzLmhcXHUwMDNlXFxuZnMvZmhhbmRsZS5jOjk6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzX3N0cnVjdC5oXFx1MDAzZVxcbmZzL2ZoYW5kbGUuYy0xMC0jaW5jbHVkZSBcXHUwMDNjbGludXgvZnNub3RpZnkuaFxcdTAwM2VcXG4tLVxcbmZzL2ZzX3N0cnVjdC5jLTctI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG5mcy9mc19zdHJ1Y3QuYzo4OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9mc19zdHJ1Y3QuaFxcdTAwM2VcXG5mcy9mc19zdHJ1Y3QuYy05LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbml0X3Rhc2suaFxcdTAwM2VcXG4tLVxcbmZzL2ZzX3N0cnVjdC5jLTE1LSAqL1xcbmZzL2ZzX3N0cnVjdC5jOjE2OnZvaWQgc2V0X2ZzX3Jvb3Qoc3RydWN0IGZzX3N0cnVjdCAqZnMsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoKVxcbmZzL2ZzX3N0cnVjdC5jLTE3LXtcXG4tLVxcbmZzL2ZzX3N0cnVjdC5jLTMyLSAqL1xcbmZzL2ZzX3N0cnVjdC5jOjMzOnZvaWQgc2V0X2ZzX3B3ZChzdHJ1Y3QgZnNfc3RydWN0ICpmcywgY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpXFxuZnMvZnNfc3RydWN0LmMtMzQte1xcbi0tXFxuZnMvZnNfc3RydWN0LmM9NTU9dm9pZCBjaHJvb3RfZnNfcmVmcyhjb25zdCBzdHJ1Y3QgcGF0aCAqb2xkX3Jvb3QsIGNvbnN0IHN0cnVjdCBwYXRoICpuZXdfcm9vdClcXG4tLVxcbmZzL2ZzX3N0cnVjdC5jLTU3LVxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqZywgKnA7XFxuZnMvZnNfc3RydWN0LmM6NTg6XFx0c3RydWN0IGZzX3N0cnVjdCAqZnM7XFxuZnMvZnNfc3RydWN0LmMtNTktXFx0aW50IGNvdW50ID0gMDtcXG4tLVxcbmZzL2ZzX3N0cnVjdC5jLTgyLVxcbmZzL2ZzX3N0cnVjdC5jOjgzOnZvaWQgZnJlZV9mc19zdHJ1Y3Qoc3RydWN0IGZzX3N0cnVjdCAqZnMpXFxuZnMvZnNfc3RydWN0LmMtODQte1xcbi0tXFxuZnMvZnNfc3RydWN0LmM9OTA9dm9pZCBleGl0X2ZzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbmZzL2ZzX3N0cnVjdC5jLTkxLXtcXG5mcy9mc19zdHJ1Y3QuYzo5MjpcXHRzdHJ1Y3QgZnNfc3RydWN0ICpmcyA9IHRzay1cXHUwMDNlZnM7XFxuZnMvZnNfc3RydWN0LmMtOTMtXFxuLS1cXG5mcy9mc19zdHJ1Y3QuYy0xMDItXFx0XFx0aWYgKGtpbGwpXFxuZnMvZnNfc3RydWN0LmM6MTAzOlxcdFxcdFxcdGZyZWVfZnNfc3RydWN0KGZzKTtcXG5mcy9mc19zdHJ1Y3QuYy0xMDQtXFx0fVxcbi0tXFxuZnMvZnNfc3RydWN0LmMtMTA2LVxcbmZzL2ZzX3N0cnVjdC5jOjEwNzpzdHJ1Y3QgZnNfc3RydWN0ICpjb3B5X2ZzX3N0cnVjdChzdHJ1Y3QgZnNfc3RydWN0ICpvbGQpXFxuZnMvZnNfc3RydWN0LmMtMTA4LXtcXG5mcy9mc19zdHJ1Y3QuYzoxMDk6XFx0c3RydWN0IGZzX3N0cnVjdCAqZnMgPSBrbWVtX2NhY2hlX2FsbG9jKGZzX2NhY2hlcCwgR0ZQX0tFUk5FTCk7XFxuZnMvZnNfc3RydWN0LmMtMTEwLVxcdC8qIFdlIGRvbid0IG5lZWQgdG8gbG9jayBmcyAtIHRoaW5rIHdoeSA7LSkgKi9cXG4tLVxcbmZzL2ZzX3N0cnVjdC5jLTEyNi1cXG5mcy9mc19zdHJ1Y3QuYzoxMjc6aW50IHVuc2hhcmVfZnNfc3RydWN0KHZvaWQpXFxuZnMvZnNfc3RydWN0LmMtMTI4LXtcXG5mcy9mc19zdHJ1Y3QuYzoxMjk6XFx0c3RydWN0IGZzX3N0cnVjdCAqZnMgPSBjdXJyZW50LVxcdTAwM2VmcztcXG5mcy9mc19zdHJ1Y3QuYzoxMzA6XFx0c3RydWN0IGZzX3N0cnVjdCAqbmV3X2ZzID0gY29weV9mc19zdHJ1Y3QoZnMpO1xcbmZzL2ZzX3N0cnVjdC5jLTEzMS1cXHRpbnQga2lsbDtcXG4tLVxcbmZzL2ZzX3N0cnVjdC5jLTE0My1cXHRpZiAoa2lsbClcXG5mcy9mc19zdHJ1Y3QuYzoxNDQ6XFx0XFx0ZnJlZV9mc19zdHJ1Y3QoZnMpO1xcbmZzL2ZzX3N0cnVjdC5jLTE0NS1cXG4tLVxcbmZzL2ZzX3N0cnVjdC5jLTE0Ny19XFxuZnMvZnNfc3RydWN0LmM6MTQ4OkVYUE9SVF9TWU1CT0xfR1BMKHVuc2hhcmVfZnNfc3RydWN0KTtcXG5mcy9mc19zdHJ1Y3QuYy0xNDktXFxuZnMvZnNfc3RydWN0LmMtMTUwLS8qIHRvIGJlIG1lbnRpb25lZCBvbmx5IGluIElOSVRfVEFTSyAqL1xcbmZzL2ZzX3N0cnVjdC5jOjE1MTpzdHJ1Y3QgZnNfc3RydWN0IGluaXRfZnMgPSB7XFxuZnMvZnNfc3RydWN0LmMtMTUyLVxcdC51c2Vyc1xcdFxcdD0gMSxcXG4tLVxcbmZzL2hmc3BsdXMvb3B0aW9ucy5jLTE0LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC5oXFx1MDAzZVxcbmZzL2hmc3BsdXMvb3B0aW9ucy5jOjE1OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9mc19zdHJ1Y3QuaFxcdTAwM2VcXG5mcy9oZnNwbHVzL29wdGlvbnMuYy0xNi0jaW5jbHVkZSBcXHUwMDNjbGludXgvZnNfY29udGV4dC5oXFx1MDAzZVxcbi0tXFxuZnMvaHBmcy9zdXBlci5jLTExLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG5mcy9ocGZzL3N1cGVyLmM6MTI6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzX3N0cnVjdC5oXFx1MDAzZVxcbmZzL2hwZnMvc3VwZXIuYy0xMy0jaW5jbHVkZSBcXHUwMDNjbGludXgvZnNfY29udGV4dC5oXFx1MDAzZVxcbi0tXFxuZnMvaW5pdC5jLTktI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzLmhcXHUwMDNlXFxuZnMvaW5pdC5jOjEwOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9mc19zdHJ1Y3QuaFxcdTAwM2VcXG5mcy9pbml0LmMtMTEtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZpbGUuaFxcdTAwM2VcXG4tLVxcbmZzL2ludGVybmFsLmg9OTc9aW50IHNob3dfcGF0aChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBkZW50cnkgKnJvb3QpO1xcbi0tXFxuZnMvaW50ZXJuYWwuaC05OS0vKlxcbmZzL2ludGVybmFsLmg6MTAwOiAqIGZzX3N0cnVjdC5jXFxuZnMvaW50ZXJuYWwuaC0xMDEtICovXFxuLS1cXG5mcy9rZXJuZWxfcmVhZF9maWxlLmMtMi0jaW5jbHVkZSBcXHUwMDNjbGludXgvZnMuaFxcdTAwM2VcXG5mcy9rZXJuZWxfcmVhZF9maWxlLmM6MzojaW5jbHVkZSBcXHUwMDNjbGludXgvZnNfc3RydWN0LmhcXHUwMDNlXFxuZnMva2VybmVsX3JlYWRfZmlsZS5jLTQtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbF9yZWFkX2ZpbGUuaFxcdTAwM2VcXG4tLVxcbmZzL25hbWVpLmMtMzYtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RldmljZV9jZ3JvdXAuaFxcdTAwM2VcXG5mcy9uYW1laS5jOjM3OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9mc19zdHJ1Y3QuaFxcdTAwM2VcXG5mcy9uYW1laS5jLTM4LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9wb3NpeF9hY2wuaFxcdTAwM2VcXG4tLVxcbmZzL25hbWVpLmM9MTEwNT1zdGF0aWMgaW50IHNldF9yb290KHN0cnVjdCBuYW1laWRhdGEgKm5kKVxcbmZzL25hbWVpLmMtMTEwNi17XFxuZnMvbmFtZWkuYzoxMTA3OlxcdHN0cnVjdCBmc19zdHJ1Y3QgKmZzID0gY3VycmVudC1cXHUwMDNlZnM7XFxuZnMvbmFtZWkuYy0xMTA4LVxcbi0tXFxuZnMvbmFtZWkuYz0yNjg5PXN0YXRpYyBjb25zdCBjaGFyICpwYXRoX2luaXQoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHVuc2lnbmVkIGZsYWdzKVxcbi0tXFxuZnMvbmFtZWkuYy0yNzQwLVxcdFxcdGlmIChmbGFncyBcXHUwMDI2IExPT0tVUF9SQ1UpIHtcXG5mcy9uYW1laS5jOjI3NDE6XFx0XFx0XFx0c3RydWN0IGZzX3N0cnVjdCAqZnMgPSBjdXJyZW50LVxcdTAwM2VmcztcXG5mcy9uYW1laS5jLTI3NDItXFx0XFx0XFx0dW5zaWduZWQgc2VxO1xcbi0tXFxuZnMvbmFtZXNwYWNlLmMtMjAtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2luaXQuaFxcdTAwM2VcXHRcXHQvKiBpbml0X3Jvb3RmcyAqL1xcbmZzL25hbWVzcGFjZS5jOjIxOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9mc19zdHJ1Y3QuaFxcdTAwM2VcXHQvKiBnZXRfZnNfcm9vdCBldC5hbC4gKi9cXG5mcy9uYW1lc3BhY2UuYy0yMi0jaW5jbHVkZSBcXHUwMDNjbGludXgvZnNub3RpZnkuaFxcdTAwM2VcXHQvKiBmc25vdGlmeV92ZnNtb3VudF9kZWxldGUgKi9cXG4tLVxcbmZzL25hbWVzcGFjZS5jPTQyMzI9c3RydWN0IG1udF9uYW1lc3BhY2UgKmNvcHlfbW50X25zKHU2NCBmbGFncywgc3RydWN0IG1udF9uYW1lc3BhY2UgKm5zLFxcbmZzL25hbWVzcGFjZS5jOjQyMzM6XFx0XFx0c3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zLCBzdHJ1Y3QgZnNfc3RydWN0ICpuZXdfZnMpXFxuZnMvbmFtZXNwYWNlLmMtNDIzNC17XFxuLS1cXG5mcy9uYW1lc3BhY2UuYy00MzAwLVxcdFxcdCAqIGJlbG9uZ2luZyB0byBuZXcgbmFtZXNwYWNlLiAgV2UgaGF2ZSBhbHJlYWR5IGFjcXVpcmVkIGFcXG5mcy9uYW1lc3BhY2UuYzo0MzAxOlxcdFxcdCAqIHByaXZhdGUgZnNfc3RydWN0LCBzbyB0c2stXFx1MDAzZWZzLVxcdTAwM2Vsb2NrIGlzIG5vdCBuZWVkZWQuXFxuZnMvbmFtZXNwYWNlLmMtNDMwMi1cXHRcXHQgKi9cXG4tLVxcbmZzL25hbWVzcGFjZS5jPTY0Nzk9c3RhdGljIGludCBtbnRuc19pbnN0YWxsKHN0cnVjdCBuc3NldCAqbnNzZXQsIHN0cnVjdCBuc19jb21tb24gKm5zKVxcbi0tXFxuZnMvbmFtZXNwYWNlLmMtNjQ4MS1cXHRzdHJ1Y3QgbnNwcm94eSAqbnNwcm94eSA9IG5zc2V0LVxcdTAwM2Vuc3Byb3h5O1xcbmZzL25hbWVzcGFjZS5jOjY0ODI6XFx0c3RydWN0IGZzX3N0cnVjdCAqZnMgPSBuc3NldC1cXHUwMDNlZnM7XFxuZnMvbmFtZXNwYWNlLmMtNjQ4My1cXHRzdHJ1Y3QgbW50X25hbWVzcGFjZSAqbW50X25zID0gdG9fbW50X25zKG5zKSwgKm9sZF9tbnRfbnM7XFxuLS1cXG5mcy9uZnNkL25mczRwcm9jLmMtMzQtICovXFxuZnMvbmZzZC9uZnM0cHJvYy5jOjM1OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9mc19zdHJ1Y3QuaFxcdTAwM2VcXG5mcy9uZnNkL25mczRwcm9jLmMtMzYtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZpbGUuaFxcdTAwM2VcXG4tLVxcbmZzL25mc2QvbmZzc3ZjLmMtMTItI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbmZzL25mc2QvbmZzc3ZjLmM6MTM6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzX3N0cnVjdC5oXFx1MDAzZVxcbmZzL25mc2QvbmZzc3ZjLmMtMTQtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N3YXAuaFxcdTAwM2VcXG4tLVxcbmZzL25mc2QvbmZzc3ZjLmM9ODgzPW5mc2Qodm9pZCAqdnJxc3RwKVxcbi0tXFxuZnMvbmZzZC9uZnNzdmMuYy04OTYtXFx0ICovXFxuZnMvbmZzZC9uZnNzdmMuYzo4OTc6XFx0c3ZjX3RocmVhZF9pbml0X3N0YXR1cyhycXN0cCwgdW5zaGFyZV9mc19zdHJ1Y3QoKSk7XFxuZnMvbmZzZC9uZnNzdmMuYy04OTgtXFxuLS1cXG5mcy9uaWxmczIvbmlsZnMuaC0xNi0jaW5jbHVkZSBcXHUwMDNjbGludXgvYmxrZGV2LmhcXHUwMDNlXFxuZnMvbmlsZnMyL25pbGZzLmg6MTc6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzX3N0cnVjdC5oXFx1MDAzZVxcbmZzL25pbGZzMi9uaWxmcy5oLTE4LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9uaWxmczJfYXBpLmhcXHUwMDNlXFxuLS1cXG5mcy9udGZzL3N1cGVyLmMtMTItI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Zmcy5oXFx1MDAzZVxcbmZzL250ZnMvc3VwZXIuYzoxMzojaW5jbHVkZSBcXHUwMDNjbGludXgvZnNfc3RydWN0LmhcXHUwMDNlXFxuZnMvbnRmcy9zdXBlci5jLTE0LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9tbS5oXFx1MDAzZVxcbi0tXFxuZnMvbnRmczMvc3VwZXIuYy02Mi0jaW5jbHVkZSBcXHUwMDNjbGludXgvZnNfcGFyc2VyLmhcXHUwMDNlXFxuZnMvbnRmczMvc3VwZXIuYzo2MzojaW5jbHVkZSBcXHUwMDNjbGludXgvZnNfc3RydWN0LmhcXHUwMDNlXFxuZnMvbnRmczMvc3VwZXIuYy02NC0jaW5jbHVkZSBcXHUwMDNjbGludXgvbG9nMi5oXFx1MDAzZVxcbi0tXFxuZnMvb2NmczIvYWNsLmMtMTUtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N0cmluZy5oXFx1MDAzZVxcbmZzL29jZnMyL2FjbC5jOjE2OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9mc19zdHJ1Y3QuaFxcdTAwM2VcXG5mcy9vY2ZzMi9hY2wuYy0xNy1cXG4tLVxcbmZzL29tZnMvaW5vZGUuYy0xNi0jaW5jbHVkZSBcXHUwMDNjbGludXgvY3JjLWl0dS10LmhcXHUwMDNlXFxuZnMvb21mcy9pbm9kZS5jOjE3OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9mc19zdHJ1Y3QuaFxcdTAwM2VcXG5mcy9vbWZzL2lub2RlLmMtMTgtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzX2NvbnRleHQuaFxcdTAwM2VcXG4tLVxcbmZzL29wZW4uYy0zMC0jaW5jbHVkZSBcXHUwMDNjbGludXgvZmFsbG9jLmhcXHUwMDNlXFxuZnMvb3Blbi5jOjMxOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9mc19zdHJ1Y3QuaFxcdTAwM2VcXG5mcy9vcGVuLmMtMzItI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Rub3RpZnkuaFxcdTAwM2VcXG4tLVxcbmZzL3Byb2MvYXJyYXkuYy05Mi0jaW5jbHVkZSBcXHUwMDNjbGludXgvdXNlcl9uYW1lc3BhY2UuaFxcdTAwM2VcXG5mcy9wcm9jL2FycmF5LmM6OTM6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzX3N0cnVjdC5oXFx1MDAzZVxcbmZzL3Byb2MvYXJyYXkuYy05NC0jaW5jbHVkZSBcXHUwMDNjbGludXgva3RocmVhZC5oXFx1MDAzZVxcbi0tXFxuZnMvcHJvYy9iYXNlLmMtODctI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzX3BhcnNlci5oXFx1MDAzZVxcbmZzL3Byb2MvYmFzZS5jOjg4OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9mc19zdHJ1Y3QuaFxcdTAwM2VcXG5mcy9wcm9jL2Jhc2UuYy04OS0jaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbi0tXFxuZnMvcHJvYy90YXNrX25vbW11LmMtNS0jaW5jbHVkZSBcXHUwMDNjbGludXgvZmR0YWJsZS5oXFx1MDAzZVxcbmZzL3Byb2MvdGFza19ub21tdS5jOjY6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzX3N0cnVjdC5oXFx1MDAzZVxcbmZzL3Byb2MvdGFza19ub21tdS5jLTctI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vdW50LmhcXHUwMDNlXFxuLS1cXG5mcy9wcm9jX25hbWVzcGFjZS5jLTEyLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zZWN1cml0eS5oXFx1MDAzZVxcbmZzL3Byb2NfbmFtZXNwYWNlLmM6MTM6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzX3N0cnVjdC5oXFx1MDAzZVxcbmZzL3Byb2NfbmFtZXNwYWNlLmMtMTQtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkL3Rhc2suaFxcdTAwM2VcXG4tLVxcbmZzL3NtYi9jbGllbnQvZmlsZS5jLTExLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9mcy5oXFx1MDAzZVxcbmZzL3NtYi9jbGllbnQvZmlsZS5jOjEyOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9mc19zdHJ1Y3QuaFxcdTAwM2VcXG5mcy9zbWIvY2xpZW50L2ZpbGUuYy0xMy0jaW5jbHVkZSBcXHUwMDNjbGludXgvZmlsZWxvY2suaFxcdTAwM2VcXG4tLVxcbmZzL3NtYi9jbGllbnQvaW5vZGUuYy04LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9mcy5oXFx1MDAzZVxcbmZzL3NtYi9jbGllbnQvaW5vZGUuYzo5OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9mc19zdHJ1Y3QuaFxcdTAwM2VcXG5mcy9zbWIvY2xpZW50L2lub2RlLmMtMTAtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N0YXQuaFxcdTAwM2VcXG4tLVxcbmZzL3NtYi9jbGllbnQvc21iMW9wcy5jLTktI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Zmcy5oXFx1MDAzZVxcbmZzL3NtYi9jbGllbnQvc21iMW9wcy5jOjEwOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9mc19zdHJ1Y3QuaFxcdTAwM2VcXG5mcy9zbWIvY2xpZW50L3NtYjFvcHMuYy0xMS0jaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9tYWdpYy5oXFx1MDAzZVxcbi0tXFxuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jLTUtICpcXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmM6NjogKiBFYWNoIHRlc3QgcnVucyBhZ2FpbnN0IHRoaXMgdGFzaydzIG93biBmc19zdHJ1Y3QuIFdlIHVuc2hhcmUgaXQgZmlyc3RcXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmMtNy0gKiBzbyB3ZSBvbmx5IGV2ZXIgdG91Y2ggYSBwcml2YXRlIGNvcHksIG5ldmVyIHRoZSBzaGFyZWQgb25lLCBhbmQgd2VcXG4tLVxcbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYy0xMC0jaW5jbHVkZSBcXHUwMDNja3VuaXQvdGVzdC5oXFx1MDAzZVxcbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYzoxMTojaW5jbHVkZSBcXHUwMDNjbGludXgvZnNfc3RydWN0LmhcXHUwMDNlXFxuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jLTEyLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9uYW1laS5oXFx1MDAzZVxcbi0tXFxuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jPTI0PXN0YXRpYyBpbnQgbnVsbF9mc19zZXR1cChzdHJ1Y3QgbnVsbF9mc19jdHggKmN0eClcXG4tLVxcbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYy0yNy1cXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmM6Mjg6XFx0ZXJyID0gdW5zaGFyZV9mc19zdHJ1Y3QoKTtcXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmMtMjktXFx0aWYgKGVycilcXG4tLVxcbmluY2x1ZGUvbGludXgvZnNfc3RydWN0LmgtOS1cXG5pbmNsdWRlL2xpbnV4L2ZzX3N0cnVjdC5oOjEwOnN0cnVjdCBmc19zdHJ1Y3Qge1xcbmluY2x1ZGUvbGludXgvZnNfc3RydWN0LmgtMTEtXFx0aW50IHVzZXJzO1xcbi0tXFxuaW5jbHVkZS9saW51eC9mc19zdHJ1Y3QuaC0yMy1cXHQgKiBUaGUgcm9vdCBkaXJlY3RvcnkgZm9yIHRoZSB0YXNrKHMpIHRoYXQgcG9pbnRzIHRvIHRoaXNcXG5pbmNsdWRlL2xpbnV4L2ZzX3N0cnVjdC5oOjI0OlxcdCAqIGBmc19zdHJ1Y3RgLiBUaGUgcm9vdCBkaXJlY3RvcnkgYWxzbyBjb250cm9scyBob3cgYC4uYFxcbmluY2x1ZGUvbGludXgvZnNfc3RydWN0LmgtMjUtXFx0ICogcmVzb2x2ZTsgcGF0aCB0cmF2ZXJzYWwgaXMgbm90IGFsbG93ZWQgdG8gcmVzb2x2ZSB1cHdhcmRzXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZzX3N0cnVjdC5oLTM2LVxcdCAqIFRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGZvciB0aGUgdGFzayhzKSB0aGF0IHBvaW50cyB0b1xcbmluY2x1ZGUvbGludXgvZnNfc3RydWN0Lmg6Mzc6XFx0ICogdGhpcyBgZnNfc3RydWN0YC5cXG5pbmNsdWRlL2xpbnV4L2ZzX3N0cnVjdC5oLTM4LVxcdCAqXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZzX3N0cnVjdC5oPTQ3PWV4dGVybiB2b2lkIGV4aXRfZnMoc3RydWN0IHRhc2tfc3RydWN0ICopO1xcbmluY2x1ZGUvbGludXgvZnNfc3RydWN0Lmg6NDg6ZXh0ZXJuIHZvaWQgc2V0X2ZzX3Jvb3Qoc3RydWN0IGZzX3N0cnVjdCAqLCBjb25zdCBzdHJ1Y3QgcGF0aCAqKTtcXG5pbmNsdWRlL2xpbnV4L2ZzX3N0cnVjdC5oOjQ5OmV4dGVybiB2b2lkIHNldF9mc19wd2Qoc3RydWN0IGZzX3N0cnVjdCAqLCBjb25zdCBzdHJ1Y3QgcGF0aCAqKTtcXG5pbmNsdWRlL2xpbnV4L2ZzX3N0cnVjdC5oOjUwOmV4dGVybiBzdHJ1Y3QgZnNfc3RydWN0ICpjb3B5X2ZzX3N0cnVjdChzdHJ1Y3QgZnNfc3RydWN0ICopO1xcbmluY2x1ZGUvbGludXgvZnNfc3RydWN0Lmg6NTE6ZXh0ZXJuIHZvaWQgZnJlZV9mc19zdHJ1Y3Qoc3RydWN0IGZzX3N0cnVjdCAqKTtcXG5pbmNsdWRlL2xpbnV4L2ZzX3N0cnVjdC5oOjUyOmV4dGVybiBpbnQgdW5zaGFyZV9mc19zdHJ1Y3Qodm9pZCk7XFxuaW5jbHVkZS9saW51eC9mc19zdHJ1Y3QuaC01My1cXG5pbmNsdWRlL2xpbnV4L2ZzX3N0cnVjdC5oOjU0OnN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfZnNfcm9vdChzdHJ1Y3QgZnNfc3RydWN0ICpmcywgc3RydWN0IHBhdGggKnJvb3QpXFxuaW5jbHVkZS9saW51eC9mc19zdHJ1Y3QuaC01NS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZzX3N0cnVjdC5oLTYxLVxcbmluY2x1ZGUvbGludXgvZnNfc3RydWN0Lmg6NjI6c3RhdGljIGlubGluZSB2b2lkIGdldF9mc19wd2Qoc3RydWN0IGZzX3N0cnVjdCAqZnMsIHN0cnVjdCBwYXRoICpwd2QpXFxuaW5jbHVkZS9saW51eC9mc19zdHJ1Y3QuaC02My17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2luaXRfdGFzay5oPTI1PWV4dGVybiBzdHJ1Y3QgZmlsZXNfc3RydWN0IGluaXRfZmlsZXM7XFxuaW5jbHVkZS9saW51eC9pbml0X3Rhc2suaDoyNjpleHRlcm4gc3RydWN0IGZzX3N0cnVjdCBpbml0X2ZzO1xcbmluY2x1ZGUvbGludXgvaW5pdF90YXNrLmgtMjctZXh0ZXJuIHN0cnVjdCBuc3Byb3h5IGluaXRfbnNwcm94eTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW50X25hbWVzcGFjZS5oPTk9c3RydWN0IG1udF9uYW1lc3BhY2U7XFxuaW5jbHVkZS9saW51eC9tbnRfbmFtZXNwYWNlLmg6MTA6c3RydWN0IGZzX3N0cnVjdDtcXG5pbmNsdWRlL2xpbnV4L21udF9uYW1lc3BhY2UuaC0xMS1zdHJ1Y3QgdXNlcl9uYW1lc3BhY2U7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21udF9uYW1lc3BhY2UuaD0xNj1leHRlcm4gc3RydWN0IG1udF9uYW1lc3BhY2UgKmNvcHlfbW50X25zKHU2NCwgc3RydWN0IG1udF9uYW1lc3BhY2UgKixcXG5pbmNsdWRlL2xpbnV4L21udF9uYW1lc3BhY2UuaDoxNzpcXHRcXHRzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKiwgc3RydWN0IGZzX3N0cnVjdCAqKTtcXG5pbmNsdWRlL2xpbnV4L21udF9uYW1lc3BhY2UuaC0xOC1leHRlcm4gdm9pZCBwdXRfbW50X25zKHN0cnVjdCBtbnRfbmFtZXNwYWNlICpucyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25hbWVpLmgtOS0jaW5jbHVkZSBcXHUwMDNjbGludXgvZXJybm8uaFxcdTAwM2VcXG5pbmNsdWRlL2xpbnV4L25hbWVpLmg6MTA6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzX3N0cnVjdC5oXFx1MDAzZVxcbmluY2x1ZGUvbGludXgvbmFtZWkuaC0xMS1cXG4tLVxcbmluY2x1ZGUvbGludXgvbnNwcm94eS5oPTEzPXN0cnVjdCBjZ3JvdXBfbmFtZXNwYWNlO1xcbmluY2x1ZGUvbGludXgvbnNwcm94eS5oOjE0OnN0cnVjdCBmc19zdHJ1Y3Q7XFxuaW5jbHVkZS9saW51eC9uc3Byb3h5LmgtMTUtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25zcHJveHkuaD01ND1zdHJ1Y3QgbnNzZXQge1xcbi0tXFxuaW5jbHVkZS9saW51eC9uc3Byb3h5LmgtNTYtXFx0c3RydWN0IG5zcHJveHkgKm5zcHJveHk7XFxuaW5jbHVkZS9saW51eC9uc3Byb3h5Lmg6NTc6XFx0c3RydWN0IGZzX3N0cnVjdCAqZnM7XFxuaW5jbHVkZS9saW51eC9uc3Byb3h5LmgtNTgtXFx0Y29uc3Qgc3RydWN0IGNyZWQgKmNyZWQ7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25zcHJveHkuaD0xMDM9aW50IHVuc2hhcmVfbnNwcm94eV9uYW1lc3BhY2VzKHVuc2lnbmVkIGxvbmcsIHN0cnVjdCBuc3Byb3h5ICoqLFxcbmluY2x1ZGUvbGludXgvbnNwcm94eS5oOjEwNDpcXHRzdHJ1Y3QgY3JlZCAqLCBzdHJ1Y3QgZnNfc3RydWN0ICopO1xcbmluY2x1ZGUvbGludXgvbnNwcm94eS5oLTEwNS1pbnQgX19pbml0IG5zcHJveHlfY2FjaGVfaW5pdCh2b2lkKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQuaD02Nj1zdHJ1Y3QgY2ZzX3JxO1xcbmluY2x1ZGUvbGludXgvc2NoZWQuaDo2NzpzdHJ1Y3QgZnNfc3RydWN0O1xcbmluY2x1ZGUvbGludXgvc2NoZWQuaC02OC1zdHJ1Y3QgaW9fY29udGV4dDtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQuaD04MjY9c3RydWN0IHRhc2tfc3RydWN0IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xMTkzLVxcdC8qIEZpbGVzeXN0ZW0gaW5mb3JtYXRpb246ICovXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oOjExOTQ6XFx0c3RydWN0IGZzX3N0cnVjdFxcdFxcdCpmcztcXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTE5NS1cXG4tLVxcbmluaXQvZG9fbW91bnRzLmMtMTYtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2FzeW5jLmhcXHUwMDNlXFxuaW5pdC9kb19tb3VudHMuYzoxNzojaW5jbHVkZSBcXHUwMDNjbGludXgvZnNfc3RydWN0LmhcXHUwMDNlXFxuaW5pdC9kb19tb3VudHMuYy0xOC0jaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbi0tXFxua2VybmVsL2F1ZGl0c2MuYy01Ny0jaW5jbHVkZSBcXHUwMDNjbGludXgvY2FwYWJpbGl0eS5oXFx1MDAzZVxcbmtlcm5lbC9hdWRpdHNjLmM6NTg6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzX3N0cnVjdC5oXFx1MDAzZVxcbmtlcm5lbC9hdWRpdHNjLmMtNTktI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbXBhdC5oXFx1MDAzZVxcbi0tXFxua2VybmVsL2V4aXQuYy01Mi0jaW5jbHVkZSBcXHUwMDNjbGludXgvdGFza193b3JrLmhcXHUwMDNlXFxua2VybmVsL2V4aXQuYzo1MzojaW5jbHVkZSBcXHUwMDNjbGludXgvZnNfc3RydWN0LmhcXHUwMDNlXFxua2VybmVsL2V4aXQuYy01NC0jaW5jbHVkZSBcXHUwMDNjbGludXgvaW5pdF90YXNrLmhcXHUwMDNlXFxuLS1cXG5rZXJuZWwvZm9yay5jLTgyLSNpbmNsdWRlIFxcdTAwM2NsaW51eC90dHkuaFxcdTAwM2VcXG5rZXJuZWwvZm9yay5jOjgzOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9mc19zdHJ1Y3QuaFxcdTAwM2VcXG5rZXJuZWwvZm9yay5jLTg0LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9tYWdpYy5oXFx1MDAzZVxcbi0tXFxua2VybmVsL2ZvcmsuYz00Nzc9c3RydWN0IGttZW1fY2FjaGUgKmZpbGVzX2NhY2hlcDtcXG5rZXJuZWwvZm9yay5jLTQ3OC1cXG5rZXJuZWwvZm9yay5jOjQ3OTovKiBTTEFCIGNhY2hlIGZvciBmc19zdHJ1Y3Qgc3RydWN0dXJlcyAodHNrLVxcdTAwM2VmcykgKi9cXG5rZXJuZWwvZm9yay5jLTQ4MC1zdHJ1Y3Qga21lbV9jYWNoZSAqZnNfY2FjaGVwO1xcbi0tXFxua2VybmVsL2ZvcmsuYz0xNjE2PXN0YXRpYyBpbnQgY29weV9mcyh1NjQgY2xvbmVfZmxhZ3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbmtlcm5lbC9mb3JrLmMtMTYxNy17XFxua2VybmVsL2ZvcmsuYzoxNjE4OlxcdHN0cnVjdCBmc19zdHJ1Y3QgKmZzID0gY3VycmVudC1cXHUwMDNlZnM7XFxua2VybmVsL2ZvcmsuYy0xNjE5LVxcdGlmIChjbG9uZV9mbGFncyBcXHUwMDI2IENMT05FX0ZTKSB7XFxuLS1cXG5rZXJuZWwvZm9yay5jLTE2MzAtXFx0fVxcbmtlcm5lbC9mb3JrLmM6MTYzMTpcXHR0c2stXFx1MDAzZWZzID0gY29weV9mc19zdHJ1Y3QoZnMpO1xcbmtlcm5lbC9mb3JrLmMtMTYzMi1cXHRpZiAoIXRzay1cXHUwMDNlZnMpXFxuLS1cXG5rZXJuZWwvZm9yay5jPTMxMTU9dm9pZCBfX2luaXQgcHJvY19jYWNoZXNfaW5pdCh2b2lkKVxcbi0tXFxua2VybmVsL2ZvcmsuYy0zMTMwLVxcdGZzX2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKFxcXCJmc19jYWNoZVxcXCIsXFxua2VybmVsL2ZvcmsuYzozMTMxOlxcdFxcdFxcdHNpemVvZihzdHJ1Y3QgZnNfc3RydWN0KSwgMCxcXG5rZXJuZWwvZm9yay5jLTMxMzItXFx0XFx0XFx0U0xBQl9IV0NBQ0hFX0FMSUdOfFNMQUJfUEFOSUN8U0xBQl9BQ0NPVU5ULFxcbi0tXFxua2VybmVsL2ZvcmsuYz0zMTQxPXN0YXRpYyBpbnQgY2hlY2tfdW5zaGFyZV9mbGFncyh1bnNpZ25lZCBsb25nIHVuc2hhcmVfZmxhZ3MpXFxuLS1cXG5rZXJuZWwvZm9yay5jLTMxNzEtICovXFxua2VybmVsL2ZvcmsuYzozMTcyOnN0YXRpYyBpbnQgdW5zaGFyZV9mcyh1bnNpZ25lZCBsb25nIHVuc2hhcmVfZmxhZ3MsIHN0cnVjdCBmc19zdHJ1Y3QgKipuZXdfZnNwKVxcbmtlcm5lbC9mb3JrLmMtMzE3My17XFxua2VybmVsL2ZvcmsuYzozMTc0OlxcdHN0cnVjdCBmc19zdHJ1Y3QgKmZzID0gY3VycmVudC1cXHUwMDNlZnM7XFxua2VybmVsL2ZvcmsuYy0zMTc1LVxcbi0tXFxua2VybmVsL2ZvcmsuYy0zMTgyLVxcbmtlcm5lbC9mb3JrLmM6MzE4MzpcXHQqbmV3X2ZzcCA9IGNvcHlfZnNfc3RydWN0KGZzKTtcXG5rZXJuZWwvZm9yay5jLTMxODQtXFx0aWYgKCEqbmV3X2ZzcClcXG4tLVxcbmtlcm5lbC9mb3JrLmM9MzIxNj1pbnQga3N5c191bnNoYXJlKHVuc2lnbmVkIGxvbmcgdW5zaGFyZV9mbGFncylcXG5rZXJuZWwvZm9yay5jLTMyMTcte1xcbmtlcm5lbC9mb3JrLmM6MzIxODpcXHRzdHJ1Y3QgZnNfc3RydWN0ICpmcywgKm5ld19mcyA9IE5VTEw7XFxua2VybmVsL2ZvcmsuYy0zMjE5LVxcdHN0cnVjdCBmaWxlc19zdHJ1Y3QgKm5ld19mZCA9IE5VTEw7XFxuLS1cXG5rZXJuZWwvZm9yay5jLTMzMzMtXFx0aWYgKG5ld19mcylcXG5rZXJuZWwvZm9yay5jOjMzMzQ6XFx0XFx0ZnJlZV9mc19zdHJ1Y3QobmV3X2ZzKTtcXG5rZXJuZWwvZm9yay5jLTMzMzUtXFxuLS1cXG5rZXJuZWwvbnNwcm94eS5jLTIyLSNpbmNsdWRlIFxcdTAwM2NsaW51eC90aW1lX25hbWVzcGFjZS5oXFx1MDAzZVxcbmtlcm5lbC9uc3Byb3h5LmM6MjM6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzX3N0cnVjdC5oXFx1MDAzZVxcbmtlcm5lbC9uc3Byb3h5LmMtMjQtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Byb2NfZnMuaFxcdTAwM2VcXG4tLVxcbmtlcm5lbC9uc3Byb3h5LmM9ODg9c3RhdGljIHN0cnVjdCBuc3Byb3h5ICpjcmVhdGVfbmV3X25hbWVzcGFjZXModTY0IGZsYWdzLFxcbmtlcm5lbC9uc3Byb3h5LmMtODktXFx0c3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucyxcXG5rZXJuZWwvbnNwcm94eS5jOjkwOlxcdHN0cnVjdCBmc19zdHJ1Y3QgKm5ld19mcylcXG5rZXJuZWwvbnNwcm94eS5jLTkxLXtcXG4tLVxcbmtlcm5lbC9uc3Byb3h5LmM9MjExPWludCB1bnNoYXJlX25zcHJveHlfbmFtZXNwYWNlcyh1bnNpZ25lZCBsb25nIHVuc2hhcmVfZmxhZ3MsXFxua2VybmVsL25zcHJveHkuYzoyMTI6XFx0c3RydWN0IG5zcHJveHkgKipuZXdfbnNwLCBzdHJ1Y3QgY3JlZCAqbmV3X2NyZWQsIHN0cnVjdCBmc19zdHJ1Y3QgKm5ld19mcylcXG5rZXJuZWwvbnNwcm94eS5jLTIxMy17XFxuLS1cXG5rZXJuZWwvbnNwcm94eS5jPTMzOD1zdGF0aWMgdm9pZCBwdXRfbnNzZXQoc3RydWN0IG5zc2V0ICpuc3NldClcXG4tLVxcbmtlcm5lbC9uc3Byb3h5LmMtMzQ4LVxcdGlmIChuc3NldC1cXHUwMDNlZnMgXFx1MDAyNlxcdTAwMjYgKGZsYWdzIFxcdTAwMjYgQ0xPTkVfTkVXTlMpIFxcdTAwMjZcXHUwMDI2IChmbGFncyBcXHUwMDI2IH5DTE9ORV9ORVdOUykpXFxua2VybmVsL25zcHJveHkuYzozNDk6XFx0XFx0ZnJlZV9mc19zdHJ1Y3QobnNzZXQtXFx1MDAzZWZzKTtcXG5rZXJuZWwvbnNwcm94eS5jLTM1MC1cXHRpZiAobnNzZXQtXFx1MDAzZW5zcHJveHkpXFxuLS1cXG5rZXJuZWwvbnNwcm94eS5jPTM1ND1zdGF0aWMgaW50IHByZXBhcmVfbnNzZXQodW5zaWduZWQgZmxhZ3MsIHN0cnVjdCBuc3NldCAqbnNzZXQpXFxuLS1cXG5rZXJuZWwvbnNwcm94eS5jLTM2OC1cXG5rZXJuZWwvbnNwcm94eS5jOjM2OTpcXHQvKiBPbmx5IGNyZWF0ZSBhIHRlbXBvcmFyeSBjb3B5IG9mIGZzX3N0cnVjdCBpZiB3ZSByZWFsbHkgbmVlZCB0by4gKi9cXG5rZXJuZWwvbnNwcm94eS5jLTM3MC1cXHRpZiAoZmxhZ3MgPT0gQ0xPTkVfTkVXTlMpIHtcXG4tLVxcbmtlcm5lbC9uc3Byb3h5LmMtMzcyLVxcdH0gZWxzZSBpZiAoZmxhZ3MgXFx1MDAyNiBDTE9ORV9ORVdOUykge1xcbmtlcm5lbC9uc3Byb3h5LmM6MzczOlxcdFxcdG5zc2V0LVxcdTAwM2VmcyA9IGNvcHlfZnNfc3RydWN0KG1lLVxcdTAwM2Vmcyk7XFxua2VybmVsL25zcHJveHkuYy0zNzQtXFx0XFx0aWYgKCFuc3NldC1cXHUwMDNlZnMpXFxuLS1cXG5rZXJuZWwvbnNwcm94eS5jPTUzNT1zdGF0aWMgdm9pZCBjb21taXRfbnNzZXQoc3RydWN0IG5zc2V0ICpuc3NldClcXG4tLVxcbmtlcm5lbC9uc3Byb3h5LmMtNTQ3LVxcbmtlcm5lbC9uc3Byb3h5LmM6NTQ4OlxcdC8qIFdlIG9ubHkgbmVlZCB0byBjb21taXQgaWYgd2UgaGF2ZSB1c2VkIGEgdGVtcG9yYXJ5IGZzX3N0cnVjdC4gKi9cXG5rZXJuZWwvbnNwcm94eS5jLTU0OS1cXHRpZiAoKGZsYWdzIFxcdTAwMjYgQ0xPTkVfTkVXTlMpIFxcdTAwMjZcXHUwMDI2IChmbGFncyBcXHUwMDI2IH5DTE9ORV9ORVdOUykpIHtcXG4tLVxcbmtlcm5lbC9zeXMuYy0zOC0jaW5jbHVkZSBcXHUwMDNjbGludXgvcHRyYWNlLmhcXHUwMDNlXFxua2VybmVsL3N5cy5jOjM5OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9mc19zdHJ1Y3QuaFxcdTAwM2VcXG5rZXJuZWwvc3lzLmMtNDAtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZpbGUuaFxcdTAwM2VcXG4tLVxcbmtlcm5lbC91bWguYy0xNS0jaW5jbHVkZSBcXHUwMDNjbGludXgvZmlsZS5oXFx1MDAzZVxcbmtlcm5lbC91bWguYzoxNjojaW5jbHVkZSBcXHUwMDNjbGludXgvZnNfc3RydWN0LmhcXHUwMDNlXFxua2VybmVsL3VtaC5jLTE3LSNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JrcXVldWUuaFxcdTAwM2VcXG4tLVxcbmtlcm5lbC91bWguYz02Mz1zdGF0aWMgaW50IGNhbGxfdXNlcm1vZGVoZWxwZXJfZXhlY19hc3luYyh2b2lkICpkYXRhKVxcbi0tXFxua2VybmVsL3VtaC5jLTc2LVxcdCAqIHRocmVhZCB0aGF0IGlzIGdvaW5nIHRvIGV4ZWN2ZSBhIHVzZXIgcHJvY2VzcyBhbmQgaGFzIGl0cyBvd25cXG5rZXJuZWwvdW1oLmM6Nzc6XFx0ICogJ3N0cnVjdCBmc19zdHJ1Y3QnLiBSZXNldCB1bWFzayB0byB0aGUgZGVmYXVsdC5cXG5rZXJuZWwvdW1oLmMtNzgtXFx0ICovXFxuLS1cXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYy0yMC0jaW5jbHVkZSBcXHUwMDNjbGludXgvcHJvamlkLmhcXHUwMDNlXFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmM6MjE6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzX3N0cnVjdC5oXFx1MDAzZVxcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jLTIyLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9ic2VhcmNoLmhcXHUwMDNlXFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmMtODctI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzLmhcXHUwMDNlXFxubmV0L3VuaXgvYWZfdW5peC5jOjg4OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9mc19zdHJ1Y3QuaFxcdTAwM2VcXG5uZXQvdW5peC9hZl91bml4LmMtODktI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2luaXQuaFxcdTAwM2VcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL3BhdGguYy0xNy0jaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbnNlY3VyaXR5L2FwcGFybW9yL3BhdGguYzoxODojaW5jbHVkZSBcXHUwMDNjbGludXgvZnNfc3RydWN0LmhcXHUwMDNlXFxuc2VjdXJpdHkvYXBwYXJtb3IvcGF0aC5jLTE5LVxcbi0tXFxuc2VjdXJpdHkvaXBlL2hvb2tzLmMtNi0jaW5jbHVkZSBcXHUwMDNjbGludXgvZnMuaFxcdTAwM2VcXG5zZWN1cml0eS9pcGUvaG9va3MuYzo3OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9mc19zdHJ1Y3QuaFxcdTAwM2VcXG5zZWN1cml0eS9pcGUvaG9va3MuYy04LSNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwNzoxOTo1Ni45ODY5NDM0MzZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTU4Nzk2NjY4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBOVUxMX1JPT1RfQ1dEX0tVTklUX1RFU1QgU2NlbmFyaW8qKlxuXG5Pa2F5LCBzbyBJIHNhdyB0aGF0IGBOVUxMX1JPT1RfQ1dEX0tVTklUX1RFU1RgIGluIGBmcy9LY29uZmlnYCwgYW5kIG15IGZpcnN0IHRob3VnaHQgaXMsIFwiV2hhdCBvdGhlciB3YXlzIGFyZSB0aGVyZSBmb3IgdGhpcyBjb25kaXRpb24gdG8gYmUgdHJpZ2dlcmVkP1wiIE5vdywgaWYgYm90aCBgZnMtXHUwMDNlcm9vdGAgYW5kIGBmcy1cdTAwM2Vwd2RgIGFyZSBudWxsLCB0aGF0IGludHJpbnNpY2FsbHkgbWVhbnMgYGZzLVx1MDAzZXJvb3QubW50YCBpcyBhbHNvIE5VTEwuIFNvIEkgbmVlZCB0byB0cmFjZSBob3cgYGZzX3N0cnVjdGAgaXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZC5cblxuTGV0IG1lIHRoaW5rLi4uIElzIGBmc19zdHJ1Y3RgIGNyZWF0ZWQgaW4gYGNvcHlfZnNfc3RydWN0YCBvciB3aXRoIGBrbWVtX2NhY2hlX2FsbG9jYD8gQW5kIGlmIGl0J3MgdGhlIGxhdHRlciwgZG9lcyBpdCB1c2UgYEdGUF9aRVJPYD8gSWYgbm90LCB0aGUgc3RydWN0dXJlIGlzbid0IHplcm9lZCBvdXQuIE9oIHdhaXQsIGBjb3B5X2ZzX3N0cnVjdGAgYWN0dWFsbHkgY29waWVzIGFuIGV4aXN0aW5nIG9uZS4gVGhhdCdzIGdvb2QgdG8ga25vdy5cblxuTm93LCBsZXQncyBsb29rIGF0IGhvdyBgaW5pdF9mc2AgaXMgaW5pdGlhbGl6ZWQ6XG5cbmBgYGNcbnN0cnVjdCBmc19zdHJ1Y3QgaW5pdF9mcyA9IHtcblx0LnVzZXJzXHRcdD0gMSxcblx0LmxvY2tcdFx0PSBfX1NQSU5fTE9DS19VTkxPQ0tFRChpbml0X2ZzLmxvY2spLFxuXHQuc2VxXHRcdD0gX19TRVFMT0NLX1VOTE9DS0VEKGluaXRfZnMuc2VxKSxcblx0LnVtYXNrXHRcdD0gMDAyMixcbn07XG5gYGBcblxuUmlnaHQsIHRoaXMgZG9lc24ndCBpbml0aWFsaXplIGAucm9vdGAgb3IgYC5wd2RgISBCdXQuLi4gYGluaXRfZnNgIGlzIHN0YXRpY2FsbHkgYWxsb2NhdGVkLCBzbyBpdCAqaXMqIHplcm9lZCBvdXQsIG1lYW5pbmcgYGluaXRfZnMucm9vdC5tbnRgIGlzIGluZGVlZCBOVUxMIGluaXRpYWxseS4gT2theSwgc28gd2hlbiBkb2VzIGl0IGdldCBpdHMgcm9vdCBhbmQgcHdkIHNldD9cblxuQWgsIGl0J3Mgc2V0IGluIGBpbml0X21vdW50X3RyZWUoKWA6XG5cbmBgYGNcblx0c2V0X2ZzX3B3ZChjdXJyZW50LVx1MDAzZWZzLCBcdTAwMjZyb290KTtcblx0c2V0X2ZzX3Jvb3QoY3VycmVudC1cdTAwM2VmcywgXHUwMDI2cm9vdCk7XG5gYGBcblxuU28sIGJlZm9yZSBgaW5pdF9tb3VudF90cmVlKClgIGlzIGNhbGxlZCwgYGluaXRfZnNgIHdpbGwgaGF2ZSB0aGF0IE5VTEwgcm9vdCBhbmQgcHdkLiBBcmUgdGhlcmUgYW55IHRhc2tzIHJ1bm5pbmcgYmVmb3JlIHRoYXQgcG9pbnQ/IERlZmluaXRlbHkuIEtlcm5lbCB0aHJlYWRzLiBBbmQgdGhvc2UgdGhyZWFkcyBzaGFyZSBgaW5pdF9mc2AgKG9yIHRoZXknbGwgaGF2ZSB0aGVpciBvd24gY29weSwgYnV0IHRoZXkgd2lsbCBpbml0aWFsbHkgaW5oZXJpdCB0aGUgcGFyZW50KS5cblxuV2FpdCwgdGhlIGBpbml0X3Rhc2tgIHVzZXMgYGluaXRfZnNgLiBBbmQga2VybmVsIHRocmVhZHMgY3JlYXRlZCBieSBga3RocmVhZF9jcmVhdGVgIGluaGVyaXQgdGhlIGBpbml0X3Rhc2tgJ3MgYGZzX3N0cnVjdGAsIHdoaWNoICppcyogYGluaXRfZnNgLlxuXG5Ob3csIHdoZXJlIGlzIGBpbml0X21vdW50X3RyZWVgIGNhbGxlZD8gSW4gYHZmc19jYWNoZXNfaW5pdCgpYCwgd2hpY2ggaXMgY2FsbGVkIHByZXR0eSBlYXJseSBpbiBgc3RhcnRfa2VybmVsKClgLiBPa2F5LiBUaGF0J3MgYSBnb29kIHBpZWNlIG9mIHRoZSBwdXp6bGUuXG5cbkJ1dCB3YWl0LCB3aGF0IGFib3V0IGBpb191cmluZ2A/IEl0IGNyZWF0ZXMgd29ya2VyIHRocmVhZHMuIERvIHRob3NlIHRocmVhZHMgaGF2ZSBhbiBgZnNfc3RydWN0YD8gVGhlIHBhdGNoIGRlc2NyaXB0aW9uIHNheXMgaXQgc3VwcG9ydHMgdGFza3Mgd2l0aCBudWxsIHJvb3QvY3dkLiBSaWdodCwgc28gbm93IG15IGZvY3VzIGlzIG9uIHdoZXRoZXIgYGlvX3VyaW5nYCBjYW4gY3JlYXRlIHRoaXMgc2l0dWF0aW9uLCBvciBpZiB0aGVyZSdzIGFueSBvdGhlciBjb2RlIHBhdGggdGhhdCBtaWdodCBzZXQgdGhvc2UgcG9pbnRlcnMgdG8gTlVMTC4gSSBkb24ndCBoYXZlIHRoZSBmdWxsIGNvbW1pdCBtZXNzYWdlIGhhbmR5IHRvIHZlcmlmeSwgYnV0IHRoZSBLVW5pdCB0ZXN0IHNwZWNpZmljYWxseSBzZXRzIGBmcy1cdTAwM2Vyb290YCBhbmQgYGZzLVx1MDAzZXB3ZGAgdG8gTlVMTC4gU28sIHRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBleHBsaWNpdGx5IHNldCBlbHNld2hlcmU/IElzIGl0IHBvc3NpYmxlIGZvciBgaW9fdXJpbmdgIHRvIHNldCB0aGlzIHRvIE5VTEw/IFRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBsaWtlbHkgc3VzcGVjdCB0byBtZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk1MzYsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDc6MjA6MDYuNTc0OTEzNjlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMjIyODY5MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2V0X2ZzXy4qbnVsbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmM9NzE9c3RhdGljIHZvaWQgbnVsbF9yb290X3Rlc3Qoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jLTc1LVxcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCBudWxsX2ZzX3NldHVwKFxcdTAwMjZjdHgpLCAwKTtcXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmM6NzY6XFx0c2V0X2ZzX3Jvb3QoY3VycmVudC1cXHUwMDNlZnMsIFxcdTAwMjZudWxsX3BhdGgpO1xcbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYy03Ny1cXG4tLVxcbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYz05Nz1zdGF0aWMgdm9pZCBudWxsX2N3ZF90ZXN0KHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYy0xMDEtXFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIG51bGxfZnNfc2V0dXAoXFx1MDAyNmN0eCksIDApO1xcbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYzoxMDI6XFx0c2V0X2ZzX3B3ZChjdXJyZW50LVxcdTAwM2VmcywgXFx1MDAyNm51bGxfcGF0aCk7XFxuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jLTEwMy1cXG4tLVxcbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYz0xMTg9c3RhdGljIHZvaWQgbnVsbF9yb290X2FuZF9jd2RfdGVzdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmMtMTIyLVxcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCBudWxsX2ZzX3NldHVwKFxcdTAwMjZjdHgpLCAwKTtcXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmM6MTIzOlxcdHNldF9mc19yb290KGN1cnJlbnQtXFx1MDAzZWZzLCBcXHUwMDI2bnVsbF9wYXRoKTtcXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmM6MTI0OlxcdHNldF9mc19wd2QoY3VycmVudC1cXHUwMDNlZnMsIFxcdTAwMjZudWxsX3BhdGgpO1xcbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYy0xMjUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA3OjIwOjExLjg5NzIwOTA0NloiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTM0MTg4Nzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgSSdtIHRoaW5raW5nIHRoZXNlIHRoaW5ncyBteXNlbGY6XG5cbioqQSBQb3RlbnRpYWxseSBFbGVnYW50IFNvbHV0aW9uIEVtZXJnZXMqKlxuXG5SaWdodCwgaG9sZCBvbiBhIHNlY29uZC4gSSd2ZSBiZWVuIHdyZXN0bGluZyB3aXRoIHRoaXMgcHJvYmxlbSBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIG1vc3QgZWZmaWNpZW50IHdheSB0byBwaW5wb2ludCB0aGUgaXNzdWUgd2l0aGluIHRoaXMgY29tcGxleCB0cmVlIHN0cnVjdHVyZS4gQnV0IHdhaXQuLi4gYSB0aG91Z2h0IGp1c3QgY2xpY2tlZC4gSW5zdGVhZCBvZiB0cnlpbmcgdG8gaXRlcmF0aXZlbHkgdHJhY2Ugc3BlY2lmaWMgcGF0aHMgb3IgY29uZGl0aW9ucywgSSByZWFsaXplIEkgY2FuIGxldmVyYWdlIGEgbW9yZSBnbG9iYWwgYXBwcm9hY2guIEkgY2FuIHNpbXBseSBzZWFyY2ggZm9yIGBudWxsX3BhdGhgIHRocm91Z2hvdXQgdGhlICplbnRpcmUqIHRyZWUuIFRoaXMga2V5d29yZCB3aWxsIHF1aWNrbHkgcmV2ZWFsIHdoZXRoZXIgdGhhdCBpc3N1ZSBpcyBwcmVzZW50IGluIHRoZSB3aG9sZSB0cmVlIHdpdGhvdXQgaGF2aW5nIHRvIHdvcnJ5IGFib3V0IG1vcmUgY29udm9sdXRlZCBtZXRob2RzLiBUaGF0IHNob3VsZCB5aWVsZCB0aGUgYW5zd2VycyBJIG5lZWQuIEl0IGlzIGEgbW9yZSBkaXJlY3QgYXBwcm9hY2ggdGhhdCBzaG91bGQgc2F2ZSBhIGxvdCBvZiB0aW1lIGFuZCBwb3RlbnRpYWwgZXJyb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMzYwLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDc6MjA6MTUuNDMxNDAzMTQ1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjcyMjE2NjQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm51bGxfcGF0aFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmMtMTUtLyogVGhlIE5VTEwgcGF0aDogeyAubW50ID0gTlVMTCwgLmRlbnRyeSA9IE5VTEwgfS4gKi9cXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmM6MTY6c3RhdGljIGNvbnN0IHN0cnVjdCBwYXRoIG51bGxfcGF0aDtcXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmMtMTctXFxuLS1cXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmM9NzE9c3RhdGljIHZvaWQgbnVsbF9yb290X3Rlc3Qoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jLTc1LVxcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCBudWxsX2ZzX3NldHVwKFxcdTAwMjZjdHgpLCAwKTtcXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmM6NzY6XFx0c2V0X2ZzX3Jvb3QoY3VycmVudC1cXHUwMDNlZnMsIFxcdTAwMjZudWxsX3BhdGgpO1xcbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYy03Ny1cXG4tLVxcbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYz05Nz1zdGF0aWMgdm9pZCBudWxsX2N3ZF90ZXN0KHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYy0xMDEtXFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIG51bGxfZnNfc2V0dXAoXFx1MDAyNmN0eCksIDApO1xcbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYzoxMDI6XFx0c2V0X2ZzX3B3ZChjdXJyZW50LVxcdTAwM2VmcywgXFx1MDAyNm51bGxfcGF0aCk7XFxuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jLTEwMy1cXG4tLVxcbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYz0xMTg9c3RhdGljIHZvaWQgbnVsbF9yb290X2FuZF9jd2RfdGVzdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmMtMTIyLVxcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCBudWxsX2ZzX3NldHVwKFxcdTAwMjZjdHgpLCAwKTtcXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmM6MTIzOlxcdHNldF9mc19yb290KGN1cnJlbnQtXFx1MDAzZWZzLCBcXHUwMDI2bnVsbF9wYXRoKTtcXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmM6MTI0OlxcdHNldF9mc19wd2QoY3VycmVudC1cXHUwMDNlZnMsIFxcdTAwMjZudWxsX3BhdGgpO1xcbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYy0xMjUtXFxuLS1cXG5zZWN1cml0eS9sYW5kbG9jay9kb21haW4uYz03OT1zdGF0aWMgc3RydWN0IGxhbmRsb2NrX2RldGFpbHMgKmdldF9jdXJyZW50X2RldGFpbHModm9pZClcXG4tLVxcbnNlY3VyaXR5L2xhbmRsb2NrL2RvbWFpbi5jLTgxLVxcdC8qIENmLiBhdWRpdF9sb2dfZF9wYXRoX2V4ZSgpICovXFxuc2VjdXJpdHkvbGFuZGxvY2svZG9tYWluLmM6ODI6XFx0c3RhdGljIGNvbnN0IGNoYXIgbnVsbF9wYXRoW10gPSBcXFwiKG51bGwpXFxcIjtcXG5zZWN1cml0eS9sYW5kbG9jay9kb21haW4uYzo4MzpcXHRjb25zdCBjaGFyICpwYXRoX3N0ciA9IG51bGxfcGF0aDtcXG5zZWN1cml0eS9sYW5kbG9jay9kb21haW4uYzo4NDpcXHRzaXplX3QgcGF0aF9zaXplID0gc2l6ZW9mKG51bGxfcGF0aCk7XFxuc2VjdXJpdHkvbGFuZGxvY2svZG9tYWluLmMtODUtXFx0Y29uc3Qgdm9pZCAqYnVmZmVyIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbGFuZGxvY2svZnNfdGVzdC5jPTcxMDU9c3RhdGljIHZvaWQgbGF5ZXIzX2ZzX3RhZ19pbm9kZShzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpjb25zdCBfbWV0YWRhdGEsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9sYW5kbG9jay9mc190ZXN0LmMtNzExNi1cXHR9O1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2xhbmRsb2NrL2ZzX3Rlc3QuYzo3MTE3OlxcdGNvbnN0IGNoYXIgKmNvbnN0IGRldl9udWxsX3BhdGggPSBcXFwiL2Rldi9udWxsXFxcIjtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9sYW5kbG9jay9mc190ZXN0LmMtNzExOC1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2xhbmRsb2NrL2ZzX3Rlc3QuYy03MTIyLVxcdC8qIENoZWNrcyB3aXRob3V0IExhbmRsb2NrLiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2xhbmRsb2NrL2ZzX3Rlc3QuYzo3MTIzOlxcdEVYUEVDVF9FUSgwLCB0ZXN0X29wZW4oZGV2X251bGxfcGF0aCwgT19SRE9OTFkgfCBPX0NMT0VYRUMpKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9sYW5kbG9jay9mc190ZXN0LmMtNzEyNC1cXHRFWFBFQ1RfRVEoMCwgdGVzdF9vcGVuKHZhcmlhbnQtXFx1MDAzZWZpbGVfcGF0aCwgT19SRE9OTFkgfCBPX0NMT0VYRUMpKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2xhbmRsb2NrL2ZzX3Rlc3QuYy03MTI4LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2xhbmRsb2NrL2ZzX3Rlc3QuYzo3MTI5OlxcdEVYUEVDVF9FUShFQUNDRVMsIHRlc3Rfb3BlbihkZXZfbnVsbF9wYXRoLCBPX1JET05MWSB8IE9fQ0xPRVhFQykpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2xhbmRsb2NrL2ZzX3Rlc3QuYy03MTMwLVxcdEVYUEVDVF9FUSgwLCB0ZXN0X29wZW4odmFyaWFudC1cXHUwMDNlZmlsZV9wYXRoLCBPX1JET05MWSB8IE9fQ0xPRVhFQykpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbGFuZGxvY2svZnNfdGVzdC5jLTcxMzUtXFx0LyogQ2hlY2tzIHdpdGggTGFuZGxvY2sgYW5kIGZvcmJpZGRlbiBhY2Nlc3MuICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbGFuZGxvY2svZnNfdGVzdC5jOjcxMzY6XFx0RVhQRUNUX0VRKEVBQ0NFUywgdGVzdF9vcGVuKGRldl9udWxsX3BhdGgsIE9fUkRPTkxZIHwgT19DTE9FWEVDKSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbGFuZGxvY2svZnNfdGVzdC5jLTcxMzctXFx0RVhQRUNUX0VRKEVBQ0NFUywgdGVzdF9vcGVuKHZhcmlhbnQtXFx1MDAzZWZpbGVfcGF0aCwgT19SRE9OTFkgfCBPX0NMT0VYRUMpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDc6MjA6MTkuMTAzNjI4NDJaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTExMzMyMTM5NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEZpbGVzeXN0ZW0gSW5pdGlhbGl6YXRpb24gYW5kIFBvdGVudGlhbCBSYWNlIENvbmRpdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIGlmIGBmcy1cdTAwM2Vyb290YCBhbmQgYGZzLVx1MDAzZXB3ZGAgYXJlIG9ubHkgc2V0IHRvIE5VTEwgaW4gdGhhdCBLVW5pdCB0ZXN0LCB0aGVuIHRoaXMgaXMgYmFzaWNhbGx5IGp1c3QgYWRkaW5nIHN1cHBvcnQgZm9yIGEgZmVhdHVyZSB0aGF0IGlzbid0IGV2ZW4gdXNlZCB5ZXQgd2l0aGluIHRoZSBrZXJuZWwgaXRzZWxmLCBhdCBsZWFzdCBhcyBmYXIgYXMgSSBjYW4gdGVsbC4gSXQncyBwcm9iYWJseSBpbnRlbmRlZCBmb3Igc29tZSBvdXQtb2YtdHJlZSBtb2R1bGUgb3IgbWF5YmUgYSBmdXR1cmUgcGF0Y2ggdGhhdCBsZXZlcmFnZXMgdGhpcy5cblxuVGhlbiBteSBtaW5kIGp1bXBzIHRvIHRoZSBhbGxvY2F0aW9uIG9mIHRoZSBgZnNfc3RydWN0YC4gSSdtIHRoaW5raW5nIGFib3V0IGhvdyBga21lbV9jYWNoZV9hbGxvY2AgaXMgdXNlZCwgYW5kIG1vcmUgaW1wb3J0YW50bHksICpub3QqIGluaXRpYWxpemVkLiBJIHNlZSBgY29weV9mc19zdHJ1Y3RgIGlzIHdoZXJlIHRoZSBhc3NpZ25tZW50IGhhcHBlbnM6XG5cbmBgYGNcblx0c3RydWN0IGZzX3N0cnVjdCAqZnMgPSBrbWVtX2NhY2hlX2FsbG9jKGZzX2NhY2hlcCwgR0ZQX0tFUk5FTCk7XG5cdGlmIChmcykge1xuXHRcdGZzLVx1MDAzZXVzZXJzID0gMTtcblx0XHRmcy1cdTAwM2Vpbl9leGVjID0gMDtcblx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZmcy1cdTAwM2Vsb2NrKTtcblx0XHRzZXFjb3VudF9zcGlubG9ja19pbml0KFx1MDAyNmZzLVx1MDAzZXNlcSwgXHUwMDI2ZnMtXHUwMDNlbG9jayk7XG5cdFx0ZnMtXHUwMDNldW1hc2sgPSBvbGQtXHUwMDNldW1hc2s7XG5cblx0XHRyZWFkX3NlcWxvY2tfZXhjbChcdTAwMjZvbGQtXHUwMDNlc2VxKTtcblx0XHRmcy1cdTAwM2Vyb290ID0gb2xkLVx1MDAzZXJvb3Q7XG5cdFx0cGF0aF9nZXQoXHUwMDI2ZnMtXHUwMDNlcm9vdCk7XG5cdFx0ZnMtXHUwMDNlcHdkID0gb2xkLVx1MDAzZXB3ZDtcblx0XHRwYXRoX2dldChcdTAwMjZmcy1cdTAwM2Vwd2QpO1xuXHRcdHJlYWRfc2VxdW5sb2NrX2V4Y2woXHUwMDI2b2xkLVx1MDAzZXNlcSk7XG5cdH1cbmBgYFxuXG5Pa2F5LCBzbyBgZnMtXHUwMDNlcm9vdGAgYW5kIGBmcy1cdTAwM2Vwd2RgIGFyZSBhbHdheXMgYmVpbmcgY29waWVkIGZyb20gYG9sZC1cdTAwM2Vyb290YCBhbmQgYG9sZC1cdTAwM2Vwd2RgLiBUaGF0J3MgZ29vZCwgYnV0IGl0IG1ha2VzIG1lIHRoaW5rIGFib3V0IHdoZXJlIHRoZSB2ZXJ5IGZpcnN0IGBmc19zdHJ1Y3RgIGNvbWVzIGZyb20sIHRoZSBgaW5pdF9mc2AuIFRoaXMgb25lIGlzIHRoZSByb290IG9mIGFsbCB0aGVzZSBzdHJ1Y3R1cmVzLiBJIGtub3cgaXQgZ2V0cyBpdHMgaW5pdGlhbCBgcm9vdGAgYW5kIGBwd2RgIHNldCBpbiBgaW5pdF9tb3VudF90cmVlKClgLlxuXG5Ob3cgaGVyZSdzIHdoZXJlIG15IGFsYXJtIGJlbGxzIHN0YXJ0IHRvIGdvIG9mZi4gV2hhdCBpZiBhIGtlcm5lbCB0aHJlYWQgaXMgY3JlYXRlZCAqYmVmb3JlKiBgaW5pdF9tb3VudF90cmVlKClgIHJ1bnM/IEkgbWVhbiwgd2UndmUgZ290IHRvIGNvbnNpZGVyIGFsbCB0aGUgcG9zc2liaWxpdGllcy4gU3VjaCB0aHJlYWRzIHdvdWxkIGhhdmUgYGluaXRfZnNgIHdpdGggYm90aCBgcm9vdC5tbnRgIGFuZCBgcHdkLm1udGAgYXMgYE5VTExgLiBJZiBzdWNoIGEgdGhyZWFkIHRyaWVkIHRvIGRvIGFueSBraW5kIG9mIHBhdGggcmVzb2x1dGlvbiwgaXQgd291bGQgY3Jhc2ggYmVmb3JlIHRoaXMgcGF0Y2ggZXZlbiBleGlzdHMhXG5cbkJ1dCB0aGVuIEkgY2FsbSBteXNlbGYgZG93biBhIGxpdHRsZS4uLiB3YWl0LCBkbyBrZXJuZWwgdGhyZWFkcyBldmVuICpkbyogcGF0aCByZXNvbHV0aW9uIGJlZm9yZSBhbnkgZmlsZXN5c3RlbXMgYXJlIG1vdW50ZWQ/IFByb2JhYmx5IG5vdC4gTm8gZmlsZXN5c3RlbXMsIG5vIHBhdGhzIHRvIHJlc29sdmUuXG5cbkJ1dC4uLiAodGhlcmUncyBhbHdheXMgYSBcImJ1dFwiIGluIHRoZXNlIGFuYWx5c2VzKSB3aGF0IGlmIGEga2VybmVsIHRocmVhZCBpcyBjcmVhdGVkICpiZWZvcmUqIGBpbml0X21vdW50X3RyZWUoKWAgYW5kIHRoZW4sIGZvciB3aGF0ZXZlciByZWFzb24sIHN1cnZpdmVzIGFuZCBsYXRlciB0cmllcyB0byBkbyBwYXRoIHJlc29sdXRpb24/IEJlY2F1c2UgdGhleSAqc2hhcmUqIGBpbml0X2ZzYCEgVGhhdCBtZWFucyB0aGF0IHdoZW4gYGluaXRfbW91bnRfdHJlZSgpYCBzZXRzIGBpbml0X2ZzLnJvb3RgIGFuZCBgaW5pdF9mcy5wd2RgLCB0aGUga2VybmVsIHRocmVhZCB3aWxsICpzZWUqIHRoZSBjb3JyZWN0IHZhbHVlcy4gU28gZmFyLCBzbyBnb29kLlxuXG5Ob3cgSSdtIHJlYWxseSBnZXR0aW5nIGludG8gaXQuIFdoYXQgaWYgYSBrZXJuZWwgdGhyZWFkIGNhbGxzIGB1bnNoYXJlX2ZzX3N0cnVjdCgpYCAqYmVmb3JlKiBgaW5pdF9tb3VudF90cmVlKClgPyBUaGVuIGl0J2xsIGdldCBhICpjb3B5KiBvZiBgaW5pdF9mc2AsIGFuZCB0aGF0IGNvcHkgd291bGQgc3RpbGwgaGF2ZSBgcm9vdC5tbnQgPT0gTlVMTGAgYW5kIGBwd2QubW50ID09IE5VTExgLiBBbmQgdGhlbiBgaW5pdF9tb3VudF90cmVlKClgIHVwZGF0ZXMgdGhlICpvcmlnaW5hbCogYGluaXRfZnNgLCBidXQgdGhlIHRocmVhZCdzIGBmc19zdHJ1Y3RgIGlzIHN0aWxsIGxlZnQgd2l0aCBOVUxMIHZhbHVlcyEgVGhhdCdzIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbiBzY2VuYXJpby5cblxuSXMgdGhlcmUgYW55IGNvZGUgaW4gdGhlIGtlcm5lbCB0aGF0IGV2ZW4gZG9lcyB0aGlzPyBJIG5lZWQgdG8gY2hlY2suIEknbSBnb2luZyB0byBzY2FuIHRoZSBzb3VyY2UgdG8gc2VlIGlmIEkgY2FuIGZpbmQga2VybmVsIHRocmVhZHMgdGhhdCBhcmUgY2FsbGluZyBgdW5zaGFyZV9mc19zdHJ1Y3QoKWAuIFRoaXMgaXMgZ29pbmcgdG8gcmVxdWlyZSBzb21lIGRpZ2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNzk3LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA3OjIwOjMwLjIzNjg0NjI0NFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY1NDg3NDMzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1bnNoYXJlX2ZzX3N0cnVjdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9mc19zdHJ1Y3QuYz0xMDc9c3RydWN0IGZzX3N0cnVjdCAqY29weV9mc19zdHJ1Y3Qoc3RydWN0IGZzX3N0cnVjdCAqb2xkKVxcbi0tXFxuZnMvZnNfc3RydWN0LmMtMTI2LVxcbmZzL2ZzX3N0cnVjdC5jOjEyNzppbnQgdW5zaGFyZV9mc19zdHJ1Y3Qodm9pZClcXG5mcy9mc19zdHJ1Y3QuYy0xMjgte1xcbi0tXFxuZnMvZnNfc3RydWN0LmMtMTQ3LX1cXG5mcy9mc19zdHJ1Y3QuYzoxNDg6RVhQT1JUX1NZTUJPTF9HUEwodW5zaGFyZV9mc19zdHJ1Y3QpO1xcbmZzL2ZzX3N0cnVjdC5jLTE0OS1cXG4tLVxcbmZzL25mc2QvbmZzc3ZjLmM9ODgzPW5mc2Qodm9pZCAqdnJxc3RwKVxcbi0tXFxuZnMvbmZzZC9uZnNzdmMuYy04OTYtXFx0ICovXFxuZnMvbmZzZC9uZnNzdmMuYzo4OTc6XFx0c3ZjX3RocmVhZF9pbml0X3N0YXR1cyhycXN0cCwgdW5zaGFyZV9mc19zdHJ1Y3QoKSk7XFxuZnMvbmZzZC9uZnNzdmMuYy04OTgtXFxuLS1cXG5mcy90ZXN0cy9udWxsX3Jvb3RfY3dkX2t1bml0LmM9MjQ9c3RhdGljIGludCBudWxsX2ZzX3NldHVwKHN0cnVjdCBudWxsX2ZzX2N0eCAqY3R4KVxcbi0tXFxuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jLTI3LVxcbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYzoyODpcXHRlcnIgPSB1bnNoYXJlX2ZzX3N0cnVjdCgpO1xcbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYy0yOS1cXHRpZiAoZXJyKVxcbi0tXFxuaW5jbHVkZS9saW51eC9mc19zdHJ1Y3QuaD01MT1leHRlcm4gdm9pZCBmcmVlX2ZzX3N0cnVjdChzdHJ1Y3QgZnNfc3RydWN0ICopO1xcbmluY2x1ZGUvbGludXgvZnNfc3RydWN0Lmg6NTI6ZXh0ZXJuIGludCB1bnNoYXJlX2ZzX3N0cnVjdCh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L2ZzX3N0cnVjdC5oLTUzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwNzoyMDozMy44OTE3NDg0MzFaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg3MjY1MDUyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIEVhcmx5IEZpbGVzeXN0ZW0gTmFtZXNwYWNlIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGZpbGVzeXN0ZW0gbmFtZXNwYWNlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIGFuZCBJJ3ZlIGhpdCBhIHBvdGVudGlhbCB3cmlua2xlLiBUaGUgY29kZSBzZWVtcyB0byBzdWdnZXN0IHRoYXQgb25seSBgbmZzZGAgY2FsbHMgYHVuc2hhcmVfZnNfc3RydWN0KClgLiBBbmQsIGFzIGZhciBhcyBJIGNhbiB0ZWxsLCBgbmZzZGAgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgcnVubmluZyBiZWZvcmUgYGluaXRfbW91bnRfdHJlZSgpYCBnZXRzIGNhbGxlZC4gVGhhdCBmZWVscyBwcmV0dHkgY2xlYW4uLi5idXQsIHdhaXQuIFdoYXQgYWJvdXQgYGNvcHlfZnNfc3RydWN0KClgPyBXaGVyZSBhbmQgd2hlbiBkb2VzIHRoYXQgZ2V0IHVzZWQ/XG5cblJpZ2h0LCBgY29weV9mc19zdHJ1Y3QoKWAgaXMgcGFydCBvZiB0aGUgYGNvcHlfZnMoKWAgZnVuY3Rpb24sIHdoaWNoIGlzLCBvYnZpb3VzbHksIHVzZWQgZHVyaW5nIGBmb3JrKClgLiBCdXQuLi4gb25seSBpZiB0aGUgYENMT05FX0ZTYCBmbGFnIGlzbid0IHNldC4gVGhlIHF1ZXN0aW9uIG5vdyBiZWNvbWVzOiBBcmUgdGhlcmUgYW55ICprZXJuZWwgdGhyZWFkcyogdGhhdCBhcmUgZm9ya2luZyB3aXRob3V0IGBDTE9ORV9GU2AgYmVmb3JlIGBpbml0X21vdW50X3RyZWUoKWAgaXMgY2FsbGVkPyBUaGF0IHdvdWxkIGJyZWFrIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGV4ZWN1dGlvbiBwYXRoLlxuXG5IbW0sIGxldCdzIHNlZS4gSWYgYGtlcm5lbF90aHJlYWQoKWAgaXMgdXNlZCwgdGhhdCBzaG91bGQgdXNlIGBDTE9ORV9GU2AsIHJpZ2h0PyBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhlIGBrZXJuZWxfdGhyZWFkYCBpbXBsZW1lbnRhdGlvbi4gVGhhdCdzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcC4gTmVlZCB0byBjb25maXJtIHRoYXQgdGhhdCBwYXRoIGlzIGNsZWFuLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDcxMiwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwNzoyMDozOS43NjQ0MDM0MDRaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMTU4NjUzNTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2VybmVsX3RocmVhZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDcwMCBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuRG9jdW1lbnRhdGlvbi9SQ1UvbG9ja2RlcC1zcGxhdC5yc3Q9Mjg9b3RoZXIgaW5mbyB0aGF0IG1pZ2h0IGhlbHAgdXMgZGVidWcgdGhpczo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL1JDVS9sb2NrZGVwLXNwbGF0LnJzdC02MS0gICAgW1xcdTAwM2NmZmZmZmZmZjgxMDk3NWI2XFx1MDAzZV0ga3RocmVhZCsweGE2LzB4YjBcXG5Eb2N1bWVudGF0aW9uL1JDVS9sb2NrZGVwLXNwbGF0LnJzdDo2MjogICAgW1xcdTAwM2NmZmZmZmZmZjgxN2RiMTU0XFx1MDAzZV0ga2VybmVsX3RocmVhZF9oZWxwZXIrMHg0LzB4MTBcXG5Eb2N1bWVudGF0aW9uL1JDVS9sb2NrZGVwLXNwbGF0LnJzdC02My0gICAgW1xcdTAwM2NmZmZmZmZmZjgxMDY2NDMwXFx1MDAzZV0gPyBmaW5pc2hfdGFza19zd2l0Y2grMHg4MC8weDExMFxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS92bWFsbG9jZWQta2VybmVsLXN0YWNrcy5yc3Q9MTA1PVRocmVhZCBzdGFjayBhbGxvY2F0aW9uIGlzIGluaXRpYXRlZCBmcm9tIGNsb25lKCksIGZvcmsoKSwgdmZvcmsoKSxcXG5Eb2N1bWVudGF0aW9uL21tL3ZtYWxsb2NlZC1rZXJuZWwtc3RhY2tzLnJzdDoxMDY6a2VybmVsX3RocmVhZCgpIHZpYSBrZXJuZWxfY2xvbmUoKS4gVGhlc2UgYXJlIGEgZmV3IGhpbnRzIGZvciBzZWFyY2hpbmdcXG5Eb2N1bWVudGF0aW9uL21tL3ZtYWxsb2NlZC1rZXJuZWwtc3RhY2tzLnJzdC0xMDctdGhlIGNvZGUgYmFzZSB0byB1bmRlcnN0YW5kIHdoZW4gYW5kIGhvdyBhIHRocmVhZCBzdGFjayBpcyBhbGxvY2F0ZWQuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Bvd2VyL2ZyZWV6aW5nLW9mLXRhc2tzLnJzdD04Nj1mcmVlemVfcHJvY2Vzc2VzKCk6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Bvd2VyL2ZyZWV6aW5nLW9mLXRhc2tzLnJzdC04OC1cXG5Eb2N1bWVudGF0aW9uL3Bvd2VyL2ZyZWV6aW5nLW9mLXRhc2tzLnJzdDo4OTpmcmVlemVfa2VybmVsX3RocmVhZHMoKTpcXG5Eb2N1bWVudGF0aW9uL3Bvd2VyL2ZyZWV6aW5nLW9mLXRhc2tzLnJzdC05MC0gIC0gZnJlZXplcyBhbGwgdGFza3MgKGluY2x1ZGluZyBrZXJuZWwgdGhyZWFkcykgYmVjYXVzZSB3ZSBjYW4ndCBmcmVlemVcXG4tLVxcbkRvY3VtZW50YXRpb24vcG93ZXIvZnJlZXppbmctb2YtdGFza3MucnN0LTkyLVxcbkRvY3VtZW50YXRpb24vcG93ZXIvZnJlZXppbmctb2YtdGFza3MucnN0OjkzOnRoYXdfa2VybmVsX3RocmVhZHMoKTpcXG5Eb2N1bWVudGF0aW9uL3Bvd2VyL2ZyZWV6aW5nLW9mLXRhc2tzLnJzdC05NC0gIC0gdGhhd3Mgb25seSBrZXJuZWwgdGhyZWFkczsgdGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGlmIHdlIG5lZWQgdG8gZG9cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhY2UvaGlzdG9ncmFtLnJzdD01PURvY3VtZW50YXRpb24gd3JpdHRlbiBieSBUb20gWmFudXNzaVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFjZS9oaXN0b2dyYW0ucnN0LTE1MDgtICAgICAgICAgICAgIGtlcm5lbF9jbG9uZSsweDE4ZS8weDMzMFxcbkRvY3VtZW50YXRpb24vdHJhY2UvaGlzdG9ncmFtLnJzdDoxNTA5OiAgICAgICAgICAgICBrZXJuZWxfdGhyZWFkKzB4MjkvMHgzMFxcbkRvY3VtZW50YXRpb24vdHJhY2UvaGlzdG9ncmFtLnJzdC0xNTEwLSAgICAgICAgICAgICBrdGhyZWFkZCsweDE1NC8weDFiMFxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vdm1hbGxvY2VkLWtlcm5lbC1zdGFja3MucnN0PTgzPWFsbG9jX3RocmVhZF9zdGFja19ub2RlKCnosIPnlKhfX3ZtYWxsb2Nfbm9kZV9yYW5nZSgp5p2l5YiG6YWN5bim5pyJUEFHRV9LRVJORUxcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3ZtYWxsb2NlZC1rZXJuZWwtc3RhY2tzLnJzdC05My1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS92bWFsbG9jZWQta2VybmVsLXN0YWNrcy5yc3Q6OTQ657q/56iL5qCI5YiG6YWN5piv55SxY2xvbmUoKeOAgWZvcmsoKeOAgXZmb3JrKCnjgIFrZXJuZWxfdGhyZWFkKCnpgJrov4drZXJuZWxfY2xvbmUoKVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3ZtYWxsb2NlZC1rZXJuZWwtc3RhY2tzLnJzdC05NS3lkK/liqjnmoTjgILnlZnngrnmj5DnpLrlnKjov5nvvIzku6Xkvr/mkJzntKLku6PnoIHlupPvvIzkuobop6Pnur/nqIvmoIjkvZXml7bku6Xlj4rlpoLkvZXliIbphY3jgIJcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL2VudHJ5LlM9ODM3PXJldF9mcm9tX2Zvcms6XFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9lbnRyeS5TLTg0Ni1cXHQuYWxpZ24gNFxcbmFyY2gvYWxwaGEva2VybmVsL2VudHJ5LlM6ODQ3OlxcdC5nbG9ibFxcdHJldF9mcm9tX2tlcm5lbF90aHJlYWRcXG5hcmNoL2FscGhhL2tlcm5lbC9lbnRyeS5TOjg0ODpcXHQuZW50XFx0cmV0X2Zyb21fa2VybmVsX3RocmVhZFxcbmFyY2gvYWxwaGEva2VybmVsL2VudHJ5LlM6ODQ5OnJldF9mcm9tX2tlcm5lbF90aHJlYWQ6XFxuYXJjaC9hbHBoYS9rZXJuZWwvZW50cnkuUy04NTAtXFx0bW92XFx0JDE3LCAkMTZcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL2VudHJ5LlMtODU1LVxcdGJyXFx0JDMxLCByZXRfdG9fdXNlclxcbmFyY2gvYWxwaGEva2VybmVsL2VudHJ5LlM6ODU2Oi5lbmQgcmV0X2Zyb21fa2VybmVsX3RocmVhZFxcbmFyY2gvYWxwaGEva2VybmVsL2VudHJ5LlMtODU3LVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvcHJvY2Vzcy5jPTIzMj1pbnQgY29weV90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBjb25zdCBzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgKmFyZ3MpXFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9wcm9jZXNzLmMtMjM3LVxcdGV4dGVybiB2b2lkIHJldF9mcm9tX2Zvcmsodm9pZCk7XFxuYXJjaC9hbHBoYS9rZXJuZWwvcHJvY2Vzcy5jOjIzODpcXHRleHRlcm4gdm9pZCByZXRfZnJvbV9rZXJuZWxfdGhyZWFkKHZvaWQpO1xcbmFyY2gvYWxwaGEva2VybmVsL3Byb2Nlc3MuYy0yMzktXFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9wcm9jZXNzLmMtMjUzLVxcdFxcdFxcdHNpemVvZihzdHJ1Y3Qgc3dpdGNoX3N0YWNrKSArIHNpemVvZihzdHJ1Y3QgcHRfcmVncykpO1xcbmFyY2gvYWxwaGEva2VybmVsL3Byb2Nlc3MuYzoyNTQ6XFx0XFx0Y2hpbGRzdGFjay1cXHUwMDNlcjI2ID0gKHVuc2lnbmVkIGxvbmcpIHJldF9mcm9tX2tlcm5lbF90aHJlYWQ7XFxuYXJjaC9hbHBoYS9rZXJuZWwvcHJvY2Vzcy5jLTI1NS1cXHRcXHRjaGlsZHN0YWNrLVxcdTAwM2VyOSA9ICh1bnNpZ25lZCBsb25nKSBhcmdzLVxcdTAwM2VmbjtcXG4tLVxcbmFyY2gvYXJjL2tlcm5lbC9wcm9jZXNzLmM9MTY3PWludCBjb3B5X3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGNvbnN0IHN0cnVjdCBrZXJuZWxfY2xvbmVfYXJncyAqYXJncylcXG4tLVxcbmFyY2gvYXJjL2tlcm5lbC9wcm9jZXNzLmMtMTg4LVxcdCAqIHRoaXMgdG8gcG9wdWxhdGUga2VybmVsIHRocmVhZCBlbnRyeS1wdC9hcmdzIGludG8gY2FsbGVlIHJlZ3MsXFxuYXJjaC9hcmMva2VybmVsL3Byb2Nlc3MuYzoxODk6XFx0ICogc28gdGhhdCByZXRfZnJvbV9rZXJuZWxfdGhyZWFkKCkgYmVjb21lcyBzaW1wbGVyLlxcbmFyY2gvYXJjL2tlcm5lbC9wcm9jZXNzLmMtMTkwLVxcdCAqL1xcbi0tXFxuYXJjaC9jc2t5L2tlcm5lbC9lbnRyeS5TPTg1PWNza3lfc3lzY2FsbF90cmFjZTpcXG4tLVxcbmFyY2gvY3NreS9rZXJuZWwvZW50cnkuUy0xMTQtXFxuYXJjaC9jc2t5L2tlcm5lbC9lbnRyeS5TOjExNTpFTlRSWShyZXRfZnJvbV9rZXJuZWxfdGhyZWFkKVxcbmFyY2gvY3NreS9rZXJuZWwvZW50cnkuUy0xMTYtXFx0amJzclxcdHNjaGVkdWxlX3RhaWxcXG4tLVxcbmFyY2gvY3NreS9rZXJuZWwvcHJvY2Vzcy5jPTI1PWFzbWxpbmthZ2Ugdm9pZCByZXRfZnJvbV9mb3JrKHZvaWQpO1xcbmFyY2gvY3NreS9rZXJuZWwvcHJvY2Vzcy5jOjI2OmFzbWxpbmthZ2Ugdm9pZCByZXRfZnJvbV9rZXJuZWxfdGhyZWFkKHZvaWQpO1xcbmFyY2gvY3NreS9rZXJuZWwvcHJvY2Vzcy5jLTI3LVxcbi0tXFxuYXJjaC9jc2t5L2tlcm5lbC9wcm9jZXNzLmM9MzM9aW50IGNvcHlfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY29uc3Qgc3RydWN0IGtlcm5lbF9jbG9uZV9hcmdzICphcmdzKVxcbi0tXFxuYXJjaC9jc2t5L2tlcm5lbC9wcm9jZXNzLmMtNTItXFx0XFx0bWVtc2V0KGNoaWxkcmVncywgMCwgc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSk7XFxuYXJjaC9jc2t5L2tlcm5lbC9wcm9jZXNzLmM6NTM6XFx0XFx0Y2hpbGRzdGFjay1cXHUwMDNlcjE1ID0gKHVuc2lnbmVkIGxvbmcpIHJldF9mcm9tX2tlcm5lbF90aHJlYWQ7XFxuYXJjaC9jc2t5L2tlcm5lbC9wcm9jZXNzLmMtNTQtXFx0XFx0Y2hpbGRzdGFjay1cXHUwMDNlcjEwID0gKHVuc2lnbmVkIGxvbmcpIGFyZ3MtXFx1MDAzZWZuX2FyZztcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2FzbS1wcm90b3R5cGVzLmg9MTY9YXNtbGlua2FnZSB2b2lkIG5vaW5zdHIgX19ub19zdGFja19wcm90ZWN0b3IgcmV0X2Zyb21fZm9yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9hc20tcHJvdG90eXBlcy5oLTE4LVxcbmFyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2FzbS1wcm90b3R5cGVzLmg6MTk6YXNtbGlua2FnZSB2b2lkIG5vaW5zdHIgX19ub19zdGFja19wcm90ZWN0b3IgcmV0X2Zyb21fa2VybmVsX3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsXFxuYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vYXNtLXByb3RvdHlwZXMuaC0yMC1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9zd2l0Y2hfdG8uaD0yND1leHRlcm4gYXNtbGlua2FnZSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKl9fc3dpdGNoX3RvKHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldixcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3N3aXRjaF90by5oLTI4LSAqIEZvciBuZXdseSBjcmVhdGVkIGtlcm5lbCB0aHJlYWRzIHN3aXRjaF90bygpIHdpbGwgcmV0dXJuIHRvXFxuYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vc3dpdGNoX3RvLmg6Mjk6ICogcmV0X2Zyb21fa2VybmVsX3RocmVhZCwgbmV3bHkgY3JlYXRlZCB1c2VyIHRocmVhZHMgdG8gcmV0X2Zyb21fZm9yay5cXG5hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9zd2l0Y2hfdG8uaC0zMC0gKiBUaGF0IGlzLCBldmVyeXRoaW5nIGZvbGxvd2luZyBfX3N3aXRjaF90bygpIHdpbGwgYmUgc2tpcHBlZCBmb3IgbmV3IHRocmVhZHMuXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvZW50cnkuUz05Mj1TWU1fQ09ERV9FTkQocmV0X2Zyb21fZm9ya19hc20pXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL2VudHJ5LlMtOTMtXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL2VudHJ5LlM6OTQ6U1lNX0NPREVfU1RBUlQocmV0X2Zyb21fa2VybmVsX3RocmVhZF9hc20pXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL2VudHJ5LlMtOTUtXFx0VU5XSU5EX0hJTlRfUkVHU1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL2VudHJ5LlMtOTgtXFx0bW92ZVxcdFxcdGEzLCBzMVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9lbnRyeS5TOjk5OlxcdGJsXFx0XFx0cmV0X2Zyb21fa2VybmVsX3RocmVhZFxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9lbnRyeS5TLTEwMC1cXHRTVEFDS0xFQUtfRVJBU0VcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9lbnRyeS5TLTEwMy1cXHRSRVNUT1JFX1NQX0FORF9SRVRcXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvZW50cnkuUzoxMDQ6U1lNX0NPREVfRU5EKHJldF9mcm9tX2tlcm5lbF90aHJlYWRfYXNtKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3Byb2Nlc3MuYz03Mz1hc21saW5rYWdlIHZvaWQgcmV0X2Zyb21fZm9ya19hc20odm9pZCk7XFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3Byb2Nlc3MuYzo3NDphc21saW5rYWdlIHZvaWQgcmV0X2Zyb21fa2VybmVsX3RocmVhZF9hc20odm9pZCk7XFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3Byb2Nlc3MuYy03NS1cXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9wcm9jZXNzLmM9MTU1PWFzbWxpbmthZ2Ugdm9pZCBub2luc3RyIF9fbm9fc3RhY2tfcHJvdGVjdG9yIHJldF9mcm9tX2Zvcmsoc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LFxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3Byb2Nlc3MuYy0xNjEtXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3Byb2Nlc3MuYzoxNjI6YXNtbGlua2FnZSB2b2lkIG5vaW5zdHIgX19ub19zdGFja19wcm90ZWN0b3IgcmV0X2Zyb21fa2VybmVsX3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3Byb2Nlc3MuYy0xNjMtXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzLFxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3Byb2Nlc3MuYz0xNzU9aW50IGNvcHlfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY29uc3Qgc3RydWN0IGtlcm5lbF9jbG9uZV9hcmdzICphcmdzKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3Byb2Nlc3MuYy0xOTgtXFx0XFx0cC1cXHUwMDNldGhyZWFkLnJlZzI0ID0gKHVuc2lnbmVkIGxvbmcpYXJncy1cXHUwMDNlZm5fYXJnO1xcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9wcm9jZXNzLmM6MTk5OlxcdFxcdHAtXFx1MDAzZXRocmVhZC5yZWcwMSA9ICh1bnNpZ25lZCBsb25nKXJldF9mcm9tX2tlcm5lbF90aHJlYWRfYXNtO1xcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9wcm9jZXNzLmM6MjAwOlxcdFxcdHAtXFx1MDAzZXRocmVhZC5zY2hlZF9yYSA9ICh1bnNpZ25lZCBsb25nKXJldF9mcm9tX2tlcm5lbF90aHJlYWRfYXNtO1xcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9wcm9jZXNzLmMtMjAxLVxcdFxcdG1lbXNldChjaGlsZHJlZ3MsIDAsIHNpemVvZihzdHJ1Y3QgcHRfcmVncykpO1xcbi0tXFxuYXJjaC9tNjhrL2tlcm5lbC9lbnRyeS5TPTEzMD1FTlRSWShyZXRfZnJvbV9mb3JrKVxcbi0tXFxuYXJjaC9tNjhrL2tlcm5lbC9lbnRyeS5TLTEzNS1cXG5hcmNoL202OGsva2VybmVsL2VudHJ5LlM6MTM2OkVOVFJZKHJldF9mcm9tX2tlcm5lbF90aHJlYWQpXFxuYXJjaC9tNjhrL2tlcm5lbC9lbnRyeS5TLTEzNy1cXHR8IGEzIGNvbnRhaW5zIHRoZSBrZXJuZWwgdGhyZWFkIHBheWxvYWQsIGQ3IC0gaXRzIGFyZ3VtZW50XFxuLS1cXG5hcmNoL202OGsva2VybmVsL3Byb2Nlc3MuYz00Mz1hc21saW5rYWdlIHZvaWQgcmV0X2Zyb21fZm9yayh2b2lkKTtcXG5hcmNoL202OGsva2VybmVsL3Byb2Nlc3MuYzo0NDphc21saW5rYWdlIHZvaWQgcmV0X2Zyb21fa2VybmVsX3RocmVhZCh2b2lkKTtcXG5hcmNoL202OGsva2VybmVsL3Byb2Nlc3MuYy00NS1cXG4tLVxcbmFyY2gvbTY4ay9rZXJuZWwvcHJvY2Vzcy5jPTE0Mj1pbnQgY29weV90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBjb25zdCBzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgKmFyZ3MpXFxuLS1cXG5hcmNoL202OGsva2VybmVsL3Byb2Nlc3MuYy0xNjgtXFx0XFx0ZnJhbWUtXFx1MDAzZXN3LmQ3ID0gKHVuc2lnbmVkIGxvbmcpYXJncy1cXHUwMDNlZm5fYXJnO1xcbmFyY2gvbTY4ay9rZXJuZWwvcHJvY2Vzcy5jOjE2OTpcXHRcXHRmcmFtZS1cXHUwMDNlc3cucmV0cGMgPSAodW5zaWduZWQgbG9uZylyZXRfZnJvbV9rZXJuZWxfdGhyZWFkO1xcbmFyY2gvbTY4ay9rZXJuZWwvcHJvY2Vzcy5jLTE3MC1cXHRcXHRwLVxcdTAwM2V0aHJlYWQudXNwID0gMDtcXG4tLVxcbmFyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaD0yOT1leHRlcm4gdm9pZCByZXRfZnJvbV9mb3JrKHZvaWQpO1xcbmFyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaDozMDpleHRlcm4gdm9pZCByZXRfZnJvbV9rZXJuZWxfdGhyZWFkKHZvaWQpO1xcbmFyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaC0zMS1cXG4tLVxcbmFyY2gvbWljcm9ibGF6ZS9rZXJuZWwvZW50cnkuUz01MDM9Q19FTlRSWShyZXRfZnJvbV9mb3JrKTpcXG4tLVxcbmFyY2gvbWljcm9ibGF6ZS9rZXJuZWwvZW50cnkuUy01MDktXFxuYXJjaC9taWNyb2JsYXplL2tlcm5lbC9lbnRyeS5TOjUxMDpDX0VOVFJZKHJldF9mcm9tX2tlcm5lbF90aHJlYWQpOlxcbmFyY2gvbWljcm9ibGF6ZS9rZXJuZWwvZW50cnkuUy01MTEtXFx0YnJhbGlkXFx0cjE1LCBzY2hlZHVsZV90YWlsOyAvKiAuLi53aGljaCBpcyBzY2hlZHVsZV90YWlsJ3MgYXJnICovXFxuLS1cXG5hcmNoL21pY3JvYmxhemUva2VybmVsL3Byb2Nlc3MuYz01NT1pbnQgY29weV90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBjb25zdCBzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgKmFyZ3MpXFxuLS1cXG5hcmNoL21pY3JvYmxhemUva2VybmVsL3Byb2Nlc3MuYy03My1cXHRcXHR0aS1cXHUwMDNlY3B1X2NvbnRleHQubXNyID0gY2hpbGRyZWdzLVxcdTAwM2Vtc3IgXFx1MDAyNiB+TVNSX0lFO1xcbmFyY2gvbWljcm9ibGF6ZS9rZXJuZWwvcHJvY2Vzcy5jOjc0OlxcdFxcdHRpLVxcdTAwM2VjcHVfY29udGV4dC5yMTUgPSAodW5zaWduZWQgbG9uZylyZXRfZnJvbV9rZXJuZWxfdGhyZWFkIC0gODtcXG5hcmNoL21pY3JvYmxhemUva2VybmVsL3Byb2Nlc3MuYy03NS1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9zd2l0Y2hfdG8uaD04OT1kbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuYXJjaC9taXBzL2luY2x1ZGUvYXNtL3N3aXRjaF90by5oLTEwNC0gKiBGb3IgbmV3bHkgY3JlYXRlZCBrZXJuZWwgdGhyZWFkcyBzd2l0Y2hfdG8oKSB3aWxsIHJldHVybiB0b1xcbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9zd2l0Y2hfdG8uaDoxMDU6ICogcmV0X2Zyb21fa2VybmVsX3RocmVhZCwgbmV3bHkgY3JlYXRlZCB1c2VyIHRocmVhZHMgdG8gcmV0X2Zyb21fZm9yay5cXG5hcmNoL21pcHMvaW5jbHVkZS9hc20vc3dpdGNoX3RvLmgtMTA2LSAqIFRoYXQgaXMsIGV2ZXJ5dGhpbmcgZm9sbG93aW5nIHJlc3VtZSgpIHdpbGwgYmUgc2tpcHBlZCBmb3IgbmV3IHRocmVhZHMuXFxuLS1cXG5hcmNoL21pcHMva2VybmVsL2VudHJ5LlM9NTY9cmVzdW1lX2tlcm5lbDpcXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvZW50cnkuUy02OS1cXG5hcmNoL21pcHMva2VybmVsL2VudHJ5LlM6NzA6RkVYUE9SVChyZXRfZnJvbV9rZXJuZWxfdGhyZWFkKVxcbmFyY2gvbWlwcy9rZXJuZWwvZW50cnkuUy03MS1cXHRqYWxcXHRzY2hlZHVsZV90YWlsXFx0XFx0IyBhMCA9IHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldlxcbi0tXFxuYXJjaC9taXBzL2tlcm5lbC9wcm9jZXNzLmM9NDk9YXNtbGlua2FnZSB2b2lkIHJldF9mcm9tX2Zvcmsodm9pZCk7XFxuYXJjaC9taXBzL2tlcm5lbC9wcm9jZXNzLmM6NTA6YXNtbGlua2FnZSB2b2lkIHJldF9mcm9tX2tlcm5lbF90aHJlYWQodm9pZCk7XFxuYXJjaC9taXBzL2tlcm5lbC9wcm9jZXNzLmMtNTEtXFxuLS1cXG5hcmNoL21pcHMva2VybmVsL3Byb2Nlc3MuYz0xMDg9aW50IGNvcHlfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY29uc3Qgc3RydWN0IGtlcm5lbF9jbG9uZV9hcmdzICphcmdzKVxcbi0tXFxuYXJjaC9taXBzL2tlcm5lbC9wcm9jZXNzLmMtMTQzLVxcdFxcdHAtXFx1MDAzZXRocmVhZC5yZWcyOSA9IGNoaWxka3NwO1xcbmFyY2gvbWlwcy9rZXJuZWwvcHJvY2Vzcy5jOjE0NDpcXHRcXHRwLVxcdTAwM2V0aHJlYWQucmVnMzEgPSAodW5zaWduZWQgbG9uZykgcmV0X2Zyb21fa2VybmVsX3RocmVhZDtcXG5hcmNoL21pcHMva2VybmVsL3Byb2Nlc3MuYy0xNDUtI2lmIGRlZmluZWQoQ09ORklHX0NQVV9SMzAwMClcXG4tLVxcbmFyY2gvbmlvczIva2VybmVsL2VudHJ5LlM9NTA4PUVOVFJZKHJldF9mcm9tX2ZvcmspXFxuLS1cXG5hcmNoL25pb3MyL2tlcm5lbC9lbnRyeS5TLTUxMS1cXG5hcmNoL25pb3MyL2tlcm5lbC9lbnRyeS5TOjUxMjpFTlRSWShyZXRfZnJvbV9rZXJuZWxfdGhyZWFkKVxcbmFyY2gvbmlvczIva2VybmVsL2VudHJ5LlMtNTEzLVxcdGNhbGxcXHRzY2hlZHVsZV90YWlsXFxuLS1cXG5hcmNoL25pb3MyL2tlcm5lbC9wcm9jZXNzLmM9Mjg9YXNtbGlua2FnZSB2b2lkIHJldF9mcm9tX2Zvcmsodm9pZCk7XFxuYXJjaC9uaW9zMi9rZXJuZWwvcHJvY2Vzcy5jOjI5OmFzbWxpbmthZ2Ugdm9pZCByZXRfZnJvbV9rZXJuZWxfdGhyZWFkKHZvaWQpO1xcbmFyY2gvbmlvczIva2VybmVsL3Byb2Nlc3MuYy0zMC1cXG4tLVxcbmFyY2gvbmlvczIva2VybmVsL3Byb2Nlc3MuYz0xMDI9aW50IGNvcHlfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY29uc3Qgc3RydWN0IGtlcm5lbF9jbG9uZV9hcmdzICphcmdzKVxcbi0tXFxuYXJjaC9uaW9zMi9rZXJuZWwvcHJvY2Vzcy5jLTExOC1cXHRcXHRjaGlsZHN0YWNrLVxcdTAwM2VyMTcgPSAodW5zaWduZWQgbG9uZykgYXJncy1cXHUwMDNlZm5fYXJnO1xcbmFyY2gvbmlvczIva2VybmVsL3Byb2Nlc3MuYzoxMTk6XFx0XFx0Y2hpbGRzdGFjay1cXHUwMDNlcmEgPSAodW5zaWduZWQgbG9uZykgcmV0X2Zyb21fa2VybmVsX3RocmVhZDtcXG5hcmNoL25pb3MyL2tlcm5lbC9wcm9jZXNzLmMtMTIwLVxcdFxcdGNoaWxkcmVncy1cXHUwMDNlZXN0YXR1cyA9IFNUQVRVU19QSUU7XFxuLS1cXG5hcmNoL29wZW5yaXNjL2tlcm5lbC9lbnRyeS5TPTEwODI9RU5UUlkoX3N3aXRjaClcXG4tLVxcbmFyY2gvb3BlbnJpc2Mva2VybmVsL2VudHJ5LlMtMTE0OS1cXHQgKiB0aGF0IG1heSBiZSBlaXRoZXIgc2NoZWR1bGUoKSwgcmV0X2Zyb21fZm9yaygpLCBvclxcbmFyY2gvb3BlbnJpc2Mva2VybmVsL2VudHJ5LlM6MTE1MDpcXHQgKiByZXRfZnJvbV9rZXJuZWxfdGhyZWFkKCkuICBJZiB3ZSBhcmUgcmV0dXJuaW5nIHRvIGEgbmV3IHRocmVhZCxcXG5hcmNoL29wZW5yaXNjL2tlcm5lbC9lbnRyeS5TLTExNTEtXFx0ICogd2UgYXJlIGV4cGVjdGVkIHRvIGhhdmUgc2V0IHVwIHRoZSBhcmcgdG8gc2NoZWR1bGVfdGFpbCBhbHJlYWR5LFxcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL2VudHJ5LlM9NzI4PUVORChmYXVsdF92ZWN0b3JfMTEpXFxuLS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvZW50cnkuUy03NDItXFxuYXJjaC9wYXJpc2Mva2VybmVsL2VudHJ5LlM6NzQzOkVOVFJZKHJldF9mcm9tX2tlcm5lbF90aHJlYWQpXFxuYXJjaC9wYXJpc2Mva2VybmVsL2VudHJ5LlMtNzQ0LVxcdC8qIENhbGwgc2NoZWR1bGVfdGFpbCBmaXJzdCB0aG91Z2ggKi9cXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9lbnRyeS5TLTc1Ny1cXHRub3BcXG5hcmNoL3BhcmlzYy9rZXJuZWwvZW50cnkuUzo3NTg6RU5EKHJldF9mcm9tX2tlcm5lbF90aHJlYWQpXFxuYXJjaC9wYXJpc2Mva2VybmVsL2VudHJ5LlMtNzU5LVxcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3MuYz0yMDU9Y29weV90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBjb25zdCBzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgKmFyZ3MpXFxuLS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvcHJvY2Vzcy5jLTIxNS1cXHQgKiBNYWtlIHRoZW0gY29uc3Qgc28gdGhlIGNvbXBpbGVyIGtub3dzIHRoZXkgbGl2ZSBpbiAudGV4dCAqL1xcbmFyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzLmM6MjE2OlxcdGV4dGVybiB2b2lkICogY29uc3QgcmV0X2Zyb21fa2VybmVsX3RocmVhZDtcXG5hcmNoL3BhcmlzYy9rZXJuZWwvcHJvY2Vzcy5jLTIxNy1cXHRleHRlcm4gdm9pZCAqIGNvbnN0IGNoaWxkX3JldHVybjtcXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzLmMtMjIzLVxcdFxcdFxcdHJldHVybiAwO1xcbmFyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzLmM6MjI0OlxcdFxcdC8qIE11c3QgZXhpdCB2aWEgcmV0X2Zyb21fa2VybmVsX3RocmVhZCBpbiBvcmRlclxcbmFyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzLmMtMjI1LVxcdFxcdCAqIHRvIGNhbGwgc2NoZWR1bGVfdGFpbCgpXFxuLS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvcHJvY2Vzcy5jLTIyNy1cXHRcXHRjcmVncy1cXHUwMDNla3NwID0gKHVuc2lnbmVkIGxvbmcpIHN0YWNrICsgRlJBTUVfU0laRSArIFBUX1NaX0FMR047XFxuYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3MuYzoyMjg6XFx0XFx0Y3JlZ3MtXFx1MDAzZWtwYyA9ICh1bnNpZ25lZCBsb25nKSBcXHUwMDI2cmV0X2Zyb21fa2VybmVsX3RocmVhZDtcXG5hcmNoL3BhcmlzYy9rZXJuZWwvcHJvY2Vzcy5jLTIyOS1cXHRcXHQvKlxcbmFyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzLmMtMjMwLVxcdFxcdCAqIENvcHkgZnVuY3Rpb24gYW5kIGFyZ3VtZW50IHRvIGJlIGNhbGxlZCBmcm9tXFxuYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3MuYzoyMzE6XFx0XFx0ICogcmV0X2Zyb21fa2VybmVsX3RocmVhZC5cXG5hcmNoL3BhcmlzYy9rZXJuZWwvcHJvY2Vzcy5jLTIzMi1cXHRcXHQgKi9cXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYz0yMTc9c3RhdGljIGludCB1bndpbmRfc3BlY2lhbChzdHJ1Y3QgdW53aW5kX2ZyYW1lX2luZm8gKmluZm8sIHVuc2lnbmVkIGxvbmcgcGMsIGludCBmcmFtZV9zaXplKVxcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jLTIyNS1cXHQgKi9cXG5hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmM6MjI2OlxcdGV4dGVybiB2b2lkICogY29uc3QgcmV0X2Zyb21fa2VybmVsX3RocmVhZDtcXG5hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmMtMjI3LVxcdGV4dGVybiB2b2lkICogY29uc3Qgc3lzY2FsbF9leGl0O1xcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jLTI0MS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmM6MjQyOlxcdGlmIChwYyA9PSAodW5zaWduZWQgbG9uZylcXHUwMDI2cmV0X2Zyb21fa2VybmVsX3RocmVhZCB8fFxcbmFyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYy0yNDMtXFx0ICAgIHBjID09ICh1bnNpZ25lZCBsb25nKVxcdTAwMjZzeXNjYWxsX2V4aXQpIHtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfMzIuUz0xODk9cmV0X2Zyb21fa2VybmVsX3VzZXJfdGhyZWFkOlxcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV8zMi5TLTE5Ny1cXG5hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzMyLlM6MTk4OlxcdC5nbG9ibFxcdHN0YXJ0X2tlcm5lbF90aHJlYWRcXG5hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzMyLlM6MTk5OnN0YXJ0X2tlcm5lbF90aHJlYWQ6XFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV8zMi5TLTIwMC1cXHRibFxcdHNjaGVkdWxlX3RhaWxcXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvaW50ZXJydXB0XzY0LlM9NzQyPV9HTE9CQUwocmV0X2Zyb21fa2VybmVsX3VzZXJfdGhyZWFkKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9pbnRlcnJ1cHRfNjQuUy03NTctXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9pbnRlcnJ1cHRfNjQuUzo3NTg6X0dMT0JBTChzdGFydF9rZXJuZWxfdGhyZWFkKVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvaW50ZXJydXB0XzY0LlMtNzU5LVxcdGJsXFx0Q0ZVTkMoc2NoZWR1bGVfdGFpbClcXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jPTEyNzk9c3RydWN0IHRhc2tfc3RydWN0ICpfX3N3aXRjaF90byhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsXFxuLS1cXG5hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYy0xMzQxLVxcdCAqIGZyYW1lIGZvciBuZXcgdGFza3MgdGhhdCBkaXJlY3RseSByZXR1cm5zIHRocm91Z2ggcmV0X2Zyb21fZm9yaygpIG9yXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmM6MTM0MjpcXHQgKiByZXRfZnJvbV9rZXJuZWxfdGhyZWFkKCkuIFNlZSBjb3B5X3RocmVhZCgpIGZvciBkZXRhaWxzLlxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jLTEzNDMtXFx0ICovXFxuLS1cXG5hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYy0xMzU0LVxcdCAqIE5vdGhpbmcgYWZ0ZXIgX3N3aXRjaCB3aWxsIGJlIHJ1biBmb3IgbmV3bHkgY3JlYXRlZCB0YXNrcyxcXG5hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYzoxMzU1OlxcdCAqIGJlY2F1c2UgdGhleSBzd2l0Y2ggZGlyZWN0bHkgdG8gcmV0X2Zyb21fZm9yay9yZXRfZnJvbV9rZXJuZWxfdGhyZWFkXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMtMTM1Ni1cXHQgKiBldGMuIENvZGUgYWRkZWQgaGVyZSBzaG91bGQgaGF2ZSBhIGNvbW1lbnQgZXhwbGFpbmluZyB3aHkgdGhhdCBpc1xcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmM9MTczMz1pbnQgY29weV90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBjb25zdCBzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgKmFyZ3MpXFxuLS1cXG5hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYy0xNzM4LVxcdGV4dGVybiB2b2lkIHJldF9mcm9tX2tlcm5lbF91c2VyX3RocmVhZCh2b2lkKTtcXG5hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYzoxNzM5OlxcdGV4dGVybiB2b2lkIHN0YXJ0X2tlcm5lbF90aHJlYWQodm9pZCk7XFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMtMTc0MC1cXHR2b2lkICgqZikodm9pZCk7XFxuLS1cXG5hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYy0xNzU0LVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jOjE3NTU6XFx0XFx0ZiA9IHN0YXJ0X2tlcm5lbF90aHJlYWQ7XFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMtMTc1Ni1cXHRcXHRwLVxcdTAwM2V0aHJlYWQucmVncyA9IE5VTEw7XFx0Lyogbm8gdXNlciByZWdpc3RlciBzdGF0ZSAqL1xcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMtMTgyOS1cXHRcXHQgKiBzd2l0Y2ggZnJhbWUgc28gdGhleSBhcmUgbG9hZGVkIGJ5IF9zd2l0Y2ggYmVmb3JlIGl0IHJldHVybnNcXG5hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYzoxODMwOlxcdFxcdCAqIHRvIHJldF9mcm9tX2tlcm5lbF90aHJlYWQuXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMtMTgzMS1cXHRcXHQgKi9cXG4tLVxcbmFyY2gvc2gva2VybmVsL2VudHJ5LWNvbW1vbi5TPTI2OT1yZXRfZnJvbV9mb3JrOlxcbi0tXFxuYXJjaC9zaC9rZXJuZWwvZW50cnktY29tbW9uLlMtMjc2LVxcdC5hbGlnblxcdDJcXG5hcmNoL3NoL2tlcm5lbC9lbnRyeS1jb21tb24uUzoyNzc6XFx0Lmdsb2JsXFx0cmV0X2Zyb21fa2VybmVsX3RocmVhZFxcbmFyY2gvc2gva2VybmVsL2VudHJ5LWNvbW1vbi5TOjI3ODpyZXRfZnJvbV9rZXJuZWxfdGhyZWFkOlxcbmFyY2gvc2gva2VybmVsL2VudHJ5LWNvbW1vbi5TLTI3OS1cXHRtb3YubFxcdDFmLCByOFxcbi0tXFxuYXJjaC9zaC9rZXJuZWwvcHJvY2Vzc18zMi5jPTg3PWFzbWxpbmthZ2Ugdm9pZCByZXRfZnJvbV9mb3JrKHZvaWQpO1xcbmFyY2gvc2gva2VybmVsL3Byb2Nlc3NfMzIuYzo4ODphc21saW5rYWdlIHZvaWQgcmV0X2Zyb21fa2VybmVsX3RocmVhZCh2b2lkKTtcXG5hcmNoL3NoL2tlcm5lbC9wcm9jZXNzXzMyLmMtODktXFxuYXJjaC9zaC9rZXJuZWwvcHJvY2Vzc18zMi5jPTkwPWludCBjb3B5X3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGNvbnN0IHN0cnVjdCBrZXJuZWxfY2xvbmVfYXJncyAqYXJncylcXG4tLVxcbmFyY2gvc2gva2VybmVsL3Byb2Nlc3NfMzIuYy0xMTUtXFx0XFx0bWVtc2V0KGNoaWxkcmVncywgMCwgc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSk7XFxuYXJjaC9zaC9rZXJuZWwvcHJvY2Vzc18zMi5jOjExNjpcXHRcXHRwLVxcdTAwM2V0aHJlYWQucGMgPSAodW5zaWduZWQgbG9uZykgcmV0X2Zyb21fa2VybmVsX3RocmVhZDtcXG5hcmNoL3NoL2tlcm5lbC9wcm9jZXNzXzMyLmMtMTE3LVxcdFxcdGNoaWxkcmVncy1cXHUwMDNlcmVnc1s0XSA9ICh1bnNpZ25lZCBsb25nKSBhcmdzLVxcdTAwM2Vmbl9hcmc7XFxuLS1cXG5hcmNoL3NwYXJjL2tlcm5lbC9lbnRyeS5TPTk2Mz1yZXRfZnJvbV9mb3JrOlxcbi0tXFxuYXJjaC9zcGFyYy9rZXJuZWwvZW50cnkuUy05NjgtXFxuYXJjaC9zcGFyYy9rZXJuZWwvZW50cnkuUzo5Njk6XFx0Lmdsb2JsXFx0cmV0X2Zyb21fa2VybmVsX3RocmVhZFxcbmFyY2gvc3BhcmMva2VybmVsL2VudHJ5LlM6OTcwOnJldF9mcm9tX2tlcm5lbF90aHJlYWQ6XFxuYXJjaC9zcGFyYy9rZXJuZWwvZW50cnkuUy05NzEtXFx0Y2FsbFxcdHNjaGVkdWxlX3RhaWxcXG4tLVxcbmFyY2gvc3BhcmMva2VybmVsL3Byb2Nlc3NfMzIuYz0yNjA9ZXh0ZXJuIHZvaWQgcmV0X2Zyb21fZm9yayh2b2lkKTtcXG5hcmNoL3NwYXJjL2tlcm5lbC9wcm9jZXNzXzMyLmM6MjYxOmV4dGVybiB2b2lkIHJldF9mcm9tX2tlcm5lbF90aHJlYWQodm9pZCk7XFxuYXJjaC9zcGFyYy9rZXJuZWwvcHJvY2Vzc18zMi5jLTI2Mi1cXG5hcmNoL3NwYXJjL2tlcm5lbC9wcm9jZXNzXzMyLmM9MjYzPWludCBjb3B5X3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGNvbnN0IHN0cnVjdCBrZXJuZWxfY2xvbmVfYXJncyAqYXJncylcXG4tLVxcbmFyY2gvc3BhcmMva2VybmVsL3Byb2Nlc3NfMzIuYy0zMDUtXFx0XFx0bWVtc2V0KG5ld19zdGFjaywgMCwgU1RBQ0tGUkFNRV9TWiArIFRSQUNFUkVHX1NaKTtcXG5hcmNoL3NwYXJjL2tlcm5lbC9wcm9jZXNzXzMyLmM6MzA2OlxcdFxcdHRpLVxcdTAwM2VrcGMgPSAoKCh1bnNpZ25lZCBsb25nKSByZXRfZnJvbV9rZXJuZWxfdGhyZWFkKSAtIDB4OCk7XFxuYXJjaC9zcGFyYy9rZXJuZWwvcHJvY2Vzc18zMi5jLTMwNy1cXHRcXHRjaGlsZHJlZ3MtXFx1MDAzZXVfcmVnc1tVUkVHX0cxXSA9ICh1bnNpZ25lZCBsb25nKSBhcmdzLVxcdTAwM2VmbjtcXG4tLVxcbmFyY2gveDg2L2VudHJ5L2VudHJ5XzMyLlM9MTA0Nj1oYW5kbGVfZXhjZXB0aW9uX3JldHVybjpcXG4tLVxcbmFyY2gveDg2L2VudHJ5L2VudHJ5XzMyLlMtMTA1Mi1cXHQvKlxcbmFyY2gveDg2L2VudHJ5L2VudHJ5XzMyLlM6MTA1MzpcXHQgKiBXZSBjYW4gYmUgY29taW5nIGhlcmUgZnJvbSBjaGlsZCBzcGF3bmVkIGJ5IGtlcm5lbF90aHJlYWQoKS5cXG5hcmNoL3g4Ni9lbnRyeS9lbnRyeV8zMi5TLTEwNTQtXFx0ICovXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90bGJmbHVzaC5oPTE3Mz1ERUNMQVJFX1BFUl9DUFVfU0hBUkVEX0FMSUdORUQoc3RydWN0IHRsYl9zdGF0ZV9zaGFyZWQsIGNwdV90bGJzdGF0ZV9zaGFyZWQpO1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGxiZmx1c2guaC0xNzYtICogUGxlYXNlIGlnbm9yZSB0aGUgbmFtZSBvZiB0aGlzIGZ1bmN0aW9uLiAgSXQgc2hvdWxkIGJlIGNhbGxlZFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RsYmZsdXNoLmg6MTc3OiAqIHN3aXRjaF90b19rZXJuZWxfdGhyZWFkKCkuXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGxiZmx1c2guaC0xNzgtICpcXG4tLVxcbmFyY2gveHRlbnNhL2tlcm5lbC9lbnRyeS5TPTIxNTg9RU5EUFJPQyhyZXRfZnJvbV9mb3JrKVxcbi0tXFxuYXJjaC94dGVuc2Eva2VybmVsL2VudHJ5LlMtMjE2NC0gKi9cXG5hcmNoL3h0ZW5zYS9rZXJuZWwvZW50cnkuUzoyMTY1OkVOVFJZKHJldF9mcm9tX2tlcm5lbF90aHJlYWQpXFxuYXJjaC94dGVuc2Eva2VybmVsL2VudHJ5LlMtMjE2Ni1cXG4tLVxcbmFyY2gveHRlbnNhL2tlcm5lbC9lbnRyeS5TLTIxNzEtXFxuYXJjaC94dGVuc2Eva2VybmVsL2VudHJ5LlM6MjE3MjpFTkRQUk9DKHJldF9mcm9tX2tlcm5lbF90aHJlYWQpXFxuYXJjaC94dGVuc2Eva2VybmVsL2VudHJ5LlMtMjE3My1cXG4tLVxcbmFyY2gveHRlbnNhL2tlcm5lbC9wcm9jZXNzLmM9NTM9ZXh0ZXJuIHZvaWQgcmV0X2Zyb21fZm9yayh2b2lkKTtcXG5hcmNoL3h0ZW5zYS9rZXJuZWwvcHJvY2Vzcy5jOjU0OmV4dGVybiB2b2lkIHJldF9mcm9tX2tlcm5lbF90aHJlYWQodm9pZCk7XFxuYXJjaC94dGVuc2Eva2VybmVsL3Byb2Nlc3MuYy01NS1cXG4tLVxcbmFyY2gveHRlbnNhL2tlcm5lbC9wcm9jZXNzLmM9MjE3PWludCBhcmNoX2R1cF90YXNrX3N0cnVjdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmRzdCwgc3RydWN0IHRhc2tfc3RydWN0ICpzcmMpXFxuLS1cXG5hcmNoL3h0ZW5zYS9rZXJuZWwvcHJvY2Vzcy5jLTI0Ny0gKiBXZSBjcmVhdGUgYSBkdW1teSBmcmFtZSB0byByZXR1cm4gdG8gZWl0aGVyIHJldF9mcm9tX2Zvcmsgb3JcXG5hcmNoL3h0ZW5zYS9rZXJuZWwvcHJvY2Vzcy5jOjI0ODogKiAgIHJldF9mcm9tX2tlcm5lbF90aHJlYWQ6XFxuYXJjaC94dGVuc2Eva2VybmVsL3Byb2Nlc3MuYzoyNDk6ICogICBhMCBwb2ludHMgdG8gcmV0X2Zyb21fZm9yay9yZXRfZnJvbV9rZXJuZWxfdGhyZWFkIChzaW11bGF0aW5nIGEgY2FsbDQpXFxuYXJjaC94dGVuc2Eva2VybmVsL3Byb2Nlc3MuYy0yNTAtICogICBzcCBwb2ludHMgdG8gaXRzZWxmICh0aHJlYWQuc3ApXFxuLS1cXG5hcmNoL3h0ZW5zYS9rZXJuZWwvcHJvY2Vzcy5jPTI2OD1pbnQgY29weV90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBjb25zdCBzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgKmFyZ3MpXFxuLS1cXG5hcmNoL3h0ZW5zYS9rZXJuZWwvcHJvY2Vzcy5jLTMzNC1cXHRcXHRwLVxcdTAwM2V0aHJlYWQucmEgPSBNQUtFX1JBX0ZPUl9DQUxMKFxcbmFyY2gveHRlbnNhL2tlcm5lbC9wcm9jZXNzLmM6MzM1OlxcdFxcdFxcdFxcdCh1bnNpZ25lZCBsb25nKXJldF9mcm9tX2tlcm5lbF90aHJlYWQsIDEpO1xcbmFyY2gveHRlbnNhL2tlcm5lbC9wcm9jZXNzLmMtMzM2LVxcbmFyY2gveHRlbnNhL2tlcm5lbC9wcm9jZXNzLmM6MzM3OlxcdFxcdC8qIHBhc3MgcGFyYW1ldGVycyB0byByZXRfZnJvbV9rZXJuZWxfdGhyZWFkOiAqL1xcbmFyY2gveHRlbnNhL2tlcm5lbC9wcm9jZXNzLmMtMzM4LSNpZiBkZWZpbmVkKF9fWFRFTlNBX1dJTkRPV0VEX0FCSV9fKVxcbi0tXFxuZHJpdmVycy9tZWRpYS9jZWMvY29yZS9jZWMtY29yZS5jPTIyMz1zdHJ1Y3QgY2VjX2FkYXB0ZXIgKmNlY19hbGxvY2F0ZV9hZGFwdGVyKGNvbnN0IHN0cnVjdCBjZWNfYWRhcF9vcHMgKm9wcyxcXG4tLVxcbmRyaXZlcnMvbWVkaWEvY2VjL2NvcmUvY2VjLWNvcmUuYy0yNjctXFx0aWYgKElTX0VSUihhZGFwLVxcdTAwM2VrdGhyZWFkKSkge1xcbmRyaXZlcnMvbWVkaWEvY2VjL2NvcmUvY2VjLWNvcmUuYzoyNjg6XFx0XFx0cHJfZXJyKFxcXCJjZWMtJXM6IGtlcm5lbF90aHJlYWQoKSBmYWlsZWRcXFxcblxcXCIsIG5hbWUpO1xcbmRyaXZlcnMvbWVkaWEvY2VjL2NvcmUvY2VjLWNvcmUuYy0yNjktXFx0XFx0cmVzID0gUFRSX0VSUihhZGFwLVxcdTAwM2VrdGhyZWFkKTtcXG4tLVxcbmRyaXZlcnMvbWVkaWEvY2VjL2NvcmUvY2VjLXBpbi5jPTExNTg9c3RhdGljIGludCBjZWNfcGluX2FkYXBfZW5hYmxlKHN0cnVjdCBjZWNfYWRhcHRlciAqYWRhcCwgYm9vbCBlbmFibGUpXFxuLS1cXG5kcml2ZXJzL21lZGlhL2NlYy9jb3JlL2NlYy1waW4uYy0xMTczLVxcbmRyaXZlcnMvbWVkaWEvY2VjL2NvcmUvY2VjLXBpbi5jOjExNzQ6XFx0XFx0XFx0XFx0cHJfZXJyKFxcXCJjZWMtcGluOiBrZXJuZWxfdGhyZWFkKCkgZmFpbGVkXFxcXG5cXFwiKTtcXG5kcml2ZXJzL21lZGlhL2NlYy9jb3JlL2NlYy1waW4uYy0xMTc1LVxcdFxcdFxcdFxcdHBpbi1cXHUwMDNla3RocmVhZCA9IE5VTEw7XFxuLS1cXG5kcml2ZXJzL21lZGlhL2R2Yi1jb3JlL2R2Yl9jYV9lbjUwMjIxLmM9MTg3MD1pbnQgZHZiX2NhX2VuNTAyMjFfaW5pdChzdHJ1Y3QgZHZiX2FkYXB0ZXIgKmR2Yl9hZGFwdGVyLFxcbi0tXFxuZHJpdmVycy9tZWRpYS9kdmItY29yZS9kdmJfY2FfZW41MDIyMS5jLTE5MzMtXFx0XFx0cmV0ID0gUFRSX0VSUihjYS1cXHUwMDNldGhyZWFkKTtcXG5kcml2ZXJzL21lZGlhL2R2Yi1jb3JlL2R2Yl9jYV9lbjUwMjIxLmM6MTkzNDpcXHRcXHRwcl9lcnIoXFxcImR2Yl9jYV9pbml0OiBmYWlsZWQgdG8gc3RhcnQga2VybmVsX3RocmVhZCAoJWQpXFxcXG5cXFwiLFxcbmRyaXZlcnMvbWVkaWEvZHZiLWNvcmUvZHZiX2NhX2VuNTAyMjEuYy0xOTM1LVxcdFxcdCAgICAgICByZXQpO1xcbi0tXFxuZHJpdmVycy9tZWRpYS9pMmMvbXNwMzQwMC1kcml2ZXIuYz02NTg9c3RhdGljIGludCBtc3BfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcXG4tLVxcbmRyaXZlcnMvbWVkaWEvaTJjL21zcDM0MDAtZHJpdmVyLmMtODQ4LVxcdFxcdGlmIChJU19FUlIoc3RhdGUtXFx1MDAzZWt0aHJlYWQpKVxcbmRyaXZlcnMvbWVkaWEvaTJjL21zcDM0MDAtZHJpdmVyLmM6ODQ5OlxcdFxcdFxcdGRldl93YXJuKFxcdTAwMjZjbGllbnQtXFx1MDAzZWRldiwgXFxcImtlcm5lbF90aHJlYWQoKSBmYWlsZWRcXFxcblxcXCIpO1xcbmRyaXZlcnMvbWVkaWEvaTJjL21zcDM0MDAtZHJpdmVyLmMtODUwLVxcdFxcdG1zcF93YWtlX3RocmVhZChjbGllbnQpO1xcbi0tXFxuZHJpdmVycy9tZWRpYS9wY2kvc2FhNzEzNC9zYWE3MTM0LXR2YXVkaW8uYz0xMDAwPWludCBzYWE3MTM0X3R2YXVkaW9faW5pdDIoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYpXFxuLS1cXG5kcml2ZXJzL21lZGlhL3BjaS9zYWE3MTM0L3NhYTcxMzQtdHZhdWRpby5jLTEwMjAtXFx0XFx0aWYgKElTX0VSUihkZXYtXFx1MDAzZXRocmVhZC50aHJlYWQpKSB7XFxuZHJpdmVycy9tZWRpYS9wY2kvc2FhNzEzNC9zYWE3MTM0LXR2YXVkaW8uYzoxMDIxOlxcdFxcdFxcdHByX3dhcm4oXFxcIiVzOiBrZXJuZWxfdGhyZWFkKCkgZmFpbGVkXFxcXG5cXFwiLFxcbmRyaXZlcnMvbWVkaWEvcGNpL3NhYTcxMzQvc2FhNzEzNC10dmF1ZGlvLmMtMTAyMi1cXHRcXHRcXHQgICAgICAgZGV2LVxcdTAwM2VuYW1lKTtcXG4tLVxcbmRyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbWlyb3BjbTIwLmM9Mzc4PXN0YXRpYyBpbnQgcGNtMjBfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbmRyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbWlyb3BjbTIwLmMtMzg3LVxcdFxcdGlmIChJU19FUlIoZGV2LVxcdTAwM2VrdGhyZWFkKSkge1xcbmRyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbWlyb3BjbTIwLmM6Mzg4OlxcdFxcdFxcdHY0bDJfZXJyKFxcdTAwMjZkZXYtXFx1MDAzZXY0bDJfZGV2LCBcXFwia2VybmVsX3RocmVhZCgpIGZhaWxlZFxcXFxuXFxcIik7XFxuZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1taXJvcGNtMjAuYy0zODktXFx0XFx0XFx0djRsMl9maF9yZWxlYXNlKGZpbGUpO1xcbi0tXFxuZHJpdmVycy9tZWRpYS90ZXN0LWRyaXZlcnMvdml2aWQvdml2aWQtY29yZS5jPTE4MDA9c3RhdGljIGludCB2aXZpZF9jcmVhdGVfaW5zdGFuY2Uoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IGluc3QpXFxuLS1cXG5kcml2ZXJzL21lZGlhL3Rlc3QtZHJpdmVycy92aXZpZC92aXZpZC1jb3JlLmMtMjAyMi1cXHRcXHRcXHRkZXYtXFx1MDAzZWt0aHJlYWRfY2VjID0gTlVMTDtcXG5kcml2ZXJzL21lZGlhL3Rlc3QtZHJpdmVycy92aXZpZC92aXZpZC1jb3JlLmM6MjAyMzpcXHRcXHRcXHR2NGwyX2VycihcXHUwMDI2ZGV2LVxcdTAwM2V2NGwyX2RldiwgXFxcImtlcm5lbF90aHJlYWQoKSBmYWlsZWRcXFxcblxcXCIpO1xcbmRyaXZlcnMvbWVkaWEvdGVzdC1kcml2ZXJzL3ZpdmlkL3ZpdmlkLWNvcmUuYy0yMDI0LVxcdFxcdFxcdGdvdG8gdW5yZWdfZGV2O1xcbi0tXFxuZHJpdmVycy9tZWRpYS90ZXN0LWRyaXZlcnMvdml2aWQvdml2aWQta3RocmVhZC1jYXAuYz04MTI9aW50IHZpdmlkX3N0YXJ0X2dlbmVyYXRpbmdfdmlkX2NhcChzdHJ1Y3Qgdml2aWRfZGV2ICpkZXYsIGJvb2wgKnBzdHJlYW1pbmcpXFxuLS1cXG5kcml2ZXJzL21lZGlhL3Rlc3QtZHJpdmVycy92aXZpZC92aXZpZC1rdGhyZWFkLWNhcC5jLTg0Mi1cXHRcXHRkZXYtXFx1MDAzZWt0aHJlYWRfdmlkX2NhcCA9IE5VTEw7XFxuZHJpdmVycy9tZWRpYS90ZXN0LWRyaXZlcnMvdml2aWQvdml2aWQta3RocmVhZC1jYXAuYzo4NDM6XFx0XFx0djRsMl9lcnIoXFx1MDAyNmRldi1cXHUwMDNldjRsMl9kZXYsIFxcXCJrZXJuZWxfdGhyZWFkKCkgZmFpbGVkXFxcXG5cXFwiKTtcXG5kcml2ZXJzL21lZGlhL3Rlc3QtZHJpdmVycy92aXZpZC92aXZpZC1rdGhyZWFkLWNhcC5jLTg0NC1cXHRcXHRyZXR1cm4gZXJyO1xcbi0tXFxuZHJpdmVycy9tZWRpYS90ZXN0LWRyaXZlcnMvdml2aWQvdml2aWQta3RocmVhZC1vdXQuYz0yNjA9aW50IHZpdmlkX3N0YXJ0X2dlbmVyYXRpbmdfdmlkX291dChzdHJ1Y3Qgdml2aWRfZGV2ICpkZXYsIGJvb2wgKnBzdHJlYW1pbmcpXFxuLS1cXG5kcml2ZXJzL21lZGlhL3Rlc3QtZHJpdmVycy92aXZpZC92aXZpZC1rdGhyZWFkLW91dC5jLTI4OS1cXHRcXHRkZXYtXFx1MDAzZWt0aHJlYWRfdmlkX291dCA9IE5VTEw7XFxuZHJpdmVycy9tZWRpYS90ZXN0LWRyaXZlcnMvdml2aWQvdml2aWQta3RocmVhZC1vdXQuYzoyOTA6XFx0XFx0djRsMl9lcnIoXFx1MDAyNmRldi1cXHUwMDNldjRsMl9kZXYsIFxcXCJrZXJuZWxfdGhyZWFkKCkgZmFpbGVkXFxcXG5cXFwiKTtcXG5kcml2ZXJzL21lZGlhL3Rlc3QtZHJpdmVycy92aXZpZC92aXZpZC1rdGhyZWFkLW91dC5jLTI5MS1cXHRcXHRyZXR1cm4gZXJyO1xcbi0tXFxuZHJpdmVycy9tZWRpYS90ZXN0LWRyaXZlcnMvdml2aWQvdml2aWQta3RocmVhZC10b3VjaC5jPTE1MT1pbnQgdml2aWRfc3RhcnRfZ2VuZXJhdGluZ190b3VjaF9jYXAoc3RydWN0IHZpdmlkX2RldiAqZGV2KVxcbi0tXFxuZHJpdmVycy9tZWRpYS90ZXN0LWRyaXZlcnMvdml2aWQvdml2aWQta3RocmVhZC10b3VjaC5jLTE2NS1cXHRcXHRkZXYtXFx1MDAzZWt0aHJlYWRfdG91Y2hfY2FwID0gTlVMTDtcXG5kcml2ZXJzL21lZGlhL3Rlc3QtZHJpdmVycy92aXZpZC92aXZpZC1rdGhyZWFkLXRvdWNoLmM6MTY2OlxcdFxcdHY0bDJfZXJyKFxcdTAwMjZkZXYtXFx1MDAzZXY0bDJfZGV2LCBcXFwia2VybmVsX3RocmVhZCgpIGZhaWxlZFxcXFxuXFxcIik7XFxuZHJpdmVycy9tZWRpYS90ZXN0LWRyaXZlcnMvdml2aWQvdml2aWQta3RocmVhZC10b3VjaC5jLTE2Ny1cXHRcXHRyZXR1cm4gZXJyO1xcbi0tXFxuZHJpdmVycy9tZWRpYS90ZXN0LWRyaXZlcnMvdml2aWQvdml2aWQtc2RyLWNhcC5jPTI3NT1zdGF0aWMgaW50IHNkcl9jYXBfc3RhcnRfc3RyZWFtaW5nKHN0cnVjdCB2YjJfcXVldWUgKnZxLCB1bnNpZ25lZCBjb3VudClcXG4tLVxcbmRyaXZlcnMvbWVkaWEvdGVzdC1kcml2ZXJzL3ZpdmlkL3ZpdmlkLXNkci1jYXAuYy0yODktXFx0XFx0aWYgKElTX0VSUihkZXYtXFx1MDAzZWt0aHJlYWRfc2RyX2NhcCkpIHtcXG5kcml2ZXJzL21lZGlhL3Rlc3QtZHJpdmVycy92aXZpZC92aXZpZC1zZHItY2FwLmM6MjkwOlxcdFxcdFxcdHY0bDJfZXJyKFxcdTAwMjZkZXYtXFx1MDAzZXY0bDJfZGV2LCBcXFwia2VybmVsX3RocmVhZCgpIGZhaWxlZFxcXFxuXFxcIik7XFxuZHJpdmVycy9tZWRpYS90ZXN0LWRyaXZlcnMvdml2aWQvdml2aWQtc2RyLWNhcC5jLTI5MS1cXHRcXHRcXHRlcnIgPSBQVFJfRVJSKGRldi1cXHUwMDNla3RocmVhZF9zZHJfY2FwKTtcXG4tLVxcbmRyaXZlcnMvbWlzYy9zZ2kteHAveHBjLmg9MjA1PXN0cnVjdCB4cGNfYWN0aXZhdGVfbXFfbXNnX2NoY3RsX29wZW5jb21wbGV0ZV91diB7XFxuLS1cXG5kcml2ZXJzL21pc2Mvc2dpLXhwL3hwYy5oLTIxMC0vKlxcbmRyaXZlcnMvbWlzYy9zZ2kteHAveHBjLmg6MjExOiAqIEZ1bmN0aW9ucyByZWdpc3RlcmVkIGJ5IGFkZF90aW1lcigpIG9yIGNhbGxlZCBieSBrZXJuZWxfdGhyZWFkKCkgb25seVxcbmRyaXZlcnMvbWlzYy9zZ2kteHAveHBjLmgtMjEyLSAqIGFsbG93IGZvciBhIHNpbmdsZSA2NC1iaXQgYXJndW1lbnQuIFRoZSBmb2xsb3dpbmcgbWFjcm9zIGNhbiBiZSB1c2VkIHRvXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYz04MjM9bGlxdWlkaW9fcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkICplbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYy04ODktXFx0XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2b2N0X2Rldi1cXHUwMDNlcGNpX2Rldi1cXHUwMDNlZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jOjg5MDpcXHRcXHRcXHRcXHRcXHRcXFwiZmFpbGVkIHRvIGNyZWF0ZSBrZXJuZWxfdGhyZWFkXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYy04OTEtXFx0XFx0XFx0XFx0bGlxdWlkaW9fcmVtb3ZlKHBkZXYpO1xcbi0tXFxuZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmUuaD04MDM9c3RydWN0IHFldGhfY2FyZCB7XFxuLS1cXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZS5oLTgzNC1cXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcnhfbW9kZV93b3JrO1xcbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlLmg6ODM1OlxcdHN0cnVjdCB3b3JrX3N0cnVjdCBrZXJuZWxfdGhyZWFkX3N0YXJ0ZXI7XFxuZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmUuaC04MzYtXFx0c3BpbmxvY2tfdCB0aHJlYWRfbWFza19sb2NrO1xcbi0tXFxuZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jPTEwOTU9aW50IHFldGhfc2NoZWR1bGVfcmVjb3Zlcnkoc3RydWN0IHFldGhfY2FyZCAqY2FyZClcXG4tLVxcbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYy0xMTAyLVxcdGlmICghcmMpXFxuZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jOjExMDM6XFx0XFx0c2NoZWR1bGVfd29yayhcXHUwMDI2Y2FyZC1cXHUwMDNla2VybmVsX3RocmVhZF9zdGFydGVyKTtcXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMtMTEwNC1cXG4tLVxcbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYz0xNTY4PXN0YXRpYyBpbnQgcWV0aF9kb19yZXNldCh2b2lkICpkYXRhKTtcXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmM6MTU2OTpzdGF0aWMgdm9pZCBxZXRoX3N0YXJ0X2tlcm5lbF90aHJlYWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYy0xNTcwLXtcXG4tLVxcbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYy0xNTcyLVxcdHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHFldGhfY2FyZCxcXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmM6MTU3MzpcXHRcXHRcXHRcXHRcXHRrZXJuZWxfdGhyZWFkX3N0YXJ0ZXIpO1xcbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYy0xNTc0LVxcdFFFVEhfQ0FSRF9URVhUKGNhcmQsIDIsIFxcXCJzdHJ0aHJkXFxcIik7XFxuLS1cXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmM9MTU5MD1zdGF0aWMgdm9pZCBxZXRoX3NldHVwX2NhcmQoc3RydWN0IHFldGhfY2FyZCAqY2FyZClcXG4tLVxcbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYy0xNTk5LVxcdG11dGV4X2luaXQoXFx1MDAyNmNhcmQtXFx1MDAzZWRpc2NpcGxpbmVfbXV0ZXgpO1xcbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYzoxNjAwOlxcdElOSVRfV09SSyhcXHUwMDI2Y2FyZC1cXHUwMDNla2VybmVsX3RocmVhZF9zdGFydGVyLCBxZXRoX3N0YXJ0X2tlcm5lbF90aHJlYWQpO1xcbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYy0xNjAxLVxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZjYXJkLVxcdTAwM2VjbWRfd2FpdGVyX2xpc3QpO1xcbi0tXFxuZHJpdmVycy90dHkvaHZjL2h2Y3MuYz0yMjY9c3RhdGljIGludCBodmNzX2luZGV4X2NvdW50O1xcbi0tXFxuZHJpdmVycy90dHkvaHZjL2h2Y3MuYy0yMjgtLypcXG5kcml2ZXJzL3R0eS9odmMvaHZjcy5jOjIyOTogKiBVc2VkIGJ5IHRoZSBraHZjc2QgdG8gcGljayB1cCBJL08gb3BlcmF0aW9ucyB3aGVuIHRoZSBrZXJuZWxfdGhyZWFkIGlzXFxuZHJpdmVycy90dHkvaHZjL2h2Y3MuYy0yMzAtICogYWxyZWFkeSBhd2FrZSBidXQgcG90ZW50aWFsbHkgc2hpZnRlZCB0byBUQVNLX0lOVEVSUlVQVElCTEUgc3RhdGUuXFxuLS1cXG5kcml2ZXJzL3R0eS9odmMvaHZjcy5jPTI1MD1zdHJ1Y3QgaHZjc19zdHJ1Y3Qge1xcbi0tXFxuZHJpdmVycy90dHkvaHZjL2h2Y3MuYy0yNjAtXFx0LypcXG5kcml2ZXJzL3R0eS9odmMvaHZjcy5jOjI2MTpcXHQgKiBVc2VkIHRvIHRlbGwgdGhlIGRyaXZlciBrZXJuZWxfdGhyZWFkIHdoYXQgb3BlcmF0aW9ucyBuZWVkIHRvIHRha2VcXG5kcml2ZXJzL3R0eS9odmMvaHZjcy5jLTI2Mi1cXHQgKiBwbGFjZSB1cG9uIHRoaXMgaHZjc19zdHJ1Y3QgaW5zdGFuY2UuXFxuLS1cXG5kcml2ZXJzL3R0eS9odmMvaHZjcy5jPTExNTM9c3RhdGljIHZvaWQgaHZjc19jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlscClcXG4tLVxcbmRyaXZlcnMvdHR5L2h2Yy9odmNzLmMtMTE4NC1cXHRcXHQvKlxcbmRyaXZlcnMvdHR5L2h2Yy9odmNzLmM6MTE4NTpcXHRcXHQgKiBOVUxMIHRoaXMgZWFybHkgc28gdGhhdCB0aGUga2VybmVsX3RocmVhZCBkb2Vzbid0IHRyeSB0b1xcbmRyaXZlcnMvdHR5L2h2Yy9odmNzLmMtMTE4Ni1cXHRcXHQgKiBleGVjdXRlIGFueSBvcGVyYXRpb25zIG9uIHRoZSBUVFkgZXZlbiB0aG91Z2ggaXQgaXMgb2JsaWdhdGVkXFxuLS1cXG5kcml2ZXJzL3R0eS9odmMvaHZjcy5jPTEyNTg9c3RhdGljIHNzaXplX3QgaHZjc193cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1OCAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL3R0eS9odmMvaHZjcy5jLTEzMTgtXFx0XFx0ICogSWYgdGhpcyBpcyB0cnVlIHRoZW4gd2UgZG9uJ3Qgd2FudCB0byB0cnkgd3JpdGluZyB0byB0aGVcXG5kcml2ZXJzL3R0eS9odmMvaHZjcy5jOjEzMTk6XFx0XFx0ICogaHlwZXJ2aXNvciBiZWNhdXNlIHRoYXQgaXMgdGhlIGtlcm5lbF90aHJlYWRzIGpvYiBub3cuICBXZSdsbFxcbmRyaXZlcnMvdHR5L2h2Yy9odmNzLmMtMTMyMC1cXHRcXHQgKiBqdXN0IGFkZCB0byB0aGUgYnVmZmVyLlxcbi0tXFxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jPTk3NT1zdGF0aWMgaW50IHVzYmF0bV9oZWF2eV9pbml0KHN0cnVjdCB1c2JhdG1fZGF0YSAqaW5zdGFuY2UpXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmMtOTgxLVxcdGlmIChJU19FUlIodCkpIHtcXG5kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmM6OTgyOlxcdFxcdHVzYl9lcnIoaW5zdGFuY2UsIFxcXCIlczogZmFpbGVkIHRvIGNyZWF0ZSBrZXJuZWxfdGhyZWFkICglbGQpIVxcXFxuXFxcIixcXG5kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmMtOTgzLVxcdFxcdFxcdFxcdF9fZnVuY19fLCBQVFJfRVJSKHQpKTtcXG4tLVxcbmRyaXZlcnMvdXNiL2NvcmUvaHViLmM9NjA2Nz1pbnQgdXNiX2h1Yl9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jLTYwODQtXFxuZHJpdmVycy91c2IvY29yZS9odWIuYzo2MDg1OlxcdC8qIEZhbGwgdGhyb3VnaCBpZiBrZXJuZWxfdGhyZWFkIGZhaWxlZCAqL1xcbmRyaXZlcnMvdXNiL2NvcmUvaHViLmMtNjA4Ni1cXHR1c2JfZGVyZWdpc3RlcihcXHUwMDI2aHViX2RyaXZlcik7XFxuLS1cXG5kcml2ZXJzL3hlbi9tYW5hZ2UuYz05Mj1zdGF0aWMgdm9pZCBkb19zdXNwZW5kKHZvaWQpXFxuLS1cXG5kcml2ZXJzL3hlbi9tYW5hZ2UuYy0xMTAtXFxuZHJpdmVycy94ZW4vbWFuYWdlLmM6MTExOlxcdGVyciA9IGZyZWV6ZV9rZXJuZWxfdGhyZWFkcygpO1xcbmRyaXZlcnMveGVuL21hbmFnZS5jLTExMi1cXHRpZiAoZXJyKSB7XFxuLS1cXG5mcy9idWZmZXIuYy04LS8qXFxuZnMvYnVmZmVyLmM6OTogKiBTdGFydCBiZGZsdXNoKCkgd2l0aCBrZXJuZWxfdGhyZWFkIG5vdCBzeXNjYWxsIC0gUGF1bCBHb3J0bWFrZXIsIDEyLzk1XFxuZnMvYnVmZmVyLmMtMTAtICpcXG4tLVxcbmluY2x1ZGUvbGludXgvZnJlZXplci5oPTUwPWV4dGVybiBpbnQgZnJlZXplX3Byb2Nlc3Nlcyh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L2ZyZWV6ZXIuaDo1MTpleHRlcm4gaW50IGZyZWV6ZV9rZXJuZWxfdGhyZWFkcyh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L2ZyZWV6ZXIuaC01Mi1leHRlcm4gdm9pZCB0aGF3X3Byb2Nlc3Nlcyh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L2ZyZWV6ZXIuaDo1MzpleHRlcm4gdm9pZCB0aGF3X2tlcm5lbF90aHJlYWRzKHZvaWQpO1xcbmluY2x1ZGUvbGludXgvZnJlZXplci5oLTU0LWV4dGVybiB2b2lkIHRoYXdfcHJvY2VzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApO1xcbi0tXFxuaW5jbHVkZS9saW51eC9mcmVlemVyLmg9ODQ9c3RhdGljIGlubGluZSBpbnQgZnJlZXplX3Byb2Nlc3Nlcyh2b2lkKSB7IHJldHVybiAtRU5PU1lTOyB9XFxuaW5jbHVkZS9saW51eC9mcmVlemVyLmg6ODU6c3RhdGljIGlubGluZSBpbnQgZnJlZXplX2tlcm5lbF90aHJlYWRzKHZvaWQpIHsgcmV0dXJuIC1FTk9TWVM7IH1cXG5pbmNsdWRlL2xpbnV4L2ZyZWV6ZXIuaC04Ni1zdGF0aWMgaW5saW5lIHZvaWQgdGhhd19wcm9jZXNzZXModm9pZCkge31cXG5pbmNsdWRlL2xpbnV4L2ZyZWV6ZXIuaDo4NzpzdGF0aWMgaW5saW5lIHZvaWQgdGhhd19rZXJuZWxfdGhyZWFkcyh2b2lkKSB7fVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwNzoyMDo0My45ODAyNzcxNjdaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg5OTM4NzEyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi5cblxuKipEaXZpbmcgaW50byBLZXJuZWwgVGhyZWFkIENyZWF0aW9uKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyBga2VybmVsX3RocmVhZGAgY3JlYXRlcyBuZXcga2VybmVsIHRocmVhZHMuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBpdCBwcm9iYWJseSBsZXZlcmFnZXMgYGtlcm5lbF9jbG9uZWAgYW5kLCBhcyBleHBlY3RlZCwgaXQgYXBwZWFycyB0byB1c2UgYGtlcm5lbF9jbG9uZWAuIEFuZCwgbG9va2luZyBhdCB0aGUgZmxhZ3MgaXQgcGFzc2VzLCBpdCdzIHByZXR0eSBzdGFuZGFyZCwgdXNpbmcgYENMT05FX1ZNYCB0byBzaGFyZSB0aGUgdmlydHVhbCBtZW1vcnkgc3BhY2UsIGFuZCBgQ0xPTkVfVU5UUkFDRURgIHdoaWNoIG1ha2VzIHNlbnNlIGZvciBhIGtlcm5lbC1sZXZlbCB0aHJlYWQgdG8gbm90IGJlIGRpcmVjdGx5IGRlYnVnZ2FibGUuXG5cbkJ1dCBob2xkIG9uLi4uIHRoYXQgZGV0YWlsIGFib3V0IGBDTE9ORV9GU2AgaXMgcmluZ2luZyBhIGJlbGwuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBga2VybmVsX3RocmVhZGAgKmRvZXNuJ3QqIHNoYXJlIHRoZSBmaWxlIHN5c3RlbSBpbmZvcm1hdGlvbiwgdW5saWtlIGEgcmVndWxhciB0aHJlYWQgd2l0aGluIGEgcHJvY2Vzcy4gVGhhdCdzIGEga2V5IGRpc3RpbmN0aW9uISBMZXQncyBqdXN0IGNvbmZpcm0gdGhhdCBodW5jaCB3aXRoIGEgcXVpY2sgbG9vayBhdCB0aGUgYGtlcm5lbF90aHJlYWRgIGltcGxlbWVudGF0aW9uIHRvIHZlcmlmeSB0aGF0LiBHb3R0YSBtYWtlIHN1cmUgbXkgdW5kZXJzdGFuZGluZyBpcyBzcG90LW9uLiBJJ2QgaGF0ZSB0byBiZSB3cm9uZyBhYm91dCBzdWNoIGEgZnVuZGFtZW50YWwgcGllY2Ugb2YgdGhlIHB1enpsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDYxMzEsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwNzoyMDo0Ny44Nzk2Njk3OFoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA4ODcyMDA3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwaWRfdCBrZXJuZWxfdGhyZWFkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2NoZWQvdGFzay5oPTEwMj1zdHJ1Y3QgdGFza19zdHJ1Y3QgKmZvcmtfaWRsZShpbnQpO1xcbmluY2x1ZGUvbGludXgvc2NoZWQvdGFzay5oOjEwMzpleHRlcm4gcGlkX3Qga2VybmVsX3RocmVhZChpbnQgKCpmbikodm9pZCAqKSwgdm9pZCAqYXJnLCBjb25zdCBjaGFyICpuYW1lLFxcbmluY2x1ZGUvbGludXgvc2NoZWQvdGFzay5oLTEwNC1cXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBmbGFncyk7XFxuLS1cXG5rZXJuZWwvZm9yay5jPTI2OTM9cGlkX3Qga2VybmVsX2Nsb25lKHN0cnVjdCBrZXJuZWxfY2xvbmVfYXJncyAqYXJncylcXG4tLVxcbmtlcm5lbC9mb3JrLmMtMjc5NS0gKi9cXG5rZXJuZWwvZm9yay5jOjI3OTY6cGlkX3Qga2VybmVsX3RocmVhZChpbnQgKCpmbikodm9pZCAqKSwgdm9pZCAqYXJnLCBjb25zdCBjaGFyICpuYW1lLFxcbmtlcm5lbC9mb3JrLmMtMjc5Ny1cXHRcXHQgICAgdW5zaWduZWQgbG9uZyBmbGFncylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDc6MjA6NTEuOTY4Mzk4MjU2WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MTUzODQzMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBga2VybmVsX3RocmVhZGAgaW4gYGtlcm5lbC9mb3JrLmNgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSByaWdodCBpbi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgY2xlYXJseSBmb2N1c2VkIG9uIHBpbnBvaW50aW5nIGEgc3BlY2lmaWMgZnVuY3Rpb24sIGBrZXJuZWxfdGhyZWFkYCwgYW5kIGl0cyBsb2NhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UgY29kZS4gU3BlY2lmaWNhbGx5LCBJJ20gZGlyZWN0aW5nIG15c2VsZiB0byBpbnZlc3RpZ2F0ZSB0aGUgYGtlcm5lbC9mb3JrLmNgIGZpbGUuIFRoaXMgdGVsbHMgbWUgSSdtIGxpa2VseSBsb29raW5nIGF0IGhvdyB0aHJlYWRzIGFyZSBjcmVhdGVkIG9yIG1hbmFnZWQgd2l0aGluIHRoZSBrZXJuZWwsIGFuZCB0aGUgYGZvcmsuY2AgY29udGV4dCBzdHJvbmdseSBzdWdnZXN0cyBJJ20gZm9jdXNpbmcgb24gcHJvY2VzcyBjcmVhdGlvbiBhbmQsIGJ5IGV4dGVuc2lvbiwgdGhyZWFkaW5nLiBJJ20gcHJvYmFibHkgbG9va2luZyBmb3IgdGhlIG51YW5jZXMgb2YgdGhpcyBmdW5jdGlvbi4gUGVyaGFwcyBJJ20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gYSBzcGVjaWZpYyBzY2VuYXJpbywgZGVidWcgYW4gaXNzdWUgcmVsYXRlZCB0byB0aHJlYWQgY3JlYXRpb24sIG9yIEknbSBzaW1wbHkgdHJ5aW5nIHRvIGJydXNoIHVwIG9uIHRoaXMgcGFydCBvZiB0aGUga2VybmVsJ3MgaW5uZXIgd29ya2luZ3MuIFRoZSBjaG9pY2Ugb2YgYGtlcm5lbF90aHJlYWRgIHN1Z2dlc3RzIEknbSBpbnRlcmVzdGVkIGluIHRoZSBtZWNoYW5pc21zIGZvciBjcmVhdGluZyBrZXJuZWwtbGV2ZWwgdGhyZWFkcyB2ZXJzdXMgdXNlci1sZXZlbCB0aHJlYWRzLCBhcyBvcHBvc2VkIHRvIHRoZSBtb3JlIGNvbW1vbiBgZm9ya2Agc3lzdGVtIGNhbGwgd2hpY2ggaXMgZ2VuZXJhbGx5IHVzZWQgdG8gY3JlYXRlIHByb2Nlc3Nlcy4gVGhpcyBsZXZlbCBvZiBncmFudWxhcml0eSBpcyBrZXkgdG8gd2hhdCBJIGFtIGRvaW5nIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY2MjgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwNzoyMDo1NS40ODM3ODgwMjZaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyOTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9mb3JrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjc5NixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjc5NjpcXHRwaWRfdCBrZXJuZWxfdGhyZWFkKGludCAoKmZuKSh2b2lkICopLCB2b2lkICphcmcsIGNvbnN0IGNoYXIgKm5hbWUsXFxuMjc5NzpcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBmbGFncylcXG4yNzk4OlxcdHtcXG4yNzk5OlxcdFxcdHN0cnVjdCBrZXJuZWxfY2xvbmVfYXJncyBhcmdzID0ge1xcbjI4MDA6XFx0XFx0XFx0LmZsYWdzXFx0XFx0PSAoKGZsYWdzIHwgQ0xPTkVfVk0gfCBDTE9ORV9VTlRSQUNFRCkgXFx1MDAyNiB+Q1NJR05BTCksXFxuMjgwMTpcXHRcXHRcXHQuZXhpdF9zaWduYWxcXHQ9IChmbGFncyBcXHUwMDI2IENTSUdOQUwpLFxcbjI4MDI6XFx0XFx0XFx0LmZuXFx0XFx0PSBmbixcXG4yODAzOlxcdFxcdFxcdC5mbl9hcmdcXHRcXHQ9IGFyZyxcXG4yODA0OlxcdFxcdFxcdC5uYW1lXFx0XFx0PSBuYW1lLFxcbjI4MDU6XFx0XFx0XFx0Lmt0aHJlYWRcXHQ9IDEsXFxuMjgwNjpcXHRcXHR9O1xcbjI4MDc6XFx0XFxuMjgwODpcXHRcXHRyZXR1cm4ga2VybmVsX2Nsb25lKFxcdTAwMjZhcmdzKTtcXG4yODA5OlxcdH1cXG4yODEwOlxcdFxcbjI4MTE6XFx0LypcXG4yODEyOlxcdCAqIENyZWF0ZSBhIHVzZXIgbW9kZSB0aHJlYWQuXFxuMjgxMzpcXHQgKi9cXG4yODE0OlxcdHBpZF90IHVzZXJfbW9kZV90aHJlYWQoaW50ICgqZm4pKHZvaWQgKiksIHZvaWQgKmFyZywgdW5zaWduZWQgbG9uZyBmbGFncylcXG4yODE1OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDc6MjA6NTUuNDg0MDM0OTM2WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NzAwNjQ4NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOlxuXG4qKktlcm5lbCBUaHJlYWQgQ3JlYXRpb246IEEgRGVlcCBEaXZlKipcblxuQWxyaWdodCwgc28gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gdGhhdCB1c2luZyBga2VybmVsX3RocmVhZGAgd291bGQgaW1wbGljaXRseSBoYW5kbGUgZmlsZXN5c3RlbSBjb250ZXh0IGNsb25pbmcsIGJ1dCB0aGF0J3MgaW5jb3JyZWN0LiBJIG5lZWQgdG8gZXhwbGljaXRseSBoYW5kbGUgaXQgaWYgSSB3YW50IHRoYXQuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgbWFpbnRhaW5pbmcgcHJvcGVyIGlzb2xhdGlvbiwgYXMgSSBuZWVkIHRvIGJlIHN1cmUgdGhlIG5ld2x5IGNyZWF0ZWQgdGhyZWFkIG9wZXJhdGVzIHdpdGggdGhlIGNvcnJlY3QgZmlsZXN5c3RlbSBuYW1lc3BhY2UuXG5cbk5vdywgYSBxdWljayBjaGVjay4uLmRvZXMgYGt0aHJlYWRfY3JlYXRlYCB1c2UgYGtlcm5lbF90aHJlYWRgIGludGVybmFsbHk/IEkgbmVlZCB0byBjbGFyaWZ5IHRoYXQgZGVwZW5kZW5jeS4gSWYgaXQgZG9lcywgdGhlbiB0aGUgaW1wbGljYXRpb25zIGV4dGVuZCB0byBhbnkgdXNlIG9mIGBrdGhyZWFkX2NyZWF0ZWAgYXMgd2VsbC4gTGV0IG1lIGp1bXAgaW50byB0aGUgY29kZSBhbmQgdmVyaWZ5LiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGxvb2sgYXQgYGt0aHJlYWRfY3JlYXRlX29uX25vZGVgIGluIGBrZXJuZWwva3RocmVhZC5jYC4gVGhhdCBzaG91bGQgY2xlYXIgdGhpbmdzIHVwLiBOZWVkIHRvIGVuc3VyZSB0aGlzIGlzIGhhbmRsZWQgY29ycmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzIyMSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDc6MjA6NTkuMzU0MTA0NjMzWiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTQ1NDE3NTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtlcm5lbF90aHJlYWQuKmt0aHJlYWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9tYWluLmM9NjcxPXN0YXRpYyBub2lubGluZSB2b2lkIF9fcmVmIF9fbm9yZXR1cm4gcmVzdF9pbml0KHZvaWQpXFxuLS1cXG5pbml0L21haW4uYy02OTQtXFx0bnVtYV9kZWZhdWx0X3BvbGljeSgpO1xcbmluaXQvbWFpbi5jOjY5NTpcXHRwaWQgPSBrZXJuZWxfdGhyZWFkKGt0aHJlYWRkLCBOVUxMLCBOVUxMLCBDTE9ORV9GUyB8IENMT05FX0ZJTEVTKTtcXG5pbml0L21haW4uYy02OTYtXFx0cmN1X3JlYWRfbG9jaygpO1xcbi0tXFxua2VybmVsL2t0aHJlYWQuYz00NTE9c3RhdGljIHZvaWQgY3JlYXRlX2t0aHJlYWQoc3RydWN0IGt0aHJlYWRfY3JlYXRlX2luZm8gKmNyZWF0ZSlcXG4tLVxcbmtlcm5lbC9rdGhyZWFkLmMtNDU4LVxcdC8qIFdlIHdhbnQgb3VyIG93biBzaWduYWwgaGFuZGxlciAod2UgdGFrZSBubyBzaWduYWxzIGJ5IGRlZmF1bHQpLiAqL1xcbmtlcm5lbC9rdGhyZWFkLmM6NDU5OlxcdHBpZCA9IGtlcm5lbF90aHJlYWQoa3RocmVhZCwgY3JlYXRlLCBjcmVhdGUtXFx1MDAzZWZ1bGxfbmFtZSxcXG5rZXJuZWwva3RocmVhZC5jLTQ2MC1cXHRcXHRcXHQgICAgQ0xPTkVfRlMgfCBDTE9ORV9GSUxFUyB8IFNJR0NITEQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwNzoyMTowMi44OTk1NTQzNjFaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjEwNjczMjczMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBMaW5lIG9mIFJlYXNvbmluZyBBYm91dCBrdGhyZWFkIEZpbGVzeXN0ZW0gQ29udGV4dCoqXG5cbk9rYXksIGhlcmUncyBob3cgdGhpcyBjbGlja3MgaW50byBwbGFjZSBpbiBteSBtaW5kLiBTbywgYGt0aHJlYWRkYCBnZXRzIGNyZWF0ZWQgd2l0aCBgQ0xPTkVfRlNgIGFuZCBgQ0xPTkVfRklMRVNgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCdzIHRoZSByb290IG9mIGFsbCBrZXJuZWwgdGhyZWFkcy4gVGhlbiwgSSByZW1lbWJlciB0aGF0IGBjcmVhdGVfa3RocmVhZGAgKmFsc28qIHVzZXMgYENMT05FX0ZTYCBhbmQgYENMT05FX0ZJTEVTYC4gVGhhdCBtZWFucyB0aGF0ICphbGwqIGt0aHJlYWRzIGFyZSBzaGFyaW5nIHRoZSBgaW5pdF9mc2Agc3RydWN0dXJlLlxuXG5BaGEhIFNvLCBpZiB0aGV5IHNoYXJlIGBpbml0X2ZzYCwgYW5kIGBpbml0X21vdW50X3RyZWUoKWAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgZXZlbnR1YWxseSBzZXRzIHVwIGBpbml0X2ZzLnJvb3RgIGFuZCBgaW5pdF9mcy5wd2RgICh0aGUgcm9vdCBhbmQgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSksIHRoZW4gKmV2ZXJ5KiBrdGhyZWFkIHdpbGwgc2VlIHRob3NlIGNoYW5nZXMgZ2xvYmFsbHkuIFRoYXQgZXhwbGFpbnMgaXQhIEl0IG1lYW5zIG5vIGt0aHJlYWQgd2lsbCBldmVyIGhhdmUgYSBudWxsIHJvb3Qgb3IgY3dkICphZnRlciogYGluaXRfbW91bnRfdHJlZSgpYCBydW5zLiBBbmQgcmVhbGx5LCBpdCBtYWtlcyBzZW5zZSwgYmVjYXVzZSBiZWZvcmUgYGluaXRfbW91bnRfdHJlZSgpYCBkb2VzIGl0cyB3b3JrLCBubyBrdGhyZWFkIGNhbiBldmVuICphdHRlbXB0KiB0byBkbyBhbnkgcGF0aCByZXNvbHV0aW9uIGJlY2F1c2UgdGhlcmUgYXJlbid0IGFueSBmaWxlc3lzdGVtcyBtb3VudGVkIHlldCFcblxuTm93LCB0aGUgbmFnZ2luZyBxdWVzdGlvbjogd2hhdCBhYm91dCB0aG9zZSBgaW9fdXJpbmdgIHdvcmtlciB0aHJlYWRzPyBJIG5lZWQgdG8gcXVpY2tseSBjaGVjayB0aGUgYGlvX3VyaW5nYCB3b3JrZXIgdGhyZWFkIGNyZWF0aW9uIGxvZ2ljIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIHNvbWV0aGluZy4gSSdsbCBtYWtlIGEgbWVudGFsIG5vdGUgdG8gZG8gdGhhdCBuZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzcyNCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwNzoyMTowOS4wMDYyOTE2OVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY5NzI3NTI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjcmVhdGVfaW9fd29ya2VyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL2lvLXdxLmM9MTM5PXN0cnVjdCBpb19jYl9jYW5jZWxfZGF0YSB7XFxuLS1cXG5pb191cmluZy9pby13cS5jLTE0Ni1cXG5pb191cmluZy9pby13cS5jOjE0NzpzdGF0aWMgYm9vbCBjcmVhdGVfaW9fd29ya2VyKHN0cnVjdCBpb193cSAqd3EsIHN0cnVjdCBpb193cV9hY2N0ICphY2N0KTtcXG5pb191cmluZy9pby13cS5jLTE0OC1zdGF0aWMgdm9pZCBpb193cV9kZWNfcnVubmluZyhzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXIpO1xcbi0tXFxuaW9fdXJpbmcvaW8td3EuYz0zMjM9c3RhdGljIGJvb2wgaW9fd3FfY3JlYXRlX3dvcmtlcihzdHJ1Y3QgaW9fd3EgKndxLCBzdHJ1Y3QgaW9fd3FfYWNjdCAqYWNjdClcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtMzQwLVxcdGF0b21pY19pbmMoXFx1MDAyNndxLVxcdTAwM2V3b3JrZXJfcmVmcyk7XFxuaW9fdXJpbmcvaW8td3EuYzozNDE6XFx0cmV0dXJuIGNyZWF0ZV9pb193b3JrZXIod3EsIGFjY3QpO1xcbmlvX3VyaW5nL2lvLXdxLmMtMzQyLX1cXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmM9MzUxPXN0YXRpYyB2b2lkIGNyZWF0ZV93b3JrZXJfY2Ioc3RydWN0IGNhbGxiYWNrX2hlYWQgKmNiKVxcbi0tXFxuaW9fdXJpbmcvaW8td3EuYy0zNzYtXFx0aWYgKGRvX2NyZWF0ZSkge1xcbmlvX3VyaW5nL2lvLXdxLmM6Mzc3OlxcdFxcdGNyZWF0ZV9pb193b3JrZXIod3EsIGFjY3QpO1xcbmlvX3VyaW5nL2lvLXdxLmMtMzc4LVxcdH0gZWxzZSB7XFxuLS1cXG5pb191cmluZy9pby13cS5jPTg4Mz1zdGF0aWMgdm9pZCBpb193b3JrcXVldWVfY3JlYXRlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmMtODkyLVxcbmlvX3VyaW5nL2lvLXdxLmM6ODkzOnN0YXRpYyBib29sIGNyZWF0ZV9pb193b3JrZXIoc3RydWN0IGlvX3dxICp3cSwgc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QpXFxuaW9fdXJpbmcvaW8td3EuYy04OTQte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwNzoyMToxMS43MDM1NzgyMVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzg4ODExNjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBjcmVhdGVfaW9fd29ya2VyYCoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBpb191cmluZ2AgaW1wbGVtZW50YXRpb24gYmV0dGVyLCBhbmQgdGhlIGZ1bmN0aW9uIGBjcmVhdGVfaW9fd29ya2VyYCBpbiBgaW9fdXJpbmcvaW8td3EuY2Agc2VlbXMgbGlrZSBhIGtleSBjb21wb25lbnQuIEknbSBhc3N1bWluZyB0aGlzIGlzIHdoZXJlIHRoZSBhY3R1YWwgd29ya2VyIHRocmVhZHMgYXJlIHNwYXduZWQgYW5kIGluaXRpYWxpemVkIGZvciB0aGUgSU8gcXVldWUuIEkgbmVlZCB0byBzZWUgaG93IHRoZXkncmUgbWFuYWdlZCwgd2hhdCByZXNvdXJjZXMgYXJlIGFsbG9jYXRlZCwgYW5kIGhvdyB0aGV5J3JlIHRpZWQgdG8gdGhlIHN1Ym1pc3Npb24gYW5kIGNvbXBsZXRpb24gcXVldWVzLiBJcyB0aGVyZSBhIHRocmVhZCBwb29sIGludm9sdmVkLCBvciBhcmUgdGhleSBkZWRpY2F0ZWQgdG8gZWFjaCBxdWV1ZT8gV2hhdCBhcmd1bWVudHMgYXJlIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYXJlYXMgZm9yIHBvdGVudGlhbCBjb250ZW50aW9uIG9yIGJvdHRsZW5lY2tzIGluIHRoaXMgc2VjdGlvbj8gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIHRvIGxvb2sgZm9yIHRoaW5ncyBsaWtlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIChtdXRleGVzLCBzZW1hcGhvcmVzLCBhdG9taWMgb3BlcmF0aW9ucyksIHRocmVhZCBjcmVhdGlvbiBkZXRhaWxzIChrZXJuZWwgY2FsbHMsIHNjaGVkdWxpbmcgaGludHMpLCBhbmQgYW55IGluaXRpYWxpemF0aW9uIG9mIHBlci13b3JrZXIgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gcGVyZm9ybWFuY2Ugb3IgcmVzb3VyY2UgbWFuYWdlbWVudC4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGVycm9yIGhhbmRsaW5nIGFzIHdlbGw7IGlzIGl0IHJvYnVzdCwgb3IgYXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGR1cmluZyBmYWlsdXJlIHNjZW5hcmlvcz9cblxuXG4iLCJJbnB1dFRva2VucyI6NDg2NjcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwNzoyMToxNS40OTIzOTM1NDRaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYzNTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL2lvLXdxLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODkzLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODkzOlxcdHN0YXRpYyBib29sIGNyZWF0ZV9pb193b3JrZXIoc3RydWN0IGlvX3dxICp3cSwgc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QpXFxuIDg5NDpcXHR7XFxuIDg5NTpcXHRcXHRzdHJ1Y3QgaW9fd29ya2VyICp3b3JrZXI7XFxuIDg5NjpcXHRcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaztcXG4gODk3OlxcdFxcbiA4OTg6XFx0XFx0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpO1xcbiA4OTk6XFx0XFxuIDkwMDpcXHRcXHR3b3JrZXIgPSBremFsbG9jX29iaigqd29ya2VyKTtcXG4gOTAxOlxcdFxcdGlmICghd29ya2VyKSB7XFxuIDkwMjpcXHRmYWlsOlxcbiA5MDM6XFx0XFx0XFx0YXRvbWljX2RlYyhcXHUwMDI2YWNjdC1cXHUwMDNlbnJfcnVubmluZyk7XFxuIDkwNDpcXHRcXHRcXHRyYXdfc3Bpbl9sb2NrKFxcdTAwMjZhY2N0LVxcdTAwM2V3b3JrZXJzX2xvY2spO1xcbiA5MDU6XFx0XFx0XFx0YWNjdC1cXHUwMDNlbnJfd29ya2Vycy0tO1xcbiA5MDY6XFx0XFx0XFx0cmF3X3NwaW5fdW5sb2NrKFxcdTAwMjZhY2N0LVxcdTAwM2V3b3JrZXJzX2xvY2spO1xcbiA5MDc6XFx0XFx0XFx0aW9fd29ya2VyX3JlZl9wdXQod3EpO1xcbiA5MDg6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA5MDk6XFx0XFx0fVxcbiA5MTA6XFx0XFxuIDkxMTpcXHRcXHRyZWZjb3VudF9zZXQoXFx1MDAyNndvcmtlci1cXHUwMDNlcmVmLCAxKTtcXG4gOTEyOlxcdFxcdHdvcmtlci1cXHUwMDNld3EgPSB3cTtcXG4gOTEzOlxcdFxcdHdvcmtlci1cXHUwMDNlYWNjdCA9IGFjY3Q7XFxuIDkxNDpcXHRcXHRyYXdfc3Bpbl9sb2NrX2luaXQoXFx1MDAyNndvcmtlci1cXHUwMDNlbG9jayk7XFxuIDkxNTpcXHRcXHRpbml0X2NvbXBsZXRpb24oXFx1MDAyNndvcmtlci1cXHUwMDNlcmVmX2RvbmUpO1xcbiA5MTY6XFx0XFxuIDkxNzpcXHRcXHR0c2sgPSBjcmVhdGVfaW9fdGhyZWFkKGlvX3dxX3dvcmtlciwgd29ya2VyLCBOVU1BX05PX05PREUpO1xcbiA5MTg6XFx0XFx0aWYgKCFJU19FUlIodHNrKSkge1xcbiA5MTk6XFx0XFx0XFx0aW9faW5pdF9uZXdfd29ya2VyKHdxLCBhY2N0LCB3b3JrZXIsIHRzayk7XFxuIDkyMDpcXHRcXHR9IGVsc2UgaWYgKCFpb19zaG91bGRfcmV0cnlfdGhyZWFkKHdvcmtlciwgUFRSX0VSUih0c2spKSkge1xcbiA5MjE6XFx0XFx0XFx0a2ZyZWUod29ya2VyKTtcXG4gOTIyOlxcdFxcdFxcdGdvdG8gZmFpbDtcXG4gOTIzOlxcdFxcdH0gZWxzZSB7XFxuIDkyNDpcXHRcXHRcXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2d29ya2VyLVxcdTAwM2V3b3JrLCBpb193b3JrcXVldWVfY3JlYXRlKTtcXG4gOTI1OlxcdFxcdFxcdHF1ZXVlX2NyZWF0ZV93b3JrZXJfcmV0cnkod29ya2VyKTtcXG4gOTI2OlxcdFxcdH1cXG4gOTI3OlxcdFxcbiA5Mjg6XFx0XFx0cmV0dXJuIHRydWU7XFxuIDkyOTpcXHR9XFxuIDkzMDpcXHRcXG4gOTMxOlxcdC8qXFxuIDkzMjpcXHQgKiBJdGVyYXRlIHRoZSBwYXNzZWQgaW4gbGlzdCBhbmQgY2FsbCB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gZm9yIGVhY2hcXG4gOTMzOlxcdCAqIHdvcmtlciB0aGF0IGlzbid0IGV4aXRpbmdcXG4gOTM0OlxcdCAqL1xcbiA5MzU6XFx0c3RhdGljIGJvb2wgaW9fYWNjdF9mb3JfZWFjaF93b3JrZXIoc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QsXFxuIDkzNjpcXHRcXHRcXHRcXHRcXHQgICAgYm9vbCAoKmZ1bmMpKHN0cnVjdCBpb193b3JrZXIgKiwgdm9pZCAqKSxcXG4gOTM3OlxcdFxcdFxcdFxcdFxcdCAgICB2b2lkICpkYXRhKVxcbiA5Mzg6XFx0e1xcbiA5Mzk6XFx0XFx0c3RydWN0IGlvX3dvcmtlciAqd29ya2VyO1xcbiA5NDA6XFx0XFx0Ym9vbCByZXQgPSBmYWxzZTtcXG4gOTQxOlxcdFxcbiA5NDI6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uod29ya2VyLCBcXHUwMDI2YWNjdC1cXHUwMDNlYWxsX2xpc3QsIGFsbF9saXN0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA3OjIxOjE1LjQ5MjY2MTQ1NFoiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDI3MjMwNTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgY3JlYXRlX2lvX3RocmVhZGAqKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBnb3QgYSBjYWxsIHRvIGBjcmVhdGVfaW9fdGhyZWFkYCBoZXJlLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gdGhhdCBmdW5jdGlvbi4gTGV0J3Mgc2VlIHdoYXQncyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoZSBvdmVyYWxsIHN5c3RlbSBhcmNoaXRlY3R1cmUsIGVzcGVjaWFsbHkgaG93IGl0J3MgaW50ZXJmYWNpbmcgd2l0aCBvdGhlciB0aHJlYWRzLCBhbnkgc2hhcmVkIHJlc291cmNlcywgYW5kIHRoZSBzY2hlZHVsaW5nIG1lY2hhbmlzbS4gV2hhdCdzIHRoZSB0aHJlYWQgYWZmaW5pdHk/IFdoYXQncyB0aGUgcHJpb3JpdHk/IFdoYXQgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMsIGxpa2UgbXV0ZXhlcyBvciBjb25kaXRpb24gdmFyaWFibGVzLCBhcmUgYmVpbmcgdXNlZCB3aXRoaW4gdGhpcyBjb250ZXh0PyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBkZWFkbG9jayBzY2VuYXJpb3MgSSBuZWVkIHRvIGNvbnNpZGVyPyBJcyB0aGlzIHRocmVhZCBwcmltYXJpbHkgSS9PLWJvdW5kLCBDUFUtYm91bmQsIG9yIGEgbWl4IG9mIGJvdGg/IFRoaXMgaW5pdGlhbCBpbnZlc3RpZ2F0aW9uIGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCByYWNlIGNvbmRpdGlvbnMsIGFuZCBvdmVyYWxsIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBvZiB0aGlzIHBvcnRpb24gb2YgdGhlIGNvZGViYXNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgdGhyZWFkZWQgbW9kZWwgaXMgbm90IGNyZWF0aW5nIGEgbmV3IHBlcmZvcm1hbmNlIGlzc3VlIVxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTcyNiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDc6MjE6MTguOTE5ODk2ODUzWiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjIyMjc3MzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNyZWF0ZV9pb190aHJlYWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zY2hlZC90YXNrLmg9OTk9c3RydWN0IHRhc2tfc3RydWN0ICpjb3B5X3Byb2Nlc3Moc3RydWN0IHBpZCAqcGlkLCBpbnQgdHJhY2UsIGludCBub2RlLFxcbmluY2x1ZGUvbGludXgvc2NoZWQvdGFzay5oLTEwMC1cXHRcXHRcXHRcXHQgc3RydWN0IGtlcm5lbF9jbG9uZV9hcmdzICphcmdzKTtcXG5pbmNsdWRlL2xpbnV4L3NjaGVkL3Rhc2suaDoxMDE6c3RydWN0IHRhc2tfc3RydWN0ICpjcmVhdGVfaW9fdGhyZWFkKGludCAoKmZuKSh2b2lkICopLCB2b2lkICphcmcsIGludCBub2RlKTtcXG5pbmNsdWRlL2xpbnV4L3NjaGVkL3Rhc2suaC0xMDItc3RydWN0IHRhc2tfc3RydWN0ICpmb3JrX2lkbGUoaW50KTtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmM9ODQxPXN0YXRpYyB2b2lkIGNyZWF0ZV93b3JrZXJfY29udChzdHJ1Y3QgY2FsbGJhY2tfaGVhZCAqY2IpXFxuLS1cXG5pb191cmluZy9pby13cS5jLTg1MS1cXHRhY2N0ID0gaW9fd3FfZ2V0X2FjY3Qod29ya2VyKTtcXG5pb191cmluZy9pby13cS5jOjg1MjpcXHR0c2sgPSBjcmVhdGVfaW9fdGhyZWFkKGlvX3dxX3dvcmtlciwgd29ya2VyLCBOVU1BX05PX05PREUpO1xcbmlvX3VyaW5nL2lvLXdxLmMtODUzLVxcdGlmICghSVNfRVJSKHRzaykpIHtcXG4tLVxcbmlvX3VyaW5nL2lvLXdxLmM9ODkzPXN0YXRpYyBib29sIGNyZWF0ZV9pb193b3JrZXIoc3RydWN0IGlvX3dxICp3cSwgc3RydWN0IGlvX3dxX2FjY3QgKmFjY3QpXFxuLS1cXG5pb191cmluZy9pby13cS5jLTkxNi1cXG5pb191cmluZy9pby13cS5jOjkxNzpcXHR0c2sgPSBjcmVhdGVfaW9fdGhyZWFkKGlvX3dxX3dvcmtlciwgd29ya2VyLCBOVU1BX05PX05PREUpO1xcbmlvX3VyaW5nL2lvLXdxLmMtOTE4LVxcdGlmICghSVNfRVJSKHRzaykpIHtcXG4tLVxcbmlvX3VyaW5nL3NxcG9sbC5jPTQzNj1fX2NvbGQgaW50IGlvX3NxX29mZmxvYWRfY3JlYXRlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbi0tXFxuaW9fdXJpbmcvc3Fwb2xsLmMtNTA3LVxcdFxcdHNxZC1cXHUwMDNldGFza190Z2lkID0gY3VycmVudC1cXHUwMDNldGdpZDtcXG5pb191cmluZy9zcXBvbGwuYzo1MDg6XFx0XFx0dHNrID0gY3JlYXRlX2lvX3RocmVhZChpb19zcV90aHJlYWQsIHNxZCwgTlVNQV9OT19OT0RFKTtcXG5pb191cmluZy9zcXBvbGwuYy01MDktXFx0XFx0aWYgKElTX0VSUih0c2spKSB7XFxuLS1cXG5rZXJuZWwvZm9yay5jPTI2NDY9c3RydWN0IHRhc2tfc3RydWN0ICogX19pbml0IGZvcmtfaWRsZShpbnQgY3B1KVxcbi0tXFxua2VybmVsL2ZvcmsuYy0yNjcxLSAqL1xcbmtlcm5lbC9mb3JrLmM6MjY3MjpzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNyZWF0ZV9pb190aHJlYWQoaW50ICgqZm4pKHZvaWQgKiksIHZvaWQgKmFyZywgaW50IG5vZGUpXFxua2VybmVsL2ZvcmsuYy0yNjczLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDc6MjE6MjMuNTQyMTg2OTA3WiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNjgzNjI2ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGBjcmVhdGVfaW9fdGhyZWFkYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBJL08gdGhyZWFkcyBhcmUgY3JlYXRlZC4gTGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGBjcmVhdGVfaW9fdGhyZWFkYCB3aXRoaW4gYGtlcm5lbC9mb3JrLmNgLiBUaGF0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4sIGdpdmVuIHRoYXQgSSdtIGRlYWxpbmcgd2l0aCB0aGUgY3JlYXRpb24gcHJvY2Vzcy4gSSdtIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIG1lY2hhbmljcyBpbnZvbHZlZCwgbG9va2luZyBmb3IgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aGUgbG93LWxldmVsIGRldGFpbHMgb2Ygc2V0dGluZyB1cCB0aGVzZSB0aHJlYWRzLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgaW5mb3JtYXRpb24gYWJvdXQgcmVzb3VyY2UgYWxsb2NhdGlvbiwgdGhyZWFkIHN0cnVjdHVyZXMsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIGZvcmtpbmcgcHJvY2VzcyBvdmVyYWxsLiBIb3BlZnVsbHkgdGhpcyB3aWxsIHNoZWQgbGlnaHQgb24gdGhlIGNvcmUgaW1wbGVtZW50YXRpb24gYW5kIGFueSBwb3RlbnRpYWwgbnVhbmNlcy4gSSdsbCBiZSBsb29raW5nIGZvciB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlIGNyZWF0aW9uIG9mIHRoZSBJL08gdGhyZWFkIGFuZCB0aGUgY29udGV4dCBvZiBpdHMgcGFyZW50IHByb2Nlc3MuIEkgYW0gc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgdGhlIHN5c3RlbSBjYWxscyBhbmQgaW50ZXJuYWwga2VybmVsIGRhdGEgc3RydWN0dXJlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA1ODcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwNzoyMToyNi43MTA1NTM0M1oiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzEyNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2ZvcmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjcyLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNjcyOlxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3JlYXRlX2lvX3RocmVhZChpbnQgKCpmbikodm9pZCAqKSwgdm9pZCAqYXJnLCBpbnQgbm9kZSlcXG4yNjczOlxcdHtcXG4yNjc0OlxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBDTE9ORV9GU3xDTE9ORV9GSUxFU3xDTE9ORV9TSUdIQU5EfENMT05FX1RIUkVBRHxcXG4yNjc1OlxcdFxcdFxcdFxcdCAgICAgIENMT05FX0lPfENMT05FX1ZNfENMT05FX1VOVFJBQ0VEO1xcbjI2NzY6XFx0XFx0c3RydWN0IGtlcm5lbF9jbG9uZV9hcmdzIGFyZ3MgPSB7XFxuMjY3NzpcXHRcXHRcXHQuZmxhZ3NcXHRcXHQ9IGZsYWdzLFxcbjI2Nzg6XFx0XFx0XFx0LmZuXFx0XFx0PSBmbixcXG4yNjc5OlxcdFxcdFxcdC5mbl9hcmdcXHRcXHQ9IGFyZyxcXG4yNjgwOlxcdFxcdFxcdC5pb190aHJlYWRcXHQ9IDEsXFxuMjY4MTpcXHRcXHRcXHQudXNlcl93b3JrZXJcXHQ9IDEsXFxuMjY4MjpcXHRcXHR9O1xcbjI2ODM6XFx0XFxuMjY4NDpcXHRcXHRyZXR1cm4gY29weV9wcm9jZXNzKE5VTEwsIDAsIG5vZGUsIFxcdTAwMjZhcmdzKTtcXG4yNjg1OlxcdH1cXG4yNjg2OlxcdFxcbjI2ODc6XFx0LypcXG4yNjg4OlxcdCAqICBPaywgdGhpcyBpcyB0aGUgbWFpbiBmb3JrLXJvdXRpbmUuXFxuMjY4OTpcXHQgKlxcbjI2OTA6XFx0ICogSXQgY29waWVzIHRoZSBwcm9jZXNzLCBhbmQgaWYgc3VjY2Vzc2Z1bCBraWNrLXN0YXJ0c1xcbjI2OTE6XFx0ICogaXQgYW5kIHdhaXRzIGZvciBpdCB0byBmaW5pc2ggdXNpbmcgdGhlIFZNIGlmIHJlcXVpcmVkLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwNzoyMToyNi43MTA4MjkyMVoiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzExNDkyMTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmNlcm5zIFJlZ2FyZGluZyBpb191cmluZyBhbmQgRmlsZXN5c3RlbSBDb250ZXh0KipcblxuT2theSwgc28gYGNyZWF0ZV9pb190aHJlYWRgIHVzZXMgYENMT05FX0ZTYC4gVGhhdCBtZWFucyB0aGUgbmV3IHRocmVhZCBpbmhlcml0cyB0aGUgY2FsbGVyJ3MgYGZzX3N0cnVjdGAuIEhhbmcgb24gYSBzZWNvbmQuLi4gc2luY2UgdGhlIGNhbGxlciBpcyBhIHVzZXIgcHJvY2VzcywgaXQnbGwgaGF2ZSBhICp2YWxpZCogYGZzX3N0cnVjdGAsIHdpdGggYWN0dWFsIGByb290YCBhbmQgYHB3ZGAgcG9pbnRlcnMuIEJ1dCB3aGF0IGlmIHRoZSB1c2VyIGNhbGxzIGB1bnNoYXJlKENMT05FX0ZTKWAgYmVmb3JlIGFueXRoaW5nIGFjdHVhbGx5IGhhcHBlbnM/XG5cblRoZSBpb191cmluZyB3b3JrZXIgdGhyZWFkICpzaGFyZXMqIHRoYXQgYGZzX3N0cnVjdGAuIEFuZCB0aGF0IGhhcyBzb21lIGludGVyZXN0aW5nIGltcGxpY2F0aW9ucy4gSWYgdGhlIHVzZXIgcHJvY2VzcyBleGl0cywgdGhlIHdvcmtlciB0aHJlYWQga2VlcHMgdGhlIGBmc19zdHJ1Y3RgIGFsaXZlLiBEb2VzIHRoaXMgbWFrZSB0aGUgdXNlciBwcm9jZXNzJ3MgZmlsZXN5c3RlbSBjb250ZXh0IHBlcnNpc3RlbnQgZm9yIHRoZSB3b3JrZXIgdGhyZWFkPyBXaGF0IGhhcHBlbnMgaWYgdGhlIHVzZXIgcHJvY2VzcyBkb2VzIGEgYGNocm9vdGA/IFRoYXQgbWVhbnMgdGhlIHdvcmtlciB0aHJlYWQgY2FuIHNlZSB0aGF0IG5ldyByb290LCB0b28uXG5cbk5vdywgaXMgdGhlcmUgKmFueSogd2F5IGZvciBhIHVzZXIgcHJvY2VzcyB0byBlbmQgdXAgd2l0aCBhIG51bGwgcm9vdCBvciBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5PyBObywgYGNocm9vdGAgYWJzb2x1dGVseSBuZWVkcyBhIHZhbGlkIHBhdGggdG8gd29yaywgYW5kIHRoZSBzYW1lIGdvZXMgZm9yIGBjaGRpcmAuXG5cbldhaXQsIHdoYXQgYWJvdXQgbW91bnQgbmFtZXNwYWNlcz8gSWYgdGhlIHVzZXIgcHJvY2VzcyBpcyBpbiBhIG1vdW50IG5hbWVzcGFjZSBhbmQgdGhhdCBtb3VudCBuYW1lc3BhY2UgaXMgZGVzdHJveWVkPyBUaGUgYGZzX3N0cnVjdGAgaXMgc3RpbGwgcG9pbnRpbmcgYXQgdW5saW5rZWQgZGVudHJ5IHN0cnVjdHVyZXMsIGJ1dCB0aGUgYG1udGAgZmllbGQgaXNuJ3QgTlVMTCEgU28sIGRvZXMgdGhhdCBtZWFuIHRoYXQgdGhlcmUgaXMgbm8gd2F5IHRvIHNldCBgZnMtXHUwMDNlcm9vdC5tbnRgIHRvIE5VTEw/IEkgbmVlZCB0byBnbyBiYWNrIGFuZCBkb3VibGUgY2hlY2sgYGZzL2ZzX3N0cnVjdC5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTExNTksIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwNzoyMTozMi4wMjIzMjQ3MDdaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MzUxMzkyMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnMtXFx1MDAzZXJvb3QubW50ID1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmFtZXNwYWNlLmM9NDIzMj1zdHJ1Y3QgbW50X25hbWVzcGFjZSAqY29weV9tbnRfbnModTY0IGZsYWdzLCBzdHJ1Y3QgbW50X25hbWVzcGFjZSAqbnMsXFxuLS1cXG5mcy9uYW1lc3BhY2UuYy00Mjg3LVxcbmZzL25hbWVzcGFjZS5jOjQyODg6XFx0XFx0XFx0bmV3X2ZzLVxcdTAwM2Vyb290Lm1udCA9IG1udGdldChcXHUwMDI2bmV3LVxcdTAwM2VtbnQpO1xcbmZzL25hbWVzcGFjZS5jLTQyODktXFx0XFx0XFx0bmV3X2ZzLVxcdTAwM2Vyb290LmRlbnRyeSA9IGRnZXQobmV3LVxcdTAwM2VtbnQubW50X3Jvb3QpO1xcbi0tXFxuZnMvbmFtZXNwYWNlLmMtNDMxMC1cXHRcXHRcXHRcXHRcXHRvbGRfcm9vdC5tbnQgPSBuZXdfZnMtXFx1MDAzZXJvb3QubW50O1xcbmZzL25hbWVzcGFjZS5jOjQzMTE6XFx0XFx0XFx0XFx0XFx0bmV3X2ZzLVxcdTAwM2Vyb290Lm1udCA9IG1udGdldChcXHUwMDI2cS1cXHUwMDNlbW50KTtcXG5mcy9uYW1lc3BhY2UuYy00MzEyLVxcdFxcdFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDc6MjE6MzcuNDU3NDcyNzMyWiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNDI3NzQyMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6XG5cbioqTmF2aWdhdGluZyBGaWxlc3lzdGVtIE5hbWVzcGFjZSBDb3B5aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IG1vdW50IG5hbWVzcGFjZXMgYXJlIGNvcGllZC4gSXQncyBoaXR0aW5nIG1lIHRoYXQgYGNvcHlfbW50X25zYCBpcyB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdGhlIGBuZXdfZnMtXHUwMDNlcm9vdC5tbnRgIHZhbHVlLiBJbnRlcmVzdGluZy4gTXkgZ3V0IHRlbGxzIG1lIHRoaXMgaXMgYSBrZXkgc3RlcCBpbiBjcmVhdGluZyB0aGUgbmV3IG5hbWVzcGFjZS4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGF0J3MgdGhlIGludGVudGlvbiwgYW5kIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IGFzc2lnbm1lbnQuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGNvZGUgYXJvdW5kIHRoZXJlLCBpbiBwYXJ0aWN1bGFyLCBgZnMvbmFtZXNwYWNlLmNgLiBJIGhhdmUgYSBmZWVsaW5nIHRoZXJlIG1pZ2h0IGJlIHN1YnRsZSBkZXRhaWxzIHJlZ2FyZGluZyByZWZlcmVuY2VzLCBvd25lcnNoaXAsIGFuZCBwcm9wYWdhdGlvbiBvZiBjaGFuZ2VzIHRoYXQgYXJlIGltcG9ydGFudCB0byB0cmFjayBkb3duIGluIHRoZSBjb3B5aW5nIHByb2Nlc3MuIEl0J3MgYSBjcml0aWNhbCBhcmVhLCBzbyBJJ2xsIHN0YXJ0IHRoZXJlLiBJJ2xsIGZvY3VzIG9uIHRoZSBkYXRhIHN0cnVjdHVyZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxOTc2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDc6MjE6NDEuNjAwMjUwNzcyWiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxNjA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9uYW1lc3BhY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MjgwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MjgwOlxcdFxcdFxcdC8qXFxuNDI4MTpcXHRcXHRcXHQgKiBFbXB0eSBtb3VudCBuYW1lc3BhY2U6IG9ubHkgdGhlIHJvb3QgbW91bnQgZXhpc3RzLlxcbjQyODI6XFx0XFx0XFx0ICogUmVzZXQgcm9vdCBhbmQgcHdkIHRvIHRoZSBjbG9uZWQgbW91bnQncyByb290IGRlbnRyeS5cXG40MjgzOlxcdFxcdFxcdCAqL1xcbjQyODQ6XFx0XFx0XFx0aWYgKG5ld19mcykge1xcbjQyODU6XFx0XFx0XFx0XFx0b2xkX3Jvb3QgPSBuZXdfZnMtXFx1MDAzZXJvb3Q7XFxuNDI4NjpcXHRcXHRcXHRcXHRvbGRfcHdkID0gbmV3X2ZzLVxcdTAwM2Vwd2Q7XFxuNDI4NzpcXHRcXG40Mjg4OlxcdFxcdFxcdFxcdG5ld19mcy1cXHUwMDNlcm9vdC5tbnQgPSBtbnRnZXQoXFx1MDAyNm5ldy1cXHUwMDNlbW50KTtcXG40Mjg5OlxcdFxcdFxcdFxcdG5ld19mcy1cXHUwMDNlcm9vdC5kZW50cnkgPSBkZ2V0KG5ldy1cXHUwMDNlbW50Lm1udF9yb290KTtcXG40MjkwOlxcdFxcbjQyOTE6XFx0XFx0XFx0XFx0bmV3X2ZzLVxcdTAwM2Vwd2QubW50ID0gbW50Z2V0KFxcdTAwMjZuZXctXFx1MDAzZW1udCk7XFxuNDI5MjpcXHRcXHRcXHRcXHRuZXdfZnMtXFx1MDAzZXB3ZC5kZW50cnkgPSBkZ2V0KG5ldy1cXHUwMDNlbW50Lm1udF9yb290KTtcXG40MjkzOlxcdFxcdFxcdH1cXG40Mjk0OlxcdFxcdFxcdG1udF9hZGRfdG9fbnMobmV3X25zLCBuZXcpO1xcbjQyOTU6XFx0XFx0XFx0bmV3X25zLVxcdTAwM2Vucl9tb3VudHMrKztcXG40Mjk2OlxcdFxcdH0gZWxzZSB7XFxuNDI5NzpcXHRcXHRcXHQvKlxcbjQyOTg6XFx0XFx0XFx0ICogRnVsbCBjb3B5OiB3YWxrIG9sZCBhbmQgbmV3IHRyZWVzIGluIHBhcmFsbGVsLCBzd2l0Y2hpbmdcXG40Mjk5OlxcdFxcdFxcdCAqIHRoZSB0c2stXFx1MDAzZWZzLVxcdTAwM2UqIGVsZW1lbnRzIGFuZCBtYXJraW5nIG5ldyB2ZnNtb3VudHMgYXNcXG40MzAwOlxcdFxcdFxcdCAqIGJlbG9uZ2luZyB0byBuZXcgbmFtZXNwYWNlLiAgV2UgaGF2ZSBhbHJlYWR5IGFjcXVpcmVkIGFcXG40MzAxOlxcdFxcdFxcdCAqIHByaXZhdGUgZnNfc3RydWN0LCBzbyB0c2stXFx1MDAzZWZzLVxcdTAwM2Vsb2NrIGlzIG5vdCBuZWVkZWQuXFxuNDMwMjpcXHRcXHRcXHQgKi9cXG40MzAzOlxcdFxcdFxcdHAgPSBvbGQ7XFxuNDMwNDpcXHRcXHRcXHRxID0gbmV3O1xcbjQzMDU6XFx0XFx0XFx0d2hpbGUgKHApIHtcXG40MzA2OlxcdFxcdFxcdFxcdG1udF9hZGRfdG9fbnMobmV3X25zLCBxKTtcXG40MzA3OlxcdFxcdFxcdFxcdG5ld19ucy1cXHUwMDNlbnJfbW91bnRzKys7XFxuNDMwODpcXHRcXHRcXHRcXHRpZiAobmV3X2ZzKSB7XFxuNDMwOTpcXHRcXHRcXHRcXHRcXHRpZiAoXFx1MDAyNnAtXFx1MDAzZW1udCA9PSBuZXdfZnMtXFx1MDAzZXJvb3QubW50KSB7XFxuNDMxMDpcXHRcXHRcXHRcXHRcXHRcXHRvbGRfcm9vdC5tbnQgPSBuZXdfZnMtXFx1MDAzZXJvb3QubW50O1xcbjQzMTE6XFx0XFx0XFx0XFx0XFx0XFx0bmV3X2ZzLVxcdTAwM2Vyb290Lm1udCA9IG1udGdldChcXHUwMDI2cS1cXHUwMDNlbW50KTtcXG40MzEyOlxcdFxcdFxcdFxcdFxcdH1cXG40MzEzOlxcdFxcdFxcdFxcdFxcdGlmIChcXHUwMDI2cC1cXHUwMDNlbW50ID09IG5ld19mcy1cXHUwMDNlcHdkLm1udCkge1xcbjQzMTQ6XFx0XFx0XFx0XFx0XFx0XFx0b2xkX3B3ZC5tbnQgPSBuZXdfZnMtXFx1MDAzZXB3ZC5tbnQ7XFxuNDMxNTpcXHRcXHRcXHRcXHRcXHRcXHRuZXdfZnMtXFx1MDAzZXB3ZC5tbnQgPSBtbnRnZXQoXFx1MDAyNnEtXFx1MDAzZW1udCk7XFxuNDMxNjpcXHRcXHRcXHRcXHRcXHR9XFxuNDMxNzpcXHRcXHRcXHRcXHR9XFxuNDMxODpcXHRcXHRcXHRcXHRwID0gbmV4dF9tbnQocCwgb2xkKTtcXG40MzE5OlxcdFxcdFxcdFxcdHEgPSBuZXh0X21udChxLCBuZXcpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwNzoyMTo0MS42MDExNzM1NTJaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODEzMjcwODcyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBmb3IgTlVMTCBNb3VudHMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBgbW50Z2V0YC4gVGhlIGRvY3VtZW50YXRpb24gaXMgY2xlYXIg4oCTIGBtbnRnZXRgIHNob3VsZCByZXR1cm4gdGhlIG1vdW50LCByaWdodD8gSXQgc2hvdWxkbid0IHJldHVybiBgTlVMTGAgZXZlbiBpZiB0aGUgbW91bnQgaXRzZWxmICppcyogYE5VTExgLiBUaGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gU28sIHRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXMsIHdoZXJlIGNvdWxkIHdlIHBvc3NpYmx5IGVuZCB1cCB3aXRoIGEgc2l0dWF0aW9uIHdoZXJlIGBmcy1cdTAwM2Vyb290Lm1udGAgaXMgYWN0dWFsbHkgc2V0IHRvIGBOVUxMYD9cblxuSW5pdGlhbGx5LCBpdCBzZWVtZWQgbGlrZSB0aGUgb25seSBwbGFjZSB3YXMgaW4gdGhhdCBLVW5pdCB0ZXN0LCB3aGljaCBpcyBhIGJpZyByZWQgZmxhZy4gQnV0IHdhaXQsIEkgbmVlZCB0byBsb29rIGF0IHRoZSBwYXRjaCBkZXNjcmlwdGlvbiBhZ2Fpbi4gSXQgc3RhdGVzLCBcImZzOiBzdXBwb3J0IHRhc2tzIHdpdGggYSBudWxsIHJvb3Qgb3IgY3dkXCIuIEFoYSEgV2h5IHdvdWxkIHRoZXkgYWRkICp0aGlzKiBjYXBhYmlsaXR5PyBUaGlzIGlzIHRoZSBjb3JlIG9mIHRoZSBpc3N1ZS4gSXMgdGhlcmUgYW5vdGhlciBwYXRjaCBpbnRyb2R1Y2luZyBhbm9ueW1vdXMgdGFza3MgdGhhdCBtaWdodCBoYXZlIG5vIHJvb3Qgb3IgY3dkPyBJcyB0aGlzIHJlbGF0ZWQgdG8gYHZob3N0YCBvciBgaW9fdXJpbmdgIHRocmVhZHM/XG5cbk5vdyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZXNlIHRocmVhZHMgYXJlIGNyZWF0ZWQuIGBpb191cmluZ2AgdGhyZWFkcyBhcmUgdHlwaWNhbGx5IGNyZWF0ZWQgd2l0aCBgQ0xPTkVfRlNgLCB3aGljaCB3b3VsZCBub3JtYWxseSBpbmNsdWRlIHRoZSBgZnNfc3RydWN0YC4gSXMgdGhlcmUgYSBwYXRjaCB0aGF0ICpyZW1vdmVzKiB0aGlzIGJlaGF2aW9yPyBPciBwZXJoYXBzIHVzZXMgc29tZXRoaW5nIGxpa2UgYGt0aHJlYWRfdXNlX21tYD8gV2FpdCwgYGt0aHJlYWRfdXNlX21tYCBkb2Vzbid0IG1vZGlmeSB0aGUgYGZzX3N0cnVjdGAuIFdoYXQgYWJvdXQgYHVuc2hhcmVfZnNfc3RydWN0KClgPyBJZiBhIHRhc2sgaGFzIG5vIHJvb3Qgb3IgY3dkLCB0aGF0IGltcGxpZXMgYW4gYW5vbnltb3VzIHRhc2suXG5cbk9rYXksIGxldCdzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgd2hhdCB0aGUgcGF0Y2ggKmFjdHVhbGx5KiBzYXlzLiBcIkEgdGFzayBtYXkgaGF2ZSBubyByb290LlwiIGFuZCBcIkEgdGFzayBtYXkgaGF2ZSBubyBjd2QuXCIgSWYgdGhpcyBwYXRjaCBpcyB0aGUgKm9ubHkqIG9uZSwgdGhlbiBpdCdzIGp1c3QgYWRkaW5nIHRoZSBzdXBwb3J0LCBidXQgbm90aGluZyBjdXJyZW50bHkgdXNlcyBpdCwgZXhjZXB0IHRoZSBLVW5pdCB0ZXN0LCBhbmQgaXQncyB1bnJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UuIEJ1dCB3YWl0LCB0aGlzIHBhdGNoIGlzbid0IGp1c3QgYWJvdXQgYSBoeXBvdGhldGljYWwgc2NlbmFyaW8hIEl0IG1vZGlmaWVzIGEgYnVuY2ggb2Ygb3RoZXIgY29yZSBmaWxlcywgbGlrZSBgZnMvbmFtZWkuY2AsIGBmcy9kX3BhdGguY2AsIGBmcy9wcm9jL2Jhc2UuY2AsIGFuZCBtb3JlLlxuXG5UaGlzIGlzIGNyaXRpY2FsLiBDb3VsZCBgZnMtXHUwMDNlcm9vdC5tbnRgICphbHJlYWR5KiBiZSBgTlVMTGAgaW4gc29tZSAqZXhpc3RpbmcqIHNjZW5hcmlvPyBJIG5lZWQgdG8gbG9vayBhdCBgZXhpdF9mc2AgYW5kIHNlZSBpZiBhbnl0aGluZyBjYW4gdHJpZ2dlciB0aGF0IHNjZW5hcmlvLCBldmVuIGlmIEkgZG9uJ3Qgc2VlIGFueXRoaW5nIG9idmlvdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyODk1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzkwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDc6MjE6NDkuNzMzODg3NzI2WiIsIlNlcSI6NTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMjY0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9mc19zdHJ1Y3QuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA5MDpcXHR2b2lkIGV4aXRfZnMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxuICA5MTpcXHR7XFxuICA5MjpcXHRcXHRzdHJ1Y3QgZnNfc3RydWN0ICpmcyA9IHRzay1cXHUwMDNlZnM7XFxuICA5MzpcXHRcXG4gIDk0OlxcdFxcdGlmIChmcykge1xcbiAgOTU6XFx0XFx0XFx0aW50IGtpbGw7XFxuICA5NjpcXHRcXHRcXHR0YXNrX2xvY2sodHNrKTtcXG4gIDk3OlxcdFxcdFxcdHJlYWRfc2VxbG9ja19leGNsKFxcdTAwMjZmcy1cXHUwMDNlc2VxKTtcXG4gIDk4OlxcdFxcdFxcdHRzay1cXHUwMDNlZnMgPSBOVUxMO1xcbiAgOTk6XFx0XFx0XFx0a2lsbCA9ICEtLWZzLVxcdTAwM2V1c2VycztcXG4gMTAwOlxcdFxcdFxcdHJlYWRfc2VxdW5sb2NrX2V4Y2woXFx1MDAyNmZzLVxcdTAwM2VzZXEpO1xcbiAxMDE6XFx0XFx0XFx0dGFza191bmxvY2sodHNrKTtcXG4gMTAyOlxcdFxcdFxcdGlmIChraWxsKVxcbiAxMDM6XFx0XFx0XFx0XFx0ZnJlZV9mc19zdHJ1Y3QoZnMpO1xcbiAxMDQ6XFx0XFx0fVxcbiAxMDU6XFx0fVxcbiAxMDY6XFx0XFxuIDEwNzpcXHRzdHJ1Y3QgZnNfc3RydWN0ICpjb3B5X2ZzX3N0cnVjdChzdHJ1Y3QgZnNfc3RydWN0ICpvbGQpXFxuIDEwODpcXHR7XFxuIDEwOTpcXHRcXHRzdHJ1Y3QgZnNfc3RydWN0ICpmcyA9IGttZW1fY2FjaGVfYWxsb2MoZnNfY2FjaGVwLCBHRlBfS0VSTkVMKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDc6MjE6NDkuNzM0MDk1ODA2WiIsIlNlcSI6NTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNTg3MjIxNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBGaWxlc3lzdGVtIFVubW91bnQgTG9naWMqKlxuXG5Pa2F5LCBzbyBgZXhpdF9mc2AgaXMgc3VwcG9zZWQgdG8gY2xlYW4gdXAgdGhlIGZpbGVzeXN0ZW0gc3RhdGUgd2hlbiBhIHRhc2sgZXhpdHMuIEl0IGxvb2tzIGxpa2UgaXQncyBzZXR0aW5nIGB0c2stXHUwMDNlZnNgIHRvIE5VTEwsIHdoaWNoIGlzIHRoZSBleHBlY3RlZCBiZWhhdmlvci4gQnV0IGhvbGQgb24gYSBzZWNvbmQuLi4gaXQgKmRvZXNuJ3QqIGFwcGVhciB0byBiZSB1bmxpbmtpbmcgdGhlIG1vdW50IGF0IGFsbCwgc3BlY2lmaWNhbGx5IGBmcy1cdTAwM2Vyb290Lm1udGAgcmVtYWlucyBpbnRhY3QuIFRoaXMgc2VlbXMgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMuIElmIEknbSB1bmRlcnN0YW5kaW5nIHRoaXMgY29ycmVjdGx5LCBsYXRlciBjYWxscyB0byBhY2Nlc3MgdGhlIGZpbGVzeXN0ZW0gbWlnaHQgYmUgcmVmZXJlbmNpbmcgYSBzdGFsZSBvciBwb3RlbnRpYWxseSBkYW5nbGluZyBtb3VudCBwb2ludCwgcmlnaHQ/XG5cbkkgd29uZGVyLi4uIGlmIGB0c2stXHUwMDNlZnNgIGlzIG5vdyBOVUxMLCB3aGF0IGhhcHBlbnMgd2hlbiBzb21ldGhpbmcgdHJpZXMgdG8gZ2V0IHRoZSBmaWxlc3lzdGVtIHJvb3QgdXNpbmcgYGdldF9mc19yb290YD8gV2lsbCBpdCB0cnkgdG8gZGVyZWZlcmVuY2UgYSBOVUxMIHBvaW50ZXI/IFRoaXMgY291bGQgbGVhZCB0byBhIHNlcmlvdXMgb29wcy4gQmVzdCB0byBkb3VibGUtY2hlY2sgdGhlIGBnZXRfZnNfcm9vdGAgZnVuY3Rpb24gaW1tZWRpYXRlbHkuIEkgbmVlZCB0byBiZSBjZXJ0YWluIHRoZXJlJ3MgcHJvcGVyIE5VTEwgY2hlY2tpbmcgdGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgd2lsbCBiZWNvbWUgYW4gaXNzdWUsIGFuZCBpZiBzbywgaG93IHRvIHByZXZlbnQgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MDk4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwNzoyMTo1My44OTI4MjE4MzVaIiwiU2VxIjo1OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1MDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvZnNfc3RydWN0LmhcIixcbiAgXCJGaXJzdExpbmVcIjogNTQsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNTQ6XFx0c3RhdGljIGlubGluZSB2b2lkIGdldF9mc19yb290KHN0cnVjdCBmc19zdHJ1Y3QgKmZzLCBzdHJ1Y3QgcGF0aCAqcm9vdClcXG4gIDU1OlxcdHtcXG4gIDU2OlxcdFxcdHJlYWRfc2VxbG9ja19leGNsKFxcdTAwMjZmcy1cXHUwMDNlc2VxKTtcXG4gIDU3OlxcdFxcdCpyb290ID0gZnMtXFx1MDAzZXJvb3Q7XFxuICA1ODpcXHRcXHRwYXRoX2dldChyb290KTtcXG4gIDU5OlxcdFxcdHJlYWRfc2VxdW5sb2NrX2V4Y2woXFx1MDAyNmZzLVxcdTAwM2VzZXEpO1xcbiAgNjA6XFx0fVxcbiAgNjE6XFx0XFxuICA2MjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X2ZzX3B3ZChzdHJ1Y3QgZnNfc3RydWN0ICpmcywgc3RydWN0IHBhdGggKnB3ZClcXG4gIDYzOlxcdHtcXG4gIDY0OlxcdFxcdHJlYWRfc2VxbG9ja19leGNsKFxcdTAwMjZmcy1cXHUwMDNlc2VxKTtcXG4gIDY1OlxcdFxcdCpwd2QgPSBmcy1cXHUwMDNlcHdkO1xcbiAgNjY6XFx0XFx0cGF0aF9nZXQocHdkKTtcXG4gIDY3OlxcdFxcdHJlYWRfc2VxdW5sb2NrX2V4Y2woXFx1MDAyNmZzLVxcdTAwM2VzZXEpO1xcbiAgNjg6XFx0fVxcbiAgNjk6XFx0XFxuICA3MDpcXHRleHRlcm4gYm9vbCBjdXJyZW50X2Nocm9vdGVkKHZvaWQpO1xcbiAgNzE6XFx0XFxuICA3MjpcXHRzdGF0aWMgaW5saW5lIGludCBjdXJyZW50X3VtYXNrKHZvaWQpXFxuICA3MzpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA3OjIxOjUzLjg5Mjk2MTE3NVoiLCJTZXEiOjU5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDA4NDMxMTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgTnVsbCBQb2ludGVyIERlcmVmZXJlbmNlcyBpbiBGaWxlc3lzdGVtIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpcyBgZ2V0X2ZzX3Jvb3RgIGZ1bmN0aW9uIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGZpbGUgc3lzdGVtIHN0cnVjdHVyZS4gSSBzZWUgdGhhdCBpdCBkZXJlZmVyZW5jZXMgYGZzYCwgd2hpY2ggbWVhbnMgaWYgYHRzay1cdTAwM2Vmc2AgaXMgbnVsbCwga2Fib29tLCB3ZSBnZXQgYW4gb29wcy4gQnV0IEkgcmVtZW1iZXIgdGhhdCBgZ2V0X2ZzX3Jvb3QoY3VycmVudC1cdTAwM2VmcywgLi4uKWAgc2hvdWxkIGJlIHNhZmUgYmVjYXVzZSwgaW4gYSBydW5uaW5nIHRhc2ssIGBjdXJyZW50LVx1MDAzZWZzYCBzaG91bGQgbmV2ZXIgYmUgbnVsbCwgdW5sZXNzIGl0J3MgZXhpdGluZy5cblxuV2FpdCBhIHNlY29uZCwgd2hhdCBhYm91dCB0aGUgY2FzZSB3aGVyZSBhIHRhc2sgY2FsbHMgYGNocm9vdGAgd2l0aCBzb21lIHBhdGggYW5kIHRoZW4gdGhhdCBwYXRoIGdldHMgdW5tb3VudGVkIHVuZGVybmVhdGggaXQ/IEkgaGF2ZSB0byBjb25zaWRlciBhbGwgZWRnZSBjYXNlcy5cblxuQWgsIGJ1dCBgY2hyb290YCBwaW5zIHRoZSBtb3VudC4gU28sIGV2ZW4gaWYgdGhlIHVuZGVybHlpbmcgZGV2aWNlIGlzIGdvbmUsIHRoZSBtb3VudCByZW1haW5zLiBJdCBiZWNvbWVzIGEgbGF6eSB1bm1vdW50LCBidXQgdGhlIG1vdW50IG9iamVjdCBpdHNlbGYgc3RheXMgYWxpdmUuIFNvIHRoYXQgbWVhbnMgYGZzLVx1MDAzZXJvb3QubW50YCBzaG91bGQgKm5ldmVyKiBiZSBudWxsIGFmdGVyIGEgYGNocm9vdGAsIG9yIGFtIEkgbWlzc2luZyBzb21ldGhpbmc/XG5cbk5vdyBJJ20gc3R1Y2sgb24gdGhpcywgdGhlIGxpbmdlcmluZyBxdWVzdGlvbiBpcywgYXJlIHRoZXJlICphbnkqIHNjZW5hcmlvcyBhdCBhbGwgd2hlcmUgd2UgY2FuIGVuZCB1cCB3aXRoIGBmcy1cdTAwM2Vyb290Lm1udGAgYXMgYSBudWxsIHBvaW50ZXI/IEkgbmVlZCB0byBjaGVjay4gVG8gbWFrZSBzdXJlIEkgY292ZXIgYWxsIHRoZSBjYXNlcywgSSdtIGdvaW5nIHRvIHNlYXJjaCB0aHJvdWdoIHRoZSBjb2RlYmFzZSBmb3IgZXZlcnkgaW5zdGFuY2Ugd2hlcmUgYGZzLVx1MDAzZXJvb3QubW50ID0gTlVMTGAgb3IgYGZzLVx1MDAzZXB3ZC5tbnQgPSBOVUxMYCBpcyBzZXQgdG8gdmVyaWZ5IGFsbCBwb3NzaWJsZSBlZGdlIGNhc2VzLiBUaGlzIGlzIGNyaXRpY2FsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDY5OSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA3OjIxOjU5LjMwMTQwMjQwMloiLCJTZXEiOjYwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIxODY1MzQ5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJcXFxcLm1udCA9IE5VTExcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYnRyZnMvdm9sdW1lcy5jPTc0Mz1zdGF0aWMgYm9vbCBpc19zYW1lX2RldmljZShzdHJ1Y3QgYnRyZnNfZGV2aWNlICpkZXZpY2UsIGNvbnN0IGNoYXIgKm5ld19wYXRoKVxcbmZzL2J0cmZzL3ZvbHVtZXMuYy03NDQte1xcbmZzL2J0cmZzL3ZvbHVtZXMuYzo3NDU6XFx0c3RydWN0IHBhdGggb2xkID0geyAubW50ID0gTlVMTCwgLmRlbnRyeSA9IE5VTEwgfTtcXG5mcy9idHJmcy92b2x1bWVzLmM6NzQ2OlxcdHN0cnVjdCBwYXRoIG5ldyA9IHsgLm1udCA9IE5VTEwsIC5kZW50cnkgPSBOVUxMIH07XFxuZnMvYnRyZnMvdm9sdW1lcy5jLTc0Ny1cXHRjaGFyIEFVVE9fS0ZSRUUob2xkX3BhdGgpO1xcbi0tXFxuZnMvbmFtZWkuYz03NTc9c3RhdGljIHZvaWQgX19zZXRfbmFtZWlkYXRhKHN0cnVjdCBuYW1laWRhdGEgKnAsIGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSlcXG4tLVxcbmZzL25hbWVpLmMtNzY0LVxcdHAtXFx1MDAzZXBhdGhuYW1lID0gbGlrZWx5KG5hbWUpID8gbmFtZS1cXHUwMDNlbmFtZSA6IFxcXCJcXFwiO1xcbmZzL25hbWVpLmM6NzY1OlxcdHAtXFx1MDAzZXBhdGgubW50ID0gTlVMTDtcXG5mcy9uYW1laS5jLTc2Ni1cXHRwLVxcdTAwM2VwYXRoLmRlbnRyeSA9IE5VTEw7XFxuLS1cXG5mcy9uYW1laS5jPTg0Mz1zdGF0aWMgdm9pZCB0ZXJtaW5hdGVfd2FsayhzdHJ1Y3QgbmFtZWlkYXRhICpuZClcXG4tLVxcbmZzL25hbWVpLmMtODU5LVxcdG5kLVxcdTAwM2VkZXB0aCA9IDA7XFxuZnMvbmFtZWkuYzo4NjA6XFx0bmQtXFx1MDAzZXBhdGgubW50ID0gTlVMTDtcXG5mcy9uYW1laS5jLTg2MS1cXHRuZC1cXHUwMDNlcGF0aC5kZW50cnkgPSBOVUxMO1xcbi0tXFxuZnMvbmFtZWkuYz05MzU9c3RhdGljIGJvb2wgdHJ5X3RvX3VubGF6eShzdHJ1Y3QgbmFtZWlkYXRhICpuZClcXG4tLVxcbmZzL25hbWVpLmMtOTU2LW91dDE6XFxuZnMvbmFtZWkuYzo5NTc6XFx0bmQtXFx1MDAzZXBhdGgubW50ID0gTlVMTDtcXG5mcy9uYW1laS5jLTk1OC1cXHRuZC1cXHUwMDNlcGF0aC5kZW50cnkgPSBOVUxMO1xcbi0tXFxuZnMvbmFtZWkuYz05NzY9c3RhdGljIGJvb2wgdHJ5X3RvX3VubGF6eV9uZXh0KHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuLS1cXG5mcy9uYW1laS5jLTEwMTgtb3V0MjpcXG5mcy9uYW1laS5jOjEwMTk6XFx0bmQtXFx1MDAzZXBhdGgubW50ID0gTlVMTDtcXG5mcy9uYW1laS5jLTEwMjAtb3V0MTpcXG4tLVxcbmZzL25hbWVpLmM9MTA1MD1zdGF0aWMgaW50IGNvbXBsZXRlX3dhbGsoc3RydWN0IG5hbWVpZGF0YSAqbmQpXFxuLS1cXG5mcy9uYW1laS5jLTEwNjEtXFx0XFx0XFx0aWYgKGxpa2VseSghKG5kLVxcdTAwM2VmbGFncyBcXHUwMDI2IExPT0tVUF9JU19TQ09QRUQpKSlcXG5mcy9uYW1laS5jOjEwNjI6XFx0XFx0XFx0XFx0bmQtXFx1MDAzZXJvb3QubW50ID0gTlVMTDtcXG5mcy9uYW1laS5jLTEwNjMtXFx0XFx0bmQtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5MT09LVVBfQ0FDSEVEO1xcbi0tXFxuZnMvbmFtZWkuYz0yNjg5PXN0YXRpYyBjb25zdCBjaGFyICpwYXRoX2luaXQoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHVuc2lnbmVkIGZsYWdzKVxcbi0tXFxuZnMvbmFtZWkuYy0yNzI3LVxcbmZzL25hbWVpLmM6MjcyODpcXHRuZC1cXHUwMDNlcm9vdC5tbnQgPSBOVUxMO1xcbmZzL25hbWVpLmMtMjcyOS1cXG4tLVxcbmZzL25hbWVpLmM9MjgxOT1zdGF0aWMgaW50IHBhdGhfbG9va3VwYXQoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHVuc2lnbmVkIGZsYWdzLCBzdHJ1Y3QgcGF0aCAqcGF0aClcXG4tLVxcbmZzL25hbWVpLmMtMjg0NC1cXHRcXHQqcGF0aCA9IG5kLVxcdTAwM2VwYXRoO1xcbmZzL25hbWVpLmM6Mjg0NTpcXHRcXHRuZC1cXHUwMDNlcGF0aC5tbnQgPSBOVUxMO1xcbmZzL25hbWVpLmMtMjg0Ni1cXHRcXHRuZC1cXHUwMDNlcGF0aC5kZW50cnkgPSBOVUxMO1xcbi0tXFxuZnMvbmFtZWkuYz0yODc0PXN0YXRpYyBpbnQgcGF0aF9wYXJlbnRhdChzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgdW5zaWduZWQgZmxhZ3MsXFxuLS1cXG5mcy9uYW1laS5jLTI4ODItXFx0XFx0KnBhcmVudCA9IG5kLVxcdTAwM2VwYXRoO1xcbmZzL25hbWVpLmM6Mjg4MzpcXHRcXHRuZC1cXHUwMDNlcGF0aC5tbnQgPSBOVUxMO1xcbmZzL25hbWVpLmMtMjg4NC1cXHRcXHRuZC1cXHUwMDNlcGF0aC5kZW50cnkgPSBOVUxMO1xcbi0tXFxuZnMvb3Blbi5jPTg4NT1zdGF0aWMgaW50IGRvX2RlbnRyeV9vcGVuKHN0cnVjdCBmaWxlICpmLFxcbi0tXFxuZnMvb3Blbi5jLTk3OS1cXHRwYXRoX3B1dChcXHUwMDI2Zi1cXHUwMDNlZl9wYXRoKTtcXG5mcy9vcGVuLmM6OTgwOlxcdGYtXFx1MDAzZV9fZl9wYXRoLm1udCA9IE5VTEw7XFxuZnMvb3Blbi5jLTk4MS1cXHRmLVxcdTAwM2VfX2ZfcGF0aC5kZW50cnkgPSBOVUxMO1xcbi0tXFxuZnMvdGVzdHMvbnVsbF9yb290X2N3ZF9rdW5pdC5jLTE0LVxcbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYzoxNTovKiBUaGUgTlVMTCBwYXRoOiB7IC5tbnQgPSBOVUxMLCAuZGVudHJ5ID0gTlVMTCB9LiAqL1xcbmZzL3Rlc3RzL251bGxfcm9vdF9jd2Rfa3VuaXQuYy0xNi1zdGF0aWMgY29uc3Qgc3RydWN0IHBhdGggbnVsbF9wYXRoO1xcbi0tXFxua2VybmVsL2F1ZGl0c2MuYz05MzA9c3RhdGljIGlubGluZSB2b2lkIGF1ZGl0X2ZyZWVfbmFtZXMoc3RydWN0IGF1ZGl0X2NvbnRleHQgKmNvbnRleHQpXFxuLS1cXG5rZXJuZWwvYXVkaXRzYy5jLTk0My1cXHRjb250ZXh0LVxcdTAwM2Vwd2QuZGVudHJ5ID0gTlVMTDtcXG5rZXJuZWwvYXVkaXRzYy5jOjk0NDpcXHRjb250ZXh0LVxcdTAwM2Vwd2QubW50ID0gTlVMTDtcXG5rZXJuZWwvYXVkaXRzYy5jLTk0NS19XFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmM9NjY1PXN0YXRpYyB2b2lkIHVuaXhfcmVsZWFzZV9zb2NrKHN0cnVjdCBzb2NrICpzaywgaW50IGVtYnJpb24pXFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmMtNjgxLVxcdHUtXFx1MDAzZXBhdGguZGVudHJ5ID0gTlVMTDtcXG5uZXQvdW5peC9hZl91bml4LmM6NjgyOlxcdHUtXFx1MDAzZXBhdGgubW50ID0gTlVMTDtcXG5uZXQvdW5peC9hZl91bml4LmMtNjgzLVxcdHN0YXRlID0gc2stXFx1MDAzZXNrX3N0YXRlO1xcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5jPTEwODI9c3RhdGljIHN0cnVjdCBzb2NrICp1bml4X2NyZWF0ZTEoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQga2VybiwgaW50IHR5cGUpXFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmMtMTExNy1cXHR1LVxcdTAwM2VwYXRoLmRlbnRyeSA9IE5VTEw7XFxubmV0L3VuaXgvYWZfdW5peC5jOjExMTg6XFx0dS1cXHUwMDNlcGF0aC5tbnQgPSBOVUxMO1xcbm5ldC91bml4L2FmX3VuaXguYy0xMTE5LVxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZ1LVxcdTAwM2Vsb2NrKTtcXG4tLVxcbnNlY3VyaXR5L2tleXMvYmlnX2tleS5jPTE3OD12b2lkIGJpZ19rZXlfZGVzdHJveShzdHJ1Y3Qga2V5ICprZXkpXFxuLS1cXG5zZWN1cml0eS9rZXlzL2JpZ19rZXkuYy0xODMtXFx0XFx0cGF0aF9wdXQoXFx1MDAyNnBheWxvYWQtXFx1MDAzZXBhdGgpO1xcbnNlY3VyaXR5L2tleXMvYmlnX2tleS5jOjE4NDpcXHRcXHRwYXlsb2FkLVxcdTAwM2VwYXRoLm1udCA9IE5VTEw7XFxuc2VjdXJpdHkva2V5cy9iaWdfa2V5LmMtMTg1LVxcdFxcdHBheWxvYWQtXFx1MDAzZXBhdGguZGVudHJ5ID0gTlVMTDtcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvc2VsaW51eGZzLmM9MTk3ND1pbnQgX19pbml0IGluaXRfc2VsX2ZzKHZvaWQpXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jLTE5OTUtXFx0XFx0ZXJyID0gUFRSX0VSUihzZWxpbnV4X251bGwubW50KTtcXG5zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jOjE5OTY6XFx0XFx0c2VsaW51eF9udWxsLm1udCA9IE5VTEw7XFxuc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYy0xOTk3LVxcdFxcdHJldHVybiBlcnI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA3OjIyOjA0LjUyMDA3NjUwOVoiLCJTZXEiOjYxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMTY0MDcxNTI2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgS2VybmVsIFBhdGNoJ3MgUmVhY2hhYmlsaXR5KipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXM6IHdhaXQgYSBtaW51dGUsIGBmcy1cdTAwM2Vyb290Lm1udGAgaXMgb25seSBldmVyIHNldCB0byBgTlVMTGAgaW4gdGhhdCBLVW5pdCB0ZXN0LiBFdmVyeXdoZXJlIGVsc2UsIGl0IHNlZW1zIHRvIGJlIGluaXRpYWxpemVkIHdpdGggYSB2YWxpZCBtb3VudCBwb2ludC4gU28sIHRoaXMgcGF0Y2ggaXMgYmFzaWNhbGx5IGFkZGluZyBjb2RlIGZvciBhIGZlYXR1cmUgdGhhdCAqZG9lc24ndCogZXhpc3QgeWV0IGluIHRoZSBrZXJuZWwsIHJpZ2h0PyBFeGNlcHQgbWF5YmUgZm9yIHNvbWUgb3V0LW9mLXRyZWUgbW9kdWxlcyBvciBmdXR1cmUgc3R1ZmYuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoaXMuIFdoYXQgYWJvdXQgYGlvX3VyaW5nYD8gSSBxdWlja2x5IHJlbWVtYmVyZWQgd2UgY2hlY2tlZCB0aGF0IGVhcmxpZXIgYW5kIHRoYXQgYGlvX3VyaW5nYCBkb2Vzbid0IHVzZSBgdW5zaGFyZV9mc19zdHJ1Y3QoKWAuIERvZXMgaXQgKmV2ZXIqIHNldCBgZnMtXHUwMDNlcm9vdC5tbnQgPSBOVUxMYD8gTm9wZS5cblxuT2theSwgbGV0J3MgcGxheSBkZXZpbCdzIGFkdm9jYXRlOiB3aGF0IGlmIGBmc19zdHJ1Y3RgIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYD8gV2UgYWxyZWFkeSBrbm93IGl0J3MgYWxsb2NhdGVkIHRocm91Z2ggYGttZW1fY2FjaGVfYWxsb2NgIGFuZCBpcyBpbml0aWFsaXplZCBieSBjb3B5aW5nIGZyb20gYG9sZGAuIEJ1dCB3aGF0IGlmIGBvbGRgIGhhZCBgcm9vdC5tbnQgPT0gTlVMTGA/IEhtbSwgdGhlIG9ubHkgdGltZSB0aGF0IGNvdWxkIGJlIHRydWUgaXMgaWYgaXQncyB0aGUgYGluaXRfZnNgIGJlZm9yZSBgaW5pdF9tb3VudF90cmVlKClgIGlzIGNhbGxlZC4gQnV0LCBubyB0YXNrICpzaG91bGQqIGJlIGFibGUgdG8gZG8gYW55IHBhdGggcmVzb2x1dGlvbiBiZWZvcmUgYGluaXRfbW91bnRfdHJlZSgpYCBpcyBjYWxsZWQsIGNvcnJlY3Q/IFNvIHRoYXQncyBwcm9iYWJseSBub3QgaXQuXG5cbkFscmlnaHQsIHdoYXQgYWJvdXQgZWRnZSBjYXNlcz8gQ2FuIEkgc29tZWhvdyBnZXQgYGZzLVx1MDAzZXJvb3QubW50YCB0byBgTlVMTGAgdmlhIGBjaHJvb3RgPyBJZiBJIGNhbGwgYGNocm9vdGAgd2l0aCBhbiBlbXB0eSBwYXRoLCBpdCByZXR1cm5zIGAtRU5PRU5UYC4gSWYgSSBjYWxsIGl0IHdpdGggYSBmaWxlIHBhdGgsIGl0IHJldHVybnMgYC1FTk9URElSYC4gSWYgSSBjYWxsIGl0IHdpdGggYSBkaXJlY3RvcnksIGFuZCB0aGVuIHRoZSBkaXJlY3RvcnkgZ2V0cyByZW1vdmVkLCB0aGUgZGVudHJ5IGlzIHVubGlua2VkLCBidXQgYG1udGAgaXNuJ3QgYE5VTExgLiBJZiB0aGUgbW91bnQgaXMgdW5tb3VudGVkLCBpdCdzIGxhenkgdW5tb3VudGVkLCBidXQgdGhlIGBtbnRgIG9iamVjdCB3b24ndCBiZSBmcmVlZCB1bnRpbCB0aGUgcmVmZXJlbmNlIGNvdW50IGRyb3BzIHRvIDAsIHdoaWNoIG1lYW5zIGBtbnRgIGlzbid0IGBOVUxMYC4gU2FtZSBzdG9yeSBpZiB0aGUgbW91bnQgbmFtZXNwYWNlIGlzIGRlc3Ryb3llZCAtIHRoZSBgbW50YCBvYmplY3QgcGVyc2lzdHMgdW50aWwgdGhlIHJlZiBjb3VudCBoaXRzIHplcm8sIHdoaWNoIG1lYW5zIGBtbnRgIHdvbid0IGJlIGBOVUxMYC4gSWYgSSBtb3ZlIHRoZSB0YXNrIHRvIGEgbmV3IG1vdW50IG5hbWVzcGFjZSwgaXRzIGBmcy1cdTAwM2Vyb290YCBpcyB1cGRhdGVkIHRvIHRoZSBuZXcgbmFtZXNwYWNlJ3Mgcm9vdCwgc28gYWdhaW4sIG5vIGBOVUxMYCBoZXJlLiBGaW5hbGx5LCBhIG1vdW50IG5hbWVzcGFjZSBhbHdheXMgaGFzIGEgcm9vdC5cblxuSXMgdGhlcmUgKmFueSogb3RoZXIgd2F5PyBMZXQncyB0cnkgY2hlY2tpbmcgdGhlIGNvbW1pdCBtZXNzYWdlLiBJIGRvbid0IGhhdmUgdGhlIGNvbW1pdCBtZXNzYWdlLCBzbyBJJ2xsIGNoZWNrIHRoZSBzb3VyY2UgY29kZSB0byBmaW5kIGFueSBzeXNjYWxscyB0aGF0IHNldCBgZnMtXHUwMDNlcm9vdC5tbnQgPSBOVUxMYC4gSSBkaWQgc2VhcmNoIGZvciB0aGF0IGFuZCBjYW1lIHVwIGVtcHR5LlxuXG5XaGF0IGFib3V0IHRob3NlIGFub255bW91cyB3b3JrZXIgdGhyZWFkcyBsaWtlIHRob3NlIHVzZWQgaW4gYGlvX3VyaW5nYD8gVGhvc2UgdGhyZWFkcyBtaWdodCBub3QgaGF2ZSBhIHJvb3Qgb3IgQ1dEIHNldCwgbWF5YmU/IEJ1dCwgd2UgYWxyZWFkeSBzZWFyY2hlZCBmb3IgYHNldF9mc19yb290YCBvciBgc2V0X2ZzX3B3ZGAgYmVpbmcgY2FsbGVkIHdpdGggYE5VTExgIGFuZCBjYW1lIHVwIHdpdGggbm90aGluZy5cblxuSXMgYGZzLVx1MDAzZXJvb3RgIHNldCB0byBOVUxMIGJ5IG90aGVyIGZ1bmN0aW9ucz8gTm8sIGBjb3B5X2ZzX3N0cnVjdGAgY29waWVzIGZyb20gYG9sZGAuIGB1bnNoYXJlX2ZzX3N0cnVjdGAgY29waWVzIGZyb20gYGN1cnJlbnQtXHUwMDNlZnNgLiBgZXhpdF9mc2AganVzdCBzZXRzIGB0c2stXHUwMDNlZnNgIHRvIGBOVUxMYCwgKm5vdCogYGZzLVx1MDAzZXJvb3QubW50YC4gYGZyZWVfZnNfc3RydWN0YCBjYWxscyBgcGF0aF9wdXRgLCBidXQgZG9lc24ndCBzZXQgYGZzLVx1MDAzZXJvb3QubW50YCB0byBgTlVMTGAuIGBjaHJvb3RfZnNfcmVmc2AganVzdCByZXBsYWNlcyB0aGUgb2xkIHJvb3Qgd2l0aCB0aGUgbmV3IHJvb3QsIGJ1dCBkb2Vzbid0IHNldCBpdCB0byBgTlVMTGAuXG5cbldoYXQgYWJvdXQgYHNldF9mc19yb290YD8gVGhhdCB0YWtlcyBhIHBhdGgsIHNvIGlmIHRoZSBwYXRoJ3MgYG1udGAgaXMgYE5VTExgLCB0aGVuIGBmcy1cdTAwM2Vyb290Lm1udGAgKndpbGwqIGJlIGBOVUxMYC4gQnV0LCB3aGVuIGlzIHRoaXMgZXZlciBjYWxsZWQgd2l0aCBhIHBhdGggdGhhdCBoYXMgYG1udCA9PSBOVUxMYD8gV2Ugc2VhcmNoZWQgZm9yIGBzZXRfZnNfcm9vdC4qbnVsbGAgYW5kIGZvdW5kIG9ubHkgdGhlIEtVbml0IHRlc3QuIEJ1dCB3ZSBzZWFyY2hlZCBmb3IgYHNldF9mc19yb290LipcdTAwMjZgIGFuZCBmb3VuZCB0aGVzZTogYGluaXRfY2hyb290YCwgYGluaXRfbW91bnRfdHJlZWAsIGBtbnRuc19pbnN0YWxsYCwgYHN5c19jaHJvb3RgLCBgY29tbWl0X25zc2V0YCwgYW5kLCB5ZXAsIGBudWxsX3Jvb3RfY3dkX2t1bml0LmNgLlxuXG5XaGF0IGFib3V0IGBzZXRfZnNfcHdkYD8gU2FtZSBzdG9yeSwgYnV0IHdlIGZvdW5kIHRoZXNlOiBgaW5pdF9jaGRpcmAsIGBpbml0X21vdW50X3RyZWVgLCBgbW50bnNfaW5zdGFsbGAsIGBzeXNfY2hkaXJgLCBgc3lzX2ZjaGRpcmAsIGBjb21taXRfbnNzZXRgLCBhbmQgYWdhaW4sIHRoZSBLVW5pdCB0ZXN0LCBgbnVsbF9yb290X2N3ZF9rdW5pdC5jYC5cblxuU28gaXQgc2VlbXMgdGhlcmUncyBhYnNvbHV0ZWx5IE5PIHdheSB0byBzZXQgYGZzLVx1MDAzZXJvb3QubW50ID0gTlVMTGAgb3IgYGZzLVx1MDAzZXB3ZC5tbnQgPSBOVUxMYCBmcm9tIHVzZXIgc3BhY2VcblxuIiwiSW5wdXRUb2tlbnMiOjU2ODYxLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwNzoyMjoyNi4xNjA3OTcwMjhaIiwiU2VxIjo2MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3OTE0NDAzNjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnMtXFx1MDAzZXB3ZCA9XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2ZzX3N0cnVjdC5jPTMzPXZvaWQgc2V0X2ZzX3B3ZChzdHJ1Y3QgZnNfc3RydWN0ICpmcywgY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpXFxuLS1cXG5mcy9mc19zdHJ1Y3QuYy0zOS1cXHRvbGRfcHdkID0gZnMtXFx1MDAzZXB3ZDtcXG5mcy9mc19zdHJ1Y3QuYzo0MDpcXHRmcy1cXHUwMDNlcHdkID0gKnBhdGg7XFxuZnMvZnNfc3RydWN0LmMtNDEtXFx0d3JpdGVfc2VxdW5sb2NrKFxcdTAwMjZmcy1cXHUwMDNlc2VxKTtcXG4tLVxcbmZzL2ZzX3N0cnVjdC5jPTEwNz1zdHJ1Y3QgZnNfc3RydWN0ICpjb3B5X2ZzX3N0cnVjdChzdHJ1Y3QgZnNfc3RydWN0ICpvbGQpXFxuLS1cXG5mcy9mc19zdHJ1Y3QuYy0xMTktXFx0XFx0cGF0aF9nZXQoXFx1MDAyNmZzLVxcdTAwM2Vyb290KTtcXG5mcy9mc19zdHJ1Y3QuYzoxMjA6XFx0XFx0ZnMtXFx1MDAzZXB3ZCA9IG9sZC1cXHUwMDNlcHdkO1xcbmZzL2ZzX3N0cnVjdC5jLTEyMS1cXHRcXHRwYXRoX2dldChcXHUwMDI2ZnMtXFx1MDAzZXB3ZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA3OjIyOjMwLjk1MjI1MDc0NVoiLCJTZXEiOjYzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5OTc5MTg5NjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgRmlsZSBTeXN0ZW0gUm9vdCBJc3N1ZXMqKlxuXG5Pa2F5LCBzbyB0aGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHBvdGVudGlhbCBwcm9ibGVtcyBzdGVtbWluZyBmcm9tIGZpbGUgc3lzdGVtIHJvb3QgbW9kaWZpY2F0aW9ucywgb3IgcmF0aGVyLCB0aGUgYWJzZW5jZSBvZiBkaXJlY3QgbW9kaWZpY2F0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGFib3V0IHdoYXQgaGFwcGVucyBpZiBhIHRhc2sncyBgZnNgIHN0cnVjdHVyZSBpcyBOVUxMLiBBIE5VTEwgYHRzay1cdTAwM2Vmc2Agd291bGQgY2F1c2UgYGdldF9mc19yb290YCB0byBvb3BzLCByaWdodD8gQnV0IHRoZSBwYXRjaCBJJ20gbG9va2luZyBhdCBzZWVtcyB0byBjaGVjayB0aGUgYHJvb3QtXHUwMDNlbW50YCB2YWx1ZSAqYWZ0ZXIqIGNhbGxpbmcgYGdldF9mc19yb290YC4gRm9yIGluc3RhbmNlLCBpbiBgZnMvcHJvYy9iYXNlLmNgLCB0aGUgcGF0Y2ggbW9kaWZpZXMgYGdldF90YXNrX3Jvb3RgIHRvIGluY2x1ZGUgdGhpcyBjaGVjay5cblxuU28sIGlmIGB0YXNrLVx1MDAzZWZzYCBpcyBOVUxMLCBgZ2V0X2ZzX3Jvb3RgIGlzbid0IGV2ZW4gY2FsbGVkLiBUaGF0J3MgZ29vZC4gSWYgYHRhc2stXHUwMDNlZnNgIGlzbid0IE5VTEwsIHRoZW4gaXQgY2FsbHMgYGdldF9mc19yb290YCwgYW5kIHRoYXQgY29waWVzIHRoZSBgdGFzay1cdTAwM2Vmcy1cdTAwM2Vyb290YCB0byB0aGUgYHJvb3RgIHBhdGggc3RydWN0LiBUaGVuLCAqYWZ0ZXIqIHRoZSBjb3B5LCB3ZSBjaGVjayBgcm9vdC1cdTAwM2VtbnRgLiBUaGlzIG1lYW5zIGB0YXNrLVx1MDAzZWZzLVx1MDAzZXJvb3QubW50YCBpdHNlbGYgY2FuIGJlIE5VTEwhIEhvdyBjYW4gdGhpcyBldmVuIGhhcHBlbj9cblxuQ291bGQgaXQgYmUgdGhhdCBhIGtlcm5lbCB0aHJlYWQgaXMgY3JlYXRlZCB3aXRoIGEgTlVMTCByb290LCBzb21laG93PyBNeSBndXQgcmVhY3Rpb24gaXMgdGhhdCB0aGUga2VybmVsIHdvdWxkIHByZXZlbnQgaXQuIEkgY2hlY2tlZCB0aGUgYGtlcm5lbF90aHJlYWRgIGFuZCBga3RocmVhZF9jcmVhdGVgIGZ1bmN0aW9ucywgYW5kIGJvdGggc2hhcmUgYGluaXRfZnNgLiBBbmQgSSdtIHByZXR0eSBzdXJlIGBpbml0X2ZzYCBoYXMgYSB2YWxpZCByb290IGFuZCBwd2QgYWZ0ZXIgYGluaXRfbW91bnRfdHJlZSgpYC4gU28gSSB3b3VsZCBleHBlY3QgYWxsIGtlcm5lbCB0aHJlYWRzIHRvIGhhdmUgdmFsaWQgcm9vdHMvcHdkcyBhZnRlciB0aGlzIGNhbGwsIHJpZ2h0P1xuXG5CdXQgd2FpdCEgV2hhdCBpZiBhIGtlcm5lbCB0aHJlYWQgaXMgY3JlYXRlZCB1c2luZyBga2VybmVsX3RocmVhZGAgKndpdGhvdXQqIGBDTE9ORV9GU2A/IExldCBtZSBzZWUuLi4geWVzLCBpbiBga2VybmVsL2ZvcmsuY2AsIGBrZXJuZWxfdGhyZWFkYCB1c2VzIGBDTE9ORV9WTSB8IENMT05FX1VOVFJBQ0VEYC4gSWYgYENMT05FX0ZTYCBpcyAqbm90KiBwcmVzZW50IGluIHRoZSBmbGFncywgdGhlbiBgY29weV9mc19zdHJ1Y3RgIGlzIGNhbGxlZC4gSXQgY29waWVzIHRoZSBgY3VycmVudC1cdTAwM2Vmc2Agc3RydWN0LiBJZiBgY3VycmVudGAgaXMgYSBrZXJuZWwgdGhyZWFkLCBpdCBoYXMgYGluaXRfZnNgLiBUaGlzIG5ldyB0aHJlYWQgZ2V0cyBhICpjb3B5KiBvZiBgaW5pdF9mc2AuXG5cbk5vdywgaWYgdGhpcyBjb3B5IGhhcHBlbnMgKmJlZm9yZSogYGluaXRfbW91bnRfdHJlZSgpYCBpcyBjYWxsZWQsIHRoZSBuZXcga2VybmVsIHRocmVhZCdzIGBmc2Agd291bGQgaGF2ZSBhIGByb290Lm1udCA9PSBOVUxMYCBhbmQgYHB3ZC5tbnQgPT0gTlVMTGAuIEFuZCB0aGVuIGBpbml0X21vdW50X3RyZWUoKWAgbW9kaWZpZXMgYGluaXRfZnNgLCBidXQgdGhlIGNvcHkgcmVtYWlucyB1bmNoYW5nZWQsIHdpdGggdGhlIE5VTEwgdmFsdWVzLiBUaGF0J3MgdGhlIGNhdGNoISBBcmUgdGhlcmUgYW55IGtlcm5lbCB0aHJlYWRzIGNyZWF0ZWQgYmVmb3JlIGB2ZnNfY2FjaGVzX2luaXQoKWAgdGhhdCAqZG9uJ3QqIGNsb25lIHRoZSBmaWxlIHN5c3RlbT8gSSBuZWVkIHRvIGNoZWNrIGBpbml0L21haW4uY2AgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjAwMjUsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDc6MjI6NDAuOTMxNDQ1MDYxWiIsIlNlcSI6NjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODk1Nzk1ODU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtlcm5lbF90aHJlYWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA3MDAgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbkRvY3VtZW50YXRpb24vUkNVL2xvY2tkZXAtc3BsYXQucnN0PTI4PW90aGVyIGluZm8gdGhhdCBtaWdodCBoZWxwIHVzIGRlYnVnIHRoaXM6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9SQ1UvbG9ja2RlcC1zcGxhdC5yc3QtNjEtICAgIFtcXHUwMDNjZmZmZmZmZmY4MTA5NzViNlxcdTAwM2VdIGt0aHJlYWQrMHhhNi8weGIwXFxuRG9jdW1lbnRhdGlvbi9SQ1UvbG9ja2RlcC1zcGxhdC5yc3Q6NjI6ICAgIFtcXHUwMDNjZmZmZmZmZmY4MTdkYjE1NFxcdTAwM2VdIGtlcm5lbF90aHJlYWRfaGVscGVyKzB4NC8weDEwXFxuRG9jdW1lbnRhdGlvbi9SQ1UvbG9ja2RlcC1zcGxhdC5yc3QtNjMtICAgIFtcXHUwMDNjZmZmZmZmZmY4MTA2NjQzMFxcdTAwM2VdID8gZmluaXNoX3Rhc2tfc3dpdGNoKzB4ODAvMHgxMTBcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vdm1hbGxvY2VkLWtlcm5lbC1zdGFja3MucnN0PTEwNT1UaHJlYWQgc3RhY2sgYWxsb2NhdGlvbiBpcyBpbml0aWF0ZWQgZnJvbSBjbG9uZSgpLCBmb3JrKCksIHZmb3JrKCksXFxuRG9jdW1lbnRhdGlvbi9tbS92bWFsbG9jZWQta2VybmVsLXN0YWNrcy5yc3Q6MTA2Omtlcm5lbF90aHJlYWQoKSB2aWEga2VybmVsX2Nsb25lKCkuIFRoZXNlIGFyZSBhIGZldyBoaW50cyBmb3Igc2VhcmNoaW5nXFxuRG9jdW1lbnRhdGlvbi9tbS92bWFsbG9jZWQta2VybmVsLXN0YWNrcy5yc3QtMTA3LXRoZSBjb2RlIGJhc2UgdG8gdW5kZXJzdGFuZCB3aGVuIGFuZCBob3cgYSB0aHJlYWQgc3RhY2sgaXMgYWxsb2NhdGVkLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9wb3dlci9mcmVlemluZy1vZi10YXNrcy5yc3Q9ODY9ZnJlZXplX3Byb2Nlc3NlcygpOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9wb3dlci9mcmVlemluZy1vZi10YXNrcy5yc3QtODgtXFxuRG9jdW1lbnRhdGlvbi9wb3dlci9mcmVlemluZy1vZi10YXNrcy5yc3Q6ODk6ZnJlZXplX2tlcm5lbF90aHJlYWRzKCk6XFxuRG9jdW1lbnRhdGlvbi9wb3dlci9mcmVlemluZy1vZi10YXNrcy5yc3QtOTAtICAtIGZyZWV6ZXMgYWxsIHRhc2tzIChpbmNsdWRpbmcga2VybmVsIHRocmVhZHMpIGJlY2F1c2Ugd2UgY2FuJ3QgZnJlZXplXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Bvd2VyL2ZyZWV6aW5nLW9mLXRhc2tzLnJzdC05Mi1cXG5Eb2N1bWVudGF0aW9uL3Bvd2VyL2ZyZWV6aW5nLW9mLXRhc2tzLnJzdDo5Mzp0aGF3X2tlcm5lbF90aHJlYWRzKCk6XFxuRG9jdW1lbnRhdGlvbi9wb3dlci9mcmVlemluZy1vZi10YXNrcy5yc3QtOTQtICAtIHRoYXdzIG9ubHkga2VybmVsIHRocmVhZHM7IHRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBpZiB3ZSBuZWVkIHRvIGRvXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2hpc3RvZ3JhbS5yc3Q9NT1Eb2N1bWVudGF0aW9uIHdyaXR0ZW4gYnkgVG9tIFphbnVzc2lcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhY2UvaGlzdG9ncmFtLnJzdC0xNTA4LSAgICAgICAgICAgICBrZXJuZWxfY2xvbmUrMHgxOGUvMHgzMzBcXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2hpc3RvZ3JhbS5yc3Q6MTUwOTogICAgICAgICAgICAga2VybmVsX3RocmVhZCsweDI5LzB4MzBcXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2hpc3RvZ3JhbS5yc3QtMTUxMC0gICAgICAgICAgICAga3RocmVhZGQrMHgxNTQvMHgxYjBcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3ZtYWxsb2NlZC1rZXJuZWwtc3RhY2tzLnJzdD04Mz1hbGxvY190aHJlYWRfc3RhY2tfbm9kZSgp6LCD55SoX192bWFsbG9jX25vZGVfcmFuZ2UoKeadpeWIhumFjeW4puaciVBBR0VfS0VSTkVMXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS92bWFsbG9jZWQta2VybmVsLXN0YWNrcy5yc3QtOTMtXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vdm1hbGxvY2VkLWtlcm5lbC1zdGFja3MucnN0Ojk0Oue6v+eoi+agiOWIhumFjeaYr+eUsWNsb25lKCnjgIFmb3JrKCnjgIF2Zm9yaygp44CBa2VybmVsX3RocmVhZCgp6YCa6L+Ha2VybmVsX2Nsb25lKClcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS92bWFsbG9jZWQta2VybmVsLXN0YWNrcy5yc3QtOTUt5ZCv5Yqo55qE44CC55WZ54K55o+Q56S65Zyo6L+Z77yM5Lul5L6/5pCc57Si5Luj56CB5bqT77yM5LqG6Kej57q/56iL5qCI5L2V5pe25Lul5Y+K5aaC5L2V5YiG6YWN44CCXFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9lbnRyeS5TPTgzNz1yZXRfZnJvbV9mb3JrOlxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvZW50cnkuUy04NDYtXFx0LmFsaWduIDRcXG5hcmNoL2FscGhhL2tlcm5lbC9lbnRyeS5TOjg0NzpcXHQuZ2xvYmxcXHRyZXRfZnJvbV9rZXJuZWxfdGhyZWFkXFxuYXJjaC9hbHBoYS9rZXJuZWwvZW50cnkuUzo4NDg6XFx0LmVudFxcdHJldF9mcm9tX2tlcm5lbF90aHJlYWRcXG5hcmNoL2FscGhhL2tlcm5lbC9lbnRyeS5TOjg0OTpyZXRfZnJvbV9rZXJuZWxfdGhyZWFkOlxcbmFyY2gvYWxwaGEva2VybmVsL2VudHJ5LlMtODUwLVxcdG1vdlxcdCQxNywgJDE2XFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9lbnRyeS5TLTg1NS1cXHRiclxcdCQzMSwgcmV0X3RvX3VzZXJcXG5hcmNoL2FscGhhL2tlcm5lbC9lbnRyeS5TOjg1NjouZW5kIHJldF9mcm9tX2tlcm5lbF90aHJlYWRcXG5hcmNoL2FscGhhL2tlcm5lbC9lbnRyeS5TLTg1Ny1cXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL3Byb2Nlc3MuYz0yMzI9aW50IGNvcHlfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY29uc3Qgc3RydWN0IGtlcm5lbF9jbG9uZV9hcmdzICphcmdzKVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvcHJvY2Vzcy5jLTIzNy1cXHRleHRlcm4gdm9pZCByZXRfZnJvbV9mb3JrKHZvaWQpO1xcbmFyY2gvYWxwaGEva2VybmVsL3Byb2Nlc3MuYzoyMzg6XFx0ZXh0ZXJuIHZvaWQgcmV0X2Zyb21fa2VybmVsX3RocmVhZCh2b2lkKTtcXG5hcmNoL2FscGhhL2tlcm5lbC9wcm9jZXNzLmMtMjM5LVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvcHJvY2Vzcy5jLTI1My1cXHRcXHRcXHRzaXplb2Yoc3RydWN0IHN3aXRjaF9zdGFjaykgKyBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpKTtcXG5hcmNoL2FscGhhL2tlcm5lbC9wcm9jZXNzLmM6MjU0OlxcdFxcdGNoaWxkc3RhY2stXFx1MDAzZXIyNiA9ICh1bnNpZ25lZCBsb25nKSByZXRfZnJvbV9rZXJuZWxfdGhyZWFkO1xcbmFyY2gvYWxwaGEva2VybmVsL3Byb2Nlc3MuYy0yNTUtXFx0XFx0Y2hpbGRzdGFjay1cXHUwMDNlcjkgPSAodW5zaWduZWQgbG9uZykgYXJncy1cXHUwMDNlZm47XFxuLS1cXG5hcmNoL2FyYy9rZXJuZWwvcHJvY2Vzcy5jPTE2Nz1pbnQgY29weV90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBjb25zdCBzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgKmFyZ3MpXFxuLS1cXG5hcmNoL2FyYy9rZXJuZWwvcHJvY2Vzcy5jLTE4OC1cXHQgKiB0aGlzIHRvIHBvcHVsYXRlIGtlcm5lbCB0aHJlYWQgZW50cnktcHQvYXJncyBpbnRvIGNhbGxlZSByZWdzLFxcbmFyY2gvYXJjL2tlcm5lbC9wcm9jZXNzLmM6MTg5OlxcdCAqIHNvIHRoYXQgcmV0X2Zyb21fa2VybmVsX3RocmVhZCgpIGJlY29tZXMgc2ltcGxlci5cXG5hcmNoL2FyYy9rZXJuZWwvcHJvY2Vzcy5jLTE5MC1cXHQgKi9cXG4tLVxcbmFyY2gvY3NreS9rZXJuZWwvZW50cnkuUz04NT1jc2t5X3N5c2NhbGxfdHJhY2U6XFxuLS1cXG5hcmNoL2Nza3kva2VybmVsL2VudHJ5LlMtMTE0LVxcbmFyY2gvY3NreS9rZXJuZWwvZW50cnkuUzoxMTU6RU5UUlkocmV0X2Zyb21fa2VybmVsX3RocmVhZClcXG5hcmNoL2Nza3kva2VybmVsL2VudHJ5LlMtMTE2LVxcdGpic3JcXHRzY2hlZHVsZV90YWlsXFxuLS1cXG5hcmNoL2Nza3kva2VybmVsL3Byb2Nlc3MuYz0yNT1hc21saW5rYWdlIHZvaWQgcmV0X2Zyb21fZm9yayh2b2lkKTtcXG5hcmNoL2Nza3kva2VybmVsL3Byb2Nlc3MuYzoyNjphc21saW5rYWdlIHZvaWQgcmV0X2Zyb21fa2VybmVsX3RocmVhZCh2b2lkKTtcXG5hcmNoL2Nza3kva2VybmVsL3Byb2Nlc3MuYy0yNy1cXG4tLVxcbmFyY2gvY3NreS9rZXJuZWwvcHJvY2Vzcy5jPTMzPWludCBjb3B5X3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGNvbnN0IHN0cnVjdCBrZXJuZWxfY2xvbmVfYXJncyAqYXJncylcXG4tLVxcbmFyY2gvY3NreS9rZXJuZWwvcHJvY2Vzcy5jLTUyLVxcdFxcdG1lbXNldChjaGlsZHJlZ3MsIDAsIHNpemVvZihzdHJ1Y3QgcHRfcmVncykpO1xcbmFyY2gvY3NreS9rZXJuZWwvcHJvY2Vzcy5jOjUzOlxcdFxcdGNoaWxkc3RhY2stXFx1MDAzZXIxNSA9ICh1bnNpZ25lZCBsb25nKSByZXRfZnJvbV9rZXJuZWxfdGhyZWFkO1xcbmFyY2gvY3NreS9rZXJuZWwvcHJvY2Vzcy5jLTU0LVxcdFxcdGNoaWxkc3RhY2stXFx1MDAzZXIxMCA9ICh1bnNpZ25lZCBsb25nKSBhcmdzLVxcdTAwM2Vmbl9hcmc7XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9hc20tcHJvdG90eXBlcy5oPTE2PWFzbWxpbmthZ2Ugdm9pZCBub2luc3RyIF9fbm9fc3RhY2tfcHJvdGVjdG9yIHJldF9mcm9tX2Zvcmsoc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LFxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vYXNtLXByb3RvdHlwZXMuaC0xOC1cXG5hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9hc20tcHJvdG90eXBlcy5oOjE5OmFzbWxpbmthZ2Ugdm9pZCBub2luc3RyIF9fbm9fc3RhY2tfcHJvdGVjdG9yIHJldF9mcm9tX2tlcm5lbF90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LFxcbmFyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2FzbS1wcm90b3R5cGVzLmgtMjAtXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzLFxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vc3dpdGNoX3RvLmg9MjQ9ZXh0ZXJuIGFzbWxpbmthZ2Ugc3RydWN0IHRhc2tfc3RydWN0ICpfX3N3aXRjaF90byhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9zd2l0Y2hfdG8uaC0yOC0gKiBGb3IgbmV3bHkgY3JlYXRlZCBrZXJuZWwgdGhyZWFkcyBzd2l0Y2hfdG8oKSB3aWxsIHJldHVybiB0b1xcbmFyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3N3aXRjaF90by5oOjI5OiAqIHJldF9mcm9tX2tlcm5lbF90aHJlYWQsIG5ld2x5IGNyZWF0ZWQgdXNlciB0aHJlYWRzIHRvIHJldF9mcm9tX2ZvcmsuXFxuYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vc3dpdGNoX3RvLmgtMzAtICogVGhhdCBpcywgZXZlcnl0aGluZyBmb2xsb3dpbmcgX19zd2l0Y2hfdG8oKSB3aWxsIGJlIHNraXBwZWQgZm9yIG5ldyB0aHJlYWRzLlxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL2VudHJ5LlM9OTI9U1lNX0NPREVfRU5EKHJldF9mcm9tX2ZvcmtfYXNtKVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9lbnRyeS5TLTkzLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9lbnRyeS5TOjk0OlNZTV9DT0RFX1NUQVJUKHJldF9mcm9tX2tlcm5lbF90aHJlYWRfYXNtKVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9lbnRyeS5TLTk1LVxcdFVOV0lORF9ISU5UX1JFR1NcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9lbnRyeS5TLTk4LVxcdG1vdmVcXHRcXHRhMywgczFcXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvZW50cnkuUzo5OTpcXHRibFxcdFxcdHJldF9mcm9tX2tlcm5lbF90aHJlYWRcXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvZW50cnkuUy0xMDAtXFx0U1RBQ0tMRUFLX0VSQVNFXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvZW50cnkuUy0xMDMtXFx0UkVTVE9SRV9TUF9BTkRfUkVUXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL2VudHJ5LlM6MTA0OlNZTV9DT0RFX0VORChyZXRfZnJvbV9rZXJuZWxfdGhyZWFkX2FzbSlcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9wcm9jZXNzLmM9NzM9YXNtbGlua2FnZSB2b2lkIHJldF9mcm9tX2ZvcmtfYXNtKHZvaWQpO1xcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9wcm9jZXNzLmM6NzQ6YXNtbGlua2FnZSB2b2lkIHJldF9mcm9tX2tlcm5lbF90aHJlYWRfYXNtKHZvaWQpO1xcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9wcm9jZXNzLmMtNzUtXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvcHJvY2Vzcy5jPTE1NT1hc21saW5rYWdlIHZvaWQgbm9pbnN0ciBfX25vX3N0YWNrX3Byb3RlY3RvciByZXRfZnJvbV9mb3JrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldixcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9wcm9jZXNzLmMtMTYxLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9wcm9jZXNzLmM6MTYyOmFzbWxpbmthZ2Ugdm9pZCBub2luc3RyIF9fbm9fc3RhY2tfcHJvdGVjdG9yIHJldF9mcm9tX2tlcm5lbF90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LFxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9wcm9jZXNzLmMtMTYzLVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncyxcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9wcm9jZXNzLmM9MTc1PWludCBjb3B5X3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGNvbnN0IHN0cnVjdCBrZXJuZWxfY2xvbmVfYXJncyAqYXJncylcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9wcm9jZXNzLmMtMTk4LVxcdFxcdHAtXFx1MDAzZXRocmVhZC5yZWcyNCA9ICh1bnNpZ25lZCBsb25nKWFyZ3MtXFx1MDAzZWZuX2FyZztcXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvcHJvY2Vzcy5jOjE5OTpcXHRcXHRwLVxcdTAwM2V0aHJlYWQucmVnMDEgPSAodW5zaWduZWQgbG9uZylyZXRfZnJvbV9rZXJuZWxfdGhyZWFkX2FzbTtcXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvcHJvY2Vzcy5jOjIwMDpcXHRcXHRwLVxcdTAwM2V0aHJlYWQuc2NoZWRfcmEgPSAodW5zaWduZWQgbG9uZylyZXRfZnJvbV9rZXJuZWxfdGhyZWFkX2FzbTtcXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvcHJvY2Vzcy5jLTIwMS1cXHRcXHRtZW1zZXQoY2hpbGRyZWdzLCAwLCBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpKTtcXG4tLVxcbmFyY2gvbTY4ay9rZXJuZWwvZW50cnkuUz0xMzA9RU5UUlkocmV0X2Zyb21fZm9yaylcXG4tLVxcbmFyY2gvbTY4ay9rZXJuZWwvZW50cnkuUy0xMzUtXFxuYXJjaC9tNjhrL2tlcm5lbC9lbnRyeS5TOjEzNjpFTlRSWShyZXRfZnJvbV9rZXJuZWxfdGhyZWFkKVxcbmFyY2gvbTY4ay9rZXJuZWwvZW50cnkuUy0xMzctXFx0fCBhMyBjb250YWlucyB0aGUga2VybmVsIHRocmVhZCBwYXlsb2FkLCBkNyAtIGl0cyBhcmd1bWVudFxcbi0tXFxuYXJjaC9tNjhrL2tlcm5lbC9wcm9jZXNzLmM9NDM9YXNtbGlua2FnZSB2b2lkIHJldF9mcm9tX2Zvcmsodm9pZCk7XFxuYXJjaC9tNjhrL2tlcm5lbC9wcm9jZXNzLmM6NDQ6YXNtbGlua2FnZSB2b2lkIHJldF9mcm9tX2tlcm5lbF90aHJlYWQodm9pZCk7XFxuYXJjaC9tNjhrL2tlcm5lbC9wcm9jZXNzLmMtNDUtXFxuLS1cXG5hcmNoL202OGsva2VybmVsL3Byb2Nlc3MuYz0xNDI9aW50IGNvcHlfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY29uc3Qgc3RydWN0IGtlcm5lbF9jbG9uZV9hcmdzICphcmdzKVxcbi0tXFxuYXJjaC9tNjhrL2tlcm5lbC9wcm9jZXNzLmMtMTY4LVxcdFxcdGZyYW1lLVxcdTAwM2Vzdy5kNyA9ICh1bnNpZ25lZCBsb25nKWFyZ3MtXFx1MDAzZWZuX2FyZztcXG5hcmNoL202OGsva2VybmVsL3Byb2Nlc3MuYzoxNjk6XFx0XFx0ZnJhbWUtXFx1MDAzZXN3LnJldHBjID0gKHVuc2lnbmVkIGxvbmcpcmV0X2Zyb21fa2VybmVsX3RocmVhZDtcXG5hcmNoL202OGsva2VybmVsL3Byb2Nlc3MuYy0xNzAtXFx0XFx0cC1cXHUwMDNldGhyZWFkLnVzcCA9IDA7XFxuLS1cXG5hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmg9Mjk9ZXh0ZXJuIHZvaWQgcmV0X2Zyb21fZm9yayh2b2lkKTtcXG5hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmg6MzA6ZXh0ZXJuIHZvaWQgcmV0X2Zyb21fa2VybmVsX3RocmVhZCh2b2lkKTtcXG5hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgtMzEtXFxuLS1cXG5hcmNoL21pY3JvYmxhemUva2VybmVsL2VudHJ5LlM9NTAzPUNfRU5UUlkocmV0X2Zyb21fZm9yayk6XFxuLS1cXG5hcmNoL21pY3JvYmxhemUva2VybmVsL2VudHJ5LlMtNTA5LVxcbmFyY2gvbWljcm9ibGF6ZS9rZXJuZWwvZW50cnkuUzo1MTA6Q19FTlRSWShyZXRfZnJvbV9rZXJuZWxfdGhyZWFkKTpcXG5hcmNoL21pY3JvYmxhemUva2VybmVsL2VudHJ5LlMtNTExLVxcdGJyYWxpZFxcdHIxNSwgc2NoZWR1bGVfdGFpbDsgLyogLi4ud2hpY2ggaXMgc2NoZWR1bGVfdGFpbCdzIGFyZyAqL1xcbi0tXFxuYXJjaC9taWNyb2JsYXplL2tlcm5lbC9wcm9jZXNzLmM9NTU9aW50IGNvcHlfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY29uc3Qgc3RydWN0IGtlcm5lbF9jbG9uZV9hcmdzICphcmdzKVxcbi0tXFxuYXJjaC9taWNyb2JsYXplL2tlcm5lbC9wcm9jZXNzLmMtNzMtXFx0XFx0dGktXFx1MDAzZWNwdV9jb250ZXh0Lm1zciA9IGNoaWxkcmVncy1cXHUwMDNlbXNyIFxcdTAwMjYgfk1TUl9JRTtcXG5hcmNoL21pY3JvYmxhemUva2VybmVsL3Byb2Nlc3MuYzo3NDpcXHRcXHR0aS1cXHUwMDNlY3B1X2NvbnRleHQucjE1ID0gKHVuc2lnbmVkIGxvbmcpcmV0X2Zyb21fa2VybmVsX3RocmVhZCAtIDg7XFxuYXJjaC9taWNyb2JsYXplL2tlcm5lbC9wcm9jZXNzLmMtNzUtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL21pcHMvaW5jbHVkZS9hc20vc3dpdGNoX3RvLmg9ODk9ZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9zd2l0Y2hfdG8uaC0xMDQtICogRm9yIG5ld2x5IGNyZWF0ZWQga2VybmVsIHRocmVhZHMgc3dpdGNoX3RvKCkgd2lsbCByZXR1cm4gdG9cXG5hcmNoL21pcHMvaW5jbHVkZS9hc20vc3dpdGNoX3RvLmg6MTA1OiAqIHJldF9mcm9tX2tlcm5lbF90aHJlYWQsIG5ld2x5IGNyZWF0ZWQgdXNlciB0aHJlYWRzIHRvIHJldF9mcm9tX2ZvcmsuXFxuYXJjaC9taXBzL2luY2x1ZGUvYXNtL3N3aXRjaF90by5oLTEwNi0gKiBUaGF0IGlzLCBldmVyeXRoaW5nIGZvbGxvd2luZyByZXN1bWUoKSB3aWxsIGJlIHNraXBwZWQgZm9yIG5ldyB0aHJlYWRzLlxcbi0tXFxuYXJjaC9taXBzL2tlcm5lbC9lbnRyeS5TPTU2PXJlc3VtZV9rZXJuZWw6XFxuLS1cXG5hcmNoL21pcHMva2VybmVsL2VudHJ5LlMtNjktXFxuYXJjaC9taXBzL2tlcm5lbC9lbnRyeS5TOjcwOkZFWFBPUlQocmV0X2Zyb21fa2VybmVsX3RocmVhZClcXG5hcmNoL21pcHMva2VybmVsL2VudHJ5LlMtNzEtXFx0amFsXFx0c2NoZWR1bGVfdGFpbFxcdFxcdCMgYTAgPSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXZcXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvcHJvY2Vzcy5jPTQ5PWFzbWxpbmthZ2Ugdm9pZCByZXRfZnJvbV9mb3JrKHZvaWQpO1xcbmFyY2gvbWlwcy9rZXJuZWwvcHJvY2Vzcy5jOjUwOmFzbWxpbmthZ2Ugdm9pZCByZXRfZnJvbV9rZXJuZWxfdGhyZWFkKHZvaWQpO1xcbmFyY2gvbWlwcy9rZXJuZWwvcHJvY2Vzcy5jLTUxLVxcbi0tXFxuYXJjaC9taXBzL2tlcm5lbC9wcm9jZXNzLmM9MTA4PWludCBjb3B5X3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGNvbnN0IHN0cnVjdCBrZXJuZWxfY2xvbmVfYXJncyAqYXJncylcXG4tLVxcbmFyY2gvbWlwcy9rZXJuZWwvcHJvY2Vzcy5jLTE0My1cXHRcXHRwLVxcdTAwM2V0aHJlYWQucmVnMjkgPSBjaGlsZGtzcDtcXG5hcmNoL21pcHMva2VybmVsL3Byb2Nlc3MuYzoxNDQ6XFx0XFx0cC1cXHUwMDNldGhyZWFkLnJlZzMxID0gKHVuc2lnbmVkIGxvbmcpIHJldF9mcm9tX2tlcm5lbF90aHJlYWQ7XFxuYXJjaC9taXBzL2tlcm5lbC9wcm9jZXNzLmMtMTQ1LSNpZiBkZWZpbmVkKENPTkZJR19DUFVfUjMwMDApXFxuLS1cXG5hcmNoL25pb3MyL2tlcm5lbC9lbnRyeS5TPTUwOD1FTlRSWShyZXRfZnJvbV9mb3JrKVxcbi0tXFxuYXJjaC9uaW9zMi9rZXJuZWwvZW50cnkuUy01MTEtXFxuYXJjaC9uaW9zMi9rZXJuZWwvZW50cnkuUzo1MTI6RU5UUlkocmV0X2Zyb21fa2VybmVsX3RocmVhZClcXG5hcmNoL25pb3MyL2tlcm5lbC9lbnRyeS5TLTUxMy1cXHRjYWxsXFx0c2NoZWR1bGVfdGFpbFxcbi0tXFxuYXJjaC9uaW9zMi9rZXJuZWwvcHJvY2Vzcy5jPTI4PWFzbWxpbmthZ2Ugdm9pZCByZXRfZnJvbV9mb3JrKHZvaWQpO1xcbmFyY2gvbmlvczIva2VybmVsL3Byb2Nlc3MuYzoyOTphc21saW5rYWdlIHZvaWQgcmV0X2Zyb21fa2VybmVsX3RocmVhZCh2b2lkKTtcXG5hcmNoL25pb3MyL2tlcm5lbC9wcm9jZXNzLmMtMzAtXFxuLS1cXG5hcmNoL25pb3MyL2tlcm5lbC9wcm9jZXNzLmM9MTAyPWludCBjb3B5X3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGNvbnN0IHN0cnVjdCBrZXJuZWxfY2xvbmVfYXJncyAqYXJncylcXG4tLVxcbmFyY2gvbmlvczIva2VybmVsL3Byb2Nlc3MuYy0xMTgtXFx0XFx0Y2hpbGRzdGFjay1cXHUwMDNlcjE3ID0gKHVuc2lnbmVkIGxvbmcpIGFyZ3MtXFx1MDAzZWZuX2FyZztcXG5hcmNoL25pb3MyL2tlcm5lbC9wcm9jZXNzLmM6MTE5OlxcdFxcdGNoaWxkc3RhY2stXFx1MDAzZXJhID0gKHVuc2lnbmVkIGxvbmcpIHJldF9mcm9tX2tlcm5lbF90aHJlYWQ7XFxuYXJjaC9uaW9zMi9rZXJuZWwvcHJvY2Vzcy5jLTEyMC1cXHRcXHRjaGlsZHJlZ3MtXFx1MDAzZWVzdGF0dXMgPSBTVEFUVVNfUElFO1xcbi0tXFxuYXJjaC9vcGVucmlzYy9rZXJuZWwvZW50cnkuUz0xMDgyPUVOVFJZKF9zd2l0Y2gpXFxuLS1cXG5hcmNoL29wZW5yaXNjL2tlcm5lbC9lbnRyeS5TLTExNDktXFx0ICogdGhhdCBtYXkgYmUgZWl0aGVyIHNjaGVkdWxlKCksIHJldF9mcm9tX2ZvcmsoKSwgb3JcXG5hcmNoL29wZW5yaXNjL2tlcm5lbC9lbnRyeS5TOjExNTA6XFx0ICogcmV0X2Zyb21fa2VybmVsX3RocmVhZCgpLiAgSWYgd2UgYXJlIHJldHVybmluZyB0byBhIG5ldyB0aHJlYWQsXFxuYXJjaC9vcGVucmlzYy9rZXJuZWwvZW50cnkuUy0xMTUxLVxcdCAqIHdlIGFyZSBleHBlY3RlZCB0byBoYXZlIHNldCB1cCB0aGUgYXJnIHRvIHNjaGVkdWxlX3RhaWwgYWxyZWFkeSxcXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9lbnRyeS5TPTcyOD1FTkQoZmF1bHRfdmVjdG9yXzExKVxcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL2VudHJ5LlMtNzQyLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9lbnRyeS5TOjc0MzpFTlRSWShyZXRfZnJvbV9rZXJuZWxfdGhyZWFkKVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9lbnRyeS5TLTc0NC1cXHQvKiBDYWxsIHNjaGVkdWxlX3RhaWwgZmlyc3QgdGhvdWdoICovXFxuLS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvZW50cnkuUy03NTctXFx0bm9wXFxuYXJjaC9wYXJpc2Mva2VybmVsL2VudHJ5LlM6NzU4OkVORChyZXRfZnJvbV9rZXJuZWxfdGhyZWFkKVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9lbnRyeS5TLTc1OS1cXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzLmM9MjA1PWNvcHlfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY29uc3Qgc3RydWN0IGtlcm5lbF9jbG9uZV9hcmdzICphcmdzKVxcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3MuYy0yMTUtXFx0ICogTWFrZSB0aGVtIGNvbnN0IHNvIHRoZSBjb21waWxlciBrbm93cyB0aGV5IGxpdmUgaW4gLnRleHQgKi9cXG5hcmNoL3BhcmlzYy9rZXJuZWwvcHJvY2Vzcy5jOjIxNjpcXHRleHRlcm4gdm9pZCAqIGNvbnN0IHJldF9mcm9tX2tlcm5lbF90aHJlYWQ7XFxuYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3MuYy0yMTctXFx0ZXh0ZXJuIHZvaWQgKiBjb25zdCBjaGlsZF9yZXR1cm47XFxuLS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvcHJvY2Vzcy5jLTIyMy1cXHRcXHRcXHRyZXR1cm4gMDtcXG5hcmNoL3BhcmlzYy9rZXJuZWwvcHJvY2Vzcy5jOjIyNDpcXHRcXHQvKiBNdXN0IGV4aXQgdmlhIHJldF9mcm9tX2tlcm5lbF90aHJlYWQgaW4gb3JkZXJcXG5hcmNoL3BhcmlzYy9rZXJuZWwvcHJvY2Vzcy5jLTIyNS1cXHRcXHQgKiB0byBjYWxsIHNjaGVkdWxlX3RhaWwoKVxcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3MuYy0yMjctXFx0XFx0Y3JlZ3MtXFx1MDAzZWtzcCA9ICh1bnNpZ25lZCBsb25nKSBzdGFjayArIEZSQU1FX1NJWkUgKyBQVF9TWl9BTEdOO1xcbmFyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzLmM6MjI4OlxcdFxcdGNyZWdzLVxcdTAwM2VrcGMgPSAodW5zaWduZWQgbG9uZykgXFx1MDAyNnJldF9mcm9tX2tlcm5lbF90aHJlYWQ7XFxuYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3MuYy0yMjktXFx0XFx0LypcXG5hcmNoL3BhcmlzYy9rZXJuZWwvcHJvY2Vzcy5jLTIzMC1cXHRcXHQgKiBDb3B5IGZ1bmN0aW9uIGFuZCBhcmd1bWVudCB0byBiZSBjYWxsZWQgZnJvbVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzLmM6MjMxOlxcdFxcdCAqIHJldF9mcm9tX2tlcm5lbF90aHJlYWQuXFxuYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3MuYy0yMzItXFx0XFx0ICovXFxuLS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmM9MjE3PXN0YXRpYyBpbnQgdW53aW5kX3NwZWNpYWwoc3RydWN0IHVud2luZF9mcmFtZV9pbmZvICppbmZvLCB1bnNpZ25lZCBsb25nIHBjLCBpbnQgZnJhbWVfc2l6ZSlcXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYy0yMjUtXFx0ICovXFxuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jOjIyNjpcXHRleHRlcm4gdm9pZCAqIGNvbnN0IHJldF9mcm9tX2tlcm5lbF90aHJlYWQ7XFxuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jLTIyNy1cXHRleHRlcm4gdm9pZCAqIGNvbnN0IHN5c2NhbGxfZXhpdDtcXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYy0yNDEtXFxuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jOjI0MjpcXHRpZiAocGMgPT0gKHVuc2lnbmVkIGxvbmcpXFx1MDAyNnJldF9mcm9tX2tlcm5lbF90aHJlYWQgfHxcXG5hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmMtMjQzLVxcdCAgICBwYyA9PSAodW5zaWduZWQgbG9uZylcXHUwMDI2c3lzY2FsbF9leGl0KSB7XFxuLS1cXG5hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzMyLlM9MTg5PXJldF9mcm9tX2tlcm5lbF91c2VyX3RocmVhZDpcXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfMzIuUy0xOTctXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV8zMi5TOjE5ODpcXHQuZ2xvYmxcXHRzdGFydF9rZXJuZWxfdGhyZWFkXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV8zMi5TOjE5OTpzdGFydF9rZXJuZWxfdGhyZWFkOlxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfMzIuUy0yMDAtXFx0YmxcXHRzY2hlZHVsZV90YWlsXFxuLS1cXG5hcmNoL3Bvd2VycGMva2VybmVsL2ludGVycnVwdF82NC5TPTc0Mj1fR0xPQkFMKHJldF9mcm9tX2tlcm5lbF91c2VyX3RocmVhZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvaW50ZXJydXB0XzY0LlMtNzU3LVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvaW50ZXJydXB0XzY0LlM6NzU4Ol9HTE9CQUwoc3RhcnRfa2VybmVsX3RocmVhZClcXG5hcmNoL3Bvd2VycGMva2VybmVsL2ludGVycnVwdF82NC5TLTc1OS1cXHRibFxcdENGVU5DKHNjaGVkdWxlX3RhaWwpXFxuLS1cXG5hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYz0xMjc5PXN0cnVjdCB0YXNrX3N0cnVjdCAqX19zd2l0Y2hfdG8oc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LFxcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMtMTM0MS1cXHQgKiBmcmFtZSBmb3IgbmV3IHRhc2tzIHRoYXQgZGlyZWN0bHkgcmV0dXJucyB0aHJvdWdoIHJldF9mcm9tX2ZvcmsoKSBvclxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jOjEzNDI6XFx0ICogcmV0X2Zyb21fa2VybmVsX3RocmVhZCgpLiBTZWUgY29weV90aHJlYWQoKSBmb3IgZGV0YWlscy5cXG5hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYy0xMzQzLVxcdCAqL1xcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMtMTM1NC1cXHQgKiBOb3RoaW5nIGFmdGVyIF9zd2l0Y2ggd2lsbCBiZSBydW4gZm9yIG5ld2x5IGNyZWF0ZWQgdGFza3MsXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmM6MTM1NTpcXHQgKiBiZWNhdXNlIHRoZXkgc3dpdGNoIGRpcmVjdGx5IHRvIHJldF9mcm9tX2ZvcmsvcmV0X2Zyb21fa2VybmVsX3RocmVhZFxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jLTEzNTYtXFx0ICogZXRjLiBDb2RlIGFkZGVkIGhlcmUgc2hvdWxkIGhhdmUgYSBjb21tZW50IGV4cGxhaW5pbmcgd2h5IHRoYXQgaXNcXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jPTE3MzM9aW50IGNvcHlfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY29uc3Qgc3RydWN0IGtlcm5lbF9jbG9uZV9hcmdzICphcmdzKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMtMTczOC1cXHRleHRlcm4gdm9pZCByZXRfZnJvbV9rZXJuZWxfdXNlcl90aHJlYWQodm9pZCk7XFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmM6MTczOTpcXHRleHRlcm4gdm9pZCBzdGFydF9rZXJuZWxfdGhyZWFkKHZvaWQpO1xcbmFyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jLTE3NDAtXFx0dm9pZCAoKmYpKHZvaWQpO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMtMTc1NC1cXG5hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYzoxNzU1OlxcdFxcdGYgPSBzdGFydF9rZXJuZWxfdGhyZWFkO1xcbmFyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jLTE3NTYtXFx0XFx0cC1cXHUwMDNldGhyZWFkLnJlZ3MgPSBOVUxMO1xcdC8qIG5vIHVzZXIgcmVnaXN0ZXIgc3RhdGUgKi9cXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jLTE4MjktXFx0XFx0ICogc3dpdGNoIGZyYW1lIHNvIHRoZXkgYXJlIGxvYWRlZCBieSBfc3dpdGNoIGJlZm9yZSBpdCByZXR1cm5zXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmM6MTgzMDpcXHRcXHQgKiB0byByZXRfZnJvbV9rZXJuZWxfdGhyZWFkLlxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jLTE4MzEtXFx0XFx0ICovXFxuLS1cXG5hcmNoL3NoL2tlcm5lbC9lbnRyeS1jb21tb24uUz0yNjk9cmV0X2Zyb21fZm9yazpcXG4tLVxcbmFyY2gvc2gva2VybmVsL2VudHJ5LWNvbW1vbi5TLTI3Ni1cXHQuYWxpZ25cXHQyXFxuYXJjaC9zaC9rZXJuZWwvZW50cnktY29tbW9uLlM6Mjc3OlxcdC5nbG9ibFxcdHJldF9mcm9tX2tlcm5lbF90aHJlYWRcXG5hcmNoL3NoL2tlcm5lbC9lbnRyeS1jb21tb24uUzoyNzg6cmV0X2Zyb21fa2VybmVsX3RocmVhZDpcXG5hcmNoL3NoL2tlcm5lbC9lbnRyeS1jb21tb24uUy0yNzktXFx0bW92LmxcXHQxZiwgcjhcXG4tLVxcbmFyY2gvc2gva2VybmVsL3Byb2Nlc3NfMzIuYz04Nz1hc21saW5rYWdlIHZvaWQgcmV0X2Zyb21fZm9yayh2b2lkKTtcXG5hcmNoL3NoL2tlcm5lbC9wcm9jZXNzXzMyLmM6ODg6YXNtbGlua2FnZSB2b2lkIHJldF9mcm9tX2tlcm5lbF90aHJlYWQodm9pZCk7XFxuYXJjaC9zaC9rZXJuZWwvcHJvY2Vzc18zMi5jLTg5LVxcbmFyY2gvc2gva2VybmVsL3Byb2Nlc3NfMzIuYz05MD1pbnQgY29weV90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBjb25zdCBzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgKmFyZ3MpXFxuLS1cXG5hcmNoL3NoL2tlcm5lbC9wcm9jZXNzXzMyLmMtMTE1LVxcdFxcdG1lbXNldChjaGlsZHJlZ3MsIDAsIHNpemVvZihzdHJ1Y3QgcHRfcmVncykpO1xcbmFyY2gvc2gva2VybmVsL3Byb2Nlc3NfMzIuYzoxMTY6XFx0XFx0cC1cXHUwMDNldGhyZWFkLnBjID0gKHVuc2lnbmVkIGxvbmcpIHJldF9mcm9tX2tlcm5lbF90aHJlYWQ7XFxuYXJjaC9zaC9rZXJuZWwvcHJvY2Vzc18zMi5jLTExNy1cXHRcXHRjaGlsZHJlZ3MtXFx1MDAzZXJlZ3NbNF0gPSAodW5zaWduZWQgbG9uZykgYXJncy1cXHUwMDNlZm5fYXJnO1xcbi0tXFxuYXJjaC9zcGFyYy9rZXJuZWwvZW50cnkuUz05NjM9cmV0X2Zyb21fZm9yazpcXG4tLVxcbmFyY2gvc3BhcmMva2VybmVsL2VudHJ5LlMtOTY4LVxcbmFyY2gvc3BhcmMva2VybmVsL2VudHJ5LlM6OTY5OlxcdC5nbG9ibFxcdHJldF9mcm9tX2tlcm5lbF90aHJlYWRcXG5hcmNoL3NwYXJjL2tlcm5lbC9lbnRyeS5TOjk3MDpyZXRfZnJvbV9rZXJuZWxfdGhyZWFkOlxcbmFyY2gvc3BhcmMva2VybmVsL2VudHJ5LlMtOTcxLVxcdGNhbGxcXHRzY2hlZHVsZV90YWlsXFxuLS1cXG5hcmNoL3NwYXJjL2tlcm5lbC9wcm9jZXNzXzMyLmM9MjYwPWV4dGVybiB2b2lkIHJldF9mcm9tX2Zvcmsodm9pZCk7XFxuYXJjaC9zcGFyYy9rZXJuZWwvcHJvY2Vzc18zMi5jOjI2MTpleHRlcm4gdm9pZCByZXRfZnJvbV9rZXJuZWxfdGhyZWFkKHZvaWQpO1xcbmFyY2gvc3BhcmMva2VybmVsL3Byb2Nlc3NfMzIuYy0yNjItXFxuYXJjaC9zcGFyYy9rZXJuZWwvcHJvY2Vzc18zMi5jPTI2Mz1pbnQgY29weV90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBjb25zdCBzdHJ1Y3Qga2VybmVsX2Nsb25lX2FyZ3MgKmFyZ3MpXFxuLS1cXG5hcmNoL3NwYXJjL2tlcm5lbC9wcm9jZXNzXzMyLmMtMzA1LVxcdFxcdG1lbXNldChuZXdfc3RhY2ssIDAsIFNUQUNLRlJBTUVfU1ogKyBUUkFDRVJFR19TWik7XFxuYXJjaC9zcGFyYy9rZXJuZWwvcHJvY2Vzc18zMi5jOjMwNjpcXHRcXHR0aS1cXHUwMDNla3BjID0gKCgodW5zaWduZWQgbG9uZykgcmV0X2Zyb21fa2VybmVsX3RocmVhZCkgLSAweDgpO1xcbmFyY2gvc3BhcmMva2VybmVsL3Byb2Nlc3NfMzIuYy0zMDctXFx0XFx0Y2hpbGRyZWdzLVxcdTAwM2V1X3JlZ3NbVVJFR19HMV0gPSAodW5zaWduZWQgbG9uZykgYXJncy1cXHUwMDNlZm47XFxuLS1cXG5hcmNoL3g4Ni9lbnRyeS9lbnRyeV8zMi5TPTEwNDY9aGFuZGxlX2V4Y2VwdGlvbl9yZXR1cm46XFxuLS1cXG5hcmNoL3g4Ni9lbnRyeS9lbnRyeV8zMi5TLTEwNTItXFx0LypcXG5hcmNoL3g4Ni9lbnRyeS9lbnRyeV8zMi5TOjEwNTM6XFx0ICogV2UgY2FuIGJlIGNvbWluZyBoZXJlIGZyb20gY2hpbGQgc3Bhd25lZCBieSBrZXJuZWxfdGhyZWFkKCkuXFxuYXJjaC94ODYvZW50cnkvZW50cnlfMzIuUy0xMDU0LVxcdCAqL1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGxiZmx1c2guaD0xNzM9REVDTEFSRV9QRVJfQ1BVX1NIQVJFRF9BTElHTkVEKHN0cnVjdCB0bGJfc3RhdGVfc2hhcmVkLCBjcHVfdGxic3RhdGVfc2hhcmVkKTtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgtMTc2LSAqIFBsZWFzZSBpZ25vcmUgdGhlIG5hbWUgb2YgdGhpcyBmdW5jdGlvbi4gIEl0IHNob3VsZCBiZSBjYWxsZWRcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90bGJmbHVzaC5oOjE3NzogKiBzd2l0Y2hfdG9fa2VybmVsX3RocmVhZCgpLlxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgtMTc4LSAqXFxuLS1cXG5hcmNoL3h0ZW5zYS9rZXJuZWwvZW50cnkuUz0yMTU4PUVORFBST0MocmV0X2Zyb21fZm9yaylcXG4tLVxcbmFyY2gveHRlbnNhL2tlcm5lbC9lbnRyeS5TLTIxNjQtICovXFxuYXJjaC94dGVuc2Eva2VybmVsL2VudHJ5LlM6MjE2NTpFTlRSWShyZXRfZnJvbV9rZXJuZWxfdGhyZWFkKVxcbmFyY2gveHRlbnNhL2tlcm5lbC9lbnRyeS5TLTIxNjYtXFxuLS1cXG5hcmNoL3h0ZW5zYS9rZXJuZWwvZW50cnkuUy0yMTcxLVxcbmFyY2gveHRlbnNhL2tlcm5lbC9lbnRyeS5TOjIxNzI6RU5EUFJPQyhyZXRfZnJvbV9rZXJuZWxfdGhyZWFkKVxcbmFyY2gveHRlbnNhL2tlcm5lbC9lbnRyeS5TLTIxNzMtXFxuLS1cXG5hcmNoL3h0ZW5zYS9rZXJuZWwvcHJvY2Vzcy5jPTUzPWV4dGVybiB2b2lkIHJldF9mcm9tX2Zvcmsodm9pZCk7XFxuYXJjaC94dGVuc2Eva2VybmVsL3Byb2Nlc3MuYzo1NDpleHRlcm4gdm9pZCByZXRfZnJvbV9rZXJuZWxfdGhyZWFkKHZvaWQpO1xcbmFyY2gveHRlbnNhL2tlcm5lbC9wcm9jZXNzLmMtNTUtXFxuLS1cXG5hcmNoL3h0ZW5zYS9rZXJuZWwvcHJvY2Vzcy5jPTIxNz1pbnQgYXJjaF9kdXBfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICpkc3QsIHN0cnVjdCB0YXNrX3N0cnVjdCAqc3JjKVxcbi0tXFxuYXJjaC94dGVuc2Eva2VybmVsL3Byb2Nlc3MuYy0yNDctICogV2UgY3JlYXRlIGEgZHVtbXkgZnJhbWUgdG8gcmV0dXJuIHRvIGVpdGhlciByZXRfZnJvbV9mb3JrIG9yXFxuYXJjaC94dGVuc2Eva2VybmVsL3Byb2Nlc3MuYzoyNDg6ICogICByZXRfZnJvbV9rZXJuZWxfdGhyZWFkOlxcbmFyY2gveHRlbnNhL2tlcm5lbC9wcm9jZXNzLmM6MjQ5OiAqICAgYTAgcG9pbnRzIHRvIHJldF9mcm9tX2ZvcmsvcmV0X2Zyb21fa2VybmVsX3RocmVhZCAoc2ltdWxhdGluZyBhIGNhbGw0KVxcbmFyY2gveHRlbnNhL2tlcm5lbC9wcm9jZXNzLmMtMjUwLSAqICAgc3AgcG9pbnRzIHRvIGl0c2VsZiAodGhyZWFkLnNwKVxcbi0tXFxuYXJjaC94dGVuc2Eva2VybmVsL3Byb2Nlc3MuYz0yNjg9aW50IGNvcHlfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY29uc3Qgc3RydWN0IGtlcm5lbF9jbG9uZV9hcmdzICphcmdzKVxcbi0tXFxuYXJjaC94dGVuc2Eva2VybmVsL3Byb2Nlc3MuYy0zMzQtXFx0XFx0cC1cXHUwMDNldGhyZWFkLnJhID0gTUFLRV9SQV9GT1JfQ0FMTChcXG5hcmNoL3h0ZW5zYS9rZXJuZWwvcHJvY2Vzcy5jOjMzNTpcXHRcXHRcXHRcXHQodW5zaWduZWQgbG9uZylyZXRfZnJvbV9rZXJuZWxfdGhyZWFkLCAxKTtcXG5hcmNoL3h0ZW5zYS9rZXJuZWwvcHJvY2Vzcy5jLTMzNi1cXG5hcmNoL3h0ZW5zYS9rZXJuZWwvcHJvY2Vzcy5jOjMzNzpcXHRcXHQvKiBwYXNzIHBhcmFtZXRlcnMgdG8gcmV0X2Zyb21fa2VybmVsX3RocmVhZDogKi9cXG5hcmNoL3h0ZW5zYS9rZXJuZWwvcHJvY2Vzcy5jLTMzOC0jaWYgZGVmaW5lZChfX1hURU5TQV9XSU5ET1dFRF9BQklfXylcXG4tLVxcbmRyaXZlcnMvbWVkaWEvY2VjL2NvcmUvY2VjLWNvcmUuYz0yMjM9c3RydWN0IGNlY19hZGFwdGVyICpjZWNfYWxsb2NhdGVfYWRhcHRlcihjb25zdCBzdHJ1Y3QgY2VjX2FkYXBfb3BzICpvcHMsXFxuLS1cXG5kcml2ZXJzL21lZGlhL2NlYy9jb3JlL2NlYy1jb3JlLmMtMjY3LVxcdGlmIChJU19FUlIoYWRhcC1cXHUwMDNla3RocmVhZCkpIHtcXG5kcml2ZXJzL21lZGlhL2NlYy9jb3JlL2NlYy1jb3JlLmM6MjY4OlxcdFxcdHByX2VycihcXFwiY2VjLSVzOiBrZXJuZWxfdGhyZWFkKCkgZmFpbGVkXFxcXG5cXFwiLCBuYW1lKTtcXG5kcml2ZXJzL21lZGlhL2NlYy9jb3JlL2NlYy1jb3JlLmMtMjY5LVxcdFxcdHJlcyA9IFBUUl9FUlIoYWRhcC1cXHUwMDNla3RocmVhZCk7XFxuLS1cXG5kcml2ZXJzL21lZGlhL2NlYy9jb3JlL2NlYy1waW4uYz0xMTU4PXN0YXRpYyBpbnQgY2VjX3Bpbl9hZGFwX2VuYWJsZShzdHJ1Y3QgY2VjX2FkYXB0ZXIgKmFkYXAsIGJvb2wgZW5hYmxlKVxcbi0tXFxuZHJpdmVycy9tZWRpYS9jZWMvY29yZS9jZWMtcGluLmMtMTE3My1cXG5kcml2ZXJzL21lZGlhL2NlYy9jb3JlL2NlYy1waW4uYzoxMTc0OlxcdFxcdFxcdFxcdHByX2VycihcXFwiY2VjLXBpbjoga2VybmVsX3RocmVhZCgpIGZhaWxlZFxcXFxuXFxcIik7XFxuZHJpdmVycy9tZWRpYS9jZWMvY29yZS9jZWMtcGluLmMtMTE3NS1cXHRcXHRcXHRcXHRwaW4tXFx1MDAzZWt0aHJlYWQgPSBOVUxMO1xcbi0tXFxuZHJpdmVycy9tZWRpYS9kdmItY29yZS9kdmJfY2FfZW41MDIyMS5jPTE4NzA9aW50IGR2Yl9jYV9lbjUwMjIxX2luaXQoc3RydWN0IGR2Yl9hZGFwdGVyICpkdmJfYWRhcHRlcixcXG4tLVxcbmRyaXZlcnMvbWVkaWEvZHZiLWNvcmUvZHZiX2NhX2VuNTAyMjEuYy0xOTMzLVxcdFxcdHJldCA9IFBUUl9FUlIoY2EtXFx1MDAzZXRocmVhZCk7XFxuZHJpdmVycy9tZWRpYS9kdmItY29yZS9kdmJfY2FfZW41MDIyMS5jOjE5MzQ6XFx0XFx0cHJfZXJyKFxcXCJkdmJfY2FfaW5pdDogZmFpbGVkIHRvIHN0YXJ0IGtlcm5lbF90aHJlYWQgKCVkKVxcXFxuXFxcIixcXG5kcml2ZXJzL21lZGlhL2R2Yi1jb3JlL2R2Yl9jYV9lbjUwMjIxLmMtMTkzNS1cXHRcXHQgICAgICAgcmV0KTtcXG4tLVxcbmRyaXZlcnMvbWVkaWEvaTJjL21zcDM0MDAtZHJpdmVyLmM9NjU4PXN0YXRpYyBpbnQgbXNwX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXFxuLS1cXG5kcml2ZXJzL21lZGlhL2kyYy9tc3AzNDAwLWRyaXZlci5jLTg0OC1cXHRcXHRpZiAoSVNfRVJSKHN0YXRlLVxcdTAwM2VrdGhyZWFkKSlcXG5kcml2ZXJzL21lZGlhL2kyYy9tc3AzNDAwLWRyaXZlci5jOjg0OTpcXHRcXHRcXHRkZXZfd2FybihcXHUwMDI2Y2xpZW50LVxcdTAwM2VkZXYsIFxcXCJrZXJuZWxfdGhyZWFkKCkgZmFpbGVkXFxcXG5cXFwiKTtcXG5kcml2ZXJzL21lZGlhL2kyYy9tc3AzNDAwLWRyaXZlci5jLTg1MC1cXHRcXHRtc3Bfd2FrZV90aHJlYWQoY2xpZW50KTtcXG4tLVxcbmRyaXZlcnMvbWVkaWEvcGNpL3NhYTcxMzQvc2FhNzEzNC10dmF1ZGlvLmM9MTAwMD1pbnQgc2FhNzEzNF90dmF1ZGlvX2luaXQyKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2KVxcbi0tXFxuZHJpdmVycy9tZWRpYS9wY2kvc2FhNzEzNC9zYWE3MTM0LXR2YXVkaW8uYy0xMDIwLVxcdFxcdGlmIChJU19FUlIoZGV2LVxcdTAwM2V0aHJlYWQudGhyZWFkKSkge1xcbmRyaXZlcnMvbWVkaWEvcGNpL3NhYTcxMzQvc2FhNzEzNC10dmF1ZGlvLmM6MTAyMTpcXHRcXHRcXHRwcl93YXJuKFxcXCIlczoga2VybmVsX3RocmVhZCgpIGZhaWxlZFxcXFxuXFxcIixcXG5kcml2ZXJzL21lZGlhL3BjaS9zYWE3MTM0L3NhYTcxMzQtdHZhdWRpby5jLTEwMjItXFx0XFx0XFx0ICAgICAgIGRldi1cXHUwMDNlbmFtZSk7XFxuLS1cXG5kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1pcm9wY20yMC5jPTM3OD1zdGF0aWMgaW50IHBjbTIwX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1pcm9wY20yMC5jLTM4Ny1cXHRcXHRpZiAoSVNfRVJSKGRldi1cXHUwMDNla3RocmVhZCkpIHtcXG5kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1pcm9wY20yMC5jOjM4ODpcXHRcXHRcXHR2NGwyX2VycihcXHUwMDI2ZGV2LVxcdTAwM2V2NGwyX2RldiwgXFxcImtlcm5lbF90aHJlYWQoKSBmYWlsZWRcXFxcblxcXCIpO1xcbmRyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbWlyb3BjbTIwLmMtMzg5LVxcdFxcdFxcdHY0bDJfZmhfcmVsZWFzZShmaWxlKTtcXG4tLVxcbmRyaXZlcnMvbWVkaWEvdGVzdC1kcml2ZXJzL3ZpdmlkL3ZpdmlkLWNvcmUuYz0xODAwPXN0YXRpYyBpbnQgdml2aWRfY3JlYXRlX2luc3RhbmNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCBpbnN0KVxcbi0tXFxuZHJpdmVycy9tZWRpYS90ZXN0LWRyaXZlcnMvdml2aWQvdml2aWQtY29yZS5jLTIwMjItXFx0XFx0XFx0ZGV2LVxcdTAwM2VrdGhyZWFkX2NlYyA9IE5VTEw7XFxuZHJpdmVycy9tZWRpYS90ZXN0LWRyaXZlcnMvdml2aWQvdml2aWQtY29yZS5jOjIwMjM6XFx0XFx0XFx0djRsMl9lcnIoXFx1MDAyNmRldi1cXHUwMDNldjRsMl9kZXYsIFxcXCJrZXJuZWxfdGhyZWFkKCkgZmFpbGVkXFxcXG5cXFwiKTtcXG5kcml2ZXJzL21lZGlhL3Rlc3QtZHJpdmVycy92aXZpZC92aXZpZC1jb3JlLmMtMjAyNC1cXHRcXHRcXHRnb3RvIHVucmVnX2RldjtcXG4tLVxcbmRyaXZlcnMvbWVkaWEvdGVzdC1kcml2ZXJzL3ZpdmlkL3ZpdmlkLWt0aHJlYWQtY2FwLmM9ODEyPWludCB2aXZpZF9zdGFydF9nZW5lcmF0aW5nX3ZpZF9jYXAoc3RydWN0IHZpdmlkX2RldiAqZGV2LCBib29sICpwc3RyZWFtaW5nKVxcbi0tXFxuZHJpdmVycy9tZWRpYS90ZXN0LWRyaXZlcnMvdml2aWQvdml2aWQta3RocmVhZC1jYXAuYy04NDItXFx0XFx0ZGV2LVxcdTAwM2VrdGhyZWFkX3ZpZF9jYXAgPSBOVUxMO1xcbmRyaXZlcnMvbWVkaWEvdGVzdC1kcml2ZXJzL3ZpdmlkL3ZpdmlkLWt0aHJlYWQtY2FwLmM6ODQzOlxcdFxcdHY0bDJfZXJyKFxcdTAwMjZkZXYtXFx1MDAzZXY0bDJfZGV2LCBcXFwia2VybmVsX3RocmVhZCgpIGZhaWxlZFxcXFxuXFxcIik7XFxuZHJpdmVycy9tZWRpYS90ZXN0LWRyaXZlcnMvdml2aWQvdml2aWQta3RocmVhZC1jYXAuYy04NDQtXFx0XFx0cmV0dXJuIGVycjtcXG4tLVxcbmRyaXZlcnMvbWVkaWEvdGVzdC1kcml2ZXJzL3ZpdmlkL3ZpdmlkLWt0aHJlYWQtb3V0LmM9MjYwPWludCB2aXZpZF9zdGFydF9nZW5lcmF0aW5nX3ZpZF9vdXQoc3RydWN0IHZpdmlkX2RldiAqZGV2LCBib29sICpwc3RyZWFtaW5nKVxcbi0tXFxuZHJpdmVycy9tZWRpYS90ZXN0LWRyaXZlcnMvdml2aWQvdml2aWQta3RocmVhZC1vdXQuYy0yODktXFx0XFx0ZGV2LVxcdTAwM2VrdGhyZWFkX3ZpZF9vdXQgPSBOVUxMO1xcbmRyaXZlcnMvbWVkaWEvdGVzdC1kcml2ZXJzL3ZpdmlkL3ZpdmlkLWt0aHJlYWQtb3V0LmM6MjkwOlxcdFxcdHY0bDJfZXJyKFxcdTAwMjZkZXYtXFx1MDAzZXY0bDJfZGV2LCBcXFwia2VybmVsX3RocmVhZCgpIGZhaWxlZFxcXFxuXFxcIik7XFxuZHJpdmVycy9tZWRpYS90ZXN0LWRyaXZlcnMvdml2aWQvdml2aWQta3RocmVhZC1vdXQuYy0yOTEtXFx0XFx0cmV0dXJuIGVycjtcXG4tLVxcbmRyaXZlcnMvbWVkaWEvdGVzdC1kcml2ZXJzL3ZpdmlkL3ZpdmlkLWt0aHJlYWQtdG91Y2guYz0xNTE9aW50IHZpdmlkX3N0YXJ0X2dlbmVyYXRpbmdfdG91Y2hfY2FwKHN0cnVjdCB2aXZpZF9kZXYgKmRldilcXG4tLVxcbmRyaXZlcnMvbWVkaWEvdGVzdC1kcml2ZXJzL3ZpdmlkL3ZpdmlkLWt0aHJlYWQtdG91Y2guYy0xNjUtXFx0XFx0ZGV2LVxcdTAwM2VrdGhyZWFkX3RvdWNoX2NhcCA9IE5VTEw7XFxuZHJpdmVycy9tZWRpYS90ZXN0LWRyaXZlcnMvdml2aWQvdml2aWQta3RocmVhZC10b3VjaC5jOjE2NjpcXHRcXHR2NGwyX2VycihcXHUwMDI2ZGV2LVxcdTAwM2V2NGwyX2RldiwgXFxcImtlcm5lbF90aHJlYWQoKSBmYWlsZWRcXFxcblxcXCIpO1xcbmRyaXZlcnMvbWVkaWEvdGVzdC1kcml2ZXJzL3ZpdmlkL3ZpdmlkLWt0aHJlYWQtdG91Y2guYy0xNjctXFx0XFx0cmV0dXJuIGVycjtcXG4tLVxcbmRyaXZlcnMvbWVkaWEvdGVzdC1kcml2ZXJzL3ZpdmlkL3ZpdmlkLXNkci1jYXAuYz0yNzU9c3RhdGljIGludCBzZHJfY2FwX3N0YXJ0X3N0cmVhbWluZyhzdHJ1Y3QgdmIyX3F1ZXVlICp2cSwgdW5zaWduZWQgY291bnQpXFxuLS1cXG5kcml2ZXJzL21lZGlhL3Rlc3QtZHJpdmVycy92aXZpZC92aXZpZC1zZHItY2FwLmMtMjg5LVxcdFxcdGlmIChJU19FUlIoZGV2LVxcdTAwM2VrdGhyZWFkX3Nkcl9jYXApKSB7XFxuZHJpdmVycy9tZWRpYS90ZXN0LWRyaXZlcnMvdml2aWQvdml2aWQtc2RyLWNhcC5jOjI5MDpcXHRcXHRcXHR2NGwyX2VycihcXHUwMDI2ZGV2LVxcdTAwM2V2NGwyX2RldiwgXFxcImtlcm5lbF90aHJlYWQoKSBmYWlsZWRcXFxcblxcXCIpO1xcbmRyaXZlcnMvbWVkaWEvdGVzdC1kcml2ZXJzL3ZpdmlkL3ZpdmlkLXNkci1jYXAuYy0yOTEtXFx0XFx0XFx0ZXJyID0gUFRSX0VSUihkZXYtXFx1MDAzZWt0aHJlYWRfc2RyX2NhcCk7XFxuLS1cXG5kcml2ZXJzL21pc2Mvc2dpLXhwL3hwYy5oPTIwNT1zdHJ1Y3QgeHBjX2FjdGl2YXRlX21xX21zZ19jaGN0bF9vcGVuY29tcGxldGVfdXYge1xcbi0tXFxuZHJpdmVycy9taXNjL3NnaS14cC94cGMuaC0yMTAtLypcXG5kcml2ZXJzL21pc2Mvc2dpLXhwL3hwYy5oOjIxMTogKiBGdW5jdGlvbnMgcmVnaXN0ZXJlZCBieSBhZGRfdGltZXIoKSBvciBjYWxsZWQgYnkga2VybmVsX3RocmVhZCgpIG9ubHlcXG5kcml2ZXJzL21pc2Mvc2dpLXhwL3hwYy5oLTIxMi0gKiBhbGxvdyBmb3IgYSBzaW5nbGUgNjQtYml0IGFyZ3VtZW50LiBUaGUgZm9sbG93aW5nIG1hY3JvcyBjYW4gYmUgdXNlZCB0b1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2xpb19tYWluLmM9ODIzPWxpcXVpZGlvX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBfX21heWJlX3VudXNlZCAqZW50KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2xpb19tYWluLmMtODg5LVxcdFxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNm9jdF9kZXYtXFx1MDAzZXBjaV9kZXYtXFx1MDAzZWRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYzo4OTA6XFx0XFx0XFx0XFx0XFx0XFxcImZhaWxlZCB0byBjcmVhdGUga2VybmVsX3RocmVhZFxcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2xpb19tYWluLmMtODkxLVxcdFxcdFxcdFxcdGxpcXVpZGlvX3JlbW92ZShwZGV2KTtcXG4tLVxcbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlLmg9ODAzPXN0cnVjdCBxZXRoX2NhcmQge1xcbi0tXFxuZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmUuaC04MzQtXFx0c3RydWN0IHdvcmtfc3RydWN0IHJ4X21vZGVfd29yaztcXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZS5oOjgzNTpcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qga2VybmVsX3RocmVhZF9zdGFydGVyO1xcbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlLmgtODM2LVxcdHNwaW5sb2NrX3QgdGhyZWFkX21hc2tfbG9jaztcXG4tLVxcbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYz0xMDk1PWludCBxZXRoX3NjaGVkdWxlX3JlY292ZXJ5KHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMtMTEwMi1cXHRpZiAoIXJjKVxcbmRyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYzoxMTAzOlxcdFxcdHNjaGVkdWxlX3dvcmsoXFx1MDAyNmNhcmQtXFx1MDAzZWtlcm5lbF90aHJlYWRfc3RhcnRlcik7XFxuZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jLTExMDQtXFxuLS1cXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmM9MTU2OD1zdGF0aWMgaW50IHFldGhfZG9fcmVzZXQodm9pZCAqZGF0YSk7XFxuZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jOjE1Njk6c3RhdGljIHZvaWQgcWV0aF9zdGFydF9rZXJuZWxfdGhyZWFkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMtMTU3MC17XFxuLS1cXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMtMTU3Mi1cXHRzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBxZXRoX2NhcmQsXFxuZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jOjE1NzM6XFx0XFx0XFx0XFx0XFx0a2VybmVsX3RocmVhZF9zdGFydGVyKTtcXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMtMTU3NC1cXHRRRVRIX0NBUkRfVEVYVChjYXJkLCAyLCBcXFwic3RydGhyZFxcXCIpO1xcbi0tXFxuZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jPTE1OTA9c3RhdGljIHZvaWQgcWV0aF9zZXR1cF9jYXJkKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMtMTU5OS1cXHRtdXRleF9pbml0KFxcdTAwMjZjYXJkLVxcdTAwM2VkaXNjaXBsaW5lX211dGV4KTtcXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmM6MTYwMDpcXHRJTklUX1dPUksoXFx1MDAyNmNhcmQtXFx1MDAzZWtlcm5lbF90aHJlYWRfc3RhcnRlciwgcWV0aF9zdGFydF9rZXJuZWxfdGhyZWFkKTtcXG5kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMtMTYwMS1cXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2Y2FyZC1cXHUwMDNlY21kX3dhaXRlcl9saXN0KTtcXG4tLVxcbmRyaXZlcnMvdHR5L2h2Yy9odmNzLmM9MjI2PXN0YXRpYyBpbnQgaHZjc19pbmRleF9jb3VudDtcXG4tLVxcbmRyaXZlcnMvdHR5L2h2Yy9odmNzLmMtMjI4LS8qXFxuZHJpdmVycy90dHkvaHZjL2h2Y3MuYzoyMjk6ICogVXNlZCBieSB0aGUga2h2Y3NkIHRvIHBpY2sgdXAgSS9PIG9wZXJhdGlvbnMgd2hlbiB0aGUga2VybmVsX3RocmVhZCBpc1xcbmRyaXZlcnMvdHR5L2h2Yy9odmNzLmMtMjMwLSAqIGFscmVhZHkgYXdha2UgYnV0IHBvdGVudGlhbGx5IHNoaWZ0ZWQgdG8gVEFTS19JTlRFUlJVUFRJQkxFIHN0YXRlLlxcbi0tXFxuZHJpdmVycy90dHkvaHZjL2h2Y3MuYz0yNTA9c3RydWN0IGh2Y3Nfc3RydWN0IHtcXG4tLVxcbmRyaXZlcnMvdHR5L2h2Yy9odmNzLmMtMjYwLVxcdC8qXFxuZHJpdmVycy90dHkvaHZjL2h2Y3MuYzoyNjE6XFx0ICogVXNlZCB0byB0ZWxsIHRoZSBkcml2ZXIga2VybmVsX3RocmVhZCB3aGF0IG9wZXJhdGlvbnMgbmVlZCB0byB0YWtlXFxuZHJpdmVycy90dHkvaHZjL2h2Y3MuYy0yNjItXFx0ICogcGxhY2UgdXBvbiB0aGlzIGh2Y3Nfc3RydWN0IGluc3RhbmNlLlxcbi0tXFxuZHJpdmVycy90dHkvaHZjL2h2Y3MuYz0xMTUzPXN0YXRpYyB2b2lkIGh2Y3NfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApXFxuLS1cXG5kcml2ZXJzL3R0eS9odmMvaHZjcy5jLTExODQtXFx0XFx0LypcXG5kcml2ZXJzL3R0eS9odmMvaHZjcy5jOjExODU6XFx0XFx0ICogTlVMTCB0aGlzIGVhcmx5IHNvIHRoYXQgdGhlIGtlcm5lbF90aHJlYWQgZG9lc24ndCB0cnkgdG9cXG5kcml2ZXJzL3R0eS9odmMvaHZjcy5jLTExODYtXFx0XFx0ICogZXhlY3V0ZSBhbnkgb3BlcmF0aW9ucyBvbiB0aGUgVFRZIGV2ZW4gdGhvdWdoIGl0IGlzIG9ibGlnYXRlZFxcbi0tXFxuZHJpdmVycy90dHkvaHZjL2h2Y3MuYz0xMjU4PXN0YXRpYyBzc2l6ZV90IGh2Y3Nfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy90dHkvaHZjL2h2Y3MuYy0xMzE4LVxcdFxcdCAqIElmIHRoaXMgaXMgdHJ1ZSB0aGVuIHdlIGRvbid0IHdhbnQgdG8gdHJ5IHdyaXRpbmcgdG8gdGhlXFxuZHJpdmVycy90dHkvaHZjL2h2Y3MuYzoxMzE5OlxcdFxcdCAqIGh5cGVydmlzb3IgYmVjYXVzZSB0aGF0IGlzIHRoZSBrZXJuZWxfdGhyZWFkcyBqb2Igbm93LiAgV2UnbGxcXG5kcml2ZXJzL3R0eS9odmMvaHZjcy5jLTEzMjAtXFx0XFx0ICoganVzdCBhZGQgdG8gdGhlIGJ1ZmZlci5cXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYz05NzU9c3RhdGljIGludCB1c2JhdG1faGVhdnlfaW5pdChzdHJ1Y3QgdXNiYXRtX2RhdGEgKmluc3RhbmNlKVxcbi0tXFxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jLTk4MS1cXHRpZiAoSVNfRVJSKHQpKSB7XFxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jOjk4MjpcXHRcXHR1c2JfZXJyKGluc3RhbmNlLCBcXFwiJXM6IGZhaWxlZCB0byBjcmVhdGUga2VybmVsX3RocmVhZCAoJWxkKSFcXFxcblxcXCIsXFxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jLTk4My1cXHRcXHRcXHRcXHRfX2Z1bmNfXywgUFRSX0VSUih0KSk7XFxuLS1cXG5kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jPTYwNjc9aW50IHVzYl9odWJfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy91c2IvY29yZS9odWIuYy02MDg0LVxcbmRyaXZlcnMvdXNiL2NvcmUvaHViLmM6NjA4NTpcXHQvKiBGYWxsIHRocm91Z2ggaWYga2VybmVsX3RocmVhZCBmYWlsZWQgKi9cXG5kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jLTYwODYtXFx0dXNiX2RlcmVnaXN0ZXIoXFx1MDAyNmh1Yl9kcml2ZXIpO1xcbi0tXFxuZHJpdmVycy94ZW4vbWFuYWdlLmM9OTI9c3RhdGljIHZvaWQgZG9fc3VzcGVuZCh2b2lkKVxcbi0tXFxuZHJpdmVycy94ZW4vbWFuYWdlLmMtMTEwLVxcbmRyaXZlcnMveGVuL21hbmFnZS5jOjExMTpcXHRlcnIgPSBmcmVlemVfa2VybmVsX3RocmVhZHMoKTtcXG5kcml2ZXJzL3hlbi9tYW5hZ2UuYy0xMTItXFx0aWYgKGVycikge1xcbi0tXFxuZnMvYnVmZmVyLmMtOC0vKlxcbmZzL2J1ZmZlci5jOjk6ICogU3RhcnQgYmRmbHVzaCgpIHdpdGgga2VybmVsX3RocmVhZCBub3Qgc3lzY2FsbCAtIFBhdWwgR29ydG1ha2VyLCAxMi85NVxcbmZzL2J1ZmZlci5jLTEwLSAqXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZyZWV6ZXIuaD01MD1leHRlcm4gaW50IGZyZWV6ZV9wcm9jZXNzZXModm9pZCk7XFxuaW5jbHVkZS9saW51eC9mcmVlemVyLmg6NTE6ZXh0ZXJuIGludCBmcmVlemVfa2VybmVsX3RocmVhZHModm9pZCk7XFxuaW5jbHVkZS9saW51eC9mcmVlemVyLmgtNTItZXh0ZXJuIHZvaWQgdGhhd19wcm9jZXNzZXModm9pZCk7XFxuaW5jbHVkZS9saW51eC9mcmVlemVyLmg6NTM6ZXh0ZXJuIHZvaWQgdGhhd19rZXJuZWxfdGhyZWFkcyh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L2ZyZWV6ZXIuaC01NC1leHRlcm4gdm9pZCB0aGF3X3Byb2Nlc3Moc3RydWN0IHRhc2tfc3RydWN0ICpwKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvZnJlZXplci5oPTg0PXN0YXRpYyBpbmxpbmUgaW50IGZyZWV6ZV9wcm9jZXNzZXModm9pZCkgeyByZXR1cm4gLUVOT1NZUzsgfVxcbmluY2x1ZGUvbGludXgvZnJlZXplci5oOjg1OnN0YXRpYyBpbmxpbmUgaW50IGZyZWV6ZV9rZXJuZWxfdGhyZWFkcyh2b2lkKSB7IHJldHVybiAtRU5PU1lTOyB9XFxuaW5jbHVkZS9saW51eC9mcmVlemVyLmgtODYtc3RhdGljIGlubGluZSB2b2lkIHRoYXdfcHJvY2Vzc2VzKHZvaWQpIHt9XFxuaW5jbHVkZS9saW51eC9mcmVlemVyLmg6ODc6c3RhdGljIGlubGluZSB2b2lkIHRoYXdfa2VybmVsX3RocmVhZHModm9pZCkge31cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDc6MjI6NDUuODI3MjUwNzE5WiIsIlNlcSI6NjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3MjQ5OTM5MjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIEtlcm5lbCBQYXRjaCBmb3IgTnVsbCBSb290L0NXRCBTdXBwb3J0KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciB0YXNrcyB3aXRoIGEgYE5VTExgIHJvb3Qgb3IgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSAoQ1dEKSwgd2hpY2ggc2VlbXMgdW51c3VhbC4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUga2VybmVsIGNyZWF0ZXMgYW5kIG1hbmFnZXMgdGhlc2UgZmlsZXN5c3RlbSBzdHJ1Y3R1cmVzLiBJIHN0YXJ0ZWQgYnkgbG9va2luZyBhdCBob3cgYGt0aHJlYWRkYCBjcmVhdGVzIGBrdGhyZWFkc2AsIGFuZCBob3cgYGtlcm5lbF9pbml0YCBpcyBjcmVhdGVkLCBhbmQgbm90aWNlZCB0aGF0IHRoZXkgYWxsIHNoYXJlIGBpbml0X2ZzYC4gVGhpcyBtZWFucyBpbml0aWFsbHksIG5vIGtlcm5lbCB0aHJlYWQgaGFzIGl0cyAqb3duKiBzZXBhcmF0ZSBmaWxlc3lzdGVtIHN0cnVjdHVyZS4gVGhleSBhbGwgc2hhcmUgYGluaXRfZnNgLCBhbmQgYGluaXRfZnNgIGdldHMgaXRzIHJvb3QgYW5kIHB3ZCBzZXQgZHVyaW5nIGBpbml0X21vdW50X3RyZWUoKWAuIFRoZXJlZm9yZSwgbm8ga2VybmVsIHRocmVhZCBjYW4gKmluaXRpYWxseSogaGF2ZSBhIGBOVUxMYCByb290IG9yIENXRCBhZnRlciBgaW5pdF9tb3VudF90cmVlKClgLlxuXG5OZXh0LCBJIGxvb2tlZCBhdCBvdGhlciB0aHJlYWRzLCBsaWtlIGBpb191cmluZ2AgYW5kIGB2aG9zdGAgdGhyZWFkcy4gVGhlc2UgYXJlIGNyZWF0ZWQgZGlmZmVyZW50bHksIGJ1dCB1bHRpbWF0ZWx5IHRoZXkgaW5oZXJpdCBvciBhcmUgY2xvbmVkIGZyb20gZXhpc3RpbmcgcHJvY2Vzc2VzLCBndWFyYW50ZWVpbmcgYSB2YWxpZCByb290IGFuZCBDV0QuIGBpb191cmluZ2AgdGhyZWFkcyBpbmhlcml0IGZyb20gdGhlIHVzZXIgcHJvY2VzcywgYW5kIGB2aG9zdGAgdGhyZWFkcyBhcmUgY3JlYXRlZCBieSBga3RocmVhZF9jcmVhdGVgIG9yIGB2aG9zdF90YXNrX2NyZWF0ZWAsIGJvdGggb2Ygd2hpY2ggdXNlIGBDTE9ORV9GU2AgbWVhbmluZyB0aGV5IHNoYXJlIGEgdmFsaWQgbW91bnQgbmFtZXNwYWNlLlxuXG5TbywgdGhlIGNvbmNsdXNpb24gaXMgdGhhdCwgKmV4Y2VwdCogZm9yIHRoZSBzcGVjaWZpYyBLVW5pdCB0ZXN0IGV4cGxpY2l0bHkgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLCB0aGVyZSdzIG5vIHBhdGggaW4gdGhlICp1cHN0cmVhbSBrZXJuZWwqIGZvciBhIHRhc2sgdG8gZW5kIHVwIHdpdGggYSBgTlVMTGAgcm9vdCBvciBDV0QuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCB0aGlzIHBhdGNoIGlzIHByaW1hcmlseSBhZGRpbmcgc3VwcG9ydCBmb3IgYSBmZWF0dXJlIHRoYXQgaXNuJ3QgY3VycmVudGx5ICp1c2VkKiBieSBhbnkgb3RoZXIgcGFydCBvZiB0aGUga2VybmVsLCAqZXhjZXB0IHRoZSBLVW5pdCB0ZXN0Ki5cblxuSWYgdGhpcyBzdXBwb3J0IGlzIG5vdCBjdXJyZW50bHkgdXNlZCBieSBhbnl0aGluZyBvdGhlciB0aGFuIHRoZSBLVW5pdCB0ZXN0LCB0aGVuIHN5emthbGxlciwgdGhlIGZ1enplciwgKmNhbm5vdCogdHJpZ2dlciBpdC4gU3l6a2FsbGVyIGNhbm5vdCBydW4gS1VuaXQgdGVzdHMsIGJ5IGl0cyBuYXR1cmUuIFRoZXJlZm9yZSwgdGhlIGNydWNpYWwgcGFydDogYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGBmYWxzZWAuIEl0J3MgdW5yZWFjaGFibGUuXG5cbkxldCBtZSBkb3VibGUtY2hlY2suIEkgaGF2ZSB0byBiZSBzdXJlLiBDYW4gYSB1c2VyLXNwYWNlIHByb2Nlc3Mgc29tZWhvdyBzZXQgYGZzLVx1MDAzZXJvb3QubW50YCB0byBgTlVMTGA/IEkgY29uc2lkZXJlZCBgY2hyb290YCwgYnV0IGFuIGVtcHR5IHN0cmluZyBgZmlsZW5hbWVgIHJldHVybnMgYC1FTk9FTlRgLiBgcGl2b3Rfcm9vdGAgZG9lc24ndCBzZXQgaXQgdG8gYE5VTExgIGVpdGhlci4gYHVtb3VudGAgd2l0aCBgTU5UX0RFVEFDSGAgZGV0YWNoZXMgYSBtb3VudCwgYnV0IHRoZSBwb2ludGVyIHN0aWxsIHBvaW50cyB0byB0aGUgZGV0YWNoZWQgbW91bnQgb2JqZWN0LCBpdCdzICpub3QqIGBOVUxMYC4gYG1vdW50YD8gTm8uIFNvIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHNldCB0aGUgcm9vdCB0byBgTlVMTGAgZnJvbSB1c2VyLXNwYWNlLiBJIHRyaWVkIHRvIHRoaW5rIGlmIEkgbWlzc2VkIHNvbWUgc3lzY2FsbC4gYHVuc2hhcmUoQ0xPTkVfTkVXTlMpYD8gYGNvcHlfbW50X25zYCBjb3BpZXMgYSB2YWxpZCByb290LCBhbmQgdGhlcmVmb3JlIG5vdGhpbmcgY2FuIGJlIGBOVUxMYC4gYHNldG5zYD8gYGNvbW1pdF9uc3NldGAgdGFrZXMgY2FyZSBvZiB0aGlzLCBhbmQgaXQgY29waWVzIGEgdmFsaWQgb25lLiBgYnBmYD8gQlBGIHByb2dyYW1zIGRvbid0IGhhdmUgdGhpcyBjYXBhYmlsaXR5LCB1bmxlc3Mgc3BlY2lmaWMgaGVscGVycy4gTm8gc3VjaCBoZWxwZXIgZXhpc3RzLlxuXG5UaGUgcGF0Y2ggZGVzY3JpcHRpb24gc2F5cyBcImZzOiBzdXBwb3J0IHRhc2tzIHdpdGggYSBudWxsIHJvb3Qgb3IgY3dkLlwiIFRoaXMgbGlrZWx5IG1lYW5zIGl0J3MgcHJlcCB3b3JrIGZvciBhIGZ1dHVyZSBwYXRjaCwgb3IgaXQncyBmb3Igb3V0LW9mLXRyZWUgY29kZSwgb3IganVzdCB0byBtYWtlIHRoZSBWRlMgbW9yZSByb2J1c3QuXG5cbkkgcmV2aWV3ZWQgdGhlIHBhdGNoLiBJdCBhZGRzIGBOVUxMX1JPT1RfQ1dEX0tVTklUX1RFU1RgLiBUaGUgY2hhbmdlcyBpbiBgZnMvbmFtZWkuY2AgYW5kIG90aGVycyBhcmUganVzdCBjaGVja2luZyBmb3IgYCFwYXRoLm1udGAgYW5kIHJldHVybmluZyBgLUVOT0VOVGAgb3IgaGFuZGxpbmcgaXQgZ3JhY2VmdWxseS4gVGhlc2UgY29kZSBwYXRocyBhcmUgKmRlYWQqIGJlY2F1c2UgdGhleSB3aWxsIG5vdCBiZSBlbnRlcmVkIGR1cmluZyBub3JtYWwgZXhlY3V0aW9uLiBTbywgdGhlIG5ldyBsb2dpYyBpc24ndCB3b3J0aCBmdXp6aW5nLlxuXG5NeSBjb25jbHVzaW9uIGlzOiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIG5ldyBsb2dpYyBpcyB1bnJlYWNoYWJsZSBkdXJpbmcgbm9ybWFsIGV4ZWN1dGlvbiBhbmQgZnV6emluZywgYmVjYXVzZSB0aGVyZSdzIGN1cnJlbnRseSBubyB3YXkgdG8gY3JlYXRlIGEgdGFzayB3aXRoIGEgYE5VTExgIHJvb3Qgb3IgQ1dELCBvciB0byBzZXQgYSB0YXNrJ3Mgcm9vdC9DV0QgdG8gYE5VTExgIGZyb20gdXNlciBzcGFjZSAob3IgZXZlbiB3aXRoaW4gdGhlIGtlcm5lbCBvdXRzaWRlIG9mIHRoZSBLVW5pdCB0ZXN0KS4gVGhpcyBpcyBwcmVwYXJhdGlvbiBmb3IgdGhlIGZ1dHVyZSwgb3IganVzdCBnZW5lcmFsIHJvYnVzdG5lc3MsIG5vdCBhIG5ldyBmZWF0dXJlIHRoYXQgY2FuIGJlIGV4cGxvaXRlZC4gSSB3aWxsIGNhbGwgYHNldC1yZXN1bHRzYCB3aXRoIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjM3NywiT3V0cHV0VG9rZW5zIjoxMDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA3OjIzOjAzLjA3NzE5MzU3M1oiLCJTZXEiOjY2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGFza3Mgd2l0aCBhIG51bGwgcm9vdCBvciBjd2QsIGJ1dCB0aGVyZSBpcyBjdXJyZW50bHkgbm8gd2F5IHRvIGNyZWF0ZSBzdWNoIGEgdGFzayBvciBzZXQgYSB0YXNrJ3Mgcm9vdC9jd2QgdG8gbnVsbCBmcm9tIHVzZXIgc3BhY2UgKG9yIGV2ZW4gd2l0aGluIHRoZSBrZXJuZWwsIG91dHNpZGUgb2YgdGhlIG5ld2x5IGFkZGVkIEtVbml0IHRlc3QpLiBUaGUgbmV3IGxvZ2ljIGluIHBhdGggcmVzb2x1dGlvbiBpcyB1bnJlYWNoYWJsZSBkdXJpbmcgbm9ybWFsIGV4ZWN1dGlvbiBhbmQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGFza3Mgd2l0aCBhIG51bGwgcm9vdCBvciBjd2QsIGJ1dCB0aGVyZSBpcyBjdXJyZW50bHkgbm8gd2F5IHRvIGNyZWF0ZSBzdWNoIGEgdGFzayBvciBzZXQgYSB0YXNrJ3Mgcm9vdC9jd2QgdG8gbnVsbCBmcm9tIHVzZXIgc3BhY2UgKG9yIGV2ZW4gd2l0aGluIHRoZSBrZXJuZWwsIG91dHNpZGUgb2YgdGhlIG5ld2x5IGFkZGVkIEtVbml0IHRlc3QpLiBUaGUgbmV3IGxvZ2ljIGluIHBhdGggcmVzb2x1dGlvbiBpcyB1bnJlYWNoYWJsZSBkdXJpbmcgbm9ybWFsIGV4ZWN1dGlvbiBhbmQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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:nil,}