Name: series-workflowxhstq Phase: Failed StartedAt: 2026-07-10 23:18:41 +0000 UTC FinishedAt: 2026-07-10 23:51:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxhstq[0] Phase: Succeeded StartedAt: 2026-07-10 23:18:41 +0000 UTC FinishedAt: 2026-07-10 23:51:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxhstq[0].run-triage Phase: Succeeded StartedAt: 2026-07-10 23:18:41 +0000 UTC FinishedAt: 2026-07-10 23:51:25 +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+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBWaXJ0dWFsQm94IEd1ZXN0IFNoYXJlZCBGb2xkZXIgKHZib3hzZikgZmlsZXN5c3RlbSBkcml2ZXIuIFRoaXMgZmlsZXN5c3RlbSBzdHJpY3RseSByZXF1aXJlcyB0aGUgVmlydHVhbEJveCBndWVzdCBQQ0kgZGV2aWNlICh2Ym94Z3Vlc3QpIHRvIGJlIHByZXNlbnQgYW5kIGluaXRpYWxpemVkIGluIG9yZGVyIHRvIG1vdW50IGFuZCBjb21tdW5pY2F0ZSB3aXRoIHRoZSBob3N0LiBTaW5jZSB0aGlzIGRldmljZSBpcyBvbmx5IHByb3ZpZGVkIGJ5IHRoZSBWaXJ0dWFsQm94IGh5cGVydmlzb3IgYW5kIHRoZXJlIGlzIG5vIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIGZvciBpdCBpbiB0aGUga2VybmVsLCB0aGlzIGNvZGUgcGF0aCBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCBmdXp6IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzo0ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDFkOTMwNmMwODFkMWExODk0NTU2MmZiZTEzZGVjZDhkMWFiY2RiZWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAxMCAyMzo0ODoyMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy92Ym94c2YvZGlyLmMgYi9mcy92Ym94c2YvZGlyLmNcbmluZGV4IDQyYmVkYzRlYzdhZjc3Li43MDJkMjQzMTY5OTM2NCAxMDA2NDRcbi0tLSBhL2ZzL3Zib3hzZi9kaXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvdmJveHNmL2Rpci5jXG5AQCAtMTI5LDYgJiM0MzsxMjksOCBAQCBzdGF0aWMgYm9vbCB2Ym94c2ZfZGlyX2VtaXQoc3RydWN0IGZpbGUgKmRpciwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXG4gXHRcdGVuZCA9IFx1MDAyNmluZm8tXHUwMDNlbmFtZS5zdHJpbmcudXRmOFtpbmZvLVx1MDAzZW5hbWUuc2l6ZV07XG4gXHRcdGlmIChXQVJOX09OKGVuZCBcdTAwM2UgKGItXHUwMDNlYnVmICYjNDM7IGItXHUwMDNldXNlZCkpKVxuIFx0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRcdGlmIChpbmZvLVx1MDAzZW5hbWUubGVuZ3RoIFx1MDAzZSBpbmZvLVx1MDAzZW5hbWUuc2l6ZSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0XHQvKiBJbmZvIG5vdyBwb2ludHMgdG8gdGhlIHJpZ2h0IGVudHJ5LCBlbWl0IGl0LiAqL1xuIFx0XHRkX3R5cGUgPSB2Ym94c2ZfZ2V0X2RfdHlwZShpbmZvLVx1MDAzZWluZm8uYXR0ci5tb2RlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzo0ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVmlydHVhbEJveCBHdWVzdCBTaGFyZWQgRm9sZGVyICh2Ym94c2YpIGZpbGVzeXN0ZW0gZHJpdmVyLiBUaGlzIGZpbGVzeXN0ZW0gc3RyaWN0bHkgcmVxdWlyZXMgdGhlIFZpcnR1YWxCb3ggZ3Vlc3QgUENJIGRldmljZSAodmJveGd1ZXN0KSB0byBiZSBwcmVzZW50IGFuZCBpbml0aWFsaXplZCBpbiBvcmRlciB0byBtb3VudCBhbmQgY29tbXVuaWNhdGUgd2l0aCB0aGUgaG9zdC4gU2luY2UgdGhpcyBkZXZpY2UgaXMgb25seSBwcm92aWRlZCBieSB0aGUgVmlydHVhbEJveCBoeXBlcnZpc29yIGFuZCB0aGVyZSBpcyBubyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSBmb3IgaXQgaW4gdGhlIGtlcm5lbCwgdGhpcyBjb2RlIHBhdGggaXMgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgZnV6eiBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDFkOTMwNmMwODFkMWExODk0NTU2MmZiZTEzZGVjZDhkMWFiY2RiZWUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAxMCAyMzo0ODoyMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL3Zib3hzZi9kaXIuYyBiL2ZzL3Zib3hzZi9kaXIuYwppbmRleCA0MmJlZGM0ZWM3YWY3Ny4uNzAyZDI0MzE2OTkzNjQgMTAwNjQ0Ci0tLSBhL2ZzL3Zib3hzZi9kaXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy92Ym94c2YvZGlyLmMKQEAgLTEyOSw2ICYjNDM7MTI5LDggQEAgc3RhdGljIGJvb2wgdmJveHNmX2Rpcl9lbWl0KHN0cnVjdCBmaWxlICpkaXIsIHN0cnVjdCBkaXJfY29udGV4dCAqY3R4KQogCQllbmQgPSAmYW1wO2luZm8tJmd0O25hbWUuc3RyaW5nLnV0ZjhbaW5mby0mZ3Q7bmFtZS5zaXplXTsKIAkJaWYgKFdBUk5fT04oZW5kICZndDsgKGItJmd0O2J1ZiAmIzQzOyBiLSZndDt1c2VkKSkpCiAJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQlpZiAoaW5mby0mZ3Q7bmFtZS5sZW5ndGggJmd0OyBpbmZvLSZndDtuYW1lLnNpemUpCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwogCiAJCS8qIEluZm8gbm93IHBvaW50cyB0byB0aGUgcmlnaHQgZW50cnksIGVtaXQgaXQuICovCiAJCWRfdHlwZSA9IHZib3hzZl9nZXRfZF90eXBlKGluZm8tJmd0O2luZm8uYXR0ci5tb2RlKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDMxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBWaXJ0dWFsQm94IEd1ZXN0IFNoYXJlZCBGb2xkZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGZzL3Zib3hzZi9kaXIuY2AuIFRoZSBjaGFuZ2UgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogaXQmIzM5O3MgYWRkaW5nIGEgbGVuZ3RoIGNoZWNrIGluIGB2Ym94c2ZfZGlyX2VtaXRgLCBzcGVjaWZpY2FsbHkgYGlmIChpbmZvLSZndDtuYW1lLmxlbmd0aCAmZ3Q7IGluZm8tJmd0O25hbWUuc2l6ZSkgcmV0dXJuIGZhbHNlO2AuIFNlZW1zIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIHZib3hzZiBmaWxlc3lzdGVtIGRyaXZlciwgd2hpY2ggaXMgcGFydCBvZiBWaXJ0dWFsQm94JiMzOTtzIEd1ZXN0IFNoYXJlZCBGb2xkZXJzIGZlYXR1cmUuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgY2FuIHdlIGV2ZW4gKnJlYWNoKiB0aGlzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZT8gVmJveHNmIGlzIHJlYWxseSBkZXNpZ25lZCBmb3IgVmlydHVhbEJveCBndWVzdHMsIHJpZ2h0PyBJdCByZWxpZXMgb24gY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBob3N0LCB0eXBpY2FsbHkgdGhyb3VnaCBhIFZpcnR1YWxCb3gtc3BlY2lmaWMgUENJIGRldmljZSBvciBzb21ldGhpbmcgc2ltaWxhciwgbGlrZSBWTU1EZXYuIEkgbmVlZCB0byBjb25maXJtIHRoYXQuCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgZGVlcGVyIGludG8gdGhlIGNvZGUuIEkmIzM5O2xsIGNoZWNrIGJvdGggYGZzL3Zib3hzZi9gIGFuZCBgZHJpdmVycy92aXJ0L3Zib3hndWVzdC9gLiBJZiBpdCYjMzk7cyB0aWdodGx5IGNvdXBsZWQgd2l0aCBWaXJ0dWFsQm94LCB0aGVyZSYjMzk7cyBhIGdvb2QgY2hhbmNlIGl0IHdvbiYjMzk7dCB3b3JrIGluIGEgc3RhbmRhcmQgUUVNVS9HQ0Ugc2V0dXAgdW5sZXNzIHdlJiMzOTtyZSBlbXVsYXRpbmcgdGhlIFZpcnR1YWxCb3ggZ3Vlc3QgZGV2aWNlLgoKTm93IEkmIzM5O20gd29uZGVyaW5nIGlmIHN5emthbGxlciBjb3VsZCBmdXp6IHRoaXMuIFN5emthbGxlciB1c3VhbGx5IHJ1bnMgaW4gZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBhbmQgR0NFLCBidXQgaXQmIzM5O3Mgbm90IHNldCB1cCB0byBlbXVsYXRlIFZpcnR1YWxCb3ggZ3Vlc3QgZGV2aWNlcyBvdXQgb2YgdGhlIGJveC4gQnV0LCBjb3VsZCBpdCBzdGlsbCBtb3VudCBhbmQgaW50ZXJhY3Qgd2l0aCBpdCBhcyBhIGZpbGVzeXN0ZW0/CgpObywgSSB0aGluayBJJiMzOTttIHdyb25nIHRoZXJlLiBgdmJveHNmYCBuZWVkcyB0aGUgYHZib3hndWVzdGAgZHJpdmVyLCBhbmQgdGhhdCByZXF1aXJlcyB0aGUgVmlydHVhbEJveCBQQ0kgZGV2aWNlIHRvIGJlIHByZXNlbnQgYW5kIGluaXRpYWxpemVkLiBJdCYjMzk7cyBiZWNvbWluZyBjbGVhciB0aGF0IHRoaXMgbWlnaHQgbm90IGJlIGltbWVkaWF0ZWx5IGZ1enplYWJsZSB3aXRoIGNvbW1vbiBzZXR1cHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBhY3R1YWxseSBtb3VudGVkIHRvIGJlIHN1cmUuIExldCYjMzk7cyBsb29rIGF0IGBmcy92Ym94c2Yvc3VwZXIuY2AgdG8gc2VlIGhvdyB0aGF0IGhhcHBlbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmJveHNmX2ZpbGxfc3VwZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy92Ym94c2YvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Zib3hzZi9zdXBlci5jPTU0PXN0YXRpYyBpbnQgdmJveHNmX3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pXG4tLVxuZnMvdmJveHNmL3N1cGVyLmMtMTEwLVxuZnMvdmJveHNmL3N1cGVyLmM6MTExOnN0YXRpYyBpbnQgdmJveHNmX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuZnMvdmJveHNmL3N1cGVyLmMtMTEyLXtcbi0tXG5mcy92Ym94c2Yvc3VwZXIuYz0zODY9c3RhdGljIGludCB2Ym94c2ZfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmZzL3Zib3hzZi9zdXBlci5jLTM5My1cbmZzL3Zib3hzZi9zdXBlci5jOjM5NDpcdHJldHVybiBnZXRfdHJlZV9ub2RldihmYywgdmJveHNmX2ZpbGxfc3VwZXIpO1xuZnMvdmJveHNmL3N1cGVyLmMtMzk1LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODI2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB1bmZvbGRzOgoKKipEaXZpbmcgaW50byB0aGUgVmlydHVhbEJveCBTaGFyZWQgRm9sZGVycyBGaWxlc3lzdGVtKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYHZib3hzZmAgdGhpbmcuIEkgcmVtZW1iZXIgc2VlaW5nIGB2Ym94c2ZfZmlsbF9zdXBlcmAgaW4gdGhlIGtlcm5lbCBzb3VyY2UuIFJpZ2h0LCBsZXQmIzM5O3Mgc3RhcnQgdGhlcmUuIE15IGd1dCB0ZWxscyBtZSB0aGlzIGlzIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgYWN0dWFsbHkgbW91bnRpbmcgdGhlIGZpbGVzeXN0ZW0sIHNvIGl0JiMzOTtzIGEgZ29vZCBlbnRyeSBwb2ludC4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGluIGBmcy92Ym94c2Yvc3VwZXIuY2AuIFRoYXQgZmlsZSBzaG91bGQgY29udGFpbiB0aGUgc3VwZXJibG9jayBvcGVyYXRpb25zLCBhbmQgYHZib3hzZl9maWxsX3N1cGVyYCBpcyBkZWZpbml0ZWx5IGEga2V5IHBhcnQgb2YgdGhhdC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIGluIHRoZXJlIGFuZCB3b3JrIGJhY2sgZnJvbSB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL3Zib3hzZi9zdXBlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTExLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMTE6XHRzdGF0aWMgaW50IHZib3hzZl9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiAxMTI6XHR7XG4gMTEzOlx0XHRzdHJ1Y3QgdmJveHNmX2ZzX2NvbnRleHQgKmN0eCA9IGZjLVx1MDAzZWZzX3ByaXZhdGU7XG4gMTE0Olx0XHRzdHJ1Y3Qgc2hmbF9zdHJpbmcgKmZvbGRlcl9uYW1lLCByb290X3BhdGg7XG4gMTE1Olx0XHRzdHJ1Y3QgdmJveHNmX3NiaSAqc2JpO1xuIDExNjpcdFx0c3RydWN0IGRlbnRyeSAqZHJvb3Q7XG4gMTE3Olx0XHRzdHJ1Y3QgaW5vZGUgKmlyb290O1xuIDExODpcdFx0Y2hhciAqbmxzX25hbWU7XG4gMTE5Olx0XHRzaXplX3Qgc2l6ZTtcbiAxMjA6XHRcdGludCBlcnI7XG4gMTIxOlx0XG4gMTIyOlx0XHRpZiAoIWZjLVx1MDAzZXNvdXJjZSlcbiAxMjM6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMTI0Olx0XG4gMTI1Olx0XHRzYmkgPSBremFsbG9jX29iaigqc2JpKTtcbiAxMjY6XHRcdGlmICghc2JpKVxuIDEyNzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAxMjg6XHRcbiAxMjk6XHRcdHNiaS1cdTAwM2VvID0gY3R4LVx1MDAzZW87XG4gMTMwOlx0XHRpZHJfaW5pdChcdTAwMjZzYmktXHUwMDNlaW5vX2lkcik7XG4gMTMxOlx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZzYmktXHUwMDNlaW5vX2lkcl9sb2NrKTtcbiAxMzI6XHRcdHNiaS1cdTAwM2VuZXh0X2dlbmVyYXRpb24gPSAxO1xuIDEzMzpcdFx0c2JpLVx1MDAzZWJkaV9pZCA9IC0xO1xuIDEzNDpcdFxuIDEzNTpcdFx0LyogTG9hZCBubHMgaWYgbm90IHV0ZjggKi9cbiAxMzY6XHRcdG5sc19uYW1lID0gY3R4LVx1MDAzZW5sc19uYW1lID8gY3R4LVx1MDAzZW5sc19uYW1lIDogdmJveHNmX2RlZmF1bHRfbmxzO1xuIDEzNzpcdFx0aWYgKHN0cmNtcChubHNfbmFtZSwgXCYjMzQ7dXRmOFwmIzM0OykgIT0gMCkge1xuIDEzODpcdFx0XHRpZiAobmxzX25hbWUgPT0gdmJveHNmX2RlZmF1bHRfbmxzKVxuIDEzOTpcdFx0XHRcdHNiaS1cdTAwM2VubHMgPSBsb2FkX25sc19kZWZhdWx0KCk7XG4gMTQwOlx0XHRcdGVsc2VcbiAxNDE6XHRcdFx0XHRzYmktXHUwMDNlbmxzID0gbG9hZF9ubHMobmxzX25hbWUpO1xuIDE0MjpcdFxuIDE0MzpcdFx0XHRpZiAoIXNiaS1cdTAwM2VubHMpIHtcbiAxNDQ6XHRcdFx0XHR2YmdfZXJyKFwmIzM0O3Zib3hzZjogQ291bnQgbm90IGxvYWQgJiMzOTslcyYjMzk7IG5sc1xcblwmIzM0OywgbmxzX25hbWUpO1xuIDE0NTpcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4gMTQ2Olx0XHRcdFx0Z290byBmYWlsX2Rlc3Ryb3lfaWRyO1xuIDE0NzpcdFx0XHR9XG4gMTQ4Olx0XHR9XG4gMTQ5Olx0XG4gMTUwOlx0XHRzYmktXHUwMDNlYmRpX2lkID0gaWRhX2FsbG9jKFx1MDAyNnZib3hzZl9iZGlfaWRhLCBHRlBfS0VSTkVMKTtcbiAxNTE6XHRcdGlmIChzYmktXHUwMDNlYmRpX2lkIFx1MDAzYyAwKSB7XG4gMTUyOlx0XHRcdGVyciA9IHNiaS1cdTAwM2ViZGlfaWQ7XG4gMTUzOlx0XHRcdGdvdG8gZmFpbF9mcmVlO1xuIDE1NDpcdFx0fVxuIDE1NTpcdFxuIDE1NjpcdFx0ZXJyID0gc3VwZXJfc2V0dXBfYmRpX25hbWUoc2IsIFwmIzM0O3Zib3hzZi0lZFwmIzM0Oywgc2JpLVx1MDAzZWJkaV9pZCk7XG4gMTU3Olx0XHRpZiAoZXJyKVxuIDE1ODpcdFx0XHRnb3RvIGZhaWxfZnJlZTtcbiAxNTk6XHRcdHNiLVx1MDAzZXNfYmRpLVx1MDAzZXJhX3BhZ2VzID0gMDtcbiAxNjA6XHRcdHNiLVx1MDAzZXNfYmRpLVx1MDAzZWlvX3BhZ2VzID0gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODU3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgdmJveHNmX2ZpbGxfc3VwZXJgIGZ1bmN0aW9uLiBJIG5lZWQgYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyB3b3Jrcy4gSSB3YW50IHRvIHNlZSBwcmVjaXNlbHkgaG93IHRoZSB2aXJ0dWFsYm94IHNoYXJlZCBmb2xkZXIgZmlsZSBzeXN0ZW0gaXMgaW5pdGlhbGl6ZWQuIFRoaXMgaXMgYSBjcml0aWNhbCBjb21wb25lbnQgZm9yIGludGVyYWN0aW5nIHdpdGggdGhlIGd1ZXN0IE9TLiBVbmRlcnN0YW5kaW5nIHRoaXMgZmlsbHMgaW4gdGhlIGdhcHMgZm9yIHRoZSBzaGFyZWQgZm9sZGVyIGZ1bmN0aW9uYWxpdHkgYW5kIGhvdyB0aGUgZmlsZXN5c3RlbSBpcyBtb3VudGVkIGFuZCBtYW5hZ2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvdmJveHNmL3N1cGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE2MTpcdFxuIDE2MjpcdFx0LyogVHVybiBzb3VyY2UgaW50byBhIHNoZmxfc3RyaW5nIGFuZCBtYXAgdGhlIGZvbGRlciAqL1xuIDE2MzpcdFx0c2l6ZSA9IHN0cmxlbihmYy1cdTAwM2Vzb3VyY2UpICYjNDM7IDE7XG4gMTY0Olx0XHRmb2xkZXJfbmFtZSA9IGttYWxsb2MoU0hGTFNUUklOR19IRUFERVJfU0laRSAmIzQzOyBzaXplLCBHRlBfS0VSTkVMKTtcbiAxNjU6XHRcdGlmICghZm9sZGVyX25hbWUpIHtcbiAxNjY6XHRcdFx0ZXJyID0gLUVOT01FTTtcbiAxNjc6XHRcdFx0Z290byBmYWlsX2ZyZWU7XG4gMTY4Olx0XHR9XG4gMTY5Olx0XHRmb2xkZXJfbmFtZS1cdTAwM2VzaXplID0gc2l6ZTtcbiAxNzA6XHRcdGZvbGRlcl9uYW1lLVx1MDAzZWxlbmd0aCA9IHNpemUgLSAxO1xuIDE3MTpcdFx0c3Ryc2NweShmb2xkZXJfbmFtZS1cdTAwM2VzdHJpbmcudXRmOCwgZmMtXHUwMDNlc291cmNlLCBzaXplKTtcbiAxNzI6XHRcdGVyciA9IHZib3hzZl9tYXBfZm9sZGVyKGZvbGRlcl9uYW1lLCBcdTAwMjZzYmktXHUwMDNlcm9vdCk7XG4gMTczOlx0XHRrZnJlZShmb2xkZXJfbmFtZSk7XG4gMTc0Olx0XHRpZiAoZXJyKSB7XG4gMTc1Olx0XHRcdHZiZ19lcnIoXCYjMzQ7dmJveHNmOiBIb3N0IHJlamVjdGVkIG1vdW50IG9mICYjMzk7JXMmIzM5OyB3aXRoIGVycm9yICVkXFxuXCYjMzQ7LFxuIDE3NjpcdFx0XHRcdGZjLVx1MDAzZXNvdXJjZSwgZXJyKTtcbiAxNzc6XHRcdFx0Z290byBmYWlsX2ZyZWU7XG4gMTc4Olx0XHR9XG4gMTc5Olx0XG4gMTgwOlx0XHRyb290X3BhdGgubGVuZ3RoID0gMTtcbiAxODE6XHRcdHJvb3RfcGF0aC5zaXplID0gMjtcbiAxODI6XHRcdHJvb3RfcGF0aC5zdHJpbmcudXRmOFswXSA9ICYjMzk7LyYjMzk7O1xuIDE4MzpcdFx0cm9vdF9wYXRoLnN0cmluZy51dGY4WzFdID0gMDtcbiAxODQ6XHRcdGVyciA9IHZib3hzZl9zdGF0KHNiaSwgXHUwMDI2cm9vdF9wYXRoLCBcdTAwMjZzYmktXHUwMDNlcm9vdF9pbmZvKTtcbiAxODU6XHRcdGlmIChlcnIpXG4gMTg2Olx0XHRcdGdvdG8gZmFpbF91bm1hcDtcbiAxODc6XHRcbiAxODg6XHRcdHNiLVx1MDAzZXNfbWFnaWMgPSBWQk9YU0ZfU1VQRVJfTUFHSUM7XG4gMTg5Olx0XHRzYi1cdTAwM2VzX2Jsb2Nrc2l6ZSA9IDEwMjQ7XG4gMTkwOlx0XHRzYi1cdTAwM2VzX21heGJ5dGVzID0gTUFYX0xGU19GSUxFU0laRTtcbiAxOTE6XHRcdHNiLVx1MDAzZXNfb3AgPSBcdTAwMjZ2Ym94c2Zfc3VwZXJfb3BzO1xuIDE5MjpcdFx0c2V0X2RlZmF1bHRfZF9vcChzYiwgXHUwMDI2dmJveHNmX2RlbnRyeV9vcHMpO1xuIDE5MzpcdFxuIDE5NDpcdFx0aXJvb3QgPSBpZ2V0X2xvY2tlZChzYiwgMCk7XG4gMTk1Olx0XHRpZiAoIWlyb290KSB7XG4gMTk2Olx0XHRcdGVyciA9IC1FTk9NRU07XG4gMTk3Olx0XHRcdGdvdG8gZmFpbF91bm1hcDtcbiAxOTg6XHRcdH1cbiAxOTk6XHRcdHZib3hzZl9pbml0X2lub2RlKHNiaSwgaXJvb3QsIFx1MDAyNnNiaS1cdTAwM2Vyb290X2luZm8sIGZhbHNlKTtcbiAyMDA6XHRcdHVubG9ja19uZXdfaW5vZGUoaXJvb3QpO1xuIDIwMTpcdFxuIDIwMjpcdFx0ZHJvb3QgPSBkX21ha2Vfcm9vdChpcm9vdCk7XG4gMjAzOlx0XHRpZiAoIWRyb290KSB7XG4gMjA0Olx0XHRcdGVyciA9IC1FTk9NRU07XG4gMjA1Olx0XHRcdGdvdG8gZmFpbF91bm1hcDtcbiAyMDY6XHRcdH1cbiAyMDc6XHRcbiAyMDg6XHRcdHNiLVx1MDAzZXNfcm9vdCA9IGRyb290O1xuIDIwOTpcdFx0c2ItXHUwMDNlc19mc19pbmZvID0gc2JpO1xuIDIxMDpcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgwMAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYHZib3hzZl9tYXBfZm9sZGVyYCoqCgpPa2F5LCBzbyBgdmJveHNmX21hcF9mb2xkZXJgIGhhcyBwb3BwZWQgdXAgaW4gbXkgd29yay4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gdW5kZXJzdGFuZCBpdHMgb3JpZ2luLiBXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGRlZmluZWQ/IEkgbmVlZCB0byB0cmFjZSBpdHMgaW1wbGVtZW50YXRpb24gdG8gZ3Jhc3AgaXRzIHB1cnBvc2UsIGFyZ3VtZW50cywgYW5kIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBrZXJuZWwgY29tcG9uZW50cy4gVGltZSB0byBkaXZlIGludG8gdGhlIHNvdXJjZSBjb2RlIGFuZCBzdGFydCB0cmFja2luZyBpdCBkb3duLiBJJiMzOTttIGFzc3VtaW5nIGl0JiMzOTtzIHJlbGF0ZWQgdG8gVmlydHVhbEJveCYjMzk7cyBzaGFyZWQgZm9sZGVycywgYnV0IGEgY29uY3JldGUgZGVmaW5pdGlvbiB3aWxsIHByb3ZpZGUgY3J1Y2lhbCBjb250ZXh0IGZvciBteSBjdXJyZW50IHRhc2suIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZGlnIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2Ym94c2ZfbWFwX2ZvbGRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3Zib3hzZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvdmJveHNmL3N1cGVyLmM9MTExPXN0YXRpYyBpbnQgdmJveHNmX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmZzL3Zib3hzZi9zdXBlci5jLTE3MS1cdHN0cnNjcHkoZm9sZGVyX25hbWUtXHUwMDNlc3RyaW5nLnV0ZjgsIGZjLVx1MDAzZXNvdXJjZSwgc2l6ZSk7XG5mcy92Ym94c2Yvc3VwZXIuYzoxNzI6XHRlcnIgPSB2Ym94c2ZfbWFwX2ZvbGRlcihmb2xkZXJfbmFtZSwgXHUwMDI2c2JpLVx1MDAzZXJvb3QpO1xuZnMvdmJveHNmL3N1cGVyLmMtMTczLVx0a2ZyZWUoZm9sZGVyX25hbWUpO1xuLS1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYz01Mz1zdGF0aWMgaW50IHZib3hzZl9jYWxsKHUzMiBmdW5jdGlvbiwgdm9pZCAqcGFybXMsIHUzMiBwYXJtX2NvdW50LCBpbnQgKnN0YXR1cylcbi0tXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtNzQtXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM6NzU6aW50IHZib3hzZl9tYXBfZm9sZGVyKHN0cnVjdCBzaGZsX3N0cmluZyAqZm9sZGVyX25hbWUsIHUzMiAqcm9vdClcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy03Ni17XG4tLVxuZnMvdmJveHNmL3Zmc21vZC5oPTEzMj1pbnQgdmJveHNmX2ZzaW5mbyh1MzIgcm9vdCwgdTY0IGhhbmRsZSwgdTMyIGZsYWdzLFxuLS1cbmZzL3Zib3hzZi92ZnNtb2QuaC0xMzQtXG5mcy92Ym94c2YvdmZzbW9kLmg6MTM1OmludCB2Ym94c2ZfbWFwX2ZvbGRlcihzdHJ1Y3Qgc2hmbF9zdHJpbmcgKmZvbGRlcl9uYW1lLCB1MzIgKnJvb3QpO1xuZnMvdmJveHNmL3Zmc21vZC5oLTEzNi1pbnQgdmJveHNmX3VubWFwX2ZvbGRlcih1MzIgcm9vdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MDYKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoYXQga2VybmVsIGNvZGU6CgoqKkFuYWx5emluZyBgdmJveHNmX21hcF9mb2xkZXJgIGluIGBmcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmNgKioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gYHZib3hzZl9tYXBfZm9sZGVyYCB3aXRoaW4gYGZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doYXQmIzM5O3MgdGhlIGNvbnRleHQgaGVyZT8gV2hhdCYjMzk7cyB0aGUgKnB1cnBvc2UqIG9mIHRoaXMgZnVuY3Rpb24/JiMzNDsgSSYjMzk7bSBhc3N1bWluZywgZ2l2ZW4gdGhlIG5hbWUsIGl0JiMzOTtzIGludm9sdmVkIGluIG1hcHBpbmcgYSBzaGFyZWQgZm9sZGVyIHdpdGhpbiB0aGUgVmlydHVhbEJveCBTaGFyZWQgRm9sZGVyIGZpbGVzeXN0ZW0uIFRoZSAmIzM0O3dyYXBwZXJzJiMzNDsgcGFydCBzdWdnZXN0cyBpdCYjMzk7cyBsaWtlbHkgYSBsYXllciBvZiBhYnN0cmFjdGlvbiBvciBhIGhlbHBlciBmdW5jdGlvbiB0aGF0IG1pZ2h0IGJlIGludGVyZmFjaW5nIHdpdGggb3RoZXIgdW5kZXJseWluZyBjb21wb25lbnRzLCBwZXJoYXBzIHRoZSBjb3JlIHNoYXJlZCBmb2xkZXIgZHJpdmVyIG9yIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24uCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGRhdGEgc3RydWN0dXJlcyB0aGlzIGZ1bmN0aW9uIGlzIG1hbmlwdWxhdGluZy4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgaW5vZGVzLCBkZW50cnkgc3RydWN0dXJlcywgVmlydHVhbEJveC1zcGVjaWZpYyBtZXRhZGF0YSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFdoYXQgcGFyYW1ldGVycyBkb2VzIGl0IHRha2U/IEkgc2hvdWxkIGxvb2sgZm9yIHRoZSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBmaXJzdCB0byB1bmRlcnN0YW5kIGl0cyBpbnB1dHMgYW5kIHJldHVybiB2YWx1ZXMuIFRoZW4sIEkmIzM5O2xsIGNoZWNrIGl0cyB1c2FnZS4gV2hlcmUgaXMgaXQgYmVpbmcgY2FsbGVkIGZyb20/IFRoYXQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCBzaGFyZWQgZm9sZGVyIGFyY2hpdGVjdHVyZS4KCk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBmdW5jdGlvbiYjMzk7cyBpbnRlcm5hbCBsb2dpYy4gV2hhdCBhcmUgdGhlIGtleSBvcGVyYXRpb25zIGJlaW5nIHBlcmZvcm1lZD8gSXMgaXQgYWxsb2NhdGluZyBtZW1vcnk/IEluaXRpYWxpemluZyBzb21lIGtpbmQgb2YgbWFwcGluZyB0YWJsZT8gTWFraW5nIGNhbGxzIHRvIG90aGVyIGtlcm5lbCBmdW5jdGlvbnMsIG1heWJlIHJlbGF0ZWQgdG8gZmlsZSBzeXN0ZW0gb3BlcmF0aW9ucyBvciBtZW1vcnkgbWFuYWdlbWVudD8gSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byBhbnkgZXJyb3IgaGFuZGxpbmfigJRob3cgYXJlIHBvdGVudGlhbCBmYWlsdXJlcyBtYW5hZ2VkLCBhbmQgd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBmb3IgdGhlIHNoYXJlZCBmb2xkZXIgZnVuY3Rpb25hbGl0eT8KCkkmIzM5O2xsIGFsc28ga2VlcCBpbiBtaW5kIHBvdGVudGlhbCBhcmVhcyBvZiBpbnRlcmVzdCBmb3IgcGVyZm9ybWFuY2UuIEFyZSB0aGVyZSBhbnkgbG9vcHMgdGhhdCBjb3VsZCBiZWNvbWUgYm90dGxlbmVja3MgdW5kZXIgaGVhdnkgbG9hZD8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIG1lbW9yeSBhbGxvY2F0aW9ucyBvciBkZWFsbG9jYXRpb25zIHRoYXQgY291bGQgYmUgb3B0aW1pemVkPyBJJiMzOTttIHByb2JhYmx5IGdvaW5nIHRvIG5lZWQgdG8gbG9vayBhdCBhZGphY2VudCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uIGZvciBhIGJldHRlciB1bmRlcnN0YW5kaW5nLgoKVWx0aW1hdGVseSwgSSB3YW50IHRvIGZvcm0gYSBjb21wbGV0ZSBtZW50YWwgbW9kZWwgb2YgaG93IGB2Ym94c2ZfbWFwX2ZvbGRlcmAgZnVuY3Rpb25zIHdpdGhpbiB0aGUgVmlydHVhbEJveCBTaGFyZWQgRm9sZGVycywgZnJvbSBpdHMgcHVycG9zZSBhbmQgaW50ZWdyYXRpb24gdG8gaXRzIGludGVybmFsIG9wZXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA3NTpcdGludCB2Ym94c2ZfbWFwX2ZvbGRlcihzdHJ1Y3Qgc2hmbF9zdHJpbmcgKmZvbGRlcl9uYW1lLCB1MzIgKnJvb3QpXG4gIDc2Olx0e1xuICA3NzpcdFx0c3RydWN0IHNoZmxfbWFwX2ZvbGRlciBwYXJtcztcbiAgNzg6XHRcdGludCBlcnIsIHN0YXR1cztcbiAgNzk6XHRcbiAgODA6XHRcdHBhcm1zLnBhdGgudHlwZSA9IFZNTURFVl9IR0NNX1BBUk1fVFlQRV9MSU5BRERSX0tFUk5FTDtcbiAgODE6XHRcdHBhcm1zLnBhdGgudS5wb2ludGVyLnNpemUgPSBzaGZsX3N0cmluZ19idWZfc2l6ZShmb2xkZXJfbmFtZSk7XG4gIDgyOlx0XHRwYXJtcy5wYXRoLnUucG9pbnRlci51LmxpbmVhcl9hZGRyID0gKHVpbnRwdHJfdClmb2xkZXJfbmFtZTtcbiAgODM6XHRcbiAgODQ6XHRcdHBhcm1zLnJvb3QudHlwZSA9IFZNTURFVl9IR0NNX1BBUk1fVFlQRV8zMkJJVDtcbiAgODU6XHRcdHBhcm1zLnJvb3QudS52YWx1ZTMyID0gMDtcbiAgODY6XHRcbiAgODc6XHRcdHBhcm1zLmRlbGltaXRlci50eXBlID0gVk1NREVWX0hHQ01fUEFSTV9UWVBFXzMyQklUO1xuICA4ODpcdFx0cGFybXMuZGVsaW1pdGVyLnUudmFsdWUzMiA9ICYjMzk7LyYjMzk7O1xuICA4OTpcdFxuICA5MDpcdFx0cGFybXMuY2FzZV9zZW5zaXRpdmUudHlwZSA9IFZNTURFVl9IR0NNX1BBUk1fVFlQRV8zMkJJVDtcbiAgOTE6XHRcdHBhcm1zLmNhc2Vfc2Vuc2l0aXZlLnUudmFsdWUzMiA9IDE7XG4gIDkyOlx0XG4gIDkzOlx0XHRlcnIgPSB2Ym94c2ZfY2FsbChTSEZMX0ZOX01BUF9GT0xERVIsIFx1MDAyNnBhcm1zLCBTSEZMX0NQQVJNU19NQVBfRk9MREVSLFxuICA5NDpcdFx0XHRcdCAgXHUwMDI2c3RhdHVzKTtcbiAgOTU6XHRcdGlmIChlcnIgPT0gLUVOT1NZUyBcdTAwMjZcdTAwMjYgc3RhdHVzID09IFZFUlJfTk9UX0lNUExFTUVOVEVEKVxuICA5NjpcdFx0XHR2YmdfZXJyKFwmIzM0OyVzOiBFcnJvciBob3N0IGlzIHRvbyBvbGRcXG5cJiMzNDssIF9fZnVuY19fKTtcbiAgOTc6XHRcbiAgOTg6XHRcdCpyb290ID0gcGFybXMucm9vdC51LnZhbHVlMzI7XG4gIDk5Olx0XHRyZXR1cm4gZXJyO1xuIDEwMDpcdH1cbiAxMDE6XHRcbiAxMDI6XHRpbnQgdmJveHNmX3VubWFwX2ZvbGRlcih1MzIgcm9vdClcbiAxMDM6XHR7XG4gMTA0Olx0XHRzdHJ1Y3Qgc2hmbF91bm1hcF9mb2xkZXIgcGFybXM7XG4gMTA1Olx0XG4gMTA2Olx0XHRwYXJtcy5yb290LnR5cGUgPSBWTU1ERVZfSEdDTV9QQVJNX1RZUEVfMzJCSVQ7XG4gMTA3Olx0XHRwYXJtcy5yb290LnUudmFsdWUzMiA9IHJvb3Q7XG4gMTA4Olx0XG4gMTA5Olx0XHRyZXR1cm4gdmJveHNmX2NhbGwoU0hGTF9GTl9VTk1BUF9GT0xERVIsIFx1MDAyNnBhcm1zLFxuIDExMDpcdFx0XHRcdCAgIFNIRkxfQ1BBUk1TX1VOTUFQX0ZPTERFUiwgTlVMTCk7XG4gMTExOlx0fVxuIDExMjpcdFxuIDExMzpcdC8qKlxuIDExNDpcdCAqIHZib3hzZl9jcmVhdGUgLSBDcmVhdGUgYSBuZXcgZmlsZSBvciBmb2xkZXJcbiAxMTU6XHQgKiBAcm9vdDogICAgICAgICBSb290IG9mIHRoZSBzaGFyZWQgZm9sZGVyIGluIHdoaWNoIHRvIGNyZWF0ZSB0aGUgZmlsZVxuIDExNjpcdCAqIEBwYXJzZWRfcGF0aDogIFRoZSBwYXRoIG9mIHRoZSBmaWxlIG9yIGZvbGRlciByZWxhdGl2ZSB0byB0aGUgc2hhcmVkIGZvbGRlclxuIDExNzpcdCAqIEBjcmVhdGVfcGFybXM6IFBhcmFtZXRlcnMgZm9yIGZpbGUvZm9sZGVyIGNyZWF0aW9uLlxuIDExODpcdCAqXG4gMTE5Olx0ICogQ3JlYXRlIGEgbmV3IGZpbGUgb3IgZm9sZGVyIG9yIG9wZW4gYW4gZXhpc3Rpbmcgb25lIGluIGEgc2hhcmVkIGZvbGRlci5cbiAxMjA6XHQgKiBOb3RlIHRoaXMgZnVuY3Rpb24gYWx3YXlzIHJldHVybnMgMCAvIHN1Y2Nlc3MgdW5sZXNzIGFuIGV4Y2VwdGlvbmFsIGNvbmRpdGlvblxuIDEyMTpcdCAqIG9jY3VycyAtIG91dCBvZiBtZW1vcnksIGludmFsaWQgYXJndW1lbnRzLCBldGMuIElmIHRoZSBmaWxlIG9yIGZvbGRlciBjb3VsZFxuIDEyMjpcdCAqIG5vdCBiZSBvcGVuZWQgb3IgY3JlYXRlZCwgY3JlYXRlX3Bhcm1zLVx1MDAzZWhhbmRsZSB3aWxsIGJlIHNldCB0b1xuIDEyMzpcdCAqIFNIRkxfSEFORExFX05JTCBvbiByZXR1cm4uICBJbiB0aGlzIGNhc2UgdGhlIHZhbHVlIGluIGNyZWF0ZV9wYXJtcy1cdTAwM2VyZXN1bHRcbiAxMjQ6XHQgKiBwcm92aWRlcyBpbmZvcm1hdGlvbiBhcyB0byB3aHkgKGUuZy4gU0hGTF9GSUxFX0VYSVNUUyksIGNyZWF0ZV9wYXJtcy1cdTAwM2VyZXN1bHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg1OQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEZWNvZGluZyB0aGUgVmlydHVhbEJveCBTaGFyZWQgRm9sZGVyIENhbGwgQ2hhaW4qKgoKQWxyaWdodCwgc28gdGhlIGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIHplcm9lcyBpbiBvbiBhIHNwZWNpZmljIGZ1bmN0aW9uIGNhbGw6IGB2Ym94c2ZfY2FsbGAuIE15IGltbWVkaWF0ZSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhpcyBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIHNvbWUga2luZCBvZiBzaGFyZWQgZm9sZGVyIGludGVyYWN0aW9uIHdpdGhpbiBWaXJ0dWFsQm94JiMzOTtzIGd1ZXN0IGFkZGl0aW9ucy4gVGhlbiwgdGhlIGNvbm5lY3Rpb24gYmVjb21lcyBjbGVhcjogYHZib3hzZl9jYWxsYCAqZGlyZWN0bHkqIGNhbGxzIGB2YmdfaGdjbV9jYWxsYC4gVGhpcyBwb2ludHMgdG93YXJkcyBhIHNwZWNpZmljIGFyY2hpdGVjdHVyYWwgcmVsYXRpb25zaGlwLgoKTXkgYXNzZXNzbWVudDogYHZiZ19oZ2NtX2NhbGxgIGxpa2VseSByZXByZXNlbnRzIHRoZSB1bmRlcmx5aW5nIEhvc3QtR3Vlc3QgQ29tbXVuaWNhdGlvbiBNZWNoYW5pc20gKEhHQ00pIGl0c2VsZiwgYW5kIGB2Ym94c2ZfY2FsbGAgaXMgYWN0aW5nIGFzIGEgc3BlY2lmaWMgKmxheWVyKiB0aGF0IGtub3dzIGhvdyB0byB3cmFwIHNoYXJlZCBmb2xkZXIgb3BlcmF0aW9ucyBmb3IgdGhhdCBtZWNoYW5pc20uIEl0JiMzOTtzIGEgY2xlYXIgZGVsZWdhdGlvbiBvZiByZXNwb25zaWJpbGl0eS4gSXQgdGVsbHMgbWUgdGhhdCB0aGUgc2hhcmVkIGZvbGRlcnMgZnVuY3Rpb25hbGl0eSBpcyBidWlsdCAqb24gdG9wKiBvZiBhIG1vcmUgZ2VuZXJpYyBndWVzdC1ob3N0IGNvbW11bmljYXRpb24gaW5mcmFzdHJ1Y3R1cmUuIFRoZSAmIzM0O3NmJiMzNDsgbW9kdWxlIGFjdHMgYXMgYSBmcm9udC1lbmQgb3Igc2VydmljZSBoYW5kbGVyLCB3aGlsZSB0aGUgJiMzNDtoZ2NtJiMzNDsgbW9kdWxlIHByb3ZpZGVzIGEgbG93IGxldmVsLCBhYnN0cmFjdGVkIHRyYW5zcG9ydC4gVGhpcyBzdHJ1Y3R1cmUgc2hvdWxkIHNpbXBsaWZ5IG1hbmFnaW5nIGRpZmZlcmVudCBzZXJ2aWNlcyBvciBtb2R1bGVzIHRoYXQgbWlnaHQgYmUgaW1wbGVtZW50ZWQgaW4gdGhlIHNhbWUgYXJjaGl0ZWN0dXJlLiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgZnVydGhlciB0byB1bmRlcnN0YW5kIGhvdyBtYW55IGxheWVycyBvZiBjb21tdW5pY2F0aW9uIGFic3RyYWN0aW9uIHRoZXJlIG1pZ2h0IGJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2Ym94c2ZfY2FsbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3Zib3hzZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jPTQwPXZvaWQgdmJveHNmX2Rpc2Nvbm5lY3Qodm9pZClcbi0tXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtNTItXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM6NTM6c3RhdGljIGludCB2Ym94c2ZfY2FsbCh1MzIgZnVuY3Rpb24sIHZvaWQgKnBhcm1zLCB1MzIgcGFybV9jb3VudCwgaW50ICpzdGF0dXMpXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtNTQte1xuLS1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYz03NT1pbnQgdmJveHNmX21hcF9mb2xkZXIoc3RydWN0IHNoZmxfc3RyaW5nICpmb2xkZXJfbmFtZSwgdTMyICpyb290KVxuLS1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy05Mi1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYzo5MzpcdGVyciA9IHZib3hzZl9jYWxsKFNIRkxfRk5fTUFQX0ZPTERFUiwgXHUwMDI2cGFybXMsIFNIRkxfQ1BBUk1TX01BUF9GT0xERVIsXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtOTQtXHRcdFx0ICBcdTAwMjZzdGF0dXMpO1xuLS1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYz0xMDI9aW50IHZib3hzZl91bm1hcF9mb2xkZXIodTMyIHJvb3QpXG4tLVxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTEwOC1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYzoxMDk6XHRyZXR1cm4gdmJveHNmX2NhbGwoU0hGTF9GTl9VTk1BUF9GT0xERVIsIFx1MDAyNnBhcm1zLFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTExMC1cdFx0XHQgICBTSEZMX0NQQVJNU19VTk1BUF9GT0xERVIsIE5VTEwpO1xuLS1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYz0xMzA9aW50IHZib3hzZl9jcmVhdGUodTMyIHJvb3QsIHN0cnVjdCBzaGZsX3N0cmluZyAqcGFyc2VkX3BhdGgsXG4tLVxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTE0NS1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYzoxNDY6XHRyZXR1cm4gdmJveHNmX2NhbGwoU0hGTF9GTl9DUkVBVEUsIFx1MDAyNnBhcm1zLCBTSEZMX0NQQVJNU19DUkVBVEUsIE5VTEwpO1xuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTE0Ny19XG4tLVxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jPTE0OT1pbnQgdmJveHNmX2Nsb3NlKHUzMiByb290LCB1NjQgaGFuZGxlKVxuLS1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy0xNTgtXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM6MTU5Olx0cmV0dXJuIHZib3hzZl9jYWxsKFNIRkxfRk5fQ0xPU0UsIFx1MDAyNnBhcm1zLCBTSEZMX0NQQVJNU19DTE9TRSwgTlVMTCk7XG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMTYwLX1cbi0tXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM9MTYyPWludCB2Ym94c2ZfcmVtb3ZlKHUzMiByb290LCBzdHJ1Y3Qgc2hmbF9zdHJpbmcgKnBhcnNlZF9wYXRoLCB1MzIgZmxhZ3MpXG4tLVxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTE3NS1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYzoxNzY6XHRyZXR1cm4gdmJveHNmX2NhbGwoU0hGTF9GTl9SRU1PVkUsIFx1MDAyNnBhcm1zLCBTSEZMX0NQQVJNU19SRU1PVkUsIE5VTEwpO1xuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTE3Ny19XG4tLVxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jPTE3OT1pbnQgdmJveHNmX3JlbmFtZSh1MzIgcm9vdCwgc3RydWN0IHNoZmxfc3RyaW5nICpzcmNfcGF0aCxcbi0tXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMTk3LVxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jOjE5ODpcdHJldHVybiB2Ym94c2ZfY2FsbChTSEZMX0ZOX1JFTkFNRSwgXHUwMDI2cGFybXMsIFNIRkxfQ1BBUk1TX1JFTkFNRSwgTlVMTCk7XG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMTk5LX1cbi0tXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM9MjAxPWludCB2Ym94c2ZfcmVhZCh1MzIgcm9vdCwgdTY0IGhhbmRsZSwgdTY0IG9mZnNldCwgdTMyICpidWZfbGVuLCB1OCAqYnVmKVxuLS1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy0yMTgtXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM6MjE5Olx0ZXJyID0gdmJveHNmX2NhbGwoU0hGTF9GTl9SRUFELCBcdTAwMjZwYXJtcywgU0hGTF9DUEFSTVNfUkVBRCwgTlVMTCk7XG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMjIwLVxuLS1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYz0yMjU9aW50IHZib3hzZl93cml0ZSh1MzIgcm9vdCwgdTY0IGhhbmRsZSwgdTY0IG9mZnNldCwgdTMyICpidWZfbGVuLCB1OCAqYnVmKVxuLS1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy0yNDItXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM6MjQzOlx0ZXJyID0gdmJveHNmX2NhbGwoU0hGTF9GTl9XUklURSwgXHUwMDI2cGFybXMsIFNIRkxfQ1BBUk1TX1dSSVRFLCBOVUxMKTtcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy0yNDQtXG4tLVxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jPTI1MD1pbnQgdmJveHNmX2RpcmluZm8odTMyIHJvb3QsIHU2NCBoYW5kbGUsXG4tLVxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTI4NC1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYzoyODU6XHRlcnIgPSB2Ym94c2ZfY2FsbChTSEZMX0ZOX0xJU1QsIFx1MDAyNnBhcm1zLCBTSEZMX0NQQVJNU19MSVNULCBcdTAwMjZzdGF0dXMpO1xuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTI4Ni1cdGlmIChlcnIgPT0gLUVOT0RBVEEgXHUwMDI2XHUwMDI2IHN0YXR1cyA9PSBWRVJSX05PX01PUkVfRklMRVMpXG4tLVxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jPTI5ND1pbnQgdmJveHNmX2ZzaW5mbyh1MzIgcm9vdCwgdTY0IGhhbmRsZSwgdTMyIGZsYWdzLFxuLS1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy0zMTItXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM6MzEzOlx0ZXJyID0gdmJveHNmX2NhbGwoU0hGTF9GTl9JTkZPUk1BVElPTiwgXHUwMDI2cGFybXMsIFNIRkxfQ1BBUk1TX0lORk9STUFUSU9OLFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTMxNC1cdFx0XHQgIE5VTEwpO1xuLS1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYz0zMjA9aW50IHZib3hzZl9yZWFkbGluayh1MzIgcm9vdCwgc3RydWN0IHNoZmxfc3RyaW5nICpwYXJzZWRfcGF0aCxcbi0tXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMzM1LVxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jOjMzNjpcdHJldHVybiB2Ym94c2ZfY2FsbChTSEZMX0ZOX1JFQURMSU5LLCBcdTAwMjZwYXJtcywgU0hGTF9DUEFSTVNfUkVBRExJTkssXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMzM3LVx0XHRcdCAgIE5VTEwpO1xuLS1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYz0zNDA9aW50IHZib3hzZl9zeW1saW5rKHUzMiByb290LCBzdHJ1Y3Qgc2hmbF9zdHJpbmcgKm5ld19wYXRoLFxuLS1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy0zNTktXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM6MzYwOlx0cmV0dXJuIHZib3hzZl9jYWxsKFNIRkxfRk5fU1lNTElOSywgXHUwMDI2cGFybXMsIFNIRkxfQ1BBUk1TX1NZTUxJTkssIE5VTEwpO1xuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTM2MS19XG4tLVxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jPTM2Mz1pbnQgdmJveHNmX3NldF91dGY4KHZvaWQpXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMzY0LXtcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYzozNjU6XHRyZXR1cm4gdmJveHNmX2NhbGwoU0hGTF9GTl9TRVRfVVRGOCwgTlVMTCwgMCwgTlVMTCk7XG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMzY2LX1cbi0tXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM9MzY4PWludCB2Ym94c2Zfc2V0X3N5bWxpbmtzKHZvaWQpXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMzY5LXtcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYzozNzA6XHRyZXR1cm4gdmJveHNmX2NhbGwoU0hGTF9GTl9TRVRfU1lNTElOS1MsIE5VTEwsIDAsIE5VTEwpO1xuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTM3MS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyMjMKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBgdmJveHNmX2NhbGxgIEltcGxlbWVudGF0aW9uKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGB2Ym94c2ZfY2FsbGAgaW1wbGVtZW50YXRpb24uIEl0JiMzOTtzIHRoZSBjb3JlIG9mIGhvdyB0aGUgVmlydHVhbEJveCBTaGFyZWQgRm9sZGVycyBmZWF0dXJlIGxpa2VseSB3b3Jrcy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSB0cmFjaW5nIHRocm91Z2ggdGhlIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUsIHRoZSBwYXJhbWV0ZXJzIGl0IHRha2VzLCBhbmQgd2hhdCBpdCYjMzk7cyB1bHRpbWF0ZWx5IHN1cHBvc2VkIHRvIGFjaGlldmUuIFdoYXQmIzM5O3MgdGhlIHB1cnBvc2Ugb2YgdGhpcyBwYXJ0aWN1bGFyIHN5c3RlbSBjYWxsPyBJcyBpdCBmb3IgZmlsZSBhY2Nlc3MsIGRpcmVjdG9yeSBvcGVyYXRpb25zLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGNvbW1lbnRzIGFyZSBob3BlZnVsbHkgaGVscGZ1bCwgYnV0IEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ3Jhc3AgdGhlIG92ZXJhbGwgY29udGV4dC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgbWVhdCBvZiB0aGUgZnVuY3Rpb24gLSB0aGUgaW1wb3J0YW50IGNvbnRyb2wgZmxvdyBhbmQgYW55IGVycm9yIGhhbmRsaW5nLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBiZWluZyBwYXNzZWQgYW5kIG1hbmlwdWxhdGVkLCBhcyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjcnVjaWFsIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGd1ZXN0IGFuZCB0aGUgaG9zdCBwcm9iYWJseSBsaWVzLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5IGhhbmRsZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIG90aGVyIGNvbmN1cnJlbmN5IGlzc3VlczsgSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyB0aGV5JiMzOTt2ZSBlbXBsb3llZC4gQW5kIG9mIGNvdXJzZSwgSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBjbGV2ZXIgdXNlIG9mIHRoZSBWaXJ0dWFsQm94JiMzOTtzIGludGVybmFsIEFQSXMgb3IgZGV2aWNlIGRyaXZlcnMuIFRoaXMgaXMgdGhlIHBsYWNlIHRvIGxvb2sgZm9yIHRoYXQgaW50ZXJhY3Rpb24uIEFscmlnaHQsIGxldCYjMzk7cyBnZXQgaW50byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDUzOlx0c3RhdGljIGludCB2Ym94c2ZfY2FsbCh1MzIgZnVuY3Rpb24sIHZvaWQgKnBhcm1zLCB1MzIgcGFybV9jb3VudCwgaW50ICpzdGF0dXMpXG4gIDU0Olx0e1xuICA1NTpcdFx0c3RydWN0IHZiZ19kZXYgKmdkZXY7XG4gIDU2Olx0XHRpbnQgZXJyLCB2Ym94X3N0YXR1cztcbiAgNTc6XHRcbiAgNTg6XHRcdGdkZXYgPSB2YmdfZ2V0X2dkZXYoKTtcbiAgNTk6XHRcdGlmIChJU19FUlIoZ2RldikpXG4gIDYwOlx0XHRcdHJldHVybiAtRVNIVVRET1dOOyAvKiBndWVzdC1kZXYgcmVtb3ZlZCB1bmRlcm5lYXRoIHVzICovXG4gIDYxOlx0XG4gIDYyOlx0XHRlcnIgPSB2YmdfaGdjbV9jYWxsKGdkZXYsIFNIRkxfUkVRVUVTVCwgdmJveHNmX2NsaWVudF9pZCwgZnVuY3Rpb24sXG4gIDYzOlx0XHRcdFx0ICAgIFUzMl9NQVgsIHBhcm1zLCBwYXJtX2NvdW50LCBcdTAwMjZ2Ym94X3N0YXR1cyk7XG4gIDY0Olx0XHR2YmdfcHV0X2dkZXYoZ2Rldik7XG4gIDY1Olx0XG4gIDY2Olx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuICA2NzpcdFx0XHRyZXR1cm4gZXJyO1xuICA2ODpcdFxuICA2OTpcdFx0aWYgKHN0YXR1cylcbiAgNzA6XHRcdFx0KnN0YXR1cyA9IHZib3hfc3RhdHVzO1xuICA3MTpcdFxuICA3MjpcdFx0cmV0dXJuIHZiZ19zdGF0dXNfY29kZV90b19lcnJubyh2Ym94X3N0YXR1cyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4NzEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBWaXJ0dWFsQm94IEd1ZXN0IERldmljZSBhbmQgU3l6a2FsbGVyIEZ1enppbmcqKgoKT2theSwgc28gYHZiZ19nZXRfZ2RldmAgaXMgaG93IHdlIHNuYWcgdGhhdCBWaXJ0dWFsQm94IGd1ZXN0IGRldmljZS4gSWYgd2UmIzM5O3JlIG5vdCBydW5uaW5nIGluc2lkZSBWaXJ0dWFsQm94LCBpdCYjMzk7cyBnb2luZyB0byBlcnJvciBvdXQsIG1lYW5pbmcgYHZib3hzZmAgd29uJiMzOTt0IG1vdW50LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgY2FuIHN5emthbGxlciBmdXp6IHRoaXM/IEJ1dCB3YWl0LCBkb2VzbiYjMzk7dCBzeXprYWxsZXIgaGF2ZSAqdmJveGd1ZXN0KiBkcml2ZXIgZnV6emluZz8gTGV0IG1lIGNoZWNrLgoKQWxyaWdodCwgbm93IEkgcmVtZW1iZXIsIHN5emthbGxlciBydW5zIGluIFFFTVUuIFRoYXQmIzM5O3MgYSBwcm9ibGVtLCBiZWNhdXNlIGl0IGRvZXNuJiMzOTt0IGVtdWxhdGUgdGhlIFZpcnR1YWxCb3ggUENJIGRldmljZSBkaXJlY3RseS4gSG1tLCBidXQgZG9lc24mIzM5O3Qgc3l6a2FsbGVyIGhhdmUgc29tZXRoaW5nIGxpa2UgYHN5el9tb3VudF9pbWFnZWA/IEV2ZW4gd2l0aCB0aGF0LCBJJiMzOTtkIHN0aWxsIG5lZWQgdGhlIHVuZGVybHlpbmcgZGV2aWNlLi4uIFNvLCBkb2VzbiYjMzk7dCBzeXprYWxsZXIgcHJvdmlkZSBhIGBzeXpfdmJveGd1ZXN0YCBjYWxsPyBObywgaXQgbG9va3MgbGlrZSBpdCBkb2VzbiYjMzk7dC4KCk9rYXksIG5ldyBhbmdsZS4gQ2FuIEkgZnV6eiBgdmJveHNmYCB0aHJvdWdoIGBzeXpfbW91bnRfaW1hZ2VgLCBtYXliZT8gV2FpdCBhIHNlY29uZC4uLiBzeXprYWxsZXIgKnJlcG9ydGVkKiBhIHBhdGNoIHJlbGF0ZWQgdG8gdGhpcyEgVGhlIGF1dGhvciBpcyBsaXN0ZWQgYXMgJiMzNDtzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7JiMzNDssIGFuZCBpdCBzYXlzICYjMzQ7c3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3JiMzNDsuCgpUaGlzIGlzIGdyZWF0ISBUaGF0IG1lYW5zIHN5emthbGxlciAqZGlkKiBhY3R1YWxseSBmaW5kIGEgYnVnIGluIGB2Ym94c2ZfZGlyX2VtaXRgISBUaGUgbXlzdGVyeSBpcyBob3cgc3l6a2FsbGVyIGV2ZW4gZ290IHRvIGB2Ym94c2ZfZGlyX2VtaXRgLiBUaW1lIHRvIGRpdmUgaW50byBgZnMvdmJveHNmL2Rpci5jYCBhbmQgZmlndXJlIG91dCBob3cgc3l6a2FsbGVyIHRyaWdnZXJlZCB0aGlzIGNvZGUgcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy92Ym94c2YvZGlyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDExMDpcdFx0XHRcdGN1ciAmIzQzOz0gYi1cdTAwM2VlbnRyaWVzO1xuIDExMTpcdFx0XHRcdGNvbnRpbnVlO1xuIDExMjpcdFx0XHR9XG4gMTEzOlx0XG4gMTE0Olx0XHRcdC8qXG4gMTE1Olx0XHRcdCAqIE5vdGUgdGhlIHZib3hzZl9kaXJfaW5mbyBvYmplY3RzIHdlIGFyZSBpdGVyYXRpbmcgb3ZlciBoZXJlXG4gMTE2Olx0XHRcdCAqIGFyZSB2YXJpYWJsZSBzaXplZCwgc28gdGhlIGluZm8gcG9pbnRlciBtYXkgZW5kIHVwIGJlaW5nXG4gMTE3Olx0XHRcdCAqIHVuYWxpZ25lZC4gVGhpcyBpcyBob3cgd2UgZ2V0IHRoZSBkYXRhIGZyb20gdGhlIGhvc3QuXG4gMTE4Olx0XHRcdCAqIFNpbmNlIHZib3hzZiBpcyBvbmx5IHN1cHBvcnRlZCBvbiB4ODYgbWFjaGluZXMgdGhpcyBpcyBub3RcbiAxMTk6XHRcdFx0ICogYSBwcm9ibGVtLlxuIDEyMDpcdFx0XHQgKi9cbiAxMjE6XHRcdFx0Zm9yIChpID0gMCwgaW5mbyA9IGItXHUwMDNlYnVmOyBpIFx1MDAzYyBjdHgtXHUwMDNlcG9zIC0gY3VyOyBpJiM0MzsmIzQzOykge1xuIDEyMjpcdFx0XHRcdGVuZCA9IFx1MDAyNmluZm8tXHUwMDNlbmFtZS5zdHJpbmcudXRmOFtpbmZvLVx1MDAzZW5hbWUuc2l6ZV07XG4gMTIzOlx0XHRcdFx0LyogT25seSBoYXBwZW5zIGlmIHRoZSBob3N0IGdpdmVzIHVzIGNvcnJ1cHQgZGF0YSAqL1xuIDEyNDpcdFx0XHRcdGlmIChXQVJOX09OKGVuZCBcdTAwM2UgKGItXHUwMDNlYnVmICYjNDM7IGItXHUwMDNldXNlZCkpKVxuIDEyNTpcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDEyNjpcdFx0XHRcdGluZm8gPSBlbmQ7XG4gMTI3Olx0XHRcdH1cbiAxMjg6XHRcbiAxMjk6XHRcdFx0ZW5kID0gXHUwMDI2aW5mby1cdTAwM2VuYW1lLnN0cmluZy51dGY4W2luZm8tXHUwMDNlbmFtZS5zaXplXTtcbiAxMzA6XHRcdFx0aWYgKFdBUk5fT04oZW5kIFx1MDAzZSAoYi1cdTAwM2VidWYgJiM0MzsgYi1cdTAwM2V1c2VkKSkpXG4gMTMxOlx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDEzMjpcdFx0XHRpZiAoaW5mby1cdTAwM2VuYW1lLmxlbmd0aCBcdTAwM2UgaW5mby1cdTAwM2VuYW1lLnNpemUpXG4gMTMzOlx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDEzNDpcdFxuIDEzNTpcdFx0XHQvKiBJbmZvIG5vdyBwb2ludHMgdG8gdGhlIHJpZ2h0IGVudHJ5LCBlbWl0IGl0LiAqL1xuIDEzNjpcdFx0XHRkX3R5cGUgPSB2Ym94c2ZfZ2V0X2RfdHlwZShpbmZvLVx1MDAzZWluZm8uYXR0ci5tb2RlKTtcbiAxMzc6XHRcbiAxMzg6XHRcdFx0LypcbiAxMzk6XHRcdFx0ICogT24gMzItYml0IHN5c3RlbXMgcG9zIGlzIDY0LWJpdCBzaWduZWQsIHdoaWxlIGlubyBpcyAzMi1iaXRcbiAxNDA6XHRcdFx0ICogdW5zaWduZWQgc28gZmFrZV9pbm8gbWF5IG92ZXJmbG93LCBjaGVjayBmb3IgdGhpcy5cbiAxNDE6XHRcdFx0ICovXG4gMTQyOlx0XHRcdGlmICgoaW5vX3QpKGN0eC1cdTAwM2Vwb3MgJiM0MzsgMSkgIT0gKHU2NCkoY3R4LVx1MDAzZXBvcyAmIzQzOyAxKSkge1xuIDE0MzpcdFx0XHRcdHZiZ19lcnIoXCYjMzQ7dmJveHNmOiBmYWtlIGlubyBvdmVyZmxvdywgdHJ1bmNhdGluZyBkaXJcXG5cJiMzNDspO1xuIDE0NDpcdFx0XHRcdHJldHVybiBmYWxzZTtcbiAxNDU6XHRcdFx0fVxuIDE0NjpcdFx0XHRmYWtlX2lubyA9IGN0eC1cdTAwM2Vwb3MgJiM0MzsgMTtcbiAxNDc6XHRcbiAxNDg6XHRcdFx0aWYgKHNiaS1cdTAwM2VubHMpIHtcbiAxNDk6XHRcdFx0XHRjaGFyIGRfbmFtZVtOQU1FX01BWF07XG4gMTUwOlx0XG4gMTUxOlx0XHRcdFx0ZXJyID0gdmJveHNmX25sc2NweShzYmksIGRfbmFtZSwgTkFNRV9NQVgsXG4gMTUyOlx0XHRcdFx0XHRcdCAgICBpbmZvLVx1MDAzZW5hbWUuc3RyaW5nLnV0ZjgsXG4gMTUzOlx0XHRcdFx0XHRcdCAgICBpbmZvLVx1MDAzZW5hbWUubGVuZ3RoKTtcbiAxNTQ6XHRcdFx0XHRpZiAoZXJyKSB7XG4gMTU1Olx0XHRcdFx0XHQvKiBza2lwIGVycm9uZW91cyBlbnRyeSBhbmQgcHJvY2VlZCAqL1xuIDE1NjpcdFx0XHRcdFx0Y3R4LVx1MDAzZXBvcyAmIzQzOz0gMTtcbiAxNTc6XHRcdFx0XHRcdGdvdG8gdHJ5X25leHRfZW50cnk7XG4gMTU4Olx0XHRcdFx0fVxuIDE1OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTM0NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDY4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU3l6a2FsbGVyJiMzOTtzIFJlYWNoYWJpbGl0eSBvZiB0aGUgYHZib3hzZmAgRmlsZXN5c3RlbSoqCgpPa2F5LCBzbyBzeXprYWxsZXIgKmRpZCogZmluZCBhIGJ1ZywgbWVhbmluZyBpdCAqY2FuKiBhY3R1YWxseSByZWFjaCB0aGlzIGNvZGUuIFRoZSBxdWVzdGlvbiBub3cgaXMgKmhvdyo/IE15IGluaXRpYWwgdGhvdWdodCB3YXMgVmlydHVhbEJveCwgc2luY2UgaXQmIzM5O3MgYSBwb3NzaWJpbGl0eSBmb3Igc3l6a2FsbGVyLCBidXQgdGhlbiBJIHJlbWVtYmVyIHN5emthbGxlciBjYW4gcnVuIHdpdGggdmFyaW91cyBWTSB0eXBlcy4gSXQgaGFzIHN1cHBvcnQgZm9yIG11bHRpcGxlIFZNcyBhbmQgY2FuIGJlIGNvbmZpZ3VyZWQgd2l0aCBgdm1fdHlwZTogJiMzNDtxZW11JiMzNDtgLCBhbmQgb3RoZXJzLgoKSSB3b25kZXJlZCBpZiBpdCBoYWQgYSBgdmJveGd1ZXN0YCBmdXp6ZXIgZGlyZWN0bHkgb3IgaWYgaXQgcnVucyAqb24qIFZpcnR1YWxCb3guIEkgcmVtZW1iZXJlZCBgc3l6X21vdW50X2ltYWdlYCB3aGljaCBjYW4gbW91bnQgZmlsZXN5c3RlbXMsIGJ1dCBgdmJveHNmYCBpc24mIzM5O3QgYmxvY2stYmFzZWQsIGl0JiMzOTtzIG1vcmUgb2YgYSBuZXR3b3JrLWxpa2UgY29ubmVjdGlvbiB0byB0aGUgaG9zdC4gVGhlbiBJIHdvbmRlcmVkLCBjb3VsZCBzeXprYWxsZXIgYmUgZGlyZWN0bHkgZnV6emluZyBgdmJveHNmYCBvciBnb2luZyB0aHJvdWdoIGAvZGV2L3Zib3hndWVzdGA/IE5vLCBiZWNhdXNlIGB2Ym94c2ZgIGlzIGEgZmlsZXN5c3RlbS4KClRoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhlbSBpcyBsaWtlbHkgYHZiZ19oZ2NtX2NhbGxgIHdoaWNoIGB2Ym94c2ZgIHVzZXMuIFRoaXMgbWVhbnMgdGhhdCBpZiBzeXprYWxsZXIgaXMgbW91bnRpbmcgYHZib3hzZmAsIGl0IG5lZWRzIHRoZSBgdmJveGd1ZXN0YCBkcml2ZXIgdG8gYmUgaW5pdGlhbGl6ZWQuIEJ1dCBpcyB0aGF0IGRyaXZlciBpbml0aWFsaXplZCBpbiBRRU1VPyBBbmQgdGhhdCYjMzk7cyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBUaGUgYHZib3hndWVzdGAgZHJpdmVyIGJpbmRzIHRvIFBDSSB2ZW5kb3IgSUQgMHg4MEVFIChJbm5vVGVrIFN5c3RlbWJlcmF0dW5nIEdtYkgpLCBhbmQgZGV2aWNlIElEIDB4Q0FGRS4gRG9lcyBRRU1VIGVtdWxhdGUgdGhpcyBkZXZpY2U/IE5vLCBpdCBkb2VzbiYjMzk7dC4KCkhvd2V2ZXIsIHN5emthbGxlciAqZG9lcyogaGF2ZSB2YXJpb3VzIGZ1enplciBvcHRpb25zIGZvciBQQ0ksIGFuZCBVU0IuIFNvIGl0IG1heSBiZSB1c2luZyBgc3l6X3BjaV9hZGRgIHRvIGluamVjdCBQQ0kgZGV2aWNlcy4gSXQgbWlnaHQgdXNlIGB2ZmlvYCBvciBzaW1pbGFyIHRvIGhhbmRsZSBQQ0ksIHNpbWlsYXIgdG8gaXRzIHVzZSBvZiBgdmhjaWAgZm9yIFVTQi4gQWN0dWFsbHksIGl0IGhhcyBvdGhlciB3YXlzIHRvIGhhbmRsZSBWTXMsIGxpa2UgYHN5el9rdm1fc2V0dXBfY3B1YC4gSSBkaWRuJiMzOTt0IHNlZSBhbnl0aGluZyBjYWxsZWQgYHN5el92Ym94Z3Vlc3RgLCBzbyBtYXliZSBpdCYjMzk7cyBub3QgZGlyZWN0LgoKSSBoYXZlIHRvIGdvIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHByZW1pc2U6IGlmIHN5emthbGxlciBmb3VuZCB0aGlzIGJ1ZywgaXQgKmNhbiogcmVhY2ggdGhlIGNvZGUuIE5vdywgdGhlIHByb21wdCBkb2VzIHNheSBzb21ldGhpbmcgYWJvdXQgY29kZSBwYXRocyBiZWluZyB1bnJlYWNoYWJsZSBpbiBRRU1VIG9yIEdDRSBldmVuIHdpdGggZW11bGF0ZWQgaGFyZHdhcmUuIElmIHRoYXQmIzM5O3MgdHJ1ZSwgaG93IGNvdWxkIGl0IGJlIHJlYWNoYWJsZT8KCk1heWJlIGl0JiMzOTtzIG1vdW50aW5nIGB2Ym94c2ZgICp3aXRob3V0KiBuZWVkaW5nIHRoZSBQQ0kgZGV2aWNlLCBzb21lIGFsdGVybmF0ZSBpbml0aWFsaXphdGlvbiBwYXRoPyBJIGhhdmUgdG8gbG9vayBpbnRvIGB2YmdfZ2V0X2dkZXZgIHRvIHNlZSB3aGF0IGNvdWxkIGJlIGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmJnX2dldF9nZGV2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aXJ0L3Zib3hndWVzdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYz00MTk9c3RhdGljIHZvaWQgdmJnX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBjaSlcbi0tXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTQzMy1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmM6NDM0OnN0cnVjdCB2YmdfZGV2ICp2YmdfZ2V0X2dkZXYodm9pZClcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtNDM1LXtcbi0tXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTQ0OC19XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jOjQ0OTpFWFBPUlRfU1lNQk9MKHZiZ19nZXRfZ2Rldik7XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTQ1MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4MzEKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgYHZiZ19nZXRfZ2RldmAgd2l0aGluIHRoZSBgZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguY2AgZmlsZS4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgb3IgYXQgbGVhc3Qgd2hlcmUgYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSBndWVzdCBkZXZpY2UgaW50ZXJhY3Rpb24gd2l0aCBWaXJ0dWFsQm94IGtlcm5lbCBtb2R1bGUgcmVzaWRlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBndWVzdCBpcyBnZXR0aW5nIGFjY2VzcyB0byByZXNvdXJjZXMgYW5kIGNhcGFiaWxpdGllcyBoZXJlLiBUaGlzIGlzIGxpa2VseSBhIGtleSBlbnRyeSBwb2ludCBmb3IgdGhlIFZpcnR1YWxCb3ggR3Vlc3QgQWRkaXRpb25zIHRvIGlkZW50aWZ5IGFuZCBpbnRlcmFjdCB3aXRoIHRoZSBob3N0LiBLbm93aW5nIGhvdyB0aGlzIGZ1bmN0aW9uIHdvcmtzIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBndWVzdC1ob3N0IGNvbW11bmljYXRpb24gb2NjdXJzIGF0IGEgbG93IGxldmVsLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIHVuY292ZXIuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDM0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MzQ6XHRzdHJ1Y3QgdmJnX2RldiAqdmJnX2dldF9nZGV2KHZvaWQpXG4gNDM1Olx0e1xuIDQzNjpcdFx0bXV0ZXhfbG9jayhcdTAwMjZ2YmdfZ2Rldl9tdXRleCk7XG4gNDM3Olx0XG4gNDM4Olx0XHQvKlxuIDQzOTpcdFx0ICogTm90ZSBvbiBzdWNjZXNzIHdlIGtlZXAgdGhlIG11dGV4IGxvY2tlZCB1bnRpbCB2YmdfcHV0X2dkZXYoKSxcbiA0NDA6XHRcdCAqIHRoaXMgc3RvcHMgdmJnX3BjaV9yZW1vdmUgZnJvbSByZW1vdmluZyB0aGUgZGV2aWNlIGZyb20gdW5kZXJuZWF0aFxuIDQ0MTpcdFx0ICogdmJveHNmLiB2Ym94c2Ygd2lsbCBvbmx5IGhvbGQgYSByZWZlcmVuY2UgZm9yIGEgc2hvcnQgd2hpbGUuXG4gNDQyOlx0XHQgKi9cbiA0NDM6XHRcdGlmICh2YmdfZ2RldilcbiA0NDQ6XHRcdFx0cmV0dXJuIHZiZ19nZGV2O1xuIDQ0NTpcdFxuIDQ0NjpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZiZ19nZGV2X211dGV4KTtcbiA0NDc6XHRcdHJldHVybiBFUlJfUFRSKC1FTk9ERVYpO1xuIDQ0ODpcdH1cbiA0NDk6XHRFWFBPUlRfU1lNQk9MKHZiZ19nZXRfZ2Rldik7XG4gNDUwOlx0XG4gNDUxOlx0dm9pZCB2YmdfcHV0X2dkZXYoc3RydWN0IHZiZ19kZXYgKmdkZXYpXG4gNDUyOlx0e1xuIDQ1MzpcdFx0V0FSTl9PTihnZGV2ICE9IHZiZ19nZGV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzNjEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0OTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgYHZib3hzZmAgQ29kZSBQYXRocyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgYHZiZ19nZGV2YCBpcyBhIGdsb2JhbCB2YXJpYWJsZSBpbml0aWFsaXplZCBkdXJpbmcgUENJIGRldmljZSBwcm9iaW5nLCBhbmQgYHZib3hzZmAgcmVsaWVzIG9uIHRoYXQuIFRoZSBxdWVzdGlvbiBpcywgY2FuIHN5emthbGxlciBpbmplY3QgYSBQQ0kgZGV2aWNlIHRvIG1ha2UgdGhpcyBoYXBwZW4/IFN5emthbGxlciBoYXMgdGhlIG1lYW5zIHdpdGggdG9vbHMgbGlrZSBgc3l6X3BjaWAsIGBzeXpfcGNpdmZpb2AsIG9yIGV2ZW4gdXNpbmcgYFBDSV9TVFVCYCBvciBgVkZJT2AsIG9yIHBlcmhhcHMgaXQgbGV2ZXJhZ2VzIGEgUENJIGZ1enplciB0aGF0IGVtdWxhdGVzIGRldmljZXMuIEhvbGQgb24sIHRob3VnaCDigJMgdGhlcmUgaXNuJiMzOTt0IGEgcmVhZGlseSBhdmFpbGFibGUgZ2VuZXJhbCBzb2Z0d2FyZSBmcmFtZXdvcmsgaW4gdGhlIExpbnV4IGtlcm5lbCB0byBlbXVsYXRlICphcmJpdHJhcnkqIFBDSSBkZXZpY2VzLiBUaGUgb3B0aW9ucyBhcHBlYXIgdG8gYmUgbGltaXRlZCB0byB0aGluZ3MgbGlrZSBgcGNpX2VuZHBvaW50YCBvciBgdmZpb2AsIHdoaWNoIGFyZSBtb3JlIHNwZWNpYWxpemVkLgoKQnV0IHdhaXQgYSBtaW51dGUhIFN5emthbGxlciBoYXMgYHN5el9nZW5ldGxpbmtgIGFuZCBvdGhlciBjYXBhYmlsaXRpZXMsIHdoaWNoIGNvdWxkIGJlIHJlbGV2YW50LiBBbmQgdGhlbiBJIHJlbWVtYmVyZWQsIHN5emthbGxlciAqZG9lcyogcnVuIG9uIFZpcnR1YWxCb3ghIEl0IHN1cHBvcnRzIGVudmlyb25tZW50cyBsaWtlIGB2bS9xZW11YCwgYHZtL2djZWAsIGFuZCBgdm0vdmJveGAuIFRoYXTigJlzIHRoZSBrZXkuIElmIHN5emthbGxlciBjYW4gcnVuIG9uIFZpcnR1YWxCb3gsIHRoZW4sIGluIHRoZW9yeSwgYHZib3hzZmAgc2hvdWxkIGJlIHJlYWNoYWJsZSwgcmlnaHQ/CgpCdXQgdGhlbiB0aGUgcHJvbXB0IHJhaXNlcyBhIHJlZCBmbGFnOiAmIzM0O0NvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSYjMzQ7LiBUaGlzIGltcGxpZXMgdGhhdCBpZiBzb21ldGhpbmcgaXMgT05MWSByZWFjaGFibGUgaW4gVmlydHVhbEJveCwgaXQmIzM5O3MgKm5vdCogcmVhY2hhYmxlIGluIEdDRSBvciBRRU1VLCBhbmQgdGhlcmVmb3JlIG1heSBub3QgYmUgd29ydGggZnV6emluZz8KClRoZSBkaXJlY3RpdmUgc3BlY2lmaWVzOiAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgLi4uIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZS4mIzM0OyBJZiBgdmJveHNmYCAqcmVxdWlyZXMqIHRoZSBWaXJ0dWFsQm94IGh5cGVydmlzb3IsIGl0IGlzLCBieSBkZWZpbml0aW9uLCB1bnJlYWNoYWJsZSBpbiBHQ0Ugb3IgUUVNVS4KCk5vdywgaXMgdGhlcmUgKmFueSogd2F5IHRvIGdldCBgdmJveHNmYCB3b3JraW5nIGluIFFFTVU/IFdoYXQgYWJvdXQgdXNpbmcgYFVNTGA/IE5vLCB0aGF0IHdvbiYjMzk7dCBoZWxwLiBXaGF0IGFib3V0IGBzeXpfbW91bnRfaW1hZ2VgPyBUaGF0IHdvdWxkIGZhaWwgaW4gYHZib3hzZl9maWxsX3N1cGVyYCBiZWNhdXNlIGB2YmdfZ2V0X2dkZXYoKWAgd291bGQgcmV0dXJuIGAtRU5PREVWYC4gSSB0aGluayBJIG5lZWQgdG8gZGlnIGludG8gYHZib3hzZl9maWxsX3N1cGVyYCB0byBjb25maXJtIHRoaXMuIFRoYXQgaXMgdGhlIG5leHQgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmJnX2dldF9nZGV2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvdmJveHNmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM9MjA9aW50IHZib3hzZl9jb25uZWN0KHZvaWQpXG4tLVxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTI4LVxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jOjI5Olx0Z2RldiA9IHZiZ19nZXRfZ2RldigpO1xuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTMwLVx0aWYgKElTX0VSUihnZGV2KSlcbi0tXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM9NDA9dm9pZCB2Ym94c2ZfZGlzY29ubmVjdCh2b2lkKVxuLS1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy00NC1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYzo0NTpcdGdkZXYgPSB2YmdfZ2V0X2dkZXYoKTtcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy00Ni1cdGlmIChJU19FUlIoZ2RldikpXG4tLVxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jPTUzPXN0YXRpYyBpbnQgdmJveHNmX2NhbGwodTMyIGZ1bmN0aW9uLCB2b2lkICpwYXJtcywgdTMyIHBhcm1fY291bnQsIGludCAqc3RhdHVzKVxuLS1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy01Ny1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYzo1ODpcdGdkZXYgPSB2YmdfZ2V0X2dkZXYoKTtcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy01OS1cdGlmIChJU19FUlIoZ2RldikpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzgzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqdmJveHNmIERyaXZlciBJbml0aWFsaXphdGlvbiBDb251bmRydW0qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhlIFZpcnR1YWxCb3ggc2hhcmVkIGZvbGRlciAodmJveHNmKSBkcml2ZXIgY29kZS4gVGhlIGtleSBxdWVzdGlvbiBJJiMzOTttIHRyeWluZyB0byBuYWlsIGRvd24gaXMgdGhlIGV4YWN0IHBvaW50IHdoZXJlIHRoZSBpbml0aWFsIGNvbm5lY3Rpb24gdG8gdGhlIHNoYXJlZCBmb2xkZXIgaW5mcmFzdHJ1Y3R1cmUgaXMgZXN0YWJsaXNoZWQuIEkga25vdyBgdmJveHNmX2Nvbm5lY3RgIGlzIGNyaXRpY2FsIGZvciB0aGF0LCBidXQgSSBuZWVkIHRvIHBpbnBvaW50ICp3aGVyZSogaXQmIzM5O3MgY2FsbGVkLiBNeSBpbml0aWFsIHRoaW5raW5nIGlzIHRoYXQgaXQmIzM5O3MgZWl0aGVyIGdvaW5nIHRvIGJlIGZyb20gYHZib3hzZl9pbml0YCwgd2hpY2ggaGFuZGxlcyB0aGUgaW5pdGlhbCBtb2R1bGUgbG9hZGluZyBhbmQgc2V0dXAsIG9yIHBlcmhhcHMgZnJvbSBgdmJveHNmX2ZpbGxfc3VwZXJgLCB3aGljaCB3b3VsZCBiZSB0aGUgbW9yZSBsaWtlbHkgbG9jYXRpb24gd2hlbiBhIGZpbGVzeXN0ZW0gaXMgYmVpbmcgbW91bnRlZC4gSSBuZWVkIHRvIGNvbmZpcm0gd2hlcmUgdGhlIGRyaXZlciBnZXRzIHRoZSBjb25uZWN0aW9uIHN0YXJ0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zib3hzZl9jb25uZWN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvdmJveHNmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy92Ym94c2Yvc3VwZXIuYz0zMjM9c3RhdGljIGludCB2Ym94c2Zfc2V0dXAodm9pZClcbi0tXG5mcy92Ym94c2Yvc3VwZXIuYy0zNDEtXG5mcy92Ym94c2Yvc3VwZXIuYzozNDI6XHRlcnIgPSB2Ym94c2ZfY29ubmVjdCgpO1xuZnMvdmJveHNmL3N1cGVyLmMtMzQzLVx0aWYgKGVycikge1xuLS1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYz0xOD1zdGF0aWMgdTMyIHZib3hzZl9jbGllbnRfaWQ7XG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMTktXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM6MjA6aW50IHZib3hzZl9jb25uZWN0KHZvaWQpXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMjEte1xuLS1cbmZzL3Zib3hzZi92ZnNtb2QuaD0xMTE9aW50IHZib3hzZl9kaXJfcmVhZF9hbGwoc3RydWN0IHZib3hzZl9zYmkgKnNiaSwgc3RydWN0IHZib3hzZl9kaXJfaW5mbyAqc2ZfZCxcbi0tXG5mcy92Ym94c2YvdmZzbW9kLmgtMTE0LS8qIGZyb20gdmJveHNmX3dyYXBwZXJzLmMgKi9cbmZzL3Zib3hzZi92ZnNtb2QuaDoxMTU6aW50IHZib3hzZl9jb25uZWN0KHZvaWQpO1xuZnMvdmJveHNmL3Zmc21vZC5oLTExNi12b2lkIHZib3hzZl9kaXNjb25uZWN0KHZvaWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTMzMAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBWaXJ0dWFsQm94IFNoYXJlZCBGb2xkZXIgU2V0dXAqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8gemVybyBpbiBvbiB0aGUgYHZib3hzZl9zZXR1cGAgZnVuY3Rpb24gd2l0aGluIGBmcy92Ym94c2Yvc3VwZXIuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljICpyZWFsbHkqIGhhcHBlbnMgaW4gVmlydHVhbEJveCBzaGFyZWQgZm9sZGVycywgc3BlY2lmaWNhbGx5IHRoZSBjcml0aWNhbCBpbml0aWFsaXphdGlvbiBvZiB0aGUgZmlsZXN5c3RlbS4gSXQmIzM5O3MgdGhlIGx5bmNocGluIGZvciBtb3VudGluZyBhbmQgbWFuYWdpbmcgdGhvc2Ugc2hhcmVkIGRpcmVjdG9yaWVzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgU3VwZXIgQmxvY2sgaXMgcG9wdWxhdGVkIGFuZCB0aGUgY29yZSBjb21wb25lbnRzIGFyZSBpbml0aWFsaXplZCBzbyBJIGNhbiBmaWd1cmUgb3V0IHdoYXQgaXMgYnJva2VuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL3Zib3hzZi9zdXBlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzIzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMjM6XHRzdGF0aWMgaW50IHZib3hzZl9zZXR1cCh2b2lkKVxuIDMyNDpcdHtcbiAzMjU6XHRcdGludCBlcnI7XG4gMzI2Olx0XG4gMzI3Olx0XHRtdXRleF9sb2NrKFx1MDAyNnZib3hzZl9zZXR1cF9tdXRleCk7XG4gMzI4Olx0XG4gMzI5Olx0XHRpZiAodmJveHNmX3NldHVwX2RvbmUpXG4gMzMwOlx0XHRcdGdvdG8gc3VjY2VzcztcbiAzMzE6XHRcbiAzMzI6XHRcdHZib3hzZl9pbm9kZV9jYWNoZXAgPVxuIDMzMzpcdFx0XHRrbWVtX2NhY2hlX2NyZWF0ZShcJiMzNDt2Ym94c2ZfaW5vZGVfY2FjaGVcJiMzNDssXG4gMzM0Olx0XHRcdFx0XHQgIHNpemVvZihzdHJ1Y3QgdmJveHNmX2lub2RlKSwgMCxcbiAzMzU6XHRcdFx0XHRcdCAgU0xBQl9SRUNMQUlNX0FDQ09VTlQgfCBTTEFCX0FDQ09VTlQsXG4gMzM2Olx0XHRcdFx0XHQgIHZib3hzZl9pbm9kZV9pbml0X29uY2UpO1xuIDMzNzpcdFx0aWYgKCF2Ym94c2ZfaW5vZGVfY2FjaGVwKSB7XG4gMzM4Olx0XHRcdGVyciA9IC1FTk9NRU07XG4gMzM5Olx0XHRcdGdvdG8gZmFpbF9ub21lbTtcbiAzNDA6XHRcdH1cbiAzNDE6XHRcbiAzNDI6XHRcdGVyciA9IHZib3hzZl9jb25uZWN0KCk7XG4gMzQzOlx0XHRpZiAoZXJyKSB7XG4gMzQ0Olx0XHRcdHZiZ19lcnIoXCYjMzQ7dmJveHNmOiBlcnIgJWQgY29ubmVjdGluZyB0byBndWVzdCBQQ0ktZGV2aWNlXFxuXCYjMzQ7LCBlcnIpO1xuIDM0NTpcdFx0XHR2YmdfZXJyKFwmIzM0O3Zib3hzZjogbWFrZSBzdXJlIHlvdSBhcmUgaW5zaWRlIGEgVmlydHVhbEJveCBWTVxcblwmIzM0Oyk7XG4gMzQ2Olx0XHRcdHZiZ19lcnIoXCYjMzQ7dmJveHNmOiBhbmQgY2hlY2sgZG1lc2cgZm9yIHZib3hndWVzdCBlcnJvcnNcXG5cJiMzNDspO1xuIDM0NzpcdFx0XHRnb3RvIGZhaWxfZnJlZV9jYWNoZTtcbiAzNDg6XHRcdH1cbiAzNDk6XHRcbiAzNTA6XHRcdGVyciA9IHZib3hzZl9zZXRfdXRmOCgpO1xuIDM1MTpcdFx0aWYgKGVycikge1xuIDM1MjpcdFx0XHR2YmdfZXJyKFwmIzM0O3Zib3hzZl9zZXR1dGY4IGVycm9yICVkXFxuXCYjMzQ7LCBlcnIpO1xuIDM1MzpcdFx0XHRnb3RvIGZhaWxfZGlzY29ubmVjdDtcbiAzNTQ6XHRcdH1cbiAzNTU6XHRcbiAzNTY6XHRcdGlmICghZm9sbG93X3N5bWxpbmtzKSB7XG4gMzU3Olx0XHRcdGVyciA9IHZib3hzZl9zZXRfc3ltbGlua3MoKTtcbiAzNTg6XHRcdFx0aWYgKGVycilcbiAzNTk6XHRcdFx0XHR2Ymdfd2FybihcJiMzNDt2Ym94c2Y6IFVuYWJsZSB0byBzaG93IHN5bWxpbmtzOiAlZFxcblwmIzM0OywgZXJyKTtcbiAzNjA6XHRcdH1cbiAzNjE6XHRcbiAzNjI6XHRcdHZib3hzZl9zZXR1cF9kb25lID0gdHJ1ZTtcbiAzNjM6XHRzdWNjZXNzOlxuIDM2NDpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZib3hzZl9zZXR1cF9tdXRleCk7XG4gMzY1Olx0XHRyZXR1cm4gMDtcbiAzNjY6XHRcbiAzNjc6XHRmYWlsX2Rpc2Nvbm5lY3Q6XG4gMzY4Olx0XHR2Ym94c2ZfZGlzY29ubmVjdCgpO1xuIDM2OTpcdGZhaWxfZnJlZV9jYWNoZTpcbiAzNzA6XHRcdGttZW1fY2FjaGVfZGVzdHJveSh2Ym94c2ZfaW5vZGVfY2FjaGVwKTtcbiAzNzE6XHRmYWlsX25vbWVtOlxuIDM3MjpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZib3hzZl9zZXR1cF9tdXRleCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjYwCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEludmVzdGlnYXRpb24gaW50byBWaXJ0dWFsQm94IEd1ZXN0IEZpbGUgU3lzdGVtIE1vdW50cyoqCgpPa2F5LCBzbyBgdmJveHNmX3NldHVwYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBkdXJpbmcgYSBtb3VudCBvcGVyYXRpb24uIE1ha2VzIHNlbnNlLiBBbmQgaWYgYHZib3hzZl9jb25uZWN0KClgIGZhaWxzLCB0aGUgd2hvbGUgbW91bnQgZmFpbHMuIEFscmlnaHQsIGZvbGxvd2luZyB0aGUgYnJlYWRjcnVtYnMsIGB2Ym94c2ZfY29ubmVjdCgpYCBjYWxscyBgdmJnX2dldF9nZGV2KClgLCB3aGljaCBnaXZlcyBtZSBhbiBgLUVOT0RFVmAgaWYgdGhlIFZpcnR1YWxCb3ggUENJIGRldmljZSBpc24mIzM5O3QgYXJvdW5kLiBTbywgYmFzaWNhbGx5LCBJIGNhbiYjMzk7dCBtb3VudCBgdmJveHNmYCBpbiBzb21ldGhpbmcgbGlrZSBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZSB1bmxlc3MgdGhhdCBWaXJ0dWFsQm94IFBDSSBkZXZpY2UgaXMgcGh5c2ljYWxseSAqcHJlc2VudCouIEhtbSwgaXMgaXQgZXZlbiAqcG9zc2libGUqIHRvIGluamVjdCB0aGUgVmlydHVhbEJveCBQQ0kgZGV2aWNlIGludG8gUUVNVT8gVGhhdCYjMzk7cyB0aGUgbWlsbGlvbi1kb2xsYXIgcXVlc3Rpb24uCgpXYWl0IGEgc2Vjb25k4oCmIHdhc24mIzM5O3QgdGhlcmUgYSBgc3l6a2FsbGVyYCBmdXp6ZXIgZm9yIGB2Ym94Z3Vlc3RgPyBMZXQmIzM5O3MgcXVpY2tseSBkb3VibGUtY2hlY2sgaWYgc3l6a2FsbGVyIGhhcyBhIGZ1enplciBkZWRpY2F0ZWQgdG8gYHZib3hndWVzdGAuIFllcywgc3l6a2FsbGVyICpjYW4qIGZ1enogYC9kZXYvdmJveGd1ZXN0YCAtIGlmIHRoZSBkZXZpY2UgZXhpc3RzLiBCdXQgb2YgY291cnNlLCBpbiBhIGJhcmUgUUVNVSBlbnZpcm9ubWVudCwgaXQgZG9lc24mIzM5O3QuIEhtbS4KCk9rYXksIGlzIHRoZXJlIGEgYHN5el9wY2lfYWRkYCBmdW5jdGlvbiBpbiBzeXprYWxsZXI/IEl0IGNvdWxkICpwb3RlbnRpYWxseSogYWRkIGEgUENJIGRldmljZSwgYnV0IG5vLCBzeXprYWxsZXIgZG9lc24mIzM5O3QgaGF2ZSBhIGJ1aWx0LWluIHNvZnR3YXJlIFBDSSBlbXVsYXRvciBpbiB0aGUga2VybmVsLiBPa2F5LCBzbyB0aGF0IGF2ZW51ZSBpcyBjbG9zZWQuCgpXYWl04oCmIHdoYXQgYWJvdXQgbGV2ZXJhZ2luZyBleGlzdGluZyBzeXprYWxsZXIgZmVhdHVyZXM/IFN5emthbGxlciB1c2VzIGB2aGNpYCBmb3IgVVNCLCBgbWFjODAyMTFfaHdzaW1gIGZvciB3aWZpLCBgdWlucHV0YCBmb3IgaW5wdXQsIGB2Z2VtYCBmb3IgZHJtLCBgdmttc2AgZm9yIGRybSwgYGxvb3BgIGZvciBibG9jaywgYHR1bmAgZm9yIG5ldOKApiBBcmUgdGhlcmUgYW55IHNpbWlsYXIgdHJpY2tzIGZvciBgdmJveGd1ZXN0YD8gSXMgdGhlcmUgYSBzb2Z0d2FyZSBlbXVsYXRpb24gb3B0aW9uIGZvciB0aGF0LCBzb21lIGtpbmQgb2YgdmlydHVhbCBkZXZpY2U/IEkgcmVhbGx5IG5lZWQgdG8gZ2V0IHRoaXMgdG8gd29yay4gSSBuZWVkIHRvIGZpbmQgYSB3YXkgdG8gbWFrZSB0aGUgZGV2aWNlICphcHBlYXIqLgoKUmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgc291cmNlLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIGZvY3VzZWQgc2VhcmNoIGZvciAmIzM0O3Zib3hndWVzdCYjMzQ7IGFuZCBzZWUgd2hhdCBpbnNpZ2h0cyBpdCB5aWVsZHMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUga2VybmVsIGtub3dzIGFib3V0IHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zib3hndWVzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmlydC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aXJ0L0tjb25maWc9MjY9Y29uZmlnIEZTTF9IVl9NQU5BR0VSXG4tLVxuZHJpdmVycy92aXJ0L0tjb25maWctNDMtXG5kcml2ZXJzL3ZpcnQvS2NvbmZpZzo0NDpzb3VyY2UgXCYjMzQ7ZHJpdmVycy92aXJ0L3Zib3hndWVzdC9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL3ZpcnQvS2NvbmZpZy00NS1cbi0tXG5kcml2ZXJzL3ZpcnQvTWFrZWZpbGU9Nz1vYmotJChDT05GSUdfVk1HRU5JRClcdFx0JiM0Mzs9IHZtZ2VuaWQub1xuZHJpdmVycy92aXJ0L01ha2VmaWxlOjg6b2JqLXlcdFx0XHRcdCYjNDM7PSB2Ym94Z3Vlc3QvXG5kcml2ZXJzL3ZpcnQvTWFrZWZpbGUtOS1cbi0tXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L0tjb25maWc9Mj1jb25maWcgVkJPWEdVRVNUXG4tLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC9LY29uZmlnLTExLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC9LY29uZmlnOjEyOlx0ICBUaGlzIGRyaXZlciBhbHNvIG9mZmVycyB2Ym94Z3Vlc3QgSVBDIGZ1bmN0aW9uYWxpdHkgd2hpY2ggaXMgbmVlZGVkXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L0tjb25maWctMTMtXHQgIGZvciB0aGUgdmJveGZzIGRyaXZlciB3aGljaCBvZmZlcnMgZm9sZGVyIHNoYXJpbmcgc3VwcG9ydC5cbi0tXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L01ha2VmaWxlOjI6dmJveGd1ZXN0LXkgOj0gdmJveGd1ZXN0X2xpbnV4Lm8gdmJveGd1ZXN0X2NvcmUubyB2Ym94Z3Vlc3RfdXRpbHMub1xuZHJpdmVycy92aXJ0L3Zib3hndWVzdC9NYWtlZmlsZS0zLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19WQk9YR1VFU1QpICYjNDM7PSB2Ym94Z3Vlc3Qub1xuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy0yLS8qXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmM6MzogKiB2Ym94Z3Vlc3QgY29yZSBndWVzdC1kZXZpY2UgaGFuZGxpbmcgY29kZSwgVkJveEd1ZXN0LmNwcCBpbiB1cHN0cmVhbSBzdm4uXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmMtNC0gKlxuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy0xNi0jaW5jbHVkZSBcdTAwM2NsaW51eC92bWFsbG9jLmhcdTAwM2VcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYzoxNzojaW5jbHVkZSBcJiMzNDt2Ym94Z3Vlc3RfY29yZS5oXCYjMzQ7XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmM6MTg6I2luY2x1ZGUgXCYjMzQ7dmJveGd1ZXN0X3ZlcnNpb24uaFwmIzM0O1xuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jLTE5LVxuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYz04OTU9c3RhdGljIGludCB2YmdfcXVlcnlfaG9zdF92ZXJzaW9uKHN0cnVjdCB2YmdfZGV2ICpnZGV2KVxuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy05MTUtXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmM6OTE2Olx0dmJnX2luZm8oXCYjMzQ7dmJveGd1ZXN0OiBob3N0LXZlcnNpb246ICVzICUjeFxcblwmIzM0OywgZ2Rldi1cdTAwM2Vob3N0X3ZlcnNpb24sXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmMtOTE3LVx0XHQgZ2Rldi1cdTAwM2Vob3N0X2ZlYXR1cmVzKTtcbi0tXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmMtOTE5LVx0aWYgKCEocmVxLVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBWTU1ERVZfSFZGX0hHQ01fUEhZU19QQUdFX0xJU1QpKSB7XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmM6OTIwOlx0XHR2YmdfZXJyKFwmIzM0O3Zib3hndWVzdDogRXJyb3IgaG9zdCB0b28gb2xkIChkb2VzIG5vdCBzdXBwb3J0IHBhZ2UtbGlzdHMpXFxuXCYjMzQ7KTtcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy05MjEtXHRcdHJldCA9IC1FTk9ERVY7XG4tLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jPTk0Mz1pbnQgdmJnX2NvcmVfaW5pdChzdHJ1Y3QgdmJnX2RldiAqZ2RldiwgdTMyIGZpeGVkX2V2ZW50cylcbi0tXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmMtOTkwLVx0aWYgKHJldCkge1xuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jOjk5MTpcdFx0dmJnX2VycihcJiMzNDt2Ym94Z3Vlc3Q6IHZiZ19yZXBvcnRfZ3Vlc3RfaW5mbyBlcnJvcjogJWRcXG5cJiMzNDssIHJldCk7XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmMtOTkyLVx0XHRnb3RvIGVycl9mcmVlX3JlcXM7XG4tLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jLTk5Ni1cdGlmIChyZXQpIHtcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYzo5OTc6XHRcdHZiZ19lcnIoXCYjMzQ7dmJveGd1ZXN0OiBFcnJvciBzZXR0aW5nIGZpeGVkIGV2ZW50IGZpbHRlcjogJWRcXG5cJiMzNDssXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmMtOTk4LVx0XHRcdHJldCk7XG4tLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jLTEwMDMtXHRpZiAocmV0KSB7XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmM6MTAwNDpcdFx0dmJnX2VycihcJiMzNDt2Ym94Z3Vlc3Q6IEVycm9yIGNsZWFyaW5nIGd1ZXN0IGNhcGFiaWxpdGllczogJWRcXG5cJiMzNDssXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmMtMTAwNS1cdFx0XHRyZXQpO1xuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy0xMDEwLVx0aWYgKHJldCkge1xuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jOjEwMTE6XHRcdHZiZ19lcnIoXCYjMzQ7dmJveGd1ZXN0OiBFcnJvciBjbGVhcmluZyBtb3VzZSBzdGF0dXM6ICVkXFxuXCYjMzQ7LCByZXQpO1xuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jLTEwMTItXHRcdGdvdG8gZXJyX2ZyZWVfcmVxcztcbi0tXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmMtMTAyMS1cdGlmIChyZXQgXHUwMDNjIDApXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmM6MTAyMjpcdFx0dmJnX2VycihcJiMzNDt2Ym94Z3Vlc3Q6IEVycm9yIHJlcG9ydGluZyBkcml2ZXIgc3RhdHVzOiAlZFxcblwmIzM0OywgcmV0KTtcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy0xMDIzLVxuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy0xMDQwLS8qKlxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jOjEwNDE6ICogdmJnX2NvcmVfZXhpdCAtIENhbGwgdGhpcyBvbiBleGl0IHRvIGNsZWFuLXVwIHZib3hndWVzdC1jb3JlIG1hbmFnZWRcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy0xMDQyLSAqXHRyZXNvdXJjZXMuXG4tLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jPTEwNDg9dm9pZCB2YmdfY29yZV9leGl0KHN0cnVjdCB2YmdfZGV2ICpnZGV2KVxuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy0xMDc0LSAqXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmM6MTA3NTogKiB2Ym94Z3Vlc3RfbGludXguYyBjYWxscyB0aGlzIHdoZW4gdXNlcnNwYWNlIG9wZW5zIHRoZSBjaGFyLWRldmljZS5cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy0xMDc2LSAqXG4tLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5oLTE0LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmg6MTU6I2luY2x1ZGUgXHUwMDNjbGludXgvdmJveGd1ZXN0LmhcdTAwM2VcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuaC0xNi0jaW5jbHVkZSBcJiMzNDt2bW1kZXYuaFwmIzM0O1xuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuaC0xOC0vKlxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5oOjE5OiAqIFRoZSBtYWlubGluZSBrZXJuZWwgdmVyc2lvbiAodGhpcyB2ZXJzaW9uKSBvZiB0aGUgdmJveGd1ZXN0IG1vZHVsZVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5oLTIwLSAqIGNvbnRhaW5lZCBhIGJ1ZyB3aGVyZSBpdCBkZWZpbmVkIFZCR0xfSU9DVExfVk1NREVWX1JFUVVFU1RfQklHIGFuZFxuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuaD02Nz1zdHJ1Y3QgdmJnX2RldiB7XG4tLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5oLTE1Mi1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuaDoxNTM6XHQvKiogXCYjMzQ7dmJveGd1ZXN0XCYjMzQ7IGNoYXItZGV2aWNlICovXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmgtMTU0LVx0c3RydWN0IG1pc2NkZXZpY2UgbWlzY19kZXZpY2U7XG4tLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5oPTIwMj12b2lkIHZiZ19saW51eF9tb3VzZV9ldmVudChzdHJ1Y3QgdmJnX2RldiAqZ2Rldik7XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmgtMjAzLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5oOjIwNDovKiBQcml2YXRlIChub24gZXhwb3J0ZWQpIGZ1bmN0aW9ucyBmb3JtIHZib3hndWVzdF91dGlscy5jICovXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmgtMjA1LXZvaWQgKnZiZ19yZXFfYWxsb2Moc2l6ZV90IGxlbiwgZW51bSB2bW1kZXZfcmVxdWVzdF90eXBlIHJlcV90eXBlLFxuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtMi0vKlxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzozOiAqIHZib3hndWVzdCBsaW51eCBwY2kgZHJpdmVyLCBjaGFyLWRldiBhbmQgaW5wdXQtZGV2aWNlIGNvZGUsXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTQtICpcbi0tXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTE1LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3Zib3hfdXRpbHMuaFx1MDAzZVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzoxNjojaW5jbHVkZSBcJiMzNDt2Ym94Z3Vlc3RfY29yZS5oXCYjMzQ7XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTE3LVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy0xOC0vKiogVGhlIGRldmljZSBuYW1lLiAqL1xuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzoxOTojZGVmaW5lIERFVklDRV9OQU1FXHRcdFwmIzM0O3Zib3hndWVzdFwmIzM0O1xuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy0yMC0vKiogVGhlIGRldmljZSBuYW1lIGZvciB0aGUgZGV2aWNlIG5vZGUgb3BlbiB0byBldmVyeW9uZS4gKi9cbi0tXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jPTI4Nz1zdGF0aWMgaW50IHZiZ19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtMzAwLVx0aWYgKHJldCAhPSAwKSB7XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jOjMwMTpcdFx0dmJnX2VycihcJiMzNDt2Ym94Z3Vlc3Q6IEVycm9yIGVuYWJsaW5nIGRldmljZTogJWRcXG5cJiMzNDssIHJldCk7XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTMwMi1cdFx0cmV0dXJuIHJldDtcbi0tXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTMwOS1cdGlmICghaW8gfHwgIWlvX2xlbikge1xuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzozMTA6XHRcdHZiZ19lcnIoXCYjMzQ7dmJveGd1ZXN0OiBFcnJvciBJTy1wb3J0IHJlc291cmNlICgwKSBpcyBtaXNzaW5nXFxuXCYjMzQ7KTtcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtMzExLVx0XHRnb3RvIGVycl9kaXNhYmxlX3BjaWRldjtcbi0tXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTMxMy1cdGlmIChkZXZtX3JlcXVlc3RfcmVnaW9uKGRldiwgaW8sIGlvX2xlbiwgREVWSUNFX05BTUUpID09IE5VTEwpIHtcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmM6MzE0Olx0XHR2YmdfZXJyKFwmIzM0O3Zib3hndWVzdDogRXJyb3IgY291bGQgbm90IGNsYWltIElPIHJlc291cmNlXFxuXCYjMzQ7KTtcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtMzE1LVx0XHRyZXQgPSAtRUJVU1k7XG4tLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy0zMjEtXHRpZiAoIW1taW8gfHwgIW1taW9fbGVuKSB7XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jOjMyMjpcdFx0dmJnX2VycihcJiMzNDt2Ym94Z3Vlc3Q6IEVycm9yIE1NSU8gcmVzb3VyY2UgKDEpIGlzIG1pc3NpbmdcXG5cJiMzNDspO1xuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy0zMjMtXHRcdGdvdG8gZXJyX2Rpc2FibGVfcGNpZGV2O1xuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtMzI2LVx0aWYgKGRldm1fcmVxdWVzdF9tZW1fcmVnaW9uKGRldiwgbW1pbywgbW1pb19sZW4sIERFVklDRV9OQU1FKSA9PSBOVUxMKSB7XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jOjMyNzpcdFx0dmJnX2VycihcJiMzNDt2Ym94Z3Vlc3Q6IEVycm9yIGNvdWxkIG5vdCBjbGFpbSBNTUlPIHJlc291cmNlXFxuXCYjMzQ7KTtcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtMzI4LVx0XHRyZXQgPSAtRUJVU1k7XG4tLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy0zMzMtXHRpZiAoIXZtbWRldikge1xuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzozMzQ6XHRcdHZiZ19lcnIoXCYjMzQ7dmJveGd1ZXN0OiBFcnJvciBpb3JlbWFwIGZhaWxlZDsgTU1JTyBhZGRyPSVwYXAgc2l6ZT0lcGFwXFxuXCYjMzQ7LFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy0zMzUtXHRcdFx0XHUwMDI2bW1pbywgXHUwMDI2bW1pb19sZW4pO1xuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtMzQxLVx0ICAgIHZtbWRldi1cdTAwM2VzaXplIFx1MDAzYyAzMiB8fCB2bW1kZXYtXHUwMDNlc2l6ZSBcdTAwM2UgbW1pb19sZW4pIHtcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmM6MzQyOlx0XHR2YmdfZXJyKFwmIzM0O3Zib3hndWVzdDogQm9ndXMgVk1NRGV2IG1lbW9yeTsgdmVyc2lvbj0lMDh4IChleHBlY3RlZCAlMDh4KSBzaXplPSVkIChleHBlY3RlZCBcdTAwM2M9ICVkKVxcblwmIzM0OyxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtMzQzLVx0XHRcdHZtbWRldi1cdTAwM2V2ZXJzaW9uLCBWTU1ERVZfTUVNT1JZX1ZFUlNJT04sXG4tLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy0zNjMtXHRpZiAocmV0KSB7XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jOjM2NDpcdFx0dmJnX2VycihcJiMzNDt2Ym94Z3Vlc3Q6IEVycm9yIGNyZWF0aW5nIGlucHV0IGRldmljZTogJWRcXG5cJiMzNDssIHJldCk7XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTM2NS1cdFx0Z290byBlcnJfdmJnX2NvcmVfZXhpdDtcbi0tXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTM3MC1cdGlmIChyZXQpIHtcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmM6MzcxOlx0XHR2YmdfZXJyKFwmIzM0O3Zib3hndWVzdDogRXJyb3IgcmVxdWVzdGluZyBpcnE6ICVkXFxuXCYjMzQ7LCByZXQpO1xuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy0zNzItXHRcdGdvdG8gZXJyX3ZiZ19jb3JlX2V4aXQ7XG4tLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy0zNzYtXHRpZiAocmV0KSB7XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jOjM3NzpcdFx0dmJnX2VycihcJiMzNDt2Ym94Z3Vlc3Q6IEVycm9yIG1pc2NfcmVnaXN0ZXIgJXMgZmFpbGVkOiAlZFxcblwmIzM0OyxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtMzc4LVx0XHRcdERFVklDRV9OQU1FLCByZXQpO1xuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtMzgzLVx0aWYgKHJldCkge1xuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzozODQ6XHRcdHZiZ19lcnIoXCYjMzQ7dmJveGd1ZXN0OiBFcnJvciBtaXNjX3JlZ2lzdGVyICVzIGZhaWxlZDogJWRcXG5cJiMzNDssXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTM4NS1cdFx0XHRERVZJQ0VfTkFNRV9VU0VSLCByZXQpO1xuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtMzk2LVx0aWYgKHJldCkge1xuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzozOTc6XHRcdHZiZ19lcnIoXCYjMzQ7dmJveGd1ZXN0OiBFcnJvciBtb3JlIHRoZW4gMSB2Ym94IGd1ZXN0IHBjaSBkZXZpY2VcXG5cJiMzNDspO1xuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy0zOTgtXHRcdGdvdG8gZXJyX3VucmVnaXN0ZXJfbWlzY19kZXZpY2VfdXNlcjtcbi0tXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF91dGlscy5jLTItLypcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X3V0aWxzLmM6MzogKiB2Ym94Z3Vlc3Qgdm1tLXJlcSBhbmQgaGdjbS1jYWxsIGNvZGUsIFZCb3hHdWVzdFIwTGliSEdDTUludGVybmFsLmNwcCxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X3V0aWxzLmMtNC0gKiBWQm94R3Vlc3RSMExpYkdlbmVyaWNSZXF1ZXN0LmNwcCBhbmQgUlRFcnJDb252ZXJ0VG9FcnJuby5jcHAgaW4gdmJveCBzdm4uXG4tLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfdXRpbHMuYy0xOS0jaW5jbHVkZSBcdTAwM2NsaW51eC92Ym94X3V0aWxzLmhcdTAwM2VcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X3V0aWxzLmM6MjA6I2luY2x1ZGUgXCYjMzQ7dmJveGd1ZXN0X2NvcmUuaFwmIzM0O1xuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfdXRpbHMuYy0yMS1cbi0tXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF92ZXJzaW9uLmgtNS0gKiBzeW5jZWQgd2l0aCB2Ym94IHVwc3RyZWFtcyB2ZXJzaW9uaW5nIHNjaGVtZSB3aGVuIHdlIGltcGxlbWVudCAvIHBvcnRcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X3ZlcnNpb24uaDo2OiAqIG5ldyBmZWF0dXJlcyBmcm9tIHRoZSB1cHN0cmVhbSBvdXQtb2YtdHJlZSB2Ym94Z3Vlc3QgZHJpdmVyLlxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfdmVyc2lvbi5oLTctICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTkzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIGB2Ym94c2ZfZGlyX2VtaXRgIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCBpcyB3b3J0aCBmdXp6aW5nLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYHZib3hzZl9kaXJfZW1pdGAuIFRoZSBmaXJzdCB0aGluZyB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzLCBjYW4gc3l6a2FsbGVyIGV2ZW4gcmVhY2ggdGhpcyBjb2RlIHBhdGg/IE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gYXNzdW1lIHRoYXQgc3l6a2FsbGVyICpjYW4mIzM5O3QqIGRpcmVjdGx5IGZ1enogYHZib3hndWVzdGAgdXNpbmcgc29tZXRoaW5nIGxpa2UgYHN5el9wY2lfYWRkYCwgYmVjYXVzZSBzeXprYWxsZXImIzM5O3Mgbm90IHNldCB1cCBmb3IgYXJiaXRyYXJ5IFBDSSBkZXZpY2UgZnV6emluZy4gQWxzbywgSSBkb24mIzM5O3QgdGhpbmsgdGhlcmUmIzM5O3MgYSBzcGVjaWZpYyBgc3l6X3Zib3hndWVzdGAgY2FsbC4KCkJ1dCB3YWl0LCBzeXprYWxsZXIgKmRpZCogZmluZCB0aGUgYnVnISBUaGF0JiMzOTtzIHRoZSBjcnVjaWFsIHBvaW50LiBPa2F5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqaG93Ki4gSWRlYWxseSwgSSYjMzk7ZCBjaGVjayB0aGUgc3l6a2FsbGVyIGNvbW1pdCBtZXNzYWdlIG9yIHRoZSBkYXNoYm9hcmQgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSBtZW50aW9uIG9mIGB2Ym94c2ZfZGlyX2VtaXRgLiBTaG9vdCwgSSBkb24mIzM5O3QgaGF2ZSBpbnRlcm5ldCBhY2Nlc3MsIHNvIEkmIzM5O20gbGltaXRlZCB0byB1c2luZyBqdXN0IHRoZSB0b29scyBhdmFpbGFibGUuCgpJZiBzeXprYWxsZXIgZm91bmQgaXQsIHRoZW4gaXQgKm11c3QqIGJlIHJlYWNoYWJsZSBzb21laG93LiBUaGlzIGZvcmNlcyBtZSB0byB0aGluay4gQWghIFN5emthbGxlciBzdXBwb3J0cyBWaXJ0dWFsQm94IGFzIGEgVk0gYmFja2VuZCwgcmlnaHQ/IFRoZSBgdm1fdHlwZTogJiMzNDt2Ym94JiMzNDtgIG9wdGlvbi4gSWYgc3l6a2FsbGVyIGlzIHJ1bm5pbmcgaW4gVmlydHVhbEJveCwgdGhlbiB0aGUgYHZib3hzZmAgZmlsZXN5c3RlbSAqaXMqIHJlYWNoYWJsZSwgYW5kIHRoYXQgbWVhbnMgd2UgKmNvdWxkKiBmdXp6IGl0IQoKTm93LCB0aGUgaW5zdHJ1Y3Rpb25zLi4uICYjMzQ7UmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucy4uLiBjb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUmIzM0Oy4gU28sIGlmIGl0JiMzOTtzIG5vdCByZWFjaGFibGUgaW4gR0NFIG9yIFFFTVUsIHRoZW4gaXQmIzM5O3MgYmFkLiBCdXQsIHRoZSBwcm9tcHQgKnNwZWNpZmljYWxseSogY2FsbHMgb3V0ICYjMzQ7dmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuJiMzNDsgVmlydHVhbEJveCAqaXMqIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIEl0JiMzOTtzIGEgaHlwZXJ2aXNvci4KCkJ1dC4uLiBoZXJlJiMzOTtzIHRoZSBraWNrZXIuIFN5emthbGxlciAqdHlwaWNhbGx5KiBydW5zIG9uIEdDRSBvciBRRU1VLiBJZiBpdCByZXF1aXJlcyBWaXJ0dWFsQm94LCBkb2VzIHRoYXQgbWFrZSBpdCB1bnJlYWNoYWJsZSBpbiBhICpzdGFuZGFyZCogc3l6a2FsbGVyIHNldHVwPyBQcm9iYWJseS4gVGhpcyBpcyB3aGVyZSB0aGUgdW5jZXJ0YWludHkgbGllcy4gVGhlIGZhY3QgdGhhdCBzeXprYWxsZXIgKmRpZCogZmluZCBpdCBpcyBjcml0aWNhbCwgYWdhaW4sICpob3cqPwoKTWF5YmUgYHZib3hzZmAgKmNhbiogYmUgbW91bnRlZCB3aXRob3V0IHRoZSBQQ0kgZGV2aWNlPyBPa2F5LCBsZXQgbWUgZ28gYmFjayB0byB0aGUgYHZib3hzZl9maWxsX3N1cGVyYCBjb2RlLiBJZiBgdmJveHNmX2Nvbm5lY3QoKWAgZmFpbHMsIGl0IHJldHVybnMgYW4gZXJyb3IuIGB2Ym94c2ZfY29ubmVjdCgpYCBjYWxscyBgdmJnX2dldF9nZGV2KClgLiBUaGUga2V5IHF1ZXN0aW9uIGlzLCBpcyB0aGVyZSAqYW55KiB3YXkgYHZiZ19nZXRfZ2RldigpYCBjYW4gcmV0dXJuIGEgdmFsaWQgcG9pbnRlciB3aXRob3V0IGEgUENJIGRldmljZT8gTGV0JiMzOTtzIHRyYWNlIHRoYXQgYHZiZ19nZGV2YCBjb2RlLiBJJiMzOTtsbCBmb2N1cyBvbiB3aGV0aGVyIHRoZSBoeXBlcnZpc29yIGNhbiBiZSByZWFjaGVkIGluIGEgd2F5IHRoYXQgZG9lc24mIzM5O3QgaW52b2x2ZSB0aGUgUENJIGRldmljZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmJnX2dkZXYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3ZpcnQvdmJveGd1ZXN0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmg9MTYwPXN0cnVjdCB2Ymdfc2Vzc2lvbiB7XG4tLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5oLTE2Ni1cdCAqIFRoZXNlIHdpbGwgYmUgYXV0b21hdGljYWxseSBkaXNjb25uZWN0ZWQgd2hlbiB0aGUgc2Vzc2lvbiBpcyBjbG9zZWQuXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmg6MTY3Olx0ICogUHJvdGVjdGVkIGJ5IHZiZ19nZGV2LnNlc3Npb25fbXV0ZXguXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmgtMTY4LVx0ICovXG4tLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5oLTE3Mi1cdCAqIEFuIGV2ZW50IHR5cGUgcmVxdWVzdGVkIGluIGFueSBndWVzdCBzZXNzaW9uIHdpbGwgYmUgYWRkZWQgdG8gdGhlXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmg6MTczOlx0ICogaG9zdCBmaWx0ZXIuIFByb3RlY3RlZCBieSB2YmdfZ2Rldi5zZXNzaW9uX211dGV4LlxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5oLTE3NC1cdCAqL1xuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuaC0xODMtXHQgKiBBIGNhcGFiaWxpdHkgY2xhaW1lZCBieSBhbnkgZ3Vlc3Qgc2Vzc2lvbiB3aWxsIGJlIHJlcG9ydGVkIHRvIHRoZVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5oOjE4NDpcdCAqIGhvc3QuIFByb3RlY3RlZCBieSB2YmdfZ2Rldi5zZXNzaW9uX211dGV4LlxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5oLTE4NS1cdCAqL1xuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtMjYtXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jOjI3Oi8qKiBNdXRleCBwcm90ZWN0aW5nIHRoZSBnbG9iYWwgdmJnX2dkZXYgcG9pbnRlciB1c2VkIGJ5IHZiZ19nZXQvcHV0X2dkZXYuICovXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jOjI4OnN0YXRpYyBERUZJTkVfTVVURVgodmJnX2dkZXZfbXV0ZXgpO1xuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzoyOTovKiogR2xvYmFsIHZiZ19nZGV2IHBvaW50ZXIgdXNlZCBieSB2YmdfZ2V0L3B1dF9nZGV2LiAqL1xuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzozMDpzdGF0aWMgc3RydWN0IHZiZ19kZXYgKnZiZ19nZGV2O1xuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy0zMS1cbi0tXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jPTI4Nz1zdGF0aWMgaW50IHZiZ19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtMzg4LVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzozODk6XHRtdXRleF9sb2NrKFx1MDAyNnZiZ19nZGV2X211dGV4KTtcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmM6MzkwOlx0aWYgKCF2YmdfZ2RldilcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmM6MzkxOlx0XHR2YmdfZ2RldiA9IGdkZXY7XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTM5Mi1cdGVsc2VcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtMzkzLVx0XHRyZXQgPSAtRUJVU1k7XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jOjM5NDpcdG11dGV4X3VubG9jayhcdTAwMjZ2YmdfZ2Rldl9tdXRleCk7XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTM5NS1cbi0tXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jPTQxOT1zdGF0aWMgdm9pZCB2YmdfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGNpKVxuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtNDIyLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzo0MjM6XHRtdXRleF9sb2NrKFx1MDAyNnZiZ19nZGV2X211dGV4KTtcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmM6NDI0Olx0dmJnX2dkZXYgPSBOVUxMO1xuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzo0MjU6XHRtdXRleF91bmxvY2soXHUwMDI2dmJnX2dkZXZfbXV0ZXgpO1xuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy00MjYtXG4tLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYz00MzQ9c3RydWN0IHZiZ19kZXYgKnZiZ19nZXRfZ2Rldih2b2lkKVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy00MzUte1xuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzo0MzY6XHRtdXRleF9sb2NrKFx1MDAyNnZiZ19nZGV2X211dGV4KTtcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtNDM3LVxuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtNDQyLVx0ICovXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jOjQ0MzpcdGlmICh2YmdfZ2RldilcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmM6NDQ0Olx0XHRyZXR1cm4gdmJnX2dkZXY7XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTQ0NS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmM6NDQ2Olx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZiZ19nZGV2X211dGV4KTtcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtNDQ3LVx0cmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7XG4tLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYz00NTE9dm9pZCB2YmdfcHV0X2dkZXYoc3RydWN0IHZiZ19kZXYgKmdkZXYpXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTQ1Mi17XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jOjQ1MzpcdFdBUk5fT04oZ2RldiAhPSB2YmdfZ2Rldik7XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jOjQ1NDpcdG11dGV4X3VubG9jayhcdTAwMjZ2YmdfZ2Rldl9tdXRleCk7XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTQ1NS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNTg4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIGEgVmlydHVhbEJveCBCdWcqKgoKT2theSwgc28gYHZiZ19nZGV2YCBpcyBvbmx5IHNldCB3aXRoaW4gYHZiZ19wY2lfcHJvYmVgLiBUaGF0JiMzOTtzIGEgcHJldHR5IGNsZWFyIGluZGljYXRvciB0aGF0IGl0JiMzOTtzIHN0cmljdGx5IHRpZWQgdG8gdGhlIFBDSSBkZXZpY2UuIElmIHN5emthbGxlciBmb3VuZCB0aGlzIGJ1ZywgdGhhdCBtZWFucyBvbmUgb2YgdHdvIHRoaW5nczogZWl0aGVyIHN5emthbGxlciB3YXMgcnVubmluZyBpbnNpZGUgVmlydHVhbEJveCAobWFraW5nIHRoZSBQQ0kgZGV2aWNlIGF2YWlsYWJsZSksIG9yIHN5emthbGxlciBoYXMgc29tZSBjbGV2ZXIgdHJpY2sgZm9yIGluamVjdGluZyBQQ0kgZGV2aWNlcy4gSG1tLCB3YWl0IGEgbWludXRlLi4uIEkga25vdyBzeXprYWxsZXIgKmNhbiogaW5qZWN0IGRldmljZXMuIEkgdGhpbmsgdGhlcmUgaXMgYSBgc3l6X3BjaV9hZGRgIGZ1bmN0aW9uLCBhbmQgSSYjMzk7bSBndWVzc2luZyB0aGF0IHVzZXMgYHZmaW9gIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBObywgdGhhdCYjMzk7cyBub3QgcmlnaHQuIFN5emthbGxlciBkb2VzbiYjMzk7dCBoYXZlIGEgKmdlbmVyaWMqIFBDSSBlbXVsYXRvciByaWdodCBpbiB0aGUga2VybmVsLiBCdXQgaXQgKmNvdWxkKiBmdXp6IGB2Ym94Z3Vlc3RgIGlmIGl0IHJ1bnMgaW4gVmlydHVhbEJveC4KClJpZ2h0LCBiYWNrIHRvIHRoZSBwcm9tcHQuIEl0IHNheXMgSSBzaG91bGQgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBhZmZlY3RzIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBlbnZpcm9ubWVudHMgKmxpa2UqIEdDRSBvciBRRU1VLCBldmVuIHdpdGggc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJcyBWaXJ0dWFsQm94IGNvbnNpZGVyZWQgYSAmIzM0O3ZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgR0NFIG9yIFFFTVUmIzM0Oz8gWWVzLCBWaXJ0dWFsQm94ICppcyogYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gQnV0IGl0IHVzZXMgdGhlIHdvcmQgJiMzNDtsaWtlLiYjMzQ7IERvZXMgdGhhdCBtYXR0ZXI/IElmIHNvbWV0aGluZyBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIEdDRSBvciBRRU1VLCB0aGVuIEkgc2hvdWxkIHJldHVybiBmYWxzZS4KCk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IElzIHRoaXMgYnVnICppbXBvc3NpYmxlKiB0byByZWFjaCBpbiBHQ0Ugb3IgUUVNVT8gWWVzLCBpdCBpcyBiZWNhdXNlIG5laXRoZXIgR0NFIG5vciBRRU1VIGVtdWxhdGUgdGhlIFZpcnR1YWxCb3ggUENJIGRldmljZS4gU28sIHRoZSBidWcgaXMgdmVyeSBzcGVjaWZpYyB0byBWaXJ0dWFsQm94LgoKQnV0IHdhaXQsIHdoYXQgYWJvdXQgdGhlIHNjZW5hcmlvIHdoZXJlIHN5emthbGxlciB1c2VzIGBzeXpfbW91bnRfaW1hZ2VgLCBhbmQgdGhlIGJ1ZyBsaWVzIHdpdGhpbiB0aGUgcGFyc2luZyBvZiB0aGUgaW1hZ2U/IEhtbSwgZG9lcyB0aGF0IGFwcGx5IGhlcmU/IEJ1dCBubywgYHZib3hzZmAgaXMgbm90IGEgYmxvY2sgZmlsZXN5c3RlbS4gSXQmIzM5O3MgbmV0d29yay1saWtlLiBTbywgYW4gaW1hZ2UgaXMgbm90IGludm9sdmVkLgoKQWhhLCB0aGUgcGF0Y2ggaXMgaW4gYHZib3hzZl9kaXJfZW1pdGAuIE9rYXksIG9rYXkuIFRpbWUgdG8gZ28gYmFjayBhbmQgdGFrZSBhbm90aGVyIGxvb2sgYXQgYHZib3hzZl9kaXJfZW1pdGAgZGlyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvdmJveHNmL2Rpci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMjE6XHRcdFx0Zm9yIChpID0gMCwgaW5mbyA9IGItXHUwMDNlYnVmOyBpIFx1MDAzYyBjdHgtXHUwMDNlcG9zIC0gY3VyOyBpJiM0MzsmIzQzOykge1xuIDEyMjpcdFx0XHRcdGVuZCA9IFx1MDAyNmluZm8tXHUwMDNlbmFtZS5zdHJpbmcudXRmOFtpbmZvLVx1MDAzZW5hbWUuc2l6ZV07XG4gMTIzOlx0XHRcdFx0LyogT25seSBoYXBwZW5zIGlmIHRoZSBob3N0IGdpdmVzIHVzIGNvcnJ1cHQgZGF0YSAqL1xuIDEyNDpcdFx0XHRcdGlmIChXQVJOX09OKGVuZCBcdTAwM2UgKGItXHUwMDNlYnVmICYjNDM7IGItXHUwMDNldXNlZCkpKVxuIDEyNTpcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDEyNjpcdFx0XHRcdGluZm8gPSBlbmQ7XG4gMTI3Olx0XHRcdH1cbiAxMjg6XHRcbiAxMjk6XHRcdFx0ZW5kID0gXHUwMDI2aW5mby1cdTAwM2VuYW1lLnN0cmluZy51dGY4W2luZm8tXHUwMDNlbmFtZS5zaXplXTtcbiAxMzA6XHRcdFx0aWYgKFdBUk5fT04oZW5kIFx1MDAzZSAoYi1cdTAwM2VidWYgJiM0MzsgYi1cdTAwM2V1c2VkKSkpXG4gMTMxOlx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDEzMjpcdFx0XHRpZiAoaW5mby1cdTAwM2VuYW1lLmxlbmd0aCBcdTAwM2UgaW5mby1cdTAwM2VuYW1lLnNpemUpXG4gMTMzOlx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDEzNDpcdFxuIDEzNTpcdFx0XHQvKiBJbmZvIG5vdyBwb2ludHMgdG8gdGhlIHJpZ2h0IGVudHJ5LCBlbWl0IGl0LiAqL1xuIDEzNjpcdFx0XHRkX3R5cGUgPSB2Ym94c2ZfZ2V0X2RfdHlwZShpbmZvLVx1MDAzZWluZm8uYXR0ci5tb2RlKTtcbiAxMzc6XHRcbiAxMzg6XHRcdFx0LypcbiAxMzk6XHRcdFx0ICogT24gMzItYml0IHN5c3RlbXMgcG9zIGlzIDY0LWJpdCBzaWduZWQsIHdoaWxlIGlubyBpcyAzMi1iaXRcbiAxNDA6XHRcdFx0ICogdW5zaWduZWQgc28gZmFrZV9pbm8gbWF5IG92ZXJmbG93LCBjaGVjayBmb3IgdGhpcy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ4NTgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgQ29ycnVwdCBEYXRhIElzc3VlKioKCk9rYXksIHNvIHRoZSBjb21tZW50IHBvaW50cyB0aGUgZmluZ2VyIGF0IGNvcnJ1cHQgZGF0YSwgaW1wbHlpbmcgdGhlIHByb2JsZW0gb3JpZ2luYXRlcyBmcm9tIHRoZSBob3N0LCBzcGVjaWZpY2FsbHkgVmlydHVhbEJveC4gVGhhdCBtYWtlcyBzZW5zZTsgaWYgdGhlIGhvc3QgcHJvdmlkZXMgYmFkIGRhdGEsIHdlIGNvdWxkIGVhc2lseSBzZWUgb3V0LW9mLWJvdW5kcyByZWFkcyBvciBzb21lIG90aGVyIG5hc3R5IG1lbW9yeSBjb3JydXB0aW9uLiBCdXQgdGhlbiBJIGhhdmUgdG8gYXNrIG15c2VsZiwgaG93IHdvdWxkIHN5emthbGxlciwgcnVubmluZyBpbiB0aGUgZ3Vlc3QsIGJlIGFibGUgdG8gZXZlbiB0cmlnZ2VyIHRoaXMgc2NlbmFyaW8/IFN5emthbGxlciBpcyBjb25maW5lZCB0byB0aGUgZ3Vlc3Q7IGl0IGNhbiYjMzk7dCBkaXJlY3RseSBtYW5pcHVsYXRlIHRoZSBob3N0LiBVbmxlc3PigKYgY291bGQgc3l6a2FsbGVyIHNvbWVob3cgaW50ZXJjZXB0IHRoZSBIR0NNIGNhbGxzIGFuZCBmZWVkIGJhY2sgaXRzIG93biwgaW50ZW50aW9uYWxseSBjb3JydXB0IGRhdGE/CgpUaGlzIG1ha2VzIG1lIHRoaW5rLCBkb2VzIGB2Ym94Z3Vlc3RgIGhhdmUgYW55IGJ1aWx0LWluIGZlYXR1cmVzIGZvciBmYXVsdCBpbmplY3Rpb24gb3IgcGVyaGFwcyBzb21lIHNvcnQgb2YgZmFrZSBob3N0IG1vZGUgZGVzaWduZWQgZm9yIHRlc3Rpbmc/IEl0IHdvdWxkIG1ha2UgcGVyZmVjdCBzZW5zZSB0byBoYXZlIHNvbWV0aGluZyBsaWtlIHRoYXQuIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGB2Ym94Z3Vlc3RgIGNvZGUgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IGhvb2tzIG9yIGNhcGFiaWxpdGllcyB0byBzaW11bGF0ZSB0aGUgaG9zdCBhbmQgZ2VuZXJhdGUgc3BlY2lmaWMgZGF0YSBzY2VuYXJpb3MuIFRoYXQmIzM5O3MgdGhlIGtleTogZmluZGluZyBhIHdheSB0byBjb250cm9sIHRoZSBkYXRhIGZsb3cgZnJvbSB0aGUgaG9zdCwgZXZlbiBpbmRpcmVjdGx5LCBzbyB3ZSBjYW4gcmVsaWFibHkgcmVwcm9kdWNlIGFuZCBhbmFseXplIHRoaXMgJiMzNDtjb3JydXB0IGRhdGEmIzM0OyBjb25kaXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZhdWx0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aXJ0L3Zib3hndWVzdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jPTEyODQ9c3RhdGljIGludCB2YmdfcmVxX2FsbG93ZWQoc3RydWN0IHZiZ19kZXYgKmdkZXYsIHN0cnVjdCB2Ymdfc2Vzc2lvbiAqc2Vzc2lvbixcbi0tXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmMtMTM1MS1cdFx0Y2FzZSBWQk9YR1VFU1RfRkFDSUxJVFlfVFlQRV9HUkFQSElDUzpcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYzoxMzUyOlx0XHRkZWZhdWx0OlxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jLTEzNTMtXHRcdFx0dHJ1c3RlZF9hcHBzX29ubHkgPSBmYWxzZTtcbi0tXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmMtMTM1OC1cdC8qIEFueXRoaW5nIGVsc2UgaXMgbm90IGFsbG93ZWQuICovXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmM6MTM1OTpcdGRlZmF1bHQ6XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmMtMTM2MC1cdFx0dmJnX2VycihcJiMzNDtEZW55aW5nIHVzZXJzcGFjZSB2bW0gY2FsbCB0eXBlICUjMDh4XFxuXCYjMzQ7LFxuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYz0xNDc4PXN0YXRpYyBib29sIHZiZ19wYXJhbV92YWxpZChlbnVtIHZtbWRldl9oZ2NtX2Z1bmN0aW9uX3BhcmFtZXRlcl90eXBlIHR5cGUpXG4tLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jLTE0ODYtXHRcdHJldHVybiB0cnVlO1xuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jOjE0ODc6XHRkZWZhdWx0OlxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jLTE0ODgtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF91dGlscy5jPTI1MT1zdGF0aWMgaW50IGhnY21fY2FsbF9wcmVwcm9jZXNzKFxuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X3V0aWxzLmMtMjk2LVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfdXRpbHMuYzoyOTc6XHRcdGRlZmF1bHQ6XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF91dGlscy5jLTI5OC1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF91dGlscy5jPTMxMj1zdGF0aWMgdTMyIGhnY21fY2FsbF9saW5lYXJfYWRkcl90eXBlX3RvX3BhZ2VsaXN0X2ZsYWdzKFxuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X3V0aWxzLmMtMzE1LVx0c3dpdGNoICh0eXBlKSB7XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF91dGlscy5jOjMxNjpcdGRlZmF1bHQ6XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF91dGlscy5jLTMxNy1cdFx0V0FSTl9PTigxKTtcbi0tXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF91dGlscy5jPTM4ND1zdGF0aWMgdm9pZCBoZ2NtX2NhbGxfaW5pdF9jYWxsKFxuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X3V0aWxzLmMtNDIzLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfdXRpbHMuYzo0MjQ6XHRcdGRlZmF1bHQ6XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF91dGlscy5jLTQyNS1cdFx0XHRXQVJOX09OKDEpO1xuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X3V0aWxzLmM9NTY1PXN0YXRpYyBpbnQgaGdjbV9jYWxsX2NvcHlfYmFja19yZXN1bHQoXG4tLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfdXRpbHMuYy02MDYtXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF91dGlscy5jOjYwNzpcdFx0ZGVmYXVsdDpcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X3V0aWxzLmMtNjA4LVx0XHRcdFdBUk5fT04oMSk7XG4tLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfdXRpbHMuYz02NzE9aW50IHZiZ19oZ2NtX2NhbGwzMihcbi0tXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF91dGlscy5jLTcwNi1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X3V0aWxzLmM6NzA3Olx0XHRkZWZhdWx0OlxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfdXRpbHMuYy03MDgtXHRcdFx0cmV0ID0gLUVJTlZBTDtcbi0tXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF91dGlscy5jLTczNS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X3V0aWxzLmM6NzM2Olx0XHRkZWZhdWx0OlxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfdXRpbHMuYy03MzctXHRcdFx0V0FSTl9PTigxKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYyNzkKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBWaXJ0dWFsQm94IEJ1ZyBSZXBvcnQqKgoKT2theSwgc28gdGhlcmUmIzM5O3MgYSBidWcgcmVwb3J0IGZyb20gc3l6a2FsbGVyLCBhbmQgdGhlcmUmIzM5O3Mgbm8gbWVudGlvbiBvZiBmYXVsdCBpbmplY3Rpb24gb3IgYSBmYWtlZCBob3N0IGVudmlyb25tZW50LiBUaGF0JiMzOTtzIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBhdCBtZS4gQnV0IGlmIHN5emthbGxlciBmb3VuZCB0aGlzLCBob3cgZXhhY3RseSBkaWQgaXQgbWFuYWdlIHRvIG1hbmlwdWxhdGUgaG9zdCBkYXRhPyBIbW0uLi4gd2FpdCBhIG1pbnV0ZSwgYHZib3hzZmAgaXMgYSBmaWxlc3lzdGVtLCByaWdodD8gU28sIHN5emthbGxlciAqY291bGQqIGhhdmUgbW91bnRlZCBpdC4gVGhlIGhvc3QgKFZpcnR1YWxCb3gpIHdvdWxkIHRoZW4gcHJvdmlkZSB0aGUgZGF0YS4gQnV0IFZpcnR1YWxCb3ggaXMgYSAqdHJ1c3RlZCogaG9zdC4gSXQgc2hvdWxkbiYjMzk7dCBiZSByZXR1cm5pbmcgY29ycnVwdCBkYXRhIHVubGVzcyB0aGVyZSYjMzk7cyBhIGJ1ZyBpbiBWaXJ0dWFsQm94IGl0c2VsZiwgb3IuLi4gY291bGQgc3l6a2FsbGVyIGJlIGZ1enppbmcgdGhlIGhvc3QtZ3Vlc3QgY29tbXVuaWNhdGlvbiBzb21laG93PwoKSG9sZCBvbi4uLiBJIHNlZW0gdG8gcmVjYWxsIHNlZWluZyBzb21ldGhpbmcgYWJvdXQgYSBgc3l6X3Zib3hndWVzdGAgZnVuY3Rpb24gc29tZXdoZXJlLiBMZXQgbWUgY2hlY2sgaWYgdGhlcmUmIzM5O3MgYW55IGBzeXpfYCBmdW5jdGlvbiByZWxhdGVkIHRvIGB2Ym94Z3Vlc3RgIHdpdGhpbiB0aGUgc3l6a2FsbGVyIGNvZGUuIERhbW1pdCwgSSBkb24mIzM5O3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIHN5emthbGxlciBzb3VyY2UgcmlnaHQgbm93LiAKCkJ1dCB3YWl0IGEgbWludXRlLi4uIGNvdWxkIGl0IGJlIGZ1enppbmcgYHZib3hzZmAgdGhyb3VnaCBhICpmYWtlKiBgdmJveGd1ZXN0YCBkZXZpY2U/IFRoYXQgd291bGQgYmUgYSBjbGV2ZXIgdHJpY2suIEkgd29uZGVyIGlmIHN1Y2ggYSBmYWtlIGRldmljZSBleGlzdHMuIExldCBtZSBnbyBiYWNrIGFuZCByZS1leGFtaW5lIHRoZSBgZHJpdmVycy92aXJ0L3Zib3hndWVzdC9gIGRpcmVjdG9yeS4gTWF5YmUgSSBtaXNzZWQgc29tZXRoaW5nIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Zha2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3ZpcnQvdmJveGd1ZXN0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2ODI5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBTeXprYWxsZXIgRnV6emluZyBTY2VuYXJpbyoqCgpPa2F5LCBubyBzbW9rZSBhbmQgbWlycm9ycywganVzdCBwdXJlIGFuYWx5c2lzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtJcyBzeXprYWxsZXIgYWN0dWFsbHkgdGFyZ2V0aW5nIGAvZGV2L3Zib3hndWVzdGAgZGlyZWN0bHkgZnJvbSB1c2Vyc3BhY2U/JiMzNDsgVGhpcyBwYXRoIHNlZW1zIGludGVyZXN0aW5nLCBnaXZlbiB0aGF0IGAvZGV2L3Zib3hndWVzdGAgaXMgdGhlIGNvbmR1aXQgZm9yIHVzZXJzcGFjZSB0byBtYWtlIEhHQ00gY2FsbHMgdG8gdGhlIGhvc3QuIEhvd2V2ZXIsIGB2Ym94c2ZgIGlzIGEgKmtlcm5lbCogZmlsZXN5c3RlbSwgYWxzbyBjYXBhYmxlIG9mIHNlbmRpbmcgSEdDTSBjYWxscy4gSWYgc3l6a2FsbGVyJiMzOTtzIGZvY3VzZWQgb24gYHZib3hzZmAsIGl0IHdvdWxkIG1vdW50IHRoZSBmaWxlc3lzdGVtIGFuZCBwZXJmb3JtIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucywgcmlnaHQ/IEJ1dCBob3cgZXhhY3RseSBjb3VsZCBzeXprYWxsZXIgdHJpZ2dlciB0aGlzICYjMzQ7Y29ycnVwdCBkYXRhIGZyb20gaG9zdCYjMzQ7IHNjZW5hcmlvPwoKSXQmIzM5O3MgZ290IG1lIHRoaW5raW5nLCB3YXMgdGhpcyBkaXNjb3ZlcmVkIGJ5IGEgZGlmZmVyZW50IGZ1enplciwgb3IgcGVyaGFwcyBzeXprYWxsZXIgc3R1bWJsZWQgdXBvbiBpdD8gQ291bGQgaXQgaGF2ZSBiZWVuIGFibGUgdG8gY29uc3RydWN0IGEgZGlyZWN0b3J5IG5hbWUgdGhhdCYjMzk7cyBsYXJnZXIgdGhhbiB0aGUgYWxsb2NhdGVkIHNpemU/IFRoYXQgbGFzdCB0aG91Z2h0IGZlZWxzIHByb21pc2luZy4uLiBXYWl0IGEgbWludXRlLCB3aGF0IGlmIHdl4oCZcmUgZGVhbGluZyB3aXRoIGEgYGluZm8tJmd0O25hbWUubGVuZ3RoICZndDsgaW5mby0mZ3Q7bmFtZS5zaXplYCBzaXR1YXRpb24/CgpMZXQgbWUgaW52ZXN0aWdhdGUgdGhhdC4gSWYgYGluZm9gIGlzIGEgYHZib3hzZl9kaXJfaW5mb2Agc3RydWN0LCB0aGlzIGNvdWxkIGJlIHRoZSBrZXkuIExldCYjMzk7cyBkZWx2ZSBpbnRvIHRoZSBgdmJveHNmX2Rpcl9pbmZvYCBkZWZpbml0aW9uIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmJveHNmX2Rpcl9pbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvdmJveHNmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy92Ym94c2YvZGlyLmM9MTI9c3RhdGljIGludCB2Ym94c2ZfZGlyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxuZnMvdmJveHNmL2Rpci5jLTE1LVx0c3RydWN0IHNoZmxfY3JlYXRlcGFybXMgcGFyYW1zID0ge307XG5mcy92Ym94c2YvZGlyLmM6MTY6XHRzdHJ1Y3QgdmJveHNmX2Rpcl9pbmZvICpzZl9kO1xuZnMvdmJveHNmL2Rpci5jLTE3LVx0aW50IGVycjtcbmZzL3Zib3hzZi9kaXIuYy0xOC1cbmZzL3Zib3hzZi9kaXIuYzoxOTpcdHNmX2QgPSB2Ym94c2ZfZGlyX2luZm9fYWxsb2MoKTtcbmZzL3Zib3hzZi9kaXIuYy0yMC1cdGlmICghc2ZfZClcbi0tXG5mcy92Ym94c2YvZGlyLmMtNDYtZXJyX2ZyZWVfZGlyX2luZm86XG5mcy92Ym94c2YvZGlyLmM6NDc6XHR2Ym94c2ZfZGlyX2luZm9fZnJlZShzZl9kKTtcbmZzL3Zib3hzZi9kaXIuYy00OC1cdHJldHVybiBlcnI7XG4tLVxuZnMvdmJveHNmL2Rpci5jPTUxPXN0YXRpYyBpbnQgdmJveHNmX2Rpcl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbmZzL3Zib3hzZi9kaXIuYy01My1cdGlmIChmaWxlLVx1MDAzZXByaXZhdGVfZGF0YSlcbmZzL3Zib3hzZi9kaXIuYzo1NDpcdFx0dmJveHNmX2Rpcl9pbmZvX2ZyZWUoZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGEpO1xuZnMvdmJveHNmL2Rpci5jLTU1LVxuLS1cbmZzL3Zib3hzZi9kaXIuYz05NT1zdGF0aWMgYm9vbCB2Ym94c2ZfZGlyX2VtaXQoc3RydWN0IGZpbGUgKmRpciwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXG4tLVxuZnMvdmJveHNmL2Rpci5jLTk3LVx0c3RydWN0IHZib3hzZl9zYmkgKnNiaSA9IFZCT1hTRl9TQkkoZmlsZV9pbm9kZShkaXIpLVx1MDAzZWlfc2IpO1xuZnMvdmJveHNmL2Rpci5jOjk4Olx0c3RydWN0IHZib3hzZl9kaXJfaW5mbyAqc2ZfZCA9IGRpci1cdTAwM2Vwcml2YXRlX2RhdGE7XG5mcy92Ym94c2YvZGlyLmMtOTktXHRzdHJ1Y3Qgc2hmbF9kaXJpbmZvICppbmZvO1xuLS1cbmZzL3Zib3hzZi9kaXIuYy0xMTQtXHRcdC8qXG5mcy92Ym94c2YvZGlyLmM6MTE1Olx0XHQgKiBOb3RlIHRoZSB2Ym94c2ZfZGlyX2luZm8gb2JqZWN0cyB3ZSBhcmUgaXRlcmF0aW5nIG92ZXIgaGVyZVxuZnMvdmJveHNmL2Rpci5jLTExNi1cdFx0ICogYXJlIHZhcmlhYmxlIHNpemVkLCBzbyB0aGUgaW5mbyBwb2ludGVyIG1heSBlbmQgdXAgYmVpbmdcbi0tXG5mcy92Ym94c2YvdXRpbHMuYz00OTk9c3RhdGljIHZvaWQgdmJveHNmX2Rpcl9idWZfZnJlZShzdHJ1Y3QgdmJveHNmX2Rpcl9idWYgKmIpXG4tLVxuZnMvdmJveHNmL3V0aWxzLmMtNTA1LVxuZnMvdmJveHNmL3V0aWxzLmM6NTA2OnN0cnVjdCB2Ym94c2ZfZGlyX2luZm8gKnZib3hzZl9kaXJfaW5mb19hbGxvYyh2b2lkKVxuZnMvdmJveHNmL3V0aWxzLmMtNTA3LXtcbmZzL3Zib3hzZi91dGlscy5jOjUwODpcdHN0cnVjdCB2Ym94c2ZfZGlyX2luZm8gKnA7XG5mcy92Ym94c2YvdXRpbHMuYy01MDktXG4tLVxuZnMvdmJveHNmL3V0aWxzLmMtNTE3LVxuZnMvdmJveHNmL3V0aWxzLmM6NTE4OnZvaWQgdmJveHNmX2Rpcl9pbmZvX2ZyZWUoc3RydWN0IHZib3hzZl9kaXJfaW5mbyAqcClcbmZzL3Zib3hzZi91dGlscy5jLTUxOS17XG4tLVxuZnMvdmJveHNmL3V0aWxzLmMtNTMxLVxuZnMvdmJveHNmL3V0aWxzLmM6NTMyOmludCB2Ym94c2ZfZGlyX3JlYWRfYWxsKHN0cnVjdCB2Ym94c2Zfc2JpICpzYmksIHN0cnVjdCB2Ym94c2ZfZGlyX2luZm8gKnNmX2QsXG5mcy92Ym94c2YvdXRpbHMuYy01MzMtXHRcdFx0dTY0IGhhbmRsZSlcbi0tXG5mcy92Ym94c2YvdmZzbW9kLmg9NTM9c3RydWN0IHZib3hzZl9pbm9kZSB7XG4tLVxuZnMvdmJveHNmL3Zmc21vZC5oLTYzLVxuZnMvdmJveHNmL3Zmc21vZC5oOjY0OnN0cnVjdCB2Ym94c2ZfZGlyX2luZm8ge1xuZnMvdmJveHNmL3Zmc21vZC5oLTY1LVx0c3RydWN0IGxpc3RfaGVhZCBpbmZvX2xpc3Q7XG4tLVxuZnMvdmJveHNmL3Zmc21vZC5oPTEwNz1pbnQgdmJveHNmX25sc2NweShzdHJ1Y3QgdmJveHNmX3NiaSAqc2JpLCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZV9ib3VuZF9sZW4sXG5mcy92Ym94c2YvdmZzbW9kLmgtMTA4LVx0XHQgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnV0ZjhfbmFtZSwgc2l6ZV90IHV0ZjhfbGVuKTtcbmZzL3Zib3hzZi92ZnNtb2QuaDoxMDk6c3RydWN0IHZib3hzZl9kaXJfaW5mbyAqdmJveHNmX2Rpcl9pbmZvX2FsbG9jKHZvaWQpO1xuZnMvdmJveHNmL3Zmc21vZC5oOjExMDp2b2lkIHZib3hzZl9kaXJfaW5mb19mcmVlKHN0cnVjdCB2Ym94c2ZfZGlyX2luZm8gKnApO1xuZnMvdmJveHNmL3Zmc21vZC5oOjExMTppbnQgdmJveHNmX2Rpcl9yZWFkX2FsbChzdHJ1Y3QgdmJveHNmX3NiaSAqc2JpLCBzdHJ1Y3QgdmJveHNmX2Rpcl9pbmZvICpzZl9kLFxuZnMvdmJveHNmL3Zmc21vZC5oLTExMi1cdFx0XHR1NjQgaGFuZGxlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg1MTEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgYHNoZmxfZGlyaW5mb2AqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgaW5mb2AgaXMgZGVmaW5lZCBhcyBhIGBzdHJ1Y3Qgc2hmbF9kaXJpbmZvYC4gTGV0JiMzOTtzIHBhdXNlIGFuZCBkaWcgaW50byB0aGF0IHNwZWNpZmljIHN0cnVjdHVyZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgdGhhdCBzdHJ1Y3QgaXMgYWN0dWFsbHkgY29tcG9zZWQgb2YuIFdoYXQgYXJlIHRoZSBrZXkgZmllbGRzIHdpdGhpbiBgc2hmbF9kaXJpbmZvYD8gVW5kZXJzdGFuZGluZyB0aG9zZSBtZW1iZXJzIGlzIGNydWNpYWwgdG8gaW50ZXJwcmV0aW5nIHRoZSBuZXh0IHN0ZXBzLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcmVmZXJlbmNlIHRoZSBkb2N1bWVudGF0aW9uIG9yIGhlYWRlciBmaWxlIGZvciBgc2hmbF9kaXJpbmZvYC4uLiBUaGlzIGhlbHBzIG1lIHNlZSBpdHMgbWFrZXVwIHdpdGhpbiB0aGUgZ3JlYXRlciBjb250ZXh0LCBhcyBJIHByb2NlZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBzaGZsX2RpcmluZm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy92Ym94c2YvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Zib3hzZi9kaXIuYz05NT1zdGF0aWMgYm9vbCB2Ym94c2ZfZGlyX2VtaXQoc3RydWN0IGZpbGUgKmRpciwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXG4tLVxuZnMvdmJveHNmL2Rpci5jLTk4LVx0c3RydWN0IHZib3hzZl9kaXJfaW5mbyAqc2ZfZCA9IGRpci1cdTAwM2Vwcml2YXRlX2RhdGE7XG5mcy92Ym94c2YvZGlyLmM6OTk6XHRzdHJ1Y3Qgc2hmbF9kaXJpbmZvICppbmZvO1xuZnMvdmJveHNmL2Rpci5jLTEwMC1cdHN0cnVjdCB2Ym94c2ZfZGlyX2J1ZiAqYjtcbi0tXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oPTM5Nj1zdHJ1Y3Qgc2hmbF9jcmVhdGVwYXJtcyB7XG4tLVxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaC00MTMtLyoqIFNoYXJlZCBGb2xkZXIgZGlyZWN0b3J5IGluZm9ybWF0aW9uICovXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oOjQxNDpzdHJ1Y3Qgc2hmbF9kaXJpbmZvIHtcbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmgtNDE1LVx0LyoqIEZ1bGwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9iamVjdC4gKi9cbi0tXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oPTY2Mz1zdHJ1Y3Qgc2hmbF9saXN0IHtcbi0tXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oLTY5NS1cdCAqIHBvaW50ZXIsIG91dDpcbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmg6Njk2Olx0ICogQnVmZmVyIHRvIHBsYWNlIGxpc3RpbmcgaW5mb3JtYXRpb24gdG8uIChzdHJ1Y3Qgc2hmbF9kaXJpbmZvKVxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaC02OTctXHQgKi9cbi0tXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM9MjUwPWludCB2Ym94c2ZfZGlyaW5mbyh1MzIgcm9vdCwgdTY0IGhhbmRsZSxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy0yNTEtXHRcdCAgIHN0cnVjdCBzaGZsX3N0cmluZyAqcGFyc2VkX3BhdGgsIHUzMiBmbGFncywgdTMyIGluZGV4LFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jOjI1MjpcdFx0ICAgdTMyICpidWZfbGVuLCBzdHJ1Y3Qgc2hmbF9kaXJpbmZvICpidWYsIHUzMiAqZmlsZV9jb3VudClcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy0yNTMte1xuLS1cbmZzL3Zib3hzZi92ZnNtb2QuaD0xMjk9aW50IHZib3hzZl9kaXJpbmZvKHUzMiByb290LCB1NjQgaGFuZGxlLFxuZnMvdmJveHNmL3Zmc21vZC5oLTEzMC1cdFx0ICAgc3RydWN0IHNoZmxfc3RyaW5nICpwYXJzZWRfcGF0aCwgdTMyIGZsYWdzLCB1MzIgaW5kZXgsXG5mcy92Ym94c2YvdmZzbW9kLmg6MTMxOlx0XHQgICB1MzIgKmJ1Zl9sZW4sIHN0cnVjdCBzaGZsX2RpcmluZm8gKmJ1ZiwgdTMyICpmaWxlX2NvdW50KTtcbmZzL3Zib3hzZi92ZnNtb2QuaC0xMzItaW50IHZib3hzZl9mc2luZm8odTMyIHJvb3QsIHU2NCBoYW5kbGUsIHUzMiBmbGFncyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkzNzIKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgVmlydHVhbEJveCBTaGFyZWQgRm9sZGVycyBLZXJuZWwgTW9kdWxlKioKClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCB0aGUgc3RydWN0dXJlIGBzaGZsX2RpcmluZm9gLi4uIHRoYXQmIzM5O3MgZGVmaW5lZCBpbiBgZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaGAuIE9rYXksIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHRoZSBWaXJ0dWFsQm94IFNoYXJlZCBGb2xkZXJzIGtlcm5lbCBtb2R1bGUsIHNwZWNpZmljYWxseSB0aGUgaW50ZXJmYWNlIHdpdGggdGhlIGhvc3QuICYjMzQ7c2hmbCYjMzQ7IGxpa2VseSBzdGFuZHMgZm9yICYjMzQ7c2hhcmVkIGZvbGRlciwmIzM0OyBhbmQgYGRpcmluZm9gIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gZGlyZWN0b3J5IGxpc3RpbmdzIG9yIHBlcmhhcHMgYXR0cmlidXRlIHJldHJpZXZhbCBmb3Igc2hhcmVkIGRpcmVjdG9yaWVzLiBXZSYjMzk7cmUgcHJvYmFibHkgbG9va2luZyBhdCBob3cgdGhlIGd1ZXN0IE9TIGludGVyYWN0cyB3aXRoIHRoZSBob3N0IGZpbGVzeXN0ZW0gdGhyb3VnaCB0aGlzIG1vZHVsZS4gS25vd2luZyB0aGUgaGVhZGVyIGZpbGUgaXQmIzM5O3MgaW4gaXMga2V5OyBpdCYjMzk7bGwgZ2l2ZSB1cyB0aGUgZGVjbGFyYXRpb24gb2YgdGhlIHN0cnVjdHVyZSBpdHNlbGYsIGFuZCB3ZSBjYW4gYWxzbyBzZWUgYW55IHJlbGF0ZWQgZnVuY3Rpb25zIHRoYXQgYXJlIGRlY2xhcmVkIGluIHRoZSBzYW1lIGhlYWRlciBmaWxlLiBJZiBJIG5lZWQgdG8gZGVidWcgb3IgZGl2ZSBkZWVwZXIsIHRoaXMgaXMgdGhlIHBlcmZlY3Qgc3RhcnRpbmcgcG9pbnQuIFRoZSBuYW1lIGltcGxpZXMgZGlyZWN0b3J5IGRldGFpbHMgYXJlIHN0b3JlZCB3aXRoaW4gdGhpcyBzdHJ1Y3R1cmUsIHNvIGl0JiMzOTtzIHByb2JhYmx5IGhvdyBWQm94U0YgaGFuZGxlcyB0aGluZ3MgbGlrZSBkaXJlY3RvcnkgcGVybWlzc2lvbnMsIHRpbWVzdGFtcHMsIG9yIHBlcmhhcHMgZXZlbiBmaWxlIHNpemUgd2hlbiB0aGUgZ3Vlc3QgT1MgaW50ZXJhY3RzIHdpdGggdGhlIHNoYXJlZCBmb2xkZXJzLiBUaGUgaW5jbHVzaW9uIG9mIGBzaGZsX2hvc3RpbnRmLmhgIHNpZ25pZmllcyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBpbnRlcmZhY2UgYmV0d2VlbiB0aGUgVkJveFNGIGtlcm5lbCBtb2R1bGUgYW5kIHRoZSBob3N0IHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDEzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MTM6XHQvKiogU2hhcmVkIEZvbGRlciBkaXJlY3RvcnkgaW5mb3JtYXRpb24gKi9cbiA0MTQ6XHRzdHJ1Y3Qgc2hmbF9kaXJpbmZvIHtcbiA0MTU6XHRcdC8qKiBGdWxsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvYmplY3QuICovXG4gNDE2Olx0XHRzdHJ1Y3Qgc2hmbF9mc29iamluZm8gaW5mbztcbiA0MTc6XHRcdC8qKlxuIDQxODpcdFx0ICogVGhlIGxlbmd0aCBvZiB0aGUgc2hvcnQgZmllbGQgKG51bWJlciBvZiBVVEYxNiBjaGFycykuXG4gNDE5Olx0XHQgKiBJdCBpcyAxNi1iaXQgZm9yIHJlYXNvbnMgb2YgYWxpZ25tZW50LlxuIDQyMDpcdFx0ICovXG4gNDIxOlx0XHR1MTYgc2hvcnRfbmFtZV9sZW47XG4gNDIyOlx0XHQvKipcbiA0MjM6XHRcdCAqIFRoZSBzaG9ydCBuYW1lIGZvciA4LjMgY29tcGF0aWJpbGl0eS5cbiA0MjQ6XHRcdCAqIEVtcHR5IHN0cmluZyBpZiBub3QgYXZhaWxhYmxlLlxuIDQyNTpcdFx0ICovXG4gNDI2Olx0XHR1MTYgc2hvcnRfbmFtZVsxNF07XG4gNDI3Olx0XHRzdHJ1Y3Qgc2hmbF9zdHJpbmcgbmFtZTtcbiA0Mjg6XHR9O1xuIDQyOTpcdFxuIDQzMDpcdC8qKiBTaGFyZWQgZm9sZGVyIGZpbGVzeXN0ZW0gcHJvcGVydGllcy4gKi9cbiA0MzE6XHRzdHJ1Y3Qgc2hmbF9mc3Byb3BlcnRpZXMge1xuIDQzMjpcdFx0LyoqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5OTk4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0LCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIHRoZSBTdHJ1Y3R1cmUgRGVmaW5pdGlvbnMqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgY29kZSwgYW5kIEkgc2VlIHRoZSBmYW1pbGlhciBgc3RydWN0IHNoZmxfc3RyaW5nYCBkZWZpbmVkIGluIHRoaXMgYmxvY2suIFRoaXMgaXNuJiMzOTt0IHVuZXhwZWN0ZWQsIG9mIGNvdXJzZS4gSSYjMzk7ZCBuZWVkIHRvIGdvIGRlZXBlciB0byB1bmRlcnN0YW5kIGl0cyBwcmVjaXNlIHJvbGUgaW4gdGhlIGJyb2FkZXIgc3lzdGVtLCBhbmQgdGhlIGZ1bmN0aW9ucyB0aGF0IHVzZSBpdCwgYnV0IHNlZWluZyB0aGlzIGRlZmluaXRpb24gaXMgYSBkYXRhIHBvaW50LiBJdCB0ZWxscyBtZSB0aGF0IHdoYXRldmVyIGxpYnJhcnkgb3IgbW9kdWxlIEkmIzM5O20gZXhhbWluaW5nIGxpa2VseSByZWxpZXMgb24gc29tZSBjdXN0b20gc3RyaW5nIHJlcHJlc2VudGF0aW9uLCB3aGljaCBpcyB2ZXJ5IGNvbW1vbiBpbiBoaWdoLXBlcmZvcm1hbmNlIG9yIHJlc291cmNlLWNvbnN0cmFpbmVkIGVudmlyb25tZW50cy4gSSYjMzk7bGwgbWVudGFsbHkgdGFnIHRoaXMgYXMgc29tZXRoaW5nIHRvIGludmVzdGlnYXRlIGZvciBpdHMgbWVtb3J5IGxheW91dCwgcG90ZW50aWFsIG9wdGltaXphdGlvbiB0ZWNobmlxdWVzIChlLmcuLCBTbWFsbCBTdHJpbmcgT3B0aW1pemF0aW9uKSwgYW5kIGhvdyBpdCBoYW5kbGVzIHN0cmluZyBtYW5pcHVsYXRpb24uIEtub3dpbmcgdGhlIGRldGFpbHMgb2YgaXRzIHN0cnVjdHVyZSB3aWxsIHRlbGwgbWUgbXVjaCBtb3JlIGFib3V0IHRoZSByZXN0IG9mIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3Qgc2hmbF9zdHJpbmcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy92Ym94c2YvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Zib3hzZi9kaXIuYz0zNTU9c3RhdGljIGludCB2Ym94c2ZfZGlyX3VubGluayhzdHJ1Y3QgaW5vZGUgKnBhcmVudCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuLS1cbmZzL3Zib3hzZi9kaXIuYy0zNTktXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZF9pbm9kZShkZW50cnkpO1xuZnMvdmJveHNmL2Rpci5jOjM2MDpcdHN0cnVjdCBzaGZsX3N0cmluZyAqcGF0aDtcbmZzL3Zib3hzZi9kaXIuYy0zNjEtXHR1MzIgZmxhZ3M7XG4tLVxuZnMvdmJveHNmL2Rpci5jPTM4Nz1zdGF0aWMgaW50IHZib3hzZl9kaXJfcmVuYW1lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL3Zib3hzZi9kaXIuYy0zOTctXHR1MzIgc2hmbF9mbGFncyA9IFNIRkxfUkVOQU1FX0ZJTEUgfCBTSEZMX1JFTkFNRV9SRVBMQUNFX0lGX0VYSVNUUztcbmZzL3Zib3hzZi9kaXIuYzozOTg6XHRzdHJ1Y3Qgc2hmbF9zdHJpbmcgKm9sZF9wYXRoLCAqbmV3X3BhdGg7XG5mcy92Ym94c2YvZGlyLmMtMzk5LVx0aW50IGVycjtcbi0tXG5mcy92Ym94c2YvZGlyLmM9NDMwPXN0YXRpYyBpbnQgdmJveHNmX2Rpcl9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL3Zib3hzZi9kaXIuYy00MzYtXHRpbnQgc3ltbmFtZV9zaXplID0gc3RybGVuKHN5bW5hbWUpICYjNDM7IDE7XG5mcy92Ym94c2YvZGlyLmM6NDM3Olx0c3RydWN0IHNoZmxfc3RyaW5nICpwYXRoLCAqc3N5bW5hbWU7XG5mcy92Ym94c2YvZGlyLmMtNDM4LVx0c3RydWN0IHNoZmxfZnNvYmppbmZvIGluZm87XG4tLVxuZnMvdmJveHNmL2ZpbGUuYz0zNTk9c3RhdGljIGNvbnN0IGNoYXIgKnZib3hzZl9nZXRfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvdmJveHNmL2ZpbGUuYy0zNjItXHRzdHJ1Y3QgdmJveHNmX3NiaSAqc2JpID0gVkJPWFNGX1NCSShpbm9kZS1cdTAwM2VpX3NiKTtcbmZzL3Zib3hzZi9maWxlLmM6MzYzOlx0c3RydWN0IHNoZmxfc3RyaW5nICpwYXRoO1xuZnMvdmJveHNmL2ZpbGUuYy0zNjQtXHRjaGFyICpsaW5rO1xuLS1cbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmg9Mjc9ZW51bSB7XG4tLVxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaC02MS0vKiogU2hhcmVkIGZvbGRlciBzdHJpbmcgYnVmZmVyIHN0cnVjdHVyZS4gKi9cbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmg6NjI6c3RydWN0IHNoZmxfc3RyaW5nIHtcbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmgtNjMtXHQvKiogQWxsb2NhdGVkIHNpemUgb2YgdGhlIHN0cmluZyBtZW1iZXIgaW4gYnl0ZXMuICovXG4tLVxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaD03Nj1WTU1ERVZfQVNTRVJUX1NJWkUoc2hmbF9zdHJpbmcsIDYpO1xuLS1cbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmgtODEtLyogQ2FsY3VsYXRlIHNpemUgb2YgdGhlIHN0cmluZy4gKi9cbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmg6ODI6c3RhdGljIGlubGluZSB1MzIgc2hmbF9zdHJpbmdfYnVmX3NpemUoY29uc3Qgc3RydWN0IHNoZmxfc3RyaW5nICpzdHJpbmcpXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oLTgzLXtcbi0tXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oPTQxND1zdHJ1Y3Qgc2hmbF9kaXJpbmZvIHtcbi0tXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oLTQyNi1cdHUxNiBzaG9ydF9uYW1lWzE0XTtcbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmg6NDI3Olx0c3RydWN0IHNoZmxfc3RyaW5nIG5hbWU7XG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oLTQyOC19O1xuLS1cbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmg9NDg3PXN0cnVjdCBzaGZsX21hcF9mb2xkZXIge1xuLS1cbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmgtNDg5LVx0ICogcG9pbnRlciwgaW46XG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oOjQ5MDpcdCAqIFBvaW50cyB0byBzdHJ1Y3Qgc2hmbF9zdHJpbmcgYnVmZmVyLlxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaC00OTEtXHQgKi9cbi0tXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oPTUzMz1zdHJ1Y3Qgc2hmbF9jcmVhdGUge1xuLS1cbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmgtNTQxLVx0ICogcG9pbnRlciwgaW46XG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oOjU0MjpcdCAqIFBvaW50cyB0byBzdHJ1Y3Qgc2hmbF9zdHJpbmcgYnVmZmVyLlxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaC01NDMtXHQgKi9cbi0tXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oPTY2Mz1zdHJ1Y3Qgc2hmbF9saXN0IHtcbi0tXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oLTY4OS1cdCAqIHBvaW50ZXIsIGluL29wdGlvbmFsXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oOjY5MDpcdCAqIFBvaW50cyB0byBzdHJ1Y3Qgc2hmbF9zdHJpbmcgYnVmZmVyIHRoYXQgc3BlY2lmaWVzIGEgc2VhcmNoIHBhdGguXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oLTY5MS1cdCAqL1xuLS1cbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmg9NzIwPXN0cnVjdCBzaGZsX3JlYWRMaW5rIHtcbi0tXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oLTcyOC1cdCAqIHBvaW50ZXIsIGluOlxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaDo3Mjk6XHQgKiBQb2ludHMgdG8gc3RydWN0IHNoZmxfc3RyaW5nIGJ1ZmZlci5cbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmgtNzMwLVx0ICovXG4tLVxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaD04MTA9c3RydWN0IHNoZmxfcmVtb3ZlIHtcbi0tXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oLTgxOC1cdCAqIHBvaW50ZXIsIGluOlxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaDo4MTk6XHQgKiBQb2ludHMgdG8gc3RydWN0IHNoZmxfc3RyaW5nIGJ1ZmZlci5cbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmgtODIwLVx0ICovXG4tLVxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaD04NDE9c3RydWN0IHNoZmxfcmVuYW1lIHtcbi0tXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oLTg0OS1cdCAqIHBvaW50ZXIsIGluOlxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaDo4NTA6XHQgKiBQb2ludHMgdG8gc3RydWN0IHNoZmxfc3RyaW5nIHNyYy5cbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmgtODUxLVx0ICovXG4tLVxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaC04NTUtXHQgKiBwb2ludGVyLCBpbjpcbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmg6ODU2Olx0ICogUG9pbnRzIHRvIHN0cnVjdCBzaGZsX3N0cmluZyBkZXN0LlxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaC04NTctXHQgKi9cbi0tXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oPTg3Mj1zdHJ1Y3Qgc2hmbF9zeW1saW5rIHtcbi0tXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oLTg4MC1cdCAqIHBvaW50ZXIsIGluOlxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaDo4ODE6XHQgKiBQb2ludHMgdG8gc3RydWN0IHNoZmxfc3RyaW5nIG9mIHBhdGggZm9yIHRoZSBuZXcgc3ltbGluay5cbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmgtODgyLVx0ICovXG4tLVxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaC04ODYtXHQgKiBwb2ludGVyLCBpbjpcbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmg6ODg3Olx0ICogUG9pbnRzIHRvIHN0cnVjdCBzaGZsX3N0cmluZyBvZiBkZXN0aW5hdGlvbiBmb3Igc3ltbGluay5cbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmgtODg4LVx0ICovXG4tLVxuZnMvdmJveHNmL3N1cGVyLmM9MTExPXN0YXRpYyBpbnQgdmJveHNmX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmZzL3Zib3hzZi9zdXBlci5jLTExMy1cdHN0cnVjdCB2Ym94c2ZfZnNfY29udGV4dCAqY3R4ID0gZmMtXHUwMDNlZnNfcHJpdmF0ZTtcbmZzL3Zib3hzZi9zdXBlci5jOjExNDpcdHN0cnVjdCBzaGZsX3N0cmluZyAqZm9sZGVyX25hbWUsIHJvb3RfcGF0aDtcbmZzL3Zib3hzZi9zdXBlci5jLTExNS1cdHN0cnVjdCB2Ym94c2Zfc2JpICpzYmk7XG4tLVxuZnMvdmJveHNmL3V0aWxzLmM9MTM4PWludCB2Ym94c2ZfY3JlYXRlX2F0X2RlbnRyeShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvdmJveHNmL3V0aWxzLmMtMTQxLVx0c3RydWN0IHZib3hzZl9zYmkgKnNiaSA9IFZCT1hTRl9TQkkoZGVudHJ5LVx1MDAzZWRfc2IpO1xuZnMvdmJveHNmL3V0aWxzLmM6MTQyOlx0c3RydWN0IHNoZmxfc3RyaW5nICpwYXRoO1xuZnMvdmJveHNmL3V0aWxzLmMtMTQzLVx0aW50IGVycjtcbi0tXG5mcy92Ym94c2YvdXRpbHMuYy0xNTQtXG5mcy92Ym94c2YvdXRpbHMuYzoxNTU6aW50IHZib3hzZl9zdGF0KHN0cnVjdCB2Ym94c2Zfc2JpICpzYmksIHN0cnVjdCBzaGZsX3N0cmluZyAqcGF0aCxcbmZzL3Zib3hzZi91dGlscy5jLTE1Ni1cdFx0c3RydWN0IHNoZmxfZnNvYmppbmZvICppbmZvKVxuLS1cbmZzL3Zib3hzZi91dGlscy5jPTE3Nz1pbnQgdmJveHNmX3N0YXRfZGVudHJ5KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IHNoZmxfZnNvYmppbmZvICppbmZvKVxuLS1cbmZzL3Zib3hzZi91dGlscy5jLTE3OS1cdHN0cnVjdCB2Ym94c2Zfc2JpICpzYmkgPSBWQk9YU0ZfU0JJKGRlbnRyeS1cdTAwM2VkX3NiKTtcbmZzL3Zib3hzZi91dGlscy5jOjE4MDpcdHN0cnVjdCBzaGZsX3N0cmluZyAqcGF0aDtcbmZzL3Zib3hzZi91dGlscy5jLTE4MS1cdGludCBlcnI7XG4tLVxuZnMvdmJveHNmL3V0aWxzLmM9MjYwPWludCB2Ym94c2Zfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL3Zib3hzZi91dGlscy5jLTM2NS0gKi9cbmZzL3Zib3hzZi91dGlscy5jOjM2NjpzdHJ1Y3Qgc2hmbF9zdHJpbmcgKnZib3hzZl9wYXRoX2Zyb21fZGVudHJ5KHN0cnVjdCB2Ym94c2Zfc2JpICpzYmksXG5mcy92Ym94c2YvdXRpbHMuYy0zNjctXHRcdFx0XHRcdCAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG5mcy92Ym94c2YvdXRpbHMuYy0zNjgte1xuZnMvdmJveHNmL3V0aWxzLmM6MzY5Olx0c3RydWN0IHNoZmxfc3RyaW5nICpzaGZsX3BhdGg7XG5mcy92Ym94c2YvdXRpbHMuYy0zNzAtXHRpbnQgcGF0aF9sZW4sIG91dF9sZW4sIG5iO1xuLS1cbmZzL3Zib3hzZi91dGlscy5jLTQyNy1cdFx0ICovXG5mcy92Ym94c2YvdXRpbHMuYzo0Mjg6XHRcdHNoZmxfcGF0aCA9IChzdHJ1Y3Qgc2hmbF9zdHJpbmcgKilidWY7XG5mcy92Ym94c2YvdXRpbHMuYy00MjktXHRcdG1lbW1vdmUoc2hmbF9wYXRoLVx1MDAzZXN0cmluZy51dGY4LCBwYXRoLCBwYXRoX2xlbik7XG4tLVxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jPTUzPXN0YXRpYyBpbnQgdmJveHNmX2NhbGwodTMyIGZ1bmN0aW9uLCB2b2lkICpwYXJtcywgdTMyIHBhcm1fY291bnQsIGludCAqc3RhdHVzKVxuLS1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy03NC1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYzo3NTppbnQgdmJveHNmX21hcF9mb2xkZXIoc3RydWN0IHNoZmxfc3RyaW5nICpmb2xkZXJfbmFtZSwgdTMyICpyb290KVxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTc2LXtcbi0tXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM9MTAyPWludCB2Ym94c2ZfdW5tYXBfZm9sZGVyKHUzMiByb290KVxuLS1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy0xMjktICovXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM6MTMwOmludCB2Ym94c2ZfY3JlYXRlKHUzMiByb290LCBzdHJ1Y3Qgc2hmbF9zdHJpbmcgKnBhcnNlZF9wYXRoLFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTEzMS1cdFx0ICBzdHJ1Y3Qgc2hmbF9jcmVhdGVwYXJtcyAqY3JlYXRlX3Bhcm1zKVxuLS1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYz0xNDk9aW50IHZib3hzZl9jbG9zZSh1MzIgcm9vdCwgdTY0IGhhbmRsZSlcbi0tXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMTYxLVxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jOjE2MjppbnQgdmJveHNmX3JlbW92ZSh1MzIgcm9vdCwgc3RydWN0IHNoZmxfc3RyaW5nICpwYXJzZWRfcGF0aCwgdTMyIGZsYWdzKVxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTE2My17XG4tLVxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTE3OC1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYzoxNzk6aW50IHZib3hzZl9yZW5hbWUodTMyIHJvb3QsIHN0cnVjdCBzaGZsX3N0cmluZyAqc3JjX3BhdGgsXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM6MTgwOlx0XHQgIHN0cnVjdCBzaGZsX3N0cmluZyAqZGVzdF9wYXRoLCB1MzIgZmxhZ3MpXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMTgxLXtcbi0tXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM9MjUwPWludCB2Ym94c2ZfZGlyaW5mbyh1MzIgcm9vdCwgdTY0IGhhbmRsZSxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYzoyNTE6XHRcdCAgIHN0cnVjdCBzaGZsX3N0cmluZyAqcGFyc2VkX3BhdGgsIHUzMiBmbGFncywgdTMyIGluZGV4LFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTI1Mi1cdFx0ICAgdTMyICpidWZfbGVuLCBzdHJ1Y3Qgc2hmbF9kaXJpbmZvICpidWYsIHUzMiAqZmlsZV9jb3VudClcbi0tXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM9Mjk0PWludCB2Ym94c2ZfZnNpbmZvKHUzMiByb290LCB1NjQgaGFuZGxlLCB1MzIgZmxhZ3MsXG4tLVxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTMxOS1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYzozMjA6aW50IHZib3hzZl9yZWFkbGluayh1MzIgcm9vdCwgc3RydWN0IHNoZmxfc3RyaW5nICpwYXJzZWRfcGF0aCxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy0zMjEtXHRcdCAgICB1MzIgYnVmX2xlbiwgdTggKmJ1Zilcbi0tXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMzM5LVxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jOjM0MDppbnQgdmJveHNmX3N5bWxpbmsodTMyIHJvb3QsIHN0cnVjdCBzaGZsX3N0cmluZyAqbmV3X3BhdGgsXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM6MzQxOlx0XHQgICBzdHJ1Y3Qgc2hmbF9zdHJpbmcgKm9sZF9wYXRoLCBzdHJ1Y3Qgc2hmbF9mc29iamluZm8gKmJ1ZilcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy0zNDIte1xuLS1cbmZzL3Zib3hzZi92ZnNtb2QuaD05ND1pbnQgdmJveHNmX2NyZWF0ZV9hdF9kZW50cnkoc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuZnMvdmJveHNmL3Zmc21vZC5oLTk1LVx0XHRcdCAgICBzdHJ1Y3Qgc2hmbF9jcmVhdGVwYXJtcyAqcGFyYW1zKTtcbmZzL3Zib3hzZi92ZnNtb2QuaDo5NjppbnQgdmJveHNmX3N0YXQoc3RydWN0IHZib3hzZl9zYmkgKnNiaSwgc3RydWN0IHNoZmxfc3RyaW5nICpwYXRoLFxuZnMvdmJveHNmL3Zmc21vZC5oLTk3LVx0XHRzdHJ1Y3Qgc2hmbF9mc29iamluZm8gKmluZm8pO1xuLS1cbmZzL3Zib3hzZi92ZnNtb2QuaD0xMDM9aW50IHZib3hzZl9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG5mcy92Ym94c2YvdmZzbW9kLmgtMTA0LVx0XHQgICBzdHJ1Y3QgaWF0dHIgKmlhdHRyKTtcbmZzL3Zib3hzZi92ZnNtb2QuaDoxMDU6c3RydWN0IHNoZmxfc3RyaW5nICp2Ym94c2ZfcGF0aF9mcm9tX2RlbnRyeShzdHJ1Y3QgdmJveHNmX3NiaSAqc2JpLFxuZnMvdmJveHNmL3Zmc21vZC5oLTEwNi1cdFx0XHRcdFx0ICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XG4tLVxuZnMvdmJveHNmL3Zmc21vZC5oPTExNj12b2lkIHZib3hzZl9kaXNjb25uZWN0KHZvaWQpO1xuZnMvdmJveHNmL3Zmc21vZC5oLTExNy1cbmZzL3Zib3hzZi92ZnNtb2QuaDoxMTg6aW50IHZib3hzZl9jcmVhdGUodTMyIHJvb3QsIHN0cnVjdCBzaGZsX3N0cmluZyAqcGFyc2VkX3BhdGgsXG5mcy92Ym94c2YvdmZzbW9kLmgtMTE5LVx0XHQgIHN0cnVjdCBzaGZsX2NyZWF0ZXBhcm1zICpjcmVhdGVfcGFybXMpO1xuLS1cbmZzL3Zib3hzZi92ZnNtb2QuaD0xMjE9aW50IHZib3hzZl9jbG9zZSh1MzIgcm9vdCwgdTY0IGhhbmRsZSk7XG5mcy92Ym94c2YvdmZzbW9kLmg6MTIyOmludCB2Ym94c2ZfcmVtb3ZlKHUzMiByb290LCBzdHJ1Y3Qgc2hmbF9zdHJpbmcgKnBhcnNlZF9wYXRoLCB1MzIgZmxhZ3MpO1xuZnMvdmJveHNmL3Zmc21vZC5oOjEyMzppbnQgdmJveHNmX3JlbmFtZSh1MzIgcm9vdCwgc3RydWN0IHNoZmxfc3RyaW5nICpzcmNfcGF0aCxcbmZzL3Zib3hzZi92ZnNtb2QuaDoxMjQ6XHRcdCAgc3RydWN0IHNoZmxfc3RyaW5nICpkZXN0X3BhdGgsIHUzMiBmbGFncyk7XG5mcy92Ym94c2YvdmZzbW9kLmgtMTI1LVxuLS1cbmZzL3Zib3hzZi92ZnNtb2QuaD0xMjk9aW50IHZib3hzZl9kaXJpbmZvKHUzMiByb290LCB1NjQgaGFuZGxlLFxuZnMvdmJveHNmL3Zmc21vZC5oOjEzMDpcdFx0ICAgc3RydWN0IHNoZmxfc3RyaW5nICpwYXJzZWRfcGF0aCwgdTMyIGZsYWdzLCB1MzIgaW5kZXgsXG5mcy92Ym94c2YvdmZzbW9kLmgtMTMxLVx0XHQgICB1MzIgKmJ1Zl9sZW4sIHN0cnVjdCBzaGZsX2RpcmluZm8gKmJ1ZiwgdTMyICpmaWxlX2NvdW50KTtcbmZzL3Zib3hzZi92ZnNtb2QuaD0xMzI9aW50IHZib3hzZl9mc2luZm8odTMyIHJvb3QsIHU2NCBoYW5kbGUsIHUzMiBmbGFncyxcbi0tXG5mcy92Ym94c2YvdmZzbW9kLmgtMTM0LVxuZnMvdmJveHNmL3Zmc21vZC5oOjEzNTppbnQgdmJveHNmX21hcF9mb2xkZXIoc3RydWN0IHNoZmxfc3RyaW5nICpmb2xkZXJfbmFtZSwgdTMyICpyb290KTtcbmZzL3Zib3hzZi92ZnNtb2QuaC0xMzYtaW50IHZib3hzZl91bm1hcF9mb2xkZXIodTMyIHJvb3QpO1xuZnMvdmJveHNmL3Zmc21vZC5oLTEzNy1cbmZzL3Zib3hzZi92ZnNtb2QuaDoxMzg6aW50IHZib3hzZl9yZWFkbGluayh1MzIgcm9vdCwgc3RydWN0IHNoZmxfc3RyaW5nICpwYXJzZWRfcGF0aCxcbmZzL3Zib3hzZi92ZnNtb2QuaC0xMzktXHRcdCAgICB1MzIgYnVmX2xlbiwgdTggKmJ1Zik7XG5mcy92Ym94c2YvdmZzbW9kLmg6MTQwOmludCB2Ym94c2Zfc3ltbGluayh1MzIgcm9vdCwgc3RydWN0IHNoZmxfc3RyaW5nICpuZXdfcGF0aCxcbmZzL3Zib3hzZi92ZnNtb2QuaDoxNDE6XHRcdCAgIHN0cnVjdCBzaGZsX3N0cmluZyAqb2xkX3BhdGgsIHN0cnVjdCBzaGZsX2Zzb2JqaW5mbyAqYnVmKTtcbmZzL3Zib3hzZi92ZnNtb2QuaC0xNDItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NjYwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFN5emthbGxlci1UcmlnZ2VyZWQgVmJveHNmIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHN0cnVjdCBzaGZsX3N0cmluZ2AgYW5kIGl0cyBgbGVuZ3RoYCBhbmQgYHNpemVgIG1lbWJlcnMuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgc2FuaXR5IGNoZWNrIGluIGB2Ym94c2ZfZGlyX2VtaXRgOiBgaWYgKGluZm8tJmd0O25hbWUubGVuZ3RoICZndDsgaW5mby0mZ3Q7bmFtZS5zaXplKSByZXR1cm4gZmFsc2U7YC4gU3l6a2FsbGVyIGZvdW5kIHRoaXMsIHdoaWNoIG1lYW5zIGl0IHRyaWdnZXJlZCBhIHN0YXRlIHdoZXJlIHRoZSBzdHJpbmcmIzM5O3MgcmVwb3J0ZWQgbGVuZ3RoIGV4Y2VlZHMgaXRzIGFsbG9jYXRlZCBzaXplLiBUaGlzIGlzIGludGVyZXN0aW5nLgoKVGhlIHByb21wdCB0aGVuIHBvc2VzIGEgcXVlc3Rpb24gYWJvdXQgY29kZSBwYXRocyBkZWVtZWQgJiMzNDtpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLiYjMzQ7IFRoZSBrZXkgaXMgd2hldGhlciB0aGlzIHZ1bG5lcmFiaWxpdHkgZmFsbHMgaW50byB0aGF0IGNhdGVnb3J5LiBTaW5jZSBzeXprYWxsZXIgZm91bmQgaXQsIHRoZSBpbXBsaWNhdGlvbiBpcyB0aGF0IGl0JiMzOTtzICpyZWFjaGFibGUqLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBteSBjb25jZXJuLgoKSWYgc3l6a2FsbGVyIGlzIHJ1bm5pbmcgb24gVmlydHVhbEJveCwgYXMgaXRzIGB2bV90eXBlOiAmIzM0O3Zib3gmIzM0O2Agc3VnZ2VzdHMsIHRoZW4gdGhhdCBzZWVtcyBwb3NzaWJsZS4gVGhpcyBpcyB3aGVyZSBJIGhhdmUgdG8gc3RvcCBhbmQgYmUgcHJlY2lzZSB3aXRoIG15IHJlYWRpbmcuIElzIFZpcnR1YWxCb3ggY29uc2lkZXJlZCBhICYjMzQ7dmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVSYjMzQ7PyAqWWVzKiwgaXQgaXMuIEhvd2V2ZXIsIHRoZSB3b3JkaW5nIGNvdWxkIGJlIGludGVycHJldGVkIGFzICYjMzQ7aW1wb3NzaWJsZSB0byByZWFjaCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4mIzM0OwoKVGhlIG9yaWdpbmFsIHByb2JsZW0gY2VudGVycyBhcm91bmQgdGhlIFZpcnR1YWxCb3ggUENJIGRldmljZSwgYW5kIHRoZSBjb2RlIGNsZWFybHkgcmVsaWVzIG9uIGl0LiBJIHJlLXJlYWQgdGhlIHByb21wdDogJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zLi4uIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4uLiYjMzQ7IElmIGl0JiMzOTtzICpvbmx5KiByZWFjaGFibGUgaW4gVmlydHVhbEJveCBiZWNhdXNlIG9mIHRoaXMgUENJIGRlcGVuZGVuY3ksIHNob3VsZCBJIHJldHVybiBgZmFsc2VgPyBJdCBzZWVtcyBsaWtlIEkgc2hvdWxkLgoKSSBxdWlja2x5IGNoZWNrIHRoZSBvYnZpb3VzLiBUaGVyZSBpc24mIzM5O3QgYW55IGVtdWxhdGlvbiBvZiB0aGUgVmlydHVhbEJveCBQQ0kgZGV2aWNlIGluIFFFTVUgb3IgR0NFLiBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCB0aGUgYHZib3hzZl9maWxsX3N1cGVyYCBwYXRoIGNhbGxzIGB2Ym94c2ZfY29ubmVjdCgpYCwgd2hpY2ggdGhlbiBjYWxscyBgdmJnX2dldF9nZGV2KClgLCBhbmQgdGhhdCB0aGlzIHJldHVybnMgYC1FTk9ERVZgIGlmIHRoZSBQQ0kgZGV2aWNlIGlzbiYjMzk7dCBhdmFpbGFibGUuIFRoZXJlZm9yZSwgd2l0aG91dCB0aGUgVmlydHVhbEJveCBQQ0kgZGV2aWNlLCBpdCBzaG91bGQgYmUgaW1wb3NzaWJsZSB0byBtb3VudCB0aGUgZmlsZXN5c3RlbSBhbmQgdGh1cyBpbXBvc3NpYmxlIHRvIHJlYWNoIHRoYXQgcGFydGljdWxhciBjb2RlIHBhdGguCgpCdXQgd2FpdCwgc3l6a2FsbGVyICpmb3VuZCogaXQhIFNvIGhvdz8gVGhlbiBpdCBoaXQgbWU6IHN5emthbGxlciBoYXMgYSAmIzM0O3Zib3gmIzM0OyBWTSB0eXBlISBUaGUgaW1wbGljYXRpb24gaXMgdGhhdCBpdCYjMzk7cyBydW5uaW5nIGluc2lkZSBWaXJ0dWFsQm94LiBUaGF0IG1lYW5zIGl0ICpjYW4qIHJlYWNoIHRoaXMgY29kZSBwYXRoLCB3aGljaCBpcyBkaXJlY3RseSBjb250cmFkaWN0aW5nIHRoZSB3b3JkaW5nIG9mIHRoZSBwcm9tcHQsIGFzIFZpcnR1YWxCb3ggaXMgYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4KCk5vdyBJIGFtIGF0IGEgZm9yayBpbiB0aGUgcm9hZC4gRG9lcyB0aGUgcHJvbXB0JiMzOTtzIHBocmFzZSAmIzM0O2ltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUmIzM0OyBtZWFuICYjMzQ7aW1wb3NzaWJsZSB0byByZWFjaCBpbiAqYW55KiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwmIzM0OyBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWZpYyB0byAqc3RhbmRhcmQqIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBhcyBpdCBzZWVtcyB0byBiZSBpbXBseWluZz8gVG8gcmVzb2x2ZSB0aGlzLCBJIGhhdmUgdG8gYXNzdW1lIHRoZSBpbnRlbnQgaXMgZm9yIGhhcmR3YXJlLXNwZWNpZmljIGNvZGUgdGhhdCBjYW5ub3QgYmUgdGVzdGVkIGluIGEgVk0uIFRoYXQsIGhvd2V2ZXIsIGlzIG5vdCB0aGUgY2FzZSBoZXJlLCBhcyBgdmJveHNmYCBpcyAqc3BlY2lmaWNhbGx5KiBkZXNpZ25lZCB0byBiZSB0ZXN0ZWQgaW4gVk1zIChWaXJ0dWFsQm94KS4gVGhlIHByb21wdCAqbWVudGlvbnMqICYjMzQ7dmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsJiMzNDsgYnV0IFZpcnR1YWxCb3ggKmlzKiBvbmUgb2YgdGhvc2UgZW52aXJvbm1lbnRzLgoKSW4gdGhpcyBzY2VuYXJpbywgcmV0dXJuaW5nIGBmYWxzZWAgd291bGQgbWVhbiBpZ25vcmluZyBhIHBvdGVudGlhbGx5IHZhbGlkIGZpbGVzeXN0ZW0gYnVnIHRoYXQgc3l6a2FsbGVyIGNhbiBpbmRlZWQgZnV6eiB3aGVuIHJ1bm5pbmcgaW4gVmlydHVhbEJveC4gSXMgYHZib3hzZmAgd29ydGggZnV6emluZz8gWWVzLCBpdCYjMzk7cyBhIGZpbGVzeXN0ZW0sIHNvIGJ5IGRlZmF1bHQsIEkgc2hvdWxkIGNvbnNpZGVyIGl0IHdvcnRoIGZ1enppbmcuIFRoZSBjb25jbHVzaW9uLCB0aGVuLCBpcyB0aGF0ICppdCBpcyB3b3J0aCBmdXp6aW5nKiwgYW5kIHNvIEkmIzM5O2xsIG5lZWQgdG8gcmV0dXJuIGB0cnVlYC4KClNpbmNlIEkmIzM5O20gcmV0dXJuaW5nIGB0cnVlYCwgSSBuZWVkIHRvIHNwZWNpZnkgYEZvY3VzU3ltYm9sc2AgYW5kIGBFbmFibGVDb25maWdzYC4gYEZvY3VzU3ltYm9sc2Agd291bGQgaW5jbHVkZTogYHZib3hzZl9kaXJfZW1pdGAsIGB2Ym94c2ZfZGlyX3JlYWRfYWxsYCwgYW5kIHNvIG9uLiBgRW5hYmxlQ29uZmlnc2Agd291bGQgY29uc2lzdCBvZiBgVkJPWFNGX0ZTYCBhbmQgYFZCT1hHVUVTVGAuIEkgc2hvdWxkIGFsc28gY2hlY2sgdGhlIEtjb25maWcgZm9yIGB2Ym94c2ZgIHRvIGNvbmZpcm0gYWxsIG9mIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWQk9YU0ZfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy92Ym94c2YvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Zib3hzZi9LY29uZmlnOjE6Y29uZmlnIFZCT1hTRl9GU1xuZnMvdmJveHNmL0tjb25maWctMi1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWxCb3ggZ3Vlc3Qgc2hhcmVkIGZvbGRlciAodmJveHNmKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2Njc4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgVmlydHVhbEJveCBTaGFyZWQgRm9sZGVyIEtjb25maWcqKgoKQWxyaWdodCwgSSBzZWUgYSBicmVhZGNydW1iIC0gYGZzL3Zib3hzZi9LY29uZmlnYC4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIFZpcnR1YWxCb3ggc2hhcmVkIGZvbGRlcnMgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBhcmUgd2UgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaGVyZT8gQXJlIHdlIHRyYWNraW5nIGRvd24gYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHByb2JsZW0/IE9yIHBlcmhhcHMgbG9va2luZyB0byBvcHRpbWl6ZSB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgYSBzeXN0ZW0gdGhhdCBsZXZlcmFnZXMgVmlydHVhbEJveD8KCkkgZXhwZWN0IHRvIGZpbmQgYWxsIHRoZSB1c3VhbCBLY29uZmlnIGVsZW1lbnRzOiBgY29uZmlnYCBibG9ja3MgZGVmaW5pbmcgYm9vbGVhbiwgdHJpc3RhdGUsIG9yIHN0cmluZyBvcHRpb25zLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgaGVscCB0ZXh0LiBLZXkgYXJlYXMgb2YgaW50ZXJlc3Qgd2lsbCBiZToKCiogICAqKkRlcGVuZGVuY2llczoqKiBXaGF0IG90aGVyIGtlcm5lbCBmZWF0dXJlcyBvciBtb2R1bGVzIG5lZWQgdG8gYmUgZW5hYmxlZCBiZWZvcmUgYHZib3hzZmAgY2FuIGJlIGNvbmZpZ3VyZWQ/IFRoaXMgZ2l2ZXMgaW5zaWdodHMgaW50byB0aGUgb3ZlcmFsbCBzeXN0ZW0gcmVxdWlyZW1lbnRzLgoqICAgKipEZWZhdWx0IFZhbHVlczoqKiBBcmUgdGhlIGRlZmF1bHRzIHNlbnNpYmxlIGZvciBjb21tb24gdXNlIGNhc2VzPyBPciBtaWdodCB0aGVyZSBiZSBhIG5lZWQgdG8gb3ZlcnJpZGUgdGhlbSBmb3IgcGFydGljdWxhciBlbnZpcm9ubWVudHM/CiogICAqKkhlbHAgVGV4dDoqKiBJcyBpdCBjbGVhciB3aGF0IGVhY2ggb3B0aW9uIGRvZXM/IElzIHRoZSBkb2N1bWVudGF0aW9uIGNvbXByZWhlbnNpdmUgYW5kIGFjY3VyYXRlLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSByZWxhdGlvbnNoaXAgd2l0aCB0aGUgdW5kZXJseWluZyBWaXJ0dWFsQm94IGhvc3Q/CgpCYXNlZCBvbiB0aGUgc3RydWN0dXJlIGFuZCBjb250ZW50IG9mIHRoaXMgS2NvbmZpZywgSSBjYW4gZGV0ZXJtaW5lIHdoZXJlIGB2Ym94c2ZgIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSYjMzk7bGwgbG9vayBmb3IgaG93IHRoZSBtb2R1bGUgaW50ZXJhY3RzIHdpdGggZmlsZXN5c3RlbSB0eXBlcywgbmV0d29yayBpbnRlcmZhY2VzLCBhbmQgYW55IHNlY3VyaXR5IGNvbnRleHRzLiBJIHdpbGwgYWxzbyBtYWtlIG5vdGVzIGFib3V0IGhvdyB0byBtb2RpZnkgdGhlIGNvbmZpZ3VyYXRpb24gb3IgdHJvdWJsZXNob290IGl0cyBpbXBsZW1lbnRhdGlvbiBmb3IgYmV0dGVyIHVuZGVyc3RhbmRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvdmJveHNmL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHRjb25maWcgVkJPWFNGX0ZTXG4gICAyOlx0XHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsQm94IGd1ZXN0IHNoYXJlZCBmb2xkZXIgKHZib3hzZikgc3VwcG9ydFwmIzM0O1xuICAgMzpcdFx0ZGVwZW5kcyBvbiAoQVJNNjQgfHwgWDg2KSBcdTAwMjZcdTAwMjYgVkJPWEdVRVNUXG4gICA0Olx0XHRzZWxlY3QgTkxTXG4gICA1Olx0XHRoZWxwXG4gICA2Olx0XHQgIFZpcnR1YWxCb3ggaG9zdHMgY2FuIHNoYXJlIGZvbGRlcnMgd2l0aCBndWVzdHMsIHRoaXMgZHJpdmVyXG4gICA3Olx0XHQgIGltcGxlbWVudHMgdGhlIExpbnV4LWd1ZXN0IHNpZGUgb2YgdGhpcyBhbGxvd2luZyBmb2xkZXJzIGV4cG9ydGVkXG4gICA4Olx0XHQgIGJ5IHRoZSBob3N0IHRvIGJlIG1vdW50ZWQgdW5kZXIgTGludXguXG4gICA5Olx0XG4gIDEwOlx0XHQgIElmIHlvdSB3YW50IHRvIHVzZSBzaGFyZWQgZm9sZGVycyBpbiBWaXJ0dWFsQm94IGd1ZXN0cywgYW5zd2VyIFkgb3IgTS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcyMDkKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgYSBWaXJ0dWFsQm94LVNwZWNpZmljIEJ1ZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBWQk9YR1VFU1RgLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRoYXQgYEVuYWJsZUNvbmZpZ3NgIHNob3VsZCBpbmNsdWRlIGJvdGggYFZCT1hTRl9GU2AgYW5kIGBWQk9YR1VFU1RgIGJlY2F1c2UgaXQmIzM5O3MgcHJvYmFibHkgZGVwZW5kZW50IG9uIHRoYXQuIEJ1dCB0aGVuIEkgcmUtcmVhZCB0aGUgcHJvbXB0LiBJdCYjMzk7cyBzcGVjaWZpY2FsbHkgdGFsa2luZyBhYm91dCBjb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gZW52aXJvbm1lbnRzICpsaWtlKiBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIGVtdWxhdGVkIGhhcmR3YXJlLiBUaGUgcGhyYXNpbmcgaXMga2V5IOKAkyBtZW50aW9uaW5nICYjMzQ7bGlrZSBHQ0Ugb3IgUUVNVSYjMzQ7IG1ha2VzIG1lIHRoaW5rIHRoYXQgKmlmKiB0aGlzIGJ1ZyByZXF1aXJlcyBhIGh5cGVydmlzb3IgdGhhdCYjMzk7cyAqbm90KiBHQ0Ugb3IgUUVNVSwgdGhlbiBpdCYjMzk7cyBlZmZlY3RpdmVseSB1bnJlYWNoYWJsZSBpbiB0aGUgY29udGV4dCBvZiB0aGUgcHJvbXB0JiMzOTtzIGZvY3VzLgoKTXkgbWluZCB0aGVuIGdvZXMgdG8gU3l6a2FsbGVyIOKAkyBvdXIgcHJpbWFyeSBmdXp6aW5nIHRvb2wuIFN5emthbGxlciBydW5zIHByaW1hcmlseSBvbiBHQ0UgYW5kIFFFTVUuIElmIHRoaXMgYnVnIGxpdmVzIGluIGB2Ym94c2ZgLCB0aGF0IHNjcmVhbXMgVmlydHVhbEJveC1zcGVjaWZpYy4gQnV0IHdhaXQuLi4gRG9lcyBTeXprYWxsZXIgZXZlbiAqdXNlKiBWaXJ0dWFsQm94IGluc3RhbmNlcz8gSSByZW1lbWJlciB0aGVyZSAqaXMqIGEgYHZib3hgIFZNIHR5cGUgaW4gU3l6a2FsbGVyLCBidXQgaXQmIzM5O3MgZmFyIGxlc3MgY29tbW9uIHRoYW4gYHFlbXVgIG9yIGBnY2VgLgoKT2theSwgYnV0IGhhbmcgb24gYSBtaW51dGUuLi4gVGhlIGNvbW1pdCBtZXNzYWdlISBJdCBzYXlzICYjMzQ7c3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3JiMzNDsuIFRoYXQgbWVhbnMgU3l6a2FsbGVyICpkaWQqIGZpbmQgdGhpcyBidWcsIHdoaWNoIGltcGxpZXMgaXQmIzM5O3MgcmVhY2hhYmxlIHNvbWVob3cgd2l0aGluIFN5emthbGxlciYjMzk7cyBzZXR1cCEgVGhpcyBtZWFucyBJJiMzOTttIG1pc3Npbmcgc29tZXRoaW5nLiBNYXliZSBTeXprYWxsZXIgaGFzIGEgd2F5IHRvIGZ1enogYHZib3hzZmAgd2l0aG91dCBuZWVkaW5nIGFuIGFjdHVhbCBWaXJ0dWFsQm94IGluc3RhbmNlLiBTb21lIGtpbmQgb2YgZW11bGF0aW9uPyBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgaXMgc29tZSBgdmJveGd1ZXN0YCBlbXVsYXRpb24gaW4gdGhlIGtlcm5lbC4KCkxldCBtZSBzZWUuLi5JIHNlYXJjaGVkIGZvciB0aGUgdGVybSAmIzM0O2Zha2UmIzM0OyB0byB0cnkgYW5kIGZpbmQgYW55LCBidXQgbm90aGluZy4gV2hhdCBhYm91dCAmIzM0O2R1bW15PyYjMzQ7CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2R1bW15JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aXJ0L3Zib3hndWVzdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jPTQ2PXN0YXRpYyB2b2lkIHZiZ19ndWVzdF9tYXBwaW5nc19pbml0KHN0cnVjdCB2YmdfZGV2ICpnZGV2KVxuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy04MC1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYzo4MTpcdGdkZXYtXHUwMDNlZ3Vlc3RfbWFwcGluZ3NfZHVtbXlfcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0hJR0hVU0VSKTtcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYzo4MjpcdGlmICghZ2Rldi1cdTAwM2VndWVzdF9tYXBwaW5nc19kdW1teV9wYWdlKVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jLTgzLVx0XHRnb3RvIG91dDtcbi0tXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmMtODUtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAoc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7IGkmIzQzOyYjNDM7KVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jOjg2Olx0XHRwYWdlc1tpXSA9IGdkZXYtXHUwMDNlZ3Vlc3RfbWFwcGluZ3NfZHVtbXlfcGFnZTtcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy04Ny1cbi0tXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmMtMTE0LVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jOjExNTpcdC8qIE9uIGZhaWx1cmUgZnJlZSB0aGUgZHVtbXktcGFnZSBiYWNraW5nIHRoZSB2bWFwICovXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmMtMTE2LVx0aWYgKCFnZGV2LVx1MDAzZWd1ZXN0X21hcHBpbmdzKSB7XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmM6MTE3Olx0XHRfX2ZyZWVfcGFnZShnZGV2LVx1MDAzZWd1ZXN0X21hcHBpbmdzX2R1bW15X3BhZ2UpO1xuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jOjExODpcdFx0Z2Rldi1cdTAwM2VndWVzdF9tYXBwaW5nc19kdW1teV9wYWdlID0gTlVMTDtcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy0xMTktXHR9XG4tLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jPTEzMT1zdGF0aWMgdm9pZCB2YmdfZ3Vlc3RfbWFwcGluZ3NfZXhpdChzdHJ1Y3QgdmJnX2RldiAqZ2Rldilcbi0tXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmMtMTYyLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jOjE2MzpcdF9fZnJlZV9wYWdlKGdkZXYtXHUwMDNlZ3Vlc3RfbWFwcGluZ3NfZHVtbXlfcGFnZSk7XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmM6MTY0Olx0Z2Rldi1cdTAwM2VndWVzdF9tYXBwaW5nc19kdW1teV9wYWdlID0gTlVMTDtcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy0xNjUtfVxuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuaD02Nz1zdHJ1Y3QgdmJnX2RldiB7XG4tLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5oLTgwLVx0ICovXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmg6ODE6XHRzdHJ1Y3QgcGFnZSAqZ3Vlc3RfbWFwcGluZ3NfZHVtbXlfcGFnZTtcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuaC04Mi1cdHZvaWQgKmd1ZXN0X21hcHBpbmdzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODcwOAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDExOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgYSBWaXJ0dWFsQm94IEZpbGVzeXN0ZW0gQnVnKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiBpdCYjMzk7cyAmIzM0O1dvcnRoRnV6emluZyYjMzQ7LiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgaW4gdHlwaWNhbCBmdXp6aW5nIGVudmlyb25tZW50cy4gTm8gZHVtbXkgZGV2aWNlOyB0aGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGFib3V0IGB2Ym94c2ZgLCB0aGUgVmlydHVhbEJveCBzaGFyZWQgZm9sZGVyIGZpbGVzeXN0ZW0uIENhbiBJIG1vdW50IGl0IHdpdGhvdXQgYHZib3hndWVzdGA/IE5vLCBiZWNhdXNlIGB2Ym94c2ZfY29ubmVjdGAgbmVlZHMgYHZib3hndWVzdGAgdG8gYmUgcHJvYmVkLiBJdCBjYWxscyBgdmJnX2dldF9nZGV2YCwgd2hpY2ggcmV0dXJucyBhbiBlcnJvciBpZiBgdmJnX2dkZXZgIGlzIE5VTEwuIFNvLCBpdCYjMzk7cyBzdHJpY3RseSBkZXBlbmRlbnQgb24gdGhlIGB2Ym94Z3Vlc3RgIFBDSSBkcml2ZXIsIHdoaWNoIGJpbmRzIHRvIGBQQ0lfVkVORE9SX0lEX1ZCT1hgIGFuZCBgUENJX0RFVklDRV9JRF9WQk9YX0dVRVNUYC4KClRoZSBuZXh0IHRob3VnaHQgaXMgd2hldGhlciBzeXprYWxsZXIgY2FuIGluamVjdCB0aGlzIFBDSSBkZXZpY2UuIERvZXMgaXQgaGF2ZSBzb21ldGhpbmcgbGlrZSBgc3l6X3BjaV9hZGRgPyBBY3R1YWxseSwgaXQgKmRvZXMqIGhhdmUgc29tZXRoaW5nIHNpbWlsYXI/IExldCYjMzk7cyBjaGVjayBmb3IgUENJIGluamVjdGlvbiBtZWNoYW5pc21zIGluIHRoZSBrZXJuZWwuIEkga25vdyBhYm91dCBgQ09ORklHX1BDSV9FTkRQT0lOVF9URVNUYCwgYHZmaW9gLCBhbmQgYHBjaV9zdHViYCwgYnV0IHN5emthbGxlciBkb2VzbiYjMzk7dCB0eXBpY2FsbHkgdXNlIHRoZXNlIHRvIGVtdWxhdGUgYXJiaXRyYXJ5IFBDSSBkZXZpY2VzLiBXYWl0ISBTeXprYWxsZXIgKmRvZXMqIGhhdmUgYHN5el9rdm1gLCB3aGljaCBjYW4gcnVuIGEgbmVzdGVkIFZNLiBCdXQgdGhlIHByb2JsZW0gaXMsIGB2Ym94Z3Vlc3RgIGlzbiYjMzk7dCBhIEtWTSBkZXZpY2UuCgpTbywgaG93IGRpZCBzeXprYWxsZXIgZmluZCB0aGlzIGJ1Zz8gTWF5YmUgaXQgd2FzIHJ1bm5pbmcgaW4gYSBWaXJ0dWFsQm94IFZNPyBBbmQgeWVzLCBzeXprYWxsZXIgZG9lcyBzdXBwb3J0IFZpcnR1YWxCb3guIElmIHN5emthbGxlciBzdXBwb3J0cyBWaXJ0dWFsQm94LCB0aGVuIGl0IGlzIHJlYWNoYWJsZSBpbiBzeXprYWxsZXIuIEF0IGZpcnN0LCBJJiMzOTttIHRoaW5raW5nLCBzaG91bGQgSSByZXR1cm4gYFdvcnRoRnV6emluZz10cnVlYD8gSXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIGZpbGVzeXN0ZW0gZHJpdmVyLCBzbyBpdCBzZWVtcyBsaWtlIGl0JiMzOTtzIHdvcnRoIGl0LgoKQnV0IHRoZSBwcm9tcHQgd2FudHMgbWUgdG8gYmUgY2FyZWZ1bCwgaXQgc2F5cyAmIzM0O0NvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSYjMzQ7LiBJZiB0aGUgcHJvbXB0IG1lbnRpb25zICYjMzQ7bGlrZSBHQ0Ugb3IgUUVNVSYjMzQ7LCBpdCYjMzk7cyBwcm9iYWJseSB0YWxraW5nIGFib3V0IHN0YW5kYXJkIGNsb3VkIG9yIFFFTVUgVk1zLiBJZiBJIHJldHVybiBmYWxzZSwgSSBhbSBzYXlpbmcgaXQgaXMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBzdGFuZGFyZCBWTXMuIEJ1dCB3YWl0LCB3aGF0IGlmIHN5emthbGxlciAqY2FuKiByZWFjaCBpdCBpbiBRRU1VPyBIb3c/CgpJcyB0aGVyZSBhIHdheSB0byB0cmlnZ2VyIGB2Ym94c2ZfZGlyX2VtaXRgIHdpdGhvdXQgbW91bnRpbmcgYHZib3hzZmA/IE5vLCBpdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbiBhbmQgYSBjYWxsYmFjayBpbiBgdmJveHNmX2Rpcl9mb3BzYC4gVGhhdCBtZWFucyBpdCBtdXN0IGJlIG1vdW50ZWQsIHRoZSBzYW1lIHdheSBhIG5vcm1hbCBmaWxlc3lzdGVtIG11c3QgYmUgbW91bnRlZCB0byBhY2Nlc3MgaXRzIGRpcmVjdG9yeS4gYHZib3hzZl9kaXJfaXRlcmF0ZWAgY2FsbHMgYHZib3hzZl9kaXJfZW1pdGAsIHNvIGl0IG11c3QgYmUgbW91bnRlZC4gQW5kIHRvIG1vdW50IGB2Ym94c2ZgLCBJIG5lZWQgYHZib3hzZl9maWxsX3N1cGVyYCB0byBzdWNjZWVkLiBUaGF0IGRlcGVuZHMgb24gYHZib3hzZl9jb25uZWN0YCwgd2hpY2ggbmVlZHMgYHZiZ19nZXRfZ2RldmAgdG8gcmV0dXJuIGEgdmFsaWQgcG9pbnRlci4gVGhhdCwgaW4gdHVybiwgZGVwZW5kcyBvbiBgdmJnX3BjaV9wcm9iZWAgc3VjY2VlZGluZywgd2hpY2ggcmVxdWlyZXMgdGhlIFBDSSBkZXZpY2UgMHg4MGVlOjB4Y2FmZSB0byBiZSBwcmVzZW50LgoKSXMgdGhpcyBQQ0kgZGV2aWNlIHByZXNlbnQgaW4gUUVNVT8gV2FpdCEgUUVNVSAqZG9lcyogaGF2ZSBhIGB2Ym94Z3Vlc3RgIGRldmljZT8gTGV0JiMzOTtzIGNoZWNrIHRoZSBRRU1VIHNvdXJjZSBjb2RlLi4uIEkgY2FuJiMzOTt0IGNoZWNrIHRoZSBzb3VyY2UgcmlnaHQgbm93LiBCdXQgd2FpdCwgUUVNVSBoYXMgYSBgdmJveGAgZGlzcGxheSBkZXZpY2U/IE5vLCBRRU1VIHN1cHBvcnRzIFZpcnR1YWxCb3ggYC52ZGlgIGRpc2sgaW1hZ2VzLCBidXQgaXQgZG9lc24mIzM5O3QgZW11bGF0ZSB0aGUgYHZib3hndWVzdGAgUENJIGRldmljZS4KCk9rYXksIHdoYXQgaWYgc3l6a2FsbGVyIHVzZXMgYHN5el9tb3VudF9pbWFnZWAsIGFuZCB0aGUgYnVnIGlzIGluIGB2Ym94c2ZfZGlyX2VtaXRgLCB0cmlnZ2VyZWQgYnkgcmVhZGluZyBhIGRpcmVjdG9yeT8gQnV0IGB2Ym94c2ZgIGlzIG5vdCBpbWFnZS1iYXNlZCwgcmlnaHQ/IEl0IG1vdW50cyB3aXRoIGBtb3VudCAtdCB2Ym94c2YgJmx0O2ZvbGRlciZndDsgJmx0O21vdW50cG9pbnQmZ3Q7YC4gVGhlcmVmb3JlLCBgc3l6X21vdW50X2ltYWdlYCBjYW5ub3QgYmUgdXNlZC4gU28sIGhvdyBkaWQgc3l6a2FsbGVyIGRpc2NvdmVyIHRoaXM/IFN5emthbGxlciBtdXN0IGJlIHJ1bm5pbmcgaW4gVmlydHVhbEJveCEKCklmIHN5emthbGxlciBydW5zIGluIFZpcnR1YWxCb3gsIGl0JiMzOTtzIHJlYWNoYWJsZSBpbiB0aGF0IHNwZWNpZmljIGVudmlyb25tZW50LiBEb2VzIHRoZSBwcm9tcHQgd2FudCBtZSB0byByZXR1cm4gdHJ1ZSBvciBmYWxzZT8gJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOiAuLi4gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlJiMzNDsuIElmIGl0JiMzOTtzIGltcG9zc2libGUgaW4gR0NFIG9yIFFFTVUsIEkgc2hvdWxkIHJldHVybiBmYWxzZS4KCkJ1dCB3YWl0LCBpcyBpdCByZWFsbHkgaW1wb3NzaWJsZT8gWWVzLCBpdCByZXF1aXJlcyBWaXJ0dWFsQm94LCB0aGUgcHJvbXB0IG1lbnRpb25zIEdDRSBvciBRRU1VLiBCdXQgaWYgc3l6a2FsbGVyIGZvdW5kIGl0LCBtYXliZSBpdCBJUyByZWFjaGFibGUgaW4gUUVNVT8gSG93PwoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OzB4ODBlZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2xvbnRpdW0tbHQ5NjExLmM9MTA4ND1zdGF0aWMgaW50IGx0OTYxMV9yZWFkX2RldmljZV9yZXYoc3RydWN0IGx0OTYxMSAqbHQ5NjExKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbG9udGl1bS1sdDk2MTEuYy0xMDg4LVxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9sb250aXVtLWx0OTYxMS5jOjEwODk6XHRyZWdtYXBfd3JpdGUobHQ5NjExLVx1MDAzZXJlZ21hcCwgMHg4MGVlLCAweDAxKTtcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbG9udGl1bS1sdDk2MTEuYy0xMDkwLVx0cmV0ID0gcmVnbWFwX3JlYWQobHQ5NjExLVx1MDAzZXJlZ21hcCwgMHg4MDAyLCBcdTAwMjZyZXYpO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbG9udGl1bS1sdDk2MTF1eGMuYz0xMjM9c3RhdGljIHZvaWQgbHQ5NjExdXhjX2xvY2soc3RydWN0IGx0OTYxMXV4YyAqbHQ5NjExdXhjKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbG9udGl1bS1sdDk2MTF1eGMuYy0xMjUtXHRtdXRleF9sb2NrKFx1MDAyNmx0OTYxMXV4Yy1cdTAwM2VvY21fbG9jayk7XG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2xvbnRpdW0tbHQ5NjExdXhjLmM6MTI2Olx0cmVnbWFwX3dyaXRlKGx0OTYxMXV4Yy1cdTAwM2VyZWdtYXAsIDB4ODBlZSwgMHgwMSk7XG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2xvbnRpdW0tbHQ5NjExdXhjLmMtMTI3LX1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2xvbnRpdW0tbHQ5NjExdXhjLmM9MTI5PXN0YXRpYyB2b2lkIGx0OTYxMXV4Y191bmxvY2soc3RydWN0IGx0OTYxMXV4YyAqbHQ5NjExdXhjKVxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9sb250aXVtLWx0OTYxMXV4Yy5jLTEzMC17XG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2xvbnRpdW0tbHQ5NjExdXhjLmM6MTMxOlx0cmVnbWFwX3dyaXRlKGx0OTYxMXV4Yy1cdTAwM2VyZWdtYXAsIDB4ODBlZSwgMHgwMCk7XG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2xvbnRpdW0tbHQ5NjExdXhjLmMtMTMyLVx0bXNsZWVwKDUwKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vdmJveHZpZGVvL3Zib3hfZHJ2LmM9MzU9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaWlkbGlzdFtdID0ge1xuZHJpdmVycy9ncHUvZHJtL3Zib3h2aWRlby92Ym94X2Rydi5jOjM2Olx0eyBQQ0lfREVWSUNFKDB4ODBlZSwgMHhiZWVmKSB9LFxuZHJpdmVycy9ncHUvZHJtL3Zib3h2aWRlby92Ym94X2Rydi5jLTM3LVx0eyB9XG4tLVxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2FmOTAzM19wcml2Lmg9MTM0MD1zdGF0aWMgY29uc3Qgc3RydWN0IHJlZ192YWwgdHVuZXJfaW5pdF9pdDkxMzVfNjBbXSA9IHtcbi0tXG5kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvYWY5MDMzX3ByaXYuaC0xNDUyLVx0eyAweDgwZWQwMiwgMHg0MCB9LFxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2FmOTAzM19wcml2Lmg6MTQ1MzpcdHsgMHg4MGVlNDIsIDB4NDAgfSxcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9hZjkwMzNfcHJpdi5oOjE0NTQ6XHR7IDB4ODBlZTgyLCAweDQwIH0sXG5kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvYWY5MDMzX3ByaXYuaC0xNDU1LVx0eyAweDgwZjAwMCwgMHgwZiB9LFxuLS1cbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9hZjkwMzNfcHJpdi5oPTE1NTY9c3RhdGljIGNvbnN0IHN0cnVjdCByZWdfdmFsIHR1bmVyX2luaXRfaXQ5MTM1XzYxW10gPSB7XG4tLVxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2FmOTAzM19wcml2LmgtMTY2OC1cdHsgMHg4MGVkMDIsIDB4NDAgfSxcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9hZjkwMzNfcHJpdi5oOjE2Njk6XHR7IDB4ODBlZTQyLCAweDQwIH0sXG5kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvYWY5MDMzX3ByaXYuaDoxNjcwOlx0eyAweDgwZWU4MiwgMHg0MCB9LFxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2FmOTAzM19wcml2LmgtMTY3MS1cdHsgMHg4MGYwMDAsIDB4MGYgfSxcbi0tXG5kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvYWY5MDMzX3ByaXYuaD0xNzcyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnX3ZhbCB0dW5lcl9pbml0X2l0OTEzNV82MltdID0ge1xuLS1cbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9hZjkwMzNfcHJpdi5oLTE4ODUtXHR7IDB4ODBlZDAyLCAweGZmIH0sXG5kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvYWY5MDMzX3ByaXYuaDoxODg2Olx0eyAweDgwZWU0MiwgMHhmZiB9LFxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2FmOTAzM19wcml2Lmg6MTg4NzpcdHsgMHg4MGVlODIsIDB4ZmYgfSxcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9hZjkwMzNfcHJpdi5oLTE4ODgtXHR7IDB4ODBmMDAwLCAweDBmIH0sXG4tLVxuZHJpdmVycy9tZWRpYS90dW5lcnMvaXQ5MTN4LmM9MjA3PXN0YXRpYyBpbnQgaXQ5MTN4X3NldF9wYXJhbXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpXG4tLVxuZHJpdmVycy9tZWRpYS90dW5lcnMvaXQ5MTN4LmMtMzIyLVx0LyogWFhYOiBsYXRlc3Qgd2luZG93cyBkcml2ZXIgZG9lcyBub3Qgc2V0IHRoYXQgYXQgYWxsICovXG5kcml2ZXJzL21lZGlhL3R1bmVycy9pdDkxM3guYzozMjM6XHRyZXQgPSByZWdtYXBfd3JpdGUoZGV2LVx1MDAzZXJlZ21hcCwgMHg4MGVlMDYsIGxuYV9iYW5kKTtcbmRyaXZlcnMvbWVkaWEvdHVuZXJzL2l0OTEzeC5jLTMyNC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy0yMi0vKiogVmlydHVhbEJveCBQQ0kgdmVuZG9yIElELiAqL1xuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzoyMzojZGVmaW5lIFZCT1hfVkVORE9SSURcdFx0MHg4MGVlXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTI0LS8qKiBWTU1EZXYgUENJIGNhcmQgcHJvZHVjdCBJRC4gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI1MjEKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYHZib3hndWVzdGAgRW11bGF0aW9uIFBvc3NpYmlsaXRpZXMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBgdmJveGd1ZXN0YCBhbmQgdGhvc2Ugc3BlY2lmaWMgYWRkcmVzc2VzIGl0IHVzZXMsIGAweDgwZWVgIGFuZCBgMHhjYWZlYC4gVGhlIGtleSBoZXJlIGlzIHRoYXQgdGhlcmUmIzM5O3Mgbm8gc29mdHdhcmUgZW11bGF0b3IgZm9yIGl0IGJha2VkIGludG8gdGhlIGtlcm5lbCBpdHNlbGYuIFRoaXMgbWVhbnMsIGFzIGZhciBhcyBJIHVuZGVyc3RhbmQsIGRpcmVjdGx5IGhpdHRpbmcgdGhhdCBjb2RlIHBhdGggdGhyb3VnaCBlaXRoZXIgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgaXMgYSBub24tc3RhcnRlci4KCkJ1dCwgaG9sZCBvbi4uLiBpZiBzeXprYWxsZXIgY291bGQgdXNlIHNvbWV0aGluZyBsaWtlIGBzeXpfcGNpX2FkZGAsIHRoYXQgbWlnaHQgY2hhbmdlIHRoZSBnYW1lLiBUaGF0IHdvdWxkIGJlIGEgd2F5IHRvIGNyZWF0ZSB0aGUgY29ycmVjdCBlbnZpcm9ubWVudC4gTm93LCBkb2VzIHN5emthbGxlciAqYWN0dWFsbHkqIGhhdmUgYSBzeXN0ZW0gY2FsbCBsaWtlIHRoYXQ/IFdhaXQsIGhhbmcgb24uLi4gSSBrbm93IHN5emthbGxlciBoYXMgYSBQQ0kgZnV6emVyLi4uIFNvLCB0aGVyZSAqbXVzdCogYmUgc29tZSB3YXkgdG8gaW5qZWN0IFBDSS1yZWxhdGVkIGFjdGlvbnMuLi4KCk9rYXksIEkmIzM5O20gc2Vjb25kLWd1ZXNzaW5nIG15c2VsZi4gSXQgZG9lc24mIzM5O3QgbG9vayBsaWtlIHRoZXJlJiMzOTtzIGFuIGV4cGxpY2l0IGBzeXpfcGNpX2FkZGAuIEkmIzM5O20gcmVtZW1iZXJpbmcgYHN5el91c2JfY29ubmVjdGAgZm9yIFVTQiwgYHN5el84MDIxMV9pbmplY3RfZnJhbWVgIGZvciB3aWZpLCBgc3l6X2dlbmV0bGlua19nZXRfZmFtaWx5X2lkYCBmb3IgbmV0bGluazsgdGhvc2UgYXJlIHNpbWlsYXIgaW5qZWN0aW9uIHByaW1pdGl2ZXMuIEZvciBQQ0ksIGl0IGhhcyBgc3l6X2t2bV9zZXR1cF9jcHVgLCB3aGljaCByZWxhdGVzIHRvIEtWTS4gVGhpcyBoYXMgbWUgdGhpbmtpbmcuCgpJIGFtIG5vdyBnb2luZyB0byBtYWtlIGEgZGVmaW5pdGl2ZSBjaGVjayAtIGNvdWxkIHRoZXJlIGJlIGEgYHN5el9wY2lgIGZ1bmN0aW9uLCBvciBzb21ldGhpbmcgc2ltaWxhciwgdGhhdCBJJiMzOTttIGp1c3QgYmxhbmtpbmcgb24/IE9rYXksIHRpbWUgdG8gbG9vayBmb3IgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gUENJIGluIHN5emthbGxlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzeXpfcGNpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDMxNDYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMTUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRnV6emluZyBXb3J0aGluZXNzIG9mIGEgYHZib3hzZmAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRoZSBxdWVzdGlvbiBvZiB3aGV0aGVyIGl0JiMzOTtzIHdvcnRoIGZ1enppbmcuIFRoZSBrZXkgaXMgdGhpczogdGhlIHBhdGNoIHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gYHZib3hzZmAsIHdoaWNoIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIGFzIHRoZSBWaXJ0dWFsQm94IHNoYXJlZCBmb2xkZXIgZmlsZXN5c3RlbS4gTm93LCB0aGUgcHJvbXB0IHNheXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBjb2RlIHBhdGggaXMgJiMzNDtpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLiYjMzQ7IE15IGluaXRpYWwgdGhvdWdodCBpcywgd2FpdCwgaG93IGRpZCBzeXprYWxsZXIgZXZlbiBmaW5kIHRoaXM/IEkga25vdyBzeXprYWxsZXIgY2FuJiMzOTt0IGluamVjdCBQQ0kgZGV2aWNlcyBkaXJlY3RseS4gVGhlbiBpdCBoaXRzIG1lOiBzeXprYWxsZXIgaGFzIGEgYHZib3hgIFZNIHR5cGUhIEJpbmdvLiBJZiBzeXprYWxsZXIgaXMgcnVubmluZyBvbiBWaXJ0dWFsQm94LCB0aGVuLCB5ZXMsIGl0ICpjYW4qIHJlYWNoIHRoaXMgY29kZS4KCkJ1dCB0aGF0IHByb21wdCBrZWVwcyByaW5naW5nIGluIG15IGVhcnMuIEl0IGV4cGxpY2l0bHkgbmFtZXMgR0NFIGFuZCBRRU1VLiBWaXJ0dWFsQm94ICppcyogYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgYnV0IGlzIGl0ICpsaWtlKiBHQ0Ugb3IgUUVNVSBpbiB0aGUgY29udGV4dCBvZiBzdGFuZGFyZCBmdXp6aW5nIGluZnJhc3RydWN0dXJlPyBHQ0UgYW5kIFFFTVUgYXJlIHRoZSBub3JtIGZvciBzb21ldGhpbmcgbGlrZSBzeXpib3QsIHJpZ2h0PyBTbyBpZiB0aGlzIGlzIFZpcnR1YWxCb3gtc3BlY2lmaWMsIGlzIHRoYXQgd2hhdCB0aGV5IG1lYW4/IEFuZCBpZiBpdCYjMzk7cyBpbiBgdmJveHNmYCwgSSYjMzk7bSBndWVzc2luZyBpdCBjYW4gb25seSBiZSBmdXp6ZWQgaWYgdGhlIGZ1enplciBydW5zIGluIFZpcnR1YWxCb3guIERvZXMgc3l6Ym90IGhhdmUgaW5zdGFuY2VzIGluIFZpcnR1YWxCb3g/IEkgZG9uJiMzOTt0ICp0aGluayogc28uIEkmIzM5O2QgYXNzdW1lIHRoZSBzeXotY2x1c3RlciBjb21taXQgYXV0aG9yIGlzIGEgcmVkIGhlcnJpbmcuIEl0JiMzOTtzIGp1c3QgYSBnZW5lcmljIGxhYmVsLgoKT2theSwgbGV0JiMzOTtzIGJhY2sgdXAuIElmIGl0ICppcyogcmVhY2hhYmxlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqaG93Ki4gQ2FuIEkgYnlwYXNzIGB2Ym94c2ZfY29ubmVjdGA/IEkgcXVpY2tseSByZXRyYWNlIHRoZSBjYWxscyBhbmQgc2VlIHRoYXQgYHZib3hzZl9maWxsX3N1cGVyYCBjYWxscyBpdC4gYHZib3hzZl9jb25uZWN0YCBjYWxscyBgdmJnX2dldF9nZGV2YCwgd2hpY2ggcmV0dXJucyBgdmJnX2dkZXZgLCB3aGljaCBpcyBzZXQgaW4gYHZiZ19wY2lfcHJvYmVgLiBOb3cgd2UgYXJlIGF0IHRoZSBQQ0kgbGV2ZWwuIGB2YmdfcGNpX3Byb2JlYCBpcyBjYWxsZWQgd2hlbiBhIGRldmljZSB3aXRoIHZlbmRvciBJRCAweDgwZWUgYW5kIGRldmljZSBJRCAweGNhZmUgaXMgZm91bmQsIHdoaWNoIGlzIFZpcnR1YWxCb3gmIzM5O3MgZ3Vlc3QgZGV2aWNlLiBDYW4gSSBmYWtlIHRoYXQgaW4gUUVNVT8gSSBrbm93IFFFTVUgKmNhbiogZW11bGF0ZSBkZXZpY2VzLiBEb2VzIGl0IGVtdWxhdGUgdGhlIFZpcnR1YWxCb3ggZ3Vlc3QgZGV2aWNlPyBJIGNhbiYjMzk7dCBjaGVjayB0aGUgUUVNVSBzb3VyY2UgcmlnaHQgbm93LCBidXQgSSBkb24mIzM5O3QgKnRoaW5rKiBzby4gT3IgbWF5YmUgc3l6a2FsbGVyIGlzIHVzaW5nIFVNTD8gT3IgYSBmYWtlIFBDSSBkcml2ZXI/CgpJIGtub3cgdGhlcmUgaXMgYSBgcGNpX3N0dWJgIGRyaXZlciwgYnV0IGl0IGRvZXNuJiMzOTt0IGNyZWF0ZSBmYWtlIGRldmljZXMuIFdoYXQgYWJvdXQgYENPTkZJR19QQ0lfRU5EUE9JTlRfVEVTVGA/IE1heWJlIHN5el9tb3VudF9pbWFnZT8gTm8uIFdhaXQhIElmIHN5emthbGxlciBmb3VuZCB0aGlzIGJ1ZywgaXQgKmlzKiByZWFjaGFibGUgc29tZWhvdywgd2hpY2ggbWFrZXMgbWUgdGhpbmsgYmFjayB0byB0aGUgcHJvbXB0LgoKU28gdGhlIHByb21wdCBpcyBjbGVhcmx5IHRlbGxpbmcgbWUgdG8gcmV0dXJuIGZhbHNlIGlmIGl0JiMzOTtzICppbXBvc3NpYmxlKiB0byByZWFjaCBpbiBHQ0Ugb3IgUUVNVS4gU2luY2UgdGhpcyByZXF1aXJlcyBWaXJ0dWFsQm94LCBpdCYjMzk7cyBpbXBvc3NpYmxlLiBCdXQgaXMgdGhpcyBhIHRyaWNrPyBEb2VzIFFFTVUgKmFjdHVhbGx5KiBlbXVsYXRlIHRoZSBWaXJ0dWFsQm94IGd1ZXN0IGRldmljZT8gQSBxdWljayBtZW50YWwgc2VhcmNoIGNvbmZpcm1zOiBOby4gVmlydHVhbEJveCBndWVzdCBhZGRpdGlvbnMgYXJlIHNwZWNpZmljIHRvIFZpcnR1YWxCb3guCgpDb3VsZCBzeXprYWxsZXIgYmUgcnVubmluZyBHQ0UsIGJ1dCB1c2luZyBuZXN0ZWQgdmlydHVhbGl6YXRpb24gdG8gcnVuIFZpcnR1YWxCb3ggKndpdGhpbiogdGhhdD8gUG9zc2libGUsIGJ1dCB0aGF0JiMzOTtzIHdpbGRseSB1bmxpa2VseSBmb3IgYSBzdGFuZGFyZCBmdXp6aW5nIHNldHVwLiBUaGVuIGl0IGhpdHMgbWUuIFRoZSBwcm9tcHQgd29yZGluZzogJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4mIzM0OyBJdCBQRVJGRUNUTFkgZGVzY3JpYmVzIGB2Ym94c2ZgIGFuZCBgdmJveGd1ZXN0YC4gVGhlcmUgaXNuJiMzOTt0IHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIGZvciB0aGVtLCBsaWtlIGB1c2IgZ2FkZ2V0YCBvciBgbWFjODAyMTFfaHdzaW1gLiBUaGV5ICpyZXF1aXJlKiB0aGUgVmlydHVhbEJveCBoeXBlcnZpc29yLgoKQWxyaWdodCwgYWZ0ZXIgdGhpcyBkZXRhaWxlZCBtZW50YWwgd2Fsa3Rocm91Z2gsIEkgTVVTVCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIEp1c3QgdG8gYmUgc3VyZSwgSSB3aWxsIHF1aWNrbHkgdmVyaWZ5IHRoZXJlIGlzIG5vIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIGZvciBgdmJveGd1ZXN0YCwgYnV0IEkgYW0gc3VyZSB0aGVyZSBpcyBub25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zib3hndWVzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3Rvb2xzL3Rlc3RpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDUyMzIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZyBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBUZXN0IENvdmVyYWdlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBmb3IgcmVsZXZhbnQgdGVzdGluZyBjb2RlLCBwcm9iYWJseSBmb3IgYSBuZXcgZmVhdHVyZSBvciB0byBkZWJ1ZyBzb21ldGhpbmcuIEkgc3RhcnRlZCBieSBjaGVja2luZyB0aGUgYHRvb2xzL3Rlc3RpbmcvYCBkaXJlY3RvcnksIHdoaWNoIGlzIHVzdWFsbHkgdGhlIGdvLXRvIGxvY2F0aW9uIGZvciBvdXIgdGVzdCBpbmZyYXN0cnVjdHVyZSBhbmQgcmVsYXRlZCBzY3JpcHRzLiBCdXQuLi4gbm90aGluZy4gTm8gbWF0Y2hlcyBhdCBhbGwuIFRoaXMgaXMgZWl0aGVyIGV4cGVjdGVkLCBvciB1bmV4cGVjdGVkLiBJdCBjb3VsZCBtZWFuIHRoZSByZWxldmFudCB0ZXN0cyBhcmUgbG9jYXRlZCBzb21ld2hlcmUgZWxzZSwgbWF5YmUgaW4gYSBtb2R1bGUgc3BlY2lmaWMgdGVzdCBmb2xkZXIsIG9yIHRoYXQgdGhleSBhcmUgbWFuYWdlZCBpbiBhIGRpZmZlcmVudCB3YXkuIEkgbmVlZCB0byB3aWRlbiB0aGUgc2VhcmNoIHNjb3BlIGFuZCBjb25zaWRlciBvdGhlciBsb2NhdGlvbnMuIEkgc2hvdWxkIGFsc28gdGhpbmsgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zIG9mIG5vIGV4aXN0aW5nIHRlc3Rpbmc7IG1heWJlIGl0JiMzOTtzIHRvbyBlYXJseSB0byBsb29rIGF0IHRlc3RpbmcgYXMgb2YgeWV0LiBJJiMzOTtsbCBuZWVkIG1vcmUgaW5mb3JtYXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgbmV4dCBzdGVwcyBhbmQgbWFrZSBhbnkgZGVjaXNpb25zIGFib3V0IHRlc3QgZGVzaWduIGFuZC9vciBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2Ym94Z3Vlc3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3BjaS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTQ2NwoJCQkJCQkJb3V0cHV0OiAxMjcKCQkJCQkJCXRob3VnaHRzOiA2OTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgUmVhc29uaW5nIGZvciBGaWx0ZXJpbmcgdGhpcyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBjaGVja2VkIGZvciBhbnkgc29mdHdhcmUgZW11bGF0b3JzIGZvciBgdmJveGd1ZXN0YCB3aXRoaW4gYGRyaXZlcnMvcGNpL2AsIGFuZCB0aGVyZSBhcmUgbm9uZS4gVGhhdCBtZWFucyB0aGlzIGRyaXZlciAqc3RyaWN0bHkqIGRlcGVuZHMgb24gdGhlIFZpcnR1YWxCb3ggaHlwZXJ2aXNvci4KClRoZSBwcm9tcHQgaXMgY3J5c3RhbCBjbGVhcjogSSBuZWVkIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiBhIHBhdGNoIGFmZmVjdHMgY29kZSB0aGF0IGlzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdpdGggc29mdHdhcmUgZW11bGF0ZWQgaGFyZHdhcmUuIGB2Ym94c2ZgLCB0aGUgVmlydHVhbEJveCBHdWVzdCBTaGFyZWQgRm9sZGVyLCBpcyBleGFjdGx5IHRoYXQga2luZCBvZiBjb2RlLiBJdCBhYnNvbHV0ZWx5IHJlcXVpcmVzIHRoZSBWaXJ0dWFsQm94IGh5cGVydmlzb3IgYmVjYXVzZSB0aGVyZSYjMzk7cyBubyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSBlcXVpdmFsZW50LiBUaGVyZWZvcmUsIEkgd2FzIGluaXRpYWxseSBjb25maWRlbnQgdGhhdCB0aGlzIHBhdGNoIHdvdWxkIGluZGVlZCBiZSBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCkhvd2V2ZXIsIGEgcXVpY2sgdGhvdWdodDogY291bGQgc3l6a2FsbGVyLCB0aGUgZnV6emVyLCBoYXZlIHBvc3NpYmx5IGZvdW5kIHNvbWV0aGluZyBpbiBWaXJ0dWFsQm94PyBFdmVuIGlmIGl0IGRpZCwgdGhlIHByb21wdCBleHBsaWNpdGx5IHRlbGxzIG1lIHRvIGlnbm9yZSB0aGF0IHBvc3NpYmlsaXR5IGJlY2F1c2UgdGhlIGZ1enppbmcgaW5mcmFzdHJ1Y3R1cmUgdGhhdCB0aGlzIEFJIGlzIG9wZXJhdGluZyBmb3IgbW9zdCBsaWtlbHkgdXNlcyBHQ0Ugb3IgUUVNVSwgYW5kIHRoZXkgZG8gbm90IHdhbnQgdG8gd2FzdGUgY3ljbGVzIGZ1enppbmcgVmlydHVhbEJveC1zcGVjaWZpYyBjb2RlIHRoYXQgdGhleSBjYW5ub3QgcmVhY2guIFRoaXMgbWFrZXMgcGVyZmVjdCBzZW5zZTsgdGhlIGdvYWwgaGVyZSBpcyB0byBmaWx0ZXIgcGF0Y2hlcyB0aGF0IGNhbiYjMzk7dCBiZSB0ZXN0ZWQgd2l0aCB0aGUgY3VycmVudCBpbmZyYXN0cnVjdHVyZS4KCkkmIzM5O3ZlIGNyYWZ0ZWQgYSBjb21wcmVoZW5zaXZlIGV4cGxhbmF0aW9uOiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVmlydHVhbEJveCBHdWVzdCBTaGFyZWQgRm9sZGVyICh2Ym94c2YpIGZpbGVzeXN0ZW0gZHJpdmVyLiBUaGlzIGZpbGVzeXN0ZW0gcmVsaWVzIG9uIHRoZSBWaXJ0dWFsQm94IGd1ZXN0IFBDSSBkZXZpY2UgKHZib3hndWVzdCkgZm9yIG1vdW50aW5nIGFuZCBjb21tdW5pY2F0aW9uIHdpdGggdGhlIGhvc3QuIFNpbmNlIHRoaXMgZGV2aWNlIGlzIGV4Y2x1c2l2ZWx5IHByb3ZpZGVkIGJ5IHRoZSBWaXJ0dWFsQm94IGh5cGVydmlzb3IsIGFuZCBubyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSBleGlzdHMgZm9yIGl0IGluIHRoZSBrZXJuZWwsIHRoaXMgY29kZSBwYXRoIGlzIHVucmVhY2hhYmxlIGFuZCB1bi1mdXp6YWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4mIzM0OwoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O3ZlIGR1ZyBpbnRvIHRoZSBjb2RlLiBJIGZvbGxvd2VkIHRoZSBtb3VudCBwYXRoOiBgdmJveHNmX2ZpbGxfc3VwZXJgIC0mZ3Q7IGB2Ym94c2ZfY29ubmVjdGAgLSZndDsgYHZiZ19nZXRfZ2RldmAuIEkgc2VlIHRoYXQgYHZiZ19nZXRfZ2RldmAgcmV0dXJucyBgLUVOT0RFVmAgaWYgYHZiZ19nZGV2YCBpcyBOVUxMLiBUaGlzIGlzIHNldCAqb25seSogd2l0aGluIGB2YmdfcGNpX3Byb2JlYC4gVGhpcyBQQ0kgcHJvYmUgZnVuY3Rpb24gb25seSBnZXRzIGNhbGxlZCB3aGVuIHRoZSBQQ0kgZGV2aWNlIGAweDgwZWU6MHhjYWZlYCBnZXRzIHByb2JlZC4gU28sIGl0JiMzOTtzIGEgaGFyZCByZXF1aXJlbWVudCB0byBoYXZlIHRoYXQgVmlydHVhbEJveCBQQ0kgZGV2aWNlIHByZXNlbnQgdG8gbW91bnQgYHZib3hzZmAuCgpJIGV2ZW4gY2hlY2tlZCBpZiB0aGVyZSB3YXMgYW5vdGhlciB3YXkgdG8gcmVhY2ggc29tZSBmdW5jdGlvbnMgaW5zaWRlLCBsaWtlIGB2Ym94c2ZfZGlyX2VtaXRgLiBJdCBpcyBhIHN0YXRpYyBmdW5jdGlvbiBpbiBgZnMvdmJveHNmL2Rpci5jYC4gSXQmIzM5O3Mgb25seSByZWZlcmVuY2VkIGluIGB2Ym94c2ZfZGlyX2l0ZXJhdGVgIGFuZCBgdmJveHNmX2Rpcl9mb3BzYC4gYHZib3hzZl9kaXJfZm9wc2AgaXMgb25seSB1c2VkIGZvciBkaXJlY3RvcnkgaW5vZGVzLiBEaXJlY3RvcnkgaW5vZGVzIGFyZSBvbmx5IGNyZWF0ZWQgd2hlbiBgdmJveHNmYCBpcyBtb3VudGVkLiBTbywgSSBoYXZlIHRvIGhhdmUgaXQgbW91bnRlZC4KClllcywgdGhlcmUgaXMgbm8gd2F5IHRvIHJlYWNoIHRoaXMgY29kZSBpbiBHQ0Ugb3IgUUVNVS4KClRoZXJlZm9yZSwgdGhlIGNvbmNsdXNpb24gaXMgY2xlYXIuIEkgd2lsbCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFZpcnR1YWxCb3ggR3Vlc3QgU2hhcmVkIEZvbGRlciAodmJveHNmKSBmaWxlc3lzdGVtIGRyaXZlci4gVGhpcyBmaWxlc3lzdGVtIHN0cmljdGx5IHJlcXVpcmVzIHRoZSBWaXJ0dWFsQm94IGd1ZXN0IFBDSSBkZXZpY2UgKHZib3hndWVzdCkgdG8gYmUgcHJlc2VudCBhbmQgaW5pdGlhbGl6ZWQgaW4gb3JkZXIgdG8gbW91bnQgYW5kIGNvbW11bmljYXRlIHdpdGggdGhlIGhvc3QuIFNpbmNlIHRoaXMgZGV2aWNlIGlzIG9ubHkgcHJvdmlkZWQgYnkgdGhlIFZpcnR1YWxCb3ggaHlwZXJ2aXNvciBhbmQgdGhlcmUgaXMgbm8gc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgZm9yIGl0IGluIHRoZSBrZXJuZWwsIHRoaXMgY29kZSBwYXRoIGlzIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1enogaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVmlydHVhbEJveCBHdWVzdCBTaGFyZWQgRm9sZGVyICh2Ym94c2YpIGZpbGVzeXN0ZW0gZHJpdmVyLiBUaGlzIGZpbGVzeXN0ZW0gc3RyaWN0bHkgcmVxdWlyZXMgdGhlIFZpcnR1YWxCb3ggZ3Vlc3QgUENJIGRldmljZSAodmJveGd1ZXN0KSB0byBiZSBwcmVzZW50IGFuZCBpbml0aWFsaXplZCBpbiBvcmRlciB0byBtb3VudCBhbmQgY29tbXVuaWNhdGUgd2l0aCB0aGUgaG9zdC4gU2luY2UgdGhpcyBkZXZpY2UgaXMgb25seSBwcm92aWRlZCBieSB0aGUgVmlydHVhbEJveCBoeXBlcnZpc29yIGFuZCB0aGVyZSBpcyBubyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSBmb3IgaXQgaW4gdGhlIGtlcm5lbCwgdGhpcyBjb2RlIHBhdGggaXMgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgZnV6eiBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzo0ODoyNC4wOTI4MjQ1MjRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjg2NTU0MTQ1MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBWaXJ0dWFsQm94IEd1ZXN0IFNoYXJlZCBGb2xkZXIgKHZib3hzZikgZmlsZXN5c3RlbSBkcml2ZXIuIFRoaXMgZmlsZXN5c3RlbSBzdHJpY3RseSByZXF1aXJlcyB0aGUgVmlydHVhbEJveCBndWVzdCBQQ0kgZGV2aWNlICh2Ym94Z3Vlc3QpIHRvIGJlIHByZXNlbnQgYW5kIGluaXRpYWxpemVkIGluIG9yZGVyIHRvIG1vdW50IGFuZCBjb21tdW5pY2F0ZSB3aXRoIHRoZSBob3N0LiBTaW5jZSB0aGlzIGRldmljZSBpcyBvbmx5IHByb3ZpZGVkIGJ5IHRoZSBWaXJ0dWFsQm94IGh5cGVydmlzb3IgYW5kIHRoZXJlIGlzIG5vIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIGZvciBpdCBpbiB0aGUga2VybmVsLCB0aGlzIGNvZGUgcGF0aCBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCBmdXp6IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NDg6MjQuMDkyODMwNjg0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjAxNTgwMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxZDkzMDZjMDgxZDFhMTg5NDU1NjJmYmUxM2RlY2Q4ZDFhYmNkYmVlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDEwIDIzOjQ4OjIyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL3Zib3hzZi9kaXIuYyBiL2ZzL3Zib3hzZi9kaXIuY1xcbmluZGV4IDQyYmVkYzRlYzdhZjc3Li43MDJkMjQzMTY5OTM2NCAxMDA2NDRcXG4tLS0gYS9mcy92Ym94c2YvZGlyLmNcXG4rKysgYi9mcy92Ym94c2YvZGlyLmNcXG5AQCAtMTI5LDYgKzEyOSw4IEBAIHN0YXRpYyBib29sIHZib3hzZl9kaXJfZW1pdChzdHJ1Y3QgZmlsZSAqZGlyLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcXG4gXFx0XFx0ZW5kID0gXFx1MDAyNmluZm8tXFx1MDAzZW5hbWUuc3RyaW5nLnV0ZjhbaW5mby1cXHUwMDNlbmFtZS5zaXplXTtcXG4gXFx0XFx0aWYgKFdBUk5fT04oZW5kIFxcdTAwM2UgKGItXFx1MDAzZWJ1ZiArIGItXFx1MDAzZXVzZWQpKSlcXG4gXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRcXHRpZiAoaW5mby1cXHUwMDNlbmFtZS5sZW5ndGggXFx1MDAzZSBpbmZvLVxcdTAwM2VuYW1lLnNpemUpXFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuIFxcdFxcdC8qIEluZm8gbm93IHBvaW50cyB0byB0aGUgcmlnaHQgZW50cnksIGVtaXQgaXQuICovXFxuIFxcdFxcdGRfdHlwZSA9IHZib3hzZl9nZXRfZF90eXBlKGluZm8tXFx1MDAzZWluZm8uYXR0ci5tb2RlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NDg6MjQuNjEzNjg1ODUzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjgxMzQ1NDMxMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBWaXJ0dWFsQm94IEd1ZXN0IFNoYXJlZCBGb2xkZXIgKHZib3hzZikgZmlsZXN5c3RlbSBkcml2ZXIuIFRoaXMgZmlsZXN5c3RlbSBzdHJpY3RseSByZXF1aXJlcyB0aGUgVmlydHVhbEJveCBndWVzdCBQQ0kgZGV2aWNlICh2Ym94Z3Vlc3QpIHRvIGJlIHByZXNlbnQgYW5kIGluaXRpYWxpemVkIGluIG9yZGVyIHRvIG1vdW50IGFuZCBjb21tdW5pY2F0ZSB3aXRoIHRoZSBob3N0LiBTaW5jZSB0aGlzIGRldmljZSBpcyBvbmx5IHByb3ZpZGVkIGJ5IHRoZSBWaXJ0dWFsQm94IGh5cGVydmlzb3IgYW5kIHRoZXJlIGlzIG5vIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIGZvciBpdCBpbiB0aGUga2VybmVsLCB0aGlzIGNvZGUgcGF0aCBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCBmdXp6IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxZDkzMDZjMDgxZDFhMTg5NDU1NjJmYmUxM2RlY2Q4ZDFhYmNkYmVlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMTAgMjM6NDg6MjIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy92Ym94c2YvZGlyLmMgYi9mcy92Ym94c2YvZGlyLmNcbmluZGV4IDQyYmVkYzRlYzdhZjc3Li43MDJkMjQzMTY5OTM2NCAxMDA2NDRcbi0tLSBhL2ZzL3Zib3hzZi9kaXIuY1xuKysrIGIvZnMvdmJveHNmL2Rpci5jXG5AQCAtMTI5LDYgKzEyOSw4IEBAIHN0YXRpYyBib29sIHZib3hzZl9kaXJfZW1pdChzdHJ1Y3QgZmlsZSAqZGlyLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcbiBcdFx0ZW5kID0gXHUwMDI2aW5mby1cdTAwM2VuYW1lLnN0cmluZy51dGY4W2luZm8tXHUwMDNlbmFtZS5zaXplXTtcbiBcdFx0aWYgKFdBUk5fT04oZW5kIFx1MDAzZSAoYi1cdTAwM2VidWYgKyBiLVx1MDAzZXVzZWQpKSlcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdGlmIChpbmZvLVx1MDAzZW5hbWUubGVuZ3RoIFx1MDAzZSBpbmZvLVx1MDAzZW5hbWUuc2l6ZSlcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRcdC8qIEluZm8gbm93IHBvaW50cyB0byB0aGUgcmlnaHQgZW50cnksIGVtaXQgaXQuICovXG4gXHRcdGRfdHlwZSA9IHZib3hzZl9nZXRfZF90eXBlKGluZm8tXHUwMDNlaW5mby5hdHRyLm1vZGUpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NDg6MjQuNjEzNjg3MzczWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjExNDE5MjQ4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBWaXJ0dWFsQm94IEd1ZXN0IFNoYXJlZCBGb2xkZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBmcy92Ym94c2YvZGlyLmNgLiBUaGUgY2hhbmdlIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGl0J3MgYWRkaW5nIGEgbGVuZ3RoIGNoZWNrIGluIGB2Ym94c2ZfZGlyX2VtaXRgLCBzcGVjaWZpY2FsbHkgYGlmIChpbmZvLVx1MDAzZW5hbWUubGVuZ3RoIFx1MDAzZSBpbmZvLVx1MDAzZW5hbWUuc2l6ZSkgcmV0dXJuIGZhbHNlO2AuIFNlZW1zIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIHZib3hzZiBmaWxlc3lzdGVtIGRyaXZlciwgd2hpY2ggaXMgcGFydCBvZiBWaXJ0dWFsQm94J3MgR3Vlc3QgU2hhcmVkIEZvbGRlcnMgZmVhdHVyZS5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiB3ZSBldmVuICpyZWFjaCogdGhpcyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmU/IFZib3hzZiBpcyByZWFsbHkgZGVzaWduZWQgZm9yIFZpcnR1YWxCb3ggZ3Vlc3RzLCByaWdodD8gSXQgcmVsaWVzIG9uIGNvbW11bmljYXRpb24gd2l0aCB0aGUgaG9zdCwgdHlwaWNhbGx5IHRocm91Z2ggYSBWaXJ0dWFsQm94LXNwZWNpZmljIFBDSSBkZXZpY2Ugb3Igc29tZXRoaW5nIHNpbWlsYXIsIGxpa2UgVk1NRGV2LiBJIG5lZWQgdG8gY29uZmlybSB0aGF0LlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgZGVlcGVyIGludG8gdGhlIGNvZGUuIEknbGwgY2hlY2sgYm90aCBgZnMvdmJveHNmL2AgYW5kIGBkcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L2AuIElmIGl0J3MgdGlnaHRseSBjb3VwbGVkIHdpdGggVmlydHVhbEJveCwgdGhlcmUncyBhIGdvb2QgY2hhbmNlIGl0IHdvbid0IHdvcmsgaW4gYSBzdGFuZGFyZCBRRU1VL0dDRSBzZXR1cCB1bmxlc3Mgd2UncmUgZW11bGF0aW5nIHRoZSBWaXJ0dWFsQm94IGd1ZXN0IGRldmljZS5cblxuTm93IEknbSB3b25kZXJpbmcgaWYgc3l6a2FsbGVyIGNvdWxkIGZ1enogdGhpcy4gU3l6a2FsbGVyIHVzdWFsbHkgcnVucyBpbiBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIGFuZCBHQ0UsIGJ1dCBpdCdzIG5vdCBzZXQgdXAgdG8gZW11bGF0ZSBWaXJ0dWFsQm94IGd1ZXN0IGRldmljZXMgb3V0IG9mIHRoZSBib3guIEJ1dCwgY291bGQgaXQgc3RpbGwgbW91bnQgYW5kIGludGVyYWN0IHdpdGggaXQgYXMgYSBmaWxlc3lzdGVtP1xuXG5ObywgSSB0aGluayBJJ20gd3JvbmcgdGhlcmUuIGB2Ym94c2ZgIG5lZWRzIHRoZSBgdmJveGd1ZXN0YCBkcml2ZXIsIGFuZCB0aGF0IHJlcXVpcmVzIHRoZSBWaXJ0dWFsQm94IFBDSSBkZXZpY2UgdG8gYmUgcHJlc2VudCBhbmQgaW5pdGlhbGl6ZWQuIEl0J3MgYmVjb21pbmcgY2xlYXIgdGhhdCB0aGlzIG1pZ2h0IG5vdCBiZSBpbW1lZGlhdGVseSBmdXp6ZWFibGUgd2l0aCBjb21tb24gc2V0dXBzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBhY3R1YWxseSBtb3VudGVkIHRvIGJlIHN1cmUuIExldCdzIGxvb2sgYXQgYGZzL3Zib3hzZi9zdXBlci5jYCB0byBzZWUgaG93IHRoYXQgaGFwcGVucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg1NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjQ4OjMwLjcyNzg4MjYwMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzAxMDk5MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmJveHNmX2ZpbGxfc3VwZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvdmJveHNmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy92Ym94c2Yvc3VwZXIuYz01ND1zdGF0aWMgaW50IHZib3hzZl9wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKVxcbi0tXFxuZnMvdmJveHNmL3N1cGVyLmMtMTEwLVxcbmZzL3Zib3hzZi9zdXBlci5jOjExMTpzdGF0aWMgaW50IHZib3hzZl9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5mcy92Ym94c2Yvc3VwZXIuYy0xMTIte1xcbi0tXFxuZnMvdmJveHNmL3N1cGVyLmM9Mzg2PXN0YXRpYyBpbnQgdmJveHNmX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL3Zib3hzZi9zdXBlci5jLTM5My1cXG5mcy92Ym94c2Yvc3VwZXIuYzozOTQ6XFx0cmV0dXJuIGdldF90cmVlX25vZGV2KGZjLCB2Ym94c2ZfZmlsbF9zdXBlcik7XFxuZnMvdmJveHNmL3N1cGVyLmMtMzk1LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NDg6MzAuODU3OTk5NzVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjI3MDQwODUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB1bmZvbGRzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBWaXJ0dWFsQm94IFNoYXJlZCBGb2xkZXJzIEZpbGVzeXN0ZW0qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGB2Ym94c2ZgIHRoaW5nLiBJIHJlbWVtYmVyIHNlZWluZyBgdmJveHNmX2ZpbGxfc3VwZXJgIGluIHRoZSBrZXJuZWwgc291cmNlLiBSaWdodCwgbGV0J3Mgc3RhcnQgdGhlcmUuIE15IGd1dCB0ZWxscyBtZSB0aGlzIGlzIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgYWN0dWFsbHkgbW91bnRpbmcgdGhlIGZpbGVzeXN0ZW0sIHNvIGl0J3MgYSBnb29kIGVudHJ5IHBvaW50LiBJJ2xsIG5lZWQgdG8gbG9vayBpbiBgZnMvdmJveHNmL3N1cGVyLmNgLiBUaGF0IGZpbGUgc2hvdWxkIGNvbnRhaW4gdGhlIHN1cGVyYmxvY2sgb3BlcmF0aW9ucywgYW5kIGB2Ym94c2ZfZmlsbF9zdXBlcmAgaXMgZGVmaW5pdGVseSBhIGtleSBwYXJ0IG9mIHRoYXQuIExldCdzIHNlZSB3aGF0J3MgZ29pbmcgb24gaW4gdGhlcmUgYW5kIHdvcmsgYmFjayBmcm9tIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODI2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NDg6MzMuNDg1MDQyOTU0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2NzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3Zib3hzZi9zdXBlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDExMTpcXHRzdGF0aWMgaW50IHZib3hzZl9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4gMTEyOlxcdHtcXG4gMTEzOlxcdFxcdHN0cnVjdCB2Ym94c2ZfZnNfY29udGV4dCAqY3R4ID0gZmMtXFx1MDAzZWZzX3ByaXZhdGU7XFxuIDExNDpcXHRcXHRzdHJ1Y3Qgc2hmbF9zdHJpbmcgKmZvbGRlcl9uYW1lLCByb290X3BhdGg7XFxuIDExNTpcXHRcXHRzdHJ1Y3QgdmJveHNmX3NiaSAqc2JpO1xcbiAxMTY6XFx0XFx0c3RydWN0IGRlbnRyeSAqZHJvb3Q7XFxuIDExNzpcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlyb290O1xcbiAxMTg6XFx0XFx0Y2hhciAqbmxzX25hbWU7XFxuIDExOTpcXHRcXHRzaXplX3Qgc2l6ZTtcXG4gMTIwOlxcdFxcdGludCBlcnI7XFxuIDEyMTpcXHRcXG4gMTIyOlxcdFxcdGlmICghZmMtXFx1MDAzZXNvdXJjZSlcXG4gMTIzOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAxMjQ6XFx0XFxuIDEyNTpcXHRcXHRzYmkgPSBremFsbG9jX29iaigqc2JpKTtcXG4gMTI2OlxcdFxcdGlmICghc2JpKVxcbiAxMjc6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDEyODpcXHRcXG4gMTI5OlxcdFxcdHNiaS1cXHUwMDNlbyA9IGN0eC1cXHUwMDNlbztcXG4gMTMwOlxcdFxcdGlkcl9pbml0KFxcdTAwMjZzYmktXFx1MDAzZWlub19pZHIpO1xcbiAxMzE6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnNiaS1cXHUwMDNlaW5vX2lkcl9sb2NrKTtcXG4gMTMyOlxcdFxcdHNiaS1cXHUwMDNlbmV4dF9nZW5lcmF0aW9uID0gMTtcXG4gMTMzOlxcdFxcdHNiaS1cXHUwMDNlYmRpX2lkID0gLTE7XFxuIDEzNDpcXHRcXG4gMTM1OlxcdFxcdC8qIExvYWQgbmxzIGlmIG5vdCB1dGY4ICovXFxuIDEzNjpcXHRcXHRubHNfbmFtZSA9IGN0eC1cXHUwMDNlbmxzX25hbWUgPyBjdHgtXFx1MDAzZW5sc19uYW1lIDogdmJveHNmX2RlZmF1bHRfbmxzO1xcbiAxMzc6XFx0XFx0aWYgKHN0cmNtcChubHNfbmFtZSwgXFxcInV0ZjhcXFwiKSAhPSAwKSB7XFxuIDEzODpcXHRcXHRcXHRpZiAobmxzX25hbWUgPT0gdmJveHNmX2RlZmF1bHRfbmxzKVxcbiAxMzk6XFx0XFx0XFx0XFx0c2JpLVxcdTAwM2VubHMgPSBsb2FkX25sc19kZWZhdWx0KCk7XFxuIDE0MDpcXHRcXHRcXHRlbHNlXFxuIDE0MTpcXHRcXHRcXHRcXHRzYmktXFx1MDAzZW5scyA9IGxvYWRfbmxzKG5sc19uYW1lKTtcXG4gMTQyOlxcdFxcbiAxNDM6XFx0XFx0XFx0aWYgKCFzYmktXFx1MDAzZW5scykge1xcbiAxNDQ6XFx0XFx0XFx0XFx0dmJnX2VycihcXFwidmJveHNmOiBDb3VudCBub3QgbG9hZCAnJXMnIG5sc1xcXFxuXFxcIiwgbmxzX25hbWUpO1xcbiAxNDU6XFx0XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4gMTQ2OlxcdFxcdFxcdFxcdGdvdG8gZmFpbF9kZXN0cm95X2lkcjtcXG4gMTQ3OlxcdFxcdFxcdH1cXG4gMTQ4OlxcdFxcdH1cXG4gMTQ5OlxcdFxcbiAxNTA6XFx0XFx0c2JpLVxcdTAwM2ViZGlfaWQgPSBpZGFfYWxsb2MoXFx1MDAyNnZib3hzZl9iZGlfaWRhLCBHRlBfS0VSTkVMKTtcXG4gMTUxOlxcdFxcdGlmIChzYmktXFx1MDAzZWJkaV9pZCBcXHUwMDNjIDApIHtcXG4gMTUyOlxcdFxcdFxcdGVyciA9IHNiaS1cXHUwMDNlYmRpX2lkO1xcbiAxNTM6XFx0XFx0XFx0Z290byBmYWlsX2ZyZWU7XFxuIDE1NDpcXHRcXHR9XFxuIDE1NTpcXHRcXG4gMTU2OlxcdFxcdGVyciA9IHN1cGVyX3NldHVwX2JkaV9uYW1lKHNiLCBcXFwidmJveHNmLSVkXFxcIiwgc2JpLVxcdTAwM2ViZGlfaWQpO1xcbiAxNTc6XFx0XFx0aWYgKGVycilcXG4gMTU4OlxcdFxcdFxcdGdvdG8gZmFpbF9mcmVlO1xcbiAxNTk6XFx0XFx0c2ItXFx1MDAzZXNfYmRpLVxcdTAwM2VyYV9wYWdlcyA9IDA7XFxuIDE2MDpcXHRcXHRzYi1cXHUwMDNlc19iZGktXFx1MDAzZWlvX3BhZ2VzID0gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NDg6MzMuNDg1MTYyMTU0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjI4NzMxNzc1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHZib3hzZl9maWxsX3N1cGVyYCBmdW5jdGlvbi4gSSBuZWVkIGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgd29ya3MuIEkgd2FudCB0byBzZWUgcHJlY2lzZWx5IGhvdyB0aGUgdmlydHVhbGJveCBzaGFyZWQgZm9sZGVyIGZpbGUgc3lzdGVtIGlzIGluaXRpYWxpemVkLiBUaGlzIGlzIGEgY3JpdGljYWwgY29tcG9uZW50IGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBndWVzdCBPUy4gVW5kZXJzdGFuZGluZyB0aGlzIGZpbGxzIGluIHRoZSBnYXBzIGZvciB0aGUgc2hhcmVkIGZvbGRlciBmdW5jdGlvbmFsaXR5IGFuZCBob3cgdGhlIGZpbGVzeXN0ZW0gaXMgbW91bnRlZCBhbmQgbWFuYWdlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg1NywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NDg6MzUuNzcyNDgzMjU3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3Zib3hzZi9zdXBlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2MSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE2MTpcXHRcXG4gMTYyOlxcdFxcdC8qIFR1cm4gc291cmNlIGludG8gYSBzaGZsX3N0cmluZyBhbmQgbWFwIHRoZSBmb2xkZXIgKi9cXG4gMTYzOlxcdFxcdHNpemUgPSBzdHJsZW4oZmMtXFx1MDAzZXNvdXJjZSkgKyAxO1xcbiAxNjQ6XFx0XFx0Zm9sZGVyX25hbWUgPSBrbWFsbG9jKFNIRkxTVFJJTkdfSEVBREVSX1NJWkUgKyBzaXplLCBHRlBfS0VSTkVMKTtcXG4gMTY1OlxcdFxcdGlmICghZm9sZGVyX25hbWUpIHtcXG4gMTY2OlxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuIDE2NzpcXHRcXHRcXHRnb3RvIGZhaWxfZnJlZTtcXG4gMTY4OlxcdFxcdH1cXG4gMTY5OlxcdFxcdGZvbGRlcl9uYW1lLVxcdTAwM2VzaXplID0gc2l6ZTtcXG4gMTcwOlxcdFxcdGZvbGRlcl9uYW1lLVxcdTAwM2VsZW5ndGggPSBzaXplIC0gMTtcXG4gMTcxOlxcdFxcdHN0cnNjcHkoZm9sZGVyX25hbWUtXFx1MDAzZXN0cmluZy51dGY4LCBmYy1cXHUwMDNlc291cmNlLCBzaXplKTtcXG4gMTcyOlxcdFxcdGVyciA9IHZib3hzZl9tYXBfZm9sZGVyKGZvbGRlcl9uYW1lLCBcXHUwMDI2c2JpLVxcdTAwM2Vyb290KTtcXG4gMTczOlxcdFxcdGtmcmVlKGZvbGRlcl9uYW1lKTtcXG4gMTc0OlxcdFxcdGlmIChlcnIpIHtcXG4gMTc1OlxcdFxcdFxcdHZiZ19lcnIoXFxcInZib3hzZjogSG9zdCByZWplY3RlZCBtb3VudCBvZiAnJXMnIHdpdGggZXJyb3IgJWRcXFxcblxcXCIsXFxuIDE3NjpcXHRcXHRcXHRcXHRmYy1cXHUwMDNlc291cmNlLCBlcnIpO1xcbiAxNzc6XFx0XFx0XFx0Z290byBmYWlsX2ZyZWU7XFxuIDE3ODpcXHRcXHR9XFxuIDE3OTpcXHRcXG4gMTgwOlxcdFxcdHJvb3RfcGF0aC5sZW5ndGggPSAxO1xcbiAxODE6XFx0XFx0cm9vdF9wYXRoLnNpemUgPSAyO1xcbiAxODI6XFx0XFx0cm9vdF9wYXRoLnN0cmluZy51dGY4WzBdID0gJy8nO1xcbiAxODM6XFx0XFx0cm9vdF9wYXRoLnN0cmluZy51dGY4WzFdID0gMDtcXG4gMTg0OlxcdFxcdGVyciA9IHZib3hzZl9zdGF0KHNiaSwgXFx1MDAyNnJvb3RfcGF0aCwgXFx1MDAyNnNiaS1cXHUwMDNlcm9vdF9pbmZvKTtcXG4gMTg1OlxcdFxcdGlmIChlcnIpXFxuIDE4NjpcXHRcXHRcXHRnb3RvIGZhaWxfdW5tYXA7XFxuIDE4NzpcXHRcXG4gMTg4OlxcdFxcdHNiLVxcdTAwM2VzX21hZ2ljID0gVkJPWFNGX1NVUEVSX01BR0lDO1xcbiAxODk6XFx0XFx0c2ItXFx1MDAzZXNfYmxvY2tzaXplID0gMTAyNDtcXG4gMTkwOlxcdFxcdHNiLVxcdTAwM2VzX21heGJ5dGVzID0gTUFYX0xGU19GSUxFU0laRTtcXG4gMTkxOlxcdFxcdHNiLVxcdTAwM2VzX29wID0gXFx1MDAyNnZib3hzZl9zdXBlcl9vcHM7XFxuIDE5MjpcXHRcXHRzZXRfZGVmYXVsdF9kX29wKHNiLCBcXHUwMDI2dmJveHNmX2RlbnRyeV9vcHMpO1xcbiAxOTM6XFx0XFxuIDE5NDpcXHRcXHRpcm9vdCA9IGlnZXRfbG9ja2VkKHNiLCAwKTtcXG4gMTk1OlxcdFxcdGlmICghaXJvb3QpIHtcXG4gMTk2OlxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuIDE5NzpcXHRcXHRcXHRnb3RvIGZhaWxfdW5tYXA7XFxuIDE5ODpcXHRcXHR9XFxuIDE5OTpcXHRcXHR2Ym94c2ZfaW5pdF9pbm9kZShzYmksIGlyb290LCBcXHUwMDI2c2JpLVxcdTAwM2Vyb290X2luZm8sIGZhbHNlKTtcXG4gMjAwOlxcdFxcdHVubG9ja19uZXdfaW5vZGUoaXJvb3QpO1xcbiAyMDE6XFx0XFxuIDIwMjpcXHRcXHRkcm9vdCA9IGRfbWFrZV9yb290KGlyb290KTtcXG4gMjAzOlxcdFxcdGlmICghZHJvb3QpIHtcXG4gMjA0OlxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuIDIwNTpcXHRcXHRcXHRnb3RvIGZhaWxfdW5tYXA7XFxuIDIwNjpcXHRcXHR9XFxuIDIwNzpcXHRcXG4gMjA4OlxcdFxcdHNiLVxcdTAwM2VzX3Jvb3QgPSBkcm9vdDtcXG4gMjA5OlxcdFxcdHNiLVxcdTAwM2VzX2ZzX2luZm8gPSBzYmk7XFxuIDIxMDpcXHRcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NDg6MzUuNzcyNjM1NjM3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjY5NjIyMTYwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgdmJveHNmX21hcF9mb2xkZXJgKipcblxuT2theSwgc28gYHZib3hzZl9tYXBfZm9sZGVyYCBoYXMgcG9wcGVkIHVwIGluIG15IHdvcmsuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIHVuZGVyc3RhbmQgaXRzIG9yaWdpbi4gV2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBkZWZpbmVkPyBJIG5lZWQgdG8gdHJhY2UgaXRzIGltcGxlbWVudGF0aW9uIHRvIGdyYXNwIGl0cyBwdXJwb3NlLCBhcmd1bWVudHMsIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIga2VybmVsIGNvbXBvbmVudHMuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UgY29kZSBhbmQgc3RhcnQgdHJhY2tpbmcgaXQgZG93bi4gSSdtIGFzc3VtaW5nIGl0J3MgcmVsYXRlZCB0byBWaXJ0dWFsQm94J3Mgc2hhcmVkIGZvbGRlcnMsIGJ1dCBhIGNvbmNyZXRlIGRlZmluaXRpb24gd2lsbCBwcm92aWRlIGNydWNpYWwgY29udGV4dCBmb3IgbXkgY3VycmVudCB0YXNrLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZGlnIHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODAwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzo0ODozOC40Njg4NTk2ODlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTk4MjE4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2Ym94c2ZfbWFwX2ZvbGRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy92Ym94c2YvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Zib3hzZi9zdXBlci5jPTExMT1zdGF0aWMgaW50IHZib3hzZl9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL3Zib3hzZi9zdXBlci5jLTE3MS1cXHRzdHJzY3B5KGZvbGRlcl9uYW1lLVxcdTAwM2VzdHJpbmcudXRmOCwgZmMtXFx1MDAzZXNvdXJjZSwgc2l6ZSk7XFxuZnMvdmJveHNmL3N1cGVyLmM6MTcyOlxcdGVyciA9IHZib3hzZl9tYXBfZm9sZGVyKGZvbGRlcl9uYW1lLCBcXHUwMDI2c2JpLVxcdTAwM2Vyb290KTtcXG5mcy92Ym94c2Yvc3VwZXIuYy0xNzMtXFx0a2ZyZWUoZm9sZGVyX25hbWUpO1xcbi0tXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jPTUzPXN0YXRpYyBpbnQgdmJveHNmX2NhbGwodTMyIGZ1bmN0aW9uLCB2b2lkICpwYXJtcywgdTMyIHBhcm1fY291bnQsIGludCAqc3RhdHVzKVxcbi0tXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTc0LVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYzo3NTppbnQgdmJveHNmX21hcF9mb2xkZXIoc3RydWN0IHNoZmxfc3RyaW5nICpmb2xkZXJfbmFtZSwgdTMyICpyb290KVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy03Ni17XFxuLS1cXG5mcy92Ym94c2YvdmZzbW9kLmg9MTMyPWludCB2Ym94c2ZfZnNpbmZvKHUzMiByb290LCB1NjQgaGFuZGxlLCB1MzIgZmxhZ3MsXFxuLS1cXG5mcy92Ym94c2YvdmZzbW9kLmgtMTM0LVxcbmZzL3Zib3hzZi92ZnNtb2QuaDoxMzU6aW50IHZib3hzZl9tYXBfZm9sZGVyKHN0cnVjdCBzaGZsX3N0cmluZyAqZm9sZGVyX25hbWUsIHUzMiAqcm9vdCk7XFxuZnMvdmJveHNmL3Zmc21vZC5oLTEzNi1pbnQgdmJveHNmX3VubWFwX2ZvbGRlcih1MzIgcm9vdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjQ4OjM4LjYxNDg0NjkyM1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTExODg5NDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhhdCBrZXJuZWwgY29kZTpcblxuKipBbmFseXppbmcgYHZib3hzZl9tYXBfZm9sZGVyYCBpbiBgZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jYCoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gYHZib3hzZl9tYXBfZm9sZGVyYCB3aXRoaW4gYGZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoYXQncyB0aGUgY29udGV4dCBoZXJlPyBXaGF0J3MgdGhlICpwdXJwb3NlKiBvZiB0aGlzIGZ1bmN0aW9uP1wiIEknbSBhc3N1bWluZywgZ2l2ZW4gdGhlIG5hbWUsIGl0J3MgaW52b2x2ZWQgaW4gbWFwcGluZyBhIHNoYXJlZCBmb2xkZXIgd2l0aGluIHRoZSBWaXJ0dWFsQm94IFNoYXJlZCBGb2xkZXIgZmlsZXN5c3RlbS4gVGhlIFwid3JhcHBlcnNcIiBwYXJ0IHN1Z2dlc3RzIGl0J3MgbGlrZWx5IGEgbGF5ZXIgb2YgYWJzdHJhY3Rpb24gb3IgYSBoZWxwZXIgZnVuY3Rpb24gdGhhdCBtaWdodCBiZSBpbnRlcmZhY2luZyB3aXRoIG90aGVyIHVuZGVybHlpbmcgY29tcG9uZW50cywgcGVyaGFwcyB0aGUgY29yZSBzaGFyZWQgZm9sZGVyIGRyaXZlciBvciB1c2VyLXNwYWNlIGludGVyYWN0aW9uLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGRhdGEgc3RydWN0dXJlcyB0aGlzIGZ1bmN0aW9uIGlzIG1hbmlwdWxhdGluZy4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgaW5vZGVzLCBkZW50cnkgc3RydWN0dXJlcywgVmlydHVhbEJveC1zcGVjaWZpYyBtZXRhZGF0YSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFdoYXQgcGFyYW1ldGVycyBkb2VzIGl0IHRha2U/IEkgc2hvdWxkIGxvb2sgZm9yIHRoZSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBmaXJzdCB0byB1bmRlcnN0YW5kIGl0cyBpbnB1dHMgYW5kIHJldHVybiB2YWx1ZXMuIFRoZW4sIEknbGwgY2hlY2sgaXRzIHVzYWdlLiBXaGVyZSBpcyBpdCBiZWluZyBjYWxsZWQgZnJvbT8gVGhhdCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgaXQgZml0cyBpbnRvIHRoZSBvdmVyYWxsIHNoYXJlZCBmb2xkZXIgYXJjaGl0ZWN0dXJlLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgZnVuY3Rpb24ncyBpbnRlcm5hbCBsb2dpYy4gV2hhdCBhcmUgdGhlIGtleSBvcGVyYXRpb25zIGJlaW5nIHBlcmZvcm1lZD8gSXMgaXQgYWxsb2NhdGluZyBtZW1vcnk/IEluaXRpYWxpemluZyBzb21lIGtpbmQgb2YgbWFwcGluZyB0YWJsZT8gTWFraW5nIGNhbGxzIHRvIG90aGVyIGtlcm5lbCBmdW5jdGlvbnMsIG1heWJlIHJlbGF0ZWQgdG8gZmlsZSBzeXN0ZW0gb3BlcmF0aW9ucyBvciBtZW1vcnkgbWFuYWdlbWVudD8gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBlcnJvciBoYW5kbGluZ+KAlGhvdyBhcmUgcG90ZW50aWFsIGZhaWx1cmVzIG1hbmFnZWQsIGFuZCB3aGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciB0aGUgc2hhcmVkIGZvbGRlciBmdW5jdGlvbmFsaXR5P1xuXG5JJ2xsIGFsc28ga2VlcCBpbiBtaW5kIHBvdGVudGlhbCBhcmVhcyBvZiBpbnRlcmVzdCBmb3IgcGVyZm9ybWFuY2UuIEFyZSB0aGVyZSBhbnkgbG9vcHMgdGhhdCBjb3VsZCBiZWNvbWUgYm90dGxlbmVja3MgdW5kZXIgaGVhdnkgbG9hZD8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIG1lbW9yeSBhbGxvY2F0aW9ucyBvciBkZWFsbG9jYXRpb25zIHRoYXQgY291bGQgYmUgb3B0aW1pemVkPyBJJ20gcHJvYmFibHkgZ29pbmcgdG8gbmVlZCB0byBsb29rIGF0IGFkamFjZW50IGNvZGUgYW5kIGRvY3VtZW50YXRpb24gZm9yIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcuXG5cblVsdGltYXRlbHksIEkgd2FudCB0byBmb3JtIGEgY29tcGxldGUgbWVudGFsIG1vZGVsIG9mIGhvdyBgdmJveHNmX21hcF9mb2xkZXJgIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIFZpcnR1YWxCb3ggU2hhcmVkIEZvbGRlcnMsIGZyb20gaXRzIHB1cnBvc2UgYW5kIGludGVncmF0aW9uIHRvIGl0cyBpbnRlcm5hbCBvcGVyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDA2LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NDg6NDMuMTI2NzM4NTZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkxMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDc1OlxcdGludCB2Ym94c2ZfbWFwX2ZvbGRlcihzdHJ1Y3Qgc2hmbF9zdHJpbmcgKmZvbGRlcl9uYW1lLCB1MzIgKnJvb3QpXFxuICA3NjpcXHR7XFxuICA3NzpcXHRcXHRzdHJ1Y3Qgc2hmbF9tYXBfZm9sZGVyIHBhcm1zO1xcbiAgNzg6XFx0XFx0aW50IGVyciwgc3RhdHVzO1xcbiAgNzk6XFx0XFxuICA4MDpcXHRcXHRwYXJtcy5wYXRoLnR5cGUgPSBWTU1ERVZfSEdDTV9QQVJNX1RZUEVfTElOQUREUl9LRVJORUw7XFxuICA4MTpcXHRcXHRwYXJtcy5wYXRoLnUucG9pbnRlci5zaXplID0gc2hmbF9zdHJpbmdfYnVmX3NpemUoZm9sZGVyX25hbWUpO1xcbiAgODI6XFx0XFx0cGFybXMucGF0aC51LnBvaW50ZXIudS5saW5lYXJfYWRkciA9ICh1aW50cHRyX3QpZm9sZGVyX25hbWU7XFxuICA4MzpcXHRcXG4gIDg0OlxcdFxcdHBhcm1zLnJvb3QudHlwZSA9IFZNTURFVl9IR0NNX1BBUk1fVFlQRV8zMkJJVDtcXG4gIDg1OlxcdFxcdHBhcm1zLnJvb3QudS52YWx1ZTMyID0gMDtcXG4gIDg2OlxcdFxcbiAgODc6XFx0XFx0cGFybXMuZGVsaW1pdGVyLnR5cGUgPSBWTU1ERVZfSEdDTV9QQVJNX1RZUEVfMzJCSVQ7XFxuICA4ODpcXHRcXHRwYXJtcy5kZWxpbWl0ZXIudS52YWx1ZTMyID0gJy8nO1xcbiAgODk6XFx0XFxuICA5MDpcXHRcXHRwYXJtcy5jYXNlX3NlbnNpdGl2ZS50eXBlID0gVk1NREVWX0hHQ01fUEFSTV9UWVBFXzMyQklUO1xcbiAgOTE6XFx0XFx0cGFybXMuY2FzZV9zZW5zaXRpdmUudS52YWx1ZTMyID0gMTtcXG4gIDkyOlxcdFxcbiAgOTM6XFx0XFx0ZXJyID0gdmJveHNmX2NhbGwoU0hGTF9GTl9NQVBfRk9MREVSLCBcXHUwMDI2cGFybXMsIFNIRkxfQ1BBUk1TX01BUF9GT0xERVIsXFxuICA5NDpcXHRcXHRcXHRcXHQgIFxcdTAwMjZzdGF0dXMpO1xcbiAgOTU6XFx0XFx0aWYgKGVyciA9PSAtRU5PU1lTIFxcdTAwMjZcXHUwMDI2IHN0YXR1cyA9PSBWRVJSX05PVF9JTVBMRU1FTlRFRClcXG4gIDk2OlxcdFxcdFxcdHZiZ19lcnIoXFxcIiVzOiBFcnJvciBob3N0IGlzIHRvbyBvbGRcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4gIDk3OlxcdFxcbiAgOTg6XFx0XFx0KnJvb3QgPSBwYXJtcy5yb290LnUudmFsdWUzMjtcXG4gIDk5OlxcdFxcdHJldHVybiBlcnI7XFxuIDEwMDpcXHR9XFxuIDEwMTpcXHRcXG4gMTAyOlxcdGludCB2Ym94c2ZfdW5tYXBfZm9sZGVyKHUzMiByb290KVxcbiAxMDM6XFx0e1xcbiAxMDQ6XFx0XFx0c3RydWN0IHNoZmxfdW5tYXBfZm9sZGVyIHBhcm1zO1xcbiAxMDU6XFx0XFxuIDEwNjpcXHRcXHRwYXJtcy5yb290LnR5cGUgPSBWTU1ERVZfSEdDTV9QQVJNX1RZUEVfMzJCSVQ7XFxuIDEwNzpcXHRcXHRwYXJtcy5yb290LnUudmFsdWUzMiA9IHJvb3Q7XFxuIDEwODpcXHRcXG4gMTA5OlxcdFxcdHJldHVybiB2Ym94c2ZfY2FsbChTSEZMX0ZOX1VOTUFQX0ZPTERFUiwgXFx1MDAyNnBhcm1zLFxcbiAxMTA6XFx0XFx0XFx0XFx0ICAgU0hGTF9DUEFSTVNfVU5NQVBfRk9MREVSLCBOVUxMKTtcXG4gMTExOlxcdH1cXG4gMTEyOlxcdFxcbiAxMTM6XFx0LyoqXFxuIDExNDpcXHQgKiB2Ym94c2ZfY3JlYXRlIC0gQ3JlYXRlIGEgbmV3IGZpbGUgb3IgZm9sZGVyXFxuIDExNTpcXHQgKiBAcm9vdDogICAgICAgICBSb290IG9mIHRoZSBzaGFyZWQgZm9sZGVyIGluIHdoaWNoIHRvIGNyZWF0ZSB0aGUgZmlsZVxcbiAxMTY6XFx0ICogQHBhcnNlZF9wYXRoOiAgVGhlIHBhdGggb2YgdGhlIGZpbGUgb3IgZm9sZGVyIHJlbGF0aXZlIHRvIHRoZSBzaGFyZWQgZm9sZGVyXFxuIDExNzpcXHQgKiBAY3JlYXRlX3Bhcm1zOiBQYXJhbWV0ZXJzIGZvciBmaWxlL2ZvbGRlciBjcmVhdGlvbi5cXG4gMTE4OlxcdCAqXFxuIDExOTpcXHQgKiBDcmVhdGUgYSBuZXcgZmlsZSBvciBmb2xkZXIgb3Igb3BlbiBhbiBleGlzdGluZyBvbmUgaW4gYSBzaGFyZWQgZm9sZGVyLlxcbiAxMjA6XFx0ICogTm90ZSB0aGlzIGZ1bmN0aW9uIGFsd2F5cyByZXR1cm5zIDAgLyBzdWNjZXNzIHVubGVzcyBhbiBleGNlcHRpb25hbCBjb25kaXRpb25cXG4gMTIxOlxcdCAqIG9jY3VycyAtIG91dCBvZiBtZW1vcnksIGludmFsaWQgYXJndW1lbnRzLCBldGMuIElmIHRoZSBmaWxlIG9yIGZvbGRlciBjb3VsZFxcbiAxMjI6XFx0ICogbm90IGJlIG9wZW5lZCBvciBjcmVhdGVkLCBjcmVhdGVfcGFybXMtXFx1MDAzZWhhbmRsZSB3aWxsIGJlIHNldCB0b1xcbiAxMjM6XFx0ICogU0hGTF9IQU5ETEVfTklMIG9uIHJldHVybi4gIEluIHRoaXMgY2FzZSB0aGUgdmFsdWUgaW4gY3JlYXRlX3Bhcm1zLVxcdTAwM2VyZXN1bHRcXG4gMTI0OlxcdCAqIHByb3ZpZGVzIGluZm9ybWF0aW9uIGFzIHRvIHdoeSAoZS5nLiBTSEZMX0ZJTEVfRVhJU1RTKSwgY3JlYXRlX3Bhcm1zLVxcdTAwM2VyZXN1bHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NDg6NDMuMTI2ODE5MjlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI0NDQ5MDgzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRlY29kaW5nIHRoZSBWaXJ0dWFsQm94IFNoYXJlZCBGb2xkZXIgQ2FsbCBDaGFpbioqXG5cbkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyB6ZXJvZXMgaW4gb24gYSBzcGVjaWZpYyBmdW5jdGlvbiBjYWxsOiBgdmJveHNmX2NhbGxgLiBNeSBpbW1lZGlhdGUgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoaXMgaXMgdGhlIGVudHJ5IHBvaW50IGZvciBzb21lIGtpbmQgb2Ygc2hhcmVkIGZvbGRlciBpbnRlcmFjdGlvbiB3aXRoaW4gVmlydHVhbEJveCdzIGd1ZXN0IGFkZGl0aW9ucy4gVGhlbiwgdGhlIGNvbm5lY3Rpb24gYmVjb21lcyBjbGVhcjogYHZib3hzZl9jYWxsYCAqZGlyZWN0bHkqIGNhbGxzIGB2YmdfaGdjbV9jYWxsYC4gVGhpcyBwb2ludHMgdG93YXJkcyBhIHNwZWNpZmljIGFyY2hpdGVjdHVyYWwgcmVsYXRpb25zaGlwLlxuXG5NeSBhc3Nlc3NtZW50OiBgdmJnX2hnY21fY2FsbGAgbGlrZWx5IHJlcHJlc2VudHMgdGhlIHVuZGVybHlpbmcgSG9zdC1HdWVzdCBDb21tdW5pY2F0aW9uIE1lY2hhbmlzbSAoSEdDTSkgaXRzZWxmLCBhbmQgYHZib3hzZl9jYWxsYCBpcyBhY3RpbmcgYXMgYSBzcGVjaWZpYyAqbGF5ZXIqIHRoYXQga25vd3MgaG93IHRvIHdyYXAgc2hhcmVkIGZvbGRlciBvcGVyYXRpb25zIGZvciB0aGF0IG1lY2hhbmlzbS4gSXQncyBhIGNsZWFyIGRlbGVnYXRpb24gb2YgcmVzcG9uc2liaWxpdHkuIEl0IHRlbGxzIG1lIHRoYXQgdGhlIHNoYXJlZCBmb2xkZXJzIGZ1bmN0aW9uYWxpdHkgaXMgYnVpbHQgKm9uIHRvcCogb2YgYSBtb3JlIGdlbmVyaWMgZ3Vlc3QtaG9zdCBjb21tdW5pY2F0aW9uIGluZnJhc3RydWN0dXJlLiBUaGUgXCJzZlwiIG1vZHVsZSBhY3RzIGFzIGEgZnJvbnQtZW5kIG9yIHNlcnZpY2UgaGFuZGxlciwgd2hpbGUgdGhlIFwiaGdjbVwiIG1vZHVsZSBwcm92aWRlcyBhIGxvdyBsZXZlbCwgYWJzdHJhY3RlZCB0cmFuc3BvcnQuIFRoaXMgc3RydWN0dXJlIHNob3VsZCBzaW1wbGlmeSBtYW5hZ2luZyBkaWZmZXJlbnQgc2VydmljZXMgb3IgbW9kdWxlcyB0aGF0IG1pZ2h0IGJlIGltcGxlbWVudGVkIGluIHRoZSBzYW1lIGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIgdG8gdW5kZXJzdGFuZCBob3cgbWFueSBsYXllcnMgb2YgY29tbXVuaWNhdGlvbiBhYnN0cmFjdGlvbiB0aGVyZSBtaWdodCBiZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Njg1OSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NDg6NDYuMzcxMzEzMDc3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTY3MDYyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmJveHNmX2NhbGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvdmJveHNmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM9NDA9dm9pZCB2Ym94c2ZfZGlzY29ubmVjdCh2b2lkKVxcbi0tXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTUyLVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYzo1MzpzdGF0aWMgaW50IHZib3hzZl9jYWxsKHUzMiBmdW5jdGlvbiwgdm9pZCAqcGFybXMsIHUzMiBwYXJtX2NvdW50LCBpbnQgKnN0YXR1cylcXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtNTQte1xcbi0tXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jPTc1PWludCB2Ym94c2ZfbWFwX2ZvbGRlcihzdHJ1Y3Qgc2hmbF9zdHJpbmcgKmZvbGRlcl9uYW1lLCB1MzIgKnJvb3QpXFxuLS1cXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtOTItXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jOjkzOlxcdGVyciA9IHZib3hzZl9jYWxsKFNIRkxfRk5fTUFQX0ZPTERFUiwgXFx1MDAyNnBhcm1zLCBTSEZMX0NQQVJNU19NQVBfRk9MREVSLFxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy05NC1cXHRcXHRcXHQgIFxcdTAwMjZzdGF0dXMpO1xcbi0tXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jPTEwMj1pbnQgdmJveHNmX3VubWFwX2ZvbGRlcih1MzIgcm9vdClcXG4tLVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy0xMDgtXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jOjEwOTpcXHRyZXR1cm4gdmJveHNmX2NhbGwoU0hGTF9GTl9VTk1BUF9GT0xERVIsIFxcdTAwMjZwYXJtcyxcXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMTEwLVxcdFxcdFxcdCAgIFNIRkxfQ1BBUk1TX1VOTUFQX0ZPTERFUiwgTlVMTCk7XFxuLS1cXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM9MTMwPWludCB2Ym94c2ZfY3JlYXRlKHUzMiByb290LCBzdHJ1Y3Qgc2hmbF9zdHJpbmcgKnBhcnNlZF9wYXRoLFxcbi0tXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTE0NS1cXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM6MTQ2OlxcdHJldHVybiB2Ym94c2ZfY2FsbChTSEZMX0ZOX0NSRUFURSwgXFx1MDAyNnBhcm1zLCBTSEZMX0NQQVJNU19DUkVBVEUsIE5VTEwpO1xcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy0xNDctfVxcbi0tXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jPTE0OT1pbnQgdmJveHNmX2Nsb3NlKHUzMiByb290LCB1NjQgaGFuZGxlKVxcbi0tXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTE1OC1cXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM6MTU5OlxcdHJldHVybiB2Ym94c2ZfY2FsbChTSEZMX0ZOX0NMT1NFLCBcXHUwMDI2cGFybXMsIFNIRkxfQ1BBUk1TX0NMT1NFLCBOVUxMKTtcXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMTYwLX1cXG4tLVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYz0xNjI9aW50IHZib3hzZl9yZW1vdmUodTMyIHJvb3QsIHN0cnVjdCBzaGZsX3N0cmluZyAqcGFyc2VkX3BhdGgsIHUzMiBmbGFncylcXG4tLVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy0xNzUtXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jOjE3NjpcXHRyZXR1cm4gdmJveHNmX2NhbGwoU0hGTF9GTl9SRU1PVkUsIFxcdTAwMjZwYXJtcywgU0hGTF9DUEFSTVNfUkVNT1ZFLCBOVUxMKTtcXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMTc3LX1cXG4tLVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYz0xNzk9aW50IHZib3hzZl9yZW5hbWUodTMyIHJvb3QsIHN0cnVjdCBzaGZsX3N0cmluZyAqc3JjX3BhdGgsXFxuLS1cXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMTk3LVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYzoxOTg6XFx0cmV0dXJuIHZib3hzZl9jYWxsKFNIRkxfRk5fUkVOQU1FLCBcXHUwMDI2cGFybXMsIFNIRkxfQ1BBUk1TX1JFTkFNRSwgTlVMTCk7XFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTE5OS19XFxuLS1cXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM9MjAxPWludCB2Ym94c2ZfcmVhZCh1MzIgcm9vdCwgdTY0IGhhbmRsZSwgdTY0IG9mZnNldCwgdTMyICpidWZfbGVuLCB1OCAqYnVmKVxcbi0tXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTIxOC1cXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM6MjE5OlxcdGVyciA9IHZib3hzZl9jYWxsKFNIRkxfRk5fUkVBRCwgXFx1MDAyNnBhcm1zLCBTSEZMX0NQQVJNU19SRUFELCBOVUxMKTtcXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMjIwLVxcbi0tXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jPTIyNT1pbnQgdmJveHNmX3dyaXRlKHUzMiByb290LCB1NjQgaGFuZGxlLCB1NjQgb2Zmc2V0LCB1MzIgKmJ1Zl9sZW4sIHU4ICpidWYpXFxuLS1cXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMjQyLVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYzoyNDM6XFx0ZXJyID0gdmJveHNmX2NhbGwoU0hGTF9GTl9XUklURSwgXFx1MDAyNnBhcm1zLCBTSEZMX0NQQVJNU19XUklURSwgTlVMTCk7XFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTI0NC1cXG4tLVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYz0yNTA9aW50IHZib3hzZl9kaXJpbmZvKHUzMiByb290LCB1NjQgaGFuZGxlLFxcbi0tXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTI4NC1cXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM6Mjg1OlxcdGVyciA9IHZib3hzZl9jYWxsKFNIRkxfRk5fTElTVCwgXFx1MDAyNnBhcm1zLCBTSEZMX0NQQVJNU19MSVNULCBcXHUwMDI2c3RhdHVzKTtcXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMjg2LVxcdGlmIChlcnIgPT0gLUVOT0RBVEEgXFx1MDAyNlxcdTAwMjYgc3RhdHVzID09IFZFUlJfTk9fTU9SRV9GSUxFUylcXG4tLVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYz0yOTQ9aW50IHZib3hzZl9mc2luZm8odTMyIHJvb3QsIHU2NCBoYW5kbGUsIHUzMiBmbGFncyxcXG4tLVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy0zMTItXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jOjMxMzpcXHRlcnIgPSB2Ym94c2ZfY2FsbChTSEZMX0ZOX0lORk9STUFUSU9OLCBcXHUwMDI2cGFybXMsIFNIRkxfQ1BBUk1TX0lORk9STUFUSU9OLFxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy0zMTQtXFx0XFx0XFx0ICBOVUxMKTtcXG4tLVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYz0zMjA9aW50IHZib3hzZl9yZWFkbGluayh1MzIgcm9vdCwgc3RydWN0IHNoZmxfc3RyaW5nICpwYXJzZWRfcGF0aCxcXG4tLVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy0zMzUtXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jOjMzNjpcXHRyZXR1cm4gdmJveHNmX2NhbGwoU0hGTF9GTl9SRUFETElOSywgXFx1MDAyNnBhcm1zLCBTSEZMX0NQQVJNU19SRUFETElOSyxcXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMzM3LVxcdFxcdFxcdCAgIE5VTEwpO1xcbi0tXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jPTM0MD1pbnQgdmJveHNmX3N5bWxpbmsodTMyIHJvb3QsIHN0cnVjdCBzaGZsX3N0cmluZyAqbmV3X3BhdGgsXFxuLS1cXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMzU5LVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYzozNjA6XFx0cmV0dXJuIHZib3hzZl9jYWxsKFNIRkxfRk5fU1lNTElOSywgXFx1MDAyNnBhcm1zLCBTSEZMX0NQQVJNU19TWU1MSU5LLCBOVUxMKTtcXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMzYxLX1cXG4tLVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYz0zNjM9aW50IHZib3hzZl9zZXRfdXRmOCh2b2lkKVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy0zNjQte1xcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYzozNjU6XFx0cmV0dXJuIHZib3hzZl9jYWxsKFNIRkxfRk5fU0VUX1VURjgsIE5VTEwsIDAsIE5VTEwpO1xcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy0zNjYtfVxcbi0tXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jPTM2OD1pbnQgdmJveHNmX3NldF9zeW1saW5rcyh2b2lkKVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy0zNjkte1xcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYzozNzA6XFx0cmV0dXJuIHZib3hzZl9jYWxsKFNIRkxfRk5fU0VUX1NZTUxJTktTLCBOVUxMLCAwLCBOVUxMKTtcXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMzcxLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NDg6NDYuNDg4MDI2MDM3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNDQ1OTg5MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSdyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBgdmJveHNmX2NhbGxgIEltcGxlbWVudGF0aW9uKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYHZib3hzZl9jYWxsYCBpbXBsZW1lbnRhdGlvbi4gSXQncyB0aGUgY29yZSBvZiBob3cgdGhlIFZpcnR1YWxCb3ggU2hhcmVkIEZvbGRlcnMgZmVhdHVyZSBsaWtlbHkgd29ya3MuIEknbSBnb2luZyB0byBzdGFydCBieSB0cmFjaW5nIHRocm91Z2ggdGhlIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUsIHRoZSBwYXJhbWV0ZXJzIGl0IHRha2VzLCBhbmQgd2hhdCBpdCdzIHVsdGltYXRlbHkgc3VwcG9zZWQgdG8gYWNoaWV2ZS4gV2hhdCdzIHRoZSBwdXJwb3NlIG9mIHRoaXMgcGFydGljdWxhciBzeXN0ZW0gY2FsbD8gSXMgaXQgZm9yIGZpbGUgYWNjZXNzLCBkaXJlY3Rvcnkgb3BlcmF0aW9ucywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBjb21tZW50cyBhcmUgaG9wZWZ1bGx5IGhlbHBmdWwsIGJ1dCBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ3Jhc3AgdGhlIG92ZXJhbGwgY29udGV4dC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBtZWF0IG9mIHRoZSBmdW5jdGlvbiAtIHRoZSBpbXBvcnRhbnQgY29udHJvbCBmbG93IGFuZCBhbnkgZXJyb3IgaGFuZGxpbmcuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgcGFzc2VkIGFuZCBtYW5pcHVsYXRlZCwgYXMgdGhhdCdzIHdoZXJlIHRoZSBjcnVjaWFsIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGd1ZXN0IGFuZCB0aGUgaG9zdCBwcm9iYWJseSBsaWVzLiBMZXQncyBzZWUgaG93IHRoZXkgaGFuZGxlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3Igb3RoZXIgY29uY3VycmVuY3kgaXNzdWVzOyBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMgdGhleSd2ZSBlbXBsb3llZC4gQW5kIG9mIGNvdXJzZSwgSSdtIGV4cGVjdGluZyBzb21lIGNsZXZlciB1c2Ugb2YgdGhlIFZpcnR1YWxCb3gncyBpbnRlcm5hbCBBUElzIG9yIGRldmljZSBkcml2ZXJzLiBUaGlzIGlzIHRoZSBwbGFjZSB0byBsb29rIGZvciB0aGF0IGludGVyYWN0aW9uLiBBbHJpZ2h0LCBsZXQncyBnZXQgaW50byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTIyMywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjQ4OjQ5LjYzMjYyNjk5MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTMsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNTM6XFx0c3RhdGljIGludCB2Ym94c2ZfY2FsbCh1MzIgZnVuY3Rpb24sIHZvaWQgKnBhcm1zLCB1MzIgcGFybV9jb3VudCwgaW50ICpzdGF0dXMpXFxuICA1NDpcXHR7XFxuICA1NTpcXHRcXHRzdHJ1Y3QgdmJnX2RldiAqZ2RldjtcXG4gIDU2OlxcdFxcdGludCBlcnIsIHZib3hfc3RhdHVzO1xcbiAgNTc6XFx0XFxuICA1ODpcXHRcXHRnZGV2ID0gdmJnX2dldF9nZGV2KCk7XFxuICA1OTpcXHRcXHRpZiAoSVNfRVJSKGdkZXYpKVxcbiAgNjA6XFx0XFx0XFx0cmV0dXJuIC1FU0hVVERPV047IC8qIGd1ZXN0LWRldiByZW1vdmVkIHVuZGVybmVhdGggdXMgKi9cXG4gIDYxOlxcdFxcbiAgNjI6XFx0XFx0ZXJyID0gdmJnX2hnY21fY2FsbChnZGV2LCBTSEZMX1JFUVVFU1QsIHZib3hzZl9jbGllbnRfaWQsIGZ1bmN0aW9uLFxcbiAgNjM6XFx0XFx0XFx0XFx0ICAgIFUzMl9NQVgsIHBhcm1zLCBwYXJtX2NvdW50LCBcXHUwMDI2dmJveF9zdGF0dXMpO1xcbiAgNjQ6XFx0XFx0dmJnX3B1dF9nZGV2KGdkZXYpO1xcbiAgNjU6XFx0XFxuICA2NjpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gIDY3OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuICA2ODpcXHRcXG4gIDY5OlxcdFxcdGlmIChzdGF0dXMpXFxuICA3MDpcXHRcXHRcXHQqc3RhdHVzID0gdmJveF9zdGF0dXM7XFxuICA3MTpcXHRcXG4gIDcyOlxcdFxcdHJldHVybiB2Ymdfc3RhdHVzX2NvZGVfdG9fZXJybm8odmJveF9zdGF0dXMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzo0ODo0OS42MzI3MDMwNTFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM3OTQ4MTc4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFZpcnR1YWxCb3ggR3Vlc3QgRGV2aWNlIGFuZCBTeXprYWxsZXIgRnV6emluZyoqXG5cbk9rYXksIHNvIGB2YmdfZ2V0X2dkZXZgIGlzIGhvdyB3ZSBzbmFnIHRoYXQgVmlydHVhbEJveCBndWVzdCBkZXZpY2UuIElmIHdlJ3JlIG5vdCBydW5uaW5nIGluc2lkZSBWaXJ0dWFsQm94LCBpdCdzIGdvaW5nIHRvIGVycm9yIG91dCwgbWVhbmluZyBgdmJveHNmYCB3b24ndCBtb3VudC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiBzeXprYWxsZXIgZnV6eiB0aGlzPyBCdXQgd2FpdCwgZG9lc24ndCBzeXprYWxsZXIgaGF2ZSAqdmJveGd1ZXN0KiBkcml2ZXIgZnV6emluZz8gTGV0IG1lIGNoZWNrLlxuXG5BbHJpZ2h0LCBub3cgSSByZW1lbWJlciwgc3l6a2FsbGVyIHJ1bnMgaW4gUUVNVS4gVGhhdCdzIGEgcHJvYmxlbSwgYmVjYXVzZSBpdCBkb2Vzbid0IGVtdWxhdGUgdGhlIFZpcnR1YWxCb3ggUENJIGRldmljZSBkaXJlY3RseS4gSG1tLCBidXQgZG9lc24ndCBzeXprYWxsZXIgaGF2ZSBzb21ldGhpbmcgbGlrZSBgc3l6X21vdW50X2ltYWdlYD8gRXZlbiB3aXRoIHRoYXQsIEknZCBzdGlsbCBuZWVkIHRoZSB1bmRlcmx5aW5nIGRldmljZS4uLiBTbywgZG9lc24ndCBzeXprYWxsZXIgcHJvdmlkZSBhIGBzeXpfdmJveGd1ZXN0YCBjYWxsPyBObywgaXQgbG9va3MgbGlrZSBpdCBkb2Vzbid0LlxuXG5Pa2F5LCBuZXcgYW5nbGUuIENhbiBJIGZ1enogYHZib3hzZmAgdGhyb3VnaCBgc3l6X21vdW50X2ltYWdlYCwgbWF5YmU/IFdhaXQgYSBzZWNvbmQuLi4gc3l6a2FsbGVyICpyZXBvcnRlZCogYSBwYXRjaCByZWxhdGVkIHRvIHRoaXMhIFRoZSBhdXRob3IgaXMgbGlzdGVkIGFzIFwic3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcIiwgYW5kIGl0IHNheXMgXCJzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcIi5cblxuVGhpcyBpcyBncmVhdCEgVGhhdCBtZWFucyBzeXprYWxsZXIgKmRpZCogYWN0dWFsbHkgZmluZCBhIGJ1ZyBpbiBgdmJveHNmX2Rpcl9lbWl0YCEgVGhlIG15c3RlcnkgaXMgaG93IHN5emthbGxlciBldmVuIGdvdCB0byBgdmJveHNmX2Rpcl9lbWl0YC4gVGltZSB0byBkaXZlIGludG8gYGZzL3Zib3hzZi9kaXIuY2AgYW5kIGZpZ3VyZSBvdXQgaG93IHN5emthbGxlciB0cmlnZ2VyZWQgdGhpcyBjb2RlIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4NzEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzo0ODo1NS4wMTIxODgzODhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3Zib3hzZi9kaXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMTA6XFx0XFx0XFx0XFx0Y3VyICs9IGItXFx1MDAzZWVudHJpZXM7XFxuIDExMTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gMTEyOlxcdFxcdFxcdH1cXG4gMTEzOlxcdFxcbiAxMTQ6XFx0XFx0XFx0LypcXG4gMTE1OlxcdFxcdFxcdCAqIE5vdGUgdGhlIHZib3hzZl9kaXJfaW5mbyBvYmplY3RzIHdlIGFyZSBpdGVyYXRpbmcgb3ZlciBoZXJlXFxuIDExNjpcXHRcXHRcXHQgKiBhcmUgdmFyaWFibGUgc2l6ZWQsIHNvIHRoZSBpbmZvIHBvaW50ZXIgbWF5IGVuZCB1cCBiZWluZ1xcbiAxMTc6XFx0XFx0XFx0ICogdW5hbGlnbmVkLiBUaGlzIGlzIGhvdyB3ZSBnZXQgdGhlIGRhdGEgZnJvbSB0aGUgaG9zdC5cXG4gMTE4OlxcdFxcdFxcdCAqIFNpbmNlIHZib3hzZiBpcyBvbmx5IHN1cHBvcnRlZCBvbiB4ODYgbWFjaGluZXMgdGhpcyBpcyBub3RcXG4gMTE5OlxcdFxcdFxcdCAqIGEgcHJvYmxlbS5cXG4gMTIwOlxcdFxcdFxcdCAqL1xcbiAxMjE6XFx0XFx0XFx0Zm9yIChpID0gMCwgaW5mbyA9IGItXFx1MDAzZWJ1ZjsgaSBcXHUwMDNjIGN0eC1cXHUwMDNlcG9zIC0gY3VyOyBpKyspIHtcXG4gMTIyOlxcdFxcdFxcdFxcdGVuZCA9IFxcdTAwMjZpbmZvLVxcdTAwM2VuYW1lLnN0cmluZy51dGY4W2luZm8tXFx1MDAzZW5hbWUuc2l6ZV07XFxuIDEyMzpcXHRcXHRcXHRcXHQvKiBPbmx5IGhhcHBlbnMgaWYgdGhlIGhvc3QgZ2l2ZXMgdXMgY29ycnVwdCBkYXRhICovXFxuIDEyNDpcXHRcXHRcXHRcXHRpZiAoV0FSTl9PTihlbmQgXFx1MDAzZSAoYi1cXHUwMDNlYnVmICsgYi1cXHUwMDNldXNlZCkpKVxcbiAxMjU6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAxMjY6XFx0XFx0XFx0XFx0aW5mbyA9IGVuZDtcXG4gMTI3OlxcdFxcdFxcdH1cXG4gMTI4OlxcdFxcbiAxMjk6XFx0XFx0XFx0ZW5kID0gXFx1MDAyNmluZm8tXFx1MDAzZW5hbWUuc3RyaW5nLnV0ZjhbaW5mby1cXHUwMDNlbmFtZS5zaXplXTtcXG4gMTMwOlxcdFxcdFxcdGlmIChXQVJOX09OKGVuZCBcXHUwMDNlIChiLVxcdTAwM2VidWYgKyBiLVxcdTAwM2V1c2VkKSkpXFxuIDEzMTpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDEzMjpcXHRcXHRcXHRpZiAoaW5mby1cXHUwMDNlbmFtZS5sZW5ndGggXFx1MDAzZSBpbmZvLVxcdTAwM2VuYW1lLnNpemUpXFxuIDEzMzpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDEzNDpcXHRcXG4gMTM1OlxcdFxcdFxcdC8qIEluZm8gbm93IHBvaW50cyB0byB0aGUgcmlnaHQgZW50cnksIGVtaXQgaXQuICovXFxuIDEzNjpcXHRcXHRcXHRkX3R5cGUgPSB2Ym94c2ZfZ2V0X2RfdHlwZShpbmZvLVxcdTAwM2VpbmZvLmF0dHIubW9kZSk7XFxuIDEzNzpcXHRcXG4gMTM4OlxcdFxcdFxcdC8qXFxuIDEzOTpcXHRcXHRcXHQgKiBPbiAzMi1iaXQgc3lzdGVtcyBwb3MgaXMgNjQtYml0IHNpZ25lZCwgd2hpbGUgaW5vIGlzIDMyLWJpdFxcbiAxNDA6XFx0XFx0XFx0ICogdW5zaWduZWQgc28gZmFrZV9pbm8gbWF5IG92ZXJmbG93LCBjaGVjayBmb3IgdGhpcy5cXG4gMTQxOlxcdFxcdFxcdCAqL1xcbiAxNDI6XFx0XFx0XFx0aWYgKChpbm9fdCkoY3R4LVxcdTAwM2Vwb3MgKyAxKSAhPSAodTY0KShjdHgtXFx1MDAzZXBvcyArIDEpKSB7XFxuIDE0MzpcXHRcXHRcXHRcXHR2YmdfZXJyKFxcXCJ2Ym94c2Y6IGZha2UgaW5vIG92ZXJmbG93LCB0cnVuY2F0aW5nIGRpclxcXFxuXFxcIik7XFxuIDE0NDpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDE0NTpcXHRcXHRcXHR9XFxuIDE0NjpcXHRcXHRcXHRmYWtlX2lubyA9IGN0eC1cXHUwMDNlcG9zICsgMTtcXG4gMTQ3OlxcdFxcbiAxNDg6XFx0XFx0XFx0aWYgKHNiaS1cXHUwMDNlbmxzKSB7XFxuIDE0OTpcXHRcXHRcXHRcXHRjaGFyIGRfbmFtZVtOQU1FX01BWF07XFxuIDE1MDpcXHRcXG4gMTUxOlxcdFxcdFxcdFxcdGVyciA9IHZib3hzZl9ubHNjcHkoc2JpLCBkX25hbWUsIE5BTUVfTUFYLFxcbiAxNTI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGluZm8tXFx1MDAzZW5hbWUuc3RyaW5nLnV0ZjgsXFxuIDE1MzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgaW5mby1cXHUwMDNlbmFtZS5sZW5ndGgpO1xcbiAxNTQ6XFx0XFx0XFx0XFx0aWYgKGVycikge1xcbiAxNTU6XFx0XFx0XFx0XFx0XFx0Lyogc2tpcCBlcnJvbmVvdXMgZW50cnkgYW5kIHByb2NlZWQgKi9cXG4gMTU2OlxcdFxcdFxcdFxcdFxcdGN0eC1cXHUwMDNlcG9zICs9IDE7XFxuIDE1NzpcXHRcXHRcXHRcXHRcXHRnb3RvIHRyeV9uZXh0X2VudHJ5O1xcbiAxNTg6XFx0XFx0XFx0XFx0fVxcbiAxNTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjQ4OjU1LjAxMjMwMjcwOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODIxNjExNDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBTeXprYWxsZXIncyBSZWFjaGFiaWxpdHkgb2YgdGhlIGB2Ym94c2ZgIEZpbGVzeXN0ZW0qKlxuXG5Pa2F5LCBzbyBzeXprYWxsZXIgKmRpZCogZmluZCBhIGJ1ZywgbWVhbmluZyBpdCAqY2FuKiBhY3R1YWxseSByZWFjaCB0aGlzIGNvZGUuIFRoZSBxdWVzdGlvbiBub3cgaXMgKmhvdyo/IE15IGluaXRpYWwgdGhvdWdodCB3YXMgVmlydHVhbEJveCwgc2luY2UgaXQncyBhIHBvc3NpYmlsaXR5IGZvciBzeXprYWxsZXIsIGJ1dCB0aGVuIEkgcmVtZW1iZXIgc3l6a2FsbGVyIGNhbiBydW4gd2l0aCB2YXJpb3VzIFZNIHR5cGVzLiBJdCBoYXMgc3VwcG9ydCBmb3IgbXVsdGlwbGUgVk1zIGFuZCBjYW4gYmUgY29uZmlndXJlZCB3aXRoIGB2bV90eXBlOiBcInFlbXVcImAsIGFuZCBvdGhlcnMuXG5cbkkgd29uZGVyZWQgaWYgaXQgaGFkIGEgYHZib3hndWVzdGAgZnV6emVyIGRpcmVjdGx5IG9yIGlmIGl0IHJ1bnMgKm9uKiBWaXJ0dWFsQm94LiBJIHJlbWVtYmVyZWQgYHN5el9tb3VudF9pbWFnZWAgd2hpY2ggY2FuIG1vdW50IGZpbGVzeXN0ZW1zLCBidXQgYHZib3hzZmAgaXNuJ3QgYmxvY2stYmFzZWQsIGl0J3MgbW9yZSBvZiBhIG5ldHdvcmstbGlrZSBjb25uZWN0aW9uIHRvIHRoZSBob3N0LiBUaGVuIEkgd29uZGVyZWQsIGNvdWxkIHN5emthbGxlciBiZSBkaXJlY3RseSBmdXp6aW5nIGB2Ym94c2ZgIG9yIGdvaW5nIHRocm91Z2ggYC9kZXYvdmJveGd1ZXN0YD8gTm8sIGJlY2F1c2UgYHZib3hzZmAgaXMgYSBmaWxlc3lzdGVtLlxuXG5UaGUgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZW0gaXMgbGlrZWx5IGB2YmdfaGdjbV9jYWxsYCB3aGljaCBgdmJveHNmYCB1c2VzLiBUaGlzIG1lYW5zIHRoYXQgaWYgc3l6a2FsbGVyIGlzIG1vdW50aW5nIGB2Ym94c2ZgLCBpdCBuZWVkcyB0aGUgYHZib3hndWVzdGAgZHJpdmVyIHRvIGJlIGluaXRpYWxpemVkLiBCdXQgaXMgdGhhdCBkcml2ZXIgaW5pdGlhbGl6ZWQgaW4gUUVNVT8gQW5kIHRoYXQncyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBUaGUgYHZib3hndWVzdGAgZHJpdmVyIGJpbmRzIHRvIFBDSSB2ZW5kb3IgSUQgMHg4MEVFIChJbm5vVGVrIFN5c3RlbWJlcmF0dW5nIEdtYkgpLCBhbmQgZGV2aWNlIElEIDB4Q0FGRS4gRG9lcyBRRU1VIGVtdWxhdGUgdGhpcyBkZXZpY2U/IE5vLCBpdCBkb2Vzbid0LlxuXG5Ib3dldmVyLCBzeXprYWxsZXIgKmRvZXMqIGhhdmUgdmFyaW91cyBmdXp6ZXIgb3B0aW9ucyBmb3IgUENJLCBhbmQgVVNCLiBTbyBpdCBtYXkgYmUgdXNpbmcgYHN5el9wY2lfYWRkYCB0byBpbmplY3QgUENJIGRldmljZXMuIEl0IG1pZ2h0IHVzZSBgdmZpb2Agb3Igc2ltaWxhciB0byBoYW5kbGUgUENJLCBzaW1pbGFyIHRvIGl0cyB1c2Ugb2YgYHZoY2lgIGZvciBVU0IuIEFjdHVhbGx5LCBpdCBoYXMgb3RoZXIgd2F5cyB0byBoYW5kbGUgVk1zLCBsaWtlIGBzeXpfa3ZtX3NldHVwX2NwdWAuIEkgZGlkbid0IHNlZSBhbnl0aGluZyBjYWxsZWQgYHN5el92Ym94Z3Vlc3RgLCBzbyBtYXliZSBpdCdzIG5vdCBkaXJlY3QuXG5cbkkgaGF2ZSB0byBnbyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBwcmVtaXNlOiBpZiBzeXprYWxsZXIgZm91bmQgdGhpcyBidWcsIGl0ICpjYW4qIHJlYWNoIHRoZSBjb2RlLiBOb3csIHRoZSBwcm9tcHQgZG9lcyBzYXkgc29tZXRoaW5nIGFib3V0IGNvZGUgcGF0aHMgYmVpbmcgdW5yZWFjaGFibGUgaW4gUUVNVSBvciBHQ0UgZXZlbiB3aXRoIGVtdWxhdGVkIGhhcmR3YXJlLiBJZiB0aGF0J3MgdHJ1ZSwgaG93IGNvdWxkIGl0IGJlIHJlYWNoYWJsZT9cblxuTWF5YmUgaXQncyBtb3VudGluZyBgdmJveHNmYCAqd2l0aG91dCogbmVlZGluZyB0aGUgUENJIGRldmljZSwgc29tZSBhbHRlcm5hdGUgaW5pdGlhbGl6YXRpb24gcGF0aD8gSSBoYXZlIHRvIGxvb2sgaW50byBgdmJnX2dldF9nZGV2YCB0byBzZWUgd2hhdCBjb3VsZCBiZSBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzQ1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njg0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NDk6MDMuODMzOTE2Njg3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Njk5MTgzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2YmdfZ2V0X2dkZXZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aXJ0L3Zib3hndWVzdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYz00MTk9c3RhdGljIHZvaWQgdmJnX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBjaSlcXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtNDMzLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmM6NDM0OnN0cnVjdCB2YmdfZGV2ICp2YmdfZ2V0X2dkZXYodm9pZClcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTQzNS17XFxuLS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTQ0OC19XFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzo0NDk6RVhQT1JUX1NZTUJPTCh2YmdfZ2V0X2dkZXYpO1xcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtNDUwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzo0OTowMy45MjA5MTQ5OTJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU0MDg0OTg1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEknbSB0YWtpbmcgYSBsb29rIGF0IGB2YmdfZ2V0X2dkZXZgIHdpdGhpbiB0aGUgYGRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmNgIGZpbGUuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIG9yIGF0IGxlYXN0IHdoZXJlIGEgY3JpdGljYWwgcGFydCBvZiB0aGUgZ3Vlc3QgZGV2aWNlIGludGVyYWN0aW9uIHdpdGggVmlydHVhbEJveCBrZXJuZWwgbW9kdWxlIHJlc2lkZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZ3Vlc3QgaXMgZ2V0dGluZyBhY2Nlc3MgdG8gcmVzb3VyY2VzIGFuZCBjYXBhYmlsaXRpZXMgaGVyZS4gVGhpcyBpcyBsaWtlbHkgYSBrZXkgZW50cnkgcG9pbnQgZm9yIHRoZSBWaXJ0dWFsQm94IEd1ZXN0IEFkZGl0aW9ucyB0byBpZGVudGlmeSBhbmQgaW50ZXJhY3Qgd2l0aCB0aGUgaG9zdC4gS25vd2luZyBob3cgdGhpcyBmdW5jdGlvbiB3b3JrcyBpcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgZ3Vlc3QtaG9zdCBjb21tdW5pY2F0aW9uIG9jY3VycyBhdCBhIGxvdyBsZXZlbC4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIHVuY292ZXIuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4MzEsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzo0OTowNi40NjE3Njg0MDFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI4MDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDM0LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDM0OlxcdHN0cnVjdCB2YmdfZGV2ICp2YmdfZ2V0X2dkZXYodm9pZClcXG4gNDM1OlxcdHtcXG4gNDM2OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnZiZ19nZGV2X211dGV4KTtcXG4gNDM3OlxcdFxcbiA0Mzg6XFx0XFx0LypcXG4gNDM5OlxcdFxcdCAqIE5vdGUgb24gc3VjY2VzcyB3ZSBrZWVwIHRoZSBtdXRleCBsb2NrZWQgdW50aWwgdmJnX3B1dF9nZGV2KCksXFxuIDQ0MDpcXHRcXHQgKiB0aGlzIHN0b3BzIHZiZ19wY2lfcmVtb3ZlIGZyb20gcmVtb3ZpbmcgdGhlIGRldmljZSBmcm9tIHVuZGVybmVhdGhcXG4gNDQxOlxcdFxcdCAqIHZib3hzZi4gdmJveHNmIHdpbGwgb25seSBob2xkIGEgcmVmZXJlbmNlIGZvciBhIHNob3J0IHdoaWxlLlxcbiA0NDI6XFx0XFx0ICovXFxuIDQ0MzpcXHRcXHRpZiAodmJnX2dkZXYpXFxuIDQ0NDpcXHRcXHRcXHRyZXR1cm4gdmJnX2dkZXY7XFxuIDQ0NTpcXHRcXG4gNDQ2OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2dmJnX2dkZXZfbXV0ZXgpO1xcbiA0NDc6XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7XFxuIDQ0ODpcXHR9XFxuIDQ0OTpcXHRFWFBPUlRfU1lNQk9MKHZiZ19nZXRfZ2Rldik7XFxuIDQ1MDpcXHRcXG4gNDUxOlxcdHZvaWQgdmJnX3B1dF9nZGV2KHN0cnVjdCB2YmdfZGV2ICpnZGV2KVxcbiA0NTI6XFx0e1xcbiA0NTM6XFx0XFx0V0FSTl9PTihnZGV2ICE9IHZiZ19nZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NDk6MDYuNDYxODk4MzMxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxNTUxNjk5OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgYHZib3hzZmAgQ29kZSBQYXRocyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGB2YmdfZ2RldmAgaXMgYSBnbG9iYWwgdmFyaWFibGUgaW5pdGlhbGl6ZWQgZHVyaW5nIFBDSSBkZXZpY2UgcHJvYmluZywgYW5kIGB2Ym94c2ZgIHJlbGllcyBvbiB0aGF0LiBUaGUgcXVlc3Rpb24gaXMsIGNhbiBzeXprYWxsZXIgaW5qZWN0IGEgUENJIGRldmljZSB0byBtYWtlIHRoaXMgaGFwcGVuPyBTeXprYWxsZXIgaGFzIHRoZSBtZWFucyB3aXRoIHRvb2xzIGxpa2UgYHN5el9wY2lgLCBgc3l6X3BjaXZmaW9gLCBvciBldmVuIHVzaW5nIGBQQ0lfU1RVQmAgb3IgYFZGSU9gLCBvciBwZXJoYXBzIGl0IGxldmVyYWdlcyBhIFBDSSBmdXp6ZXIgdGhhdCBlbXVsYXRlcyBkZXZpY2VzLiBIb2xkIG9uLCB0aG91Z2gg4oCTIHRoZXJlIGlzbid0IGEgcmVhZGlseSBhdmFpbGFibGUgZ2VuZXJhbCBzb2Z0d2FyZSBmcmFtZXdvcmsgaW4gdGhlIExpbnV4IGtlcm5lbCB0byBlbXVsYXRlICphcmJpdHJhcnkqIFBDSSBkZXZpY2VzLiBUaGUgb3B0aW9ucyBhcHBlYXIgdG8gYmUgbGltaXRlZCB0byB0aGluZ3MgbGlrZSBgcGNpX2VuZHBvaW50YCBvciBgdmZpb2AsIHdoaWNoIGFyZSBtb3JlIHNwZWNpYWxpemVkLlxuXG5CdXQgd2FpdCBhIG1pbnV0ZSEgU3l6a2FsbGVyIGhhcyBgc3l6X2dlbmV0bGlua2AgYW5kIG90aGVyIGNhcGFiaWxpdGllcywgd2hpY2ggY291bGQgYmUgcmVsZXZhbnQuIEFuZCB0aGVuIEkgcmVtZW1iZXJlZCwgc3l6a2FsbGVyICpkb2VzKiBydW4gb24gVmlydHVhbEJveCEgSXQgc3VwcG9ydHMgZW52aXJvbm1lbnRzIGxpa2UgYHZtL3FlbXVgLCBgdm0vZ2NlYCwgYW5kIGB2bS92Ym94YC4gVGhhdOKAmXMgdGhlIGtleS4gSWYgc3l6a2FsbGVyIGNhbiBydW4gb24gVmlydHVhbEJveCwgdGhlbiwgaW4gdGhlb3J5LCBgdmJveHNmYCBzaG91bGQgYmUgcmVhY2hhYmxlLCByaWdodD9cblxuQnV0IHRoZW4gdGhlIHByb21wdCByYWlzZXMgYSByZWQgZmxhZzogXCJDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmVcIi4gVGhpcyBpbXBsaWVzIHRoYXQgaWYgc29tZXRoaW5nIGlzIE9OTFkgcmVhY2hhYmxlIGluIFZpcnR1YWxCb3gsIGl0J3MgKm5vdCogcmVhY2hhYmxlIGluIEdDRSBvciBRRU1VLCBhbmQgdGhlcmVmb3JlIG1heSBub3QgYmUgd29ydGggZnV6emluZz9cblxuVGhlIGRpcmVjdGl2ZSBzcGVjaWZpZXM6IFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyAuLi4gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLlwiIElmIGB2Ym94c2ZgICpyZXF1aXJlcyogdGhlIFZpcnR1YWxCb3ggaHlwZXJ2aXNvciwgaXQgaXMsIGJ5IGRlZmluaXRpb24sIHVucmVhY2hhYmxlIGluIEdDRSBvciBRRU1VLlxuXG5Ob3csIGlzIHRoZXJlICphbnkqIHdheSB0byBnZXQgYHZib3hzZmAgd29ya2luZyBpbiBRRU1VPyBXaGF0IGFib3V0IHVzaW5nIGBVTUxgPyBObywgdGhhdCB3b24ndCBoZWxwLiBXaGF0IGFib3V0IGBzeXpfbW91bnRfaW1hZ2VgPyBUaGF0IHdvdWxkIGZhaWwgaW4gYHZib3hzZl9maWxsX3N1cGVyYCBiZWNhdXNlIGB2YmdfZ2V0X2dkZXYoKWAgd291bGQgcmV0dXJuIGAtRU5PREVWYC4gSSB0aGluayBJIG5lZWQgdG8gZGlnIGludG8gYHZib3hzZl9maWxsX3N1cGVyYCB0byBjb25maXJtIHRoaXMuIFRoYXQgaXMgdGhlIG5leHQgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzNjEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzo0OToxMy42MTcwNzExN1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE2NzgwOTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmJnX2dldF9nZGV2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Zib3hzZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jPTIwPWludCB2Ym94c2ZfY29ubmVjdCh2b2lkKVxcbi0tXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTI4LVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYzoyOTpcXHRnZGV2ID0gdmJnX2dldF9nZGV2KCk7XFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTMwLVxcdGlmIChJU19FUlIoZ2RldikpXFxuLS1cXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM9NDA9dm9pZCB2Ym94c2ZfZGlzY29ubmVjdCh2b2lkKVxcbi0tXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTQ0LVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYzo0NTpcXHRnZGV2ID0gdmJnX2dldF9nZGV2KCk7XFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTQ2LVxcdGlmIChJU19FUlIoZ2RldikpXFxuLS1cXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM9NTM9c3RhdGljIGludCB2Ym94c2ZfY2FsbCh1MzIgZnVuY3Rpb24sIHZvaWQgKnBhcm1zLCB1MzIgcGFybV9jb3VudCwgaW50ICpzdGF0dXMpXFxuLS1cXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtNTctXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jOjU4OlxcdGdkZXYgPSB2YmdfZ2V0X2dkZXYoKTtcXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtNTktXFx0aWYgKElTX0VSUihnZGV2KSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NDk6MTMuNzA4NzUzNjg0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxODc1NzA2NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKnZib3hzZiBEcml2ZXIgSW5pdGlhbGl6YXRpb24gQ29udW5kcnVtKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGUgVmlydHVhbEJveCBzaGFyZWQgZm9sZGVyICh2Ym94c2YpIGRyaXZlciBjb2RlLiBUaGUga2V5IHF1ZXN0aW9uIEknbSB0cnlpbmcgdG8gbmFpbCBkb3duIGlzIHRoZSBleGFjdCBwb2ludCB3aGVyZSB0aGUgaW5pdGlhbCBjb25uZWN0aW9uIHRvIHRoZSBzaGFyZWQgZm9sZGVyIGluZnJhc3RydWN0dXJlIGlzIGVzdGFibGlzaGVkLiBJIGtub3cgYHZib3hzZl9jb25uZWN0YCBpcyBjcml0aWNhbCBmb3IgdGhhdCwgYnV0IEkgbmVlZCB0byBwaW5wb2ludCAqd2hlcmUqIGl0J3MgY2FsbGVkLiBNeSBpbml0aWFsIHRoaW5raW5nIGlzIHRoYXQgaXQncyBlaXRoZXIgZ29pbmcgdG8gYmUgZnJvbSBgdmJveHNmX2luaXRgLCB3aGljaCBoYW5kbGVzIHRoZSBpbml0aWFsIG1vZHVsZSBsb2FkaW5nIGFuZCBzZXR1cCwgb3IgcGVyaGFwcyBmcm9tIGB2Ym94c2ZfZmlsbF9zdXBlcmAsIHdoaWNoIHdvdWxkIGJlIHRoZSBtb3JlIGxpa2VseSBsb2NhdGlvbiB3aGVuIGEgZmlsZXN5c3RlbSBpcyBiZWluZyBtb3VudGVkLiBJIG5lZWQgdG8gY29uZmlybSB3aGVyZSB0aGUgZHJpdmVyIGdldHMgdGhlIGNvbm5lY3Rpb24gc3RhcnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3ODMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzo0OToxNi44OTYzMjc1ODFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTg5MTU1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2Ym94c2ZfY29ubmVjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy92Ym94c2YvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Zib3hzZi9zdXBlci5jPTMyMz1zdGF0aWMgaW50IHZib3hzZl9zZXR1cCh2b2lkKVxcbi0tXFxuZnMvdmJveHNmL3N1cGVyLmMtMzQxLVxcbmZzL3Zib3hzZi9zdXBlci5jOjM0MjpcXHRlcnIgPSB2Ym94c2ZfY29ubmVjdCgpO1xcbmZzL3Zib3hzZi9zdXBlci5jLTM0My1cXHRpZiAoZXJyKSB7XFxuLS1cXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM9MTg9c3RhdGljIHUzMiB2Ym94c2ZfY2xpZW50X2lkO1xcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy0xOS1cXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM6MjA6aW50IHZib3hzZl9jb25uZWN0KHZvaWQpXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTIxLXtcXG4tLVxcbmZzL3Zib3hzZi92ZnNtb2QuaD0xMTE9aW50IHZib3hzZl9kaXJfcmVhZF9hbGwoc3RydWN0IHZib3hzZl9zYmkgKnNiaSwgc3RydWN0IHZib3hzZl9kaXJfaW5mbyAqc2ZfZCxcXG4tLVxcbmZzL3Zib3hzZi92ZnNtb2QuaC0xMTQtLyogZnJvbSB2Ym94c2Zfd3JhcHBlcnMuYyAqL1xcbmZzL3Zib3hzZi92ZnNtb2QuaDoxMTU6aW50IHZib3hzZl9jb25uZWN0KHZvaWQpO1xcbmZzL3Zib3hzZi92ZnNtb2QuaC0xMTYtdm9pZCB2Ym94c2ZfZGlzY29ubmVjdCh2b2lkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NDk6MTcuMDA2MjI0NTMxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1NzA4NDMyMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBWaXJ0dWFsQm94IFNoYXJlZCBGb2xkZXIgU2V0dXAqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIHplcm8gaW4gb24gdGhlIGB2Ym94c2Zfc2V0dXBgIGZ1bmN0aW9uIHdpdGhpbiBgZnMvdmJveHNmL3N1cGVyLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyAqcmVhbGx5KiBoYXBwZW5zIGluIFZpcnR1YWxCb3ggc2hhcmVkIGZvbGRlcnMsIHNwZWNpZmljYWxseSB0aGUgY3JpdGljYWwgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGZpbGVzeXN0ZW0uIEl0J3MgdGhlIGx5bmNocGluIGZvciBtb3VudGluZyBhbmQgbWFuYWdpbmcgdGhvc2Ugc2hhcmVkIGRpcmVjdG9yaWVzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgU3VwZXIgQmxvY2sgaXMgcG9wdWxhdGVkIGFuZCB0aGUgY29yZSBjb21wb25lbnRzIGFyZSBpbml0aWFsaXplZCBzbyBJIGNhbiBmaWd1cmUgb3V0IHdoYXQgaXMgYnJva2VuLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTMzMCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjQ5OjE5LjU3NzA3MDIzNVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzY2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvdmJveHNmL3N1cGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzIzLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzIzOlxcdHN0YXRpYyBpbnQgdmJveHNmX3NldHVwKHZvaWQpXFxuIDMyNDpcXHR7XFxuIDMyNTpcXHRcXHRpbnQgZXJyO1xcbiAzMjY6XFx0XFxuIDMyNzpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZ2Ym94c2Zfc2V0dXBfbXV0ZXgpO1xcbiAzMjg6XFx0XFxuIDMyOTpcXHRcXHRpZiAodmJveHNmX3NldHVwX2RvbmUpXFxuIDMzMDpcXHRcXHRcXHRnb3RvIHN1Y2Nlc3M7XFxuIDMzMTpcXHRcXG4gMzMyOlxcdFxcdHZib3hzZl9pbm9kZV9jYWNoZXAgPVxcbiAzMzM6XFx0XFx0XFx0a21lbV9jYWNoZV9jcmVhdGUoXFxcInZib3hzZl9pbm9kZV9jYWNoZVxcXCIsXFxuIDMzNDpcXHRcXHRcXHRcXHRcXHQgIHNpemVvZihzdHJ1Y3QgdmJveHNmX2lub2RlKSwgMCxcXG4gMzM1OlxcdFxcdFxcdFxcdFxcdCAgU0xBQl9SRUNMQUlNX0FDQ09VTlQgfCBTTEFCX0FDQ09VTlQsXFxuIDMzNjpcXHRcXHRcXHRcXHRcXHQgIHZib3hzZl9pbm9kZV9pbml0X29uY2UpO1xcbiAzMzc6XFx0XFx0aWYgKCF2Ym94c2ZfaW5vZGVfY2FjaGVwKSB7XFxuIDMzODpcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbiAzMzk6XFx0XFx0XFx0Z290byBmYWlsX25vbWVtO1xcbiAzNDA6XFx0XFx0fVxcbiAzNDE6XFx0XFxuIDM0MjpcXHRcXHRlcnIgPSB2Ym94c2ZfY29ubmVjdCgpO1xcbiAzNDM6XFx0XFx0aWYgKGVycikge1xcbiAzNDQ6XFx0XFx0XFx0dmJnX2VycihcXFwidmJveHNmOiBlcnIgJWQgY29ubmVjdGluZyB0byBndWVzdCBQQ0ktZGV2aWNlXFxcXG5cXFwiLCBlcnIpO1xcbiAzNDU6XFx0XFx0XFx0dmJnX2VycihcXFwidmJveHNmOiBtYWtlIHN1cmUgeW91IGFyZSBpbnNpZGUgYSBWaXJ0dWFsQm94IFZNXFxcXG5cXFwiKTtcXG4gMzQ2OlxcdFxcdFxcdHZiZ19lcnIoXFxcInZib3hzZjogYW5kIGNoZWNrIGRtZXNnIGZvciB2Ym94Z3Vlc3QgZXJyb3JzXFxcXG5cXFwiKTtcXG4gMzQ3OlxcdFxcdFxcdGdvdG8gZmFpbF9mcmVlX2NhY2hlO1xcbiAzNDg6XFx0XFx0fVxcbiAzNDk6XFx0XFxuIDM1MDpcXHRcXHRlcnIgPSB2Ym94c2Zfc2V0X3V0ZjgoKTtcXG4gMzUxOlxcdFxcdGlmIChlcnIpIHtcXG4gMzUyOlxcdFxcdFxcdHZiZ19lcnIoXFxcInZib3hzZl9zZXR1dGY4IGVycm9yICVkXFxcXG5cXFwiLCBlcnIpO1xcbiAzNTM6XFx0XFx0XFx0Z290byBmYWlsX2Rpc2Nvbm5lY3Q7XFxuIDM1NDpcXHRcXHR9XFxuIDM1NTpcXHRcXG4gMzU2OlxcdFxcdGlmICghZm9sbG93X3N5bWxpbmtzKSB7XFxuIDM1NzpcXHRcXHRcXHRlcnIgPSB2Ym94c2Zfc2V0X3N5bWxpbmtzKCk7XFxuIDM1ODpcXHRcXHRcXHRpZiAoZXJyKVxcbiAzNTk6XFx0XFx0XFx0XFx0dmJnX3dhcm4oXFxcInZib3hzZjogVW5hYmxlIHRvIHNob3cgc3ltbGlua3M6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbiAzNjA6XFx0XFx0fVxcbiAzNjE6XFx0XFxuIDM2MjpcXHRcXHR2Ym94c2Zfc2V0dXBfZG9uZSA9IHRydWU7XFxuIDM2MzpcXHRzdWNjZXNzOlxcbiAzNjQ6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2Ym94c2Zfc2V0dXBfbXV0ZXgpO1xcbiAzNjU6XFx0XFx0cmV0dXJuIDA7XFxuIDM2NjpcXHRcXG4gMzY3OlxcdGZhaWxfZGlzY29ubmVjdDpcXG4gMzY4OlxcdFxcdHZib3hzZl9kaXNjb25uZWN0KCk7XFxuIDM2OTpcXHRmYWlsX2ZyZWVfY2FjaGU6XFxuIDM3MDpcXHRcXHRrbWVtX2NhY2hlX2Rlc3Ryb3kodmJveHNmX2lub2RlX2NhY2hlcCk7XFxuIDM3MTpcXHRmYWlsX25vbWVtOlxcbiAzNzI6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2Ym94c2Zfc2V0dXBfbXV0ZXgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzo0OToxOS41NzczMTAwMTVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjIyNDIxODM0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbnZlc3RpZ2F0aW9uIGludG8gVmlydHVhbEJveCBHdWVzdCBGaWxlIFN5c3RlbSBNb3VudHMqKlxuXG5Pa2F5LCBzbyBgdmJveHNmX3NldHVwYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBkdXJpbmcgYSBtb3VudCBvcGVyYXRpb24uIE1ha2VzIHNlbnNlLiBBbmQgaWYgYHZib3hzZl9jb25uZWN0KClgIGZhaWxzLCB0aGUgd2hvbGUgbW91bnQgZmFpbHMuIEFscmlnaHQsIGZvbGxvd2luZyB0aGUgYnJlYWRjcnVtYnMsIGB2Ym94c2ZfY29ubmVjdCgpYCBjYWxscyBgdmJnX2dldF9nZGV2KClgLCB3aGljaCBnaXZlcyBtZSBhbiBgLUVOT0RFVmAgaWYgdGhlIFZpcnR1YWxCb3ggUENJIGRldmljZSBpc24ndCBhcm91bmQuIFNvLCBiYXNpY2FsbHksIEkgY2FuJ3QgbW91bnQgYHZib3hzZmAgaW4gc29tZXRoaW5nIGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgdW5sZXNzIHRoYXQgVmlydHVhbEJveCBQQ0kgZGV2aWNlIGlzIHBoeXNpY2FsbHkgKnByZXNlbnQqLiBIbW0sIGlzIGl0IGV2ZW4gKnBvc3NpYmxlKiB0byBpbmplY3QgdGhlIFZpcnR1YWxCb3ggUENJIGRldmljZSBpbnRvIFFFTVU/IFRoYXQncyB0aGUgbWlsbGlvbi1kb2xsYXIgcXVlc3Rpb24uXG5cbldhaXQgYSBzZWNvbmTigKYgd2Fzbid0IHRoZXJlIGEgYHN5emthbGxlcmAgZnV6emVyIGZvciBgdmJveGd1ZXN0YD8gTGV0J3MgcXVpY2tseSBkb3VibGUtY2hlY2sgaWYgc3l6a2FsbGVyIGhhcyBhIGZ1enplciBkZWRpY2F0ZWQgdG8gYHZib3hndWVzdGAuIFllcywgc3l6a2FsbGVyICpjYW4qIGZ1enogYC9kZXYvdmJveGd1ZXN0YCAtIGlmIHRoZSBkZXZpY2UgZXhpc3RzLiBCdXQgb2YgY291cnNlLCBpbiBhIGJhcmUgUUVNVSBlbnZpcm9ubWVudCwgaXQgZG9lc24ndC4gSG1tLlxuXG5Pa2F5LCBpcyB0aGVyZSBhIGBzeXpfcGNpX2FkZGAgZnVuY3Rpb24gaW4gc3l6a2FsbGVyPyBJdCBjb3VsZCAqcG90ZW50aWFsbHkqIGFkZCBhIFBDSSBkZXZpY2UsIGJ1dCBubywgc3l6a2FsbGVyIGRvZXNuJ3QgaGF2ZSBhIGJ1aWx0LWluIHNvZnR3YXJlIFBDSSBlbXVsYXRvciBpbiB0aGUga2VybmVsLiBPa2F5LCBzbyB0aGF0IGF2ZW51ZSBpcyBjbG9zZWQuXG5cbldhaXTigKYgd2hhdCBhYm91dCBsZXZlcmFnaW5nIGV4aXN0aW5nIHN5emthbGxlciBmZWF0dXJlcz8gU3l6a2FsbGVyIHVzZXMgYHZoY2lgIGZvciBVU0IsIGBtYWM4MDIxMV9od3NpbWAgZm9yIHdpZmksIGB1aW5wdXRgIGZvciBpbnB1dCwgYHZnZW1gIGZvciBkcm0sIGB2a21zYCBmb3IgZHJtLCBgbG9vcGAgZm9yIGJsb2NrLCBgdHVuYCBmb3IgbmV04oCmIEFyZSB0aGVyZSBhbnkgc2ltaWxhciB0cmlja3MgZm9yIGB2Ym94Z3Vlc3RgPyBJcyB0aGVyZSBhIHNvZnR3YXJlIGVtdWxhdGlvbiBvcHRpb24gZm9yIHRoYXQsIHNvbWUga2luZCBvZiB2aXJ0dWFsIGRldmljZT8gSSByZWFsbHkgbmVlZCB0byBnZXQgdGhpcyB0byB3b3JrLiBJIG5lZWQgdG8gZmluZCBhIHdheSB0byBtYWtlIHRoZSBkZXZpY2UgKmFwcGVhciouXG5cblJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGUga2VybmVsIHNvdXJjZS4gTGV0J3Mgc3RhcnQgd2l0aCBhIGZvY3VzZWQgc2VhcmNoIGZvciBcInZib3hndWVzdFwiIGFuZCBzZWUgd2hhdCBpbnNpZ2h0cyBpdCB5aWVsZHMuIExldCdzIHNlZSB3aGF0IHRoZSBrZXJuZWwga25vd3MgYWJvdXQgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyNjAsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzo0OToyNS44MDE1MzI3ODVaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5MTY1MzcxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2Ym94Z3Vlc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aXJ0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZpcnQvS2NvbmZpZz0yNj1jb25maWcgRlNMX0hWX01BTkFHRVJcXG4tLVxcbmRyaXZlcnMvdmlydC9LY29uZmlnLTQzLVxcbmRyaXZlcnMvdmlydC9LY29uZmlnOjQ0OnNvdXJjZSBcXFwiZHJpdmVycy92aXJ0L3Zib3hndWVzdC9LY29uZmlnXFxcIlxcbmRyaXZlcnMvdmlydC9LY29uZmlnLTQ1LVxcbi0tXFxuZHJpdmVycy92aXJ0L01ha2VmaWxlPTc9b2JqLSQoQ09ORklHX1ZNR0VOSUQpXFx0XFx0Kz0gdm1nZW5pZC5vXFxuZHJpdmVycy92aXJ0L01ha2VmaWxlOjg6b2JqLXlcXHRcXHRcXHRcXHQrPSB2Ym94Z3Vlc3QvXFxuZHJpdmVycy92aXJ0L01ha2VmaWxlLTktXFxuLS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L0tjb25maWc9Mj1jb25maWcgVkJPWEdVRVNUXFxuLS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L0tjb25maWctMTEtXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC9LY29uZmlnOjEyOlxcdCAgVGhpcyBkcml2ZXIgYWxzbyBvZmZlcnMgdmJveGd1ZXN0IElQQyBmdW5jdGlvbmFsaXR5IHdoaWNoIGlzIG5lZWRlZFxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvS2NvbmZpZy0xMy1cXHQgIGZvciB0aGUgdmJveGZzIGRyaXZlciB3aGljaCBvZmZlcnMgZm9sZGVyIHNoYXJpbmcgc3VwcG9ydC5cXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L01ha2VmaWxlOjI6dmJveGd1ZXN0LXkgOj0gdmJveGd1ZXN0X2xpbnV4Lm8gdmJveGd1ZXN0X2NvcmUubyB2Ym94Z3Vlc3RfdXRpbHMub1xcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvTWFrZWZpbGUtMy1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L01ha2VmaWxlOjQ6b2JqLSQoQ09ORklHX1ZCT1hHVUVTVCkgKz0gdmJveGd1ZXN0Lm9cXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy0yLS8qXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jOjM6ICogdmJveGd1ZXN0IGNvcmUgZ3Vlc3QtZGV2aWNlIGhhbmRsaW5nIGNvZGUsIFZCb3hHdWVzdC5jcHAgaW4gdXBzdHJlYW0gc3ZuLlxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy00LSAqXFxuLS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmMtMTYtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFxcdTAwM2VcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmM6MTc6I2luY2x1ZGUgXFxcInZib3hndWVzdF9jb3JlLmhcXFwiXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jOjE4OiNpbmNsdWRlIFxcXCJ2Ym94Z3Vlc3RfdmVyc2lvbi5oXFxcIlxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy0xOS1cXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYz04OTU9c3RhdGljIGludCB2YmdfcXVlcnlfaG9zdF92ZXJzaW9uKHN0cnVjdCB2YmdfZGV2ICpnZGV2KVxcbi0tXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jLTkxNS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmM6OTE2OlxcdHZiZ19pbmZvKFxcXCJ2Ym94Z3Vlc3Q6IGhvc3QtdmVyc2lvbjogJXMgJSN4XFxcXG5cXFwiLCBnZGV2LVxcdTAwM2Vob3N0X3ZlcnNpb24sXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jLTkxNy1cXHRcXHQgZ2Rldi1cXHUwMDNlaG9zdF9mZWF0dXJlcyk7XFxuLS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmMtOTE5LVxcdGlmICghKHJlcS1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBWTU1ERVZfSFZGX0hHQ01fUEhZU19QQUdFX0xJU1QpKSB7XFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jOjkyMDpcXHRcXHR2YmdfZXJyKFxcXCJ2Ym94Z3Vlc3Q6IEVycm9yIGhvc3QgdG9vIG9sZCAoZG9lcyBub3Qgc3VwcG9ydCBwYWdlLWxpc3RzKVxcXFxuXFxcIik7XFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jLTkyMS1cXHRcXHRyZXQgPSAtRU5PREVWO1xcbi0tXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jPTk0Mz1pbnQgdmJnX2NvcmVfaW5pdChzdHJ1Y3QgdmJnX2RldiAqZ2RldiwgdTMyIGZpeGVkX2V2ZW50cylcXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy05OTAtXFx0aWYgKHJldCkge1xcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYzo5OTE6XFx0XFx0dmJnX2VycihcXFwidmJveGd1ZXN0OiB2YmdfcmVwb3J0X2d1ZXN0X2luZm8gZXJyb3I6ICVkXFxcXG5cXFwiLCByZXQpO1xcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy05OTItXFx0XFx0Z290byBlcnJfZnJlZV9yZXFzO1xcbi0tXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jLTk5Ni1cXHRpZiAocmV0KSB7XFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jOjk5NzpcXHRcXHR2YmdfZXJyKFxcXCJ2Ym94Z3Vlc3Q6IEVycm9yIHNldHRpbmcgZml4ZWQgZXZlbnQgZmlsdGVyOiAlZFxcXFxuXFxcIixcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmMtOTk4LVxcdFxcdFxcdHJldCk7XFxuLS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmMtMTAwMy1cXHRpZiAocmV0KSB7XFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jOjEwMDQ6XFx0XFx0dmJnX2VycihcXFwidmJveGd1ZXN0OiBFcnJvciBjbGVhcmluZyBndWVzdCBjYXBhYmlsaXRpZXM6ICVkXFxcXG5cXFwiLFxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy0xMDA1LVxcdFxcdFxcdHJldCk7XFxuLS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmMtMTAxMC1cXHRpZiAocmV0KSB7XFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jOjEwMTE6XFx0XFx0dmJnX2VycihcXFwidmJveGd1ZXN0OiBFcnJvciBjbGVhcmluZyBtb3VzZSBzdGF0dXM6ICVkXFxcXG5cXFwiLCByZXQpO1xcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy0xMDEyLVxcdFxcdGdvdG8gZXJyX2ZyZWVfcmVxcztcXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy0xMDIxLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYzoxMDIyOlxcdFxcdHZiZ19lcnIoXFxcInZib3hndWVzdDogRXJyb3IgcmVwb3J0aW5nIGRyaXZlciBzdGF0dXM6ICVkXFxcXG5cXFwiLCByZXQpO1xcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy0xMDIzLVxcbi0tXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jLTEwNDAtLyoqXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jOjEwNDE6ICogdmJnX2NvcmVfZXhpdCAtIENhbGwgdGhpcyBvbiBleGl0IHRvIGNsZWFuLXVwIHZib3hndWVzdC1jb3JlIG1hbmFnZWRcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmMtMTA0Mi0gKlxcdHJlc291cmNlcy5cXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYz0xMDQ4PXZvaWQgdmJnX2NvcmVfZXhpdChzdHJ1Y3QgdmJnX2RldiAqZ2RldilcXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy0xMDc0LSAqXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jOjEwNzU6ICogdmJveGd1ZXN0X2xpbnV4LmMgY2FsbHMgdGhpcyB3aGVuIHVzZXJzcGFjZSBvcGVucyB0aGUgY2hhci1kZXZpY2UuXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jLTEwNzYtICpcXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuaC0xNC0jaW5jbHVkZSBcXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcXHUwMDNlXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5oOjE1OiNpbmNsdWRlIFxcdTAwM2NsaW51eC92Ym94Z3Vlc3QuaFxcdTAwM2VcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmgtMTYtI2luY2x1ZGUgXFxcInZtbWRldi5oXFxcIlxcbi0tXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5oLTE4LS8qXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5oOjE5OiAqIFRoZSBtYWlubGluZSBrZXJuZWwgdmVyc2lvbiAodGhpcyB2ZXJzaW9uKSBvZiB0aGUgdmJveGd1ZXN0IG1vZHVsZVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuaC0yMC0gKiBjb250YWluZWQgYSBidWcgd2hlcmUgaXQgZGVmaW5lZCBWQkdMX0lPQ1RMX1ZNTURFVl9SRVFVRVNUX0JJRyBhbmRcXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuaD02Nz1zdHJ1Y3QgdmJnX2RldiB7XFxuLS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmgtMTUyLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuaDoxNTM6XFx0LyoqIFxcXCJ2Ym94Z3Vlc3RcXFwiIGNoYXItZGV2aWNlICovXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5oLTE1NC1cXHRzdHJ1Y3QgbWlzY2RldmljZSBtaXNjX2RldmljZTtcXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuaD0yMDI9dm9pZCB2YmdfbGludXhfbW91c2VfZXZlbnQoc3RydWN0IHZiZ19kZXYgKmdkZXYpO1xcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuaC0yMDMtXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5oOjIwNDovKiBQcml2YXRlIChub24gZXhwb3J0ZWQpIGZ1bmN0aW9ucyBmb3JtIHZib3hndWVzdF91dGlscy5jICovXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5oLTIwNS12b2lkICp2YmdfcmVxX2FsbG9jKHNpemVfdCBsZW4sIGVudW0gdm1tZGV2X3JlcXVlc3RfdHlwZSByZXFfdHlwZSxcXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtMi0vKlxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmM6MzogKiB2Ym94Z3Vlc3QgbGludXggcGNpIGRyaXZlciwgY2hhci1kZXYgYW5kIGlucHV0LWRldmljZSBjb2RlLFxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtNC0gKlxcbi0tXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy0xNS0jaW5jbHVkZSBcXHUwMDNjbGludXgvdmJveF91dGlscy5oXFx1MDAzZVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmM6MTY6I2luY2x1ZGUgXFxcInZib3hndWVzdF9jb3JlLmhcXFwiXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy0xNy1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTE4LS8qKiBUaGUgZGV2aWNlIG5hbWUuICovXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzoxOTojZGVmaW5lIERFVklDRV9OQU1FXFx0XFx0XFxcInZib3hndWVzdFxcXCJcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTIwLS8qKiBUaGUgZGV2aWNlIG5hbWUgZm9yIHRoZSBkZXZpY2Ugbm9kZSBvcGVuIHRvIGV2ZXJ5b25lLiAqL1xcbi0tXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYz0yODc9c3RhdGljIGludCB2YmdfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtMzAwLVxcdGlmIChyZXQgIT0gMCkge1xcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmM6MzAxOlxcdFxcdHZiZ19lcnIoXFxcInZib3hndWVzdDogRXJyb3IgZW5hYmxpbmcgZGV2aWNlOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTMwMi1cXHRcXHRyZXR1cm4gcmV0O1xcbi0tXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy0zMDktXFx0aWYgKCFpbyB8fCAhaW9fbGVuKSB7XFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzozMTA6XFx0XFx0dmJnX2VycihcXFwidmJveGd1ZXN0OiBFcnJvciBJTy1wb3J0IHJlc291cmNlICgwKSBpcyBtaXNzaW5nXFxcXG5cXFwiKTtcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTMxMS1cXHRcXHRnb3RvIGVycl9kaXNhYmxlX3BjaWRldjtcXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtMzEzLVxcdGlmIChkZXZtX3JlcXVlc3RfcmVnaW9uKGRldiwgaW8sIGlvX2xlbiwgREVWSUNFX05BTUUpID09IE5VTEwpIHtcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jOjMxNDpcXHRcXHR2YmdfZXJyKFxcXCJ2Ym94Z3Vlc3Q6IEVycm9yIGNvdWxkIG5vdCBjbGFpbSBJTyByZXNvdXJjZVxcXFxuXFxcIik7XFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy0zMTUtXFx0XFx0cmV0ID0gLUVCVVNZO1xcbi0tXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy0zMjEtXFx0aWYgKCFtbWlvIHx8ICFtbWlvX2xlbikge1xcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmM6MzIyOlxcdFxcdHZiZ19lcnIoXFxcInZib3hndWVzdDogRXJyb3IgTU1JTyByZXNvdXJjZSAoMSkgaXMgbWlzc2luZ1xcXFxuXFxcIik7XFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy0zMjMtXFx0XFx0Z290byBlcnJfZGlzYWJsZV9wY2lkZXY7XFxuLS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTMyNi1cXHRpZiAoZGV2bV9yZXF1ZXN0X21lbV9yZWdpb24oZGV2LCBtbWlvLCBtbWlvX2xlbiwgREVWSUNFX05BTUUpID09IE5VTEwpIHtcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jOjMyNzpcXHRcXHR2YmdfZXJyKFxcXCJ2Ym94Z3Vlc3Q6IEVycm9yIGNvdWxkIG5vdCBjbGFpbSBNTUlPIHJlc291cmNlXFxcXG5cXFwiKTtcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTMyOC1cXHRcXHRyZXQgPSAtRUJVU1k7XFxuLS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTMzMy1cXHRpZiAoIXZtbWRldikge1xcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmM6MzM0OlxcdFxcdHZiZ19lcnIoXFxcInZib3hndWVzdDogRXJyb3IgaW9yZW1hcCBmYWlsZWQ7IE1NSU8gYWRkcj0lcGFwIHNpemU9JXBhcFxcXFxuXFxcIixcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTMzNS1cXHRcXHRcXHRcXHUwMDI2bW1pbywgXFx1MDAyNm1taW9fbGVuKTtcXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtMzQxLVxcdCAgICB2bW1kZXYtXFx1MDAzZXNpemUgXFx1MDAzYyAzMiB8fCB2bW1kZXYtXFx1MDAzZXNpemUgXFx1MDAzZSBtbWlvX2xlbikge1xcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmM6MzQyOlxcdFxcdHZiZ19lcnIoXFxcInZib3hndWVzdDogQm9ndXMgVk1NRGV2IG1lbW9yeTsgdmVyc2lvbj0lMDh4IChleHBlY3RlZCAlMDh4KSBzaXplPSVkIChleHBlY3RlZCBcXHUwMDNjPSAlZClcXFxcblxcXCIsXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy0zNDMtXFx0XFx0XFx0dm1tZGV2LVxcdTAwM2V2ZXJzaW9uLCBWTU1ERVZfTUVNT1JZX1ZFUlNJT04sXFxuLS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTM2My1cXHRpZiAocmV0KSB7XFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzozNjQ6XFx0XFx0dmJnX2VycihcXFwidmJveGd1ZXN0OiBFcnJvciBjcmVhdGluZyBpbnB1dCBkZXZpY2U6ICVkXFxcXG5cXFwiLCByZXQpO1xcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtMzY1LVxcdFxcdGdvdG8gZXJyX3ZiZ19jb3JlX2V4aXQ7XFxuLS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTM3MC1cXHRpZiAocmV0KSB7XFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzozNzE6XFx0XFx0dmJnX2VycihcXFwidmJveGd1ZXN0OiBFcnJvciByZXF1ZXN0aW5nIGlycTogJWRcXFxcblxcXCIsIHJldCk7XFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy0zNzItXFx0XFx0Z290byBlcnJfdmJnX2NvcmVfZXhpdDtcXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtMzc2LVxcdGlmIChyZXQpIHtcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jOjM3NzpcXHRcXHR2YmdfZXJyKFxcXCJ2Ym94Z3Vlc3Q6IEVycm9yIG1pc2NfcmVnaXN0ZXIgJXMgZmFpbGVkOiAlZFxcXFxuXFxcIixcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTM3OC1cXHRcXHRcXHRERVZJQ0VfTkFNRSwgcmV0KTtcXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtMzgzLVxcdGlmIChyZXQpIHtcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jOjM4NDpcXHRcXHR2YmdfZXJyKFxcXCJ2Ym94Z3Vlc3Q6IEVycm9yIG1pc2NfcmVnaXN0ZXIgJXMgZmFpbGVkOiAlZFxcXFxuXFxcIixcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTM4NS1cXHRcXHRcXHRERVZJQ0VfTkFNRV9VU0VSLCByZXQpO1xcbi0tXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy0zOTYtXFx0aWYgKHJldCkge1xcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmM6Mzk3OlxcdFxcdHZiZ19lcnIoXFxcInZib3hndWVzdDogRXJyb3IgbW9yZSB0aGVuIDEgdmJveCBndWVzdCBwY2kgZGV2aWNlXFxcXG5cXFwiKTtcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTM5OC1cXHRcXHRnb3RvIGVycl91bnJlZ2lzdGVyX21pc2NfZGV2aWNlX3VzZXI7XFxuLS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF91dGlscy5jLTItLypcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF91dGlscy5jOjM6ICogdmJveGd1ZXN0IHZtbS1yZXEgYW5kIGhnY20tY2FsbCBjb2RlLCBWQm94R3Vlc3RSMExpYkhHQ01JbnRlcm5hbC5jcHAsXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfdXRpbHMuYy00LSAqIFZCb3hHdWVzdFIwTGliR2VuZXJpY1JlcXVlc3QuY3BwIGFuZCBSVEVyckNvbnZlcnRUb0Vycm5vLmNwcCBpbiB2Ym94IHN2bi5cXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X3V0aWxzLmMtMTktI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Zib3hfdXRpbHMuaFxcdTAwM2VcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF91dGlscy5jOjIwOiNpbmNsdWRlIFxcXCJ2Ym94Z3Vlc3RfY29yZS5oXFxcIlxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X3V0aWxzLmMtMjEtXFxuLS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF92ZXJzaW9uLmgtNS0gKiBzeW5jZWQgd2l0aCB2Ym94IHVwc3RyZWFtcyB2ZXJzaW9uaW5nIHNjaGVtZSB3aGVuIHdlIGltcGxlbWVudCAvIHBvcnRcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF92ZXJzaW9uLmg6NjogKiBuZXcgZmVhdHVyZXMgZnJvbSB0aGUgdXBzdHJlYW0gb3V0LW9mLXRyZWUgdmJveGd1ZXN0IGRyaXZlci5cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF92ZXJzaW9uLmgtNy0gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NDk6MjYuMTkzMTkyMzg3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwNzQ4ODY1MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgYHZib3hzZl9kaXJfZW1pdGAgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCBpcyB3b3J0aCBmdXp6aW5nLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYHZib3hzZl9kaXJfZW1pdGAuIFRoZSBmaXJzdCB0aGluZyB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzLCBjYW4gc3l6a2FsbGVyIGV2ZW4gcmVhY2ggdGhpcyBjb2RlIHBhdGg/IE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gYXNzdW1lIHRoYXQgc3l6a2FsbGVyICpjYW4ndCogZGlyZWN0bHkgZnV6eiBgdmJveGd1ZXN0YCB1c2luZyBzb21ldGhpbmcgbGlrZSBgc3l6X3BjaV9hZGRgLCBiZWNhdXNlIHN5emthbGxlcidzIG5vdCBzZXQgdXAgZm9yIGFyYml0cmFyeSBQQ0kgZGV2aWNlIGZ1enppbmcuIEFsc28sIEkgZG9uJ3QgdGhpbmsgdGhlcmUncyBhIHNwZWNpZmljIGBzeXpfdmJveGd1ZXN0YCBjYWxsLlxuXG5CdXQgd2FpdCwgc3l6a2FsbGVyICpkaWQqIGZpbmQgdGhlIGJ1ZyEgVGhhdCdzIHRoZSBjcnVjaWFsIHBvaW50LiBPa2F5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqaG93Ki4gSWRlYWxseSwgSSdkIGNoZWNrIHRoZSBzeXprYWxsZXIgY29tbWl0IG1lc3NhZ2Ugb3IgdGhlIGRhc2hib2FyZCB0byBzZWUgaWYgdGhlcmUncyBhbnkgbWVudGlvbiBvZiBgdmJveHNmX2Rpcl9lbWl0YC4gU2hvb3QsIEkgZG9uJ3QgaGF2ZSBpbnRlcm5ldCBhY2Nlc3MsIHNvIEknbSBsaW1pdGVkIHRvIHVzaW5nIGp1c3QgdGhlIHRvb2xzIGF2YWlsYWJsZS5cblxuSWYgc3l6a2FsbGVyIGZvdW5kIGl0LCB0aGVuIGl0ICptdXN0KiBiZSByZWFjaGFibGUgc29tZWhvdy4gVGhpcyBmb3JjZXMgbWUgdG8gdGhpbmsuIEFoISBTeXprYWxsZXIgc3VwcG9ydHMgVmlydHVhbEJveCBhcyBhIFZNIGJhY2tlbmQsIHJpZ2h0PyBUaGUgYHZtX3R5cGU6IFwidmJveFwiYCBvcHRpb24uIElmIHN5emthbGxlciBpcyBydW5uaW5nIGluIFZpcnR1YWxCb3gsIHRoZW4gdGhlIGB2Ym94c2ZgIGZpbGVzeXN0ZW0gKmlzKiByZWFjaGFibGUsIGFuZCB0aGF0IG1lYW5zIHdlICpjb3VsZCogZnV6eiBpdCFcblxuTm93LCB0aGUgaW5zdHJ1Y3Rpb25zLi4uIFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucy4uLiBjb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmVcIi4gU28sIGlmIGl0J3Mgbm90IHJlYWNoYWJsZSBpbiBHQ0Ugb3IgUUVNVSwgdGhlbiBpdCdzIGJhZC4gQnV0LCB0aGUgcHJvbXB0ICpzcGVjaWZpY2FsbHkqIGNhbGxzIG91dCBcInZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLlwiIFZpcnR1YWxCb3ggKmlzKiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBJdCdzIGEgaHlwZXJ2aXNvci5cblxuQnV0Li4uIGhlcmUncyB0aGUga2lja2VyLiBTeXprYWxsZXIgKnR5cGljYWxseSogcnVucyBvbiBHQ0Ugb3IgUUVNVS4gSWYgaXQgcmVxdWlyZXMgVmlydHVhbEJveCwgZG9lcyB0aGF0IG1ha2UgaXQgdW5yZWFjaGFibGUgaW4gYSAqc3RhbmRhcmQqIHN5emthbGxlciBzZXR1cD8gUHJvYmFibHkuIFRoaXMgaXMgd2hlcmUgdGhlIHVuY2VydGFpbnR5IGxpZXMuIFRoZSBmYWN0IHRoYXQgc3l6a2FsbGVyICpkaWQqIGZpbmQgaXQgaXMgY3JpdGljYWwsIGFnYWluLCAqaG93Kj9cblxuTWF5YmUgYHZib3hzZmAgKmNhbiogYmUgbW91bnRlZCB3aXRob3V0IHRoZSBQQ0kgZGV2aWNlPyBPa2F5LCBsZXQgbWUgZ28gYmFjayB0byB0aGUgYHZib3hzZl9maWxsX3N1cGVyYCBjb2RlLiBJZiBgdmJveHNmX2Nvbm5lY3QoKWAgZmFpbHMsIGl0IHJldHVybnMgYW4gZXJyb3IuIGB2Ym94c2ZfY29ubmVjdCgpYCBjYWxscyBgdmJnX2dldF9nZGV2KClgLiBUaGUga2V5IHF1ZXN0aW9uIGlzLCBpcyB0aGVyZSAqYW55KiB3YXkgYHZiZ19nZXRfZ2RldigpYCBjYW4gcmV0dXJuIGEgdmFsaWQgcG9pbnRlciB3aXRob3V0IGEgUENJIGRldmljZT8gTGV0J3MgdHJhY2UgdGhhdCBgdmJnX2dkZXZgIGNvZGUuIEknbGwgZm9jdXMgb24gd2hldGhlciB0aGUgaHlwZXJ2aXNvciBjYW4gYmUgcmVhY2hlZCBpbiBhIHdheSB0aGF0IGRvZXNuJ3QgaW52b2x2ZSB0aGUgUENJIGRldmljZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA5OTMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NDk6MzMuMjY4MDgxNzJaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDk3NzA1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2YmdfZ2RldlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmg9MTYwPXN0cnVjdCB2Ymdfc2Vzc2lvbiB7XFxuLS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmgtMTY2LVxcdCAqIFRoZXNlIHdpbGwgYmUgYXV0b21hdGljYWxseSBkaXNjb25uZWN0ZWQgd2hlbiB0aGUgc2Vzc2lvbiBpcyBjbG9zZWQuXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5oOjE2NzpcXHQgKiBQcm90ZWN0ZWQgYnkgdmJnX2dkZXYuc2Vzc2lvbl9tdXRleC5cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmgtMTY4LVxcdCAqL1xcbi0tXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5oLTE3Mi1cXHQgKiBBbiBldmVudCB0eXBlIHJlcXVlc3RlZCBpbiBhbnkgZ3Vlc3Qgc2Vzc2lvbiB3aWxsIGJlIGFkZGVkIHRvIHRoZVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuaDoxNzM6XFx0ICogaG9zdCBmaWx0ZXIuIFByb3RlY3RlZCBieSB2YmdfZ2Rldi5zZXNzaW9uX211dGV4LlxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuaC0xNzQtXFx0ICovXFxuLS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmgtMTgzLVxcdCAqIEEgY2FwYWJpbGl0eSBjbGFpbWVkIGJ5IGFueSBndWVzdCBzZXNzaW9uIHdpbGwgYmUgcmVwb3J0ZWQgdG8gdGhlXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5oOjE4NDpcXHQgKiBob3N0LiBQcm90ZWN0ZWQgYnkgdmJnX2dkZXYuc2Vzc2lvbl9tdXRleC5cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmgtMTg1LVxcdCAqL1xcbi0tXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy0yNi1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jOjI3Oi8qKiBNdXRleCBwcm90ZWN0aW5nIHRoZSBnbG9iYWwgdmJnX2dkZXYgcG9pbnRlciB1c2VkIGJ5IHZiZ19nZXQvcHV0X2dkZXYuICovXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzoyODpzdGF0aWMgREVGSU5FX01VVEVYKHZiZ19nZGV2X211dGV4KTtcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jOjI5Oi8qKiBHbG9iYWwgdmJnX2dkZXYgcG9pbnRlciB1c2VkIGJ5IHZiZ19nZXQvcHV0X2dkZXYuICovXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzozMDpzdGF0aWMgc3RydWN0IHZiZ19kZXYgKnZiZ19nZGV2O1xcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtMzEtXFxuLS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jPTI4Nz1zdGF0aWMgaW50IHZiZ19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbi0tXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy0zODgtXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzozODk6XFx0bXV0ZXhfbG9jayhcXHUwMDI2dmJnX2dkZXZfbXV0ZXgpO1xcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmM6MzkwOlxcdGlmICghdmJnX2dkZXYpXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzozOTE6XFx0XFx0dmJnX2dkZXYgPSBnZGV2O1xcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtMzkyLVxcdGVsc2VcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTM5My1cXHRcXHRyZXQgPSAtRUJVU1k7XFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzozOTQ6XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2YmdfZ2Rldl9tdXRleCk7XFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy0zOTUtXFxuLS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jPTQxOT1zdGF0aWMgdm9pZCB2YmdfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGNpKVxcbi0tXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy00MjItXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzo0MjM6XFx0bXV0ZXhfbG9jayhcXHUwMDI2dmJnX2dkZXZfbXV0ZXgpO1xcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmM6NDI0OlxcdHZiZ19nZGV2ID0gTlVMTDtcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jOjQyNTpcXHRtdXRleF91bmxvY2soXFx1MDAyNnZiZ19nZGV2X211dGV4KTtcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTQyNi1cXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmM9NDM0PXN0cnVjdCB2YmdfZGV2ICp2YmdfZ2V0X2dkZXYodm9pZClcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTQzNS17XFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzo0MzY6XFx0bXV0ZXhfbG9jayhcXHUwMDI2dmJnX2dkZXZfbXV0ZXgpO1xcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtNDM3LVxcbi0tXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy00NDItXFx0ICovXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzo0NDM6XFx0aWYgKHZiZ19nZGV2KVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmM6NDQ0OlxcdFxcdHJldHVybiB2YmdfZ2RldjtcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTQ0NS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jOjQ0NjpcXHRtdXRleF91bmxvY2soXFx1MDAyNnZiZ19nZGV2X211dGV4KTtcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTQ0Ny1cXHRyZXR1cm4gRVJSX1BUUigtRU5PREVWKTtcXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmM9NDUxPXZvaWQgdmJnX3B1dF9nZGV2KHN0cnVjdCB2YmdfZGV2ICpnZGV2KVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtNDUyLXtcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jOjQ1MzpcXHRXQVJOX09OKGdkZXYgIT0gdmJnX2dkZXYpO1xcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmM6NDU0OlxcdG11dGV4X3VubG9jayhcXHUwMDI2dmJnX2dkZXZfbXV0ZXgpO1xcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtNDU1LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NDk6MzMuNDA5MDY0MDU1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0NzI2NzMzNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgYSBWaXJ0dWFsQm94IEJ1ZyoqXG5cbk9rYXksIHNvIGB2YmdfZ2RldmAgaXMgb25seSBzZXQgd2l0aGluIGB2YmdfcGNpX3Byb2JlYC4gVGhhdCdzIGEgcHJldHR5IGNsZWFyIGluZGljYXRvciB0aGF0IGl0J3Mgc3RyaWN0bHkgdGllZCB0byB0aGUgUENJIGRldmljZS4gSWYgc3l6a2FsbGVyIGZvdW5kIHRoaXMgYnVnLCB0aGF0IG1lYW5zIG9uZSBvZiB0d28gdGhpbmdzOiBlaXRoZXIgc3l6a2FsbGVyIHdhcyBydW5uaW5nIGluc2lkZSBWaXJ0dWFsQm94IChtYWtpbmcgdGhlIFBDSSBkZXZpY2UgYXZhaWxhYmxlKSwgb3Igc3l6a2FsbGVyIGhhcyBzb21lIGNsZXZlciB0cmljayBmb3IgaW5qZWN0aW5nIFBDSSBkZXZpY2VzLiBIbW0sIHdhaXQgYSBtaW51dGUuLi4gSSBrbm93IHN5emthbGxlciAqY2FuKiBpbmplY3QgZGV2aWNlcy4gSSB0aGluayB0aGVyZSBpcyBhIGBzeXpfcGNpX2FkZGAgZnVuY3Rpb24sIGFuZCBJJ20gZ3Vlc3NpbmcgdGhhdCB1c2VzIGB2ZmlvYCBvciBzb21ldGhpbmcgc2ltaWxhci4gTm8sIHRoYXQncyBub3QgcmlnaHQuIFN5emthbGxlciBkb2Vzbid0IGhhdmUgYSAqZ2VuZXJpYyogUENJIGVtdWxhdG9yIHJpZ2h0IGluIHRoZSBrZXJuZWwuIEJ1dCBpdCAqY291bGQqIGZ1enogYHZib3hndWVzdGAgaWYgaXQgcnVucyBpbiBWaXJ0dWFsQm94LlxuXG5SaWdodCwgYmFjayB0byB0aGUgcHJvbXB0LiBJdCBzYXlzIEkgc2hvdWxkIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggYWZmZWN0cyBjb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gZW52aXJvbm1lbnRzICpsaWtlKiBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIElzIFZpcnR1YWxCb3ggY29uc2lkZXJlZCBhIFwidmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVVwiPyBZZXMsIFZpcnR1YWxCb3ggKmlzKiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBCdXQgaXQgdXNlcyB0aGUgd29yZCBcImxpa2UuXCIgRG9lcyB0aGF0IG1hdHRlcj8gSWYgc29tZXRoaW5nIGlzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gR0NFIG9yIFFFTVUsIHRoZW4gSSBzaG91bGQgcmV0dXJuIGZhbHNlLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBJcyB0aGlzIGJ1ZyAqaW1wb3NzaWJsZSogdG8gcmVhY2ggaW4gR0NFIG9yIFFFTVU/IFllcywgaXQgaXMgYmVjYXVzZSBuZWl0aGVyIEdDRSBub3IgUUVNVSBlbXVsYXRlIHRoZSBWaXJ0dWFsQm94IFBDSSBkZXZpY2UuIFNvLCB0aGUgYnVnIGlzIHZlcnkgc3BlY2lmaWMgdG8gVmlydHVhbEJveC5cblxuQnV0IHdhaXQsIHdoYXQgYWJvdXQgdGhlIHNjZW5hcmlvIHdoZXJlIHN5emthbGxlciB1c2VzIGBzeXpfbW91bnRfaW1hZ2VgLCBhbmQgdGhlIGJ1ZyBsaWVzIHdpdGhpbiB0aGUgcGFyc2luZyBvZiB0aGUgaW1hZ2U/IEhtbSwgZG9lcyB0aGF0IGFwcGx5IGhlcmU/IEJ1dCBubywgYHZib3hzZmAgaXMgbm90IGEgYmxvY2sgZmlsZXN5c3RlbS4gSXQncyBuZXR3b3JrLWxpa2UuIFNvLCBhbiBpbWFnZSBpcyBub3QgaW52b2x2ZWQuXG5cbkFoYSwgdGhlIHBhdGNoIGlzIGluIGB2Ym94c2ZfZGlyX2VtaXRgLiBPa2F5LCBva2F5LiBUaW1lIHRvIGdvIGJhY2sgYW5kIHRha2UgYW5vdGhlciBsb29rIGF0IGB2Ym94c2ZfZGlyX2VtaXRgIGRpcmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzU4OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzo0OTozOS44ODE3NDI2MzJaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk0NzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3Zib3hzZi9kaXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMjE6XFx0XFx0XFx0Zm9yIChpID0gMCwgaW5mbyA9IGItXFx1MDAzZWJ1ZjsgaSBcXHUwMDNjIGN0eC1cXHUwMDNlcG9zIC0gY3VyOyBpKyspIHtcXG4gMTIyOlxcdFxcdFxcdFxcdGVuZCA9IFxcdTAwMjZpbmZvLVxcdTAwM2VuYW1lLnN0cmluZy51dGY4W2luZm8tXFx1MDAzZW5hbWUuc2l6ZV07XFxuIDEyMzpcXHRcXHRcXHRcXHQvKiBPbmx5IGhhcHBlbnMgaWYgdGhlIGhvc3QgZ2l2ZXMgdXMgY29ycnVwdCBkYXRhICovXFxuIDEyNDpcXHRcXHRcXHRcXHRpZiAoV0FSTl9PTihlbmQgXFx1MDAzZSAoYi1cXHUwMDNlYnVmICsgYi1cXHUwMDNldXNlZCkpKVxcbiAxMjU6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAxMjY6XFx0XFx0XFx0XFx0aW5mbyA9IGVuZDtcXG4gMTI3OlxcdFxcdFxcdH1cXG4gMTI4OlxcdFxcbiAxMjk6XFx0XFx0XFx0ZW5kID0gXFx1MDAyNmluZm8tXFx1MDAzZW5hbWUuc3RyaW5nLnV0ZjhbaW5mby1cXHUwMDNlbmFtZS5zaXplXTtcXG4gMTMwOlxcdFxcdFxcdGlmIChXQVJOX09OKGVuZCBcXHUwMDNlIChiLVxcdTAwM2VidWYgKyBiLVxcdTAwM2V1c2VkKSkpXFxuIDEzMTpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDEzMjpcXHRcXHRcXHRpZiAoaW5mby1cXHUwMDNlbmFtZS5sZW5ndGggXFx1MDAzZSBpbmZvLVxcdTAwM2VuYW1lLnNpemUpXFxuIDEzMzpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDEzNDpcXHRcXG4gMTM1OlxcdFxcdFxcdC8qIEluZm8gbm93IHBvaW50cyB0byB0aGUgcmlnaHQgZW50cnksIGVtaXQgaXQuICovXFxuIDEzNjpcXHRcXHRcXHRkX3R5cGUgPSB2Ym94c2ZfZ2V0X2RfdHlwZShpbmZvLVxcdTAwM2VpbmZvLmF0dHIubW9kZSk7XFxuIDEzNzpcXHRcXG4gMTM4OlxcdFxcdFxcdC8qXFxuIDEzOTpcXHRcXHRcXHQgKiBPbiAzMi1iaXQgc3lzdGVtcyBwb3MgaXMgNjQtYml0IHNpZ25lZCwgd2hpbGUgaW5vIGlzIDMyLWJpdFxcbiAxNDA6XFx0XFx0XFx0ICogdW5zaWduZWQgc28gZmFrZV9pbm8gbWF5IG92ZXJmbG93LCBjaGVjayBmb3IgdGhpcy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NDk6MzkuODgyMDQyNDgyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NjQ2NjE2NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgQ29ycnVwdCBEYXRhIElzc3VlKipcblxuT2theSwgc28gdGhlIGNvbW1lbnQgcG9pbnRzIHRoZSBmaW5nZXIgYXQgY29ycnVwdCBkYXRhLCBpbXBseWluZyB0aGUgcHJvYmxlbSBvcmlnaW5hdGVzIGZyb20gdGhlIGhvc3QsIHNwZWNpZmljYWxseSBWaXJ0dWFsQm94LiBUaGF0IG1ha2VzIHNlbnNlOyBpZiB0aGUgaG9zdCBwcm92aWRlcyBiYWQgZGF0YSwgd2UgY291bGQgZWFzaWx5IHNlZSBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIHNvbWUgb3RoZXIgbmFzdHkgbWVtb3J5IGNvcnJ1cHRpb24uIEJ1dCB0aGVuIEkgaGF2ZSB0byBhc2sgbXlzZWxmLCBob3cgd291bGQgc3l6a2FsbGVyLCBydW5uaW5nIGluIHRoZSBndWVzdCwgYmUgYWJsZSB0byBldmVuIHRyaWdnZXIgdGhpcyBzY2VuYXJpbz8gU3l6a2FsbGVyIGlzIGNvbmZpbmVkIHRvIHRoZSBndWVzdDsgaXQgY2FuJ3QgZGlyZWN0bHkgbWFuaXB1bGF0ZSB0aGUgaG9zdC4gVW5sZXNz4oCmIGNvdWxkIHN5emthbGxlciBzb21laG93IGludGVyY2VwdCB0aGUgSEdDTSBjYWxscyBhbmQgZmVlZCBiYWNrIGl0cyBvd24sIGludGVudGlvbmFsbHkgY29ycnVwdCBkYXRhP1xuXG5UaGlzIG1ha2VzIG1lIHRoaW5rLCBkb2VzIGB2Ym94Z3Vlc3RgIGhhdmUgYW55IGJ1aWx0LWluIGZlYXR1cmVzIGZvciBmYXVsdCBpbmplY3Rpb24gb3IgcGVyaGFwcyBzb21lIHNvcnQgb2YgZmFrZSBob3N0IG1vZGUgZGVzaWduZWQgZm9yIHRlc3Rpbmc/IEl0IHdvdWxkIG1ha2UgcGVyZmVjdCBzZW5zZSB0byBoYXZlIHNvbWV0aGluZyBsaWtlIHRoYXQuIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGB2Ym94Z3Vlc3RgIGNvZGUgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IGhvb2tzIG9yIGNhcGFiaWxpdGllcyB0byBzaW11bGF0ZSB0aGUgaG9zdCBhbmQgZ2VuZXJhdGUgc3BlY2lmaWMgZGF0YSBzY2VuYXJpb3MuIFRoYXQncyB0aGUga2V5OiBmaW5kaW5nIGEgd2F5IHRvIGNvbnRyb2wgdGhlIGRhdGEgZmxvdyBmcm9tIHRoZSBob3N0LCBldmVuIGluZGlyZWN0bHksIHNvIHdlIGNhbiByZWxpYWJseSByZXByb2R1Y2UgYW5kIGFuYWx5emUgdGhpcyBcImNvcnJ1cHQgZGF0YVwiIGNvbmRpdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ4NTgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzo0OTo0My43NDY3MDY2MTFaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDI1NzkzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmYXVsdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmM9MTI4ND1zdGF0aWMgaW50IHZiZ19yZXFfYWxsb3dlZChzdHJ1Y3QgdmJnX2RldiAqZ2Rldiwgc3RydWN0IHZiZ19zZXNzaW9uICpzZXNzaW9uLFxcbi0tXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jLTEzNTEtXFx0XFx0Y2FzZSBWQk9YR1VFU1RfRkFDSUxJVFlfVFlQRV9HUkFQSElDUzpcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmM6MTM1MjpcXHRcXHRkZWZhdWx0OlxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy0xMzUzLVxcdFxcdFxcdHRydXN0ZWRfYXBwc19vbmx5ID0gZmFsc2U7XFxuLS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmMtMTM1OC1cXHQvKiBBbnl0aGluZyBlbHNlIGlzIG5vdCBhbGxvd2VkLiAqL1xcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYzoxMzU5OlxcdGRlZmF1bHQ6XFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jLTEzNjAtXFx0XFx0dmJnX2VycihcXFwiRGVueWluZyB1c2Vyc3BhY2Ugdm1tIGNhbGwgdHlwZSAlIzA4eFxcXFxuXFxcIixcXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYz0xNDc4PXN0YXRpYyBib29sIHZiZ19wYXJhbV92YWxpZChlbnVtIHZtbWRldl9oZ2NtX2Z1bmN0aW9uX3BhcmFtZXRlcl90eXBlIHR5cGUpXFxuLS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmMtMTQ4Ni1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmM6MTQ4NzpcXHRkZWZhdWx0OlxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy0xNDg4LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X3V0aWxzLmM9MjUxPXN0YXRpYyBpbnQgaGdjbV9jYWxsX3ByZXByb2Nlc3MoXFxuLS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF91dGlscy5jLTI5Ni1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF91dGlscy5jOjI5NzpcXHRcXHRkZWZhdWx0OlxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X3V0aWxzLmMtMjk4LVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfdXRpbHMuYz0zMTI9c3RhdGljIHUzMiBoZ2NtX2NhbGxfbGluZWFyX2FkZHJfdHlwZV90b19wYWdlbGlzdF9mbGFncyhcXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X3V0aWxzLmMtMzE1LVxcdHN3aXRjaCAodHlwZSkge1xcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X3V0aWxzLmM6MzE2OlxcdGRlZmF1bHQ6XFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfdXRpbHMuYy0zMTctXFx0XFx0V0FSTl9PTigxKTtcXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X3V0aWxzLmM9Mzg0PXN0YXRpYyB2b2lkIGhnY21fY2FsbF9pbml0X2NhbGwoXFxuLS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF91dGlscy5jLTQyMy1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF91dGlscy5jOjQyNDpcXHRcXHRkZWZhdWx0OlxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X3V0aWxzLmMtNDI1LVxcdFxcdFxcdFdBUk5fT04oMSk7XFxuLS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF91dGlscy5jPTU2NT1zdGF0aWMgaW50IGhnY21fY2FsbF9jb3B5X2JhY2tfcmVzdWx0KFxcbi0tXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfdXRpbHMuYy02MDYtXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfdXRpbHMuYzo2MDc6XFx0XFx0ZGVmYXVsdDpcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF91dGlscy5jLTYwOC1cXHRcXHRcXHRXQVJOX09OKDEpO1xcbi0tXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfdXRpbHMuYz02NzE9aW50IHZiZ19oZ2NtX2NhbGwzMihcXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X3V0aWxzLmMtNzA2LVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X3V0aWxzLmM6NzA3OlxcdFxcdGRlZmF1bHQ6XFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfdXRpbHMuYy03MDgtXFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X3V0aWxzLmMtNzM1LVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X3V0aWxzLmM6NzM2OlxcdFxcdGRlZmF1bHQ6XFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfdXRpbHMuYy03MzctXFx0XFx0XFx0V0FSTl9PTigxKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NDk6NDMuOTE2OTc0MTkyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0ODM2ODU5NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBWaXJ0dWFsQm94IEJ1ZyBSZXBvcnQqKlxuXG5Pa2F5LCBzbyB0aGVyZSdzIGEgYnVnIHJlcG9ydCBmcm9tIHN5emthbGxlciwgYW5kIHRoZXJlJ3Mgbm8gbWVudGlvbiBvZiBmYXVsdCBpbmplY3Rpb24gb3IgYSBmYWtlZCBob3N0IGVudmlyb25tZW50LiBUaGF0J3MgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGF0IG1lLiBCdXQgaWYgc3l6a2FsbGVyIGZvdW5kIHRoaXMsIGhvdyBleGFjdGx5IGRpZCBpdCBtYW5hZ2UgdG8gbWFuaXB1bGF0ZSBob3N0IGRhdGE/IEhtbS4uLiB3YWl0IGEgbWludXRlLCBgdmJveHNmYCBpcyBhIGZpbGVzeXN0ZW0sIHJpZ2h0PyBTbywgc3l6a2FsbGVyICpjb3VsZCogaGF2ZSBtb3VudGVkIGl0LiBUaGUgaG9zdCAoVmlydHVhbEJveCkgd291bGQgdGhlbiBwcm92aWRlIHRoZSBkYXRhLiBCdXQgVmlydHVhbEJveCBpcyBhICp0cnVzdGVkKiBob3N0LiBJdCBzaG91bGRuJ3QgYmUgcmV0dXJuaW5nIGNvcnJ1cHQgZGF0YSB1bmxlc3MgdGhlcmUncyBhIGJ1ZyBpbiBWaXJ0dWFsQm94IGl0c2VsZiwgb3IuLi4gY291bGQgc3l6a2FsbGVyIGJlIGZ1enppbmcgdGhlIGhvc3QtZ3Vlc3QgY29tbXVuaWNhdGlvbiBzb21laG93P1xuXG5Ib2xkIG9uLi4uIEkgc2VlbSB0byByZWNhbGwgc2VlaW5nIHNvbWV0aGluZyBhYm91dCBhIGBzeXpfdmJveGd1ZXN0YCBmdW5jdGlvbiBzb21ld2hlcmUuIExldCBtZSBjaGVjayBpZiB0aGVyZSdzIGFueSBgc3l6X2AgZnVuY3Rpb24gcmVsYXRlZCB0byBgdmJveGd1ZXN0YCB3aXRoaW4gdGhlIHN5emthbGxlciBjb2RlLiBEYW1taXQsIEkgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIHN5emthbGxlciBzb3VyY2UgcmlnaHQgbm93LiBcblxuQnV0IHdhaXQgYSBtaW51dGUuLi4gY291bGQgaXQgYmUgZnV6emluZyBgdmJveHNmYCB0aHJvdWdoIGEgKmZha2UqIGB2Ym94Z3Vlc3RgIGRldmljZT8gVGhhdCB3b3VsZCBiZSBhIGNsZXZlciB0cmljay4gSSB3b25kZXIgaWYgc3VjaCBhIGZha2UgZGV2aWNlIGV4aXN0cy4gTGV0IG1lIGdvIGJhY2sgYW5kIHJlLWV4YW1pbmUgdGhlIGBkcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L2AgZGlyZWN0b3J5LiBNYXliZSBJIG1pc3NlZCBzb21ldGhpbmcgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2Mjc5LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjQ5OjQ4LjQwMDY2MjkzNFoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2OTI0NTcxLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmYWtlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzo0OTo0OC41MDc1OTY3NDVaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM0NDg0Nzc3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgU3l6a2FsbGVyIEZ1enppbmcgU2NlbmFyaW8qKlxuXG5Pa2F5LCBubyBzbW9rZSBhbmQgbWlycm9ycywganVzdCBwdXJlIGFuYWx5c2lzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJJcyBzeXprYWxsZXIgYWN0dWFsbHkgdGFyZ2V0aW5nIGAvZGV2L3Zib3hndWVzdGAgZGlyZWN0bHkgZnJvbSB1c2Vyc3BhY2U/XCIgVGhpcyBwYXRoIHNlZW1zIGludGVyZXN0aW5nLCBnaXZlbiB0aGF0IGAvZGV2L3Zib3hndWVzdGAgaXMgdGhlIGNvbmR1aXQgZm9yIHVzZXJzcGFjZSB0byBtYWtlIEhHQ00gY2FsbHMgdG8gdGhlIGhvc3QuIEhvd2V2ZXIsIGB2Ym94c2ZgIGlzIGEgKmtlcm5lbCogZmlsZXN5c3RlbSwgYWxzbyBjYXBhYmxlIG9mIHNlbmRpbmcgSEdDTSBjYWxscy4gSWYgc3l6a2FsbGVyJ3MgZm9jdXNlZCBvbiBgdmJveHNmYCwgaXQgd291bGQgbW91bnQgdGhlIGZpbGVzeXN0ZW0gYW5kIHBlcmZvcm0gZmlsZXN5c3RlbSBvcGVyYXRpb25zLCByaWdodD8gQnV0IGhvdyBleGFjdGx5IGNvdWxkIHN5emthbGxlciB0cmlnZ2VyIHRoaXMgXCJjb3JydXB0IGRhdGEgZnJvbSBob3N0XCIgc2NlbmFyaW8/XG5cbkl0J3MgZ290IG1lIHRoaW5raW5nLCB3YXMgdGhpcyBkaXNjb3ZlcmVkIGJ5IGEgZGlmZmVyZW50IGZ1enplciwgb3IgcGVyaGFwcyBzeXprYWxsZXIgc3R1bWJsZWQgdXBvbiBpdD8gQ291bGQgaXQgaGF2ZSBiZWVuIGFibGUgdG8gY29uc3RydWN0IGEgZGlyZWN0b3J5IG5hbWUgdGhhdCdzIGxhcmdlciB0aGFuIHRoZSBhbGxvY2F0ZWQgc2l6ZT8gVGhhdCBsYXN0IHRob3VnaHQgZmVlbHMgcHJvbWlzaW5nLi4uIFdhaXQgYSBtaW51dGUsIHdoYXQgaWYgd2XigJlyZSBkZWFsaW5nIHdpdGggYSBgaW5mby1cdTAwM2VuYW1lLmxlbmd0aCBcdTAwM2UgaW5mby1cdTAwM2VuYW1lLnNpemVgIHNpdHVhdGlvbj9cblxuTGV0IG1lIGludmVzdGlnYXRlIHRoYXQuIElmIGBpbmZvYCBpcyBhIGB2Ym94c2ZfZGlyX2luZm9gIHN0cnVjdCwgdGhpcyBjb3VsZCBiZSB0aGUga2V5LiBMZXQncyBkZWx2ZSBpbnRvIHRoZSBgdmJveHNmX2Rpcl9pbmZvYCBkZWZpbml0aW9uIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY4MjksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NDk6NTIuODUyNDQ3NzUxWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDczMDU5NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmJveHNmX2Rpcl9pbmZvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Zib3hzZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvdmJveHNmL2Rpci5jPTEyPXN0YXRpYyBpbnQgdmJveHNmX2Rpcl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxuZnMvdmJveHNmL2Rpci5jLTE1LVxcdHN0cnVjdCBzaGZsX2NyZWF0ZXBhcm1zIHBhcmFtcyA9IHt9O1xcbmZzL3Zib3hzZi9kaXIuYzoxNjpcXHRzdHJ1Y3QgdmJveHNmX2Rpcl9pbmZvICpzZl9kO1xcbmZzL3Zib3hzZi9kaXIuYy0xNy1cXHRpbnQgZXJyO1xcbmZzL3Zib3hzZi9kaXIuYy0xOC1cXG5mcy92Ym94c2YvZGlyLmM6MTk6XFx0c2ZfZCA9IHZib3hzZl9kaXJfaW5mb19hbGxvYygpO1xcbmZzL3Zib3hzZi9kaXIuYy0yMC1cXHRpZiAoIXNmX2QpXFxuLS1cXG5mcy92Ym94c2YvZGlyLmMtNDYtZXJyX2ZyZWVfZGlyX2luZm86XFxuZnMvdmJveHNmL2Rpci5jOjQ3OlxcdHZib3hzZl9kaXJfaW5mb19mcmVlKHNmX2QpO1xcbmZzL3Zib3hzZi9kaXIuYy00OC1cXHRyZXR1cm4gZXJyO1xcbi0tXFxuZnMvdmJveHNmL2Rpci5jPTUxPXN0YXRpYyBpbnQgdmJveHNmX2Rpcl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxuZnMvdmJveHNmL2Rpci5jLTUzLVxcdGlmIChmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGEpXFxuZnMvdmJveHNmL2Rpci5jOjU0OlxcdFxcdHZib3hzZl9kaXJfaW5mb19mcmVlKGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YSk7XFxuZnMvdmJveHNmL2Rpci5jLTU1LVxcbi0tXFxuZnMvdmJveHNmL2Rpci5jPTk1PXN0YXRpYyBib29sIHZib3hzZl9kaXJfZW1pdChzdHJ1Y3QgZmlsZSAqZGlyLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcXG4tLVxcbmZzL3Zib3hzZi9kaXIuYy05Ny1cXHRzdHJ1Y3QgdmJveHNmX3NiaSAqc2JpID0gVkJPWFNGX1NCSShmaWxlX2lub2RlKGRpciktXFx1MDAzZWlfc2IpO1xcbmZzL3Zib3hzZi9kaXIuYzo5ODpcXHRzdHJ1Y3QgdmJveHNmX2Rpcl9pbmZvICpzZl9kID0gZGlyLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuZnMvdmJveHNmL2Rpci5jLTk5LVxcdHN0cnVjdCBzaGZsX2RpcmluZm8gKmluZm87XFxuLS1cXG5mcy92Ym94c2YvZGlyLmMtMTE0LVxcdFxcdC8qXFxuZnMvdmJveHNmL2Rpci5jOjExNTpcXHRcXHQgKiBOb3RlIHRoZSB2Ym94c2ZfZGlyX2luZm8gb2JqZWN0cyB3ZSBhcmUgaXRlcmF0aW5nIG92ZXIgaGVyZVxcbmZzL3Zib3hzZi9kaXIuYy0xMTYtXFx0XFx0ICogYXJlIHZhcmlhYmxlIHNpemVkLCBzbyB0aGUgaW5mbyBwb2ludGVyIG1heSBlbmQgdXAgYmVpbmdcXG4tLVxcbmZzL3Zib3hzZi91dGlscy5jPTQ5OT1zdGF0aWMgdm9pZCB2Ym94c2ZfZGlyX2J1Zl9mcmVlKHN0cnVjdCB2Ym94c2ZfZGlyX2J1ZiAqYilcXG4tLVxcbmZzL3Zib3hzZi91dGlscy5jLTUwNS1cXG5mcy92Ym94c2YvdXRpbHMuYzo1MDY6c3RydWN0IHZib3hzZl9kaXJfaW5mbyAqdmJveHNmX2Rpcl9pbmZvX2FsbG9jKHZvaWQpXFxuZnMvdmJveHNmL3V0aWxzLmMtNTA3LXtcXG5mcy92Ym94c2YvdXRpbHMuYzo1MDg6XFx0c3RydWN0IHZib3hzZl9kaXJfaW5mbyAqcDtcXG5mcy92Ym94c2YvdXRpbHMuYy01MDktXFxuLS1cXG5mcy92Ym94c2YvdXRpbHMuYy01MTctXFxuZnMvdmJveHNmL3V0aWxzLmM6NTE4OnZvaWQgdmJveHNmX2Rpcl9pbmZvX2ZyZWUoc3RydWN0IHZib3hzZl9kaXJfaW5mbyAqcClcXG5mcy92Ym94c2YvdXRpbHMuYy01MTkte1xcbi0tXFxuZnMvdmJveHNmL3V0aWxzLmMtNTMxLVxcbmZzL3Zib3hzZi91dGlscy5jOjUzMjppbnQgdmJveHNmX2Rpcl9yZWFkX2FsbChzdHJ1Y3QgdmJveHNmX3NiaSAqc2JpLCBzdHJ1Y3QgdmJveHNmX2Rpcl9pbmZvICpzZl9kLFxcbmZzL3Zib3hzZi91dGlscy5jLTUzMy1cXHRcXHRcXHR1NjQgaGFuZGxlKVxcbi0tXFxuZnMvdmJveHNmL3Zmc21vZC5oPTUzPXN0cnVjdCB2Ym94c2ZfaW5vZGUge1xcbi0tXFxuZnMvdmJveHNmL3Zmc21vZC5oLTYzLVxcbmZzL3Zib3hzZi92ZnNtb2QuaDo2NDpzdHJ1Y3QgdmJveHNmX2Rpcl9pbmZvIHtcXG5mcy92Ym94c2YvdmZzbW9kLmgtNjUtXFx0c3RydWN0IGxpc3RfaGVhZCBpbmZvX2xpc3Q7XFxuLS1cXG5mcy92Ym94c2YvdmZzbW9kLmg9MTA3PWludCB2Ym94c2ZfbmxzY3B5KHN0cnVjdCB2Ym94c2Zfc2JpICpzYmksIGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX2JvdW5kX2xlbixcXG5mcy92Ym94c2YvdmZzbW9kLmgtMTA4LVxcdFxcdCAgY29uc3QgdW5zaWduZWQgY2hhciAqdXRmOF9uYW1lLCBzaXplX3QgdXRmOF9sZW4pO1xcbmZzL3Zib3hzZi92ZnNtb2QuaDoxMDk6c3RydWN0IHZib3hzZl9kaXJfaW5mbyAqdmJveHNmX2Rpcl9pbmZvX2FsbG9jKHZvaWQpO1xcbmZzL3Zib3hzZi92ZnNtb2QuaDoxMTA6dm9pZCB2Ym94c2ZfZGlyX2luZm9fZnJlZShzdHJ1Y3QgdmJveHNmX2Rpcl9pbmZvICpwKTtcXG5mcy92Ym94c2YvdmZzbW9kLmg6MTExOmludCB2Ym94c2ZfZGlyX3JlYWRfYWxsKHN0cnVjdCB2Ym94c2Zfc2JpICpzYmksIHN0cnVjdCB2Ym94c2ZfZGlyX2luZm8gKnNmX2QsXFxuZnMvdmJveHNmL3Zmc21vZC5oLTExMi1cXHRcXHRcXHR1NjQgaGFuZGxlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NDk6NTIuOTU5NzYxNjUyWiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2MjQzNTQwOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyBgc2hmbF9kaXJpbmZvYCoqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYGluZm9gIGlzIGRlZmluZWQgYXMgYSBgc3RydWN0IHNoZmxfZGlyaW5mb2AuIExldCdzIHBhdXNlIGFuZCBkaWcgaW50byB0aGF0IHNwZWNpZmljIHN0cnVjdHVyZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgdGhhdCBzdHJ1Y3QgaXMgYWN0dWFsbHkgY29tcG9zZWQgb2YuIFdoYXQgYXJlIHRoZSBrZXkgZmllbGRzIHdpdGhpbiBgc2hmbF9kaXJpbmZvYD8gVW5kZXJzdGFuZGluZyB0aG9zZSBtZW1iZXJzIGlzIGNydWNpYWwgdG8gaW50ZXJwcmV0aW5nIHRoZSBuZXh0IHN0ZXBzLiBJJ20gZ29pbmcgdG8gcXVpY2tseSByZWZlcmVuY2UgdGhlIGRvY3VtZW50YXRpb24gb3IgaGVhZGVyIGZpbGUgZm9yIGBzaGZsX2RpcmluZm9gLi4uIFRoaXMgaGVscHMgbWUgc2VlIGl0cyBtYWtldXAgd2l0aGluIHRoZSBncmVhdGVyIGNvbnRleHQsIGFzIEkgcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg1MTEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzo0OTo1NS41ODQxMTg1MDdaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4NTY0MjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBzaGZsX2RpcmluZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvdmJveHNmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy92Ym94c2YvZGlyLmM9OTU9c3RhdGljIGJvb2wgdmJveHNmX2Rpcl9lbWl0KHN0cnVjdCBmaWxlICpkaXIsIHN0cnVjdCBkaXJfY29udGV4dCAqY3R4KVxcbi0tXFxuZnMvdmJveHNmL2Rpci5jLTk4LVxcdHN0cnVjdCB2Ym94c2ZfZGlyX2luZm8gKnNmX2QgPSBkaXItXFx1MDAzZXByaXZhdGVfZGF0YTtcXG5mcy92Ym94c2YvZGlyLmM6OTk6XFx0c3RydWN0IHNoZmxfZGlyaW5mbyAqaW5mbztcXG5mcy92Ym94c2YvZGlyLmMtMTAwLVxcdHN0cnVjdCB2Ym94c2ZfZGlyX2J1ZiAqYjtcXG4tLVxcbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmg9Mzk2PXN0cnVjdCBzaGZsX2NyZWF0ZXBhcm1zIHtcXG4tLVxcbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmgtNDEzLS8qKiBTaGFyZWQgRm9sZGVyIGRpcmVjdG9yeSBpbmZvcm1hdGlvbiAqL1xcbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmg6NDE0OnN0cnVjdCBzaGZsX2RpcmluZm8ge1xcbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmgtNDE1LVxcdC8qKiBGdWxsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvYmplY3QuICovXFxuLS1cXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oPTY2Mz1zdHJ1Y3Qgc2hmbF9saXN0IHtcXG4tLVxcbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmgtNjk1LVxcdCAqIHBvaW50ZXIsIG91dDpcXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oOjY5NjpcXHQgKiBCdWZmZXIgdG8gcGxhY2UgbGlzdGluZyBpbmZvcm1hdGlvbiB0by4gKHN0cnVjdCBzaGZsX2RpcmluZm8pXFxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaC02OTctXFx0ICovXFxuLS1cXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM9MjUwPWludCB2Ym94c2ZfZGlyaW5mbyh1MzIgcm9vdCwgdTY0IGhhbmRsZSxcXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMjUxLVxcdFxcdCAgIHN0cnVjdCBzaGZsX3N0cmluZyAqcGFyc2VkX3BhdGgsIHUzMiBmbGFncywgdTMyIGluZGV4LFxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYzoyNTI6XFx0XFx0ICAgdTMyICpidWZfbGVuLCBzdHJ1Y3Qgc2hmbF9kaXJpbmZvICpidWYsIHUzMiAqZmlsZV9jb3VudClcXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMjUzLXtcXG4tLVxcbmZzL3Zib3hzZi92ZnNtb2QuaD0xMjk9aW50IHZib3hzZl9kaXJpbmZvKHUzMiByb290LCB1NjQgaGFuZGxlLFxcbmZzL3Zib3hzZi92ZnNtb2QuaC0xMzAtXFx0XFx0ICAgc3RydWN0IHNoZmxfc3RyaW5nICpwYXJzZWRfcGF0aCwgdTMyIGZsYWdzLCB1MzIgaW5kZXgsXFxuZnMvdmJveHNmL3Zmc21vZC5oOjEzMTpcXHRcXHQgICB1MzIgKmJ1Zl9sZW4sIHN0cnVjdCBzaGZsX2RpcmluZm8gKmJ1ZiwgdTMyICpmaWxlX2NvdW50KTtcXG5mcy92Ym94c2YvdmZzbW9kLmgtMTMyLWludCB2Ym94c2ZfZnNpbmZvKHUzMiByb290LCB1NjQgaGFuZGxlLCB1MzIgZmxhZ3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjQ5OjU1LjY4MjY5MjM3WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNzMyMDYyOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBWaXJ0dWFsQm94IFNoYXJlZCBGb2xkZXJzIEtlcm5lbCBNb2R1bGUqKlxuXG5SaWdodCwgbGV0J3Mgc2VlLCB0aGUgc3RydWN0dXJlIGBzaGZsX2RpcmluZm9gLi4uIHRoYXQncyBkZWZpbmVkIGluIGBmcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oYC4gT2theSwgc28gd2UncmUgdGFsa2luZyBhYm91dCB0aGUgVmlydHVhbEJveCBTaGFyZWQgRm9sZGVycyBrZXJuZWwgbW9kdWxlLCBzcGVjaWZpY2FsbHkgdGhlIGludGVyZmFjZSB3aXRoIHRoZSBob3N0LiBcInNoZmxcIiBsaWtlbHkgc3RhbmRzIGZvciBcInNoYXJlZCBmb2xkZXIsXCIgYW5kIGBkaXJpbmZvYCBzdHJvbmdseSBzdWdnZXN0cyB0aGlzIHN0cnVjdHVyZSBjb250YWlucyBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIGRpcmVjdG9yeSBsaXN0aW5ncyBvciBwZXJoYXBzIGF0dHJpYnV0ZSByZXRyaWV2YWwgZm9yIHNoYXJlZCBkaXJlY3Rvcmllcy4gV2UncmUgcHJvYmFibHkgbG9va2luZyBhdCBob3cgdGhlIGd1ZXN0IE9TIGludGVyYWN0cyB3aXRoIHRoZSBob3N0IGZpbGVzeXN0ZW0gdGhyb3VnaCB0aGlzIG1vZHVsZS4gS25vd2luZyB0aGUgaGVhZGVyIGZpbGUgaXQncyBpbiBpcyBrZXk7IGl0J2xsIGdpdmUgdXMgdGhlIGRlY2xhcmF0aW9uIG9mIHRoZSBzdHJ1Y3R1cmUgaXRzZWxmLCBhbmQgd2UgY2FuIGFsc28gc2VlIGFueSByZWxhdGVkIGZ1bmN0aW9ucyB0aGF0IGFyZSBkZWNsYXJlZCBpbiB0aGUgc2FtZSBoZWFkZXIgZmlsZS4gSWYgSSBuZWVkIHRvIGRlYnVnIG9yIGRpdmUgZGVlcGVyLCB0aGlzIGlzIHRoZSBwZXJmZWN0IHN0YXJ0aW5nIHBvaW50LiBUaGUgbmFtZSBpbXBsaWVzIGRpcmVjdG9yeSBkZXRhaWxzIGFyZSBzdG9yZWQgd2l0aGluIHRoaXMgc3RydWN0dXJlLCBzbyBpdCdzIHByb2JhYmx5IGhvdyBWQm94U0YgaGFuZGxlcyB0aGluZ3MgbGlrZSBkaXJlY3RvcnkgcGVybWlzc2lvbnMsIHRpbWVzdGFtcHMsIG9yIHBlcmhhcHMgZXZlbiBmaWxlIHNpemUgd2hlbiB0aGUgZ3Vlc3QgT1MgaW50ZXJhY3RzIHdpdGggdGhlIHNoYXJlZCBmb2xkZXJzLiBUaGUgaW5jbHVzaW9uIG9mIGBzaGZsX2hvc3RpbnRmLmhgIHNpZ25pZmllcyB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGludGVyZmFjZSBiZXR3ZWVuIHRoZSBWQm94U0Yga2VybmVsIG1vZHVsZSBhbmQgdGhlIGhvc3Qgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTM3MiwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjQ5OjU4Ljg1NTkwMzc4OVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjYyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA0MTMsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MTM6XFx0LyoqIFNoYXJlZCBGb2xkZXIgZGlyZWN0b3J5IGluZm9ybWF0aW9uICovXFxuIDQxNDpcXHRzdHJ1Y3Qgc2hmbF9kaXJpbmZvIHtcXG4gNDE1OlxcdFxcdC8qKiBGdWxsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvYmplY3QuICovXFxuIDQxNjpcXHRcXHRzdHJ1Y3Qgc2hmbF9mc29iamluZm8gaW5mbztcXG4gNDE3OlxcdFxcdC8qKlxcbiA0MTg6XFx0XFx0ICogVGhlIGxlbmd0aCBvZiB0aGUgc2hvcnQgZmllbGQgKG51bWJlciBvZiBVVEYxNiBjaGFycykuXFxuIDQxOTpcXHRcXHQgKiBJdCBpcyAxNi1iaXQgZm9yIHJlYXNvbnMgb2YgYWxpZ25tZW50LlxcbiA0MjA6XFx0XFx0ICovXFxuIDQyMTpcXHRcXHR1MTYgc2hvcnRfbmFtZV9sZW47XFxuIDQyMjpcXHRcXHQvKipcXG4gNDIzOlxcdFxcdCAqIFRoZSBzaG9ydCBuYW1lIGZvciA4LjMgY29tcGF0aWJpbGl0eS5cXG4gNDI0OlxcdFxcdCAqIEVtcHR5IHN0cmluZyBpZiBub3QgYXZhaWxhYmxlLlxcbiA0MjU6XFx0XFx0ICovXFxuIDQyNjpcXHRcXHR1MTYgc2hvcnRfbmFtZVsxNF07XFxuIDQyNzpcXHRcXHRzdHJ1Y3Qgc2hmbF9zdHJpbmcgbmFtZTtcXG4gNDI4OlxcdH07XFxuIDQyOTpcXHRcXG4gNDMwOlxcdC8qKiBTaGFyZWQgZm9sZGVyIGZpbGVzeXN0ZW0gcHJvcGVydGllcy4gKi9cXG4gNDMxOlxcdHN0cnVjdCBzaGZsX2ZzcHJvcGVydGllcyB7XFxuIDQzMjpcXHRcXHQvKipcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NDk6NTguODU2MDczODE5WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MTc5MzgyMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyB0aGUgU3RydWN0dXJlIERlZmluaXRpb25zKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoZSBjb2RlLCBhbmQgSSBzZWUgdGhlIGZhbWlsaWFyIGBzdHJ1Y3Qgc2hmbF9zdHJpbmdgIGRlZmluZWQgaW4gdGhpcyBibG9jay4gVGhpcyBpc24ndCB1bmV4cGVjdGVkLCBvZiBjb3Vyc2UuIEknZCBuZWVkIHRvIGdvIGRlZXBlciB0byB1bmRlcnN0YW5kIGl0cyBwcmVjaXNlIHJvbGUgaW4gdGhlIGJyb2FkZXIgc3lzdGVtLCBhbmQgdGhlIGZ1bmN0aW9ucyB0aGF0IHVzZSBpdCwgYnV0IHNlZWluZyB0aGlzIGRlZmluaXRpb24gaXMgYSBkYXRhIHBvaW50LiBJdCB0ZWxscyBtZSB0aGF0IHdoYXRldmVyIGxpYnJhcnkgb3IgbW9kdWxlIEknbSBleGFtaW5pbmcgbGlrZWx5IHJlbGllcyBvbiBzb21lIGN1c3RvbSBzdHJpbmcgcmVwcmVzZW50YXRpb24sIHdoaWNoIGlzIHZlcnkgY29tbW9uIGluIGhpZ2gtcGVyZm9ybWFuY2Ugb3IgcmVzb3VyY2UtY29uc3RyYWluZWQgZW52aXJvbm1lbnRzLiBJJ2xsIG1lbnRhbGx5IHRhZyB0aGlzIGFzIHNvbWV0aGluZyB0byBpbnZlc3RpZ2F0ZSBmb3IgaXRzIG1lbW9yeSBsYXlvdXQsIHBvdGVudGlhbCBvcHRpbWl6YXRpb24gdGVjaG5pcXVlcyAoZS5nLiwgU21hbGwgU3RyaW5nIE9wdGltaXphdGlvbiksIGFuZCBob3cgaXQgaGFuZGxlcyBzdHJpbmcgbWFuaXB1bGF0aW9uLiBLbm93aW5nIHRoZSBkZXRhaWxzIG9mIGl0cyBzdHJ1Y3R1cmUgd2lsbCB0ZWxsIG1lIG11Y2ggbW9yZSBhYm91dCB0aGUgcmVzdCBvZiB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk5OTgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjUwOjAxLjY3NDAxNjk5WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzg0NDAwODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IHNoZmxfc3RyaW5nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Zib3hzZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvdmJveHNmL2Rpci5jPTM1NT1zdGF0aWMgaW50IHZib3hzZl9kaXJfdW5saW5rKHN0cnVjdCBpbm9kZSAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuLS1cXG5mcy92Ym94c2YvZGlyLmMtMzU5LVxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkX2lub2RlKGRlbnRyeSk7XFxuZnMvdmJveHNmL2Rpci5jOjM2MDpcXHRzdHJ1Y3Qgc2hmbF9zdHJpbmcgKnBhdGg7XFxuZnMvdmJveHNmL2Rpci5jLTM2MS1cXHR1MzIgZmxhZ3M7XFxuLS1cXG5mcy92Ym94c2YvZGlyLmM9Mzg3PXN0YXRpYyBpbnQgdmJveHNmX2Rpcl9yZW5hbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLS1cXG5mcy92Ym94c2YvZGlyLmMtMzk3LVxcdHUzMiBzaGZsX2ZsYWdzID0gU0hGTF9SRU5BTUVfRklMRSB8IFNIRkxfUkVOQU1FX1JFUExBQ0VfSUZfRVhJU1RTO1xcbmZzL3Zib3hzZi9kaXIuYzozOTg6XFx0c3RydWN0IHNoZmxfc3RyaW5nICpvbGRfcGF0aCwgKm5ld19wYXRoO1xcbmZzL3Zib3hzZi9kaXIuYy0zOTktXFx0aW50IGVycjtcXG4tLVxcbmZzL3Zib3hzZi9kaXIuYz00MzA9c3RhdGljIGludCB2Ym94c2ZfZGlyX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLS1cXG5mcy92Ym94c2YvZGlyLmMtNDM2LVxcdGludCBzeW1uYW1lX3NpemUgPSBzdHJsZW4oc3ltbmFtZSkgKyAxO1xcbmZzL3Zib3hzZi9kaXIuYzo0Mzc6XFx0c3RydWN0IHNoZmxfc3RyaW5nICpwYXRoLCAqc3N5bW5hbWU7XFxuZnMvdmJveHNmL2Rpci5jLTQzOC1cXHRzdHJ1Y3Qgc2hmbF9mc29iamluZm8gaW5mbztcXG4tLVxcbmZzL3Zib3hzZi9maWxlLmM9MzU5PXN0YXRpYyBjb25zdCBjaGFyICp2Ym94c2ZfZ2V0X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvdmJveHNmL2ZpbGUuYy0zNjItXFx0c3RydWN0IHZib3hzZl9zYmkgKnNiaSA9IFZCT1hTRl9TQkkoaW5vZGUtXFx1MDAzZWlfc2IpO1xcbmZzL3Zib3hzZi9maWxlLmM6MzYzOlxcdHN0cnVjdCBzaGZsX3N0cmluZyAqcGF0aDtcXG5mcy92Ym94c2YvZmlsZS5jLTM2NC1cXHRjaGFyICpsaW5rO1xcbi0tXFxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaD0yNz1lbnVtIHtcXG4tLVxcbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmgtNjEtLyoqIFNoYXJlZCBmb2xkZXIgc3RyaW5nIGJ1ZmZlciBzdHJ1Y3R1cmUuICovXFxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaDo2MjpzdHJ1Y3Qgc2hmbF9zdHJpbmcge1xcbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmgtNjMtXFx0LyoqIEFsbG9jYXRlZCBzaXplIG9mIHRoZSBzdHJpbmcgbWVtYmVyIGluIGJ5dGVzLiAqL1xcbi0tXFxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaD03Nj1WTU1ERVZfQVNTRVJUX1NJWkUoc2hmbF9zdHJpbmcsIDYpO1xcbi0tXFxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaC04MS0vKiBDYWxjdWxhdGUgc2l6ZSBvZiB0aGUgc3RyaW5nLiAqL1xcbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmg6ODI6c3RhdGljIGlubGluZSB1MzIgc2hmbF9zdHJpbmdfYnVmX3NpemUoY29uc3Qgc3RydWN0IHNoZmxfc3RyaW5nICpzdHJpbmcpXFxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaC04My17XFxuLS1cXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oPTQxND1zdHJ1Y3Qgc2hmbF9kaXJpbmZvIHtcXG4tLVxcbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmgtNDI2LVxcdHUxNiBzaG9ydF9uYW1lWzE0XTtcXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oOjQyNzpcXHRzdHJ1Y3Qgc2hmbF9zdHJpbmcgbmFtZTtcXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oLTQyOC19O1xcbi0tXFxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaD00ODc9c3RydWN0IHNoZmxfbWFwX2ZvbGRlciB7XFxuLS1cXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oLTQ4OS1cXHQgKiBwb2ludGVyLCBpbjpcXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oOjQ5MDpcXHQgKiBQb2ludHMgdG8gc3RydWN0IHNoZmxfc3RyaW5nIGJ1ZmZlci5cXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oLTQ5MS1cXHQgKi9cXG4tLVxcbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmg9NTMzPXN0cnVjdCBzaGZsX2NyZWF0ZSB7XFxuLS1cXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oLTU0MS1cXHQgKiBwb2ludGVyLCBpbjpcXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oOjU0MjpcXHQgKiBQb2ludHMgdG8gc3RydWN0IHNoZmxfc3RyaW5nIGJ1ZmZlci5cXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oLTU0My1cXHQgKi9cXG4tLVxcbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmg9NjYzPXN0cnVjdCBzaGZsX2xpc3Qge1xcbi0tXFxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaC02ODktXFx0ICogcG9pbnRlciwgaW4vb3B0aW9uYWxcXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oOjY5MDpcXHQgKiBQb2ludHMgdG8gc3RydWN0IHNoZmxfc3RyaW5nIGJ1ZmZlciB0aGF0IHNwZWNpZmllcyBhIHNlYXJjaCBwYXRoLlxcbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmgtNjkxLVxcdCAqL1xcbi0tXFxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaD03MjA9c3RydWN0IHNoZmxfcmVhZExpbmsge1xcbi0tXFxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaC03MjgtXFx0ICogcG9pbnRlciwgaW46XFxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaDo3Mjk6XFx0ICogUG9pbnRzIHRvIHN0cnVjdCBzaGZsX3N0cmluZyBidWZmZXIuXFxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaC03MzAtXFx0ICovXFxuLS1cXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oPTgxMD1zdHJ1Y3Qgc2hmbF9yZW1vdmUge1xcbi0tXFxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaC04MTgtXFx0ICogcG9pbnRlciwgaW46XFxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaDo4MTk6XFx0ICogUG9pbnRzIHRvIHN0cnVjdCBzaGZsX3N0cmluZyBidWZmZXIuXFxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaC04MjAtXFx0ICovXFxuLS1cXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oPTg0MT1zdHJ1Y3Qgc2hmbF9yZW5hbWUge1xcbi0tXFxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaC04NDktXFx0ICogcG9pbnRlciwgaW46XFxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaDo4NTA6XFx0ICogUG9pbnRzIHRvIHN0cnVjdCBzaGZsX3N0cmluZyBzcmMuXFxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaC04NTEtXFx0ICovXFxuLS1cXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oLTg1NS1cXHQgKiBwb2ludGVyLCBpbjpcXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oOjg1NjpcXHQgKiBQb2ludHMgdG8gc3RydWN0IHNoZmxfc3RyaW5nIGRlc3QuXFxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaC04NTctXFx0ICovXFxuLS1cXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oPTg3Mj1zdHJ1Y3Qgc2hmbF9zeW1saW5rIHtcXG4tLVxcbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmgtODgwLVxcdCAqIHBvaW50ZXIsIGluOlxcbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmg6ODgxOlxcdCAqIFBvaW50cyB0byBzdHJ1Y3Qgc2hmbF9zdHJpbmcgb2YgcGF0aCBmb3IgdGhlIG5ldyBzeW1saW5rLlxcbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmgtODgyLVxcdCAqL1xcbi0tXFxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaC04ODYtXFx0ICogcG9pbnRlciwgaW46XFxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaDo4ODc6XFx0ICogUG9pbnRzIHRvIHN0cnVjdCBzaGZsX3N0cmluZyBvZiBkZXN0aW5hdGlvbiBmb3Igc3ltbGluay5cXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oLTg4OC1cXHQgKi9cXG4tLVxcbmZzL3Zib3hzZi9zdXBlci5jPTExMT1zdGF0aWMgaW50IHZib3hzZl9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL3Zib3hzZi9zdXBlci5jLTExMy1cXHRzdHJ1Y3QgdmJveHNmX2ZzX2NvbnRleHQgKmN0eCA9IGZjLVxcdTAwM2Vmc19wcml2YXRlO1xcbmZzL3Zib3hzZi9zdXBlci5jOjExNDpcXHRzdHJ1Y3Qgc2hmbF9zdHJpbmcgKmZvbGRlcl9uYW1lLCByb290X3BhdGg7XFxuZnMvdmJveHNmL3N1cGVyLmMtMTE1LVxcdHN0cnVjdCB2Ym94c2Zfc2JpICpzYmk7XFxuLS1cXG5mcy92Ym94c2YvdXRpbHMuYz0xMzg9aW50IHZib3hzZl9jcmVhdGVfYXRfZGVudHJ5KHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL3Zib3hzZi91dGlscy5jLTE0MS1cXHRzdHJ1Y3QgdmJveHNmX3NiaSAqc2JpID0gVkJPWFNGX1NCSShkZW50cnktXFx1MDAzZWRfc2IpO1xcbmZzL3Zib3hzZi91dGlscy5jOjE0MjpcXHRzdHJ1Y3Qgc2hmbF9zdHJpbmcgKnBhdGg7XFxuZnMvdmJveHNmL3V0aWxzLmMtMTQzLVxcdGludCBlcnI7XFxuLS1cXG5mcy92Ym94c2YvdXRpbHMuYy0xNTQtXFxuZnMvdmJveHNmL3V0aWxzLmM6MTU1OmludCB2Ym94c2Zfc3RhdChzdHJ1Y3QgdmJveHNmX3NiaSAqc2JpLCBzdHJ1Y3Qgc2hmbF9zdHJpbmcgKnBhdGgsXFxuZnMvdmJveHNmL3V0aWxzLmMtMTU2LVxcdFxcdHN0cnVjdCBzaGZsX2Zzb2JqaW5mbyAqaW5mbylcXG4tLVxcbmZzL3Zib3hzZi91dGlscy5jPTE3Nz1pbnQgdmJveHNmX3N0YXRfZGVudHJ5KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IHNoZmxfZnNvYmppbmZvICppbmZvKVxcbi0tXFxuZnMvdmJveHNmL3V0aWxzLmMtMTc5LVxcdHN0cnVjdCB2Ym94c2Zfc2JpICpzYmkgPSBWQk9YU0ZfU0JJKGRlbnRyeS1cXHUwMDNlZF9zYik7XFxuZnMvdmJveHNmL3V0aWxzLmM6MTgwOlxcdHN0cnVjdCBzaGZsX3N0cmluZyAqcGF0aDtcXG5mcy92Ym94c2YvdXRpbHMuYy0xODEtXFx0aW50IGVycjtcXG4tLVxcbmZzL3Zib3hzZi91dGlscy5jPTI2MD1pbnQgdmJveHNmX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL3Zib3hzZi91dGlscy5jLTM2NS0gKi9cXG5mcy92Ym94c2YvdXRpbHMuYzozNjY6c3RydWN0IHNoZmxfc3RyaW5nICp2Ym94c2ZfcGF0aF9mcm9tX2RlbnRyeShzdHJ1Y3QgdmJveHNmX3NiaSAqc2JpLFxcbmZzL3Zib3hzZi91dGlscy5jLTM2Ny1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbmZzL3Zib3hzZi91dGlscy5jLTM2OC17XFxuZnMvdmJveHNmL3V0aWxzLmM6MzY5OlxcdHN0cnVjdCBzaGZsX3N0cmluZyAqc2hmbF9wYXRoO1xcbmZzL3Zib3hzZi91dGlscy5jLTM3MC1cXHRpbnQgcGF0aF9sZW4sIG91dF9sZW4sIG5iO1xcbi0tXFxuZnMvdmJveHNmL3V0aWxzLmMtNDI3LVxcdFxcdCAqL1xcbmZzL3Zib3hzZi91dGlscy5jOjQyODpcXHRcXHRzaGZsX3BhdGggPSAoc3RydWN0IHNoZmxfc3RyaW5nICopYnVmO1xcbmZzL3Zib3hzZi91dGlscy5jLTQyOS1cXHRcXHRtZW1tb3ZlKHNoZmxfcGF0aC1cXHUwMDNlc3RyaW5nLnV0ZjgsIHBhdGgsIHBhdGhfbGVuKTtcXG4tLVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYz01Mz1zdGF0aWMgaW50IHZib3hzZl9jYWxsKHUzMiBmdW5jdGlvbiwgdm9pZCAqcGFybXMsIHUzMiBwYXJtX2NvdW50LCBpbnQgKnN0YXR1cylcXG4tLVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy03NC1cXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM6NzU6aW50IHZib3hzZl9tYXBfZm9sZGVyKHN0cnVjdCBzaGZsX3N0cmluZyAqZm9sZGVyX25hbWUsIHUzMiAqcm9vdClcXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtNzYte1xcbi0tXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jPTEwMj1pbnQgdmJveHNmX3VubWFwX2ZvbGRlcih1MzIgcm9vdClcXG4tLVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy0xMjktICovXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jOjEzMDppbnQgdmJveHNmX2NyZWF0ZSh1MzIgcm9vdCwgc3RydWN0IHNoZmxfc3RyaW5nICpwYXJzZWRfcGF0aCxcXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMTMxLVxcdFxcdCAgc3RydWN0IHNoZmxfY3JlYXRlcGFybXMgKmNyZWF0ZV9wYXJtcylcXG4tLVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYz0xNDk9aW50IHZib3hzZl9jbG9zZSh1MzIgcm9vdCwgdTY0IGhhbmRsZSlcXG4tLVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy0xNjEtXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jOjE2MjppbnQgdmJveHNmX3JlbW92ZSh1MzIgcm9vdCwgc3RydWN0IHNoZmxfc3RyaW5nICpwYXJzZWRfcGF0aCwgdTMyIGZsYWdzKVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy0xNjMte1xcbi0tXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTE3OC1cXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM6MTc5OmludCB2Ym94c2ZfcmVuYW1lKHUzMiByb290LCBzdHJ1Y3Qgc2hmbF9zdHJpbmcgKnNyY19wYXRoLFxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYzoxODA6XFx0XFx0ICBzdHJ1Y3Qgc2hmbF9zdHJpbmcgKmRlc3RfcGF0aCwgdTMyIGZsYWdzKVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy0xODEte1xcbi0tXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jPTI1MD1pbnQgdmJveHNmX2RpcmluZm8odTMyIHJvb3QsIHU2NCBoYW5kbGUsXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jOjI1MTpcXHRcXHQgICBzdHJ1Y3Qgc2hmbF9zdHJpbmcgKnBhcnNlZF9wYXRoLCB1MzIgZmxhZ3MsIHUzMiBpbmRleCxcXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMjUyLVxcdFxcdCAgIHUzMiAqYnVmX2xlbiwgc3RydWN0IHNoZmxfZGlyaW5mbyAqYnVmLCB1MzIgKmZpbGVfY291bnQpXFxuLS1cXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM9Mjk0PWludCB2Ym94c2ZfZnNpbmZvKHUzMiByb290LCB1NjQgaGFuZGxlLCB1MzIgZmxhZ3MsXFxuLS1cXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMzE5LVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYzozMjA6aW50IHZib3hzZl9yZWFkbGluayh1MzIgcm9vdCwgc3RydWN0IHNoZmxfc3RyaW5nICpwYXJzZWRfcGF0aCxcXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMzIxLVxcdFxcdCAgICB1MzIgYnVmX2xlbiwgdTggKmJ1ZilcXG4tLVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy0zMzktXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jOjM0MDppbnQgdmJveHNmX3N5bWxpbmsodTMyIHJvb3QsIHN0cnVjdCBzaGZsX3N0cmluZyAqbmV3X3BhdGgsXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jOjM0MTpcXHRcXHQgICBzdHJ1Y3Qgc2hmbF9zdHJpbmcgKm9sZF9wYXRoLCBzdHJ1Y3Qgc2hmbF9mc29iamluZm8gKmJ1ZilcXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMzQyLXtcXG4tLVxcbmZzL3Zib3hzZi92ZnNtb2QuaD05ND1pbnQgdmJveHNmX2NyZWF0ZV9hdF9kZW50cnkoc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbmZzL3Zib3hzZi92ZnNtb2QuaC05NS1cXHRcXHRcXHQgICAgc3RydWN0IHNoZmxfY3JlYXRlcGFybXMgKnBhcmFtcyk7XFxuZnMvdmJveHNmL3Zmc21vZC5oOjk2OmludCB2Ym94c2Zfc3RhdChzdHJ1Y3QgdmJveHNmX3NiaSAqc2JpLCBzdHJ1Y3Qgc2hmbF9zdHJpbmcgKnBhdGgsXFxuZnMvdmJveHNmL3Zmc21vZC5oLTk3LVxcdFxcdHN0cnVjdCBzaGZsX2Zzb2JqaW5mbyAqaW5mbyk7XFxuLS1cXG5mcy92Ym94c2YvdmZzbW9kLmg9MTAzPWludCB2Ym94c2Zfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbmZzL3Zib3hzZi92ZnNtb2QuaC0xMDQtXFx0XFx0ICAgc3RydWN0IGlhdHRyICppYXR0cik7XFxuZnMvdmJveHNmL3Zmc21vZC5oOjEwNTpzdHJ1Y3Qgc2hmbF9zdHJpbmcgKnZib3hzZl9wYXRoX2Zyb21fZGVudHJ5KHN0cnVjdCB2Ym94c2Zfc2JpICpzYmksXFxuZnMvdmJveHNmL3Zmc21vZC5oLTEwNi1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcXG4tLVxcbmZzL3Zib3hzZi92ZnNtb2QuaD0xMTY9dm9pZCB2Ym94c2ZfZGlzY29ubmVjdCh2b2lkKTtcXG5mcy92Ym94c2YvdmZzbW9kLmgtMTE3LVxcbmZzL3Zib3hzZi92ZnNtb2QuaDoxMTg6aW50IHZib3hzZl9jcmVhdGUodTMyIHJvb3QsIHN0cnVjdCBzaGZsX3N0cmluZyAqcGFyc2VkX3BhdGgsXFxuZnMvdmJveHNmL3Zmc21vZC5oLTExOS1cXHRcXHQgIHN0cnVjdCBzaGZsX2NyZWF0ZXBhcm1zICpjcmVhdGVfcGFybXMpO1xcbi0tXFxuZnMvdmJveHNmL3Zmc21vZC5oPTEyMT1pbnQgdmJveHNmX2Nsb3NlKHUzMiByb290LCB1NjQgaGFuZGxlKTtcXG5mcy92Ym94c2YvdmZzbW9kLmg6MTIyOmludCB2Ym94c2ZfcmVtb3ZlKHUzMiByb290LCBzdHJ1Y3Qgc2hmbF9zdHJpbmcgKnBhcnNlZF9wYXRoLCB1MzIgZmxhZ3MpO1xcbmZzL3Zib3hzZi92ZnNtb2QuaDoxMjM6aW50IHZib3hzZl9yZW5hbWUodTMyIHJvb3QsIHN0cnVjdCBzaGZsX3N0cmluZyAqc3JjX3BhdGgsXFxuZnMvdmJveHNmL3Zmc21vZC5oOjEyNDpcXHRcXHQgIHN0cnVjdCBzaGZsX3N0cmluZyAqZGVzdF9wYXRoLCB1MzIgZmxhZ3MpO1xcbmZzL3Zib3hzZi92ZnNtb2QuaC0xMjUtXFxuLS1cXG5mcy92Ym94c2YvdmZzbW9kLmg9MTI5PWludCB2Ym94c2ZfZGlyaW5mbyh1MzIgcm9vdCwgdTY0IGhhbmRsZSxcXG5mcy92Ym94c2YvdmZzbW9kLmg6MTMwOlxcdFxcdCAgIHN0cnVjdCBzaGZsX3N0cmluZyAqcGFyc2VkX3BhdGgsIHUzMiBmbGFncywgdTMyIGluZGV4LFxcbmZzL3Zib3hzZi92ZnNtb2QuaC0xMzEtXFx0XFx0ICAgdTMyICpidWZfbGVuLCBzdHJ1Y3Qgc2hmbF9kaXJpbmZvICpidWYsIHUzMiAqZmlsZV9jb3VudCk7XFxuZnMvdmJveHNmL3Zmc21vZC5oPTEzMj1pbnQgdmJveHNmX2ZzaW5mbyh1MzIgcm9vdCwgdTY0IGhhbmRsZSwgdTMyIGZsYWdzLFxcbi0tXFxuZnMvdmJveHNmL3Zmc21vZC5oLTEzNC1cXG5mcy92Ym94c2YvdmZzbW9kLmg6MTM1OmludCB2Ym94c2ZfbWFwX2ZvbGRlcihzdHJ1Y3Qgc2hmbF9zdHJpbmcgKmZvbGRlcl9uYW1lLCB1MzIgKnJvb3QpO1xcbmZzL3Zib3hzZi92ZnNtb2QuaC0xMzYtaW50IHZib3hzZl91bm1hcF9mb2xkZXIodTMyIHJvb3QpO1xcbmZzL3Zib3hzZi92ZnNtb2QuaC0xMzctXFxuZnMvdmJveHNmL3Zmc21vZC5oOjEzODppbnQgdmJveHNmX3JlYWRsaW5rKHUzMiByb290LCBzdHJ1Y3Qgc2hmbF9zdHJpbmcgKnBhcnNlZF9wYXRoLFxcbmZzL3Zib3hzZi92ZnNtb2QuaC0xMzktXFx0XFx0ICAgIHUzMiBidWZfbGVuLCB1OCAqYnVmKTtcXG5mcy92Ym94c2YvdmZzbW9kLmg6MTQwOmludCB2Ym94c2Zfc3ltbGluayh1MzIgcm9vdCwgc3RydWN0IHNoZmxfc3RyaW5nICpuZXdfcGF0aCxcXG5mcy92Ym94c2YvdmZzbW9kLmg6MTQxOlxcdFxcdCAgIHN0cnVjdCBzaGZsX3N0cmluZyAqb2xkX3BhdGgsIHN0cnVjdCBzaGZsX2Zzb2JqaW5mbyAqYnVmKTtcXG5mcy92Ym94c2YvdmZzbW9kLmgtMTQyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzo1MDowMS44MTI0NjE0MDZaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE4OTA1NTQ4OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTeXprYWxsZXItVHJpZ2dlcmVkIFZib3hzZiBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgc3RydWN0IHNoZmxfc3RyaW5nYCBhbmQgaXRzIGBsZW5ndGhgIGFuZCBgc2l6ZWAgbWVtYmVycy4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBzYW5pdHkgY2hlY2sgaW4gYHZib3hzZl9kaXJfZW1pdGA6IGBpZiAoaW5mby1cdTAwM2VuYW1lLmxlbmd0aCBcdTAwM2UgaW5mby1cdTAwM2VuYW1lLnNpemUpIHJldHVybiBmYWxzZTtgLiBTeXprYWxsZXIgZm91bmQgdGhpcywgd2hpY2ggbWVhbnMgaXQgdHJpZ2dlcmVkIGEgc3RhdGUgd2hlcmUgdGhlIHN0cmluZydzIHJlcG9ydGVkIGxlbmd0aCBleGNlZWRzIGl0cyBhbGxvY2F0ZWQgc2l6ZS4gVGhpcyBpcyBpbnRlcmVzdGluZy5cblxuVGhlIHByb21wdCB0aGVuIHBvc2VzIGEgcXVlc3Rpb24gYWJvdXQgY29kZSBwYXRocyBkZWVtZWQgXCJpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLlwiIFRoZSBrZXkgaXMgd2hldGhlciB0aGlzIHZ1bG5lcmFiaWxpdHkgZmFsbHMgaW50byB0aGF0IGNhdGVnb3J5LiBTaW5jZSBzeXprYWxsZXIgZm91bmQgaXQsIHRoZSBpbXBsaWNhdGlvbiBpcyB0aGF0IGl0J3MgKnJlYWNoYWJsZSosIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIG15IGNvbmNlcm4uXG5cbklmIHN5emthbGxlciBpcyBydW5uaW5nIG9uIFZpcnR1YWxCb3gsIGFzIGl0cyBgdm1fdHlwZTogXCJ2Ym94XCJgIHN1Z2dlc3RzLCB0aGVuIHRoYXQgc2VlbXMgcG9zc2libGUuIFRoaXMgaXMgd2hlcmUgSSBoYXZlIHRvIHN0b3AgYW5kIGJlIHByZWNpc2Ugd2l0aCBteSByZWFkaW5nLiBJcyBWaXJ0dWFsQm94IGNvbnNpZGVyZWQgYSBcInZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgR0NFIG9yIFFFTVVcIj8gKlllcyosIGl0IGlzLiBIb3dldmVyLCB0aGUgd29yZGluZyBjb3VsZCBiZSBpbnRlcnByZXRlZCBhcyBcImltcG9zc2libGUgdG8gcmVhY2ggaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuXCJcblxuVGhlIG9yaWdpbmFsIHByb2JsZW0gY2VudGVycyBhcm91bmQgdGhlIFZpcnR1YWxCb3ggUENJIGRldmljZSwgYW5kIHRoZSBjb2RlIGNsZWFybHkgcmVsaWVzIG9uIGl0LiBJIHJlLXJlYWQgdGhlIHByb21wdDogXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zLi4uIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4uLlwiIElmIGl0J3MgKm9ubHkqIHJlYWNoYWJsZSBpbiBWaXJ0dWFsQm94IGJlY2F1c2Ugb2YgdGhpcyBQQ0kgZGVwZW5kZW5jeSwgc2hvdWxkIEkgcmV0dXJuIGBmYWxzZWA/IEl0IHNlZW1zIGxpa2UgSSBzaG91bGQuXG5cbkkgcXVpY2tseSBjaGVjayB0aGUgb2J2aW91cy4gVGhlcmUgaXNuJ3QgYW55IGVtdWxhdGlvbiBvZiB0aGUgVmlydHVhbEJveCBQQ0kgZGV2aWNlIGluIFFFTVUgb3IgR0NFLiBJJ3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBgdmJveHNmX2ZpbGxfc3VwZXJgIHBhdGggY2FsbHMgYHZib3hzZl9jb25uZWN0KClgLCB3aGljaCB0aGVuIGNhbGxzIGB2YmdfZ2V0X2dkZXYoKWAsIGFuZCB0aGF0IHRoaXMgcmV0dXJucyBgLUVOT0RFVmAgaWYgdGhlIFBDSSBkZXZpY2UgaXNuJ3QgYXZhaWxhYmxlLiBUaGVyZWZvcmUsIHdpdGhvdXQgdGhlIFZpcnR1YWxCb3ggUENJIGRldmljZSwgaXQgc2hvdWxkIGJlIGltcG9zc2libGUgdG8gbW91bnQgdGhlIGZpbGVzeXN0ZW0gYW5kIHRodXMgaW1wb3NzaWJsZSB0byByZWFjaCB0aGF0IHBhcnRpY3VsYXIgY29kZSBwYXRoLlxuXG5CdXQgd2FpdCwgc3l6a2FsbGVyICpmb3VuZCogaXQhIFNvIGhvdz8gVGhlbiBpdCBoaXQgbWU6IHN5emthbGxlciBoYXMgYSBcInZib3hcIiBWTSB0eXBlISBUaGUgaW1wbGljYXRpb24gaXMgdGhhdCBpdCdzIHJ1bm5pbmcgaW5zaWRlIFZpcnR1YWxCb3guIFRoYXQgbWVhbnMgaXQgKmNhbiogcmVhY2ggdGhpcyBjb2RlIHBhdGgsIHdoaWNoIGlzIGRpcmVjdGx5IGNvbnRyYWRpY3RpbmcgdGhlIHdvcmRpbmcgb2YgdGhlIHByb21wdCwgYXMgVmlydHVhbEJveCBpcyBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlxuXG5Ob3cgSSBhbSBhdCBhIGZvcmsgaW4gdGhlIHJvYWQuIERvZXMgdGhlIHByb21wdCdzIHBocmFzZSBcImltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVVcIiBtZWFuIFwiaW1wb3NzaWJsZSB0byByZWFjaCBpbiAqYW55KiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCxcIiBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWZpYyB0byAqc3RhbmRhcmQqIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBhcyBpdCBzZWVtcyB0byBiZSBpbXBseWluZz8gVG8gcmVzb2x2ZSB0aGlzLCBJIGhhdmUgdG8gYXNzdW1lIHRoZSBpbnRlbnQgaXMgZm9yIGhhcmR3YXJlLXNwZWNpZmljIGNvZGUgdGhhdCBjYW5ub3QgYmUgdGVzdGVkIGluIGEgVk0uIFRoYXQsIGhvd2V2ZXIsIGlzIG5vdCB0aGUgY2FzZSBoZXJlLCBhcyBgdmJveHNmYCBpcyAqc3BlY2lmaWNhbGx5KiBkZXNpZ25lZCB0byBiZSB0ZXN0ZWQgaW4gVk1zIChWaXJ0dWFsQm94KS4gVGhlIHByb21wdCAqbWVudGlvbnMqIFwidmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXCIgYnV0IFZpcnR1YWxCb3ggKmlzKiBvbmUgb2YgdGhvc2UgZW52aXJvbm1lbnRzLlxuXG5JbiB0aGlzIHNjZW5hcmlvLCByZXR1cm5pbmcgYGZhbHNlYCB3b3VsZCBtZWFuIGlnbm9yaW5nIGEgcG90ZW50aWFsbHkgdmFsaWQgZmlsZXN5c3RlbSBidWcgdGhhdCBzeXprYWxsZXIgY2FuIGluZGVlZCBmdXp6IHdoZW4gcnVubmluZyBpbiBWaXJ0dWFsQm94LiBJcyBgdmJveHNmYCB3b3J0aCBmdXp6aW5nPyBZZXMsIGl0J3MgYSBmaWxlc3lzdGVtLCBzbyBieSBkZWZhdWx0LCBJIHNob3VsZCBjb25zaWRlciBpdCB3b3J0aCBmdXp6aW5nLiBUaGUgY29uY2x1c2lvbiwgdGhlbiwgaXMgdGhhdCAqaXQgaXMgd29ydGggZnV6emluZyosIGFuZCBzbyBJJ2xsIG5lZWQgdG8gcmV0dXJuIGB0cnVlYC5cblxuU2luY2UgSSdtIHJldHVybmluZyBgdHJ1ZWAsIEkgbmVlZCB0byBzcGVjaWZ5IGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AuIGBGb2N1c1N5bWJvbHNgIHdvdWxkIGluY2x1ZGU6IGB2Ym94c2ZfZGlyX2VtaXRgLCBgdmJveHNmX2Rpcl9yZWFkX2FsbGAsIGFuZCBzbyBvbi4gYEVuYWJsZUNvbmZpZ3NgIHdvdWxkIGNvbnNpc3Qgb2YgYFZCT1hTRl9GU2AgYW5kIGBWQk9YR1VFU1RgLiBJIHNob3VsZCBhbHNvIGNoZWNrIHRoZSBLY29uZmlnIGZvciBgdmJveHNmYCB0byBjb25maXJtIGFsbCBvZiB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDY2MCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NTA6MTMuNzAzMDIwODIzWiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg5NTU3OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZCT1hTRl9GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy92Ym94c2YvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Zib3hzZi9LY29uZmlnOjE6Y29uZmlnIFZCT1hTRl9GU1xcbmZzL3Zib3hzZi9LY29uZmlnLTItXFx0dHJpc3RhdGUgXFxcIlZpcnR1YWxCb3ggZ3Vlc3Qgc2hhcmVkIGZvbGRlciAodmJveHNmKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzo1MDoxMy44MjE5ODEwODJaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc0NTg5Njc3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgVmlydHVhbEJveCBTaGFyZWQgRm9sZGVyIEtjb25maWcqKlxuXG5BbHJpZ2h0LCBJIHNlZSBhIGJyZWFkY3J1bWIgLSBgZnMvdmJveHNmL0tjb25maWdgLiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgVmlydHVhbEJveCBzaGFyZWQgZm9sZGVycyB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0IGFyZSB3ZSB0cnlpbmcgdG8gdW5kZXJzdGFuZCBoZXJlPyBBcmUgd2UgdHJhY2tpbmcgZG93biBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gcHJvYmxlbT8gT3IgcGVyaGFwcyBsb29raW5nIHRvIG9wdGltaXplIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGZvciBhIHN5c3RlbSB0aGF0IGxldmVyYWdlcyBWaXJ0dWFsQm94P1xuXG5JIGV4cGVjdCB0byBmaW5kIGFsbCB0aGUgdXN1YWwgS2NvbmZpZyBlbGVtZW50czogYGNvbmZpZ2AgYmxvY2tzIGRlZmluaW5nIGJvb2xlYW4sIHRyaXN0YXRlLCBvciBzdHJpbmcgb3B0aW9ucy4gSSdsbCBiZSBsb29raW5nIGZvciBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgaGVscCB0ZXh0LiBLZXkgYXJlYXMgb2YgaW50ZXJlc3Qgd2lsbCBiZTpcblxuKiAgICoqRGVwZW5kZW5jaWVzOioqIFdoYXQgb3RoZXIga2VybmVsIGZlYXR1cmVzIG9yIG1vZHVsZXMgbmVlZCB0byBiZSBlbmFibGVkIGJlZm9yZSBgdmJveHNmYCBjYW4gYmUgY29uZmlndXJlZD8gVGhpcyBnaXZlcyBpbnNpZ2h0cyBpbnRvIHRoZSBvdmVyYWxsIHN5c3RlbSByZXF1aXJlbWVudHMuXG4qICAgKipEZWZhdWx0IFZhbHVlczoqKiBBcmUgdGhlIGRlZmF1bHRzIHNlbnNpYmxlIGZvciBjb21tb24gdXNlIGNhc2VzPyBPciBtaWdodCB0aGVyZSBiZSBhIG5lZWQgdG8gb3ZlcnJpZGUgdGhlbSBmb3IgcGFydGljdWxhciBlbnZpcm9ubWVudHM/XG4qICAgKipIZWxwIFRleHQ6KiogSXMgaXQgY2xlYXIgd2hhdCBlYWNoIG9wdGlvbiBkb2VzPyBJcyB0aGUgZG9jdW1lbnRhdGlvbiBjb21wcmVoZW5zaXZlIGFuZCBhY2N1cmF0ZSwgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgcmVsYXRpb25zaGlwIHdpdGggdGhlIHVuZGVybHlpbmcgVmlydHVhbEJveCBob3N0P1xuXG5CYXNlZCBvbiB0aGUgc3RydWN0dXJlIGFuZCBjb250ZW50IG9mIHRoaXMgS2NvbmZpZywgSSBjYW4gZGV0ZXJtaW5lIHdoZXJlIGB2Ym94c2ZgIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSdsbCBsb29rIGZvciBob3cgdGhlIG1vZHVsZSBpbnRlcmFjdHMgd2l0aCBmaWxlc3lzdGVtIHR5cGVzLCBuZXR3b3JrIGludGVyZmFjZXMsIGFuZCBhbnkgc2VjdXJpdHkgY29udGV4dHMuIEkgd2lsbCBhbHNvIG1ha2Ugbm90ZXMgYWJvdXQgaG93IHRvIG1vZGlmeSB0aGUgY29uZmlndXJhdGlvbiBvciB0cm91Ymxlc2hvb3QgaXRzIGltcGxlbWVudGF0aW9uIGZvciBiZXR0ZXIgdW5kZXJzdGFuZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY2NzgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzo1MDoxNy41Njc4ODEwOTJaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwNTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3Zib3hzZi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Y29uZmlnIFZCT1hTRl9GU1xcbiAgIDI6XFx0XFx0dHJpc3RhdGUgXFxcIlZpcnR1YWxCb3ggZ3Vlc3Qgc2hhcmVkIGZvbGRlciAodmJveHNmKSBzdXBwb3J0XFxcIlxcbiAgIDM6XFx0XFx0ZGVwZW5kcyBvbiAoQVJNNjQgfHwgWDg2KSBcXHUwMDI2XFx1MDAyNiBWQk9YR1VFU1RcXG4gICA0OlxcdFxcdHNlbGVjdCBOTFNcXG4gICA1OlxcdFxcdGhlbHBcXG4gICA2OlxcdFxcdCAgVmlydHVhbEJveCBob3N0cyBjYW4gc2hhcmUgZm9sZGVycyB3aXRoIGd1ZXN0cywgdGhpcyBkcml2ZXJcXG4gICA3OlxcdFxcdCAgaW1wbGVtZW50cyB0aGUgTGludXgtZ3Vlc3Qgc2lkZSBvZiB0aGlzIGFsbG93aW5nIGZvbGRlcnMgZXhwb3J0ZWRcXG4gICA4OlxcdFxcdCAgYnkgdGhlIGhvc3QgdG8gYmUgbW91bnRlZCB1bmRlciBMaW51eC5cXG4gICA5OlxcdFxcbiAgMTA6XFx0XFx0ICBJZiB5b3Ugd2FudCB0byB1c2Ugc2hhcmVkIGZvbGRlcnMgaW4gVmlydHVhbEJveCBndWVzdHMsIGFuc3dlciBZIG9yIE0uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjUwOjE3LjU2Nzk5Mzk2MloiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODM3NDAxODU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIGEgVmlydHVhbEJveC1TcGVjaWZpYyBCdWcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEknbSB0aGlua2luZyBhYm91dCBgVkJPWEdVRVNUYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0aGF0IGBFbmFibGVDb25maWdzYCBzaG91bGQgaW5jbHVkZSBib3RoIGBWQk9YU0ZfRlNgIGFuZCBgVkJPWEdVRVNUYCBiZWNhdXNlIGl0J3MgcHJvYmFibHkgZGVwZW5kZW50IG9uIHRoYXQuIEJ1dCB0aGVuIEkgcmUtcmVhZCB0aGUgcHJvbXB0LiBJdCdzIHNwZWNpZmljYWxseSB0YWxraW5nIGFib3V0IGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBlbnZpcm9ubWVudHMgKmxpa2UqIEdDRSBvciBRRU1VLCBldmVuIHdpdGggZW11bGF0ZWQgaGFyZHdhcmUuIFRoZSBwaHJhc2luZyBpcyBrZXkg4oCTIG1lbnRpb25pbmcgXCJsaWtlIEdDRSBvciBRRU1VXCIgbWFrZXMgbWUgdGhpbmsgdGhhdCAqaWYqIHRoaXMgYnVnIHJlcXVpcmVzIGEgaHlwZXJ2aXNvciB0aGF0J3MgKm5vdCogR0NFIG9yIFFFTVUsIHRoZW4gaXQncyBlZmZlY3RpdmVseSB1bnJlYWNoYWJsZSBpbiB0aGUgY29udGV4dCBvZiB0aGUgcHJvbXB0J3MgZm9jdXMuXG5cbk15IG1pbmQgdGhlbiBnb2VzIHRvIFN5emthbGxlciDigJMgb3VyIHByaW1hcnkgZnV6emluZyB0b29sLiBTeXprYWxsZXIgcnVucyBwcmltYXJpbHkgb24gR0NFIGFuZCBRRU1VLiBJZiB0aGlzIGJ1ZyBsaXZlcyBpbiBgdmJveHNmYCwgdGhhdCBzY3JlYW1zIFZpcnR1YWxCb3gtc3BlY2lmaWMuIEJ1dCB3YWl0Li4uIERvZXMgU3l6a2FsbGVyIGV2ZW4gKnVzZSogVmlydHVhbEJveCBpbnN0YW5jZXM/IEkgcmVtZW1iZXIgdGhlcmUgKmlzKiBhIGB2Ym94YCBWTSB0eXBlIGluIFN5emthbGxlciwgYnV0IGl0J3MgZmFyIGxlc3MgY29tbW9uIHRoYW4gYHFlbXVgIG9yIGBnY2VgLlxuXG5Pa2F5LCBidXQgaGFuZyBvbiBhIG1pbnV0ZS4uLiBUaGUgY29tbWl0IG1lc3NhZ2UhIEl0IHNheXMgXCJzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcIi4gVGhhdCBtZWFucyBTeXprYWxsZXIgKmRpZCogZmluZCB0aGlzIGJ1Zywgd2hpY2ggaW1wbGllcyBpdCdzIHJlYWNoYWJsZSBzb21laG93IHdpdGhpbiBTeXprYWxsZXIncyBzZXR1cCEgVGhpcyBtZWFucyBJJ20gbWlzc2luZyBzb21ldGhpbmcuIE1heWJlIFN5emthbGxlciBoYXMgYSB3YXkgdG8gZnV6eiBgdmJveHNmYCB3aXRob3V0IG5lZWRpbmcgYW4gYWN0dWFsIFZpcnR1YWxCb3ggaW5zdGFuY2UuIFNvbWUga2luZCBvZiBlbXVsYXRpb24/IEkgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBpcyBzb21lIGB2Ym94Z3Vlc3RgIGVtdWxhdGlvbiBpbiB0aGUga2VybmVsLlxuXG5MZXQgbWUgc2VlLi4uSSBzZWFyY2hlZCBmb3IgdGhlIHRlcm0gXCJmYWtlXCIgdG8gdHJ5IGFuZCBmaW5kIGFueSwgYnV0IG5vdGhpbmcuIFdoYXQgYWJvdXQgXCJkdW1teT9cIlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzIwOSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjUwOjIzLjQwNTM5ODM1OVoiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyODA0NjUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImR1bW15XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYz00Nj1zdGF0aWMgdm9pZCB2YmdfZ3Vlc3RfbWFwcGluZ3NfaW5pdChzdHJ1Y3QgdmJnX2RldiAqZ2RldilcXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy04MC1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmM6ODE6XFx0Z2Rldi1cXHUwMDNlZ3Vlc3RfbWFwcGluZ3NfZHVtbXlfcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0hJR0hVU0VSKTtcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmM6ODI6XFx0aWYgKCFnZGV2LVxcdTAwM2VndWVzdF9tYXBwaW5nc19kdW1teV9wYWdlKVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy04My1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy04NS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgKHNpemUgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7IGkrKylcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmM6ODY6XFx0XFx0cGFnZXNbaV0gPSBnZGV2LVxcdTAwM2VndWVzdF9tYXBwaW5nc19kdW1teV9wYWdlO1xcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy04Ny1cXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy0xMTQtXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jOjExNTpcXHQvKiBPbiBmYWlsdXJlIGZyZWUgdGhlIGR1bW15LXBhZ2UgYmFja2luZyB0aGUgdm1hcCAqL1xcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy0xMTYtXFx0aWYgKCFnZGV2LVxcdTAwM2VndWVzdF9tYXBwaW5ncykge1xcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYzoxMTc6XFx0XFx0X19mcmVlX3BhZ2UoZ2Rldi1cXHUwMDNlZ3Vlc3RfbWFwcGluZ3NfZHVtbXlfcGFnZSk7XFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jOjExODpcXHRcXHRnZGV2LVxcdTAwM2VndWVzdF9tYXBwaW5nc19kdW1teV9wYWdlID0gTlVMTDtcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmMtMTE5LVxcdH1cXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYz0xMzE9c3RhdGljIHZvaWQgdmJnX2d1ZXN0X21hcHBpbmdzX2V4aXQoc3RydWN0IHZiZ19kZXYgKmdkZXYpXFxuLS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmMtMTYyLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYzoxNjM6XFx0X19mcmVlX3BhZ2UoZ2Rldi1cXHUwMDNlZ3Vlc3RfbWFwcGluZ3NfZHVtbXlfcGFnZSk7XFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jOjE2NDpcXHRnZGV2LVxcdTAwM2VndWVzdF9tYXBwaW5nc19kdW1teV9wYWdlID0gTlVMTDtcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmMtMTY1LX1cXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuaD02Nz1zdHJ1Y3QgdmJnX2RldiB7XFxuLS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmgtODAtXFx0ICovXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5oOjgxOlxcdHN0cnVjdCBwYWdlICpndWVzdF9tYXBwaW5nc19kdW1teV9wYWdlO1xcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuaC04Mi1cXHR2b2lkICpndWVzdF9tYXBwaW5ncztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NTA6MjMuNTA4MjEyMDMxWiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMjMzMTI0OTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIGEgVmlydHVhbEJveCBGaWxlc3lzdGVtIEJ1ZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIGl0J3MgXCJXb3J0aEZ1enppbmdcIi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGluIHR5cGljYWwgZnV6emluZyBlbnZpcm9ubWVudHMuIE5vIGR1bW15IGRldmljZTsgdGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGFib3V0IGB2Ym94c2ZgLCB0aGUgVmlydHVhbEJveCBzaGFyZWQgZm9sZGVyIGZpbGVzeXN0ZW0uIENhbiBJIG1vdW50IGl0IHdpdGhvdXQgYHZib3hndWVzdGA/IE5vLCBiZWNhdXNlIGB2Ym94c2ZfY29ubmVjdGAgbmVlZHMgYHZib3hndWVzdGAgdG8gYmUgcHJvYmVkLiBJdCBjYWxscyBgdmJnX2dldF9nZGV2YCwgd2hpY2ggcmV0dXJucyBhbiBlcnJvciBpZiBgdmJnX2dkZXZgIGlzIE5VTEwuIFNvLCBpdCdzIHN0cmljdGx5IGRlcGVuZGVudCBvbiB0aGUgYHZib3hndWVzdGAgUENJIGRyaXZlciwgd2hpY2ggYmluZHMgdG8gYFBDSV9WRU5ET1JfSURfVkJPWGAgYW5kIGBQQ0lfREVWSUNFX0lEX1ZCT1hfR1VFU1RgLlxuXG5UaGUgbmV4dCB0aG91Z2h0IGlzIHdoZXRoZXIgc3l6a2FsbGVyIGNhbiBpbmplY3QgdGhpcyBQQ0kgZGV2aWNlLiBEb2VzIGl0IGhhdmUgc29tZXRoaW5nIGxpa2UgYHN5el9wY2lfYWRkYD8gQWN0dWFsbHksIGl0ICpkb2VzKiBoYXZlIHNvbWV0aGluZyBzaW1pbGFyPyBMZXQncyBjaGVjayBmb3IgUENJIGluamVjdGlvbiBtZWNoYW5pc21zIGluIHRoZSBrZXJuZWwuIEkga25vdyBhYm91dCBgQ09ORklHX1BDSV9FTkRQT0lOVF9URVNUYCwgYHZmaW9gLCBhbmQgYHBjaV9zdHViYCwgYnV0IHN5emthbGxlciBkb2Vzbid0IHR5cGljYWxseSB1c2UgdGhlc2UgdG8gZW11bGF0ZSBhcmJpdHJhcnkgUENJIGRldmljZXMuIFdhaXQhIFN5emthbGxlciAqZG9lcyogaGF2ZSBgc3l6X2t2bWAsIHdoaWNoIGNhbiBydW4gYSBuZXN0ZWQgVk0uIEJ1dCB0aGUgcHJvYmxlbSBpcywgYHZib3hndWVzdGAgaXNuJ3QgYSBLVk0gZGV2aWNlLlxuXG5TbywgaG93IGRpZCBzeXprYWxsZXIgZmluZCB0aGlzIGJ1Zz8gTWF5YmUgaXQgd2FzIHJ1bm5pbmcgaW4gYSBWaXJ0dWFsQm94IFZNPyBBbmQgeWVzLCBzeXprYWxsZXIgZG9lcyBzdXBwb3J0IFZpcnR1YWxCb3guIElmIHN5emthbGxlciBzdXBwb3J0cyBWaXJ0dWFsQm94LCB0aGVuIGl0IGlzIHJlYWNoYWJsZSBpbiBzeXprYWxsZXIuIEF0IGZpcnN0LCBJJ20gdGhpbmtpbmcsIHNob3VsZCBJIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgPyBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBmaWxlc3lzdGVtIGRyaXZlciwgc28gaXQgc2VlbXMgbGlrZSBpdCdzIHdvcnRoIGl0LlxuXG5CdXQgdGhlIHByb21wdCB3YW50cyBtZSB0byBiZSBjYXJlZnVsLCBpdCBzYXlzIFwiQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlXCIuIElmIHRoZSBwcm9tcHQgbWVudGlvbnMgXCJsaWtlIEdDRSBvciBRRU1VXCIsIGl0J3MgcHJvYmFibHkgdGFsa2luZyBhYm91dCBzdGFuZGFyZCBjbG91ZCBvciBRRU1VIFZNcy4gSWYgSSByZXR1cm4gZmFsc2UsIEkgYW0gc2F5aW5nIGl0IGlzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gc3RhbmRhcmQgVk1zLiBCdXQgd2FpdCwgd2hhdCBpZiBzeXprYWxsZXIgKmNhbiogcmVhY2ggaXQgaW4gUUVNVT8gSG93P1xuXG5JcyB0aGVyZSBhIHdheSB0byB0cmlnZ2VyIGB2Ym94c2ZfZGlyX2VtaXRgIHdpdGhvdXQgbW91bnRpbmcgYHZib3hzZmA/IE5vLCBpdCdzIGEgc3RhdGljIGZ1bmN0aW9uIGFuZCBhIGNhbGxiYWNrIGluIGB2Ym94c2ZfZGlyX2ZvcHNgLiBUaGF0IG1lYW5zIGl0IG11c3QgYmUgbW91bnRlZCwgdGhlIHNhbWUgd2F5IGEgbm9ybWFsIGZpbGVzeXN0ZW0gbXVzdCBiZSBtb3VudGVkIHRvIGFjY2VzcyBpdHMgZGlyZWN0b3J5LiBgdmJveHNmX2Rpcl9pdGVyYXRlYCBjYWxscyBgdmJveHNmX2Rpcl9lbWl0YCwgc28gaXQgbXVzdCBiZSBtb3VudGVkLiBBbmQgdG8gbW91bnQgYHZib3hzZmAsIEkgbmVlZCBgdmJveHNmX2ZpbGxfc3VwZXJgIHRvIHN1Y2NlZWQuIFRoYXQgZGVwZW5kcyBvbiBgdmJveHNmX2Nvbm5lY3RgLCB3aGljaCBuZWVkcyBgdmJnX2dldF9nZGV2YCB0byByZXR1cm4gYSB2YWxpZCBwb2ludGVyLiBUaGF0LCBpbiB0dXJuLCBkZXBlbmRzIG9uIGB2YmdfcGNpX3Byb2JlYCBzdWNjZWVkaW5nLCB3aGljaCByZXF1aXJlcyB0aGUgUENJIGRldmljZSAweDgwZWU6MHhjYWZlIHRvIGJlIHByZXNlbnQuXG5cbklzIHRoaXMgUENJIGRldmljZSBwcmVzZW50IGluIFFFTVU/IFdhaXQhIFFFTVUgKmRvZXMqIGhhdmUgYSBgdmJveGd1ZXN0YCBkZXZpY2U/IExldCdzIGNoZWNrIHRoZSBRRU1VIHNvdXJjZSBjb2RlLi4uIEkgY2FuJ3QgY2hlY2sgdGhlIHNvdXJjZSByaWdodCBub3cuIEJ1dCB3YWl0LCBRRU1VIGhhcyBhIGB2Ym94YCBkaXNwbGF5IGRldmljZT8gTm8sIFFFTVUgc3VwcG9ydHMgVmlydHVhbEJveCBgLnZkaWAgZGlzayBpbWFnZXMsIGJ1dCBpdCBkb2Vzbid0IGVtdWxhdGUgdGhlIGB2Ym94Z3Vlc3RgIFBDSSBkZXZpY2UuXG5cbk9rYXksIHdoYXQgaWYgc3l6a2FsbGVyIHVzZXMgYHN5el9tb3VudF9pbWFnZWAsIGFuZCB0aGUgYnVnIGlzIGluIGB2Ym94c2ZfZGlyX2VtaXRgLCB0cmlnZ2VyZWQgYnkgcmVhZGluZyBhIGRpcmVjdG9yeT8gQnV0IGB2Ym94c2ZgIGlzIG5vdCBpbWFnZS1iYXNlZCwgcmlnaHQ/IEl0IG1vdW50cyB3aXRoIGBtb3VudCAtdCB2Ym94c2YgXHUwMDNjZm9sZGVyXHUwMDNlIFx1MDAzY21vdW50cG9pbnRcdTAwM2VgLiBUaGVyZWZvcmUsIGBzeXpfbW91bnRfaW1hZ2VgIGNhbm5vdCBiZSB1c2VkLiBTbywgaG93IGRpZCBzeXprYWxsZXIgZGlzY292ZXIgdGhpcz8gU3l6a2FsbGVyIG11c3QgYmUgcnVubmluZyBpbiBWaXJ0dWFsQm94IVxuXG5JZiBzeXprYWxsZXIgcnVucyBpbiBWaXJ0dWFsQm94LCBpdCdzIHJlYWNoYWJsZSBpbiB0aGF0IHNwZWNpZmljIGVudmlyb25tZW50LiBEb2VzIHRoZSBwcm9tcHQgd2FudCBtZSB0byByZXR1cm4gdHJ1ZSBvciBmYWxzZT8gXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOiAuLi4gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlXCIuIElmIGl0J3MgaW1wb3NzaWJsZSBpbiBHQ0Ugb3IgUUVNVSwgSSBzaG91bGQgcmV0dXJuIGZhbHNlLlxuXG5CdXQgd2FpdCwgaXMgaXQgcmVhbGx5IGltcG9zc2libGU/IFllcywgaXQgcmVxdWlyZXMgVmlydHVhbEJveCwgdGhlIHByb21wdCBtZW50aW9ucyBHQ0Ugb3IgUUVNVS4gQnV0IGlmIHN5emthbGxlciBmb3VuZCBpdCwgbWF5YmUgaXQgSVMgcmVhY2hhYmxlIGluIFFFTVU/IEhvdz9cblxuIiwiSW5wdXRUb2tlbnMiOjM4NzA4LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE5OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzo1MDozNi43NDEzNDAzNTRaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4OTgzNzQ5MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiMHg4MGVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2xvbnRpdW0tbHQ5NjExLmM9MTA4ND1zdGF0aWMgaW50IGx0OTYxMV9yZWFkX2RldmljZV9yZXYoc3RydWN0IGx0OTYxMSAqbHQ5NjExKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9sb250aXVtLWx0OTYxMS5jLTEwODgtXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9sb250aXVtLWx0OTYxMS5jOjEwODk6XFx0cmVnbWFwX3dyaXRlKGx0OTYxMS1cXHUwMDNlcmVnbWFwLCAweDgwZWUsIDB4MDEpO1xcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbG9udGl1bS1sdDk2MTEuYy0xMDkwLVxcdHJldCA9IHJlZ21hcF9yZWFkKGx0OTYxMS1cXHUwMDNlcmVnbWFwLCAweDgwMDIsIFxcdTAwMjZyZXYpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9sb250aXVtLWx0OTYxMXV4Yy5jPTEyMz1zdGF0aWMgdm9pZCBsdDk2MTF1eGNfbG9jayhzdHJ1Y3QgbHQ5NjExdXhjICpsdDk2MTF1eGMpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2xvbnRpdW0tbHQ5NjExdXhjLmMtMTI1LVxcdG11dGV4X2xvY2soXFx1MDAyNmx0OTYxMXV4Yy1cXHUwMDNlb2NtX2xvY2spO1xcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbG9udGl1bS1sdDk2MTF1eGMuYzoxMjY6XFx0cmVnbWFwX3dyaXRlKGx0OTYxMXV4Yy1cXHUwMDNlcmVnbWFwLCAweDgwZWUsIDB4MDEpO1xcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbG9udGl1bS1sdDk2MTF1eGMuYy0xMjctfVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9sb250aXVtLWx0OTYxMXV4Yy5jPTEyOT1zdGF0aWMgdm9pZCBsdDk2MTF1eGNfdW5sb2NrKHN0cnVjdCBsdDk2MTF1eGMgKmx0OTYxMXV4YylcXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2xvbnRpdW0tbHQ5NjExdXhjLmMtMTMwLXtcXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2xvbnRpdW0tbHQ5NjExdXhjLmM6MTMxOlxcdHJlZ21hcF93cml0ZShsdDk2MTF1eGMtXFx1MDAzZXJlZ21hcCwgMHg4MGVlLCAweDAwKTtcXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2xvbnRpdW0tbHQ5NjExdXhjLmMtMTMyLVxcdG1zbGVlcCg1MCk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vdmJveHZpZGVvL3Zib3hfZHJ2LmM9MzU9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaWlkbGlzdFtdID0ge1xcbmRyaXZlcnMvZ3B1L2RybS92Ym94dmlkZW8vdmJveF9kcnYuYzozNjpcXHR7IFBDSV9ERVZJQ0UoMHg4MGVlLCAweGJlZWYpIH0sXFxuZHJpdmVycy9ncHUvZHJtL3Zib3h2aWRlby92Ym94X2Rydi5jLTM3LVxcdHsgfVxcbi0tXFxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2FmOTAzM19wcml2Lmg9MTM0MD1zdGF0aWMgY29uc3Qgc3RydWN0IHJlZ192YWwgdHVuZXJfaW5pdF9pdDkxMzVfNjBbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9hZjkwMzNfcHJpdi5oLTE0NTItXFx0eyAweDgwZWQwMiwgMHg0MCB9LFxcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9hZjkwMzNfcHJpdi5oOjE0NTM6XFx0eyAweDgwZWU0MiwgMHg0MCB9LFxcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9hZjkwMzNfcHJpdi5oOjE0NTQ6XFx0eyAweDgwZWU4MiwgMHg0MCB9LFxcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9hZjkwMzNfcHJpdi5oLTE0NTUtXFx0eyAweDgwZjAwMCwgMHgwZiB9LFxcbi0tXFxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2FmOTAzM19wcml2Lmg9MTU1Nj1zdGF0aWMgY29uc3Qgc3RydWN0IHJlZ192YWwgdHVuZXJfaW5pdF9pdDkxMzVfNjFbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9hZjkwMzNfcHJpdi5oLTE2NjgtXFx0eyAweDgwZWQwMiwgMHg0MCB9LFxcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9hZjkwMzNfcHJpdi5oOjE2Njk6XFx0eyAweDgwZWU0MiwgMHg0MCB9LFxcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9hZjkwMzNfcHJpdi5oOjE2NzA6XFx0eyAweDgwZWU4MiwgMHg0MCB9LFxcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9hZjkwMzNfcHJpdi5oLTE2NzEtXFx0eyAweDgwZjAwMCwgMHgwZiB9LFxcbi0tXFxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2FmOTAzM19wcml2Lmg9MTc3Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHJlZ192YWwgdHVuZXJfaW5pdF9pdDkxMzVfNjJbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9hZjkwMzNfcHJpdi5oLTE4ODUtXFx0eyAweDgwZWQwMiwgMHhmZiB9LFxcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9hZjkwMzNfcHJpdi5oOjE4ODY6XFx0eyAweDgwZWU0MiwgMHhmZiB9LFxcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9hZjkwMzNfcHJpdi5oOjE4ODc6XFx0eyAweDgwZWU4MiwgMHhmZiB9LFxcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9hZjkwMzNfcHJpdi5oLTE4ODgtXFx0eyAweDgwZjAwMCwgMHgwZiB9LFxcbi0tXFxuZHJpdmVycy9tZWRpYS90dW5lcnMvaXQ5MTN4LmM9MjA3PXN0YXRpYyBpbnQgaXQ5MTN4X3NldF9wYXJhbXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpXFxuLS1cXG5kcml2ZXJzL21lZGlhL3R1bmVycy9pdDkxM3guYy0zMjItXFx0LyogWFhYOiBsYXRlc3Qgd2luZG93cyBkcml2ZXIgZG9lcyBub3Qgc2V0IHRoYXQgYXQgYWxsICovXFxuZHJpdmVycy9tZWRpYS90dW5lcnMvaXQ5MTN4LmM6MzIzOlxcdHJldCA9IHJlZ21hcF93cml0ZShkZXYtXFx1MDAzZXJlZ21hcCwgMHg4MGVlMDYsIGxuYV9iYW5kKTtcXG5kcml2ZXJzL21lZGlhL3R1bmVycy9pdDkxM3guYy0zMjQtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtMjItLyoqIFZpcnR1YWxCb3ggUENJIHZlbmRvciBJRC4gKi9cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jOjIzOiNkZWZpbmUgVkJPWF9WRU5ET1JJRFxcdFxcdDB4ODBlZVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtMjQtLyoqIFZNTURldiBQQ0kgY2FyZCBwcm9kdWN0IElELiAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzo1MDozOS42Mzk3MjIwMTFaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTEwMjI5NDA5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBgdmJveGd1ZXN0YCBFbXVsYXRpb24gUG9zc2liaWxpdGllcyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBgdmJveGd1ZXN0YCBhbmQgdGhvc2Ugc3BlY2lmaWMgYWRkcmVzc2VzIGl0IHVzZXMsIGAweDgwZWVgIGFuZCBgMHhjYWZlYC4gVGhlIGtleSBoZXJlIGlzIHRoYXQgdGhlcmUncyBubyBzb2Z0d2FyZSBlbXVsYXRvciBmb3IgaXQgYmFrZWQgaW50byB0aGUga2VybmVsIGl0c2VsZi4gVGhpcyBtZWFucywgYXMgZmFyIGFzIEkgdW5kZXJzdGFuZCwgZGlyZWN0bHkgaGl0dGluZyB0aGF0IGNvZGUgcGF0aCB0aHJvdWdoIGVpdGhlciBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZSBpcyBhIG5vbi1zdGFydGVyLlxuXG5CdXQsIGhvbGQgb24uLi4gaWYgc3l6a2FsbGVyIGNvdWxkIHVzZSBzb21ldGhpbmcgbGlrZSBgc3l6X3BjaV9hZGRgLCB0aGF0IG1pZ2h0IGNoYW5nZSB0aGUgZ2FtZS4gVGhhdCB3b3VsZCBiZSBhIHdheSB0byBjcmVhdGUgdGhlIGNvcnJlY3QgZW52aXJvbm1lbnQuIE5vdywgZG9lcyBzeXprYWxsZXIgKmFjdHVhbGx5KiBoYXZlIGEgc3lzdGVtIGNhbGwgbGlrZSB0aGF0PyBXYWl0LCBoYW5nIG9uLi4uIEkga25vdyBzeXprYWxsZXIgaGFzIGEgUENJIGZ1enplci4uLiBTbywgdGhlcmUgKm11c3QqIGJlIHNvbWUgd2F5IHRvIGluamVjdCBQQ0ktcmVsYXRlZCBhY3Rpb25zLi4uXG5cbk9rYXksIEknbSBzZWNvbmQtZ3Vlc3NpbmcgbXlzZWxmLiBJdCBkb2Vzbid0IGxvb2sgbGlrZSB0aGVyZSdzIGFuIGV4cGxpY2l0IGBzeXpfcGNpX2FkZGAuIEknbSByZW1lbWJlcmluZyBgc3l6X3VzYl9jb25uZWN0YCBmb3IgVVNCLCBgc3l6XzgwMjExX2luamVjdF9mcmFtZWAgZm9yIHdpZmksIGBzeXpfZ2VuZXRsaW5rX2dldF9mYW1pbHlfaWRgIGZvciBuZXRsaW5rOyB0aG9zZSBhcmUgc2ltaWxhciBpbmplY3Rpb24gcHJpbWl0aXZlcy4gRm9yIFBDSSwgaXQgaGFzIGBzeXpfa3ZtX3NldHVwX2NwdWAsIHdoaWNoIHJlbGF0ZXMgdG8gS1ZNLiBUaGlzIGhhcyBtZSB0aGlua2luZy5cblxuSSBhbSBub3cgZ29pbmcgdG8gbWFrZSBhIGRlZmluaXRpdmUgY2hlY2sgLSBjb3VsZCB0aGVyZSBiZSBhIGBzeXpfcGNpYCBmdW5jdGlvbiwgb3Igc29tZXRoaW5nIHNpbWlsYXIsIHRoYXQgSSdtIGp1c3QgYmxhbmtpbmcgb24/IE9rYXksIHRpbWUgdG8gbG9vayBmb3IgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gUENJIGluIHN5emthbGxlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI1MjEsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NTA6NDQuNzQyMDE5NjY2WiIsIlNlcSI6NTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDI1NzE3Mzk5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzeXpfcGNpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NTA6NDcuMTY3NzQ2NzM1WiIsIlNlcSI6NTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyODUwNzY0NjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRnV6emluZyBXb3J0aGluZXNzIG9mIGEgYHZib3hzZmAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGUgcXVlc3Rpb24gb2Ygd2hldGhlciBpdCdzIHdvcnRoIGZ1enppbmcuIFRoZSBrZXkgaXMgdGhpczogdGhlIHBhdGNoIHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gYHZib3hzZmAsIHdoaWNoIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIGFzIHRoZSBWaXJ0dWFsQm94IHNoYXJlZCBmb2xkZXIgZmlsZXN5c3RlbS4gTm93LCB0aGUgcHJvbXB0IHNheXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBjb2RlIHBhdGggaXMgXCJpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLlwiIE15IGluaXRpYWwgdGhvdWdodCBpcywgd2FpdCwgaG93IGRpZCBzeXprYWxsZXIgZXZlbiBmaW5kIHRoaXM/IEkga25vdyBzeXprYWxsZXIgY2FuJ3QgaW5qZWN0IFBDSSBkZXZpY2VzIGRpcmVjdGx5LiBUaGVuIGl0IGhpdHMgbWU6IHN5emthbGxlciBoYXMgYSBgdmJveGAgVk0gdHlwZSEgQmluZ28uIElmIHN5emthbGxlciBpcyBydW5uaW5nIG9uIFZpcnR1YWxCb3gsIHRoZW4sIHllcywgaXQgKmNhbiogcmVhY2ggdGhpcyBjb2RlLlxuXG5CdXQgdGhhdCBwcm9tcHQga2VlcHMgcmluZ2luZyBpbiBteSBlYXJzLiBJdCBleHBsaWNpdGx5IG5hbWVzIEdDRSBhbmQgUUVNVS4gVmlydHVhbEJveCAqaXMqIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIGJ1dCBpcyBpdCAqbGlrZSogR0NFIG9yIFFFTVUgaW4gdGhlIGNvbnRleHQgb2Ygc3RhbmRhcmQgZnV6emluZyBpbmZyYXN0cnVjdHVyZT8gR0NFIGFuZCBRRU1VIGFyZSB0aGUgbm9ybSBmb3Igc29tZXRoaW5nIGxpa2Ugc3l6Ym90LCByaWdodD8gU28gaWYgdGhpcyBpcyBWaXJ0dWFsQm94LXNwZWNpZmljLCBpcyB0aGF0IHdoYXQgdGhleSBtZWFuPyBBbmQgaWYgaXQncyBpbiBgdmJveHNmYCwgSSdtIGd1ZXNzaW5nIGl0IGNhbiBvbmx5IGJlIGZ1enplZCBpZiB0aGUgZnV6emVyIHJ1bnMgaW4gVmlydHVhbEJveC4gRG9lcyBzeXpib3QgaGF2ZSBpbnN0YW5jZXMgaW4gVmlydHVhbEJveD8gSSBkb24ndCAqdGhpbmsqIHNvLiBJJ2QgYXNzdW1lIHRoZSBzeXotY2x1c3RlciBjb21taXQgYXV0aG9yIGlzIGEgcmVkIGhlcnJpbmcuIEl0J3MganVzdCBhIGdlbmVyaWMgbGFiZWwuXG5cbk9rYXksIGxldCdzIGJhY2sgdXAuIElmIGl0ICppcyogcmVhY2hhYmxlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqaG93Ki4gQ2FuIEkgYnlwYXNzIGB2Ym94c2ZfY29ubmVjdGA/IEkgcXVpY2tseSByZXRyYWNlIHRoZSBjYWxscyBhbmQgc2VlIHRoYXQgYHZib3hzZl9maWxsX3N1cGVyYCBjYWxscyBpdC4gYHZib3hzZl9jb25uZWN0YCBjYWxscyBgdmJnX2dldF9nZGV2YCwgd2hpY2ggcmV0dXJucyBgdmJnX2dkZXZgLCB3aGljaCBpcyBzZXQgaW4gYHZiZ19wY2lfcHJvYmVgLiBOb3cgd2UgYXJlIGF0IHRoZSBQQ0kgbGV2ZWwuIGB2YmdfcGNpX3Byb2JlYCBpcyBjYWxsZWQgd2hlbiBhIGRldmljZSB3aXRoIHZlbmRvciBJRCAweDgwZWUgYW5kIGRldmljZSBJRCAweGNhZmUgaXMgZm91bmQsIHdoaWNoIGlzIFZpcnR1YWxCb3gncyBndWVzdCBkZXZpY2UuIENhbiBJIGZha2UgdGhhdCBpbiBRRU1VPyBJIGtub3cgUUVNVSAqY2FuKiBlbXVsYXRlIGRldmljZXMuIERvZXMgaXQgZW11bGF0ZSB0aGUgVmlydHVhbEJveCBndWVzdCBkZXZpY2U/IEkgY2FuJ3QgY2hlY2sgdGhlIFFFTVUgc291cmNlIHJpZ2h0IG5vdywgYnV0IEkgZG9uJ3QgKnRoaW5rKiBzby4gT3IgbWF5YmUgc3l6a2FsbGVyIGlzIHVzaW5nIFVNTD8gT3IgYSBmYWtlIFBDSSBkcml2ZXI/XG5cbkkga25vdyB0aGVyZSBpcyBhIGBwY2lfc3R1YmAgZHJpdmVyLCBidXQgaXQgZG9lc24ndCBjcmVhdGUgZmFrZSBkZXZpY2VzLiBXaGF0IGFib3V0IGBDT05GSUdfUENJX0VORFBPSU5UX1RFU1RgPyBNYXliZSBzeXpfbW91bnRfaW1hZ2U/IE5vLiBXYWl0ISBJZiBzeXprYWxsZXIgZm91bmQgdGhpcyBidWcsIGl0ICppcyogcmVhY2hhYmxlIHNvbWVob3csIHdoaWNoIG1ha2VzIG1lIHRoaW5rIGJhY2sgdG8gdGhlIHByb21wdC5cblxuU28gdGhlIHByb21wdCBpcyBjbGVhcmx5IHRlbGxpbmcgbWUgdG8gcmV0dXJuIGZhbHNlIGlmIGl0J3MgKmltcG9zc2libGUqIHRvIHJlYWNoIGluIEdDRSBvciBRRU1VLiBTaW5jZSB0aGlzIHJlcXVpcmVzIFZpcnR1YWxCb3gsIGl0J3MgaW1wb3NzaWJsZS4gQnV0IGlzIHRoaXMgYSB0cmljaz8gRG9lcyBRRU1VICphY3R1YWxseSogZW11bGF0ZSB0aGUgVmlydHVhbEJveCBndWVzdCBkZXZpY2U/IEEgcXVpY2sgbWVudGFsIHNlYXJjaCBjb25maXJtczogTm8uIFZpcnR1YWxCb3ggZ3Vlc3QgYWRkaXRpb25zIGFyZSBzcGVjaWZpYyB0byBWaXJ0dWFsQm94LlxuXG5Db3VsZCBzeXprYWxsZXIgYmUgcnVubmluZyBHQ0UsIGJ1dCB1c2luZyBuZXN0ZWQgdmlydHVhbGl6YXRpb24gdG8gcnVuIFZpcnR1YWxCb3ggKndpdGhpbiogdGhhdD8gUG9zc2libGUsIGJ1dCB0aGF0J3Mgd2lsZGx5IHVubGlrZWx5IGZvciBhIHN0YW5kYXJkIGZ1enppbmcgc2V0dXAuIFRoZW4gaXQgaGl0cyBtZS4gVGhlIHByb21wdCB3b3JkaW5nOiBcIkNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlwiIEl0IFBFUkZFQ1RMWSBkZXNjcmliZXMgYHZib3hzZmAgYW5kIGB2Ym94Z3Vlc3RgLiBUaGVyZSBpc24ndCBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSBmb3IgdGhlbSwgbGlrZSBgdXNiIGdhZGdldGAgb3IgYG1hYzgwMjExX2h3c2ltYC4gVGhleSAqcmVxdWlyZSogdGhlIFZpcnR1YWxCb3ggaHlwZXJ2aXNvci5cblxuQWxyaWdodCwgYWZ0ZXIgdGhpcyBkZXRhaWxlZCBtZW50YWwgd2Fsa3Rocm91Z2gsIEkgTVVTVCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIEp1c3QgdG8gYmUgc3VyZSwgSSB3aWxsIHF1aWNrbHkgdmVyaWZ5IHRoZXJlIGlzIG5vIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIGZvciBgdmJveGd1ZXN0YCwgYnV0IEkgYW0gc3VyZSB0aGVyZSBpcyBub25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzE0NiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NTE6MDAuMDE4NTEzMjE1WiIsIlNlcSI6NTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDE1MjE5NDgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZib3hndWVzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ0b29scy90ZXN0aW5nL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NTE6MDAuMjYwMDQzNjAzWiIsIlNlcSI6NTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NzM3NTM3OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhpbmtpbmcgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIFRlc3QgQ292ZXJhZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBmb3IgcmVsZXZhbnQgdGVzdGluZyBjb2RlLCBwcm9iYWJseSBmb3IgYSBuZXcgZmVhdHVyZSBvciB0byBkZWJ1ZyBzb21ldGhpbmcuIEkgc3RhcnRlZCBieSBjaGVja2luZyB0aGUgYHRvb2xzL3Rlc3RpbmcvYCBkaXJlY3RvcnksIHdoaWNoIGlzIHVzdWFsbHkgdGhlIGdvLXRvIGxvY2F0aW9uIGZvciBvdXIgdGVzdCBpbmZyYXN0cnVjdHVyZSBhbmQgcmVsYXRlZCBzY3JpcHRzLiBCdXQuLi4gbm90aGluZy4gTm8gbWF0Y2hlcyBhdCBhbGwuIFRoaXMgaXMgZWl0aGVyIGV4cGVjdGVkLCBvciB1bmV4cGVjdGVkLiBJdCBjb3VsZCBtZWFuIHRoZSByZWxldmFudCB0ZXN0cyBhcmUgbG9jYXRlZCBzb21ld2hlcmUgZWxzZSwgbWF5YmUgaW4gYSBtb2R1bGUgc3BlY2lmaWMgdGVzdCBmb2xkZXIsIG9yIHRoYXQgdGhleSBhcmUgbWFuYWdlZCBpbiBhIGRpZmZlcmVudCB3YXkuIEkgbmVlZCB0byB3aWRlbiB0aGUgc2VhcmNoIHNjb3BlIGFuZCBjb25zaWRlciBvdGhlciBsb2NhdGlvbnMuIEkgc2hvdWxkIGFsc28gdGhpbmsgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zIG9mIG5vIGV4aXN0aW5nIHRlc3Rpbmc7IG1heWJlIGl0J3MgdG9vIGVhcmx5IHRvIGxvb2sgYXQgdGVzdGluZyBhcyBvZiB5ZXQuIEknbGwgbmVlZCBtb3JlIGluZm9ybWF0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIG5leHQgc3RlcHMgYW5kIG1ha2UgYW55IGRlY2lzaW9ucyBhYm91dCB0ZXN0IGRlc2lnbiBhbmQvb3IgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1MjMyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzo1MTowMy4yMzM4MDAwNTdaIiwiU2VxIjo2MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzkzMTUyMSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmJveGd1ZXN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvcGNpL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NTE6MDMuMzQxNzQ0Njc4WiIsIlNlcSI6NjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk0MDY0NDU3OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgUmVhc29uaW5nIGZvciBGaWx0ZXJpbmcgdGhpcyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgY2hlY2tlZCBmb3IgYW55IHNvZnR3YXJlIGVtdWxhdG9ycyBmb3IgYHZib3hndWVzdGAgd2l0aGluIGBkcml2ZXJzL3BjaS9gLCBhbmQgdGhlcmUgYXJlIG5vbmUuIFRoYXQgbWVhbnMgdGhpcyBkcml2ZXIgKnN0cmljdGx5KiBkZXBlbmRzIG9uIHRoZSBWaXJ0dWFsQm94IGh5cGVydmlzb3IuXG5cblRoZSBwcm9tcHQgaXMgY3J5c3RhbCBjbGVhcjogSSBuZWVkIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiBhIHBhdGNoIGFmZmVjdHMgY29kZSB0aGF0IGlzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdpdGggc29mdHdhcmUgZW11bGF0ZWQgaGFyZHdhcmUuIGB2Ym94c2ZgLCB0aGUgVmlydHVhbEJveCBHdWVzdCBTaGFyZWQgRm9sZGVyLCBpcyBleGFjdGx5IHRoYXQga2luZCBvZiBjb2RlLiBJdCBhYnNvbHV0ZWx5IHJlcXVpcmVzIHRoZSBWaXJ0dWFsQm94IGh5cGVydmlzb3IgYmVjYXVzZSB0aGVyZSdzIG5vIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIGVxdWl2YWxlbnQuIFRoZXJlZm9yZSwgSSB3YXMgaW5pdGlhbGx5IGNvbmZpZGVudCB0aGF0IHRoaXMgcGF0Y2ggd291bGQgaW5kZWVkIGJlIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5Ib3dldmVyLCBhIHF1aWNrIHRob3VnaHQ6IGNvdWxkIHN5emthbGxlciwgdGhlIGZ1enplciwgaGF2ZSBwb3NzaWJseSBmb3VuZCBzb21ldGhpbmcgaW4gVmlydHVhbEJveD8gRXZlbiBpZiBpdCBkaWQsIHRoZSBwcm9tcHQgZXhwbGljaXRseSB0ZWxscyBtZSB0byBpZ25vcmUgdGhhdCBwb3NzaWJpbGl0eSBiZWNhdXNlIHRoZSBmdXp6aW5nIGluZnJhc3RydWN0dXJlIHRoYXQgdGhpcyBBSSBpcyBvcGVyYXRpbmcgZm9yIG1vc3QgbGlrZWx5IHVzZXMgR0NFIG9yIFFFTVUsIGFuZCB0aGV5IGRvIG5vdCB3YW50IHRvIHdhc3RlIGN5Y2xlcyBmdXp6aW5nIFZpcnR1YWxCb3gtc3BlY2lmaWMgY29kZSB0aGF0IHRoZXkgY2Fubm90IHJlYWNoLiBUaGlzIG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IHRoZSBnb2FsIGhlcmUgaXMgdG8gZmlsdGVyIHBhdGNoZXMgdGhhdCBjYW4ndCBiZSB0ZXN0ZWQgd2l0aCB0aGUgY3VycmVudCBpbmZyYXN0cnVjdHVyZS5cblxuSSd2ZSBjcmFmdGVkIGEgY29tcHJlaGVuc2l2ZSBleHBsYW5hdGlvbjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFZpcnR1YWxCb3ggR3Vlc3QgU2hhcmVkIEZvbGRlciAodmJveHNmKSBmaWxlc3lzdGVtIGRyaXZlci4gVGhpcyBmaWxlc3lzdGVtIHJlbGllcyBvbiB0aGUgVmlydHVhbEJveCBndWVzdCBQQ0kgZGV2aWNlICh2Ym94Z3Vlc3QpIGZvciBtb3VudGluZyBhbmQgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBob3N0LiBTaW5jZSB0aGlzIGRldmljZSBpcyBleGNsdXNpdmVseSBwcm92aWRlZCBieSB0aGUgVmlydHVhbEJveCBoeXBlcnZpc29yLCBhbmQgbm8gc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgZXhpc3RzIGZvciBpdCBpbiB0aGUga2VybmVsLCB0aGlzIGNvZGUgcGF0aCBpcyB1bnJlYWNoYWJsZSBhbmQgdW4tZnV6emFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuXCJcblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkndmUgZHVnIGludG8gdGhlIGNvZGUuIEkgZm9sbG93ZWQgdGhlIG1vdW50IHBhdGg6IGB2Ym94c2ZfZmlsbF9zdXBlcmAgLVx1MDAzZSBgdmJveHNmX2Nvbm5lY3RgIC1cdTAwM2UgYHZiZ19nZXRfZ2RldmAuIEkgc2VlIHRoYXQgYHZiZ19nZXRfZ2RldmAgcmV0dXJucyBgLUVOT0RFVmAgaWYgYHZiZ19nZGV2YCBpcyBOVUxMLiBUaGlzIGlzIHNldCAqb25seSogd2l0aGluIGB2YmdfcGNpX3Byb2JlYC4gVGhpcyBQQ0kgcHJvYmUgZnVuY3Rpb24gb25seSBnZXRzIGNhbGxlZCB3aGVuIHRoZSBQQ0kgZGV2aWNlIGAweDgwZWU6MHhjYWZlYCBnZXRzIHByb2JlZC4gU28sIGl0J3MgYSBoYXJkIHJlcXVpcmVtZW50IHRvIGhhdmUgdGhhdCBWaXJ0dWFsQm94IFBDSSBkZXZpY2UgcHJlc2VudCB0byBtb3VudCBgdmJveHNmYC5cblxuSSBldmVuIGNoZWNrZWQgaWYgdGhlcmUgd2FzIGFub3RoZXIgd2F5IHRvIHJlYWNoIHNvbWUgZnVuY3Rpb25zIGluc2lkZSwgbGlrZSBgdmJveHNmX2Rpcl9lbWl0YC4gSXQgaXMgYSBzdGF0aWMgZnVuY3Rpb24gaW4gYGZzL3Zib3hzZi9kaXIuY2AuIEl0J3Mgb25seSByZWZlcmVuY2VkIGluIGB2Ym94c2ZfZGlyX2l0ZXJhdGVgIGFuZCBgdmJveHNmX2Rpcl9mb3BzYC4gYHZib3hzZl9kaXJfZm9wc2AgaXMgb25seSB1c2VkIGZvciBkaXJlY3RvcnkgaW5vZGVzLiBEaXJlY3RvcnkgaW5vZGVzIGFyZSBvbmx5IGNyZWF0ZWQgd2hlbiBgdmJveHNmYCBpcyBtb3VudGVkLiBTbywgSSBoYXZlIHRvIGhhdmUgaXQgbW91bnRlZC5cblxuWWVzLCB0aGVyZSBpcyBubyB3YXkgdG8gcmVhY2ggdGhpcyBjb2RlIGluIEdDRSBvciBRRU1VLlxuXG5UaGVyZWZvcmUsIHRoZSBjb25jbHVzaW9uIGlzIGNsZWFyLiBJIHdpbGwgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTQ2NywiT3V0cHV0VG9rZW5zIjoxMjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NTE6MTIuNzQ4MTkzNTg2WiIsIlNlcSI6NjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFZpcnR1YWxCb3ggR3Vlc3QgU2hhcmVkIEZvbGRlciAodmJveHNmKSBmaWxlc3lzdGVtIGRyaXZlci4gVGhpcyBmaWxlc3lzdGVtIHN0cmljdGx5IHJlcXVpcmVzIHRoZSBWaXJ0dWFsQm94IGd1ZXN0IFBDSSBkZXZpY2UgKHZib3hndWVzdCkgdG8gYmUgcHJlc2VudCBhbmQgaW5pdGlhbGl6ZWQgaW4gb3JkZXIgdG8gbW91bnQgYW5kIGNvbW11bmljYXRlIHdpdGggdGhlIGhvc3QuIFNpbmNlIHRoaXMgZGV2aWNlIGlzIG9ubHkgcHJvdmlkZWQgYnkgdGhlIFZpcnR1YWxCb3ggaHlwZXJ2aXNvciBhbmQgdGhlcmUgaXMgbm8gc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgZm9yIGl0IGluIHRoZSBrZXJuZWwsIHRoaXMgY29kZSBwYXRoIGlzIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1enogaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVmlydHVhbEJveCBHdWVzdCBTaGFyZWQgRm9sZGVyICh2Ym94c2YpIGZpbGVzeXN0ZW0gZHJpdmVyLiBUaGlzIGZpbGVzeXN0ZW0gc3RyaWN0bHkgcmVxdWlyZXMgdGhlIFZpcnR1YWxCb3ggZ3Vlc3QgUENJIGRldmljZSAodmJveGd1ZXN0KSB0byBiZSBwcmVzZW50IGFuZCBpbml0aWFsaXplZCBpbiBvcmRlciB0byBtb3VudCBhbmQgY29tbXVuaWNhdGUgd2l0aCB0aGUgaG9zdC4gU2luY2UgdGhpcyBkZXZpY2UgaXMgb25seSBwcm92aWRlZCBieSB0aGUgVmlydHVhbEJveCBoeXBlcnZpc29yIGFuZCB0aGVyZSBpcyBubyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSBmb3IgaXQgaW4gdGhlIGtlcm5lbCwgdGhpcyBjb2RlIHBhdGggaXMgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgZnV6eiBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxhstq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-10 23:18:41 +0000 UTC FinishedAt: 2026-07-10 23:51:14 +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+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBWaXJ0dWFsQm94IEd1ZXN0IFNoYXJlZCBGb2xkZXIgKHZib3hzZikgZmlsZXN5c3RlbSBkcml2ZXIuIFRoaXMgZmlsZXN5c3RlbSBzdHJpY3RseSByZXF1aXJlcyB0aGUgVmlydHVhbEJveCBndWVzdCBQQ0kgZGV2aWNlICh2Ym94Z3Vlc3QpIHRvIGJlIHByZXNlbnQgYW5kIGluaXRpYWxpemVkIGluIG9yZGVyIHRvIG1vdW50IGFuZCBjb21tdW5pY2F0ZSB3aXRoIHRoZSBob3N0LiBTaW5jZSB0aGlzIGRldmljZSBpcyBvbmx5IHByb3ZpZGVkIGJ5IHRoZSBWaXJ0dWFsQm94IGh5cGVydmlzb3IgYW5kIHRoZXJlIGlzIG5vIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIGZvciBpdCBpbiB0aGUga2VybmVsLCB0aGlzIGNvZGUgcGF0aCBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCBmdXp6IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzo0ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDFkOTMwNmMwODFkMWExODk0NTU2MmZiZTEzZGVjZDhkMWFiY2RiZWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAxMCAyMzo0ODoyMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy92Ym94c2YvZGlyLmMgYi9mcy92Ym94c2YvZGlyLmNcbmluZGV4IDQyYmVkYzRlYzdhZjc3Li43MDJkMjQzMTY5OTM2NCAxMDA2NDRcbi0tLSBhL2ZzL3Zib3hzZi9kaXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvdmJveHNmL2Rpci5jXG5AQCAtMTI5LDYgJiM0MzsxMjksOCBAQCBzdGF0aWMgYm9vbCB2Ym94c2ZfZGlyX2VtaXQoc3RydWN0IGZpbGUgKmRpciwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXG4gXHRcdGVuZCA9IFx1MDAyNmluZm8tXHUwMDNlbmFtZS5zdHJpbmcudXRmOFtpbmZvLVx1MDAzZW5hbWUuc2l6ZV07XG4gXHRcdGlmIChXQVJOX09OKGVuZCBcdTAwM2UgKGItXHUwMDNlYnVmICYjNDM7IGItXHUwMDNldXNlZCkpKVxuIFx0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRcdGlmIChpbmZvLVx1MDAzZW5hbWUubGVuZ3RoIFx1MDAzZSBpbmZvLVx1MDAzZW5hbWUuc2l6ZSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0XHQvKiBJbmZvIG5vdyBwb2ludHMgdG8gdGhlIHJpZ2h0IGVudHJ5LCBlbWl0IGl0LiAqL1xuIFx0XHRkX3R5cGUgPSB2Ym94c2ZfZ2V0X2RfdHlwZShpbmZvLVx1MDAzZWluZm8uYXR0ci5tb2RlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzo0ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVmlydHVhbEJveCBHdWVzdCBTaGFyZWQgRm9sZGVyICh2Ym94c2YpIGZpbGVzeXN0ZW0gZHJpdmVyLiBUaGlzIGZpbGVzeXN0ZW0gc3RyaWN0bHkgcmVxdWlyZXMgdGhlIFZpcnR1YWxCb3ggZ3Vlc3QgUENJIGRldmljZSAodmJveGd1ZXN0KSB0byBiZSBwcmVzZW50IGFuZCBpbml0aWFsaXplZCBpbiBvcmRlciB0byBtb3VudCBhbmQgY29tbXVuaWNhdGUgd2l0aCB0aGUgaG9zdC4gU2luY2UgdGhpcyBkZXZpY2UgaXMgb25seSBwcm92aWRlZCBieSB0aGUgVmlydHVhbEJveCBoeXBlcnZpc29yIGFuZCB0aGVyZSBpcyBubyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSBmb3IgaXQgaW4gdGhlIGtlcm5lbCwgdGhpcyBjb2RlIHBhdGggaXMgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgZnV6eiBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDFkOTMwNmMwODFkMWExODk0NTU2MmZiZTEzZGVjZDhkMWFiY2RiZWUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAxMCAyMzo0ODoyMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL3Zib3hzZi9kaXIuYyBiL2ZzL3Zib3hzZi9kaXIuYwppbmRleCA0MmJlZGM0ZWM3YWY3Ny4uNzAyZDI0MzE2OTkzNjQgMTAwNjQ0Ci0tLSBhL2ZzL3Zib3hzZi9kaXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy92Ym94c2YvZGlyLmMKQEAgLTEyOSw2ICYjNDM7MTI5LDggQEAgc3RhdGljIGJvb2wgdmJveHNmX2Rpcl9lbWl0KHN0cnVjdCBmaWxlICpkaXIsIHN0cnVjdCBkaXJfY29udGV4dCAqY3R4KQogCQllbmQgPSAmYW1wO2luZm8tJmd0O25hbWUuc3RyaW5nLnV0ZjhbaW5mby0mZ3Q7bmFtZS5zaXplXTsKIAkJaWYgKFdBUk5fT04oZW5kICZndDsgKGItJmd0O2J1ZiAmIzQzOyBiLSZndDt1c2VkKSkpCiAJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQlpZiAoaW5mby0mZ3Q7bmFtZS5sZW5ndGggJmd0OyBpbmZvLSZndDtuYW1lLnNpemUpCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwogCiAJCS8qIEluZm8gbm93IHBvaW50cyB0byB0aGUgcmlnaHQgZW50cnksIGVtaXQgaXQuICovCiAJCWRfdHlwZSA9IHZib3hzZl9nZXRfZF90eXBlKGluZm8tJmd0O2luZm8uYXR0ci5tb2RlKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDMxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBWaXJ0dWFsQm94IEd1ZXN0IFNoYXJlZCBGb2xkZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGZzL3Zib3hzZi9kaXIuY2AuIFRoZSBjaGFuZ2UgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogaXQmIzM5O3MgYWRkaW5nIGEgbGVuZ3RoIGNoZWNrIGluIGB2Ym94c2ZfZGlyX2VtaXRgLCBzcGVjaWZpY2FsbHkgYGlmIChpbmZvLSZndDtuYW1lLmxlbmd0aCAmZ3Q7IGluZm8tJmd0O25hbWUuc2l6ZSkgcmV0dXJuIGZhbHNlO2AuIFNlZW1zIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIHZib3hzZiBmaWxlc3lzdGVtIGRyaXZlciwgd2hpY2ggaXMgcGFydCBvZiBWaXJ0dWFsQm94JiMzOTtzIEd1ZXN0IFNoYXJlZCBGb2xkZXJzIGZlYXR1cmUuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgY2FuIHdlIGV2ZW4gKnJlYWNoKiB0aGlzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZT8gVmJveHNmIGlzIHJlYWxseSBkZXNpZ25lZCBmb3IgVmlydHVhbEJveCBndWVzdHMsIHJpZ2h0PyBJdCByZWxpZXMgb24gY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBob3N0LCB0eXBpY2FsbHkgdGhyb3VnaCBhIFZpcnR1YWxCb3gtc3BlY2lmaWMgUENJIGRldmljZSBvciBzb21ldGhpbmcgc2ltaWxhciwgbGlrZSBWTU1EZXYuIEkgbmVlZCB0byBjb25maXJtIHRoYXQuCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgZGVlcGVyIGludG8gdGhlIGNvZGUuIEkmIzM5O2xsIGNoZWNrIGJvdGggYGZzL3Zib3hzZi9gIGFuZCBgZHJpdmVycy92aXJ0L3Zib3hndWVzdC9gLiBJZiBpdCYjMzk7cyB0aWdodGx5IGNvdXBsZWQgd2l0aCBWaXJ0dWFsQm94LCB0aGVyZSYjMzk7cyBhIGdvb2QgY2hhbmNlIGl0IHdvbiYjMzk7dCB3b3JrIGluIGEgc3RhbmRhcmQgUUVNVS9HQ0Ugc2V0dXAgdW5sZXNzIHdlJiMzOTtyZSBlbXVsYXRpbmcgdGhlIFZpcnR1YWxCb3ggZ3Vlc3QgZGV2aWNlLgoKTm93IEkmIzM5O20gd29uZGVyaW5nIGlmIHN5emthbGxlciBjb3VsZCBmdXp6IHRoaXMuIFN5emthbGxlciB1c3VhbGx5IHJ1bnMgaW4gZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBhbmQgR0NFLCBidXQgaXQmIzM5O3Mgbm90IHNldCB1cCB0byBlbXVsYXRlIFZpcnR1YWxCb3ggZ3Vlc3QgZGV2aWNlcyBvdXQgb2YgdGhlIGJveC4gQnV0LCBjb3VsZCBpdCBzdGlsbCBtb3VudCBhbmQgaW50ZXJhY3Qgd2l0aCBpdCBhcyBhIGZpbGVzeXN0ZW0/CgpObywgSSB0aGluayBJJiMzOTttIHdyb25nIHRoZXJlLiBgdmJveHNmYCBuZWVkcyB0aGUgYHZib3hndWVzdGAgZHJpdmVyLCBhbmQgdGhhdCByZXF1aXJlcyB0aGUgVmlydHVhbEJveCBQQ0kgZGV2aWNlIHRvIGJlIHByZXNlbnQgYW5kIGluaXRpYWxpemVkLiBJdCYjMzk7cyBiZWNvbWluZyBjbGVhciB0aGF0IHRoaXMgbWlnaHQgbm90IGJlIGltbWVkaWF0ZWx5IGZ1enplYWJsZSB3aXRoIGNvbW1vbiBzZXR1cHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBhY3R1YWxseSBtb3VudGVkIHRvIGJlIHN1cmUuIExldCYjMzk7cyBsb29rIGF0IGBmcy92Ym94c2Yvc3VwZXIuY2AgdG8gc2VlIGhvdyB0aGF0IGhhcHBlbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmJveHNmX2ZpbGxfc3VwZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy92Ym94c2YvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Zib3hzZi9zdXBlci5jPTU0PXN0YXRpYyBpbnQgdmJveHNmX3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pXG4tLVxuZnMvdmJveHNmL3N1cGVyLmMtMTEwLVxuZnMvdmJveHNmL3N1cGVyLmM6MTExOnN0YXRpYyBpbnQgdmJveHNmX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuZnMvdmJveHNmL3N1cGVyLmMtMTEyLXtcbi0tXG5mcy92Ym94c2Yvc3VwZXIuYz0zODY9c3RhdGljIGludCB2Ym94c2ZfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmZzL3Zib3hzZi9zdXBlci5jLTM5My1cbmZzL3Zib3hzZi9zdXBlci5jOjM5NDpcdHJldHVybiBnZXRfdHJlZV9ub2RldihmYywgdmJveHNmX2ZpbGxfc3VwZXIpO1xuZnMvdmJveHNmL3N1cGVyLmMtMzk1LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODI2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB1bmZvbGRzOgoKKipEaXZpbmcgaW50byB0aGUgVmlydHVhbEJveCBTaGFyZWQgRm9sZGVycyBGaWxlc3lzdGVtKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYHZib3hzZmAgdGhpbmcuIEkgcmVtZW1iZXIgc2VlaW5nIGB2Ym94c2ZfZmlsbF9zdXBlcmAgaW4gdGhlIGtlcm5lbCBzb3VyY2UuIFJpZ2h0LCBsZXQmIzM5O3Mgc3RhcnQgdGhlcmUuIE15IGd1dCB0ZWxscyBtZSB0aGlzIGlzIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgYWN0dWFsbHkgbW91bnRpbmcgdGhlIGZpbGVzeXN0ZW0sIHNvIGl0JiMzOTtzIGEgZ29vZCBlbnRyeSBwb2ludC4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGluIGBmcy92Ym94c2Yvc3VwZXIuY2AuIFRoYXQgZmlsZSBzaG91bGQgY29udGFpbiB0aGUgc3VwZXJibG9jayBvcGVyYXRpb25zLCBhbmQgYHZib3hzZl9maWxsX3N1cGVyYCBpcyBkZWZpbml0ZWx5IGEga2V5IHBhcnQgb2YgdGhhdC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIGluIHRoZXJlIGFuZCB3b3JrIGJhY2sgZnJvbSB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL3Zib3hzZi9zdXBlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTExLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMTE6XHRzdGF0aWMgaW50IHZib3hzZl9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiAxMTI6XHR7XG4gMTEzOlx0XHRzdHJ1Y3QgdmJveHNmX2ZzX2NvbnRleHQgKmN0eCA9IGZjLVx1MDAzZWZzX3ByaXZhdGU7XG4gMTE0Olx0XHRzdHJ1Y3Qgc2hmbF9zdHJpbmcgKmZvbGRlcl9uYW1lLCByb290X3BhdGg7XG4gMTE1Olx0XHRzdHJ1Y3QgdmJveHNmX3NiaSAqc2JpO1xuIDExNjpcdFx0c3RydWN0IGRlbnRyeSAqZHJvb3Q7XG4gMTE3Olx0XHRzdHJ1Y3QgaW5vZGUgKmlyb290O1xuIDExODpcdFx0Y2hhciAqbmxzX25hbWU7XG4gMTE5Olx0XHRzaXplX3Qgc2l6ZTtcbiAxMjA6XHRcdGludCBlcnI7XG4gMTIxOlx0XG4gMTIyOlx0XHRpZiAoIWZjLVx1MDAzZXNvdXJjZSlcbiAxMjM6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMTI0Olx0XG4gMTI1Olx0XHRzYmkgPSBremFsbG9jX29iaigqc2JpKTtcbiAxMjY6XHRcdGlmICghc2JpKVxuIDEyNzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAxMjg6XHRcbiAxMjk6XHRcdHNiaS1cdTAwM2VvID0gY3R4LVx1MDAzZW87XG4gMTMwOlx0XHRpZHJfaW5pdChcdTAwMjZzYmktXHUwMDNlaW5vX2lkcik7XG4gMTMxOlx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZzYmktXHUwMDNlaW5vX2lkcl9sb2NrKTtcbiAxMzI6XHRcdHNiaS1cdTAwM2VuZXh0X2dlbmVyYXRpb24gPSAxO1xuIDEzMzpcdFx0c2JpLVx1MDAzZWJkaV9pZCA9IC0xO1xuIDEzNDpcdFxuIDEzNTpcdFx0LyogTG9hZCBubHMgaWYgbm90IHV0ZjggKi9cbiAxMzY6XHRcdG5sc19uYW1lID0gY3R4LVx1MDAzZW5sc19uYW1lID8gY3R4LVx1MDAzZW5sc19uYW1lIDogdmJveHNmX2RlZmF1bHRfbmxzO1xuIDEzNzpcdFx0aWYgKHN0cmNtcChubHNfbmFtZSwgXCYjMzQ7dXRmOFwmIzM0OykgIT0gMCkge1xuIDEzODpcdFx0XHRpZiAobmxzX25hbWUgPT0gdmJveHNmX2RlZmF1bHRfbmxzKVxuIDEzOTpcdFx0XHRcdHNiaS1cdTAwM2VubHMgPSBsb2FkX25sc19kZWZhdWx0KCk7XG4gMTQwOlx0XHRcdGVsc2VcbiAxNDE6XHRcdFx0XHRzYmktXHUwMDNlbmxzID0gbG9hZF9ubHMobmxzX25hbWUpO1xuIDE0MjpcdFxuIDE0MzpcdFx0XHRpZiAoIXNiaS1cdTAwM2VubHMpIHtcbiAxNDQ6XHRcdFx0XHR2YmdfZXJyKFwmIzM0O3Zib3hzZjogQ291bnQgbm90IGxvYWQgJiMzOTslcyYjMzk7IG5sc1xcblwmIzM0OywgbmxzX25hbWUpO1xuIDE0NTpcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4gMTQ2Olx0XHRcdFx0Z290byBmYWlsX2Rlc3Ryb3lfaWRyO1xuIDE0NzpcdFx0XHR9XG4gMTQ4Olx0XHR9XG4gMTQ5Olx0XG4gMTUwOlx0XHRzYmktXHUwMDNlYmRpX2lkID0gaWRhX2FsbG9jKFx1MDAyNnZib3hzZl9iZGlfaWRhLCBHRlBfS0VSTkVMKTtcbiAxNTE6XHRcdGlmIChzYmktXHUwMDNlYmRpX2lkIFx1MDAzYyAwKSB7XG4gMTUyOlx0XHRcdGVyciA9IHNiaS1cdTAwM2ViZGlfaWQ7XG4gMTUzOlx0XHRcdGdvdG8gZmFpbF9mcmVlO1xuIDE1NDpcdFx0fVxuIDE1NTpcdFxuIDE1NjpcdFx0ZXJyID0gc3VwZXJfc2V0dXBfYmRpX25hbWUoc2IsIFwmIzM0O3Zib3hzZi0lZFwmIzM0Oywgc2JpLVx1MDAzZWJkaV9pZCk7XG4gMTU3Olx0XHRpZiAoZXJyKVxuIDE1ODpcdFx0XHRnb3RvIGZhaWxfZnJlZTtcbiAxNTk6XHRcdHNiLVx1MDAzZXNfYmRpLVx1MDAzZXJhX3BhZ2VzID0gMDtcbiAxNjA6XHRcdHNiLVx1MDAzZXNfYmRpLVx1MDAzZWlvX3BhZ2VzID0gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODU3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgdmJveHNmX2ZpbGxfc3VwZXJgIGZ1bmN0aW9uLiBJIG5lZWQgYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyB3b3Jrcy4gSSB3YW50IHRvIHNlZSBwcmVjaXNlbHkgaG93IHRoZSB2aXJ0dWFsYm94IHNoYXJlZCBmb2xkZXIgZmlsZSBzeXN0ZW0gaXMgaW5pdGlhbGl6ZWQuIFRoaXMgaXMgYSBjcml0aWNhbCBjb21wb25lbnQgZm9yIGludGVyYWN0aW5nIHdpdGggdGhlIGd1ZXN0IE9TLiBVbmRlcnN0YW5kaW5nIHRoaXMgZmlsbHMgaW4gdGhlIGdhcHMgZm9yIHRoZSBzaGFyZWQgZm9sZGVyIGZ1bmN0aW9uYWxpdHkgYW5kIGhvdyB0aGUgZmlsZXN5c3RlbSBpcyBtb3VudGVkIGFuZCBtYW5hZ2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvdmJveHNmL3N1cGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE2MTpcdFxuIDE2MjpcdFx0LyogVHVybiBzb3VyY2UgaW50byBhIHNoZmxfc3RyaW5nIGFuZCBtYXAgdGhlIGZvbGRlciAqL1xuIDE2MzpcdFx0c2l6ZSA9IHN0cmxlbihmYy1cdTAwM2Vzb3VyY2UpICYjNDM7IDE7XG4gMTY0Olx0XHRmb2xkZXJfbmFtZSA9IGttYWxsb2MoU0hGTFNUUklOR19IRUFERVJfU0laRSAmIzQzOyBzaXplLCBHRlBfS0VSTkVMKTtcbiAxNjU6XHRcdGlmICghZm9sZGVyX25hbWUpIHtcbiAxNjY6XHRcdFx0ZXJyID0gLUVOT01FTTtcbiAxNjc6XHRcdFx0Z290byBmYWlsX2ZyZWU7XG4gMTY4Olx0XHR9XG4gMTY5Olx0XHRmb2xkZXJfbmFtZS1cdTAwM2VzaXplID0gc2l6ZTtcbiAxNzA6XHRcdGZvbGRlcl9uYW1lLVx1MDAzZWxlbmd0aCA9IHNpemUgLSAxO1xuIDE3MTpcdFx0c3Ryc2NweShmb2xkZXJfbmFtZS1cdTAwM2VzdHJpbmcudXRmOCwgZmMtXHUwMDNlc291cmNlLCBzaXplKTtcbiAxNzI6XHRcdGVyciA9IHZib3hzZl9tYXBfZm9sZGVyKGZvbGRlcl9uYW1lLCBcdTAwMjZzYmktXHUwMDNlcm9vdCk7XG4gMTczOlx0XHRrZnJlZShmb2xkZXJfbmFtZSk7XG4gMTc0Olx0XHRpZiAoZXJyKSB7XG4gMTc1Olx0XHRcdHZiZ19lcnIoXCYjMzQ7dmJveHNmOiBIb3N0IHJlamVjdGVkIG1vdW50IG9mICYjMzk7JXMmIzM5OyB3aXRoIGVycm9yICVkXFxuXCYjMzQ7LFxuIDE3NjpcdFx0XHRcdGZjLVx1MDAzZXNvdXJjZSwgZXJyKTtcbiAxNzc6XHRcdFx0Z290byBmYWlsX2ZyZWU7XG4gMTc4Olx0XHR9XG4gMTc5Olx0XG4gMTgwOlx0XHRyb290X3BhdGgubGVuZ3RoID0gMTtcbiAxODE6XHRcdHJvb3RfcGF0aC5zaXplID0gMjtcbiAxODI6XHRcdHJvb3RfcGF0aC5zdHJpbmcudXRmOFswXSA9ICYjMzk7LyYjMzk7O1xuIDE4MzpcdFx0cm9vdF9wYXRoLnN0cmluZy51dGY4WzFdID0gMDtcbiAxODQ6XHRcdGVyciA9IHZib3hzZl9zdGF0KHNiaSwgXHUwMDI2cm9vdF9wYXRoLCBcdTAwMjZzYmktXHUwMDNlcm9vdF9pbmZvKTtcbiAxODU6XHRcdGlmIChlcnIpXG4gMTg2Olx0XHRcdGdvdG8gZmFpbF91bm1hcDtcbiAxODc6XHRcbiAxODg6XHRcdHNiLVx1MDAzZXNfbWFnaWMgPSBWQk9YU0ZfU1VQRVJfTUFHSUM7XG4gMTg5Olx0XHRzYi1cdTAwM2VzX2Jsb2Nrc2l6ZSA9IDEwMjQ7XG4gMTkwOlx0XHRzYi1cdTAwM2VzX21heGJ5dGVzID0gTUFYX0xGU19GSUxFU0laRTtcbiAxOTE6XHRcdHNiLVx1MDAzZXNfb3AgPSBcdTAwMjZ2Ym94c2Zfc3VwZXJfb3BzO1xuIDE5MjpcdFx0c2V0X2RlZmF1bHRfZF9vcChzYiwgXHUwMDI2dmJveHNmX2RlbnRyeV9vcHMpO1xuIDE5MzpcdFxuIDE5NDpcdFx0aXJvb3QgPSBpZ2V0X2xvY2tlZChzYiwgMCk7XG4gMTk1Olx0XHRpZiAoIWlyb290KSB7XG4gMTk2Olx0XHRcdGVyciA9IC1FTk9NRU07XG4gMTk3Olx0XHRcdGdvdG8gZmFpbF91bm1hcDtcbiAxOTg6XHRcdH1cbiAxOTk6XHRcdHZib3hzZl9pbml0X2lub2RlKHNiaSwgaXJvb3QsIFx1MDAyNnNiaS1cdTAwM2Vyb290X2luZm8sIGZhbHNlKTtcbiAyMDA6XHRcdHVubG9ja19uZXdfaW5vZGUoaXJvb3QpO1xuIDIwMTpcdFxuIDIwMjpcdFx0ZHJvb3QgPSBkX21ha2Vfcm9vdChpcm9vdCk7XG4gMjAzOlx0XHRpZiAoIWRyb290KSB7XG4gMjA0Olx0XHRcdGVyciA9IC1FTk9NRU07XG4gMjA1Olx0XHRcdGdvdG8gZmFpbF91bm1hcDtcbiAyMDY6XHRcdH1cbiAyMDc6XHRcbiAyMDg6XHRcdHNiLVx1MDAzZXNfcm9vdCA9IGRyb290O1xuIDIwOTpcdFx0c2ItXHUwMDNlc19mc19pbmZvID0gc2JpO1xuIDIxMDpcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgwMAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYHZib3hzZl9tYXBfZm9sZGVyYCoqCgpPa2F5LCBzbyBgdmJveHNmX21hcF9mb2xkZXJgIGhhcyBwb3BwZWQgdXAgaW4gbXkgd29yay4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gdW5kZXJzdGFuZCBpdHMgb3JpZ2luLiBXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGRlZmluZWQ/IEkgbmVlZCB0byB0cmFjZSBpdHMgaW1wbGVtZW50YXRpb24gdG8gZ3Jhc3AgaXRzIHB1cnBvc2UsIGFyZ3VtZW50cywgYW5kIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBrZXJuZWwgY29tcG9uZW50cy4gVGltZSB0byBkaXZlIGludG8gdGhlIHNvdXJjZSBjb2RlIGFuZCBzdGFydCB0cmFja2luZyBpdCBkb3duLiBJJiMzOTttIGFzc3VtaW5nIGl0JiMzOTtzIHJlbGF0ZWQgdG8gVmlydHVhbEJveCYjMzk7cyBzaGFyZWQgZm9sZGVycywgYnV0IGEgY29uY3JldGUgZGVmaW5pdGlvbiB3aWxsIHByb3ZpZGUgY3J1Y2lhbCBjb250ZXh0IGZvciBteSBjdXJyZW50IHRhc2suIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZGlnIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2Ym94c2ZfbWFwX2ZvbGRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3Zib3hzZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvdmJveHNmL3N1cGVyLmM9MTExPXN0YXRpYyBpbnQgdmJveHNmX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmZzL3Zib3hzZi9zdXBlci5jLTE3MS1cdHN0cnNjcHkoZm9sZGVyX25hbWUtXHUwMDNlc3RyaW5nLnV0ZjgsIGZjLVx1MDAzZXNvdXJjZSwgc2l6ZSk7XG5mcy92Ym94c2Yvc3VwZXIuYzoxNzI6XHRlcnIgPSB2Ym94c2ZfbWFwX2ZvbGRlcihmb2xkZXJfbmFtZSwgXHUwMDI2c2JpLVx1MDAzZXJvb3QpO1xuZnMvdmJveHNmL3N1cGVyLmMtMTczLVx0a2ZyZWUoZm9sZGVyX25hbWUpO1xuLS1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYz01Mz1zdGF0aWMgaW50IHZib3hzZl9jYWxsKHUzMiBmdW5jdGlvbiwgdm9pZCAqcGFybXMsIHUzMiBwYXJtX2NvdW50LCBpbnQgKnN0YXR1cylcbi0tXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtNzQtXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM6NzU6aW50IHZib3hzZl9tYXBfZm9sZGVyKHN0cnVjdCBzaGZsX3N0cmluZyAqZm9sZGVyX25hbWUsIHUzMiAqcm9vdClcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy03Ni17XG4tLVxuZnMvdmJveHNmL3Zmc21vZC5oPTEzMj1pbnQgdmJveHNmX2ZzaW5mbyh1MzIgcm9vdCwgdTY0IGhhbmRsZSwgdTMyIGZsYWdzLFxuLS1cbmZzL3Zib3hzZi92ZnNtb2QuaC0xMzQtXG5mcy92Ym94c2YvdmZzbW9kLmg6MTM1OmludCB2Ym94c2ZfbWFwX2ZvbGRlcihzdHJ1Y3Qgc2hmbF9zdHJpbmcgKmZvbGRlcl9uYW1lLCB1MzIgKnJvb3QpO1xuZnMvdmJveHNmL3Zmc21vZC5oLTEzNi1pbnQgdmJveHNmX3VubWFwX2ZvbGRlcih1MzIgcm9vdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MDYKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoYXQga2VybmVsIGNvZGU6CgoqKkFuYWx5emluZyBgdmJveHNmX21hcF9mb2xkZXJgIGluIGBmcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmNgKioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gYHZib3hzZl9tYXBfZm9sZGVyYCB3aXRoaW4gYGZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doYXQmIzM5O3MgdGhlIGNvbnRleHQgaGVyZT8gV2hhdCYjMzk7cyB0aGUgKnB1cnBvc2UqIG9mIHRoaXMgZnVuY3Rpb24/JiMzNDsgSSYjMzk7bSBhc3N1bWluZywgZ2l2ZW4gdGhlIG5hbWUsIGl0JiMzOTtzIGludm9sdmVkIGluIG1hcHBpbmcgYSBzaGFyZWQgZm9sZGVyIHdpdGhpbiB0aGUgVmlydHVhbEJveCBTaGFyZWQgRm9sZGVyIGZpbGVzeXN0ZW0uIFRoZSAmIzM0O3dyYXBwZXJzJiMzNDsgcGFydCBzdWdnZXN0cyBpdCYjMzk7cyBsaWtlbHkgYSBsYXllciBvZiBhYnN0cmFjdGlvbiBvciBhIGhlbHBlciBmdW5jdGlvbiB0aGF0IG1pZ2h0IGJlIGludGVyZmFjaW5nIHdpdGggb3RoZXIgdW5kZXJseWluZyBjb21wb25lbnRzLCBwZXJoYXBzIHRoZSBjb3JlIHNoYXJlZCBmb2xkZXIgZHJpdmVyIG9yIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24uCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGRhdGEgc3RydWN0dXJlcyB0aGlzIGZ1bmN0aW9uIGlzIG1hbmlwdWxhdGluZy4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgaW5vZGVzLCBkZW50cnkgc3RydWN0dXJlcywgVmlydHVhbEJveC1zcGVjaWZpYyBtZXRhZGF0YSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFdoYXQgcGFyYW1ldGVycyBkb2VzIGl0IHRha2U/IEkgc2hvdWxkIGxvb2sgZm9yIHRoZSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBmaXJzdCB0byB1bmRlcnN0YW5kIGl0cyBpbnB1dHMgYW5kIHJldHVybiB2YWx1ZXMuIFRoZW4sIEkmIzM5O2xsIGNoZWNrIGl0cyB1c2FnZS4gV2hlcmUgaXMgaXQgYmVpbmcgY2FsbGVkIGZyb20/IFRoYXQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCBzaGFyZWQgZm9sZGVyIGFyY2hpdGVjdHVyZS4KCk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBmdW5jdGlvbiYjMzk7cyBpbnRlcm5hbCBsb2dpYy4gV2hhdCBhcmUgdGhlIGtleSBvcGVyYXRpb25zIGJlaW5nIHBlcmZvcm1lZD8gSXMgaXQgYWxsb2NhdGluZyBtZW1vcnk/IEluaXRpYWxpemluZyBzb21lIGtpbmQgb2YgbWFwcGluZyB0YWJsZT8gTWFraW5nIGNhbGxzIHRvIG90aGVyIGtlcm5lbCBmdW5jdGlvbnMsIG1heWJlIHJlbGF0ZWQgdG8gZmlsZSBzeXN0ZW0gb3BlcmF0aW9ucyBvciBtZW1vcnkgbWFuYWdlbWVudD8gSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byBhbnkgZXJyb3IgaGFuZGxpbmfigJRob3cgYXJlIHBvdGVudGlhbCBmYWlsdXJlcyBtYW5hZ2VkLCBhbmQgd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBmb3IgdGhlIHNoYXJlZCBmb2xkZXIgZnVuY3Rpb25hbGl0eT8KCkkmIzM5O2xsIGFsc28ga2VlcCBpbiBtaW5kIHBvdGVudGlhbCBhcmVhcyBvZiBpbnRlcmVzdCBmb3IgcGVyZm9ybWFuY2UuIEFyZSB0aGVyZSBhbnkgbG9vcHMgdGhhdCBjb3VsZCBiZWNvbWUgYm90dGxlbmVja3MgdW5kZXIgaGVhdnkgbG9hZD8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIG1lbW9yeSBhbGxvY2F0aW9ucyBvciBkZWFsbG9jYXRpb25zIHRoYXQgY291bGQgYmUgb3B0aW1pemVkPyBJJiMzOTttIHByb2JhYmx5IGdvaW5nIHRvIG5lZWQgdG8gbG9vayBhdCBhZGphY2VudCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uIGZvciBhIGJldHRlciB1bmRlcnN0YW5kaW5nLgoKVWx0aW1hdGVseSwgSSB3YW50IHRvIGZvcm0gYSBjb21wbGV0ZSBtZW50YWwgbW9kZWwgb2YgaG93IGB2Ym94c2ZfbWFwX2ZvbGRlcmAgZnVuY3Rpb25zIHdpdGhpbiB0aGUgVmlydHVhbEJveCBTaGFyZWQgRm9sZGVycywgZnJvbSBpdHMgcHVycG9zZSBhbmQgaW50ZWdyYXRpb24gdG8gaXRzIGludGVybmFsIG9wZXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA3NTpcdGludCB2Ym94c2ZfbWFwX2ZvbGRlcihzdHJ1Y3Qgc2hmbF9zdHJpbmcgKmZvbGRlcl9uYW1lLCB1MzIgKnJvb3QpXG4gIDc2Olx0e1xuICA3NzpcdFx0c3RydWN0IHNoZmxfbWFwX2ZvbGRlciBwYXJtcztcbiAgNzg6XHRcdGludCBlcnIsIHN0YXR1cztcbiAgNzk6XHRcbiAgODA6XHRcdHBhcm1zLnBhdGgudHlwZSA9IFZNTURFVl9IR0NNX1BBUk1fVFlQRV9MSU5BRERSX0tFUk5FTDtcbiAgODE6XHRcdHBhcm1zLnBhdGgudS5wb2ludGVyLnNpemUgPSBzaGZsX3N0cmluZ19idWZfc2l6ZShmb2xkZXJfbmFtZSk7XG4gIDgyOlx0XHRwYXJtcy5wYXRoLnUucG9pbnRlci51LmxpbmVhcl9hZGRyID0gKHVpbnRwdHJfdClmb2xkZXJfbmFtZTtcbiAgODM6XHRcbiAgODQ6XHRcdHBhcm1zLnJvb3QudHlwZSA9IFZNTURFVl9IR0NNX1BBUk1fVFlQRV8zMkJJVDtcbiAgODU6XHRcdHBhcm1zLnJvb3QudS52YWx1ZTMyID0gMDtcbiAgODY6XHRcbiAgODc6XHRcdHBhcm1zLmRlbGltaXRlci50eXBlID0gVk1NREVWX0hHQ01fUEFSTV9UWVBFXzMyQklUO1xuICA4ODpcdFx0cGFybXMuZGVsaW1pdGVyLnUudmFsdWUzMiA9ICYjMzk7LyYjMzk7O1xuICA4OTpcdFxuICA5MDpcdFx0cGFybXMuY2FzZV9zZW5zaXRpdmUudHlwZSA9IFZNTURFVl9IR0NNX1BBUk1fVFlQRV8zMkJJVDtcbiAgOTE6XHRcdHBhcm1zLmNhc2Vfc2Vuc2l0aXZlLnUudmFsdWUzMiA9IDE7XG4gIDkyOlx0XG4gIDkzOlx0XHRlcnIgPSB2Ym94c2ZfY2FsbChTSEZMX0ZOX01BUF9GT0xERVIsIFx1MDAyNnBhcm1zLCBTSEZMX0NQQVJNU19NQVBfRk9MREVSLFxuICA5NDpcdFx0XHRcdCAgXHUwMDI2c3RhdHVzKTtcbiAgOTU6XHRcdGlmIChlcnIgPT0gLUVOT1NZUyBcdTAwMjZcdTAwMjYgc3RhdHVzID09IFZFUlJfTk9UX0lNUExFTUVOVEVEKVxuICA5NjpcdFx0XHR2YmdfZXJyKFwmIzM0OyVzOiBFcnJvciBob3N0IGlzIHRvbyBvbGRcXG5cJiMzNDssIF9fZnVuY19fKTtcbiAgOTc6XHRcbiAgOTg6XHRcdCpyb290ID0gcGFybXMucm9vdC51LnZhbHVlMzI7XG4gIDk5Olx0XHRyZXR1cm4gZXJyO1xuIDEwMDpcdH1cbiAxMDE6XHRcbiAxMDI6XHRpbnQgdmJveHNmX3VubWFwX2ZvbGRlcih1MzIgcm9vdClcbiAxMDM6XHR7XG4gMTA0Olx0XHRzdHJ1Y3Qgc2hmbF91bm1hcF9mb2xkZXIgcGFybXM7XG4gMTA1Olx0XG4gMTA2Olx0XHRwYXJtcy5yb290LnR5cGUgPSBWTU1ERVZfSEdDTV9QQVJNX1RZUEVfMzJCSVQ7XG4gMTA3Olx0XHRwYXJtcy5yb290LnUudmFsdWUzMiA9IHJvb3Q7XG4gMTA4Olx0XG4gMTA5Olx0XHRyZXR1cm4gdmJveHNmX2NhbGwoU0hGTF9GTl9VTk1BUF9GT0xERVIsIFx1MDAyNnBhcm1zLFxuIDExMDpcdFx0XHRcdCAgIFNIRkxfQ1BBUk1TX1VOTUFQX0ZPTERFUiwgTlVMTCk7XG4gMTExOlx0fVxuIDExMjpcdFxuIDExMzpcdC8qKlxuIDExNDpcdCAqIHZib3hzZl9jcmVhdGUgLSBDcmVhdGUgYSBuZXcgZmlsZSBvciBmb2xkZXJcbiAxMTU6XHQgKiBAcm9vdDogICAgICAgICBSb290IG9mIHRoZSBzaGFyZWQgZm9sZGVyIGluIHdoaWNoIHRvIGNyZWF0ZSB0aGUgZmlsZVxuIDExNjpcdCAqIEBwYXJzZWRfcGF0aDogIFRoZSBwYXRoIG9mIHRoZSBmaWxlIG9yIGZvbGRlciByZWxhdGl2ZSB0byB0aGUgc2hhcmVkIGZvbGRlclxuIDExNzpcdCAqIEBjcmVhdGVfcGFybXM6IFBhcmFtZXRlcnMgZm9yIGZpbGUvZm9sZGVyIGNyZWF0aW9uLlxuIDExODpcdCAqXG4gMTE5Olx0ICogQ3JlYXRlIGEgbmV3IGZpbGUgb3IgZm9sZGVyIG9yIG9wZW4gYW4gZXhpc3Rpbmcgb25lIGluIGEgc2hhcmVkIGZvbGRlci5cbiAxMjA6XHQgKiBOb3RlIHRoaXMgZnVuY3Rpb24gYWx3YXlzIHJldHVybnMgMCAvIHN1Y2Nlc3MgdW5sZXNzIGFuIGV4Y2VwdGlvbmFsIGNvbmRpdGlvblxuIDEyMTpcdCAqIG9jY3VycyAtIG91dCBvZiBtZW1vcnksIGludmFsaWQgYXJndW1lbnRzLCBldGMuIElmIHRoZSBmaWxlIG9yIGZvbGRlciBjb3VsZFxuIDEyMjpcdCAqIG5vdCBiZSBvcGVuZWQgb3IgY3JlYXRlZCwgY3JlYXRlX3Bhcm1zLVx1MDAzZWhhbmRsZSB3aWxsIGJlIHNldCB0b1xuIDEyMzpcdCAqIFNIRkxfSEFORExFX05JTCBvbiByZXR1cm4uICBJbiB0aGlzIGNhc2UgdGhlIHZhbHVlIGluIGNyZWF0ZV9wYXJtcy1cdTAwM2VyZXN1bHRcbiAxMjQ6XHQgKiBwcm92aWRlcyBpbmZvcm1hdGlvbiBhcyB0byB3aHkgKGUuZy4gU0hGTF9GSUxFX0VYSVNUUyksIGNyZWF0ZV9wYXJtcy1cdTAwM2VyZXN1bHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg1OQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEZWNvZGluZyB0aGUgVmlydHVhbEJveCBTaGFyZWQgRm9sZGVyIENhbGwgQ2hhaW4qKgoKQWxyaWdodCwgc28gdGhlIGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIHplcm9lcyBpbiBvbiBhIHNwZWNpZmljIGZ1bmN0aW9uIGNhbGw6IGB2Ym94c2ZfY2FsbGAuIE15IGltbWVkaWF0ZSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhpcyBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIHNvbWUga2luZCBvZiBzaGFyZWQgZm9sZGVyIGludGVyYWN0aW9uIHdpdGhpbiBWaXJ0dWFsQm94JiMzOTtzIGd1ZXN0IGFkZGl0aW9ucy4gVGhlbiwgdGhlIGNvbm5lY3Rpb24gYmVjb21lcyBjbGVhcjogYHZib3hzZl9jYWxsYCAqZGlyZWN0bHkqIGNhbGxzIGB2YmdfaGdjbV9jYWxsYC4gVGhpcyBwb2ludHMgdG93YXJkcyBhIHNwZWNpZmljIGFyY2hpdGVjdHVyYWwgcmVsYXRpb25zaGlwLgoKTXkgYXNzZXNzbWVudDogYHZiZ19oZ2NtX2NhbGxgIGxpa2VseSByZXByZXNlbnRzIHRoZSB1bmRlcmx5aW5nIEhvc3QtR3Vlc3QgQ29tbXVuaWNhdGlvbiBNZWNoYW5pc20gKEhHQ00pIGl0c2VsZiwgYW5kIGB2Ym94c2ZfY2FsbGAgaXMgYWN0aW5nIGFzIGEgc3BlY2lmaWMgKmxheWVyKiB0aGF0IGtub3dzIGhvdyB0byB3cmFwIHNoYXJlZCBmb2xkZXIgb3BlcmF0aW9ucyBmb3IgdGhhdCBtZWNoYW5pc20uIEl0JiMzOTtzIGEgY2xlYXIgZGVsZWdhdGlvbiBvZiByZXNwb25zaWJpbGl0eS4gSXQgdGVsbHMgbWUgdGhhdCB0aGUgc2hhcmVkIGZvbGRlcnMgZnVuY3Rpb25hbGl0eSBpcyBidWlsdCAqb24gdG9wKiBvZiBhIG1vcmUgZ2VuZXJpYyBndWVzdC1ob3N0IGNvbW11bmljYXRpb24gaW5mcmFzdHJ1Y3R1cmUuIFRoZSAmIzM0O3NmJiMzNDsgbW9kdWxlIGFjdHMgYXMgYSBmcm9udC1lbmQgb3Igc2VydmljZSBoYW5kbGVyLCB3aGlsZSB0aGUgJiMzNDtoZ2NtJiMzNDsgbW9kdWxlIHByb3ZpZGVzIGEgbG93IGxldmVsLCBhYnN0cmFjdGVkIHRyYW5zcG9ydC4gVGhpcyBzdHJ1Y3R1cmUgc2hvdWxkIHNpbXBsaWZ5IG1hbmFnaW5nIGRpZmZlcmVudCBzZXJ2aWNlcyBvciBtb2R1bGVzIHRoYXQgbWlnaHQgYmUgaW1wbGVtZW50ZWQgaW4gdGhlIHNhbWUgYXJjaGl0ZWN0dXJlLiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgZnVydGhlciB0byB1bmRlcnN0YW5kIGhvdyBtYW55IGxheWVycyBvZiBjb21tdW5pY2F0aW9uIGFic3RyYWN0aW9uIHRoZXJlIG1pZ2h0IGJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2Ym94c2ZfY2FsbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3Zib3hzZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jPTQwPXZvaWQgdmJveHNmX2Rpc2Nvbm5lY3Qodm9pZClcbi0tXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtNTItXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM6NTM6c3RhdGljIGludCB2Ym94c2ZfY2FsbCh1MzIgZnVuY3Rpb24sIHZvaWQgKnBhcm1zLCB1MzIgcGFybV9jb3VudCwgaW50ICpzdGF0dXMpXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtNTQte1xuLS1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYz03NT1pbnQgdmJveHNmX21hcF9mb2xkZXIoc3RydWN0IHNoZmxfc3RyaW5nICpmb2xkZXJfbmFtZSwgdTMyICpyb290KVxuLS1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy05Mi1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYzo5MzpcdGVyciA9IHZib3hzZl9jYWxsKFNIRkxfRk5fTUFQX0ZPTERFUiwgXHUwMDI2cGFybXMsIFNIRkxfQ1BBUk1TX01BUF9GT0xERVIsXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtOTQtXHRcdFx0ICBcdTAwMjZzdGF0dXMpO1xuLS1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYz0xMDI9aW50IHZib3hzZl91bm1hcF9mb2xkZXIodTMyIHJvb3QpXG4tLVxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTEwOC1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYzoxMDk6XHRyZXR1cm4gdmJveHNmX2NhbGwoU0hGTF9GTl9VTk1BUF9GT0xERVIsIFx1MDAyNnBhcm1zLFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTExMC1cdFx0XHQgICBTSEZMX0NQQVJNU19VTk1BUF9GT0xERVIsIE5VTEwpO1xuLS1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYz0xMzA9aW50IHZib3hzZl9jcmVhdGUodTMyIHJvb3QsIHN0cnVjdCBzaGZsX3N0cmluZyAqcGFyc2VkX3BhdGgsXG4tLVxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTE0NS1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYzoxNDY6XHRyZXR1cm4gdmJveHNmX2NhbGwoU0hGTF9GTl9DUkVBVEUsIFx1MDAyNnBhcm1zLCBTSEZMX0NQQVJNU19DUkVBVEUsIE5VTEwpO1xuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTE0Ny19XG4tLVxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jPTE0OT1pbnQgdmJveHNmX2Nsb3NlKHUzMiByb290LCB1NjQgaGFuZGxlKVxuLS1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy0xNTgtXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM6MTU5Olx0cmV0dXJuIHZib3hzZl9jYWxsKFNIRkxfRk5fQ0xPU0UsIFx1MDAyNnBhcm1zLCBTSEZMX0NQQVJNU19DTE9TRSwgTlVMTCk7XG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMTYwLX1cbi0tXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM9MTYyPWludCB2Ym94c2ZfcmVtb3ZlKHUzMiByb290LCBzdHJ1Y3Qgc2hmbF9zdHJpbmcgKnBhcnNlZF9wYXRoLCB1MzIgZmxhZ3MpXG4tLVxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTE3NS1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYzoxNzY6XHRyZXR1cm4gdmJveHNmX2NhbGwoU0hGTF9GTl9SRU1PVkUsIFx1MDAyNnBhcm1zLCBTSEZMX0NQQVJNU19SRU1PVkUsIE5VTEwpO1xuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTE3Ny19XG4tLVxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jPTE3OT1pbnQgdmJveHNmX3JlbmFtZSh1MzIgcm9vdCwgc3RydWN0IHNoZmxfc3RyaW5nICpzcmNfcGF0aCxcbi0tXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMTk3LVxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jOjE5ODpcdHJldHVybiB2Ym94c2ZfY2FsbChTSEZMX0ZOX1JFTkFNRSwgXHUwMDI2cGFybXMsIFNIRkxfQ1BBUk1TX1JFTkFNRSwgTlVMTCk7XG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMTk5LX1cbi0tXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM9MjAxPWludCB2Ym94c2ZfcmVhZCh1MzIgcm9vdCwgdTY0IGhhbmRsZSwgdTY0IG9mZnNldCwgdTMyICpidWZfbGVuLCB1OCAqYnVmKVxuLS1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy0yMTgtXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM6MjE5Olx0ZXJyID0gdmJveHNmX2NhbGwoU0hGTF9GTl9SRUFELCBcdTAwMjZwYXJtcywgU0hGTF9DUEFSTVNfUkVBRCwgTlVMTCk7XG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMjIwLVxuLS1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYz0yMjU9aW50IHZib3hzZl93cml0ZSh1MzIgcm9vdCwgdTY0IGhhbmRsZSwgdTY0IG9mZnNldCwgdTMyICpidWZfbGVuLCB1OCAqYnVmKVxuLS1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy0yNDItXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM6MjQzOlx0ZXJyID0gdmJveHNmX2NhbGwoU0hGTF9GTl9XUklURSwgXHUwMDI2cGFybXMsIFNIRkxfQ1BBUk1TX1dSSVRFLCBOVUxMKTtcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy0yNDQtXG4tLVxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jPTI1MD1pbnQgdmJveHNmX2RpcmluZm8odTMyIHJvb3QsIHU2NCBoYW5kbGUsXG4tLVxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTI4NC1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYzoyODU6XHRlcnIgPSB2Ym94c2ZfY2FsbChTSEZMX0ZOX0xJU1QsIFx1MDAyNnBhcm1zLCBTSEZMX0NQQVJNU19MSVNULCBcdTAwMjZzdGF0dXMpO1xuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTI4Ni1cdGlmIChlcnIgPT0gLUVOT0RBVEEgXHUwMDI2XHUwMDI2IHN0YXR1cyA9PSBWRVJSX05PX01PUkVfRklMRVMpXG4tLVxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jPTI5ND1pbnQgdmJveHNmX2ZzaW5mbyh1MzIgcm9vdCwgdTY0IGhhbmRsZSwgdTMyIGZsYWdzLFxuLS1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy0zMTItXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM6MzEzOlx0ZXJyID0gdmJveHNmX2NhbGwoU0hGTF9GTl9JTkZPUk1BVElPTiwgXHUwMDI2cGFybXMsIFNIRkxfQ1BBUk1TX0lORk9STUFUSU9OLFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTMxNC1cdFx0XHQgIE5VTEwpO1xuLS1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYz0zMjA9aW50IHZib3hzZl9yZWFkbGluayh1MzIgcm9vdCwgc3RydWN0IHNoZmxfc3RyaW5nICpwYXJzZWRfcGF0aCxcbi0tXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMzM1LVxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jOjMzNjpcdHJldHVybiB2Ym94c2ZfY2FsbChTSEZMX0ZOX1JFQURMSU5LLCBcdTAwMjZwYXJtcywgU0hGTF9DUEFSTVNfUkVBRExJTkssXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMzM3LVx0XHRcdCAgIE5VTEwpO1xuLS1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYz0zNDA9aW50IHZib3hzZl9zeW1saW5rKHUzMiByb290LCBzdHJ1Y3Qgc2hmbF9zdHJpbmcgKm5ld19wYXRoLFxuLS1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy0zNTktXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM6MzYwOlx0cmV0dXJuIHZib3hzZl9jYWxsKFNIRkxfRk5fU1lNTElOSywgXHUwMDI2cGFybXMsIFNIRkxfQ1BBUk1TX1NZTUxJTkssIE5VTEwpO1xuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTM2MS19XG4tLVxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jPTM2Mz1pbnQgdmJveHNmX3NldF91dGY4KHZvaWQpXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMzY0LXtcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYzozNjU6XHRyZXR1cm4gdmJveHNmX2NhbGwoU0hGTF9GTl9TRVRfVVRGOCwgTlVMTCwgMCwgTlVMTCk7XG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMzY2LX1cbi0tXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM9MzY4PWludCB2Ym94c2Zfc2V0X3N5bWxpbmtzKHZvaWQpXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMzY5LXtcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYzozNzA6XHRyZXR1cm4gdmJveHNmX2NhbGwoU0hGTF9GTl9TRVRfU1lNTElOS1MsIE5VTEwsIDAsIE5VTEwpO1xuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTM3MS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyMjMKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBgdmJveHNmX2NhbGxgIEltcGxlbWVudGF0aW9uKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGB2Ym94c2ZfY2FsbGAgaW1wbGVtZW50YXRpb24uIEl0JiMzOTtzIHRoZSBjb3JlIG9mIGhvdyB0aGUgVmlydHVhbEJveCBTaGFyZWQgRm9sZGVycyBmZWF0dXJlIGxpa2VseSB3b3Jrcy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSB0cmFjaW5nIHRocm91Z2ggdGhlIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUsIHRoZSBwYXJhbWV0ZXJzIGl0IHRha2VzLCBhbmQgd2hhdCBpdCYjMzk7cyB1bHRpbWF0ZWx5IHN1cHBvc2VkIHRvIGFjaGlldmUuIFdoYXQmIzM5O3MgdGhlIHB1cnBvc2Ugb2YgdGhpcyBwYXJ0aWN1bGFyIHN5c3RlbSBjYWxsPyBJcyBpdCBmb3IgZmlsZSBhY2Nlc3MsIGRpcmVjdG9yeSBvcGVyYXRpb25zLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGNvbW1lbnRzIGFyZSBob3BlZnVsbHkgaGVscGZ1bCwgYnV0IEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ3Jhc3AgdGhlIG92ZXJhbGwgY29udGV4dC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgbWVhdCBvZiB0aGUgZnVuY3Rpb24gLSB0aGUgaW1wb3J0YW50IGNvbnRyb2wgZmxvdyBhbmQgYW55IGVycm9yIGhhbmRsaW5nLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBiZWluZyBwYXNzZWQgYW5kIG1hbmlwdWxhdGVkLCBhcyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjcnVjaWFsIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGd1ZXN0IGFuZCB0aGUgaG9zdCBwcm9iYWJseSBsaWVzLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5IGhhbmRsZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIG90aGVyIGNvbmN1cnJlbmN5IGlzc3VlczsgSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyB0aGV5JiMzOTt2ZSBlbXBsb3llZC4gQW5kIG9mIGNvdXJzZSwgSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBjbGV2ZXIgdXNlIG9mIHRoZSBWaXJ0dWFsQm94JiMzOTtzIGludGVybmFsIEFQSXMgb3IgZGV2aWNlIGRyaXZlcnMuIFRoaXMgaXMgdGhlIHBsYWNlIHRvIGxvb2sgZm9yIHRoYXQgaW50ZXJhY3Rpb24uIEFscmlnaHQsIGxldCYjMzk7cyBnZXQgaW50byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDUzOlx0c3RhdGljIGludCB2Ym94c2ZfY2FsbCh1MzIgZnVuY3Rpb24sIHZvaWQgKnBhcm1zLCB1MzIgcGFybV9jb3VudCwgaW50ICpzdGF0dXMpXG4gIDU0Olx0e1xuICA1NTpcdFx0c3RydWN0IHZiZ19kZXYgKmdkZXY7XG4gIDU2Olx0XHRpbnQgZXJyLCB2Ym94X3N0YXR1cztcbiAgNTc6XHRcbiAgNTg6XHRcdGdkZXYgPSB2YmdfZ2V0X2dkZXYoKTtcbiAgNTk6XHRcdGlmIChJU19FUlIoZ2RldikpXG4gIDYwOlx0XHRcdHJldHVybiAtRVNIVVRET1dOOyAvKiBndWVzdC1kZXYgcmVtb3ZlZCB1bmRlcm5lYXRoIHVzICovXG4gIDYxOlx0XG4gIDYyOlx0XHRlcnIgPSB2YmdfaGdjbV9jYWxsKGdkZXYsIFNIRkxfUkVRVUVTVCwgdmJveHNmX2NsaWVudF9pZCwgZnVuY3Rpb24sXG4gIDYzOlx0XHRcdFx0ICAgIFUzMl9NQVgsIHBhcm1zLCBwYXJtX2NvdW50LCBcdTAwMjZ2Ym94X3N0YXR1cyk7XG4gIDY0Olx0XHR2YmdfcHV0X2dkZXYoZ2Rldik7XG4gIDY1Olx0XG4gIDY2Olx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuICA2NzpcdFx0XHRyZXR1cm4gZXJyO1xuICA2ODpcdFxuICA2OTpcdFx0aWYgKHN0YXR1cylcbiAgNzA6XHRcdFx0KnN0YXR1cyA9IHZib3hfc3RhdHVzO1xuICA3MTpcdFxuICA3MjpcdFx0cmV0dXJuIHZiZ19zdGF0dXNfY29kZV90b19lcnJubyh2Ym94X3N0YXR1cyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4NzEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBWaXJ0dWFsQm94IEd1ZXN0IERldmljZSBhbmQgU3l6a2FsbGVyIEZ1enppbmcqKgoKT2theSwgc28gYHZiZ19nZXRfZ2RldmAgaXMgaG93IHdlIHNuYWcgdGhhdCBWaXJ0dWFsQm94IGd1ZXN0IGRldmljZS4gSWYgd2UmIzM5O3JlIG5vdCBydW5uaW5nIGluc2lkZSBWaXJ0dWFsQm94LCBpdCYjMzk7cyBnb2luZyB0byBlcnJvciBvdXQsIG1lYW5pbmcgYHZib3hzZmAgd29uJiMzOTt0IG1vdW50LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgY2FuIHN5emthbGxlciBmdXp6IHRoaXM/IEJ1dCB3YWl0LCBkb2VzbiYjMzk7dCBzeXprYWxsZXIgaGF2ZSAqdmJveGd1ZXN0KiBkcml2ZXIgZnV6emluZz8gTGV0IG1lIGNoZWNrLgoKQWxyaWdodCwgbm93IEkgcmVtZW1iZXIsIHN5emthbGxlciBydW5zIGluIFFFTVUuIFRoYXQmIzM5O3MgYSBwcm9ibGVtLCBiZWNhdXNlIGl0IGRvZXNuJiMzOTt0IGVtdWxhdGUgdGhlIFZpcnR1YWxCb3ggUENJIGRldmljZSBkaXJlY3RseS4gSG1tLCBidXQgZG9lc24mIzM5O3Qgc3l6a2FsbGVyIGhhdmUgc29tZXRoaW5nIGxpa2UgYHN5el9tb3VudF9pbWFnZWA/IEV2ZW4gd2l0aCB0aGF0LCBJJiMzOTtkIHN0aWxsIG5lZWQgdGhlIHVuZGVybHlpbmcgZGV2aWNlLi4uIFNvLCBkb2VzbiYjMzk7dCBzeXprYWxsZXIgcHJvdmlkZSBhIGBzeXpfdmJveGd1ZXN0YCBjYWxsPyBObywgaXQgbG9va3MgbGlrZSBpdCBkb2VzbiYjMzk7dC4KCk9rYXksIG5ldyBhbmdsZS4gQ2FuIEkgZnV6eiBgdmJveHNmYCB0aHJvdWdoIGBzeXpfbW91bnRfaW1hZ2VgLCBtYXliZT8gV2FpdCBhIHNlY29uZC4uLiBzeXprYWxsZXIgKnJlcG9ydGVkKiBhIHBhdGNoIHJlbGF0ZWQgdG8gdGhpcyEgVGhlIGF1dGhvciBpcyBsaXN0ZWQgYXMgJiMzNDtzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7JiMzNDssIGFuZCBpdCBzYXlzICYjMzQ7c3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3JiMzNDsuCgpUaGlzIGlzIGdyZWF0ISBUaGF0IG1lYW5zIHN5emthbGxlciAqZGlkKiBhY3R1YWxseSBmaW5kIGEgYnVnIGluIGB2Ym94c2ZfZGlyX2VtaXRgISBUaGUgbXlzdGVyeSBpcyBob3cgc3l6a2FsbGVyIGV2ZW4gZ290IHRvIGB2Ym94c2ZfZGlyX2VtaXRgLiBUaW1lIHRvIGRpdmUgaW50byBgZnMvdmJveHNmL2Rpci5jYCBhbmQgZmlndXJlIG91dCBob3cgc3l6a2FsbGVyIHRyaWdnZXJlZCB0aGlzIGNvZGUgcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy92Ym94c2YvZGlyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDExMDpcdFx0XHRcdGN1ciAmIzQzOz0gYi1cdTAwM2VlbnRyaWVzO1xuIDExMTpcdFx0XHRcdGNvbnRpbnVlO1xuIDExMjpcdFx0XHR9XG4gMTEzOlx0XG4gMTE0Olx0XHRcdC8qXG4gMTE1Olx0XHRcdCAqIE5vdGUgdGhlIHZib3hzZl9kaXJfaW5mbyBvYmplY3RzIHdlIGFyZSBpdGVyYXRpbmcgb3ZlciBoZXJlXG4gMTE2Olx0XHRcdCAqIGFyZSB2YXJpYWJsZSBzaXplZCwgc28gdGhlIGluZm8gcG9pbnRlciBtYXkgZW5kIHVwIGJlaW5nXG4gMTE3Olx0XHRcdCAqIHVuYWxpZ25lZC4gVGhpcyBpcyBob3cgd2UgZ2V0IHRoZSBkYXRhIGZyb20gdGhlIGhvc3QuXG4gMTE4Olx0XHRcdCAqIFNpbmNlIHZib3hzZiBpcyBvbmx5IHN1cHBvcnRlZCBvbiB4ODYgbWFjaGluZXMgdGhpcyBpcyBub3RcbiAxMTk6XHRcdFx0ICogYSBwcm9ibGVtLlxuIDEyMDpcdFx0XHQgKi9cbiAxMjE6XHRcdFx0Zm9yIChpID0gMCwgaW5mbyA9IGItXHUwMDNlYnVmOyBpIFx1MDAzYyBjdHgtXHUwMDNlcG9zIC0gY3VyOyBpJiM0MzsmIzQzOykge1xuIDEyMjpcdFx0XHRcdGVuZCA9IFx1MDAyNmluZm8tXHUwMDNlbmFtZS5zdHJpbmcudXRmOFtpbmZvLVx1MDAzZW5hbWUuc2l6ZV07XG4gMTIzOlx0XHRcdFx0LyogT25seSBoYXBwZW5zIGlmIHRoZSBob3N0IGdpdmVzIHVzIGNvcnJ1cHQgZGF0YSAqL1xuIDEyNDpcdFx0XHRcdGlmIChXQVJOX09OKGVuZCBcdTAwM2UgKGItXHUwMDNlYnVmICYjNDM7IGItXHUwMDNldXNlZCkpKVxuIDEyNTpcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDEyNjpcdFx0XHRcdGluZm8gPSBlbmQ7XG4gMTI3Olx0XHRcdH1cbiAxMjg6XHRcbiAxMjk6XHRcdFx0ZW5kID0gXHUwMDI2aW5mby1cdTAwM2VuYW1lLnN0cmluZy51dGY4W2luZm8tXHUwMDNlbmFtZS5zaXplXTtcbiAxMzA6XHRcdFx0aWYgKFdBUk5fT04oZW5kIFx1MDAzZSAoYi1cdTAwM2VidWYgJiM0MzsgYi1cdTAwM2V1c2VkKSkpXG4gMTMxOlx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDEzMjpcdFx0XHRpZiAoaW5mby1cdTAwM2VuYW1lLmxlbmd0aCBcdTAwM2UgaW5mby1cdTAwM2VuYW1lLnNpemUpXG4gMTMzOlx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDEzNDpcdFxuIDEzNTpcdFx0XHQvKiBJbmZvIG5vdyBwb2ludHMgdG8gdGhlIHJpZ2h0IGVudHJ5LCBlbWl0IGl0LiAqL1xuIDEzNjpcdFx0XHRkX3R5cGUgPSB2Ym94c2ZfZ2V0X2RfdHlwZShpbmZvLVx1MDAzZWluZm8uYXR0ci5tb2RlKTtcbiAxMzc6XHRcbiAxMzg6XHRcdFx0LypcbiAxMzk6XHRcdFx0ICogT24gMzItYml0IHN5c3RlbXMgcG9zIGlzIDY0LWJpdCBzaWduZWQsIHdoaWxlIGlubyBpcyAzMi1iaXRcbiAxNDA6XHRcdFx0ICogdW5zaWduZWQgc28gZmFrZV9pbm8gbWF5IG92ZXJmbG93LCBjaGVjayBmb3IgdGhpcy5cbiAxNDE6XHRcdFx0ICovXG4gMTQyOlx0XHRcdGlmICgoaW5vX3QpKGN0eC1cdTAwM2Vwb3MgJiM0MzsgMSkgIT0gKHU2NCkoY3R4LVx1MDAzZXBvcyAmIzQzOyAxKSkge1xuIDE0MzpcdFx0XHRcdHZiZ19lcnIoXCYjMzQ7dmJveHNmOiBmYWtlIGlubyBvdmVyZmxvdywgdHJ1bmNhdGluZyBkaXJcXG5cJiMzNDspO1xuIDE0NDpcdFx0XHRcdHJldHVybiBmYWxzZTtcbiAxNDU6XHRcdFx0fVxuIDE0NjpcdFx0XHRmYWtlX2lubyA9IGN0eC1cdTAwM2Vwb3MgJiM0MzsgMTtcbiAxNDc6XHRcbiAxNDg6XHRcdFx0aWYgKHNiaS1cdTAwM2VubHMpIHtcbiAxNDk6XHRcdFx0XHRjaGFyIGRfbmFtZVtOQU1FX01BWF07XG4gMTUwOlx0XG4gMTUxOlx0XHRcdFx0ZXJyID0gdmJveHNmX25sc2NweShzYmksIGRfbmFtZSwgTkFNRV9NQVgsXG4gMTUyOlx0XHRcdFx0XHRcdCAgICBpbmZvLVx1MDAzZW5hbWUuc3RyaW5nLnV0ZjgsXG4gMTUzOlx0XHRcdFx0XHRcdCAgICBpbmZvLVx1MDAzZW5hbWUubGVuZ3RoKTtcbiAxNTQ6XHRcdFx0XHRpZiAoZXJyKSB7XG4gMTU1Olx0XHRcdFx0XHQvKiBza2lwIGVycm9uZW91cyBlbnRyeSBhbmQgcHJvY2VlZCAqL1xuIDE1NjpcdFx0XHRcdFx0Y3R4LVx1MDAzZXBvcyAmIzQzOz0gMTtcbiAxNTc6XHRcdFx0XHRcdGdvdG8gdHJ5X25leHRfZW50cnk7XG4gMTU4Olx0XHRcdFx0fVxuIDE1OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTM0NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDY4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU3l6a2FsbGVyJiMzOTtzIFJlYWNoYWJpbGl0eSBvZiB0aGUgYHZib3hzZmAgRmlsZXN5c3RlbSoqCgpPa2F5LCBzbyBzeXprYWxsZXIgKmRpZCogZmluZCBhIGJ1ZywgbWVhbmluZyBpdCAqY2FuKiBhY3R1YWxseSByZWFjaCB0aGlzIGNvZGUuIFRoZSBxdWVzdGlvbiBub3cgaXMgKmhvdyo/IE15IGluaXRpYWwgdGhvdWdodCB3YXMgVmlydHVhbEJveCwgc2luY2UgaXQmIzM5O3MgYSBwb3NzaWJpbGl0eSBmb3Igc3l6a2FsbGVyLCBidXQgdGhlbiBJIHJlbWVtYmVyIHN5emthbGxlciBjYW4gcnVuIHdpdGggdmFyaW91cyBWTSB0eXBlcy4gSXQgaGFzIHN1cHBvcnQgZm9yIG11bHRpcGxlIFZNcyBhbmQgY2FuIGJlIGNvbmZpZ3VyZWQgd2l0aCBgdm1fdHlwZTogJiMzNDtxZW11JiMzNDtgLCBhbmQgb3RoZXJzLgoKSSB3b25kZXJlZCBpZiBpdCBoYWQgYSBgdmJveGd1ZXN0YCBmdXp6ZXIgZGlyZWN0bHkgb3IgaWYgaXQgcnVucyAqb24qIFZpcnR1YWxCb3guIEkgcmVtZW1iZXJlZCBgc3l6X21vdW50X2ltYWdlYCB3aGljaCBjYW4gbW91bnQgZmlsZXN5c3RlbXMsIGJ1dCBgdmJveHNmYCBpc24mIzM5O3QgYmxvY2stYmFzZWQsIGl0JiMzOTtzIG1vcmUgb2YgYSBuZXR3b3JrLWxpa2UgY29ubmVjdGlvbiB0byB0aGUgaG9zdC4gVGhlbiBJIHdvbmRlcmVkLCBjb3VsZCBzeXprYWxsZXIgYmUgZGlyZWN0bHkgZnV6emluZyBgdmJveHNmYCBvciBnb2luZyB0aHJvdWdoIGAvZGV2L3Zib3hndWVzdGA/IE5vLCBiZWNhdXNlIGB2Ym94c2ZgIGlzIGEgZmlsZXN5c3RlbS4KClRoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhlbSBpcyBsaWtlbHkgYHZiZ19oZ2NtX2NhbGxgIHdoaWNoIGB2Ym94c2ZgIHVzZXMuIFRoaXMgbWVhbnMgdGhhdCBpZiBzeXprYWxsZXIgaXMgbW91bnRpbmcgYHZib3hzZmAsIGl0IG5lZWRzIHRoZSBgdmJveGd1ZXN0YCBkcml2ZXIgdG8gYmUgaW5pdGlhbGl6ZWQuIEJ1dCBpcyB0aGF0IGRyaXZlciBpbml0aWFsaXplZCBpbiBRRU1VPyBBbmQgdGhhdCYjMzk7cyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBUaGUgYHZib3hndWVzdGAgZHJpdmVyIGJpbmRzIHRvIFBDSSB2ZW5kb3IgSUQgMHg4MEVFIChJbm5vVGVrIFN5c3RlbWJlcmF0dW5nIEdtYkgpLCBhbmQgZGV2aWNlIElEIDB4Q0FGRS4gRG9lcyBRRU1VIGVtdWxhdGUgdGhpcyBkZXZpY2U/IE5vLCBpdCBkb2VzbiYjMzk7dC4KCkhvd2V2ZXIsIHN5emthbGxlciAqZG9lcyogaGF2ZSB2YXJpb3VzIGZ1enplciBvcHRpb25zIGZvciBQQ0ksIGFuZCBVU0IuIFNvIGl0IG1heSBiZSB1c2luZyBgc3l6X3BjaV9hZGRgIHRvIGluamVjdCBQQ0kgZGV2aWNlcy4gSXQgbWlnaHQgdXNlIGB2ZmlvYCBvciBzaW1pbGFyIHRvIGhhbmRsZSBQQ0ksIHNpbWlsYXIgdG8gaXRzIHVzZSBvZiBgdmhjaWAgZm9yIFVTQi4gQWN0dWFsbHksIGl0IGhhcyBvdGhlciB3YXlzIHRvIGhhbmRsZSBWTXMsIGxpa2UgYHN5el9rdm1fc2V0dXBfY3B1YC4gSSBkaWRuJiMzOTt0IHNlZSBhbnl0aGluZyBjYWxsZWQgYHN5el92Ym94Z3Vlc3RgLCBzbyBtYXliZSBpdCYjMzk7cyBub3QgZGlyZWN0LgoKSSBoYXZlIHRvIGdvIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHByZW1pc2U6IGlmIHN5emthbGxlciBmb3VuZCB0aGlzIGJ1ZywgaXQgKmNhbiogcmVhY2ggdGhlIGNvZGUuIE5vdywgdGhlIHByb21wdCBkb2VzIHNheSBzb21ldGhpbmcgYWJvdXQgY29kZSBwYXRocyBiZWluZyB1bnJlYWNoYWJsZSBpbiBRRU1VIG9yIEdDRSBldmVuIHdpdGggZW11bGF0ZWQgaGFyZHdhcmUuIElmIHRoYXQmIzM5O3MgdHJ1ZSwgaG93IGNvdWxkIGl0IGJlIHJlYWNoYWJsZT8KCk1heWJlIGl0JiMzOTtzIG1vdW50aW5nIGB2Ym94c2ZgICp3aXRob3V0KiBuZWVkaW5nIHRoZSBQQ0kgZGV2aWNlLCBzb21lIGFsdGVybmF0ZSBpbml0aWFsaXphdGlvbiBwYXRoPyBJIGhhdmUgdG8gbG9vayBpbnRvIGB2YmdfZ2V0X2dkZXZgIHRvIHNlZSB3aGF0IGNvdWxkIGJlIGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmJnX2dldF9nZGV2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aXJ0L3Zib3hndWVzdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYz00MTk9c3RhdGljIHZvaWQgdmJnX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBjaSlcbi0tXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTQzMy1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmM6NDM0OnN0cnVjdCB2YmdfZGV2ICp2YmdfZ2V0X2dkZXYodm9pZClcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtNDM1LXtcbi0tXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTQ0OC19XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jOjQ0OTpFWFBPUlRfU1lNQk9MKHZiZ19nZXRfZ2Rldik7XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTQ1MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4MzEKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgYHZiZ19nZXRfZ2RldmAgd2l0aGluIHRoZSBgZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguY2AgZmlsZS4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgb3IgYXQgbGVhc3Qgd2hlcmUgYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSBndWVzdCBkZXZpY2UgaW50ZXJhY3Rpb24gd2l0aCBWaXJ0dWFsQm94IGtlcm5lbCBtb2R1bGUgcmVzaWRlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBndWVzdCBpcyBnZXR0aW5nIGFjY2VzcyB0byByZXNvdXJjZXMgYW5kIGNhcGFiaWxpdGllcyBoZXJlLiBUaGlzIGlzIGxpa2VseSBhIGtleSBlbnRyeSBwb2ludCBmb3IgdGhlIFZpcnR1YWxCb3ggR3Vlc3QgQWRkaXRpb25zIHRvIGlkZW50aWZ5IGFuZCBpbnRlcmFjdCB3aXRoIHRoZSBob3N0LiBLbm93aW5nIGhvdyB0aGlzIGZ1bmN0aW9uIHdvcmtzIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBndWVzdC1ob3N0IGNvbW11bmljYXRpb24gb2NjdXJzIGF0IGEgbG93IGxldmVsLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIHVuY292ZXIuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDM0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MzQ6XHRzdHJ1Y3QgdmJnX2RldiAqdmJnX2dldF9nZGV2KHZvaWQpXG4gNDM1Olx0e1xuIDQzNjpcdFx0bXV0ZXhfbG9jayhcdTAwMjZ2YmdfZ2Rldl9tdXRleCk7XG4gNDM3Olx0XG4gNDM4Olx0XHQvKlxuIDQzOTpcdFx0ICogTm90ZSBvbiBzdWNjZXNzIHdlIGtlZXAgdGhlIG11dGV4IGxvY2tlZCB1bnRpbCB2YmdfcHV0X2dkZXYoKSxcbiA0NDA6XHRcdCAqIHRoaXMgc3RvcHMgdmJnX3BjaV9yZW1vdmUgZnJvbSByZW1vdmluZyB0aGUgZGV2aWNlIGZyb20gdW5kZXJuZWF0aFxuIDQ0MTpcdFx0ICogdmJveHNmLiB2Ym94c2Ygd2lsbCBvbmx5IGhvbGQgYSByZWZlcmVuY2UgZm9yIGEgc2hvcnQgd2hpbGUuXG4gNDQyOlx0XHQgKi9cbiA0NDM6XHRcdGlmICh2YmdfZ2RldilcbiA0NDQ6XHRcdFx0cmV0dXJuIHZiZ19nZGV2O1xuIDQ0NTpcdFxuIDQ0NjpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZiZ19nZGV2X211dGV4KTtcbiA0NDc6XHRcdHJldHVybiBFUlJfUFRSKC1FTk9ERVYpO1xuIDQ0ODpcdH1cbiA0NDk6XHRFWFBPUlRfU1lNQk9MKHZiZ19nZXRfZ2Rldik7XG4gNDUwOlx0XG4gNDUxOlx0dm9pZCB2YmdfcHV0X2dkZXYoc3RydWN0IHZiZ19kZXYgKmdkZXYpXG4gNDUyOlx0e1xuIDQ1MzpcdFx0V0FSTl9PTihnZGV2ICE9IHZiZ19nZGV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzNjEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0OTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgYHZib3hzZmAgQ29kZSBQYXRocyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgYHZiZ19nZGV2YCBpcyBhIGdsb2JhbCB2YXJpYWJsZSBpbml0aWFsaXplZCBkdXJpbmcgUENJIGRldmljZSBwcm9iaW5nLCBhbmQgYHZib3hzZmAgcmVsaWVzIG9uIHRoYXQuIFRoZSBxdWVzdGlvbiBpcywgY2FuIHN5emthbGxlciBpbmplY3QgYSBQQ0kgZGV2aWNlIHRvIG1ha2UgdGhpcyBoYXBwZW4/IFN5emthbGxlciBoYXMgdGhlIG1lYW5zIHdpdGggdG9vbHMgbGlrZSBgc3l6X3BjaWAsIGBzeXpfcGNpdmZpb2AsIG9yIGV2ZW4gdXNpbmcgYFBDSV9TVFVCYCBvciBgVkZJT2AsIG9yIHBlcmhhcHMgaXQgbGV2ZXJhZ2VzIGEgUENJIGZ1enplciB0aGF0IGVtdWxhdGVzIGRldmljZXMuIEhvbGQgb24sIHRob3VnaCDigJMgdGhlcmUgaXNuJiMzOTt0IGEgcmVhZGlseSBhdmFpbGFibGUgZ2VuZXJhbCBzb2Z0d2FyZSBmcmFtZXdvcmsgaW4gdGhlIExpbnV4IGtlcm5lbCB0byBlbXVsYXRlICphcmJpdHJhcnkqIFBDSSBkZXZpY2VzLiBUaGUgb3B0aW9ucyBhcHBlYXIgdG8gYmUgbGltaXRlZCB0byB0aGluZ3MgbGlrZSBgcGNpX2VuZHBvaW50YCBvciBgdmZpb2AsIHdoaWNoIGFyZSBtb3JlIHNwZWNpYWxpemVkLgoKQnV0IHdhaXQgYSBtaW51dGUhIFN5emthbGxlciBoYXMgYHN5el9nZW5ldGxpbmtgIGFuZCBvdGhlciBjYXBhYmlsaXRpZXMsIHdoaWNoIGNvdWxkIGJlIHJlbGV2YW50LiBBbmQgdGhlbiBJIHJlbWVtYmVyZWQsIHN5emthbGxlciAqZG9lcyogcnVuIG9uIFZpcnR1YWxCb3ghIEl0IHN1cHBvcnRzIGVudmlyb25tZW50cyBsaWtlIGB2bS9xZW11YCwgYHZtL2djZWAsIGFuZCBgdm0vdmJveGAuIFRoYXTigJlzIHRoZSBrZXkuIElmIHN5emthbGxlciBjYW4gcnVuIG9uIFZpcnR1YWxCb3gsIHRoZW4sIGluIHRoZW9yeSwgYHZib3hzZmAgc2hvdWxkIGJlIHJlYWNoYWJsZSwgcmlnaHQ/CgpCdXQgdGhlbiB0aGUgcHJvbXB0IHJhaXNlcyBhIHJlZCBmbGFnOiAmIzM0O0NvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSYjMzQ7LiBUaGlzIGltcGxpZXMgdGhhdCBpZiBzb21ldGhpbmcgaXMgT05MWSByZWFjaGFibGUgaW4gVmlydHVhbEJveCwgaXQmIzM5O3MgKm5vdCogcmVhY2hhYmxlIGluIEdDRSBvciBRRU1VLCBhbmQgdGhlcmVmb3JlIG1heSBub3QgYmUgd29ydGggZnV6emluZz8KClRoZSBkaXJlY3RpdmUgc3BlY2lmaWVzOiAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgLi4uIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZS4mIzM0OyBJZiBgdmJveHNmYCAqcmVxdWlyZXMqIHRoZSBWaXJ0dWFsQm94IGh5cGVydmlzb3IsIGl0IGlzLCBieSBkZWZpbml0aW9uLCB1bnJlYWNoYWJsZSBpbiBHQ0Ugb3IgUUVNVS4KCk5vdywgaXMgdGhlcmUgKmFueSogd2F5IHRvIGdldCBgdmJveHNmYCB3b3JraW5nIGluIFFFTVU/IFdoYXQgYWJvdXQgdXNpbmcgYFVNTGA/IE5vLCB0aGF0IHdvbiYjMzk7dCBoZWxwLiBXaGF0IGFib3V0IGBzeXpfbW91bnRfaW1hZ2VgPyBUaGF0IHdvdWxkIGZhaWwgaW4gYHZib3hzZl9maWxsX3N1cGVyYCBiZWNhdXNlIGB2YmdfZ2V0X2dkZXYoKWAgd291bGQgcmV0dXJuIGAtRU5PREVWYC4gSSB0aGluayBJIG5lZWQgdG8gZGlnIGludG8gYHZib3hzZl9maWxsX3N1cGVyYCB0byBjb25maXJtIHRoaXMuIFRoYXQgaXMgdGhlIG5leHQgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmJnX2dldF9nZGV2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvdmJveHNmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM9MjA9aW50IHZib3hzZl9jb25uZWN0KHZvaWQpXG4tLVxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTI4LVxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jOjI5Olx0Z2RldiA9IHZiZ19nZXRfZ2RldigpO1xuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTMwLVx0aWYgKElTX0VSUihnZGV2KSlcbi0tXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM9NDA9dm9pZCB2Ym94c2ZfZGlzY29ubmVjdCh2b2lkKVxuLS1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy00NC1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYzo0NTpcdGdkZXYgPSB2YmdfZ2V0X2dkZXYoKTtcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy00Ni1cdGlmIChJU19FUlIoZ2RldikpXG4tLVxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jPTUzPXN0YXRpYyBpbnQgdmJveHNmX2NhbGwodTMyIGZ1bmN0aW9uLCB2b2lkICpwYXJtcywgdTMyIHBhcm1fY291bnQsIGludCAqc3RhdHVzKVxuLS1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy01Ny1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYzo1ODpcdGdkZXYgPSB2YmdfZ2V0X2dkZXYoKTtcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy01OS1cdGlmIChJU19FUlIoZ2RldikpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzgzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqdmJveHNmIERyaXZlciBJbml0aWFsaXphdGlvbiBDb251bmRydW0qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhlIFZpcnR1YWxCb3ggc2hhcmVkIGZvbGRlciAodmJveHNmKSBkcml2ZXIgY29kZS4gVGhlIGtleSBxdWVzdGlvbiBJJiMzOTttIHRyeWluZyB0byBuYWlsIGRvd24gaXMgdGhlIGV4YWN0IHBvaW50IHdoZXJlIHRoZSBpbml0aWFsIGNvbm5lY3Rpb24gdG8gdGhlIHNoYXJlZCBmb2xkZXIgaW5mcmFzdHJ1Y3R1cmUgaXMgZXN0YWJsaXNoZWQuIEkga25vdyBgdmJveHNmX2Nvbm5lY3RgIGlzIGNyaXRpY2FsIGZvciB0aGF0LCBidXQgSSBuZWVkIHRvIHBpbnBvaW50ICp3aGVyZSogaXQmIzM5O3MgY2FsbGVkLiBNeSBpbml0aWFsIHRoaW5raW5nIGlzIHRoYXQgaXQmIzM5O3MgZWl0aGVyIGdvaW5nIHRvIGJlIGZyb20gYHZib3hzZl9pbml0YCwgd2hpY2ggaGFuZGxlcyB0aGUgaW5pdGlhbCBtb2R1bGUgbG9hZGluZyBhbmQgc2V0dXAsIG9yIHBlcmhhcHMgZnJvbSBgdmJveHNmX2ZpbGxfc3VwZXJgLCB3aGljaCB3b3VsZCBiZSB0aGUgbW9yZSBsaWtlbHkgbG9jYXRpb24gd2hlbiBhIGZpbGVzeXN0ZW0gaXMgYmVpbmcgbW91bnRlZC4gSSBuZWVkIHRvIGNvbmZpcm0gd2hlcmUgdGhlIGRyaXZlciBnZXRzIHRoZSBjb25uZWN0aW9uIHN0YXJ0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zib3hzZl9jb25uZWN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvdmJveHNmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy92Ym94c2Yvc3VwZXIuYz0zMjM9c3RhdGljIGludCB2Ym94c2Zfc2V0dXAodm9pZClcbi0tXG5mcy92Ym94c2Yvc3VwZXIuYy0zNDEtXG5mcy92Ym94c2Yvc3VwZXIuYzozNDI6XHRlcnIgPSB2Ym94c2ZfY29ubmVjdCgpO1xuZnMvdmJveHNmL3N1cGVyLmMtMzQzLVx0aWYgKGVycikge1xuLS1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYz0xOD1zdGF0aWMgdTMyIHZib3hzZl9jbGllbnRfaWQ7XG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMTktXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM6MjA6aW50IHZib3hzZl9jb25uZWN0KHZvaWQpXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMjEte1xuLS1cbmZzL3Zib3hzZi92ZnNtb2QuaD0xMTE9aW50IHZib3hzZl9kaXJfcmVhZF9hbGwoc3RydWN0IHZib3hzZl9zYmkgKnNiaSwgc3RydWN0IHZib3hzZl9kaXJfaW5mbyAqc2ZfZCxcbi0tXG5mcy92Ym94c2YvdmZzbW9kLmgtMTE0LS8qIGZyb20gdmJveHNmX3dyYXBwZXJzLmMgKi9cbmZzL3Zib3hzZi92ZnNtb2QuaDoxMTU6aW50IHZib3hzZl9jb25uZWN0KHZvaWQpO1xuZnMvdmJveHNmL3Zmc21vZC5oLTExNi12b2lkIHZib3hzZl9kaXNjb25uZWN0KHZvaWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTMzMAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBWaXJ0dWFsQm94IFNoYXJlZCBGb2xkZXIgU2V0dXAqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8gemVybyBpbiBvbiB0aGUgYHZib3hzZl9zZXR1cGAgZnVuY3Rpb24gd2l0aGluIGBmcy92Ym94c2Yvc3VwZXIuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljICpyZWFsbHkqIGhhcHBlbnMgaW4gVmlydHVhbEJveCBzaGFyZWQgZm9sZGVycywgc3BlY2lmaWNhbGx5IHRoZSBjcml0aWNhbCBpbml0aWFsaXphdGlvbiBvZiB0aGUgZmlsZXN5c3RlbS4gSXQmIzM5O3MgdGhlIGx5bmNocGluIGZvciBtb3VudGluZyBhbmQgbWFuYWdpbmcgdGhvc2Ugc2hhcmVkIGRpcmVjdG9yaWVzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgU3VwZXIgQmxvY2sgaXMgcG9wdWxhdGVkIGFuZCB0aGUgY29yZSBjb21wb25lbnRzIGFyZSBpbml0aWFsaXplZCBzbyBJIGNhbiBmaWd1cmUgb3V0IHdoYXQgaXMgYnJva2VuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL3Zib3hzZi9zdXBlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzIzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMjM6XHRzdGF0aWMgaW50IHZib3hzZl9zZXR1cCh2b2lkKVxuIDMyNDpcdHtcbiAzMjU6XHRcdGludCBlcnI7XG4gMzI2Olx0XG4gMzI3Olx0XHRtdXRleF9sb2NrKFx1MDAyNnZib3hzZl9zZXR1cF9tdXRleCk7XG4gMzI4Olx0XG4gMzI5Olx0XHRpZiAodmJveHNmX3NldHVwX2RvbmUpXG4gMzMwOlx0XHRcdGdvdG8gc3VjY2VzcztcbiAzMzE6XHRcbiAzMzI6XHRcdHZib3hzZl9pbm9kZV9jYWNoZXAgPVxuIDMzMzpcdFx0XHRrbWVtX2NhY2hlX2NyZWF0ZShcJiMzNDt2Ym94c2ZfaW5vZGVfY2FjaGVcJiMzNDssXG4gMzM0Olx0XHRcdFx0XHQgIHNpemVvZihzdHJ1Y3QgdmJveHNmX2lub2RlKSwgMCxcbiAzMzU6XHRcdFx0XHRcdCAgU0xBQl9SRUNMQUlNX0FDQ09VTlQgfCBTTEFCX0FDQ09VTlQsXG4gMzM2Olx0XHRcdFx0XHQgIHZib3hzZl9pbm9kZV9pbml0X29uY2UpO1xuIDMzNzpcdFx0aWYgKCF2Ym94c2ZfaW5vZGVfY2FjaGVwKSB7XG4gMzM4Olx0XHRcdGVyciA9IC1FTk9NRU07XG4gMzM5Olx0XHRcdGdvdG8gZmFpbF9ub21lbTtcbiAzNDA6XHRcdH1cbiAzNDE6XHRcbiAzNDI6XHRcdGVyciA9IHZib3hzZl9jb25uZWN0KCk7XG4gMzQzOlx0XHRpZiAoZXJyKSB7XG4gMzQ0Olx0XHRcdHZiZ19lcnIoXCYjMzQ7dmJveHNmOiBlcnIgJWQgY29ubmVjdGluZyB0byBndWVzdCBQQ0ktZGV2aWNlXFxuXCYjMzQ7LCBlcnIpO1xuIDM0NTpcdFx0XHR2YmdfZXJyKFwmIzM0O3Zib3hzZjogbWFrZSBzdXJlIHlvdSBhcmUgaW5zaWRlIGEgVmlydHVhbEJveCBWTVxcblwmIzM0Oyk7XG4gMzQ2Olx0XHRcdHZiZ19lcnIoXCYjMzQ7dmJveHNmOiBhbmQgY2hlY2sgZG1lc2cgZm9yIHZib3hndWVzdCBlcnJvcnNcXG5cJiMzNDspO1xuIDM0NzpcdFx0XHRnb3RvIGZhaWxfZnJlZV9jYWNoZTtcbiAzNDg6XHRcdH1cbiAzNDk6XHRcbiAzNTA6XHRcdGVyciA9IHZib3hzZl9zZXRfdXRmOCgpO1xuIDM1MTpcdFx0aWYgKGVycikge1xuIDM1MjpcdFx0XHR2YmdfZXJyKFwmIzM0O3Zib3hzZl9zZXR1dGY4IGVycm9yICVkXFxuXCYjMzQ7LCBlcnIpO1xuIDM1MzpcdFx0XHRnb3RvIGZhaWxfZGlzY29ubmVjdDtcbiAzNTQ6XHRcdH1cbiAzNTU6XHRcbiAzNTY6XHRcdGlmICghZm9sbG93X3N5bWxpbmtzKSB7XG4gMzU3Olx0XHRcdGVyciA9IHZib3hzZl9zZXRfc3ltbGlua3MoKTtcbiAzNTg6XHRcdFx0aWYgKGVycilcbiAzNTk6XHRcdFx0XHR2Ymdfd2FybihcJiMzNDt2Ym94c2Y6IFVuYWJsZSB0byBzaG93IHN5bWxpbmtzOiAlZFxcblwmIzM0OywgZXJyKTtcbiAzNjA6XHRcdH1cbiAzNjE6XHRcbiAzNjI6XHRcdHZib3hzZl9zZXR1cF9kb25lID0gdHJ1ZTtcbiAzNjM6XHRzdWNjZXNzOlxuIDM2NDpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZib3hzZl9zZXR1cF9tdXRleCk7XG4gMzY1Olx0XHRyZXR1cm4gMDtcbiAzNjY6XHRcbiAzNjc6XHRmYWlsX2Rpc2Nvbm5lY3Q6XG4gMzY4Olx0XHR2Ym94c2ZfZGlzY29ubmVjdCgpO1xuIDM2OTpcdGZhaWxfZnJlZV9jYWNoZTpcbiAzNzA6XHRcdGttZW1fY2FjaGVfZGVzdHJveSh2Ym94c2ZfaW5vZGVfY2FjaGVwKTtcbiAzNzE6XHRmYWlsX25vbWVtOlxuIDM3MjpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZib3hzZl9zZXR1cF9tdXRleCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjYwCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEludmVzdGlnYXRpb24gaW50byBWaXJ0dWFsQm94IEd1ZXN0IEZpbGUgU3lzdGVtIE1vdW50cyoqCgpPa2F5LCBzbyBgdmJveHNmX3NldHVwYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBkdXJpbmcgYSBtb3VudCBvcGVyYXRpb24uIE1ha2VzIHNlbnNlLiBBbmQgaWYgYHZib3hzZl9jb25uZWN0KClgIGZhaWxzLCB0aGUgd2hvbGUgbW91bnQgZmFpbHMuIEFscmlnaHQsIGZvbGxvd2luZyB0aGUgYnJlYWRjcnVtYnMsIGB2Ym94c2ZfY29ubmVjdCgpYCBjYWxscyBgdmJnX2dldF9nZGV2KClgLCB3aGljaCBnaXZlcyBtZSBhbiBgLUVOT0RFVmAgaWYgdGhlIFZpcnR1YWxCb3ggUENJIGRldmljZSBpc24mIzM5O3QgYXJvdW5kLiBTbywgYmFzaWNhbGx5LCBJIGNhbiYjMzk7dCBtb3VudCBgdmJveHNmYCBpbiBzb21ldGhpbmcgbGlrZSBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZSB1bmxlc3MgdGhhdCBWaXJ0dWFsQm94IFBDSSBkZXZpY2UgaXMgcGh5c2ljYWxseSAqcHJlc2VudCouIEhtbSwgaXMgaXQgZXZlbiAqcG9zc2libGUqIHRvIGluamVjdCB0aGUgVmlydHVhbEJveCBQQ0kgZGV2aWNlIGludG8gUUVNVT8gVGhhdCYjMzk7cyB0aGUgbWlsbGlvbi1kb2xsYXIgcXVlc3Rpb24uCgpXYWl0IGEgc2Vjb25k4oCmIHdhc24mIzM5O3QgdGhlcmUgYSBgc3l6a2FsbGVyYCBmdXp6ZXIgZm9yIGB2Ym94Z3Vlc3RgPyBMZXQmIzM5O3MgcXVpY2tseSBkb3VibGUtY2hlY2sgaWYgc3l6a2FsbGVyIGhhcyBhIGZ1enplciBkZWRpY2F0ZWQgdG8gYHZib3hndWVzdGAuIFllcywgc3l6a2FsbGVyICpjYW4qIGZ1enogYC9kZXYvdmJveGd1ZXN0YCAtIGlmIHRoZSBkZXZpY2UgZXhpc3RzLiBCdXQgb2YgY291cnNlLCBpbiBhIGJhcmUgUUVNVSBlbnZpcm9ubWVudCwgaXQgZG9lc24mIzM5O3QuIEhtbS4KCk9rYXksIGlzIHRoZXJlIGEgYHN5el9wY2lfYWRkYCBmdW5jdGlvbiBpbiBzeXprYWxsZXI/IEl0IGNvdWxkICpwb3RlbnRpYWxseSogYWRkIGEgUENJIGRldmljZSwgYnV0IG5vLCBzeXprYWxsZXIgZG9lc24mIzM5O3QgaGF2ZSBhIGJ1aWx0LWluIHNvZnR3YXJlIFBDSSBlbXVsYXRvciBpbiB0aGUga2VybmVsLiBPa2F5LCBzbyB0aGF0IGF2ZW51ZSBpcyBjbG9zZWQuCgpXYWl04oCmIHdoYXQgYWJvdXQgbGV2ZXJhZ2luZyBleGlzdGluZyBzeXprYWxsZXIgZmVhdHVyZXM/IFN5emthbGxlciB1c2VzIGB2aGNpYCBmb3IgVVNCLCBgbWFjODAyMTFfaHdzaW1gIGZvciB3aWZpLCBgdWlucHV0YCBmb3IgaW5wdXQsIGB2Z2VtYCBmb3IgZHJtLCBgdmttc2AgZm9yIGRybSwgYGxvb3BgIGZvciBibG9jaywgYHR1bmAgZm9yIG5ldOKApiBBcmUgdGhlcmUgYW55IHNpbWlsYXIgdHJpY2tzIGZvciBgdmJveGd1ZXN0YD8gSXMgdGhlcmUgYSBzb2Z0d2FyZSBlbXVsYXRpb24gb3B0aW9uIGZvciB0aGF0LCBzb21lIGtpbmQgb2YgdmlydHVhbCBkZXZpY2U/IEkgcmVhbGx5IG5lZWQgdG8gZ2V0IHRoaXMgdG8gd29yay4gSSBuZWVkIHRvIGZpbmQgYSB3YXkgdG8gbWFrZSB0aGUgZGV2aWNlICphcHBlYXIqLgoKUmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgc291cmNlLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIGZvY3VzZWQgc2VhcmNoIGZvciAmIzM0O3Zib3hndWVzdCYjMzQ7IGFuZCBzZWUgd2hhdCBpbnNpZ2h0cyBpdCB5aWVsZHMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUga2VybmVsIGtub3dzIGFib3V0IHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zib3hndWVzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmlydC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aXJ0L0tjb25maWc9MjY9Y29uZmlnIEZTTF9IVl9NQU5BR0VSXG4tLVxuZHJpdmVycy92aXJ0L0tjb25maWctNDMtXG5kcml2ZXJzL3ZpcnQvS2NvbmZpZzo0NDpzb3VyY2UgXCYjMzQ7ZHJpdmVycy92aXJ0L3Zib3hndWVzdC9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL3ZpcnQvS2NvbmZpZy00NS1cbi0tXG5kcml2ZXJzL3ZpcnQvTWFrZWZpbGU9Nz1vYmotJChDT05GSUdfVk1HRU5JRClcdFx0JiM0Mzs9IHZtZ2VuaWQub1xuZHJpdmVycy92aXJ0L01ha2VmaWxlOjg6b2JqLXlcdFx0XHRcdCYjNDM7PSB2Ym94Z3Vlc3QvXG5kcml2ZXJzL3ZpcnQvTWFrZWZpbGUtOS1cbi0tXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L0tjb25maWc9Mj1jb25maWcgVkJPWEdVRVNUXG4tLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC9LY29uZmlnLTExLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC9LY29uZmlnOjEyOlx0ICBUaGlzIGRyaXZlciBhbHNvIG9mZmVycyB2Ym94Z3Vlc3QgSVBDIGZ1bmN0aW9uYWxpdHkgd2hpY2ggaXMgbmVlZGVkXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L0tjb25maWctMTMtXHQgIGZvciB0aGUgdmJveGZzIGRyaXZlciB3aGljaCBvZmZlcnMgZm9sZGVyIHNoYXJpbmcgc3VwcG9ydC5cbi0tXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L01ha2VmaWxlOjI6dmJveGd1ZXN0LXkgOj0gdmJveGd1ZXN0X2xpbnV4Lm8gdmJveGd1ZXN0X2NvcmUubyB2Ym94Z3Vlc3RfdXRpbHMub1xuZHJpdmVycy92aXJ0L3Zib3hndWVzdC9NYWtlZmlsZS0zLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19WQk9YR1VFU1QpICYjNDM7PSB2Ym94Z3Vlc3Qub1xuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy0yLS8qXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmM6MzogKiB2Ym94Z3Vlc3QgY29yZSBndWVzdC1kZXZpY2UgaGFuZGxpbmcgY29kZSwgVkJveEd1ZXN0LmNwcCBpbiB1cHN0cmVhbSBzdm4uXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmMtNC0gKlxuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy0xNi0jaW5jbHVkZSBcdTAwM2NsaW51eC92bWFsbG9jLmhcdTAwM2VcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYzoxNzojaW5jbHVkZSBcJiMzNDt2Ym94Z3Vlc3RfY29yZS5oXCYjMzQ7XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmM6MTg6I2luY2x1ZGUgXCYjMzQ7dmJveGd1ZXN0X3ZlcnNpb24uaFwmIzM0O1xuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jLTE5LVxuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYz04OTU9c3RhdGljIGludCB2YmdfcXVlcnlfaG9zdF92ZXJzaW9uKHN0cnVjdCB2YmdfZGV2ICpnZGV2KVxuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy05MTUtXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmM6OTE2Olx0dmJnX2luZm8oXCYjMzQ7dmJveGd1ZXN0OiBob3N0LXZlcnNpb246ICVzICUjeFxcblwmIzM0OywgZ2Rldi1cdTAwM2Vob3N0X3ZlcnNpb24sXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmMtOTE3LVx0XHQgZ2Rldi1cdTAwM2Vob3N0X2ZlYXR1cmVzKTtcbi0tXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmMtOTE5LVx0aWYgKCEocmVxLVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBWTU1ERVZfSFZGX0hHQ01fUEhZU19QQUdFX0xJU1QpKSB7XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmM6OTIwOlx0XHR2YmdfZXJyKFwmIzM0O3Zib3hndWVzdDogRXJyb3IgaG9zdCB0b28gb2xkIChkb2VzIG5vdCBzdXBwb3J0IHBhZ2UtbGlzdHMpXFxuXCYjMzQ7KTtcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy05MjEtXHRcdHJldCA9IC1FTk9ERVY7XG4tLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jPTk0Mz1pbnQgdmJnX2NvcmVfaW5pdChzdHJ1Y3QgdmJnX2RldiAqZ2RldiwgdTMyIGZpeGVkX2V2ZW50cylcbi0tXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmMtOTkwLVx0aWYgKHJldCkge1xuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jOjk5MTpcdFx0dmJnX2VycihcJiMzNDt2Ym94Z3Vlc3Q6IHZiZ19yZXBvcnRfZ3Vlc3RfaW5mbyBlcnJvcjogJWRcXG5cJiMzNDssIHJldCk7XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmMtOTkyLVx0XHRnb3RvIGVycl9mcmVlX3JlcXM7XG4tLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jLTk5Ni1cdGlmIChyZXQpIHtcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYzo5OTc6XHRcdHZiZ19lcnIoXCYjMzQ7dmJveGd1ZXN0OiBFcnJvciBzZXR0aW5nIGZpeGVkIGV2ZW50IGZpbHRlcjogJWRcXG5cJiMzNDssXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmMtOTk4LVx0XHRcdHJldCk7XG4tLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jLTEwMDMtXHRpZiAocmV0KSB7XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmM6MTAwNDpcdFx0dmJnX2VycihcJiMzNDt2Ym94Z3Vlc3Q6IEVycm9yIGNsZWFyaW5nIGd1ZXN0IGNhcGFiaWxpdGllczogJWRcXG5cJiMzNDssXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmMtMTAwNS1cdFx0XHRyZXQpO1xuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy0xMDEwLVx0aWYgKHJldCkge1xuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jOjEwMTE6XHRcdHZiZ19lcnIoXCYjMzQ7dmJveGd1ZXN0OiBFcnJvciBjbGVhcmluZyBtb3VzZSBzdGF0dXM6ICVkXFxuXCYjMzQ7LCByZXQpO1xuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jLTEwMTItXHRcdGdvdG8gZXJyX2ZyZWVfcmVxcztcbi0tXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmMtMTAyMS1cdGlmIChyZXQgXHUwMDNjIDApXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmM6MTAyMjpcdFx0dmJnX2VycihcJiMzNDt2Ym94Z3Vlc3Q6IEVycm9yIHJlcG9ydGluZyBkcml2ZXIgc3RhdHVzOiAlZFxcblwmIzM0OywgcmV0KTtcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy0xMDIzLVxuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy0xMDQwLS8qKlxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jOjEwNDE6ICogdmJnX2NvcmVfZXhpdCAtIENhbGwgdGhpcyBvbiBleGl0IHRvIGNsZWFuLXVwIHZib3hndWVzdC1jb3JlIG1hbmFnZWRcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy0xMDQyLSAqXHRyZXNvdXJjZXMuXG4tLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jPTEwNDg9dm9pZCB2YmdfY29yZV9leGl0KHN0cnVjdCB2YmdfZGV2ICpnZGV2KVxuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy0xMDc0LSAqXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmM6MTA3NTogKiB2Ym94Z3Vlc3RfbGludXguYyBjYWxscyB0aGlzIHdoZW4gdXNlcnNwYWNlIG9wZW5zIHRoZSBjaGFyLWRldmljZS5cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy0xMDc2LSAqXG4tLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5oLTE0LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmg6MTU6I2luY2x1ZGUgXHUwMDNjbGludXgvdmJveGd1ZXN0LmhcdTAwM2VcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuaC0xNi0jaW5jbHVkZSBcJiMzNDt2bW1kZXYuaFwmIzM0O1xuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuaC0xOC0vKlxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5oOjE5OiAqIFRoZSBtYWlubGluZSBrZXJuZWwgdmVyc2lvbiAodGhpcyB2ZXJzaW9uKSBvZiB0aGUgdmJveGd1ZXN0IG1vZHVsZVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5oLTIwLSAqIGNvbnRhaW5lZCBhIGJ1ZyB3aGVyZSBpdCBkZWZpbmVkIFZCR0xfSU9DVExfVk1NREVWX1JFUVVFU1RfQklHIGFuZFxuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuaD02Nz1zdHJ1Y3QgdmJnX2RldiB7XG4tLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5oLTE1Mi1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuaDoxNTM6XHQvKiogXCYjMzQ7dmJveGd1ZXN0XCYjMzQ7IGNoYXItZGV2aWNlICovXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmgtMTU0LVx0c3RydWN0IG1pc2NkZXZpY2UgbWlzY19kZXZpY2U7XG4tLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5oPTIwMj12b2lkIHZiZ19saW51eF9tb3VzZV9ldmVudChzdHJ1Y3QgdmJnX2RldiAqZ2Rldik7XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmgtMjAzLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5oOjIwNDovKiBQcml2YXRlIChub24gZXhwb3J0ZWQpIGZ1bmN0aW9ucyBmb3JtIHZib3hndWVzdF91dGlscy5jICovXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmgtMjA1LXZvaWQgKnZiZ19yZXFfYWxsb2Moc2l6ZV90IGxlbiwgZW51bSB2bW1kZXZfcmVxdWVzdF90eXBlIHJlcV90eXBlLFxuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtMi0vKlxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzozOiAqIHZib3hndWVzdCBsaW51eCBwY2kgZHJpdmVyLCBjaGFyLWRldiBhbmQgaW5wdXQtZGV2aWNlIGNvZGUsXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTQtICpcbi0tXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTE1LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3Zib3hfdXRpbHMuaFx1MDAzZVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzoxNjojaW5jbHVkZSBcJiMzNDt2Ym94Z3Vlc3RfY29yZS5oXCYjMzQ7XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTE3LVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy0xOC0vKiogVGhlIGRldmljZSBuYW1lLiAqL1xuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzoxOTojZGVmaW5lIERFVklDRV9OQU1FXHRcdFwmIzM0O3Zib3hndWVzdFwmIzM0O1xuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy0yMC0vKiogVGhlIGRldmljZSBuYW1lIGZvciB0aGUgZGV2aWNlIG5vZGUgb3BlbiB0byBldmVyeW9uZS4gKi9cbi0tXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jPTI4Nz1zdGF0aWMgaW50IHZiZ19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtMzAwLVx0aWYgKHJldCAhPSAwKSB7XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jOjMwMTpcdFx0dmJnX2VycihcJiMzNDt2Ym94Z3Vlc3Q6IEVycm9yIGVuYWJsaW5nIGRldmljZTogJWRcXG5cJiMzNDssIHJldCk7XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTMwMi1cdFx0cmV0dXJuIHJldDtcbi0tXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTMwOS1cdGlmICghaW8gfHwgIWlvX2xlbikge1xuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzozMTA6XHRcdHZiZ19lcnIoXCYjMzQ7dmJveGd1ZXN0OiBFcnJvciBJTy1wb3J0IHJlc291cmNlICgwKSBpcyBtaXNzaW5nXFxuXCYjMzQ7KTtcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtMzExLVx0XHRnb3RvIGVycl9kaXNhYmxlX3BjaWRldjtcbi0tXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTMxMy1cdGlmIChkZXZtX3JlcXVlc3RfcmVnaW9uKGRldiwgaW8sIGlvX2xlbiwgREVWSUNFX05BTUUpID09IE5VTEwpIHtcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmM6MzE0Olx0XHR2YmdfZXJyKFwmIzM0O3Zib3hndWVzdDogRXJyb3IgY291bGQgbm90IGNsYWltIElPIHJlc291cmNlXFxuXCYjMzQ7KTtcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtMzE1LVx0XHRyZXQgPSAtRUJVU1k7XG4tLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy0zMjEtXHRpZiAoIW1taW8gfHwgIW1taW9fbGVuKSB7XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jOjMyMjpcdFx0dmJnX2VycihcJiMzNDt2Ym94Z3Vlc3Q6IEVycm9yIE1NSU8gcmVzb3VyY2UgKDEpIGlzIG1pc3NpbmdcXG5cJiMzNDspO1xuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy0zMjMtXHRcdGdvdG8gZXJyX2Rpc2FibGVfcGNpZGV2O1xuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtMzI2LVx0aWYgKGRldm1fcmVxdWVzdF9tZW1fcmVnaW9uKGRldiwgbW1pbywgbW1pb19sZW4sIERFVklDRV9OQU1FKSA9PSBOVUxMKSB7XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jOjMyNzpcdFx0dmJnX2VycihcJiMzNDt2Ym94Z3Vlc3Q6IEVycm9yIGNvdWxkIG5vdCBjbGFpbSBNTUlPIHJlc291cmNlXFxuXCYjMzQ7KTtcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtMzI4LVx0XHRyZXQgPSAtRUJVU1k7XG4tLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy0zMzMtXHRpZiAoIXZtbWRldikge1xuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzozMzQ6XHRcdHZiZ19lcnIoXCYjMzQ7dmJveGd1ZXN0OiBFcnJvciBpb3JlbWFwIGZhaWxlZDsgTU1JTyBhZGRyPSVwYXAgc2l6ZT0lcGFwXFxuXCYjMzQ7LFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy0zMzUtXHRcdFx0XHUwMDI2bW1pbywgXHUwMDI2bW1pb19sZW4pO1xuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtMzQxLVx0ICAgIHZtbWRldi1cdTAwM2VzaXplIFx1MDAzYyAzMiB8fCB2bW1kZXYtXHUwMDNlc2l6ZSBcdTAwM2UgbW1pb19sZW4pIHtcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmM6MzQyOlx0XHR2YmdfZXJyKFwmIzM0O3Zib3hndWVzdDogQm9ndXMgVk1NRGV2IG1lbW9yeTsgdmVyc2lvbj0lMDh4IChleHBlY3RlZCAlMDh4KSBzaXplPSVkIChleHBlY3RlZCBcdTAwM2M9ICVkKVxcblwmIzM0OyxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtMzQzLVx0XHRcdHZtbWRldi1cdTAwM2V2ZXJzaW9uLCBWTU1ERVZfTUVNT1JZX1ZFUlNJT04sXG4tLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy0zNjMtXHRpZiAocmV0KSB7XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jOjM2NDpcdFx0dmJnX2VycihcJiMzNDt2Ym94Z3Vlc3Q6IEVycm9yIGNyZWF0aW5nIGlucHV0IGRldmljZTogJWRcXG5cJiMzNDssIHJldCk7XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTM2NS1cdFx0Z290byBlcnJfdmJnX2NvcmVfZXhpdDtcbi0tXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTM3MC1cdGlmIChyZXQpIHtcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmM6MzcxOlx0XHR2YmdfZXJyKFwmIzM0O3Zib3hndWVzdDogRXJyb3IgcmVxdWVzdGluZyBpcnE6ICVkXFxuXCYjMzQ7LCByZXQpO1xuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy0zNzItXHRcdGdvdG8gZXJyX3ZiZ19jb3JlX2V4aXQ7XG4tLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy0zNzYtXHRpZiAocmV0KSB7XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jOjM3NzpcdFx0dmJnX2VycihcJiMzNDt2Ym94Z3Vlc3Q6IEVycm9yIG1pc2NfcmVnaXN0ZXIgJXMgZmFpbGVkOiAlZFxcblwmIzM0OyxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtMzc4LVx0XHRcdERFVklDRV9OQU1FLCByZXQpO1xuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtMzgzLVx0aWYgKHJldCkge1xuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzozODQ6XHRcdHZiZ19lcnIoXCYjMzQ7dmJveGd1ZXN0OiBFcnJvciBtaXNjX3JlZ2lzdGVyICVzIGZhaWxlZDogJWRcXG5cJiMzNDssXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTM4NS1cdFx0XHRERVZJQ0VfTkFNRV9VU0VSLCByZXQpO1xuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtMzk2LVx0aWYgKHJldCkge1xuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzozOTc6XHRcdHZiZ19lcnIoXCYjMzQ7dmJveGd1ZXN0OiBFcnJvciBtb3JlIHRoZW4gMSB2Ym94IGd1ZXN0IHBjaSBkZXZpY2VcXG5cJiMzNDspO1xuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy0zOTgtXHRcdGdvdG8gZXJyX3VucmVnaXN0ZXJfbWlzY19kZXZpY2VfdXNlcjtcbi0tXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF91dGlscy5jLTItLypcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X3V0aWxzLmM6MzogKiB2Ym94Z3Vlc3Qgdm1tLXJlcSBhbmQgaGdjbS1jYWxsIGNvZGUsIFZCb3hHdWVzdFIwTGliSEdDTUludGVybmFsLmNwcCxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X3V0aWxzLmMtNC0gKiBWQm94R3Vlc3RSMExpYkdlbmVyaWNSZXF1ZXN0LmNwcCBhbmQgUlRFcnJDb252ZXJ0VG9FcnJuby5jcHAgaW4gdmJveCBzdm4uXG4tLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfdXRpbHMuYy0xOS0jaW5jbHVkZSBcdTAwM2NsaW51eC92Ym94X3V0aWxzLmhcdTAwM2VcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X3V0aWxzLmM6MjA6I2luY2x1ZGUgXCYjMzQ7dmJveGd1ZXN0X2NvcmUuaFwmIzM0O1xuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfdXRpbHMuYy0yMS1cbi0tXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF92ZXJzaW9uLmgtNS0gKiBzeW5jZWQgd2l0aCB2Ym94IHVwc3RyZWFtcyB2ZXJzaW9uaW5nIHNjaGVtZSB3aGVuIHdlIGltcGxlbWVudCAvIHBvcnRcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X3ZlcnNpb24uaDo2OiAqIG5ldyBmZWF0dXJlcyBmcm9tIHRoZSB1cHN0cmVhbSBvdXQtb2YtdHJlZSB2Ym94Z3Vlc3QgZHJpdmVyLlxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfdmVyc2lvbi5oLTctICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTkzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIGB2Ym94c2ZfZGlyX2VtaXRgIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCBpcyB3b3J0aCBmdXp6aW5nLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYHZib3hzZl9kaXJfZW1pdGAuIFRoZSBmaXJzdCB0aGluZyB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzLCBjYW4gc3l6a2FsbGVyIGV2ZW4gcmVhY2ggdGhpcyBjb2RlIHBhdGg/IE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gYXNzdW1lIHRoYXQgc3l6a2FsbGVyICpjYW4mIzM5O3QqIGRpcmVjdGx5IGZ1enogYHZib3hndWVzdGAgdXNpbmcgc29tZXRoaW5nIGxpa2UgYHN5el9wY2lfYWRkYCwgYmVjYXVzZSBzeXprYWxsZXImIzM5O3Mgbm90IHNldCB1cCBmb3IgYXJiaXRyYXJ5IFBDSSBkZXZpY2UgZnV6emluZy4gQWxzbywgSSBkb24mIzM5O3QgdGhpbmsgdGhlcmUmIzM5O3MgYSBzcGVjaWZpYyBgc3l6X3Zib3hndWVzdGAgY2FsbC4KCkJ1dCB3YWl0LCBzeXprYWxsZXIgKmRpZCogZmluZCB0aGUgYnVnISBUaGF0JiMzOTtzIHRoZSBjcnVjaWFsIHBvaW50LiBPa2F5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqaG93Ki4gSWRlYWxseSwgSSYjMzk7ZCBjaGVjayB0aGUgc3l6a2FsbGVyIGNvbW1pdCBtZXNzYWdlIG9yIHRoZSBkYXNoYm9hcmQgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSBtZW50aW9uIG9mIGB2Ym94c2ZfZGlyX2VtaXRgLiBTaG9vdCwgSSBkb24mIzM5O3QgaGF2ZSBpbnRlcm5ldCBhY2Nlc3MsIHNvIEkmIzM5O20gbGltaXRlZCB0byB1c2luZyBqdXN0IHRoZSB0b29scyBhdmFpbGFibGUuCgpJZiBzeXprYWxsZXIgZm91bmQgaXQsIHRoZW4gaXQgKm11c3QqIGJlIHJlYWNoYWJsZSBzb21laG93LiBUaGlzIGZvcmNlcyBtZSB0byB0aGluay4gQWghIFN5emthbGxlciBzdXBwb3J0cyBWaXJ0dWFsQm94IGFzIGEgVk0gYmFja2VuZCwgcmlnaHQ/IFRoZSBgdm1fdHlwZTogJiMzNDt2Ym94JiMzNDtgIG9wdGlvbi4gSWYgc3l6a2FsbGVyIGlzIHJ1bm5pbmcgaW4gVmlydHVhbEJveCwgdGhlbiB0aGUgYHZib3hzZmAgZmlsZXN5c3RlbSAqaXMqIHJlYWNoYWJsZSwgYW5kIHRoYXQgbWVhbnMgd2UgKmNvdWxkKiBmdXp6IGl0IQoKTm93LCB0aGUgaW5zdHJ1Y3Rpb25zLi4uICYjMzQ7UmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucy4uLiBjb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUmIzM0Oy4gU28sIGlmIGl0JiMzOTtzIG5vdCByZWFjaGFibGUgaW4gR0NFIG9yIFFFTVUsIHRoZW4gaXQmIzM5O3MgYmFkLiBCdXQsIHRoZSBwcm9tcHQgKnNwZWNpZmljYWxseSogY2FsbHMgb3V0ICYjMzQ7dmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuJiMzNDsgVmlydHVhbEJveCAqaXMqIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIEl0JiMzOTtzIGEgaHlwZXJ2aXNvci4KCkJ1dC4uLiBoZXJlJiMzOTtzIHRoZSBraWNrZXIuIFN5emthbGxlciAqdHlwaWNhbGx5KiBydW5zIG9uIEdDRSBvciBRRU1VLiBJZiBpdCByZXF1aXJlcyBWaXJ0dWFsQm94LCBkb2VzIHRoYXQgbWFrZSBpdCB1bnJlYWNoYWJsZSBpbiBhICpzdGFuZGFyZCogc3l6a2FsbGVyIHNldHVwPyBQcm9iYWJseS4gVGhpcyBpcyB3aGVyZSB0aGUgdW5jZXJ0YWludHkgbGllcy4gVGhlIGZhY3QgdGhhdCBzeXprYWxsZXIgKmRpZCogZmluZCBpdCBpcyBjcml0aWNhbCwgYWdhaW4sICpob3cqPwoKTWF5YmUgYHZib3hzZmAgKmNhbiogYmUgbW91bnRlZCB3aXRob3V0IHRoZSBQQ0kgZGV2aWNlPyBPa2F5LCBsZXQgbWUgZ28gYmFjayB0byB0aGUgYHZib3hzZl9maWxsX3N1cGVyYCBjb2RlLiBJZiBgdmJveHNmX2Nvbm5lY3QoKWAgZmFpbHMsIGl0IHJldHVybnMgYW4gZXJyb3IuIGB2Ym94c2ZfY29ubmVjdCgpYCBjYWxscyBgdmJnX2dldF9nZGV2KClgLiBUaGUga2V5IHF1ZXN0aW9uIGlzLCBpcyB0aGVyZSAqYW55KiB3YXkgYHZiZ19nZXRfZ2RldigpYCBjYW4gcmV0dXJuIGEgdmFsaWQgcG9pbnRlciB3aXRob3V0IGEgUENJIGRldmljZT8gTGV0JiMzOTtzIHRyYWNlIHRoYXQgYHZiZ19nZGV2YCBjb2RlLiBJJiMzOTtsbCBmb2N1cyBvbiB3aGV0aGVyIHRoZSBoeXBlcnZpc29yIGNhbiBiZSByZWFjaGVkIGluIGEgd2F5IHRoYXQgZG9lc24mIzM5O3QgaW52b2x2ZSB0aGUgUENJIGRldmljZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmJnX2dkZXYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3ZpcnQvdmJveGd1ZXN0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmg9MTYwPXN0cnVjdCB2Ymdfc2Vzc2lvbiB7XG4tLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5oLTE2Ni1cdCAqIFRoZXNlIHdpbGwgYmUgYXV0b21hdGljYWxseSBkaXNjb25uZWN0ZWQgd2hlbiB0aGUgc2Vzc2lvbiBpcyBjbG9zZWQuXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmg6MTY3Olx0ICogUHJvdGVjdGVkIGJ5IHZiZ19nZGV2LnNlc3Npb25fbXV0ZXguXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmgtMTY4LVx0ICovXG4tLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5oLTE3Mi1cdCAqIEFuIGV2ZW50IHR5cGUgcmVxdWVzdGVkIGluIGFueSBndWVzdCBzZXNzaW9uIHdpbGwgYmUgYWRkZWQgdG8gdGhlXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmg6MTczOlx0ICogaG9zdCBmaWx0ZXIuIFByb3RlY3RlZCBieSB2YmdfZ2Rldi5zZXNzaW9uX211dGV4LlxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5oLTE3NC1cdCAqL1xuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuaC0xODMtXHQgKiBBIGNhcGFiaWxpdHkgY2xhaW1lZCBieSBhbnkgZ3Vlc3Qgc2Vzc2lvbiB3aWxsIGJlIHJlcG9ydGVkIHRvIHRoZVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5oOjE4NDpcdCAqIGhvc3QuIFByb3RlY3RlZCBieSB2YmdfZ2Rldi5zZXNzaW9uX211dGV4LlxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5oLTE4NS1cdCAqL1xuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtMjYtXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jOjI3Oi8qKiBNdXRleCBwcm90ZWN0aW5nIHRoZSBnbG9iYWwgdmJnX2dkZXYgcG9pbnRlciB1c2VkIGJ5IHZiZ19nZXQvcHV0X2dkZXYuICovXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jOjI4OnN0YXRpYyBERUZJTkVfTVVURVgodmJnX2dkZXZfbXV0ZXgpO1xuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzoyOTovKiogR2xvYmFsIHZiZ19nZGV2IHBvaW50ZXIgdXNlZCBieSB2YmdfZ2V0L3B1dF9nZGV2LiAqL1xuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzozMDpzdGF0aWMgc3RydWN0IHZiZ19kZXYgKnZiZ19nZGV2O1xuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy0zMS1cbi0tXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jPTI4Nz1zdGF0aWMgaW50IHZiZ19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtMzg4LVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzozODk6XHRtdXRleF9sb2NrKFx1MDAyNnZiZ19nZGV2X211dGV4KTtcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmM6MzkwOlx0aWYgKCF2YmdfZ2RldilcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmM6MzkxOlx0XHR2YmdfZ2RldiA9IGdkZXY7XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTM5Mi1cdGVsc2VcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtMzkzLVx0XHRyZXQgPSAtRUJVU1k7XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jOjM5NDpcdG11dGV4X3VubG9jayhcdTAwMjZ2YmdfZ2Rldl9tdXRleCk7XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTM5NS1cbi0tXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jPTQxOT1zdGF0aWMgdm9pZCB2YmdfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGNpKVxuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtNDIyLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzo0MjM6XHRtdXRleF9sb2NrKFx1MDAyNnZiZ19nZGV2X211dGV4KTtcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmM6NDI0Olx0dmJnX2dkZXYgPSBOVUxMO1xuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzo0MjU6XHRtdXRleF91bmxvY2soXHUwMDI2dmJnX2dkZXZfbXV0ZXgpO1xuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy00MjYtXG4tLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYz00MzQ9c3RydWN0IHZiZ19kZXYgKnZiZ19nZXRfZ2Rldih2b2lkKVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy00MzUte1xuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzo0MzY6XHRtdXRleF9sb2NrKFx1MDAyNnZiZ19nZGV2X211dGV4KTtcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtNDM3LVxuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtNDQyLVx0ICovXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jOjQ0MzpcdGlmICh2YmdfZ2RldilcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmM6NDQ0Olx0XHRyZXR1cm4gdmJnX2dkZXY7XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTQ0NS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmM6NDQ2Olx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZiZ19nZGV2X211dGV4KTtcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtNDQ3LVx0cmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7XG4tLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYz00NTE9dm9pZCB2YmdfcHV0X2dkZXYoc3RydWN0IHZiZ19kZXYgKmdkZXYpXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTQ1Mi17XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jOjQ1MzpcdFdBUk5fT04oZ2RldiAhPSB2YmdfZ2Rldik7XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jOjQ1NDpcdG11dGV4X3VubG9jayhcdTAwMjZ2YmdfZ2Rldl9tdXRleCk7XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTQ1NS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNTg4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIGEgVmlydHVhbEJveCBCdWcqKgoKT2theSwgc28gYHZiZ19nZGV2YCBpcyBvbmx5IHNldCB3aXRoaW4gYHZiZ19wY2lfcHJvYmVgLiBUaGF0JiMzOTtzIGEgcHJldHR5IGNsZWFyIGluZGljYXRvciB0aGF0IGl0JiMzOTtzIHN0cmljdGx5IHRpZWQgdG8gdGhlIFBDSSBkZXZpY2UuIElmIHN5emthbGxlciBmb3VuZCB0aGlzIGJ1ZywgdGhhdCBtZWFucyBvbmUgb2YgdHdvIHRoaW5nczogZWl0aGVyIHN5emthbGxlciB3YXMgcnVubmluZyBpbnNpZGUgVmlydHVhbEJveCAobWFraW5nIHRoZSBQQ0kgZGV2aWNlIGF2YWlsYWJsZSksIG9yIHN5emthbGxlciBoYXMgc29tZSBjbGV2ZXIgdHJpY2sgZm9yIGluamVjdGluZyBQQ0kgZGV2aWNlcy4gSG1tLCB3YWl0IGEgbWludXRlLi4uIEkga25vdyBzeXprYWxsZXIgKmNhbiogaW5qZWN0IGRldmljZXMuIEkgdGhpbmsgdGhlcmUgaXMgYSBgc3l6X3BjaV9hZGRgIGZ1bmN0aW9uLCBhbmQgSSYjMzk7bSBndWVzc2luZyB0aGF0IHVzZXMgYHZmaW9gIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBObywgdGhhdCYjMzk7cyBub3QgcmlnaHQuIFN5emthbGxlciBkb2VzbiYjMzk7dCBoYXZlIGEgKmdlbmVyaWMqIFBDSSBlbXVsYXRvciByaWdodCBpbiB0aGUga2VybmVsLiBCdXQgaXQgKmNvdWxkKiBmdXp6IGB2Ym94Z3Vlc3RgIGlmIGl0IHJ1bnMgaW4gVmlydHVhbEJveC4KClJpZ2h0LCBiYWNrIHRvIHRoZSBwcm9tcHQuIEl0IHNheXMgSSBzaG91bGQgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBhZmZlY3RzIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBlbnZpcm9ubWVudHMgKmxpa2UqIEdDRSBvciBRRU1VLCBldmVuIHdpdGggc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJcyBWaXJ0dWFsQm94IGNvbnNpZGVyZWQgYSAmIzM0O3ZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgR0NFIG9yIFFFTVUmIzM0Oz8gWWVzLCBWaXJ0dWFsQm94ICppcyogYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gQnV0IGl0IHVzZXMgdGhlIHdvcmQgJiMzNDtsaWtlLiYjMzQ7IERvZXMgdGhhdCBtYXR0ZXI/IElmIHNvbWV0aGluZyBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIEdDRSBvciBRRU1VLCB0aGVuIEkgc2hvdWxkIHJldHVybiBmYWxzZS4KCk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IElzIHRoaXMgYnVnICppbXBvc3NpYmxlKiB0byByZWFjaCBpbiBHQ0Ugb3IgUUVNVT8gWWVzLCBpdCBpcyBiZWNhdXNlIG5laXRoZXIgR0NFIG5vciBRRU1VIGVtdWxhdGUgdGhlIFZpcnR1YWxCb3ggUENJIGRldmljZS4gU28sIHRoZSBidWcgaXMgdmVyeSBzcGVjaWZpYyB0byBWaXJ0dWFsQm94LgoKQnV0IHdhaXQsIHdoYXQgYWJvdXQgdGhlIHNjZW5hcmlvIHdoZXJlIHN5emthbGxlciB1c2VzIGBzeXpfbW91bnRfaW1hZ2VgLCBhbmQgdGhlIGJ1ZyBsaWVzIHdpdGhpbiB0aGUgcGFyc2luZyBvZiB0aGUgaW1hZ2U/IEhtbSwgZG9lcyB0aGF0IGFwcGx5IGhlcmU/IEJ1dCBubywgYHZib3hzZmAgaXMgbm90IGEgYmxvY2sgZmlsZXN5c3RlbS4gSXQmIzM5O3MgbmV0d29yay1saWtlLiBTbywgYW4gaW1hZ2UgaXMgbm90IGludm9sdmVkLgoKQWhhLCB0aGUgcGF0Y2ggaXMgaW4gYHZib3hzZl9kaXJfZW1pdGAuIE9rYXksIG9rYXkuIFRpbWUgdG8gZ28gYmFjayBhbmQgdGFrZSBhbm90aGVyIGxvb2sgYXQgYHZib3hzZl9kaXJfZW1pdGAgZGlyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvdmJveHNmL2Rpci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMjE6XHRcdFx0Zm9yIChpID0gMCwgaW5mbyA9IGItXHUwMDNlYnVmOyBpIFx1MDAzYyBjdHgtXHUwMDNlcG9zIC0gY3VyOyBpJiM0MzsmIzQzOykge1xuIDEyMjpcdFx0XHRcdGVuZCA9IFx1MDAyNmluZm8tXHUwMDNlbmFtZS5zdHJpbmcudXRmOFtpbmZvLVx1MDAzZW5hbWUuc2l6ZV07XG4gMTIzOlx0XHRcdFx0LyogT25seSBoYXBwZW5zIGlmIHRoZSBob3N0IGdpdmVzIHVzIGNvcnJ1cHQgZGF0YSAqL1xuIDEyNDpcdFx0XHRcdGlmIChXQVJOX09OKGVuZCBcdTAwM2UgKGItXHUwMDNlYnVmICYjNDM7IGItXHUwMDNldXNlZCkpKVxuIDEyNTpcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDEyNjpcdFx0XHRcdGluZm8gPSBlbmQ7XG4gMTI3Olx0XHRcdH1cbiAxMjg6XHRcbiAxMjk6XHRcdFx0ZW5kID0gXHUwMDI2aW5mby1cdTAwM2VuYW1lLnN0cmluZy51dGY4W2luZm8tXHUwMDNlbmFtZS5zaXplXTtcbiAxMzA6XHRcdFx0aWYgKFdBUk5fT04oZW5kIFx1MDAzZSAoYi1cdTAwM2VidWYgJiM0MzsgYi1cdTAwM2V1c2VkKSkpXG4gMTMxOlx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDEzMjpcdFx0XHRpZiAoaW5mby1cdTAwM2VuYW1lLmxlbmd0aCBcdTAwM2UgaW5mby1cdTAwM2VuYW1lLnNpemUpXG4gMTMzOlx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDEzNDpcdFxuIDEzNTpcdFx0XHQvKiBJbmZvIG5vdyBwb2ludHMgdG8gdGhlIHJpZ2h0IGVudHJ5LCBlbWl0IGl0LiAqL1xuIDEzNjpcdFx0XHRkX3R5cGUgPSB2Ym94c2ZfZ2V0X2RfdHlwZShpbmZvLVx1MDAzZWluZm8uYXR0ci5tb2RlKTtcbiAxMzc6XHRcbiAxMzg6XHRcdFx0LypcbiAxMzk6XHRcdFx0ICogT24gMzItYml0IHN5c3RlbXMgcG9zIGlzIDY0LWJpdCBzaWduZWQsIHdoaWxlIGlubyBpcyAzMi1iaXRcbiAxNDA6XHRcdFx0ICogdW5zaWduZWQgc28gZmFrZV9pbm8gbWF5IG92ZXJmbG93LCBjaGVjayBmb3IgdGhpcy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ4NTgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgQ29ycnVwdCBEYXRhIElzc3VlKioKCk9rYXksIHNvIHRoZSBjb21tZW50IHBvaW50cyB0aGUgZmluZ2VyIGF0IGNvcnJ1cHQgZGF0YSwgaW1wbHlpbmcgdGhlIHByb2JsZW0gb3JpZ2luYXRlcyBmcm9tIHRoZSBob3N0LCBzcGVjaWZpY2FsbHkgVmlydHVhbEJveC4gVGhhdCBtYWtlcyBzZW5zZTsgaWYgdGhlIGhvc3QgcHJvdmlkZXMgYmFkIGRhdGEsIHdlIGNvdWxkIGVhc2lseSBzZWUgb3V0LW9mLWJvdW5kcyByZWFkcyBvciBzb21lIG90aGVyIG5hc3R5IG1lbW9yeSBjb3JydXB0aW9uLiBCdXQgdGhlbiBJIGhhdmUgdG8gYXNrIG15c2VsZiwgaG93IHdvdWxkIHN5emthbGxlciwgcnVubmluZyBpbiB0aGUgZ3Vlc3QsIGJlIGFibGUgdG8gZXZlbiB0cmlnZ2VyIHRoaXMgc2NlbmFyaW8/IFN5emthbGxlciBpcyBjb25maW5lZCB0byB0aGUgZ3Vlc3Q7IGl0IGNhbiYjMzk7dCBkaXJlY3RseSBtYW5pcHVsYXRlIHRoZSBob3N0LiBVbmxlc3PigKYgY291bGQgc3l6a2FsbGVyIHNvbWVob3cgaW50ZXJjZXB0IHRoZSBIR0NNIGNhbGxzIGFuZCBmZWVkIGJhY2sgaXRzIG93biwgaW50ZW50aW9uYWxseSBjb3JydXB0IGRhdGE/CgpUaGlzIG1ha2VzIG1lIHRoaW5rLCBkb2VzIGB2Ym94Z3Vlc3RgIGhhdmUgYW55IGJ1aWx0LWluIGZlYXR1cmVzIGZvciBmYXVsdCBpbmplY3Rpb24gb3IgcGVyaGFwcyBzb21lIHNvcnQgb2YgZmFrZSBob3N0IG1vZGUgZGVzaWduZWQgZm9yIHRlc3Rpbmc/IEl0IHdvdWxkIG1ha2UgcGVyZmVjdCBzZW5zZSB0byBoYXZlIHNvbWV0aGluZyBsaWtlIHRoYXQuIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGB2Ym94Z3Vlc3RgIGNvZGUgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IGhvb2tzIG9yIGNhcGFiaWxpdGllcyB0byBzaW11bGF0ZSB0aGUgaG9zdCBhbmQgZ2VuZXJhdGUgc3BlY2lmaWMgZGF0YSBzY2VuYXJpb3MuIFRoYXQmIzM5O3MgdGhlIGtleTogZmluZGluZyBhIHdheSB0byBjb250cm9sIHRoZSBkYXRhIGZsb3cgZnJvbSB0aGUgaG9zdCwgZXZlbiBpbmRpcmVjdGx5LCBzbyB3ZSBjYW4gcmVsaWFibHkgcmVwcm9kdWNlIGFuZCBhbmFseXplIHRoaXMgJiMzNDtjb3JydXB0IGRhdGEmIzM0OyBjb25kaXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZhdWx0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aXJ0L3Zib3hndWVzdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jPTEyODQ9c3RhdGljIGludCB2YmdfcmVxX2FsbG93ZWQoc3RydWN0IHZiZ19kZXYgKmdkZXYsIHN0cnVjdCB2Ymdfc2Vzc2lvbiAqc2Vzc2lvbixcbi0tXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmMtMTM1MS1cdFx0Y2FzZSBWQk9YR1VFU1RfRkFDSUxJVFlfVFlQRV9HUkFQSElDUzpcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYzoxMzUyOlx0XHRkZWZhdWx0OlxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jLTEzNTMtXHRcdFx0dHJ1c3RlZF9hcHBzX29ubHkgPSBmYWxzZTtcbi0tXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmMtMTM1OC1cdC8qIEFueXRoaW5nIGVsc2UgaXMgbm90IGFsbG93ZWQuICovXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmM6MTM1OTpcdGRlZmF1bHQ6XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmMtMTM2MC1cdFx0dmJnX2VycihcJiMzNDtEZW55aW5nIHVzZXJzcGFjZSB2bW0gY2FsbCB0eXBlICUjMDh4XFxuXCYjMzQ7LFxuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYz0xNDc4PXN0YXRpYyBib29sIHZiZ19wYXJhbV92YWxpZChlbnVtIHZtbWRldl9oZ2NtX2Z1bmN0aW9uX3BhcmFtZXRlcl90eXBlIHR5cGUpXG4tLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jLTE0ODYtXHRcdHJldHVybiB0cnVlO1xuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jOjE0ODc6XHRkZWZhdWx0OlxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jLTE0ODgtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF91dGlscy5jPTI1MT1zdGF0aWMgaW50IGhnY21fY2FsbF9wcmVwcm9jZXNzKFxuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X3V0aWxzLmMtMjk2LVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfdXRpbHMuYzoyOTc6XHRcdGRlZmF1bHQ6XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF91dGlscy5jLTI5OC1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF91dGlscy5jPTMxMj1zdGF0aWMgdTMyIGhnY21fY2FsbF9saW5lYXJfYWRkcl90eXBlX3RvX3BhZ2VsaXN0X2ZsYWdzKFxuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X3V0aWxzLmMtMzE1LVx0c3dpdGNoICh0eXBlKSB7XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF91dGlscy5jOjMxNjpcdGRlZmF1bHQ6XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF91dGlscy5jLTMxNy1cdFx0V0FSTl9PTigxKTtcbi0tXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF91dGlscy5jPTM4ND1zdGF0aWMgdm9pZCBoZ2NtX2NhbGxfaW5pdF9jYWxsKFxuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X3V0aWxzLmMtNDIzLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfdXRpbHMuYzo0MjQ6XHRcdGRlZmF1bHQ6XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF91dGlscy5jLTQyNS1cdFx0XHRXQVJOX09OKDEpO1xuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X3V0aWxzLmM9NTY1PXN0YXRpYyBpbnQgaGdjbV9jYWxsX2NvcHlfYmFja19yZXN1bHQoXG4tLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfdXRpbHMuYy02MDYtXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF91dGlscy5jOjYwNzpcdFx0ZGVmYXVsdDpcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X3V0aWxzLmMtNjA4LVx0XHRcdFdBUk5fT04oMSk7XG4tLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfdXRpbHMuYz02NzE9aW50IHZiZ19oZ2NtX2NhbGwzMihcbi0tXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF91dGlscy5jLTcwNi1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X3V0aWxzLmM6NzA3Olx0XHRkZWZhdWx0OlxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfdXRpbHMuYy03MDgtXHRcdFx0cmV0ID0gLUVJTlZBTDtcbi0tXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF91dGlscy5jLTczNS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X3V0aWxzLmM6NzM2Olx0XHRkZWZhdWx0OlxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfdXRpbHMuYy03MzctXHRcdFx0V0FSTl9PTigxKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYyNzkKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBWaXJ0dWFsQm94IEJ1ZyBSZXBvcnQqKgoKT2theSwgc28gdGhlcmUmIzM5O3MgYSBidWcgcmVwb3J0IGZyb20gc3l6a2FsbGVyLCBhbmQgdGhlcmUmIzM5O3Mgbm8gbWVudGlvbiBvZiBmYXVsdCBpbmplY3Rpb24gb3IgYSBmYWtlZCBob3N0IGVudmlyb25tZW50LiBUaGF0JiMzOTtzIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBhdCBtZS4gQnV0IGlmIHN5emthbGxlciBmb3VuZCB0aGlzLCBob3cgZXhhY3RseSBkaWQgaXQgbWFuYWdlIHRvIG1hbmlwdWxhdGUgaG9zdCBkYXRhPyBIbW0uLi4gd2FpdCBhIG1pbnV0ZSwgYHZib3hzZmAgaXMgYSBmaWxlc3lzdGVtLCByaWdodD8gU28sIHN5emthbGxlciAqY291bGQqIGhhdmUgbW91bnRlZCBpdC4gVGhlIGhvc3QgKFZpcnR1YWxCb3gpIHdvdWxkIHRoZW4gcHJvdmlkZSB0aGUgZGF0YS4gQnV0IFZpcnR1YWxCb3ggaXMgYSAqdHJ1c3RlZCogaG9zdC4gSXQgc2hvdWxkbiYjMzk7dCBiZSByZXR1cm5pbmcgY29ycnVwdCBkYXRhIHVubGVzcyB0aGVyZSYjMzk7cyBhIGJ1ZyBpbiBWaXJ0dWFsQm94IGl0c2VsZiwgb3IuLi4gY291bGQgc3l6a2FsbGVyIGJlIGZ1enppbmcgdGhlIGhvc3QtZ3Vlc3QgY29tbXVuaWNhdGlvbiBzb21laG93PwoKSG9sZCBvbi4uLiBJIHNlZW0gdG8gcmVjYWxsIHNlZWluZyBzb21ldGhpbmcgYWJvdXQgYSBgc3l6X3Zib3hndWVzdGAgZnVuY3Rpb24gc29tZXdoZXJlLiBMZXQgbWUgY2hlY2sgaWYgdGhlcmUmIzM5O3MgYW55IGBzeXpfYCBmdW5jdGlvbiByZWxhdGVkIHRvIGB2Ym94Z3Vlc3RgIHdpdGhpbiB0aGUgc3l6a2FsbGVyIGNvZGUuIERhbW1pdCwgSSBkb24mIzM5O3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIHN5emthbGxlciBzb3VyY2UgcmlnaHQgbm93LiAKCkJ1dCB3YWl0IGEgbWludXRlLi4uIGNvdWxkIGl0IGJlIGZ1enppbmcgYHZib3hzZmAgdGhyb3VnaCBhICpmYWtlKiBgdmJveGd1ZXN0YCBkZXZpY2U/IFRoYXQgd291bGQgYmUgYSBjbGV2ZXIgdHJpY2suIEkgd29uZGVyIGlmIHN1Y2ggYSBmYWtlIGRldmljZSBleGlzdHMuIExldCBtZSBnbyBiYWNrIGFuZCByZS1leGFtaW5lIHRoZSBgZHJpdmVycy92aXJ0L3Zib3hndWVzdC9gIGRpcmVjdG9yeS4gTWF5YmUgSSBtaXNzZWQgc29tZXRoaW5nIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Zha2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3ZpcnQvdmJveGd1ZXN0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2ODI5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBTeXprYWxsZXIgRnV6emluZyBTY2VuYXJpbyoqCgpPa2F5LCBubyBzbW9rZSBhbmQgbWlycm9ycywganVzdCBwdXJlIGFuYWx5c2lzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtJcyBzeXprYWxsZXIgYWN0dWFsbHkgdGFyZ2V0aW5nIGAvZGV2L3Zib3hndWVzdGAgZGlyZWN0bHkgZnJvbSB1c2Vyc3BhY2U/JiMzNDsgVGhpcyBwYXRoIHNlZW1zIGludGVyZXN0aW5nLCBnaXZlbiB0aGF0IGAvZGV2L3Zib3hndWVzdGAgaXMgdGhlIGNvbmR1aXQgZm9yIHVzZXJzcGFjZSB0byBtYWtlIEhHQ00gY2FsbHMgdG8gdGhlIGhvc3QuIEhvd2V2ZXIsIGB2Ym94c2ZgIGlzIGEgKmtlcm5lbCogZmlsZXN5c3RlbSwgYWxzbyBjYXBhYmxlIG9mIHNlbmRpbmcgSEdDTSBjYWxscy4gSWYgc3l6a2FsbGVyJiMzOTtzIGZvY3VzZWQgb24gYHZib3hzZmAsIGl0IHdvdWxkIG1vdW50IHRoZSBmaWxlc3lzdGVtIGFuZCBwZXJmb3JtIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucywgcmlnaHQ/IEJ1dCBob3cgZXhhY3RseSBjb3VsZCBzeXprYWxsZXIgdHJpZ2dlciB0aGlzICYjMzQ7Y29ycnVwdCBkYXRhIGZyb20gaG9zdCYjMzQ7IHNjZW5hcmlvPwoKSXQmIzM5O3MgZ290IG1lIHRoaW5raW5nLCB3YXMgdGhpcyBkaXNjb3ZlcmVkIGJ5IGEgZGlmZmVyZW50IGZ1enplciwgb3IgcGVyaGFwcyBzeXprYWxsZXIgc3R1bWJsZWQgdXBvbiBpdD8gQ291bGQgaXQgaGF2ZSBiZWVuIGFibGUgdG8gY29uc3RydWN0IGEgZGlyZWN0b3J5IG5hbWUgdGhhdCYjMzk7cyBsYXJnZXIgdGhhbiB0aGUgYWxsb2NhdGVkIHNpemU/IFRoYXQgbGFzdCB0aG91Z2h0IGZlZWxzIHByb21pc2luZy4uLiBXYWl0IGEgbWludXRlLCB3aGF0IGlmIHdl4oCZcmUgZGVhbGluZyB3aXRoIGEgYGluZm8tJmd0O25hbWUubGVuZ3RoICZndDsgaW5mby0mZ3Q7bmFtZS5zaXplYCBzaXR1YXRpb24/CgpMZXQgbWUgaW52ZXN0aWdhdGUgdGhhdC4gSWYgYGluZm9gIGlzIGEgYHZib3hzZl9kaXJfaW5mb2Agc3RydWN0LCB0aGlzIGNvdWxkIGJlIHRoZSBrZXkuIExldCYjMzk7cyBkZWx2ZSBpbnRvIHRoZSBgdmJveHNmX2Rpcl9pbmZvYCBkZWZpbml0aW9uIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmJveHNmX2Rpcl9pbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvdmJveHNmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy92Ym94c2YvZGlyLmM9MTI9c3RhdGljIGludCB2Ym94c2ZfZGlyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxuZnMvdmJveHNmL2Rpci5jLTE1LVx0c3RydWN0IHNoZmxfY3JlYXRlcGFybXMgcGFyYW1zID0ge307XG5mcy92Ym94c2YvZGlyLmM6MTY6XHRzdHJ1Y3QgdmJveHNmX2Rpcl9pbmZvICpzZl9kO1xuZnMvdmJveHNmL2Rpci5jLTE3LVx0aW50IGVycjtcbmZzL3Zib3hzZi9kaXIuYy0xOC1cbmZzL3Zib3hzZi9kaXIuYzoxOTpcdHNmX2QgPSB2Ym94c2ZfZGlyX2luZm9fYWxsb2MoKTtcbmZzL3Zib3hzZi9kaXIuYy0yMC1cdGlmICghc2ZfZClcbi0tXG5mcy92Ym94c2YvZGlyLmMtNDYtZXJyX2ZyZWVfZGlyX2luZm86XG5mcy92Ym94c2YvZGlyLmM6NDc6XHR2Ym94c2ZfZGlyX2luZm9fZnJlZShzZl9kKTtcbmZzL3Zib3hzZi9kaXIuYy00OC1cdHJldHVybiBlcnI7XG4tLVxuZnMvdmJveHNmL2Rpci5jPTUxPXN0YXRpYyBpbnQgdmJveHNmX2Rpcl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbmZzL3Zib3hzZi9kaXIuYy01My1cdGlmIChmaWxlLVx1MDAzZXByaXZhdGVfZGF0YSlcbmZzL3Zib3hzZi9kaXIuYzo1NDpcdFx0dmJveHNmX2Rpcl9pbmZvX2ZyZWUoZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGEpO1xuZnMvdmJveHNmL2Rpci5jLTU1LVxuLS1cbmZzL3Zib3hzZi9kaXIuYz05NT1zdGF0aWMgYm9vbCB2Ym94c2ZfZGlyX2VtaXQoc3RydWN0IGZpbGUgKmRpciwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXG4tLVxuZnMvdmJveHNmL2Rpci5jLTk3LVx0c3RydWN0IHZib3hzZl9zYmkgKnNiaSA9IFZCT1hTRl9TQkkoZmlsZV9pbm9kZShkaXIpLVx1MDAzZWlfc2IpO1xuZnMvdmJveHNmL2Rpci5jOjk4Olx0c3RydWN0IHZib3hzZl9kaXJfaW5mbyAqc2ZfZCA9IGRpci1cdTAwM2Vwcml2YXRlX2RhdGE7XG5mcy92Ym94c2YvZGlyLmMtOTktXHRzdHJ1Y3Qgc2hmbF9kaXJpbmZvICppbmZvO1xuLS1cbmZzL3Zib3hzZi9kaXIuYy0xMTQtXHRcdC8qXG5mcy92Ym94c2YvZGlyLmM6MTE1Olx0XHQgKiBOb3RlIHRoZSB2Ym94c2ZfZGlyX2luZm8gb2JqZWN0cyB3ZSBhcmUgaXRlcmF0aW5nIG92ZXIgaGVyZVxuZnMvdmJveHNmL2Rpci5jLTExNi1cdFx0ICogYXJlIHZhcmlhYmxlIHNpemVkLCBzbyB0aGUgaW5mbyBwb2ludGVyIG1heSBlbmQgdXAgYmVpbmdcbi0tXG5mcy92Ym94c2YvdXRpbHMuYz00OTk9c3RhdGljIHZvaWQgdmJveHNmX2Rpcl9idWZfZnJlZShzdHJ1Y3QgdmJveHNmX2Rpcl9idWYgKmIpXG4tLVxuZnMvdmJveHNmL3V0aWxzLmMtNTA1LVxuZnMvdmJveHNmL3V0aWxzLmM6NTA2OnN0cnVjdCB2Ym94c2ZfZGlyX2luZm8gKnZib3hzZl9kaXJfaW5mb19hbGxvYyh2b2lkKVxuZnMvdmJveHNmL3V0aWxzLmMtNTA3LXtcbmZzL3Zib3hzZi91dGlscy5jOjUwODpcdHN0cnVjdCB2Ym94c2ZfZGlyX2luZm8gKnA7XG5mcy92Ym94c2YvdXRpbHMuYy01MDktXG4tLVxuZnMvdmJveHNmL3V0aWxzLmMtNTE3LVxuZnMvdmJveHNmL3V0aWxzLmM6NTE4OnZvaWQgdmJveHNmX2Rpcl9pbmZvX2ZyZWUoc3RydWN0IHZib3hzZl9kaXJfaW5mbyAqcClcbmZzL3Zib3hzZi91dGlscy5jLTUxOS17XG4tLVxuZnMvdmJveHNmL3V0aWxzLmMtNTMxLVxuZnMvdmJveHNmL3V0aWxzLmM6NTMyOmludCB2Ym94c2ZfZGlyX3JlYWRfYWxsKHN0cnVjdCB2Ym94c2Zfc2JpICpzYmksIHN0cnVjdCB2Ym94c2ZfZGlyX2luZm8gKnNmX2QsXG5mcy92Ym94c2YvdXRpbHMuYy01MzMtXHRcdFx0dTY0IGhhbmRsZSlcbi0tXG5mcy92Ym94c2YvdmZzbW9kLmg9NTM9c3RydWN0IHZib3hzZl9pbm9kZSB7XG4tLVxuZnMvdmJveHNmL3Zmc21vZC5oLTYzLVxuZnMvdmJveHNmL3Zmc21vZC5oOjY0OnN0cnVjdCB2Ym94c2ZfZGlyX2luZm8ge1xuZnMvdmJveHNmL3Zmc21vZC5oLTY1LVx0c3RydWN0IGxpc3RfaGVhZCBpbmZvX2xpc3Q7XG4tLVxuZnMvdmJveHNmL3Zmc21vZC5oPTEwNz1pbnQgdmJveHNmX25sc2NweShzdHJ1Y3QgdmJveHNmX3NiaSAqc2JpLCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZV9ib3VuZF9sZW4sXG5mcy92Ym94c2YvdmZzbW9kLmgtMTA4LVx0XHQgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnV0ZjhfbmFtZSwgc2l6ZV90IHV0ZjhfbGVuKTtcbmZzL3Zib3hzZi92ZnNtb2QuaDoxMDk6c3RydWN0IHZib3hzZl9kaXJfaW5mbyAqdmJveHNmX2Rpcl9pbmZvX2FsbG9jKHZvaWQpO1xuZnMvdmJveHNmL3Zmc21vZC5oOjExMDp2b2lkIHZib3hzZl9kaXJfaW5mb19mcmVlKHN0cnVjdCB2Ym94c2ZfZGlyX2luZm8gKnApO1xuZnMvdmJveHNmL3Zmc21vZC5oOjExMTppbnQgdmJveHNmX2Rpcl9yZWFkX2FsbChzdHJ1Y3QgdmJveHNmX3NiaSAqc2JpLCBzdHJ1Y3QgdmJveHNmX2Rpcl9pbmZvICpzZl9kLFxuZnMvdmJveHNmL3Zmc21vZC5oLTExMi1cdFx0XHR1NjQgaGFuZGxlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg1MTEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgYHNoZmxfZGlyaW5mb2AqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgaW5mb2AgaXMgZGVmaW5lZCBhcyBhIGBzdHJ1Y3Qgc2hmbF9kaXJpbmZvYC4gTGV0JiMzOTtzIHBhdXNlIGFuZCBkaWcgaW50byB0aGF0IHNwZWNpZmljIHN0cnVjdHVyZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgdGhhdCBzdHJ1Y3QgaXMgYWN0dWFsbHkgY29tcG9zZWQgb2YuIFdoYXQgYXJlIHRoZSBrZXkgZmllbGRzIHdpdGhpbiBgc2hmbF9kaXJpbmZvYD8gVW5kZXJzdGFuZGluZyB0aG9zZSBtZW1iZXJzIGlzIGNydWNpYWwgdG8gaW50ZXJwcmV0aW5nIHRoZSBuZXh0IHN0ZXBzLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcmVmZXJlbmNlIHRoZSBkb2N1bWVudGF0aW9uIG9yIGhlYWRlciBmaWxlIGZvciBgc2hmbF9kaXJpbmZvYC4uLiBUaGlzIGhlbHBzIG1lIHNlZSBpdHMgbWFrZXVwIHdpdGhpbiB0aGUgZ3JlYXRlciBjb250ZXh0LCBhcyBJIHByb2NlZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBzaGZsX2RpcmluZm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy92Ym94c2YvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Zib3hzZi9kaXIuYz05NT1zdGF0aWMgYm9vbCB2Ym94c2ZfZGlyX2VtaXQoc3RydWN0IGZpbGUgKmRpciwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXG4tLVxuZnMvdmJveHNmL2Rpci5jLTk4LVx0c3RydWN0IHZib3hzZl9kaXJfaW5mbyAqc2ZfZCA9IGRpci1cdTAwM2Vwcml2YXRlX2RhdGE7XG5mcy92Ym94c2YvZGlyLmM6OTk6XHRzdHJ1Y3Qgc2hmbF9kaXJpbmZvICppbmZvO1xuZnMvdmJveHNmL2Rpci5jLTEwMC1cdHN0cnVjdCB2Ym94c2ZfZGlyX2J1ZiAqYjtcbi0tXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oPTM5Nj1zdHJ1Y3Qgc2hmbF9jcmVhdGVwYXJtcyB7XG4tLVxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaC00MTMtLyoqIFNoYXJlZCBGb2xkZXIgZGlyZWN0b3J5IGluZm9ybWF0aW9uICovXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oOjQxNDpzdHJ1Y3Qgc2hmbF9kaXJpbmZvIHtcbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmgtNDE1LVx0LyoqIEZ1bGwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9iamVjdC4gKi9cbi0tXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oPTY2Mz1zdHJ1Y3Qgc2hmbF9saXN0IHtcbi0tXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oLTY5NS1cdCAqIHBvaW50ZXIsIG91dDpcbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmg6Njk2Olx0ICogQnVmZmVyIHRvIHBsYWNlIGxpc3RpbmcgaW5mb3JtYXRpb24gdG8uIChzdHJ1Y3Qgc2hmbF9kaXJpbmZvKVxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaC02OTctXHQgKi9cbi0tXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM9MjUwPWludCB2Ym94c2ZfZGlyaW5mbyh1MzIgcm9vdCwgdTY0IGhhbmRsZSxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy0yNTEtXHRcdCAgIHN0cnVjdCBzaGZsX3N0cmluZyAqcGFyc2VkX3BhdGgsIHUzMiBmbGFncywgdTMyIGluZGV4LFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jOjI1MjpcdFx0ICAgdTMyICpidWZfbGVuLCBzdHJ1Y3Qgc2hmbF9kaXJpbmZvICpidWYsIHUzMiAqZmlsZV9jb3VudClcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy0yNTMte1xuLS1cbmZzL3Zib3hzZi92ZnNtb2QuaD0xMjk9aW50IHZib3hzZl9kaXJpbmZvKHUzMiByb290LCB1NjQgaGFuZGxlLFxuZnMvdmJveHNmL3Zmc21vZC5oLTEzMC1cdFx0ICAgc3RydWN0IHNoZmxfc3RyaW5nICpwYXJzZWRfcGF0aCwgdTMyIGZsYWdzLCB1MzIgaW5kZXgsXG5mcy92Ym94c2YvdmZzbW9kLmg6MTMxOlx0XHQgICB1MzIgKmJ1Zl9sZW4sIHN0cnVjdCBzaGZsX2RpcmluZm8gKmJ1ZiwgdTMyICpmaWxlX2NvdW50KTtcbmZzL3Zib3hzZi92ZnNtb2QuaC0xMzItaW50IHZib3hzZl9mc2luZm8odTMyIHJvb3QsIHU2NCBoYW5kbGUsIHUzMiBmbGFncyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkzNzIKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgVmlydHVhbEJveCBTaGFyZWQgRm9sZGVycyBLZXJuZWwgTW9kdWxlKioKClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCB0aGUgc3RydWN0dXJlIGBzaGZsX2RpcmluZm9gLi4uIHRoYXQmIzM5O3MgZGVmaW5lZCBpbiBgZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaGAuIE9rYXksIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHRoZSBWaXJ0dWFsQm94IFNoYXJlZCBGb2xkZXJzIGtlcm5lbCBtb2R1bGUsIHNwZWNpZmljYWxseSB0aGUgaW50ZXJmYWNlIHdpdGggdGhlIGhvc3QuICYjMzQ7c2hmbCYjMzQ7IGxpa2VseSBzdGFuZHMgZm9yICYjMzQ7c2hhcmVkIGZvbGRlciwmIzM0OyBhbmQgYGRpcmluZm9gIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gZGlyZWN0b3J5IGxpc3RpbmdzIG9yIHBlcmhhcHMgYXR0cmlidXRlIHJldHJpZXZhbCBmb3Igc2hhcmVkIGRpcmVjdG9yaWVzLiBXZSYjMzk7cmUgcHJvYmFibHkgbG9va2luZyBhdCBob3cgdGhlIGd1ZXN0IE9TIGludGVyYWN0cyB3aXRoIHRoZSBob3N0IGZpbGVzeXN0ZW0gdGhyb3VnaCB0aGlzIG1vZHVsZS4gS25vd2luZyB0aGUgaGVhZGVyIGZpbGUgaXQmIzM5O3MgaW4gaXMga2V5OyBpdCYjMzk7bGwgZ2l2ZSB1cyB0aGUgZGVjbGFyYXRpb24gb2YgdGhlIHN0cnVjdHVyZSBpdHNlbGYsIGFuZCB3ZSBjYW4gYWxzbyBzZWUgYW55IHJlbGF0ZWQgZnVuY3Rpb25zIHRoYXQgYXJlIGRlY2xhcmVkIGluIHRoZSBzYW1lIGhlYWRlciBmaWxlLiBJZiBJIG5lZWQgdG8gZGVidWcgb3IgZGl2ZSBkZWVwZXIsIHRoaXMgaXMgdGhlIHBlcmZlY3Qgc3RhcnRpbmcgcG9pbnQuIFRoZSBuYW1lIGltcGxpZXMgZGlyZWN0b3J5IGRldGFpbHMgYXJlIHN0b3JlZCB3aXRoaW4gdGhpcyBzdHJ1Y3R1cmUsIHNvIGl0JiMzOTtzIHByb2JhYmx5IGhvdyBWQm94U0YgaGFuZGxlcyB0aGluZ3MgbGlrZSBkaXJlY3RvcnkgcGVybWlzc2lvbnMsIHRpbWVzdGFtcHMsIG9yIHBlcmhhcHMgZXZlbiBmaWxlIHNpemUgd2hlbiB0aGUgZ3Vlc3QgT1MgaW50ZXJhY3RzIHdpdGggdGhlIHNoYXJlZCBmb2xkZXJzLiBUaGUgaW5jbHVzaW9uIG9mIGBzaGZsX2hvc3RpbnRmLmhgIHNpZ25pZmllcyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBpbnRlcmZhY2UgYmV0d2VlbiB0aGUgVkJveFNGIGtlcm5lbCBtb2R1bGUgYW5kIHRoZSBob3N0IHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDEzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MTM6XHQvKiogU2hhcmVkIEZvbGRlciBkaXJlY3RvcnkgaW5mb3JtYXRpb24gKi9cbiA0MTQ6XHRzdHJ1Y3Qgc2hmbF9kaXJpbmZvIHtcbiA0MTU6XHRcdC8qKiBGdWxsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvYmplY3QuICovXG4gNDE2Olx0XHRzdHJ1Y3Qgc2hmbF9mc29iamluZm8gaW5mbztcbiA0MTc6XHRcdC8qKlxuIDQxODpcdFx0ICogVGhlIGxlbmd0aCBvZiB0aGUgc2hvcnQgZmllbGQgKG51bWJlciBvZiBVVEYxNiBjaGFycykuXG4gNDE5Olx0XHQgKiBJdCBpcyAxNi1iaXQgZm9yIHJlYXNvbnMgb2YgYWxpZ25tZW50LlxuIDQyMDpcdFx0ICovXG4gNDIxOlx0XHR1MTYgc2hvcnRfbmFtZV9sZW47XG4gNDIyOlx0XHQvKipcbiA0MjM6XHRcdCAqIFRoZSBzaG9ydCBuYW1lIGZvciA4LjMgY29tcGF0aWJpbGl0eS5cbiA0MjQ6XHRcdCAqIEVtcHR5IHN0cmluZyBpZiBub3QgYXZhaWxhYmxlLlxuIDQyNTpcdFx0ICovXG4gNDI2Olx0XHR1MTYgc2hvcnRfbmFtZVsxNF07XG4gNDI3Olx0XHRzdHJ1Y3Qgc2hmbF9zdHJpbmcgbmFtZTtcbiA0Mjg6XHR9O1xuIDQyOTpcdFxuIDQzMDpcdC8qKiBTaGFyZWQgZm9sZGVyIGZpbGVzeXN0ZW0gcHJvcGVydGllcy4gKi9cbiA0MzE6XHRzdHJ1Y3Qgc2hmbF9mc3Byb3BlcnRpZXMge1xuIDQzMjpcdFx0LyoqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5OTk4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0LCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIHRoZSBTdHJ1Y3R1cmUgRGVmaW5pdGlvbnMqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgY29kZSwgYW5kIEkgc2VlIHRoZSBmYW1pbGlhciBgc3RydWN0IHNoZmxfc3RyaW5nYCBkZWZpbmVkIGluIHRoaXMgYmxvY2suIFRoaXMgaXNuJiMzOTt0IHVuZXhwZWN0ZWQsIG9mIGNvdXJzZS4gSSYjMzk7ZCBuZWVkIHRvIGdvIGRlZXBlciB0byB1bmRlcnN0YW5kIGl0cyBwcmVjaXNlIHJvbGUgaW4gdGhlIGJyb2FkZXIgc3lzdGVtLCBhbmQgdGhlIGZ1bmN0aW9ucyB0aGF0IHVzZSBpdCwgYnV0IHNlZWluZyB0aGlzIGRlZmluaXRpb24gaXMgYSBkYXRhIHBvaW50LiBJdCB0ZWxscyBtZSB0aGF0IHdoYXRldmVyIGxpYnJhcnkgb3IgbW9kdWxlIEkmIzM5O20gZXhhbWluaW5nIGxpa2VseSByZWxpZXMgb24gc29tZSBjdXN0b20gc3RyaW5nIHJlcHJlc2VudGF0aW9uLCB3aGljaCBpcyB2ZXJ5IGNvbW1vbiBpbiBoaWdoLXBlcmZvcm1hbmNlIG9yIHJlc291cmNlLWNvbnN0cmFpbmVkIGVudmlyb25tZW50cy4gSSYjMzk7bGwgbWVudGFsbHkgdGFnIHRoaXMgYXMgc29tZXRoaW5nIHRvIGludmVzdGlnYXRlIGZvciBpdHMgbWVtb3J5IGxheW91dCwgcG90ZW50aWFsIG9wdGltaXphdGlvbiB0ZWNobmlxdWVzIChlLmcuLCBTbWFsbCBTdHJpbmcgT3B0aW1pemF0aW9uKSwgYW5kIGhvdyBpdCBoYW5kbGVzIHN0cmluZyBtYW5pcHVsYXRpb24uIEtub3dpbmcgdGhlIGRldGFpbHMgb2YgaXRzIHN0cnVjdHVyZSB3aWxsIHRlbGwgbWUgbXVjaCBtb3JlIGFib3V0IHRoZSByZXN0IG9mIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3Qgc2hmbF9zdHJpbmcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy92Ym94c2YvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Zib3hzZi9kaXIuYz0zNTU9c3RhdGljIGludCB2Ym94c2ZfZGlyX3VubGluayhzdHJ1Y3QgaW5vZGUgKnBhcmVudCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuLS1cbmZzL3Zib3hzZi9kaXIuYy0zNTktXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZF9pbm9kZShkZW50cnkpO1xuZnMvdmJveHNmL2Rpci5jOjM2MDpcdHN0cnVjdCBzaGZsX3N0cmluZyAqcGF0aDtcbmZzL3Zib3hzZi9kaXIuYy0zNjEtXHR1MzIgZmxhZ3M7XG4tLVxuZnMvdmJveHNmL2Rpci5jPTM4Nz1zdGF0aWMgaW50IHZib3hzZl9kaXJfcmVuYW1lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL3Zib3hzZi9kaXIuYy0zOTctXHR1MzIgc2hmbF9mbGFncyA9IFNIRkxfUkVOQU1FX0ZJTEUgfCBTSEZMX1JFTkFNRV9SRVBMQUNFX0lGX0VYSVNUUztcbmZzL3Zib3hzZi9kaXIuYzozOTg6XHRzdHJ1Y3Qgc2hmbF9zdHJpbmcgKm9sZF9wYXRoLCAqbmV3X3BhdGg7XG5mcy92Ym94c2YvZGlyLmMtMzk5LVx0aW50IGVycjtcbi0tXG5mcy92Ym94c2YvZGlyLmM9NDMwPXN0YXRpYyBpbnQgdmJveHNmX2Rpcl9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL3Zib3hzZi9kaXIuYy00MzYtXHRpbnQgc3ltbmFtZV9zaXplID0gc3RybGVuKHN5bW5hbWUpICYjNDM7IDE7XG5mcy92Ym94c2YvZGlyLmM6NDM3Olx0c3RydWN0IHNoZmxfc3RyaW5nICpwYXRoLCAqc3N5bW5hbWU7XG5mcy92Ym94c2YvZGlyLmMtNDM4LVx0c3RydWN0IHNoZmxfZnNvYmppbmZvIGluZm87XG4tLVxuZnMvdmJveHNmL2ZpbGUuYz0zNTk9c3RhdGljIGNvbnN0IGNoYXIgKnZib3hzZl9nZXRfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvdmJveHNmL2ZpbGUuYy0zNjItXHRzdHJ1Y3QgdmJveHNmX3NiaSAqc2JpID0gVkJPWFNGX1NCSShpbm9kZS1cdTAwM2VpX3NiKTtcbmZzL3Zib3hzZi9maWxlLmM6MzYzOlx0c3RydWN0IHNoZmxfc3RyaW5nICpwYXRoO1xuZnMvdmJveHNmL2ZpbGUuYy0zNjQtXHRjaGFyICpsaW5rO1xuLS1cbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmg9Mjc9ZW51bSB7XG4tLVxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaC02MS0vKiogU2hhcmVkIGZvbGRlciBzdHJpbmcgYnVmZmVyIHN0cnVjdHVyZS4gKi9cbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmg6NjI6c3RydWN0IHNoZmxfc3RyaW5nIHtcbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmgtNjMtXHQvKiogQWxsb2NhdGVkIHNpemUgb2YgdGhlIHN0cmluZyBtZW1iZXIgaW4gYnl0ZXMuICovXG4tLVxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaD03Nj1WTU1ERVZfQVNTRVJUX1NJWkUoc2hmbF9zdHJpbmcsIDYpO1xuLS1cbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmgtODEtLyogQ2FsY3VsYXRlIHNpemUgb2YgdGhlIHN0cmluZy4gKi9cbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmg6ODI6c3RhdGljIGlubGluZSB1MzIgc2hmbF9zdHJpbmdfYnVmX3NpemUoY29uc3Qgc3RydWN0IHNoZmxfc3RyaW5nICpzdHJpbmcpXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oLTgzLXtcbi0tXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oPTQxND1zdHJ1Y3Qgc2hmbF9kaXJpbmZvIHtcbi0tXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oLTQyNi1cdHUxNiBzaG9ydF9uYW1lWzE0XTtcbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmg6NDI3Olx0c3RydWN0IHNoZmxfc3RyaW5nIG5hbWU7XG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oLTQyOC19O1xuLS1cbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmg9NDg3PXN0cnVjdCBzaGZsX21hcF9mb2xkZXIge1xuLS1cbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmgtNDg5LVx0ICogcG9pbnRlciwgaW46XG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oOjQ5MDpcdCAqIFBvaW50cyB0byBzdHJ1Y3Qgc2hmbF9zdHJpbmcgYnVmZmVyLlxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaC00OTEtXHQgKi9cbi0tXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oPTUzMz1zdHJ1Y3Qgc2hmbF9jcmVhdGUge1xuLS1cbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmgtNTQxLVx0ICogcG9pbnRlciwgaW46XG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oOjU0MjpcdCAqIFBvaW50cyB0byBzdHJ1Y3Qgc2hmbF9zdHJpbmcgYnVmZmVyLlxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaC01NDMtXHQgKi9cbi0tXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oPTY2Mz1zdHJ1Y3Qgc2hmbF9saXN0IHtcbi0tXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oLTY4OS1cdCAqIHBvaW50ZXIsIGluL29wdGlvbmFsXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oOjY5MDpcdCAqIFBvaW50cyB0byBzdHJ1Y3Qgc2hmbF9zdHJpbmcgYnVmZmVyIHRoYXQgc3BlY2lmaWVzIGEgc2VhcmNoIHBhdGguXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oLTY5MS1cdCAqL1xuLS1cbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmg9NzIwPXN0cnVjdCBzaGZsX3JlYWRMaW5rIHtcbi0tXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oLTcyOC1cdCAqIHBvaW50ZXIsIGluOlxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaDo3Mjk6XHQgKiBQb2ludHMgdG8gc3RydWN0IHNoZmxfc3RyaW5nIGJ1ZmZlci5cbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmgtNzMwLVx0ICovXG4tLVxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaD04MTA9c3RydWN0IHNoZmxfcmVtb3ZlIHtcbi0tXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oLTgxOC1cdCAqIHBvaW50ZXIsIGluOlxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaDo4MTk6XHQgKiBQb2ludHMgdG8gc3RydWN0IHNoZmxfc3RyaW5nIGJ1ZmZlci5cbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmgtODIwLVx0ICovXG4tLVxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaD04NDE9c3RydWN0IHNoZmxfcmVuYW1lIHtcbi0tXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oLTg0OS1cdCAqIHBvaW50ZXIsIGluOlxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaDo4NTA6XHQgKiBQb2ludHMgdG8gc3RydWN0IHNoZmxfc3RyaW5nIHNyYy5cbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmgtODUxLVx0ICovXG4tLVxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaC04NTUtXHQgKiBwb2ludGVyLCBpbjpcbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmg6ODU2Olx0ICogUG9pbnRzIHRvIHN0cnVjdCBzaGZsX3N0cmluZyBkZXN0LlxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaC04NTctXHQgKi9cbi0tXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oPTg3Mj1zdHJ1Y3Qgc2hmbF9zeW1saW5rIHtcbi0tXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oLTg4MC1cdCAqIHBvaW50ZXIsIGluOlxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaDo4ODE6XHQgKiBQb2ludHMgdG8gc3RydWN0IHNoZmxfc3RyaW5nIG9mIHBhdGggZm9yIHRoZSBuZXcgc3ltbGluay5cbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmgtODgyLVx0ICovXG4tLVxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaC04ODYtXHQgKiBwb2ludGVyLCBpbjpcbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmg6ODg3Olx0ICogUG9pbnRzIHRvIHN0cnVjdCBzaGZsX3N0cmluZyBvZiBkZXN0aW5hdGlvbiBmb3Igc3ltbGluay5cbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmgtODg4LVx0ICovXG4tLVxuZnMvdmJveHNmL3N1cGVyLmM9MTExPXN0YXRpYyBpbnQgdmJveHNmX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmZzL3Zib3hzZi9zdXBlci5jLTExMy1cdHN0cnVjdCB2Ym94c2ZfZnNfY29udGV4dCAqY3R4ID0gZmMtXHUwMDNlZnNfcHJpdmF0ZTtcbmZzL3Zib3hzZi9zdXBlci5jOjExNDpcdHN0cnVjdCBzaGZsX3N0cmluZyAqZm9sZGVyX25hbWUsIHJvb3RfcGF0aDtcbmZzL3Zib3hzZi9zdXBlci5jLTExNS1cdHN0cnVjdCB2Ym94c2Zfc2JpICpzYmk7XG4tLVxuZnMvdmJveHNmL3V0aWxzLmM9MTM4PWludCB2Ym94c2ZfY3JlYXRlX2F0X2RlbnRyeShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvdmJveHNmL3V0aWxzLmMtMTQxLVx0c3RydWN0IHZib3hzZl9zYmkgKnNiaSA9IFZCT1hTRl9TQkkoZGVudHJ5LVx1MDAzZWRfc2IpO1xuZnMvdmJveHNmL3V0aWxzLmM6MTQyOlx0c3RydWN0IHNoZmxfc3RyaW5nICpwYXRoO1xuZnMvdmJveHNmL3V0aWxzLmMtMTQzLVx0aW50IGVycjtcbi0tXG5mcy92Ym94c2YvdXRpbHMuYy0xNTQtXG5mcy92Ym94c2YvdXRpbHMuYzoxNTU6aW50IHZib3hzZl9zdGF0KHN0cnVjdCB2Ym94c2Zfc2JpICpzYmksIHN0cnVjdCBzaGZsX3N0cmluZyAqcGF0aCxcbmZzL3Zib3hzZi91dGlscy5jLTE1Ni1cdFx0c3RydWN0IHNoZmxfZnNvYmppbmZvICppbmZvKVxuLS1cbmZzL3Zib3hzZi91dGlscy5jPTE3Nz1pbnQgdmJveHNmX3N0YXRfZGVudHJ5KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IHNoZmxfZnNvYmppbmZvICppbmZvKVxuLS1cbmZzL3Zib3hzZi91dGlscy5jLTE3OS1cdHN0cnVjdCB2Ym94c2Zfc2JpICpzYmkgPSBWQk9YU0ZfU0JJKGRlbnRyeS1cdTAwM2VkX3NiKTtcbmZzL3Zib3hzZi91dGlscy5jOjE4MDpcdHN0cnVjdCBzaGZsX3N0cmluZyAqcGF0aDtcbmZzL3Zib3hzZi91dGlscy5jLTE4MS1cdGludCBlcnI7XG4tLVxuZnMvdmJveHNmL3V0aWxzLmM9MjYwPWludCB2Ym94c2Zfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL3Zib3hzZi91dGlscy5jLTM2NS0gKi9cbmZzL3Zib3hzZi91dGlscy5jOjM2NjpzdHJ1Y3Qgc2hmbF9zdHJpbmcgKnZib3hzZl9wYXRoX2Zyb21fZGVudHJ5KHN0cnVjdCB2Ym94c2Zfc2JpICpzYmksXG5mcy92Ym94c2YvdXRpbHMuYy0zNjctXHRcdFx0XHRcdCAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG5mcy92Ym94c2YvdXRpbHMuYy0zNjgte1xuZnMvdmJveHNmL3V0aWxzLmM6MzY5Olx0c3RydWN0IHNoZmxfc3RyaW5nICpzaGZsX3BhdGg7XG5mcy92Ym94c2YvdXRpbHMuYy0zNzAtXHRpbnQgcGF0aF9sZW4sIG91dF9sZW4sIG5iO1xuLS1cbmZzL3Zib3hzZi91dGlscy5jLTQyNy1cdFx0ICovXG5mcy92Ym94c2YvdXRpbHMuYzo0Mjg6XHRcdHNoZmxfcGF0aCA9IChzdHJ1Y3Qgc2hmbF9zdHJpbmcgKilidWY7XG5mcy92Ym94c2YvdXRpbHMuYy00MjktXHRcdG1lbW1vdmUoc2hmbF9wYXRoLVx1MDAzZXN0cmluZy51dGY4LCBwYXRoLCBwYXRoX2xlbik7XG4tLVxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jPTUzPXN0YXRpYyBpbnQgdmJveHNmX2NhbGwodTMyIGZ1bmN0aW9uLCB2b2lkICpwYXJtcywgdTMyIHBhcm1fY291bnQsIGludCAqc3RhdHVzKVxuLS1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy03NC1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYzo3NTppbnQgdmJveHNmX21hcF9mb2xkZXIoc3RydWN0IHNoZmxfc3RyaW5nICpmb2xkZXJfbmFtZSwgdTMyICpyb290KVxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTc2LXtcbi0tXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM9MTAyPWludCB2Ym94c2ZfdW5tYXBfZm9sZGVyKHUzMiByb290KVxuLS1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy0xMjktICovXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM6MTMwOmludCB2Ym94c2ZfY3JlYXRlKHUzMiByb290LCBzdHJ1Y3Qgc2hmbF9zdHJpbmcgKnBhcnNlZF9wYXRoLFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTEzMS1cdFx0ICBzdHJ1Y3Qgc2hmbF9jcmVhdGVwYXJtcyAqY3JlYXRlX3Bhcm1zKVxuLS1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYz0xNDk9aW50IHZib3hzZl9jbG9zZSh1MzIgcm9vdCwgdTY0IGhhbmRsZSlcbi0tXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMTYxLVxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jOjE2MjppbnQgdmJveHNmX3JlbW92ZSh1MzIgcm9vdCwgc3RydWN0IHNoZmxfc3RyaW5nICpwYXJzZWRfcGF0aCwgdTMyIGZsYWdzKVxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTE2My17XG4tLVxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTE3OC1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYzoxNzk6aW50IHZib3hzZl9yZW5hbWUodTMyIHJvb3QsIHN0cnVjdCBzaGZsX3N0cmluZyAqc3JjX3BhdGgsXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM6MTgwOlx0XHQgIHN0cnVjdCBzaGZsX3N0cmluZyAqZGVzdF9wYXRoLCB1MzIgZmxhZ3MpXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMTgxLXtcbi0tXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM9MjUwPWludCB2Ym94c2ZfZGlyaW5mbyh1MzIgcm9vdCwgdTY0IGhhbmRsZSxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYzoyNTE6XHRcdCAgIHN0cnVjdCBzaGZsX3N0cmluZyAqcGFyc2VkX3BhdGgsIHUzMiBmbGFncywgdTMyIGluZGV4LFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTI1Mi1cdFx0ICAgdTMyICpidWZfbGVuLCBzdHJ1Y3Qgc2hmbF9kaXJpbmZvICpidWYsIHUzMiAqZmlsZV9jb3VudClcbi0tXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM9Mjk0PWludCB2Ym94c2ZfZnNpbmZvKHUzMiByb290LCB1NjQgaGFuZGxlLCB1MzIgZmxhZ3MsXG4tLVxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTMxOS1cbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYzozMjA6aW50IHZib3hzZl9yZWFkbGluayh1MzIgcm9vdCwgc3RydWN0IHNoZmxfc3RyaW5nICpwYXJzZWRfcGF0aCxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy0zMjEtXHRcdCAgICB1MzIgYnVmX2xlbiwgdTggKmJ1Zilcbi0tXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMzM5LVxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jOjM0MDppbnQgdmJveHNmX3N5bWxpbmsodTMyIHJvb3QsIHN0cnVjdCBzaGZsX3N0cmluZyAqbmV3X3BhdGgsXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM6MzQxOlx0XHQgICBzdHJ1Y3Qgc2hmbF9zdHJpbmcgKm9sZF9wYXRoLCBzdHJ1Y3Qgc2hmbF9mc29iamluZm8gKmJ1ZilcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy0zNDIte1xuLS1cbmZzL3Zib3hzZi92ZnNtb2QuaD05ND1pbnQgdmJveHNmX2NyZWF0ZV9hdF9kZW50cnkoc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuZnMvdmJveHNmL3Zmc21vZC5oLTk1LVx0XHRcdCAgICBzdHJ1Y3Qgc2hmbF9jcmVhdGVwYXJtcyAqcGFyYW1zKTtcbmZzL3Zib3hzZi92ZnNtb2QuaDo5NjppbnQgdmJveHNmX3N0YXQoc3RydWN0IHZib3hzZl9zYmkgKnNiaSwgc3RydWN0IHNoZmxfc3RyaW5nICpwYXRoLFxuZnMvdmJveHNmL3Zmc21vZC5oLTk3LVx0XHRzdHJ1Y3Qgc2hmbF9mc29iamluZm8gKmluZm8pO1xuLS1cbmZzL3Zib3hzZi92ZnNtb2QuaD0xMDM9aW50IHZib3hzZl9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG5mcy92Ym94c2YvdmZzbW9kLmgtMTA0LVx0XHQgICBzdHJ1Y3QgaWF0dHIgKmlhdHRyKTtcbmZzL3Zib3hzZi92ZnNtb2QuaDoxMDU6c3RydWN0IHNoZmxfc3RyaW5nICp2Ym94c2ZfcGF0aF9mcm9tX2RlbnRyeShzdHJ1Y3QgdmJveHNmX3NiaSAqc2JpLFxuZnMvdmJveHNmL3Zmc21vZC5oLTEwNi1cdFx0XHRcdFx0ICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XG4tLVxuZnMvdmJveHNmL3Zmc21vZC5oPTExNj12b2lkIHZib3hzZl9kaXNjb25uZWN0KHZvaWQpO1xuZnMvdmJveHNmL3Zmc21vZC5oLTExNy1cbmZzL3Zib3hzZi92ZnNtb2QuaDoxMTg6aW50IHZib3hzZl9jcmVhdGUodTMyIHJvb3QsIHN0cnVjdCBzaGZsX3N0cmluZyAqcGFyc2VkX3BhdGgsXG5mcy92Ym94c2YvdmZzbW9kLmgtMTE5LVx0XHQgIHN0cnVjdCBzaGZsX2NyZWF0ZXBhcm1zICpjcmVhdGVfcGFybXMpO1xuLS1cbmZzL3Zib3hzZi92ZnNtb2QuaD0xMjE9aW50IHZib3hzZl9jbG9zZSh1MzIgcm9vdCwgdTY0IGhhbmRsZSk7XG5mcy92Ym94c2YvdmZzbW9kLmg6MTIyOmludCB2Ym94c2ZfcmVtb3ZlKHUzMiByb290LCBzdHJ1Y3Qgc2hmbF9zdHJpbmcgKnBhcnNlZF9wYXRoLCB1MzIgZmxhZ3MpO1xuZnMvdmJveHNmL3Zmc21vZC5oOjEyMzppbnQgdmJveHNmX3JlbmFtZSh1MzIgcm9vdCwgc3RydWN0IHNoZmxfc3RyaW5nICpzcmNfcGF0aCxcbmZzL3Zib3hzZi92ZnNtb2QuaDoxMjQ6XHRcdCAgc3RydWN0IHNoZmxfc3RyaW5nICpkZXN0X3BhdGgsIHUzMiBmbGFncyk7XG5mcy92Ym94c2YvdmZzbW9kLmgtMTI1LVxuLS1cbmZzL3Zib3hzZi92ZnNtb2QuaD0xMjk9aW50IHZib3hzZl9kaXJpbmZvKHUzMiByb290LCB1NjQgaGFuZGxlLFxuZnMvdmJveHNmL3Zmc21vZC5oOjEzMDpcdFx0ICAgc3RydWN0IHNoZmxfc3RyaW5nICpwYXJzZWRfcGF0aCwgdTMyIGZsYWdzLCB1MzIgaW5kZXgsXG5mcy92Ym94c2YvdmZzbW9kLmgtMTMxLVx0XHQgICB1MzIgKmJ1Zl9sZW4sIHN0cnVjdCBzaGZsX2RpcmluZm8gKmJ1ZiwgdTMyICpmaWxlX2NvdW50KTtcbmZzL3Zib3hzZi92ZnNtb2QuaD0xMzI9aW50IHZib3hzZl9mc2luZm8odTMyIHJvb3QsIHU2NCBoYW5kbGUsIHUzMiBmbGFncyxcbi0tXG5mcy92Ym94c2YvdmZzbW9kLmgtMTM0LVxuZnMvdmJveHNmL3Zmc21vZC5oOjEzNTppbnQgdmJveHNmX21hcF9mb2xkZXIoc3RydWN0IHNoZmxfc3RyaW5nICpmb2xkZXJfbmFtZSwgdTMyICpyb290KTtcbmZzL3Zib3hzZi92ZnNtb2QuaC0xMzYtaW50IHZib3hzZl91bm1hcF9mb2xkZXIodTMyIHJvb3QpO1xuZnMvdmJveHNmL3Zmc21vZC5oLTEzNy1cbmZzL3Zib3hzZi92ZnNtb2QuaDoxMzg6aW50IHZib3hzZl9yZWFkbGluayh1MzIgcm9vdCwgc3RydWN0IHNoZmxfc3RyaW5nICpwYXJzZWRfcGF0aCxcbmZzL3Zib3hzZi92ZnNtb2QuaC0xMzktXHRcdCAgICB1MzIgYnVmX2xlbiwgdTggKmJ1Zik7XG5mcy92Ym94c2YvdmZzbW9kLmg6MTQwOmludCB2Ym94c2Zfc3ltbGluayh1MzIgcm9vdCwgc3RydWN0IHNoZmxfc3RyaW5nICpuZXdfcGF0aCxcbmZzL3Zib3hzZi92ZnNtb2QuaDoxNDE6XHRcdCAgIHN0cnVjdCBzaGZsX3N0cmluZyAqb2xkX3BhdGgsIHN0cnVjdCBzaGZsX2Zzb2JqaW5mbyAqYnVmKTtcbmZzL3Zib3hzZi92ZnNtb2QuaC0xNDItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NjYwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFN5emthbGxlci1UcmlnZ2VyZWQgVmJveHNmIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHN0cnVjdCBzaGZsX3N0cmluZ2AgYW5kIGl0cyBgbGVuZ3RoYCBhbmQgYHNpemVgIG1lbWJlcnMuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgc2FuaXR5IGNoZWNrIGluIGB2Ym94c2ZfZGlyX2VtaXRgOiBgaWYgKGluZm8tJmd0O25hbWUubGVuZ3RoICZndDsgaW5mby0mZ3Q7bmFtZS5zaXplKSByZXR1cm4gZmFsc2U7YC4gU3l6a2FsbGVyIGZvdW5kIHRoaXMsIHdoaWNoIG1lYW5zIGl0IHRyaWdnZXJlZCBhIHN0YXRlIHdoZXJlIHRoZSBzdHJpbmcmIzM5O3MgcmVwb3J0ZWQgbGVuZ3RoIGV4Y2VlZHMgaXRzIGFsbG9jYXRlZCBzaXplLiBUaGlzIGlzIGludGVyZXN0aW5nLgoKVGhlIHByb21wdCB0aGVuIHBvc2VzIGEgcXVlc3Rpb24gYWJvdXQgY29kZSBwYXRocyBkZWVtZWQgJiMzNDtpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLiYjMzQ7IFRoZSBrZXkgaXMgd2hldGhlciB0aGlzIHZ1bG5lcmFiaWxpdHkgZmFsbHMgaW50byB0aGF0IGNhdGVnb3J5LiBTaW5jZSBzeXprYWxsZXIgZm91bmQgaXQsIHRoZSBpbXBsaWNhdGlvbiBpcyB0aGF0IGl0JiMzOTtzICpyZWFjaGFibGUqLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBteSBjb25jZXJuLgoKSWYgc3l6a2FsbGVyIGlzIHJ1bm5pbmcgb24gVmlydHVhbEJveCwgYXMgaXRzIGB2bV90eXBlOiAmIzM0O3Zib3gmIzM0O2Agc3VnZ2VzdHMsIHRoZW4gdGhhdCBzZWVtcyBwb3NzaWJsZS4gVGhpcyBpcyB3aGVyZSBJIGhhdmUgdG8gc3RvcCBhbmQgYmUgcHJlY2lzZSB3aXRoIG15IHJlYWRpbmcuIElzIFZpcnR1YWxCb3ggY29uc2lkZXJlZCBhICYjMzQ7dmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVSYjMzQ7PyAqWWVzKiwgaXQgaXMuIEhvd2V2ZXIsIHRoZSB3b3JkaW5nIGNvdWxkIGJlIGludGVycHJldGVkIGFzICYjMzQ7aW1wb3NzaWJsZSB0byByZWFjaCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4mIzM0OwoKVGhlIG9yaWdpbmFsIHByb2JsZW0gY2VudGVycyBhcm91bmQgdGhlIFZpcnR1YWxCb3ggUENJIGRldmljZSwgYW5kIHRoZSBjb2RlIGNsZWFybHkgcmVsaWVzIG9uIGl0LiBJIHJlLXJlYWQgdGhlIHByb21wdDogJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zLi4uIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4uLiYjMzQ7IElmIGl0JiMzOTtzICpvbmx5KiByZWFjaGFibGUgaW4gVmlydHVhbEJveCBiZWNhdXNlIG9mIHRoaXMgUENJIGRlcGVuZGVuY3ksIHNob3VsZCBJIHJldHVybiBgZmFsc2VgPyBJdCBzZWVtcyBsaWtlIEkgc2hvdWxkLgoKSSBxdWlja2x5IGNoZWNrIHRoZSBvYnZpb3VzLiBUaGVyZSBpc24mIzM5O3QgYW55IGVtdWxhdGlvbiBvZiB0aGUgVmlydHVhbEJveCBQQ0kgZGV2aWNlIGluIFFFTVUgb3IgR0NFLiBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCB0aGUgYHZib3hzZl9maWxsX3N1cGVyYCBwYXRoIGNhbGxzIGB2Ym94c2ZfY29ubmVjdCgpYCwgd2hpY2ggdGhlbiBjYWxscyBgdmJnX2dldF9nZGV2KClgLCBhbmQgdGhhdCB0aGlzIHJldHVybnMgYC1FTk9ERVZgIGlmIHRoZSBQQ0kgZGV2aWNlIGlzbiYjMzk7dCBhdmFpbGFibGUuIFRoZXJlZm9yZSwgd2l0aG91dCB0aGUgVmlydHVhbEJveCBQQ0kgZGV2aWNlLCBpdCBzaG91bGQgYmUgaW1wb3NzaWJsZSB0byBtb3VudCB0aGUgZmlsZXN5c3RlbSBhbmQgdGh1cyBpbXBvc3NpYmxlIHRvIHJlYWNoIHRoYXQgcGFydGljdWxhciBjb2RlIHBhdGguCgpCdXQgd2FpdCwgc3l6a2FsbGVyICpmb3VuZCogaXQhIFNvIGhvdz8gVGhlbiBpdCBoaXQgbWU6IHN5emthbGxlciBoYXMgYSAmIzM0O3Zib3gmIzM0OyBWTSB0eXBlISBUaGUgaW1wbGljYXRpb24gaXMgdGhhdCBpdCYjMzk7cyBydW5uaW5nIGluc2lkZSBWaXJ0dWFsQm94LiBUaGF0IG1lYW5zIGl0ICpjYW4qIHJlYWNoIHRoaXMgY29kZSBwYXRoLCB3aGljaCBpcyBkaXJlY3RseSBjb250cmFkaWN0aW5nIHRoZSB3b3JkaW5nIG9mIHRoZSBwcm9tcHQsIGFzIFZpcnR1YWxCb3ggaXMgYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4KCk5vdyBJIGFtIGF0IGEgZm9yayBpbiB0aGUgcm9hZC4gRG9lcyB0aGUgcHJvbXB0JiMzOTtzIHBocmFzZSAmIzM0O2ltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUmIzM0OyBtZWFuICYjMzQ7aW1wb3NzaWJsZSB0byByZWFjaCBpbiAqYW55KiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwmIzM0OyBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWZpYyB0byAqc3RhbmRhcmQqIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBhcyBpdCBzZWVtcyB0byBiZSBpbXBseWluZz8gVG8gcmVzb2x2ZSB0aGlzLCBJIGhhdmUgdG8gYXNzdW1lIHRoZSBpbnRlbnQgaXMgZm9yIGhhcmR3YXJlLXNwZWNpZmljIGNvZGUgdGhhdCBjYW5ub3QgYmUgdGVzdGVkIGluIGEgVk0uIFRoYXQsIGhvd2V2ZXIsIGlzIG5vdCB0aGUgY2FzZSBoZXJlLCBhcyBgdmJveHNmYCBpcyAqc3BlY2lmaWNhbGx5KiBkZXNpZ25lZCB0byBiZSB0ZXN0ZWQgaW4gVk1zIChWaXJ0dWFsQm94KS4gVGhlIHByb21wdCAqbWVudGlvbnMqICYjMzQ7dmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsJiMzNDsgYnV0IFZpcnR1YWxCb3ggKmlzKiBvbmUgb2YgdGhvc2UgZW52aXJvbm1lbnRzLgoKSW4gdGhpcyBzY2VuYXJpbywgcmV0dXJuaW5nIGBmYWxzZWAgd291bGQgbWVhbiBpZ25vcmluZyBhIHBvdGVudGlhbGx5IHZhbGlkIGZpbGVzeXN0ZW0gYnVnIHRoYXQgc3l6a2FsbGVyIGNhbiBpbmRlZWQgZnV6eiB3aGVuIHJ1bm5pbmcgaW4gVmlydHVhbEJveC4gSXMgYHZib3hzZmAgd29ydGggZnV6emluZz8gWWVzLCBpdCYjMzk7cyBhIGZpbGVzeXN0ZW0sIHNvIGJ5IGRlZmF1bHQsIEkgc2hvdWxkIGNvbnNpZGVyIGl0IHdvcnRoIGZ1enppbmcuIFRoZSBjb25jbHVzaW9uLCB0aGVuLCBpcyB0aGF0ICppdCBpcyB3b3J0aCBmdXp6aW5nKiwgYW5kIHNvIEkmIzM5O2xsIG5lZWQgdG8gcmV0dXJuIGB0cnVlYC4KClNpbmNlIEkmIzM5O20gcmV0dXJuaW5nIGB0cnVlYCwgSSBuZWVkIHRvIHNwZWNpZnkgYEZvY3VzU3ltYm9sc2AgYW5kIGBFbmFibGVDb25maWdzYC4gYEZvY3VzU3ltYm9sc2Agd291bGQgaW5jbHVkZTogYHZib3hzZl9kaXJfZW1pdGAsIGB2Ym94c2ZfZGlyX3JlYWRfYWxsYCwgYW5kIHNvIG9uLiBgRW5hYmxlQ29uZmlnc2Agd291bGQgY29uc2lzdCBvZiBgVkJPWFNGX0ZTYCBhbmQgYFZCT1hHVUVTVGAuIEkgc2hvdWxkIGFsc28gY2hlY2sgdGhlIEtjb25maWcgZm9yIGB2Ym94c2ZgIHRvIGNvbmZpcm0gYWxsIG9mIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWQk9YU0ZfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy92Ym94c2YvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Zib3hzZi9LY29uZmlnOjE6Y29uZmlnIFZCT1hTRl9GU1xuZnMvdmJveHNmL0tjb25maWctMi1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWxCb3ggZ3Vlc3Qgc2hhcmVkIGZvbGRlciAodmJveHNmKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2Njc4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgVmlydHVhbEJveCBTaGFyZWQgRm9sZGVyIEtjb25maWcqKgoKQWxyaWdodCwgSSBzZWUgYSBicmVhZGNydW1iIC0gYGZzL3Zib3hzZi9LY29uZmlnYC4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIFZpcnR1YWxCb3ggc2hhcmVkIGZvbGRlcnMgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBhcmUgd2UgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaGVyZT8gQXJlIHdlIHRyYWNraW5nIGRvd24gYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHByb2JsZW0/IE9yIHBlcmhhcHMgbG9va2luZyB0byBvcHRpbWl6ZSB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgYSBzeXN0ZW0gdGhhdCBsZXZlcmFnZXMgVmlydHVhbEJveD8KCkkgZXhwZWN0IHRvIGZpbmQgYWxsIHRoZSB1c3VhbCBLY29uZmlnIGVsZW1lbnRzOiBgY29uZmlnYCBibG9ja3MgZGVmaW5pbmcgYm9vbGVhbiwgdHJpc3RhdGUsIG9yIHN0cmluZyBvcHRpb25zLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgaGVscCB0ZXh0LiBLZXkgYXJlYXMgb2YgaW50ZXJlc3Qgd2lsbCBiZToKCiogICAqKkRlcGVuZGVuY2llczoqKiBXaGF0IG90aGVyIGtlcm5lbCBmZWF0dXJlcyBvciBtb2R1bGVzIG5lZWQgdG8gYmUgZW5hYmxlZCBiZWZvcmUgYHZib3hzZmAgY2FuIGJlIGNvbmZpZ3VyZWQ/IFRoaXMgZ2l2ZXMgaW5zaWdodHMgaW50byB0aGUgb3ZlcmFsbCBzeXN0ZW0gcmVxdWlyZW1lbnRzLgoqICAgKipEZWZhdWx0IFZhbHVlczoqKiBBcmUgdGhlIGRlZmF1bHRzIHNlbnNpYmxlIGZvciBjb21tb24gdXNlIGNhc2VzPyBPciBtaWdodCB0aGVyZSBiZSBhIG5lZWQgdG8gb3ZlcnJpZGUgdGhlbSBmb3IgcGFydGljdWxhciBlbnZpcm9ubWVudHM/CiogICAqKkhlbHAgVGV4dDoqKiBJcyBpdCBjbGVhciB3aGF0IGVhY2ggb3B0aW9uIGRvZXM/IElzIHRoZSBkb2N1bWVudGF0aW9uIGNvbXByZWhlbnNpdmUgYW5kIGFjY3VyYXRlLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSByZWxhdGlvbnNoaXAgd2l0aCB0aGUgdW5kZXJseWluZyBWaXJ0dWFsQm94IGhvc3Q/CgpCYXNlZCBvbiB0aGUgc3RydWN0dXJlIGFuZCBjb250ZW50IG9mIHRoaXMgS2NvbmZpZywgSSBjYW4gZGV0ZXJtaW5lIHdoZXJlIGB2Ym94c2ZgIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSYjMzk7bGwgbG9vayBmb3IgaG93IHRoZSBtb2R1bGUgaW50ZXJhY3RzIHdpdGggZmlsZXN5c3RlbSB0eXBlcywgbmV0d29yayBpbnRlcmZhY2VzLCBhbmQgYW55IHNlY3VyaXR5IGNvbnRleHRzLiBJIHdpbGwgYWxzbyBtYWtlIG5vdGVzIGFib3V0IGhvdyB0byBtb2RpZnkgdGhlIGNvbmZpZ3VyYXRpb24gb3IgdHJvdWJsZXNob290IGl0cyBpbXBsZW1lbnRhdGlvbiBmb3IgYmV0dGVyIHVuZGVyc3RhbmRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvdmJveHNmL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHRjb25maWcgVkJPWFNGX0ZTXG4gICAyOlx0XHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsQm94IGd1ZXN0IHNoYXJlZCBmb2xkZXIgKHZib3hzZikgc3VwcG9ydFwmIzM0O1xuICAgMzpcdFx0ZGVwZW5kcyBvbiAoQVJNNjQgfHwgWDg2KSBcdTAwMjZcdTAwMjYgVkJPWEdVRVNUXG4gICA0Olx0XHRzZWxlY3QgTkxTXG4gICA1Olx0XHRoZWxwXG4gICA2Olx0XHQgIFZpcnR1YWxCb3ggaG9zdHMgY2FuIHNoYXJlIGZvbGRlcnMgd2l0aCBndWVzdHMsIHRoaXMgZHJpdmVyXG4gICA3Olx0XHQgIGltcGxlbWVudHMgdGhlIExpbnV4LWd1ZXN0IHNpZGUgb2YgdGhpcyBhbGxvd2luZyBmb2xkZXJzIGV4cG9ydGVkXG4gICA4Olx0XHQgIGJ5IHRoZSBob3N0IHRvIGJlIG1vdW50ZWQgdW5kZXIgTGludXguXG4gICA5Olx0XG4gIDEwOlx0XHQgIElmIHlvdSB3YW50IHRvIHVzZSBzaGFyZWQgZm9sZGVycyBpbiBWaXJ0dWFsQm94IGd1ZXN0cywgYW5zd2VyIFkgb3IgTS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcyMDkKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgYSBWaXJ0dWFsQm94LVNwZWNpZmljIEJ1ZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBWQk9YR1VFU1RgLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRoYXQgYEVuYWJsZUNvbmZpZ3NgIHNob3VsZCBpbmNsdWRlIGJvdGggYFZCT1hTRl9GU2AgYW5kIGBWQk9YR1VFU1RgIGJlY2F1c2UgaXQmIzM5O3MgcHJvYmFibHkgZGVwZW5kZW50IG9uIHRoYXQuIEJ1dCB0aGVuIEkgcmUtcmVhZCB0aGUgcHJvbXB0LiBJdCYjMzk7cyBzcGVjaWZpY2FsbHkgdGFsa2luZyBhYm91dCBjb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gZW52aXJvbm1lbnRzICpsaWtlKiBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIGVtdWxhdGVkIGhhcmR3YXJlLiBUaGUgcGhyYXNpbmcgaXMga2V5IOKAkyBtZW50aW9uaW5nICYjMzQ7bGlrZSBHQ0Ugb3IgUUVNVSYjMzQ7IG1ha2VzIG1lIHRoaW5rIHRoYXQgKmlmKiB0aGlzIGJ1ZyByZXF1aXJlcyBhIGh5cGVydmlzb3IgdGhhdCYjMzk7cyAqbm90KiBHQ0Ugb3IgUUVNVSwgdGhlbiBpdCYjMzk7cyBlZmZlY3RpdmVseSB1bnJlYWNoYWJsZSBpbiB0aGUgY29udGV4dCBvZiB0aGUgcHJvbXB0JiMzOTtzIGZvY3VzLgoKTXkgbWluZCB0aGVuIGdvZXMgdG8gU3l6a2FsbGVyIOKAkyBvdXIgcHJpbWFyeSBmdXp6aW5nIHRvb2wuIFN5emthbGxlciBydW5zIHByaW1hcmlseSBvbiBHQ0UgYW5kIFFFTVUuIElmIHRoaXMgYnVnIGxpdmVzIGluIGB2Ym94c2ZgLCB0aGF0IHNjcmVhbXMgVmlydHVhbEJveC1zcGVjaWZpYy4gQnV0IHdhaXQuLi4gRG9lcyBTeXprYWxsZXIgZXZlbiAqdXNlKiBWaXJ0dWFsQm94IGluc3RhbmNlcz8gSSByZW1lbWJlciB0aGVyZSAqaXMqIGEgYHZib3hgIFZNIHR5cGUgaW4gU3l6a2FsbGVyLCBidXQgaXQmIzM5O3MgZmFyIGxlc3MgY29tbW9uIHRoYW4gYHFlbXVgIG9yIGBnY2VgLgoKT2theSwgYnV0IGhhbmcgb24gYSBtaW51dGUuLi4gVGhlIGNvbW1pdCBtZXNzYWdlISBJdCBzYXlzICYjMzQ7c3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3JiMzNDsuIFRoYXQgbWVhbnMgU3l6a2FsbGVyICpkaWQqIGZpbmQgdGhpcyBidWcsIHdoaWNoIGltcGxpZXMgaXQmIzM5O3MgcmVhY2hhYmxlIHNvbWVob3cgd2l0aGluIFN5emthbGxlciYjMzk7cyBzZXR1cCEgVGhpcyBtZWFucyBJJiMzOTttIG1pc3Npbmcgc29tZXRoaW5nLiBNYXliZSBTeXprYWxsZXIgaGFzIGEgd2F5IHRvIGZ1enogYHZib3hzZmAgd2l0aG91dCBuZWVkaW5nIGFuIGFjdHVhbCBWaXJ0dWFsQm94IGluc3RhbmNlLiBTb21lIGtpbmQgb2YgZW11bGF0aW9uPyBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgaXMgc29tZSBgdmJveGd1ZXN0YCBlbXVsYXRpb24gaW4gdGhlIGtlcm5lbC4KCkxldCBtZSBzZWUuLi5JIHNlYXJjaGVkIGZvciB0aGUgdGVybSAmIzM0O2Zha2UmIzM0OyB0byB0cnkgYW5kIGZpbmQgYW55LCBidXQgbm90aGluZy4gV2hhdCBhYm91dCAmIzM0O2R1bW15PyYjMzQ7CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2R1bW15JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aXJ0L3Zib3hndWVzdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jPTQ2PXN0YXRpYyB2b2lkIHZiZ19ndWVzdF9tYXBwaW5nc19pbml0KHN0cnVjdCB2YmdfZGV2ICpnZGV2KVxuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy04MC1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYzo4MTpcdGdkZXYtXHUwMDNlZ3Vlc3RfbWFwcGluZ3NfZHVtbXlfcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0hJR0hVU0VSKTtcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYzo4MjpcdGlmICghZ2Rldi1cdTAwM2VndWVzdF9tYXBwaW5nc19kdW1teV9wYWdlKVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jLTgzLVx0XHRnb3RvIG91dDtcbi0tXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmMtODUtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAoc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7IGkmIzQzOyYjNDM7KVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jOjg2Olx0XHRwYWdlc1tpXSA9IGdkZXYtXHUwMDNlZ3Vlc3RfbWFwcGluZ3NfZHVtbXlfcGFnZTtcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy04Ny1cbi0tXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmMtMTE0LVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jOjExNTpcdC8qIE9uIGZhaWx1cmUgZnJlZSB0aGUgZHVtbXktcGFnZSBiYWNraW5nIHRoZSB2bWFwICovXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmMtMTE2LVx0aWYgKCFnZGV2LVx1MDAzZWd1ZXN0X21hcHBpbmdzKSB7XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmM6MTE3Olx0XHRfX2ZyZWVfcGFnZShnZGV2LVx1MDAzZWd1ZXN0X21hcHBpbmdzX2R1bW15X3BhZ2UpO1xuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jOjExODpcdFx0Z2Rldi1cdTAwM2VndWVzdF9tYXBwaW5nc19kdW1teV9wYWdlID0gTlVMTDtcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy0xMTktXHR9XG4tLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jPTEzMT1zdGF0aWMgdm9pZCB2YmdfZ3Vlc3RfbWFwcGluZ3NfZXhpdChzdHJ1Y3QgdmJnX2RldiAqZ2Rldilcbi0tXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmMtMTYyLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jOjE2MzpcdF9fZnJlZV9wYWdlKGdkZXYtXHUwMDNlZ3Vlc3RfbWFwcGluZ3NfZHVtbXlfcGFnZSk7XG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmM6MTY0Olx0Z2Rldi1cdTAwM2VndWVzdF9tYXBwaW5nc19kdW1teV9wYWdlID0gTlVMTDtcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy0xNjUtfVxuLS1cbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuaD02Nz1zdHJ1Y3QgdmJnX2RldiB7XG4tLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5oLTgwLVx0ICovXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmg6ODE6XHRzdHJ1Y3QgcGFnZSAqZ3Vlc3RfbWFwcGluZ3NfZHVtbXlfcGFnZTtcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuaC04Mi1cdHZvaWQgKmd1ZXN0X21hcHBpbmdzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODcwOAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDExOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgYSBWaXJ0dWFsQm94IEZpbGVzeXN0ZW0gQnVnKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiBpdCYjMzk7cyAmIzM0O1dvcnRoRnV6emluZyYjMzQ7LiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgaW4gdHlwaWNhbCBmdXp6aW5nIGVudmlyb25tZW50cy4gTm8gZHVtbXkgZGV2aWNlOyB0aGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGFib3V0IGB2Ym94c2ZgLCB0aGUgVmlydHVhbEJveCBzaGFyZWQgZm9sZGVyIGZpbGVzeXN0ZW0uIENhbiBJIG1vdW50IGl0IHdpdGhvdXQgYHZib3hndWVzdGA/IE5vLCBiZWNhdXNlIGB2Ym94c2ZfY29ubmVjdGAgbmVlZHMgYHZib3hndWVzdGAgdG8gYmUgcHJvYmVkLiBJdCBjYWxscyBgdmJnX2dldF9nZGV2YCwgd2hpY2ggcmV0dXJucyBhbiBlcnJvciBpZiBgdmJnX2dkZXZgIGlzIE5VTEwuIFNvLCBpdCYjMzk7cyBzdHJpY3RseSBkZXBlbmRlbnQgb24gdGhlIGB2Ym94Z3Vlc3RgIFBDSSBkcml2ZXIsIHdoaWNoIGJpbmRzIHRvIGBQQ0lfVkVORE9SX0lEX1ZCT1hgIGFuZCBgUENJX0RFVklDRV9JRF9WQk9YX0dVRVNUYC4KClRoZSBuZXh0IHRob3VnaHQgaXMgd2hldGhlciBzeXprYWxsZXIgY2FuIGluamVjdCB0aGlzIFBDSSBkZXZpY2UuIERvZXMgaXQgaGF2ZSBzb21ldGhpbmcgbGlrZSBgc3l6X3BjaV9hZGRgPyBBY3R1YWxseSwgaXQgKmRvZXMqIGhhdmUgc29tZXRoaW5nIHNpbWlsYXI/IExldCYjMzk7cyBjaGVjayBmb3IgUENJIGluamVjdGlvbiBtZWNoYW5pc21zIGluIHRoZSBrZXJuZWwuIEkga25vdyBhYm91dCBgQ09ORklHX1BDSV9FTkRQT0lOVF9URVNUYCwgYHZmaW9gLCBhbmQgYHBjaV9zdHViYCwgYnV0IHN5emthbGxlciBkb2VzbiYjMzk7dCB0eXBpY2FsbHkgdXNlIHRoZXNlIHRvIGVtdWxhdGUgYXJiaXRyYXJ5IFBDSSBkZXZpY2VzLiBXYWl0ISBTeXprYWxsZXIgKmRvZXMqIGhhdmUgYHN5el9rdm1gLCB3aGljaCBjYW4gcnVuIGEgbmVzdGVkIFZNLiBCdXQgdGhlIHByb2JsZW0gaXMsIGB2Ym94Z3Vlc3RgIGlzbiYjMzk7dCBhIEtWTSBkZXZpY2UuCgpTbywgaG93IGRpZCBzeXprYWxsZXIgZmluZCB0aGlzIGJ1Zz8gTWF5YmUgaXQgd2FzIHJ1bm5pbmcgaW4gYSBWaXJ0dWFsQm94IFZNPyBBbmQgeWVzLCBzeXprYWxsZXIgZG9lcyBzdXBwb3J0IFZpcnR1YWxCb3guIElmIHN5emthbGxlciBzdXBwb3J0cyBWaXJ0dWFsQm94LCB0aGVuIGl0IGlzIHJlYWNoYWJsZSBpbiBzeXprYWxsZXIuIEF0IGZpcnN0LCBJJiMzOTttIHRoaW5raW5nLCBzaG91bGQgSSByZXR1cm4gYFdvcnRoRnV6emluZz10cnVlYD8gSXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIGZpbGVzeXN0ZW0gZHJpdmVyLCBzbyBpdCBzZWVtcyBsaWtlIGl0JiMzOTtzIHdvcnRoIGl0LgoKQnV0IHRoZSBwcm9tcHQgd2FudHMgbWUgdG8gYmUgY2FyZWZ1bCwgaXQgc2F5cyAmIzM0O0NvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSYjMzQ7LiBJZiB0aGUgcHJvbXB0IG1lbnRpb25zICYjMzQ7bGlrZSBHQ0Ugb3IgUUVNVSYjMzQ7LCBpdCYjMzk7cyBwcm9iYWJseSB0YWxraW5nIGFib3V0IHN0YW5kYXJkIGNsb3VkIG9yIFFFTVUgVk1zLiBJZiBJIHJldHVybiBmYWxzZSwgSSBhbSBzYXlpbmcgaXQgaXMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBzdGFuZGFyZCBWTXMuIEJ1dCB3YWl0LCB3aGF0IGlmIHN5emthbGxlciAqY2FuKiByZWFjaCBpdCBpbiBRRU1VPyBIb3c/CgpJcyB0aGVyZSBhIHdheSB0byB0cmlnZ2VyIGB2Ym94c2ZfZGlyX2VtaXRgIHdpdGhvdXQgbW91bnRpbmcgYHZib3hzZmA/IE5vLCBpdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbiBhbmQgYSBjYWxsYmFjayBpbiBgdmJveHNmX2Rpcl9mb3BzYC4gVGhhdCBtZWFucyBpdCBtdXN0IGJlIG1vdW50ZWQsIHRoZSBzYW1lIHdheSBhIG5vcm1hbCBmaWxlc3lzdGVtIG11c3QgYmUgbW91bnRlZCB0byBhY2Nlc3MgaXRzIGRpcmVjdG9yeS4gYHZib3hzZl9kaXJfaXRlcmF0ZWAgY2FsbHMgYHZib3hzZl9kaXJfZW1pdGAsIHNvIGl0IG11c3QgYmUgbW91bnRlZC4gQW5kIHRvIG1vdW50IGB2Ym94c2ZgLCBJIG5lZWQgYHZib3hzZl9maWxsX3N1cGVyYCB0byBzdWNjZWVkLiBUaGF0IGRlcGVuZHMgb24gYHZib3hzZl9jb25uZWN0YCwgd2hpY2ggbmVlZHMgYHZiZ19nZXRfZ2RldmAgdG8gcmV0dXJuIGEgdmFsaWQgcG9pbnRlci4gVGhhdCwgaW4gdHVybiwgZGVwZW5kcyBvbiBgdmJnX3BjaV9wcm9iZWAgc3VjY2VlZGluZywgd2hpY2ggcmVxdWlyZXMgdGhlIFBDSSBkZXZpY2UgMHg4MGVlOjB4Y2FmZSB0byBiZSBwcmVzZW50LgoKSXMgdGhpcyBQQ0kgZGV2aWNlIHByZXNlbnQgaW4gUUVNVT8gV2FpdCEgUUVNVSAqZG9lcyogaGF2ZSBhIGB2Ym94Z3Vlc3RgIGRldmljZT8gTGV0JiMzOTtzIGNoZWNrIHRoZSBRRU1VIHNvdXJjZSBjb2RlLi4uIEkgY2FuJiMzOTt0IGNoZWNrIHRoZSBzb3VyY2UgcmlnaHQgbm93LiBCdXQgd2FpdCwgUUVNVSBoYXMgYSBgdmJveGAgZGlzcGxheSBkZXZpY2U/IE5vLCBRRU1VIHN1cHBvcnRzIFZpcnR1YWxCb3ggYC52ZGlgIGRpc2sgaW1hZ2VzLCBidXQgaXQgZG9lc24mIzM5O3QgZW11bGF0ZSB0aGUgYHZib3hndWVzdGAgUENJIGRldmljZS4KCk9rYXksIHdoYXQgaWYgc3l6a2FsbGVyIHVzZXMgYHN5el9tb3VudF9pbWFnZWAsIGFuZCB0aGUgYnVnIGlzIGluIGB2Ym94c2ZfZGlyX2VtaXRgLCB0cmlnZ2VyZWQgYnkgcmVhZGluZyBhIGRpcmVjdG9yeT8gQnV0IGB2Ym94c2ZgIGlzIG5vdCBpbWFnZS1iYXNlZCwgcmlnaHQ/IEl0IG1vdW50cyB3aXRoIGBtb3VudCAtdCB2Ym94c2YgJmx0O2ZvbGRlciZndDsgJmx0O21vdW50cG9pbnQmZ3Q7YC4gVGhlcmVmb3JlLCBgc3l6X21vdW50X2ltYWdlYCBjYW5ub3QgYmUgdXNlZC4gU28sIGhvdyBkaWQgc3l6a2FsbGVyIGRpc2NvdmVyIHRoaXM/IFN5emthbGxlciBtdXN0IGJlIHJ1bm5pbmcgaW4gVmlydHVhbEJveCEKCklmIHN5emthbGxlciBydW5zIGluIFZpcnR1YWxCb3gsIGl0JiMzOTtzIHJlYWNoYWJsZSBpbiB0aGF0IHNwZWNpZmljIGVudmlyb25tZW50LiBEb2VzIHRoZSBwcm9tcHQgd2FudCBtZSB0byByZXR1cm4gdHJ1ZSBvciBmYWxzZT8gJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOiAuLi4gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlJiMzNDsuIElmIGl0JiMzOTtzIGltcG9zc2libGUgaW4gR0NFIG9yIFFFTVUsIEkgc2hvdWxkIHJldHVybiBmYWxzZS4KCkJ1dCB3YWl0LCBpcyBpdCByZWFsbHkgaW1wb3NzaWJsZT8gWWVzLCBpdCByZXF1aXJlcyBWaXJ0dWFsQm94LCB0aGUgcHJvbXB0IG1lbnRpb25zIEdDRSBvciBRRU1VLiBCdXQgaWYgc3l6a2FsbGVyIGZvdW5kIGl0LCBtYXliZSBpdCBJUyByZWFjaGFibGUgaW4gUUVNVT8gSG93PwoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OzB4ODBlZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2xvbnRpdW0tbHQ5NjExLmM9MTA4ND1zdGF0aWMgaW50IGx0OTYxMV9yZWFkX2RldmljZV9yZXYoc3RydWN0IGx0OTYxMSAqbHQ5NjExKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbG9udGl1bS1sdDk2MTEuYy0xMDg4LVxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9sb250aXVtLWx0OTYxMS5jOjEwODk6XHRyZWdtYXBfd3JpdGUobHQ5NjExLVx1MDAzZXJlZ21hcCwgMHg4MGVlLCAweDAxKTtcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbG9udGl1bS1sdDk2MTEuYy0xMDkwLVx0cmV0ID0gcmVnbWFwX3JlYWQobHQ5NjExLVx1MDAzZXJlZ21hcCwgMHg4MDAyLCBcdTAwMjZyZXYpO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbG9udGl1bS1sdDk2MTF1eGMuYz0xMjM9c3RhdGljIHZvaWQgbHQ5NjExdXhjX2xvY2soc3RydWN0IGx0OTYxMXV4YyAqbHQ5NjExdXhjKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbG9udGl1bS1sdDk2MTF1eGMuYy0xMjUtXHRtdXRleF9sb2NrKFx1MDAyNmx0OTYxMXV4Yy1cdTAwM2VvY21fbG9jayk7XG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2xvbnRpdW0tbHQ5NjExdXhjLmM6MTI2Olx0cmVnbWFwX3dyaXRlKGx0OTYxMXV4Yy1cdTAwM2VyZWdtYXAsIDB4ODBlZSwgMHgwMSk7XG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2xvbnRpdW0tbHQ5NjExdXhjLmMtMTI3LX1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2xvbnRpdW0tbHQ5NjExdXhjLmM9MTI5PXN0YXRpYyB2b2lkIGx0OTYxMXV4Y191bmxvY2soc3RydWN0IGx0OTYxMXV4YyAqbHQ5NjExdXhjKVxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9sb250aXVtLWx0OTYxMXV4Yy5jLTEzMC17XG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2xvbnRpdW0tbHQ5NjExdXhjLmM6MTMxOlx0cmVnbWFwX3dyaXRlKGx0OTYxMXV4Yy1cdTAwM2VyZWdtYXAsIDB4ODBlZSwgMHgwMCk7XG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2xvbnRpdW0tbHQ5NjExdXhjLmMtMTMyLVx0bXNsZWVwKDUwKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vdmJveHZpZGVvL3Zib3hfZHJ2LmM9MzU9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaWlkbGlzdFtdID0ge1xuZHJpdmVycy9ncHUvZHJtL3Zib3h2aWRlby92Ym94X2Rydi5jOjM2Olx0eyBQQ0lfREVWSUNFKDB4ODBlZSwgMHhiZWVmKSB9LFxuZHJpdmVycy9ncHUvZHJtL3Zib3h2aWRlby92Ym94X2Rydi5jLTM3LVx0eyB9XG4tLVxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2FmOTAzM19wcml2Lmg9MTM0MD1zdGF0aWMgY29uc3Qgc3RydWN0IHJlZ192YWwgdHVuZXJfaW5pdF9pdDkxMzVfNjBbXSA9IHtcbi0tXG5kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvYWY5MDMzX3ByaXYuaC0xNDUyLVx0eyAweDgwZWQwMiwgMHg0MCB9LFxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2FmOTAzM19wcml2Lmg6MTQ1MzpcdHsgMHg4MGVlNDIsIDB4NDAgfSxcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9hZjkwMzNfcHJpdi5oOjE0NTQ6XHR7IDB4ODBlZTgyLCAweDQwIH0sXG5kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvYWY5MDMzX3ByaXYuaC0xNDU1LVx0eyAweDgwZjAwMCwgMHgwZiB9LFxuLS1cbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9hZjkwMzNfcHJpdi5oPTE1NTY9c3RhdGljIGNvbnN0IHN0cnVjdCByZWdfdmFsIHR1bmVyX2luaXRfaXQ5MTM1XzYxW10gPSB7XG4tLVxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2FmOTAzM19wcml2LmgtMTY2OC1cdHsgMHg4MGVkMDIsIDB4NDAgfSxcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9hZjkwMzNfcHJpdi5oOjE2Njk6XHR7IDB4ODBlZTQyLCAweDQwIH0sXG5kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvYWY5MDMzX3ByaXYuaDoxNjcwOlx0eyAweDgwZWU4MiwgMHg0MCB9LFxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2FmOTAzM19wcml2LmgtMTY3MS1cdHsgMHg4MGYwMDAsIDB4MGYgfSxcbi0tXG5kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvYWY5MDMzX3ByaXYuaD0xNzcyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnX3ZhbCB0dW5lcl9pbml0X2l0OTEzNV82MltdID0ge1xuLS1cbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9hZjkwMzNfcHJpdi5oLTE4ODUtXHR7IDB4ODBlZDAyLCAweGZmIH0sXG5kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvYWY5MDMzX3ByaXYuaDoxODg2Olx0eyAweDgwZWU0MiwgMHhmZiB9LFxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2FmOTAzM19wcml2Lmg6MTg4NzpcdHsgMHg4MGVlODIsIDB4ZmYgfSxcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9hZjkwMzNfcHJpdi5oLTE4ODgtXHR7IDB4ODBmMDAwLCAweDBmIH0sXG4tLVxuZHJpdmVycy9tZWRpYS90dW5lcnMvaXQ5MTN4LmM9MjA3PXN0YXRpYyBpbnQgaXQ5MTN4X3NldF9wYXJhbXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpXG4tLVxuZHJpdmVycy9tZWRpYS90dW5lcnMvaXQ5MTN4LmMtMzIyLVx0LyogWFhYOiBsYXRlc3Qgd2luZG93cyBkcml2ZXIgZG9lcyBub3Qgc2V0IHRoYXQgYXQgYWxsICovXG5kcml2ZXJzL21lZGlhL3R1bmVycy9pdDkxM3guYzozMjM6XHRyZXQgPSByZWdtYXBfd3JpdGUoZGV2LVx1MDAzZXJlZ21hcCwgMHg4MGVlMDYsIGxuYV9iYW5kKTtcbmRyaXZlcnMvbWVkaWEvdHVuZXJzL2l0OTEzeC5jLTMyNC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy0yMi0vKiogVmlydHVhbEJveCBQQ0kgdmVuZG9yIElELiAqL1xuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzoyMzojZGVmaW5lIFZCT1hfVkVORE9SSURcdFx0MHg4MGVlXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTI0LS8qKiBWTU1EZXYgUENJIGNhcmQgcHJvZHVjdCBJRC4gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI1MjEKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYHZib3hndWVzdGAgRW11bGF0aW9uIFBvc3NpYmlsaXRpZXMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBgdmJveGd1ZXN0YCBhbmQgdGhvc2Ugc3BlY2lmaWMgYWRkcmVzc2VzIGl0IHVzZXMsIGAweDgwZWVgIGFuZCBgMHhjYWZlYC4gVGhlIGtleSBoZXJlIGlzIHRoYXQgdGhlcmUmIzM5O3Mgbm8gc29mdHdhcmUgZW11bGF0b3IgZm9yIGl0IGJha2VkIGludG8gdGhlIGtlcm5lbCBpdHNlbGYuIFRoaXMgbWVhbnMsIGFzIGZhciBhcyBJIHVuZGVyc3RhbmQsIGRpcmVjdGx5IGhpdHRpbmcgdGhhdCBjb2RlIHBhdGggdGhyb3VnaCBlaXRoZXIgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgaXMgYSBub24tc3RhcnRlci4KCkJ1dCwgaG9sZCBvbi4uLiBpZiBzeXprYWxsZXIgY291bGQgdXNlIHNvbWV0aGluZyBsaWtlIGBzeXpfcGNpX2FkZGAsIHRoYXQgbWlnaHQgY2hhbmdlIHRoZSBnYW1lLiBUaGF0IHdvdWxkIGJlIGEgd2F5IHRvIGNyZWF0ZSB0aGUgY29ycmVjdCBlbnZpcm9ubWVudC4gTm93LCBkb2VzIHN5emthbGxlciAqYWN0dWFsbHkqIGhhdmUgYSBzeXN0ZW0gY2FsbCBsaWtlIHRoYXQ/IFdhaXQsIGhhbmcgb24uLi4gSSBrbm93IHN5emthbGxlciBoYXMgYSBQQ0kgZnV6emVyLi4uIFNvLCB0aGVyZSAqbXVzdCogYmUgc29tZSB3YXkgdG8gaW5qZWN0IFBDSS1yZWxhdGVkIGFjdGlvbnMuLi4KCk9rYXksIEkmIzM5O20gc2Vjb25kLWd1ZXNzaW5nIG15c2VsZi4gSXQgZG9lc24mIzM5O3QgbG9vayBsaWtlIHRoZXJlJiMzOTtzIGFuIGV4cGxpY2l0IGBzeXpfcGNpX2FkZGAuIEkmIzM5O20gcmVtZW1iZXJpbmcgYHN5el91c2JfY29ubmVjdGAgZm9yIFVTQiwgYHN5el84MDIxMV9pbmplY3RfZnJhbWVgIGZvciB3aWZpLCBgc3l6X2dlbmV0bGlua19nZXRfZmFtaWx5X2lkYCBmb3IgbmV0bGluazsgdGhvc2UgYXJlIHNpbWlsYXIgaW5qZWN0aW9uIHByaW1pdGl2ZXMuIEZvciBQQ0ksIGl0IGhhcyBgc3l6X2t2bV9zZXR1cF9jcHVgLCB3aGljaCByZWxhdGVzIHRvIEtWTS4gVGhpcyBoYXMgbWUgdGhpbmtpbmcuCgpJIGFtIG5vdyBnb2luZyB0byBtYWtlIGEgZGVmaW5pdGl2ZSBjaGVjayAtIGNvdWxkIHRoZXJlIGJlIGEgYHN5el9wY2lgIGZ1bmN0aW9uLCBvciBzb21ldGhpbmcgc2ltaWxhciwgdGhhdCBJJiMzOTttIGp1c3QgYmxhbmtpbmcgb24/IE9rYXksIHRpbWUgdG8gbG9vayBmb3IgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gUENJIGluIHN5emthbGxlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzeXpfcGNpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDMxNDYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMTUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRnV6emluZyBXb3J0aGluZXNzIG9mIGEgYHZib3hzZmAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRoZSBxdWVzdGlvbiBvZiB3aGV0aGVyIGl0JiMzOTtzIHdvcnRoIGZ1enppbmcuIFRoZSBrZXkgaXMgdGhpczogdGhlIHBhdGNoIHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gYHZib3hzZmAsIHdoaWNoIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIGFzIHRoZSBWaXJ0dWFsQm94IHNoYXJlZCBmb2xkZXIgZmlsZXN5c3RlbS4gTm93LCB0aGUgcHJvbXB0IHNheXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBjb2RlIHBhdGggaXMgJiMzNDtpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLiYjMzQ7IE15IGluaXRpYWwgdGhvdWdodCBpcywgd2FpdCwgaG93IGRpZCBzeXprYWxsZXIgZXZlbiBmaW5kIHRoaXM/IEkga25vdyBzeXprYWxsZXIgY2FuJiMzOTt0IGluamVjdCBQQ0kgZGV2aWNlcyBkaXJlY3RseS4gVGhlbiBpdCBoaXRzIG1lOiBzeXprYWxsZXIgaGFzIGEgYHZib3hgIFZNIHR5cGUhIEJpbmdvLiBJZiBzeXprYWxsZXIgaXMgcnVubmluZyBvbiBWaXJ0dWFsQm94LCB0aGVuLCB5ZXMsIGl0ICpjYW4qIHJlYWNoIHRoaXMgY29kZS4KCkJ1dCB0aGF0IHByb21wdCBrZWVwcyByaW5naW5nIGluIG15IGVhcnMuIEl0IGV4cGxpY2l0bHkgbmFtZXMgR0NFIGFuZCBRRU1VLiBWaXJ0dWFsQm94ICppcyogYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgYnV0IGlzIGl0ICpsaWtlKiBHQ0Ugb3IgUUVNVSBpbiB0aGUgY29udGV4dCBvZiBzdGFuZGFyZCBmdXp6aW5nIGluZnJhc3RydWN0dXJlPyBHQ0UgYW5kIFFFTVUgYXJlIHRoZSBub3JtIGZvciBzb21ldGhpbmcgbGlrZSBzeXpib3QsIHJpZ2h0PyBTbyBpZiB0aGlzIGlzIFZpcnR1YWxCb3gtc3BlY2lmaWMsIGlzIHRoYXQgd2hhdCB0aGV5IG1lYW4/IEFuZCBpZiBpdCYjMzk7cyBpbiBgdmJveHNmYCwgSSYjMzk7bSBndWVzc2luZyBpdCBjYW4gb25seSBiZSBmdXp6ZWQgaWYgdGhlIGZ1enplciBydW5zIGluIFZpcnR1YWxCb3guIERvZXMgc3l6Ym90IGhhdmUgaW5zdGFuY2VzIGluIFZpcnR1YWxCb3g/IEkgZG9uJiMzOTt0ICp0aGluayogc28uIEkmIzM5O2QgYXNzdW1lIHRoZSBzeXotY2x1c3RlciBjb21taXQgYXV0aG9yIGlzIGEgcmVkIGhlcnJpbmcuIEl0JiMzOTtzIGp1c3QgYSBnZW5lcmljIGxhYmVsLgoKT2theSwgbGV0JiMzOTtzIGJhY2sgdXAuIElmIGl0ICppcyogcmVhY2hhYmxlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqaG93Ki4gQ2FuIEkgYnlwYXNzIGB2Ym94c2ZfY29ubmVjdGA/IEkgcXVpY2tseSByZXRyYWNlIHRoZSBjYWxscyBhbmQgc2VlIHRoYXQgYHZib3hzZl9maWxsX3N1cGVyYCBjYWxscyBpdC4gYHZib3hzZl9jb25uZWN0YCBjYWxscyBgdmJnX2dldF9nZGV2YCwgd2hpY2ggcmV0dXJucyBgdmJnX2dkZXZgLCB3aGljaCBpcyBzZXQgaW4gYHZiZ19wY2lfcHJvYmVgLiBOb3cgd2UgYXJlIGF0IHRoZSBQQ0kgbGV2ZWwuIGB2YmdfcGNpX3Byb2JlYCBpcyBjYWxsZWQgd2hlbiBhIGRldmljZSB3aXRoIHZlbmRvciBJRCAweDgwZWUgYW5kIGRldmljZSBJRCAweGNhZmUgaXMgZm91bmQsIHdoaWNoIGlzIFZpcnR1YWxCb3gmIzM5O3MgZ3Vlc3QgZGV2aWNlLiBDYW4gSSBmYWtlIHRoYXQgaW4gUUVNVT8gSSBrbm93IFFFTVUgKmNhbiogZW11bGF0ZSBkZXZpY2VzLiBEb2VzIGl0IGVtdWxhdGUgdGhlIFZpcnR1YWxCb3ggZ3Vlc3QgZGV2aWNlPyBJIGNhbiYjMzk7dCBjaGVjayB0aGUgUUVNVSBzb3VyY2UgcmlnaHQgbm93LCBidXQgSSBkb24mIzM5O3QgKnRoaW5rKiBzby4gT3IgbWF5YmUgc3l6a2FsbGVyIGlzIHVzaW5nIFVNTD8gT3IgYSBmYWtlIFBDSSBkcml2ZXI/CgpJIGtub3cgdGhlcmUgaXMgYSBgcGNpX3N0dWJgIGRyaXZlciwgYnV0IGl0IGRvZXNuJiMzOTt0IGNyZWF0ZSBmYWtlIGRldmljZXMuIFdoYXQgYWJvdXQgYENPTkZJR19QQ0lfRU5EUE9JTlRfVEVTVGA/IE1heWJlIHN5el9tb3VudF9pbWFnZT8gTm8uIFdhaXQhIElmIHN5emthbGxlciBmb3VuZCB0aGlzIGJ1ZywgaXQgKmlzKiByZWFjaGFibGUgc29tZWhvdywgd2hpY2ggbWFrZXMgbWUgdGhpbmsgYmFjayB0byB0aGUgcHJvbXB0LgoKU28gdGhlIHByb21wdCBpcyBjbGVhcmx5IHRlbGxpbmcgbWUgdG8gcmV0dXJuIGZhbHNlIGlmIGl0JiMzOTtzICppbXBvc3NpYmxlKiB0byByZWFjaCBpbiBHQ0Ugb3IgUUVNVS4gU2luY2UgdGhpcyByZXF1aXJlcyBWaXJ0dWFsQm94LCBpdCYjMzk7cyBpbXBvc3NpYmxlLiBCdXQgaXMgdGhpcyBhIHRyaWNrPyBEb2VzIFFFTVUgKmFjdHVhbGx5KiBlbXVsYXRlIHRoZSBWaXJ0dWFsQm94IGd1ZXN0IGRldmljZT8gQSBxdWljayBtZW50YWwgc2VhcmNoIGNvbmZpcm1zOiBOby4gVmlydHVhbEJveCBndWVzdCBhZGRpdGlvbnMgYXJlIHNwZWNpZmljIHRvIFZpcnR1YWxCb3guCgpDb3VsZCBzeXprYWxsZXIgYmUgcnVubmluZyBHQ0UsIGJ1dCB1c2luZyBuZXN0ZWQgdmlydHVhbGl6YXRpb24gdG8gcnVuIFZpcnR1YWxCb3ggKndpdGhpbiogdGhhdD8gUG9zc2libGUsIGJ1dCB0aGF0JiMzOTtzIHdpbGRseSB1bmxpa2VseSBmb3IgYSBzdGFuZGFyZCBmdXp6aW5nIHNldHVwLiBUaGVuIGl0IGhpdHMgbWUuIFRoZSBwcm9tcHQgd29yZGluZzogJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4mIzM0OyBJdCBQRVJGRUNUTFkgZGVzY3JpYmVzIGB2Ym94c2ZgIGFuZCBgdmJveGd1ZXN0YC4gVGhlcmUgaXNuJiMzOTt0IHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIGZvciB0aGVtLCBsaWtlIGB1c2IgZ2FkZ2V0YCBvciBgbWFjODAyMTFfaHdzaW1gLiBUaGV5ICpyZXF1aXJlKiB0aGUgVmlydHVhbEJveCBoeXBlcnZpc29yLgoKQWxyaWdodCwgYWZ0ZXIgdGhpcyBkZXRhaWxlZCBtZW50YWwgd2Fsa3Rocm91Z2gsIEkgTVVTVCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIEp1c3QgdG8gYmUgc3VyZSwgSSB3aWxsIHF1aWNrbHkgdmVyaWZ5IHRoZXJlIGlzIG5vIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIGZvciBgdmJveGd1ZXN0YCwgYnV0IEkgYW0gc3VyZSB0aGVyZSBpcyBub25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zib3hndWVzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3Rvb2xzL3Rlc3RpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDUyMzIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZyBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBUZXN0IENvdmVyYWdlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBmb3IgcmVsZXZhbnQgdGVzdGluZyBjb2RlLCBwcm9iYWJseSBmb3IgYSBuZXcgZmVhdHVyZSBvciB0byBkZWJ1ZyBzb21ldGhpbmcuIEkgc3RhcnRlZCBieSBjaGVja2luZyB0aGUgYHRvb2xzL3Rlc3RpbmcvYCBkaXJlY3RvcnksIHdoaWNoIGlzIHVzdWFsbHkgdGhlIGdvLXRvIGxvY2F0aW9uIGZvciBvdXIgdGVzdCBpbmZyYXN0cnVjdHVyZSBhbmQgcmVsYXRlZCBzY3JpcHRzLiBCdXQuLi4gbm90aGluZy4gTm8gbWF0Y2hlcyBhdCBhbGwuIFRoaXMgaXMgZWl0aGVyIGV4cGVjdGVkLCBvciB1bmV4cGVjdGVkLiBJdCBjb3VsZCBtZWFuIHRoZSByZWxldmFudCB0ZXN0cyBhcmUgbG9jYXRlZCBzb21ld2hlcmUgZWxzZSwgbWF5YmUgaW4gYSBtb2R1bGUgc3BlY2lmaWMgdGVzdCBmb2xkZXIsIG9yIHRoYXQgdGhleSBhcmUgbWFuYWdlZCBpbiBhIGRpZmZlcmVudCB3YXkuIEkgbmVlZCB0byB3aWRlbiB0aGUgc2VhcmNoIHNjb3BlIGFuZCBjb25zaWRlciBvdGhlciBsb2NhdGlvbnMuIEkgc2hvdWxkIGFsc28gdGhpbmsgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zIG9mIG5vIGV4aXN0aW5nIHRlc3Rpbmc7IG1heWJlIGl0JiMzOTtzIHRvbyBlYXJseSB0byBsb29rIGF0IHRlc3RpbmcgYXMgb2YgeWV0LiBJJiMzOTtsbCBuZWVkIG1vcmUgaW5mb3JtYXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgbmV4dCBzdGVwcyBhbmQgbWFrZSBhbnkgZGVjaXNpb25zIGFib3V0IHRlc3QgZGVzaWduIGFuZC9vciBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2Ym94Z3Vlc3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3BjaS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTQ2NwoJCQkJCQkJb3V0cHV0OiAxMjcKCQkJCQkJCXRob3VnaHRzOiA2OTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgUmVhc29uaW5nIGZvciBGaWx0ZXJpbmcgdGhpcyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBjaGVja2VkIGZvciBhbnkgc29mdHdhcmUgZW11bGF0b3JzIGZvciBgdmJveGd1ZXN0YCB3aXRoaW4gYGRyaXZlcnMvcGNpL2AsIGFuZCB0aGVyZSBhcmUgbm9uZS4gVGhhdCBtZWFucyB0aGlzIGRyaXZlciAqc3RyaWN0bHkqIGRlcGVuZHMgb24gdGhlIFZpcnR1YWxCb3ggaHlwZXJ2aXNvci4KClRoZSBwcm9tcHQgaXMgY3J5c3RhbCBjbGVhcjogSSBuZWVkIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiBhIHBhdGNoIGFmZmVjdHMgY29kZSB0aGF0IGlzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdpdGggc29mdHdhcmUgZW11bGF0ZWQgaGFyZHdhcmUuIGB2Ym94c2ZgLCB0aGUgVmlydHVhbEJveCBHdWVzdCBTaGFyZWQgRm9sZGVyLCBpcyBleGFjdGx5IHRoYXQga2luZCBvZiBjb2RlLiBJdCBhYnNvbHV0ZWx5IHJlcXVpcmVzIHRoZSBWaXJ0dWFsQm94IGh5cGVydmlzb3IgYmVjYXVzZSB0aGVyZSYjMzk7cyBubyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSBlcXVpdmFsZW50LiBUaGVyZWZvcmUsIEkgd2FzIGluaXRpYWxseSBjb25maWRlbnQgdGhhdCB0aGlzIHBhdGNoIHdvdWxkIGluZGVlZCBiZSBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCkhvd2V2ZXIsIGEgcXVpY2sgdGhvdWdodDogY291bGQgc3l6a2FsbGVyLCB0aGUgZnV6emVyLCBoYXZlIHBvc3NpYmx5IGZvdW5kIHNvbWV0aGluZyBpbiBWaXJ0dWFsQm94PyBFdmVuIGlmIGl0IGRpZCwgdGhlIHByb21wdCBleHBsaWNpdGx5IHRlbGxzIG1lIHRvIGlnbm9yZSB0aGF0IHBvc3NpYmlsaXR5IGJlY2F1c2UgdGhlIGZ1enppbmcgaW5mcmFzdHJ1Y3R1cmUgdGhhdCB0aGlzIEFJIGlzIG9wZXJhdGluZyBmb3IgbW9zdCBsaWtlbHkgdXNlcyBHQ0Ugb3IgUUVNVSwgYW5kIHRoZXkgZG8gbm90IHdhbnQgdG8gd2FzdGUgY3ljbGVzIGZ1enppbmcgVmlydHVhbEJveC1zcGVjaWZpYyBjb2RlIHRoYXQgdGhleSBjYW5ub3QgcmVhY2guIFRoaXMgbWFrZXMgcGVyZmVjdCBzZW5zZTsgdGhlIGdvYWwgaGVyZSBpcyB0byBmaWx0ZXIgcGF0Y2hlcyB0aGF0IGNhbiYjMzk7dCBiZSB0ZXN0ZWQgd2l0aCB0aGUgY3VycmVudCBpbmZyYXN0cnVjdHVyZS4KCkkmIzM5O3ZlIGNyYWZ0ZWQgYSBjb21wcmVoZW5zaXZlIGV4cGxhbmF0aW9uOiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVmlydHVhbEJveCBHdWVzdCBTaGFyZWQgRm9sZGVyICh2Ym94c2YpIGZpbGVzeXN0ZW0gZHJpdmVyLiBUaGlzIGZpbGVzeXN0ZW0gcmVsaWVzIG9uIHRoZSBWaXJ0dWFsQm94IGd1ZXN0IFBDSSBkZXZpY2UgKHZib3hndWVzdCkgZm9yIG1vdW50aW5nIGFuZCBjb21tdW5pY2F0aW9uIHdpdGggdGhlIGhvc3QuIFNpbmNlIHRoaXMgZGV2aWNlIGlzIGV4Y2x1c2l2ZWx5IHByb3ZpZGVkIGJ5IHRoZSBWaXJ0dWFsQm94IGh5cGVydmlzb3IsIGFuZCBubyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSBleGlzdHMgZm9yIGl0IGluIHRoZSBrZXJuZWwsIHRoaXMgY29kZSBwYXRoIGlzIHVucmVhY2hhYmxlIGFuZCB1bi1mdXp6YWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4mIzM0OwoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O3ZlIGR1ZyBpbnRvIHRoZSBjb2RlLiBJIGZvbGxvd2VkIHRoZSBtb3VudCBwYXRoOiBgdmJveHNmX2ZpbGxfc3VwZXJgIC0mZ3Q7IGB2Ym94c2ZfY29ubmVjdGAgLSZndDsgYHZiZ19nZXRfZ2RldmAuIEkgc2VlIHRoYXQgYHZiZ19nZXRfZ2RldmAgcmV0dXJucyBgLUVOT0RFVmAgaWYgYHZiZ19nZGV2YCBpcyBOVUxMLiBUaGlzIGlzIHNldCAqb25seSogd2l0aGluIGB2YmdfcGNpX3Byb2JlYC4gVGhpcyBQQ0kgcHJvYmUgZnVuY3Rpb24gb25seSBnZXRzIGNhbGxlZCB3aGVuIHRoZSBQQ0kgZGV2aWNlIGAweDgwZWU6MHhjYWZlYCBnZXRzIHByb2JlZC4gU28sIGl0JiMzOTtzIGEgaGFyZCByZXF1aXJlbWVudCB0byBoYXZlIHRoYXQgVmlydHVhbEJveCBQQ0kgZGV2aWNlIHByZXNlbnQgdG8gbW91bnQgYHZib3hzZmAuCgpJIGV2ZW4gY2hlY2tlZCBpZiB0aGVyZSB3YXMgYW5vdGhlciB3YXkgdG8gcmVhY2ggc29tZSBmdW5jdGlvbnMgaW5zaWRlLCBsaWtlIGB2Ym94c2ZfZGlyX2VtaXRgLiBJdCBpcyBhIHN0YXRpYyBmdW5jdGlvbiBpbiBgZnMvdmJveHNmL2Rpci5jYC4gSXQmIzM5O3Mgb25seSByZWZlcmVuY2VkIGluIGB2Ym94c2ZfZGlyX2l0ZXJhdGVgIGFuZCBgdmJveHNmX2Rpcl9mb3BzYC4gYHZib3hzZl9kaXJfZm9wc2AgaXMgb25seSB1c2VkIGZvciBkaXJlY3RvcnkgaW5vZGVzLiBEaXJlY3RvcnkgaW5vZGVzIGFyZSBvbmx5IGNyZWF0ZWQgd2hlbiBgdmJveHNmYCBpcyBtb3VudGVkLiBTbywgSSBoYXZlIHRvIGhhdmUgaXQgbW91bnRlZC4KClllcywgdGhlcmUgaXMgbm8gd2F5IHRvIHJlYWNoIHRoaXMgY29kZSBpbiBHQ0Ugb3IgUUVNVS4KClRoZXJlZm9yZSwgdGhlIGNvbmNsdXNpb24gaXMgY2xlYXIuIEkgd2lsbCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFZpcnR1YWxCb3ggR3Vlc3QgU2hhcmVkIEZvbGRlciAodmJveHNmKSBmaWxlc3lzdGVtIGRyaXZlci4gVGhpcyBmaWxlc3lzdGVtIHN0cmljdGx5IHJlcXVpcmVzIHRoZSBWaXJ0dWFsQm94IGd1ZXN0IFBDSSBkZXZpY2UgKHZib3hndWVzdCkgdG8gYmUgcHJlc2VudCBhbmQgaW5pdGlhbGl6ZWQgaW4gb3JkZXIgdG8gbW91bnQgYW5kIGNvbW11bmljYXRlIHdpdGggdGhlIGhvc3QuIFNpbmNlIHRoaXMgZGV2aWNlIGlzIG9ubHkgcHJvdmlkZWQgYnkgdGhlIFZpcnR1YWxCb3ggaHlwZXJ2aXNvciBhbmQgdGhlcmUgaXMgbm8gc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgZm9yIGl0IGluIHRoZSBrZXJuZWwsIHRoaXMgY29kZSBwYXRoIGlzIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1enogaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVmlydHVhbEJveCBHdWVzdCBTaGFyZWQgRm9sZGVyICh2Ym94c2YpIGZpbGVzeXN0ZW0gZHJpdmVyLiBUaGlzIGZpbGVzeXN0ZW0gc3RyaWN0bHkgcmVxdWlyZXMgdGhlIFZpcnR1YWxCb3ggZ3Vlc3QgUENJIGRldmljZSAodmJveGd1ZXN0KSB0byBiZSBwcmVzZW50IGFuZCBpbml0aWFsaXplZCBpbiBvcmRlciB0byBtb3VudCBhbmQgY29tbXVuaWNhdGUgd2l0aCB0aGUgaG9zdC4gU2luY2UgdGhpcyBkZXZpY2UgaXMgb25seSBwcm92aWRlZCBieSB0aGUgVmlydHVhbEJveCBoeXBlcnZpc29yIGFuZCB0aGVyZSBpcyBubyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSBmb3IgaXQgaW4gdGhlIGtlcm5lbCwgdGhpcyBjb2RlIHBhdGggaXMgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgZnV6eiBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzo0ODoyNC4wOTI4MjQ1MjRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjg2NTU0MTQ1MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBWaXJ0dWFsQm94IEd1ZXN0IFNoYXJlZCBGb2xkZXIgKHZib3hzZikgZmlsZXN5c3RlbSBkcml2ZXIuIFRoaXMgZmlsZXN5c3RlbSBzdHJpY3RseSByZXF1aXJlcyB0aGUgVmlydHVhbEJveCBndWVzdCBQQ0kgZGV2aWNlICh2Ym94Z3Vlc3QpIHRvIGJlIHByZXNlbnQgYW5kIGluaXRpYWxpemVkIGluIG9yZGVyIHRvIG1vdW50IGFuZCBjb21tdW5pY2F0ZSB3aXRoIHRoZSBob3N0LiBTaW5jZSB0aGlzIGRldmljZSBpcyBvbmx5IHByb3ZpZGVkIGJ5IHRoZSBWaXJ0dWFsQm94IGh5cGVydmlzb3IgYW5kIHRoZXJlIGlzIG5vIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIGZvciBpdCBpbiB0aGUga2VybmVsLCB0aGlzIGNvZGUgcGF0aCBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCBmdXp6IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NDg6MjQuMDkyODMwNjg0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjAxNTgwMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxZDkzMDZjMDgxZDFhMTg5NDU1NjJmYmUxM2RlY2Q4ZDFhYmNkYmVlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDEwIDIzOjQ4OjIyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL3Zib3hzZi9kaXIuYyBiL2ZzL3Zib3hzZi9kaXIuY1xcbmluZGV4IDQyYmVkYzRlYzdhZjc3Li43MDJkMjQzMTY5OTM2NCAxMDA2NDRcXG4tLS0gYS9mcy92Ym94c2YvZGlyLmNcXG4rKysgYi9mcy92Ym94c2YvZGlyLmNcXG5AQCAtMTI5LDYgKzEyOSw4IEBAIHN0YXRpYyBib29sIHZib3hzZl9kaXJfZW1pdChzdHJ1Y3QgZmlsZSAqZGlyLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcXG4gXFx0XFx0ZW5kID0gXFx1MDAyNmluZm8tXFx1MDAzZW5hbWUuc3RyaW5nLnV0ZjhbaW5mby1cXHUwMDNlbmFtZS5zaXplXTtcXG4gXFx0XFx0aWYgKFdBUk5fT04oZW5kIFxcdTAwM2UgKGItXFx1MDAzZWJ1ZiArIGItXFx1MDAzZXVzZWQpKSlcXG4gXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRcXHRpZiAoaW5mby1cXHUwMDNlbmFtZS5sZW5ndGggXFx1MDAzZSBpbmZvLVxcdTAwM2VuYW1lLnNpemUpXFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuIFxcdFxcdC8qIEluZm8gbm93IHBvaW50cyB0byB0aGUgcmlnaHQgZW50cnksIGVtaXQgaXQuICovXFxuIFxcdFxcdGRfdHlwZSA9IHZib3hzZl9nZXRfZF90eXBlKGluZm8tXFx1MDAzZWluZm8uYXR0ci5tb2RlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NDg6MjQuNjEzNjg1ODUzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjgxMzQ1NDMxMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBWaXJ0dWFsQm94IEd1ZXN0IFNoYXJlZCBGb2xkZXIgKHZib3hzZikgZmlsZXN5c3RlbSBkcml2ZXIuIFRoaXMgZmlsZXN5c3RlbSBzdHJpY3RseSByZXF1aXJlcyB0aGUgVmlydHVhbEJveCBndWVzdCBQQ0kgZGV2aWNlICh2Ym94Z3Vlc3QpIHRvIGJlIHByZXNlbnQgYW5kIGluaXRpYWxpemVkIGluIG9yZGVyIHRvIG1vdW50IGFuZCBjb21tdW5pY2F0ZSB3aXRoIHRoZSBob3N0LiBTaW5jZSB0aGlzIGRldmljZSBpcyBvbmx5IHByb3ZpZGVkIGJ5IHRoZSBWaXJ0dWFsQm94IGh5cGVydmlzb3IgYW5kIHRoZXJlIGlzIG5vIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIGZvciBpdCBpbiB0aGUga2VybmVsLCB0aGlzIGNvZGUgcGF0aCBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCBmdXp6IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxZDkzMDZjMDgxZDFhMTg5NDU1NjJmYmUxM2RlY2Q4ZDFhYmNkYmVlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMTAgMjM6NDg6MjIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy92Ym94c2YvZGlyLmMgYi9mcy92Ym94c2YvZGlyLmNcbmluZGV4IDQyYmVkYzRlYzdhZjc3Li43MDJkMjQzMTY5OTM2NCAxMDA2NDRcbi0tLSBhL2ZzL3Zib3hzZi9kaXIuY1xuKysrIGIvZnMvdmJveHNmL2Rpci5jXG5AQCAtMTI5LDYgKzEyOSw4IEBAIHN0YXRpYyBib29sIHZib3hzZl9kaXJfZW1pdChzdHJ1Y3QgZmlsZSAqZGlyLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcbiBcdFx0ZW5kID0gXHUwMDI2aW5mby1cdTAwM2VuYW1lLnN0cmluZy51dGY4W2luZm8tXHUwMDNlbmFtZS5zaXplXTtcbiBcdFx0aWYgKFdBUk5fT04oZW5kIFx1MDAzZSAoYi1cdTAwM2VidWYgKyBiLVx1MDAzZXVzZWQpKSlcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdGlmIChpbmZvLVx1MDAzZW5hbWUubGVuZ3RoIFx1MDAzZSBpbmZvLVx1MDAzZW5hbWUuc2l6ZSlcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRcdC8qIEluZm8gbm93IHBvaW50cyB0byB0aGUgcmlnaHQgZW50cnksIGVtaXQgaXQuICovXG4gXHRcdGRfdHlwZSA9IHZib3hzZl9nZXRfZF90eXBlKGluZm8tXHUwMDNlaW5mby5hdHRyLm1vZGUpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NDg6MjQuNjEzNjg3MzczWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjExNDE5MjQ4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBWaXJ0dWFsQm94IEd1ZXN0IFNoYXJlZCBGb2xkZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBmcy92Ym94c2YvZGlyLmNgLiBUaGUgY2hhbmdlIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGl0J3MgYWRkaW5nIGEgbGVuZ3RoIGNoZWNrIGluIGB2Ym94c2ZfZGlyX2VtaXRgLCBzcGVjaWZpY2FsbHkgYGlmIChpbmZvLVx1MDAzZW5hbWUubGVuZ3RoIFx1MDAzZSBpbmZvLVx1MDAzZW5hbWUuc2l6ZSkgcmV0dXJuIGZhbHNlO2AuIFNlZW1zIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIHZib3hzZiBmaWxlc3lzdGVtIGRyaXZlciwgd2hpY2ggaXMgcGFydCBvZiBWaXJ0dWFsQm94J3MgR3Vlc3QgU2hhcmVkIEZvbGRlcnMgZmVhdHVyZS5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiB3ZSBldmVuICpyZWFjaCogdGhpcyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmU/IFZib3hzZiBpcyByZWFsbHkgZGVzaWduZWQgZm9yIFZpcnR1YWxCb3ggZ3Vlc3RzLCByaWdodD8gSXQgcmVsaWVzIG9uIGNvbW11bmljYXRpb24gd2l0aCB0aGUgaG9zdCwgdHlwaWNhbGx5IHRocm91Z2ggYSBWaXJ0dWFsQm94LXNwZWNpZmljIFBDSSBkZXZpY2Ugb3Igc29tZXRoaW5nIHNpbWlsYXIsIGxpa2UgVk1NRGV2LiBJIG5lZWQgdG8gY29uZmlybSB0aGF0LlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgZGVlcGVyIGludG8gdGhlIGNvZGUuIEknbGwgY2hlY2sgYm90aCBgZnMvdmJveHNmL2AgYW5kIGBkcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L2AuIElmIGl0J3MgdGlnaHRseSBjb3VwbGVkIHdpdGggVmlydHVhbEJveCwgdGhlcmUncyBhIGdvb2QgY2hhbmNlIGl0IHdvbid0IHdvcmsgaW4gYSBzdGFuZGFyZCBRRU1VL0dDRSBzZXR1cCB1bmxlc3Mgd2UncmUgZW11bGF0aW5nIHRoZSBWaXJ0dWFsQm94IGd1ZXN0IGRldmljZS5cblxuTm93IEknbSB3b25kZXJpbmcgaWYgc3l6a2FsbGVyIGNvdWxkIGZ1enogdGhpcy4gU3l6a2FsbGVyIHVzdWFsbHkgcnVucyBpbiBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIGFuZCBHQ0UsIGJ1dCBpdCdzIG5vdCBzZXQgdXAgdG8gZW11bGF0ZSBWaXJ0dWFsQm94IGd1ZXN0IGRldmljZXMgb3V0IG9mIHRoZSBib3guIEJ1dCwgY291bGQgaXQgc3RpbGwgbW91bnQgYW5kIGludGVyYWN0IHdpdGggaXQgYXMgYSBmaWxlc3lzdGVtP1xuXG5ObywgSSB0aGluayBJJ20gd3JvbmcgdGhlcmUuIGB2Ym94c2ZgIG5lZWRzIHRoZSBgdmJveGd1ZXN0YCBkcml2ZXIsIGFuZCB0aGF0IHJlcXVpcmVzIHRoZSBWaXJ0dWFsQm94IFBDSSBkZXZpY2UgdG8gYmUgcHJlc2VudCBhbmQgaW5pdGlhbGl6ZWQuIEl0J3MgYmVjb21pbmcgY2xlYXIgdGhhdCB0aGlzIG1pZ2h0IG5vdCBiZSBpbW1lZGlhdGVseSBmdXp6ZWFibGUgd2l0aCBjb21tb24gc2V0dXBzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBhY3R1YWxseSBtb3VudGVkIHRvIGJlIHN1cmUuIExldCdzIGxvb2sgYXQgYGZzL3Zib3hzZi9zdXBlci5jYCB0byBzZWUgaG93IHRoYXQgaGFwcGVucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg1NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjQ4OjMwLjcyNzg4MjYwMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzAxMDk5MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmJveHNmX2ZpbGxfc3VwZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvdmJveHNmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy92Ym94c2Yvc3VwZXIuYz01ND1zdGF0aWMgaW50IHZib3hzZl9wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKVxcbi0tXFxuZnMvdmJveHNmL3N1cGVyLmMtMTEwLVxcbmZzL3Zib3hzZi9zdXBlci5jOjExMTpzdGF0aWMgaW50IHZib3hzZl9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5mcy92Ym94c2Yvc3VwZXIuYy0xMTIte1xcbi0tXFxuZnMvdmJveHNmL3N1cGVyLmM9Mzg2PXN0YXRpYyBpbnQgdmJveHNmX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL3Zib3hzZi9zdXBlci5jLTM5My1cXG5mcy92Ym94c2Yvc3VwZXIuYzozOTQ6XFx0cmV0dXJuIGdldF90cmVlX25vZGV2KGZjLCB2Ym94c2ZfZmlsbF9zdXBlcik7XFxuZnMvdmJveHNmL3N1cGVyLmMtMzk1LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NDg6MzAuODU3OTk5NzVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjI3MDQwODUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB1bmZvbGRzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBWaXJ0dWFsQm94IFNoYXJlZCBGb2xkZXJzIEZpbGVzeXN0ZW0qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGB2Ym94c2ZgIHRoaW5nLiBJIHJlbWVtYmVyIHNlZWluZyBgdmJveHNmX2ZpbGxfc3VwZXJgIGluIHRoZSBrZXJuZWwgc291cmNlLiBSaWdodCwgbGV0J3Mgc3RhcnQgdGhlcmUuIE15IGd1dCB0ZWxscyBtZSB0aGlzIGlzIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgYWN0dWFsbHkgbW91bnRpbmcgdGhlIGZpbGVzeXN0ZW0sIHNvIGl0J3MgYSBnb29kIGVudHJ5IHBvaW50LiBJJ2xsIG5lZWQgdG8gbG9vayBpbiBgZnMvdmJveHNmL3N1cGVyLmNgLiBUaGF0IGZpbGUgc2hvdWxkIGNvbnRhaW4gdGhlIHN1cGVyYmxvY2sgb3BlcmF0aW9ucywgYW5kIGB2Ym94c2ZfZmlsbF9zdXBlcmAgaXMgZGVmaW5pdGVseSBhIGtleSBwYXJ0IG9mIHRoYXQuIExldCdzIHNlZSB3aGF0J3MgZ29pbmcgb24gaW4gdGhlcmUgYW5kIHdvcmsgYmFjayBmcm9tIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODI2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NDg6MzMuNDg1MDQyOTU0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2NzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3Zib3hzZi9zdXBlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDExMTpcXHRzdGF0aWMgaW50IHZib3hzZl9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4gMTEyOlxcdHtcXG4gMTEzOlxcdFxcdHN0cnVjdCB2Ym94c2ZfZnNfY29udGV4dCAqY3R4ID0gZmMtXFx1MDAzZWZzX3ByaXZhdGU7XFxuIDExNDpcXHRcXHRzdHJ1Y3Qgc2hmbF9zdHJpbmcgKmZvbGRlcl9uYW1lLCByb290X3BhdGg7XFxuIDExNTpcXHRcXHRzdHJ1Y3QgdmJveHNmX3NiaSAqc2JpO1xcbiAxMTY6XFx0XFx0c3RydWN0IGRlbnRyeSAqZHJvb3Q7XFxuIDExNzpcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlyb290O1xcbiAxMTg6XFx0XFx0Y2hhciAqbmxzX25hbWU7XFxuIDExOTpcXHRcXHRzaXplX3Qgc2l6ZTtcXG4gMTIwOlxcdFxcdGludCBlcnI7XFxuIDEyMTpcXHRcXG4gMTIyOlxcdFxcdGlmICghZmMtXFx1MDAzZXNvdXJjZSlcXG4gMTIzOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAxMjQ6XFx0XFxuIDEyNTpcXHRcXHRzYmkgPSBremFsbG9jX29iaigqc2JpKTtcXG4gMTI2OlxcdFxcdGlmICghc2JpKVxcbiAxMjc6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDEyODpcXHRcXG4gMTI5OlxcdFxcdHNiaS1cXHUwMDNlbyA9IGN0eC1cXHUwMDNlbztcXG4gMTMwOlxcdFxcdGlkcl9pbml0KFxcdTAwMjZzYmktXFx1MDAzZWlub19pZHIpO1xcbiAxMzE6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnNiaS1cXHUwMDNlaW5vX2lkcl9sb2NrKTtcXG4gMTMyOlxcdFxcdHNiaS1cXHUwMDNlbmV4dF9nZW5lcmF0aW9uID0gMTtcXG4gMTMzOlxcdFxcdHNiaS1cXHUwMDNlYmRpX2lkID0gLTE7XFxuIDEzNDpcXHRcXG4gMTM1OlxcdFxcdC8qIExvYWQgbmxzIGlmIG5vdCB1dGY4ICovXFxuIDEzNjpcXHRcXHRubHNfbmFtZSA9IGN0eC1cXHUwMDNlbmxzX25hbWUgPyBjdHgtXFx1MDAzZW5sc19uYW1lIDogdmJveHNmX2RlZmF1bHRfbmxzO1xcbiAxMzc6XFx0XFx0aWYgKHN0cmNtcChubHNfbmFtZSwgXFxcInV0ZjhcXFwiKSAhPSAwKSB7XFxuIDEzODpcXHRcXHRcXHRpZiAobmxzX25hbWUgPT0gdmJveHNmX2RlZmF1bHRfbmxzKVxcbiAxMzk6XFx0XFx0XFx0XFx0c2JpLVxcdTAwM2VubHMgPSBsb2FkX25sc19kZWZhdWx0KCk7XFxuIDE0MDpcXHRcXHRcXHRlbHNlXFxuIDE0MTpcXHRcXHRcXHRcXHRzYmktXFx1MDAzZW5scyA9IGxvYWRfbmxzKG5sc19uYW1lKTtcXG4gMTQyOlxcdFxcbiAxNDM6XFx0XFx0XFx0aWYgKCFzYmktXFx1MDAzZW5scykge1xcbiAxNDQ6XFx0XFx0XFx0XFx0dmJnX2VycihcXFwidmJveHNmOiBDb3VudCBub3QgbG9hZCAnJXMnIG5sc1xcXFxuXFxcIiwgbmxzX25hbWUpO1xcbiAxNDU6XFx0XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4gMTQ2OlxcdFxcdFxcdFxcdGdvdG8gZmFpbF9kZXN0cm95X2lkcjtcXG4gMTQ3OlxcdFxcdFxcdH1cXG4gMTQ4OlxcdFxcdH1cXG4gMTQ5OlxcdFxcbiAxNTA6XFx0XFx0c2JpLVxcdTAwM2ViZGlfaWQgPSBpZGFfYWxsb2MoXFx1MDAyNnZib3hzZl9iZGlfaWRhLCBHRlBfS0VSTkVMKTtcXG4gMTUxOlxcdFxcdGlmIChzYmktXFx1MDAzZWJkaV9pZCBcXHUwMDNjIDApIHtcXG4gMTUyOlxcdFxcdFxcdGVyciA9IHNiaS1cXHUwMDNlYmRpX2lkO1xcbiAxNTM6XFx0XFx0XFx0Z290byBmYWlsX2ZyZWU7XFxuIDE1NDpcXHRcXHR9XFxuIDE1NTpcXHRcXG4gMTU2OlxcdFxcdGVyciA9IHN1cGVyX3NldHVwX2JkaV9uYW1lKHNiLCBcXFwidmJveHNmLSVkXFxcIiwgc2JpLVxcdTAwM2ViZGlfaWQpO1xcbiAxNTc6XFx0XFx0aWYgKGVycilcXG4gMTU4OlxcdFxcdFxcdGdvdG8gZmFpbF9mcmVlO1xcbiAxNTk6XFx0XFx0c2ItXFx1MDAzZXNfYmRpLVxcdTAwM2VyYV9wYWdlcyA9IDA7XFxuIDE2MDpcXHRcXHRzYi1cXHUwMDNlc19iZGktXFx1MDAzZWlvX3BhZ2VzID0gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NDg6MzMuNDg1MTYyMTU0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjI4NzMxNzc1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHZib3hzZl9maWxsX3N1cGVyYCBmdW5jdGlvbi4gSSBuZWVkIGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgd29ya3MuIEkgd2FudCB0byBzZWUgcHJlY2lzZWx5IGhvdyB0aGUgdmlydHVhbGJveCBzaGFyZWQgZm9sZGVyIGZpbGUgc3lzdGVtIGlzIGluaXRpYWxpemVkLiBUaGlzIGlzIGEgY3JpdGljYWwgY29tcG9uZW50IGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBndWVzdCBPUy4gVW5kZXJzdGFuZGluZyB0aGlzIGZpbGxzIGluIHRoZSBnYXBzIGZvciB0aGUgc2hhcmVkIGZvbGRlciBmdW5jdGlvbmFsaXR5IGFuZCBob3cgdGhlIGZpbGVzeXN0ZW0gaXMgbW91bnRlZCBhbmQgbWFuYWdlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg1NywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NDg6MzUuNzcyNDgzMjU3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3Zib3hzZi9zdXBlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2MSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE2MTpcXHRcXG4gMTYyOlxcdFxcdC8qIFR1cm4gc291cmNlIGludG8gYSBzaGZsX3N0cmluZyBhbmQgbWFwIHRoZSBmb2xkZXIgKi9cXG4gMTYzOlxcdFxcdHNpemUgPSBzdHJsZW4oZmMtXFx1MDAzZXNvdXJjZSkgKyAxO1xcbiAxNjQ6XFx0XFx0Zm9sZGVyX25hbWUgPSBrbWFsbG9jKFNIRkxTVFJJTkdfSEVBREVSX1NJWkUgKyBzaXplLCBHRlBfS0VSTkVMKTtcXG4gMTY1OlxcdFxcdGlmICghZm9sZGVyX25hbWUpIHtcXG4gMTY2OlxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuIDE2NzpcXHRcXHRcXHRnb3RvIGZhaWxfZnJlZTtcXG4gMTY4OlxcdFxcdH1cXG4gMTY5OlxcdFxcdGZvbGRlcl9uYW1lLVxcdTAwM2VzaXplID0gc2l6ZTtcXG4gMTcwOlxcdFxcdGZvbGRlcl9uYW1lLVxcdTAwM2VsZW5ndGggPSBzaXplIC0gMTtcXG4gMTcxOlxcdFxcdHN0cnNjcHkoZm9sZGVyX25hbWUtXFx1MDAzZXN0cmluZy51dGY4LCBmYy1cXHUwMDNlc291cmNlLCBzaXplKTtcXG4gMTcyOlxcdFxcdGVyciA9IHZib3hzZl9tYXBfZm9sZGVyKGZvbGRlcl9uYW1lLCBcXHUwMDI2c2JpLVxcdTAwM2Vyb290KTtcXG4gMTczOlxcdFxcdGtmcmVlKGZvbGRlcl9uYW1lKTtcXG4gMTc0OlxcdFxcdGlmIChlcnIpIHtcXG4gMTc1OlxcdFxcdFxcdHZiZ19lcnIoXFxcInZib3hzZjogSG9zdCByZWplY3RlZCBtb3VudCBvZiAnJXMnIHdpdGggZXJyb3IgJWRcXFxcblxcXCIsXFxuIDE3NjpcXHRcXHRcXHRcXHRmYy1cXHUwMDNlc291cmNlLCBlcnIpO1xcbiAxNzc6XFx0XFx0XFx0Z290byBmYWlsX2ZyZWU7XFxuIDE3ODpcXHRcXHR9XFxuIDE3OTpcXHRcXG4gMTgwOlxcdFxcdHJvb3RfcGF0aC5sZW5ndGggPSAxO1xcbiAxODE6XFx0XFx0cm9vdF9wYXRoLnNpemUgPSAyO1xcbiAxODI6XFx0XFx0cm9vdF9wYXRoLnN0cmluZy51dGY4WzBdID0gJy8nO1xcbiAxODM6XFx0XFx0cm9vdF9wYXRoLnN0cmluZy51dGY4WzFdID0gMDtcXG4gMTg0OlxcdFxcdGVyciA9IHZib3hzZl9zdGF0KHNiaSwgXFx1MDAyNnJvb3RfcGF0aCwgXFx1MDAyNnNiaS1cXHUwMDNlcm9vdF9pbmZvKTtcXG4gMTg1OlxcdFxcdGlmIChlcnIpXFxuIDE4NjpcXHRcXHRcXHRnb3RvIGZhaWxfdW5tYXA7XFxuIDE4NzpcXHRcXG4gMTg4OlxcdFxcdHNiLVxcdTAwM2VzX21hZ2ljID0gVkJPWFNGX1NVUEVSX01BR0lDO1xcbiAxODk6XFx0XFx0c2ItXFx1MDAzZXNfYmxvY2tzaXplID0gMTAyNDtcXG4gMTkwOlxcdFxcdHNiLVxcdTAwM2VzX21heGJ5dGVzID0gTUFYX0xGU19GSUxFU0laRTtcXG4gMTkxOlxcdFxcdHNiLVxcdTAwM2VzX29wID0gXFx1MDAyNnZib3hzZl9zdXBlcl9vcHM7XFxuIDE5MjpcXHRcXHRzZXRfZGVmYXVsdF9kX29wKHNiLCBcXHUwMDI2dmJveHNmX2RlbnRyeV9vcHMpO1xcbiAxOTM6XFx0XFxuIDE5NDpcXHRcXHRpcm9vdCA9IGlnZXRfbG9ja2VkKHNiLCAwKTtcXG4gMTk1OlxcdFxcdGlmICghaXJvb3QpIHtcXG4gMTk2OlxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuIDE5NzpcXHRcXHRcXHRnb3RvIGZhaWxfdW5tYXA7XFxuIDE5ODpcXHRcXHR9XFxuIDE5OTpcXHRcXHR2Ym94c2ZfaW5pdF9pbm9kZShzYmksIGlyb290LCBcXHUwMDI2c2JpLVxcdTAwM2Vyb290X2luZm8sIGZhbHNlKTtcXG4gMjAwOlxcdFxcdHVubG9ja19uZXdfaW5vZGUoaXJvb3QpO1xcbiAyMDE6XFx0XFxuIDIwMjpcXHRcXHRkcm9vdCA9IGRfbWFrZV9yb290KGlyb290KTtcXG4gMjAzOlxcdFxcdGlmICghZHJvb3QpIHtcXG4gMjA0OlxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuIDIwNTpcXHRcXHRcXHRnb3RvIGZhaWxfdW5tYXA7XFxuIDIwNjpcXHRcXHR9XFxuIDIwNzpcXHRcXG4gMjA4OlxcdFxcdHNiLVxcdTAwM2VzX3Jvb3QgPSBkcm9vdDtcXG4gMjA5OlxcdFxcdHNiLVxcdTAwM2VzX2ZzX2luZm8gPSBzYmk7XFxuIDIxMDpcXHRcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NDg6MzUuNzcyNjM1NjM3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjY5NjIyMTYwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgdmJveHNmX21hcF9mb2xkZXJgKipcblxuT2theSwgc28gYHZib3hzZl9tYXBfZm9sZGVyYCBoYXMgcG9wcGVkIHVwIGluIG15IHdvcmsuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIHVuZGVyc3RhbmQgaXRzIG9yaWdpbi4gV2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBkZWZpbmVkPyBJIG5lZWQgdG8gdHJhY2UgaXRzIGltcGxlbWVudGF0aW9uIHRvIGdyYXNwIGl0cyBwdXJwb3NlLCBhcmd1bWVudHMsIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIga2VybmVsIGNvbXBvbmVudHMuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UgY29kZSBhbmQgc3RhcnQgdHJhY2tpbmcgaXQgZG93bi4gSSdtIGFzc3VtaW5nIGl0J3MgcmVsYXRlZCB0byBWaXJ0dWFsQm94J3Mgc2hhcmVkIGZvbGRlcnMsIGJ1dCBhIGNvbmNyZXRlIGRlZmluaXRpb24gd2lsbCBwcm92aWRlIGNydWNpYWwgY29udGV4dCBmb3IgbXkgY3VycmVudCB0YXNrLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZGlnIHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODAwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzo0ODozOC40Njg4NTk2ODlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTk4MjE4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2Ym94c2ZfbWFwX2ZvbGRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy92Ym94c2YvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Zib3hzZi9zdXBlci5jPTExMT1zdGF0aWMgaW50IHZib3hzZl9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL3Zib3hzZi9zdXBlci5jLTE3MS1cXHRzdHJzY3B5KGZvbGRlcl9uYW1lLVxcdTAwM2VzdHJpbmcudXRmOCwgZmMtXFx1MDAzZXNvdXJjZSwgc2l6ZSk7XFxuZnMvdmJveHNmL3N1cGVyLmM6MTcyOlxcdGVyciA9IHZib3hzZl9tYXBfZm9sZGVyKGZvbGRlcl9uYW1lLCBcXHUwMDI2c2JpLVxcdTAwM2Vyb290KTtcXG5mcy92Ym94c2Yvc3VwZXIuYy0xNzMtXFx0a2ZyZWUoZm9sZGVyX25hbWUpO1xcbi0tXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jPTUzPXN0YXRpYyBpbnQgdmJveHNmX2NhbGwodTMyIGZ1bmN0aW9uLCB2b2lkICpwYXJtcywgdTMyIHBhcm1fY291bnQsIGludCAqc3RhdHVzKVxcbi0tXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTc0LVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYzo3NTppbnQgdmJveHNmX21hcF9mb2xkZXIoc3RydWN0IHNoZmxfc3RyaW5nICpmb2xkZXJfbmFtZSwgdTMyICpyb290KVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy03Ni17XFxuLS1cXG5mcy92Ym94c2YvdmZzbW9kLmg9MTMyPWludCB2Ym94c2ZfZnNpbmZvKHUzMiByb290LCB1NjQgaGFuZGxlLCB1MzIgZmxhZ3MsXFxuLS1cXG5mcy92Ym94c2YvdmZzbW9kLmgtMTM0LVxcbmZzL3Zib3hzZi92ZnNtb2QuaDoxMzU6aW50IHZib3hzZl9tYXBfZm9sZGVyKHN0cnVjdCBzaGZsX3N0cmluZyAqZm9sZGVyX25hbWUsIHUzMiAqcm9vdCk7XFxuZnMvdmJveHNmL3Zmc21vZC5oLTEzNi1pbnQgdmJveHNmX3VubWFwX2ZvbGRlcih1MzIgcm9vdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjQ4OjM4LjYxNDg0NjkyM1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTExODg5NDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhhdCBrZXJuZWwgY29kZTpcblxuKipBbmFseXppbmcgYHZib3hzZl9tYXBfZm9sZGVyYCBpbiBgZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jYCoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gYHZib3hzZl9tYXBfZm9sZGVyYCB3aXRoaW4gYGZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoYXQncyB0aGUgY29udGV4dCBoZXJlPyBXaGF0J3MgdGhlICpwdXJwb3NlKiBvZiB0aGlzIGZ1bmN0aW9uP1wiIEknbSBhc3N1bWluZywgZ2l2ZW4gdGhlIG5hbWUsIGl0J3MgaW52b2x2ZWQgaW4gbWFwcGluZyBhIHNoYXJlZCBmb2xkZXIgd2l0aGluIHRoZSBWaXJ0dWFsQm94IFNoYXJlZCBGb2xkZXIgZmlsZXN5c3RlbS4gVGhlIFwid3JhcHBlcnNcIiBwYXJ0IHN1Z2dlc3RzIGl0J3MgbGlrZWx5IGEgbGF5ZXIgb2YgYWJzdHJhY3Rpb24gb3IgYSBoZWxwZXIgZnVuY3Rpb24gdGhhdCBtaWdodCBiZSBpbnRlcmZhY2luZyB3aXRoIG90aGVyIHVuZGVybHlpbmcgY29tcG9uZW50cywgcGVyaGFwcyB0aGUgY29yZSBzaGFyZWQgZm9sZGVyIGRyaXZlciBvciB1c2VyLXNwYWNlIGludGVyYWN0aW9uLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGRhdGEgc3RydWN0dXJlcyB0aGlzIGZ1bmN0aW9uIGlzIG1hbmlwdWxhdGluZy4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgaW5vZGVzLCBkZW50cnkgc3RydWN0dXJlcywgVmlydHVhbEJveC1zcGVjaWZpYyBtZXRhZGF0YSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFdoYXQgcGFyYW1ldGVycyBkb2VzIGl0IHRha2U/IEkgc2hvdWxkIGxvb2sgZm9yIHRoZSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBmaXJzdCB0byB1bmRlcnN0YW5kIGl0cyBpbnB1dHMgYW5kIHJldHVybiB2YWx1ZXMuIFRoZW4sIEknbGwgY2hlY2sgaXRzIHVzYWdlLiBXaGVyZSBpcyBpdCBiZWluZyBjYWxsZWQgZnJvbT8gVGhhdCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgaXQgZml0cyBpbnRvIHRoZSBvdmVyYWxsIHNoYXJlZCBmb2xkZXIgYXJjaGl0ZWN0dXJlLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgZnVuY3Rpb24ncyBpbnRlcm5hbCBsb2dpYy4gV2hhdCBhcmUgdGhlIGtleSBvcGVyYXRpb25zIGJlaW5nIHBlcmZvcm1lZD8gSXMgaXQgYWxsb2NhdGluZyBtZW1vcnk/IEluaXRpYWxpemluZyBzb21lIGtpbmQgb2YgbWFwcGluZyB0YWJsZT8gTWFraW5nIGNhbGxzIHRvIG90aGVyIGtlcm5lbCBmdW5jdGlvbnMsIG1heWJlIHJlbGF0ZWQgdG8gZmlsZSBzeXN0ZW0gb3BlcmF0aW9ucyBvciBtZW1vcnkgbWFuYWdlbWVudD8gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBlcnJvciBoYW5kbGluZ+KAlGhvdyBhcmUgcG90ZW50aWFsIGZhaWx1cmVzIG1hbmFnZWQsIGFuZCB3aGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciB0aGUgc2hhcmVkIGZvbGRlciBmdW5jdGlvbmFsaXR5P1xuXG5JJ2xsIGFsc28ga2VlcCBpbiBtaW5kIHBvdGVudGlhbCBhcmVhcyBvZiBpbnRlcmVzdCBmb3IgcGVyZm9ybWFuY2UuIEFyZSB0aGVyZSBhbnkgbG9vcHMgdGhhdCBjb3VsZCBiZWNvbWUgYm90dGxlbmVja3MgdW5kZXIgaGVhdnkgbG9hZD8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIG1lbW9yeSBhbGxvY2F0aW9ucyBvciBkZWFsbG9jYXRpb25zIHRoYXQgY291bGQgYmUgb3B0aW1pemVkPyBJJ20gcHJvYmFibHkgZ29pbmcgdG8gbmVlZCB0byBsb29rIGF0IGFkamFjZW50IGNvZGUgYW5kIGRvY3VtZW50YXRpb24gZm9yIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcuXG5cblVsdGltYXRlbHksIEkgd2FudCB0byBmb3JtIGEgY29tcGxldGUgbWVudGFsIG1vZGVsIG9mIGhvdyBgdmJveHNmX21hcF9mb2xkZXJgIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIFZpcnR1YWxCb3ggU2hhcmVkIEZvbGRlcnMsIGZyb20gaXRzIHB1cnBvc2UgYW5kIGludGVncmF0aW9uIHRvIGl0cyBpbnRlcm5hbCBvcGVyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDA2LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NDg6NDMuMTI2NzM4NTZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkxMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDc1OlxcdGludCB2Ym94c2ZfbWFwX2ZvbGRlcihzdHJ1Y3Qgc2hmbF9zdHJpbmcgKmZvbGRlcl9uYW1lLCB1MzIgKnJvb3QpXFxuICA3NjpcXHR7XFxuICA3NzpcXHRcXHRzdHJ1Y3Qgc2hmbF9tYXBfZm9sZGVyIHBhcm1zO1xcbiAgNzg6XFx0XFx0aW50IGVyciwgc3RhdHVzO1xcbiAgNzk6XFx0XFxuICA4MDpcXHRcXHRwYXJtcy5wYXRoLnR5cGUgPSBWTU1ERVZfSEdDTV9QQVJNX1RZUEVfTElOQUREUl9LRVJORUw7XFxuICA4MTpcXHRcXHRwYXJtcy5wYXRoLnUucG9pbnRlci5zaXplID0gc2hmbF9zdHJpbmdfYnVmX3NpemUoZm9sZGVyX25hbWUpO1xcbiAgODI6XFx0XFx0cGFybXMucGF0aC51LnBvaW50ZXIudS5saW5lYXJfYWRkciA9ICh1aW50cHRyX3QpZm9sZGVyX25hbWU7XFxuICA4MzpcXHRcXG4gIDg0OlxcdFxcdHBhcm1zLnJvb3QudHlwZSA9IFZNTURFVl9IR0NNX1BBUk1fVFlQRV8zMkJJVDtcXG4gIDg1OlxcdFxcdHBhcm1zLnJvb3QudS52YWx1ZTMyID0gMDtcXG4gIDg2OlxcdFxcbiAgODc6XFx0XFx0cGFybXMuZGVsaW1pdGVyLnR5cGUgPSBWTU1ERVZfSEdDTV9QQVJNX1RZUEVfMzJCSVQ7XFxuICA4ODpcXHRcXHRwYXJtcy5kZWxpbWl0ZXIudS52YWx1ZTMyID0gJy8nO1xcbiAgODk6XFx0XFxuICA5MDpcXHRcXHRwYXJtcy5jYXNlX3NlbnNpdGl2ZS50eXBlID0gVk1NREVWX0hHQ01fUEFSTV9UWVBFXzMyQklUO1xcbiAgOTE6XFx0XFx0cGFybXMuY2FzZV9zZW5zaXRpdmUudS52YWx1ZTMyID0gMTtcXG4gIDkyOlxcdFxcbiAgOTM6XFx0XFx0ZXJyID0gdmJveHNmX2NhbGwoU0hGTF9GTl9NQVBfRk9MREVSLCBcXHUwMDI2cGFybXMsIFNIRkxfQ1BBUk1TX01BUF9GT0xERVIsXFxuICA5NDpcXHRcXHRcXHRcXHQgIFxcdTAwMjZzdGF0dXMpO1xcbiAgOTU6XFx0XFx0aWYgKGVyciA9PSAtRU5PU1lTIFxcdTAwMjZcXHUwMDI2IHN0YXR1cyA9PSBWRVJSX05PVF9JTVBMRU1FTlRFRClcXG4gIDk2OlxcdFxcdFxcdHZiZ19lcnIoXFxcIiVzOiBFcnJvciBob3N0IGlzIHRvbyBvbGRcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4gIDk3OlxcdFxcbiAgOTg6XFx0XFx0KnJvb3QgPSBwYXJtcy5yb290LnUudmFsdWUzMjtcXG4gIDk5OlxcdFxcdHJldHVybiBlcnI7XFxuIDEwMDpcXHR9XFxuIDEwMTpcXHRcXG4gMTAyOlxcdGludCB2Ym94c2ZfdW5tYXBfZm9sZGVyKHUzMiByb290KVxcbiAxMDM6XFx0e1xcbiAxMDQ6XFx0XFx0c3RydWN0IHNoZmxfdW5tYXBfZm9sZGVyIHBhcm1zO1xcbiAxMDU6XFx0XFxuIDEwNjpcXHRcXHRwYXJtcy5yb290LnR5cGUgPSBWTU1ERVZfSEdDTV9QQVJNX1RZUEVfMzJCSVQ7XFxuIDEwNzpcXHRcXHRwYXJtcy5yb290LnUudmFsdWUzMiA9IHJvb3Q7XFxuIDEwODpcXHRcXG4gMTA5OlxcdFxcdHJldHVybiB2Ym94c2ZfY2FsbChTSEZMX0ZOX1VOTUFQX0ZPTERFUiwgXFx1MDAyNnBhcm1zLFxcbiAxMTA6XFx0XFx0XFx0XFx0ICAgU0hGTF9DUEFSTVNfVU5NQVBfRk9MREVSLCBOVUxMKTtcXG4gMTExOlxcdH1cXG4gMTEyOlxcdFxcbiAxMTM6XFx0LyoqXFxuIDExNDpcXHQgKiB2Ym94c2ZfY3JlYXRlIC0gQ3JlYXRlIGEgbmV3IGZpbGUgb3IgZm9sZGVyXFxuIDExNTpcXHQgKiBAcm9vdDogICAgICAgICBSb290IG9mIHRoZSBzaGFyZWQgZm9sZGVyIGluIHdoaWNoIHRvIGNyZWF0ZSB0aGUgZmlsZVxcbiAxMTY6XFx0ICogQHBhcnNlZF9wYXRoOiAgVGhlIHBhdGggb2YgdGhlIGZpbGUgb3IgZm9sZGVyIHJlbGF0aXZlIHRvIHRoZSBzaGFyZWQgZm9sZGVyXFxuIDExNzpcXHQgKiBAY3JlYXRlX3Bhcm1zOiBQYXJhbWV0ZXJzIGZvciBmaWxlL2ZvbGRlciBjcmVhdGlvbi5cXG4gMTE4OlxcdCAqXFxuIDExOTpcXHQgKiBDcmVhdGUgYSBuZXcgZmlsZSBvciBmb2xkZXIgb3Igb3BlbiBhbiBleGlzdGluZyBvbmUgaW4gYSBzaGFyZWQgZm9sZGVyLlxcbiAxMjA6XFx0ICogTm90ZSB0aGlzIGZ1bmN0aW9uIGFsd2F5cyByZXR1cm5zIDAgLyBzdWNjZXNzIHVubGVzcyBhbiBleGNlcHRpb25hbCBjb25kaXRpb25cXG4gMTIxOlxcdCAqIG9jY3VycyAtIG91dCBvZiBtZW1vcnksIGludmFsaWQgYXJndW1lbnRzLCBldGMuIElmIHRoZSBmaWxlIG9yIGZvbGRlciBjb3VsZFxcbiAxMjI6XFx0ICogbm90IGJlIG9wZW5lZCBvciBjcmVhdGVkLCBjcmVhdGVfcGFybXMtXFx1MDAzZWhhbmRsZSB3aWxsIGJlIHNldCB0b1xcbiAxMjM6XFx0ICogU0hGTF9IQU5ETEVfTklMIG9uIHJldHVybi4gIEluIHRoaXMgY2FzZSB0aGUgdmFsdWUgaW4gY3JlYXRlX3Bhcm1zLVxcdTAwM2VyZXN1bHRcXG4gMTI0OlxcdCAqIHByb3ZpZGVzIGluZm9ybWF0aW9uIGFzIHRvIHdoeSAoZS5nLiBTSEZMX0ZJTEVfRVhJU1RTKSwgY3JlYXRlX3Bhcm1zLVxcdTAwM2VyZXN1bHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NDg6NDMuMTI2ODE5MjlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI0NDQ5MDgzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRlY29kaW5nIHRoZSBWaXJ0dWFsQm94IFNoYXJlZCBGb2xkZXIgQ2FsbCBDaGFpbioqXG5cbkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyB6ZXJvZXMgaW4gb24gYSBzcGVjaWZpYyBmdW5jdGlvbiBjYWxsOiBgdmJveHNmX2NhbGxgLiBNeSBpbW1lZGlhdGUgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoaXMgaXMgdGhlIGVudHJ5IHBvaW50IGZvciBzb21lIGtpbmQgb2Ygc2hhcmVkIGZvbGRlciBpbnRlcmFjdGlvbiB3aXRoaW4gVmlydHVhbEJveCdzIGd1ZXN0IGFkZGl0aW9ucy4gVGhlbiwgdGhlIGNvbm5lY3Rpb24gYmVjb21lcyBjbGVhcjogYHZib3hzZl9jYWxsYCAqZGlyZWN0bHkqIGNhbGxzIGB2YmdfaGdjbV9jYWxsYC4gVGhpcyBwb2ludHMgdG93YXJkcyBhIHNwZWNpZmljIGFyY2hpdGVjdHVyYWwgcmVsYXRpb25zaGlwLlxuXG5NeSBhc3Nlc3NtZW50OiBgdmJnX2hnY21fY2FsbGAgbGlrZWx5IHJlcHJlc2VudHMgdGhlIHVuZGVybHlpbmcgSG9zdC1HdWVzdCBDb21tdW5pY2F0aW9uIE1lY2hhbmlzbSAoSEdDTSkgaXRzZWxmLCBhbmQgYHZib3hzZl9jYWxsYCBpcyBhY3RpbmcgYXMgYSBzcGVjaWZpYyAqbGF5ZXIqIHRoYXQga25vd3MgaG93IHRvIHdyYXAgc2hhcmVkIGZvbGRlciBvcGVyYXRpb25zIGZvciB0aGF0IG1lY2hhbmlzbS4gSXQncyBhIGNsZWFyIGRlbGVnYXRpb24gb2YgcmVzcG9uc2liaWxpdHkuIEl0IHRlbGxzIG1lIHRoYXQgdGhlIHNoYXJlZCBmb2xkZXJzIGZ1bmN0aW9uYWxpdHkgaXMgYnVpbHQgKm9uIHRvcCogb2YgYSBtb3JlIGdlbmVyaWMgZ3Vlc3QtaG9zdCBjb21tdW5pY2F0aW9uIGluZnJhc3RydWN0dXJlLiBUaGUgXCJzZlwiIG1vZHVsZSBhY3RzIGFzIGEgZnJvbnQtZW5kIG9yIHNlcnZpY2UgaGFuZGxlciwgd2hpbGUgdGhlIFwiaGdjbVwiIG1vZHVsZSBwcm92aWRlcyBhIGxvdyBsZXZlbCwgYWJzdHJhY3RlZCB0cmFuc3BvcnQuIFRoaXMgc3RydWN0dXJlIHNob3VsZCBzaW1wbGlmeSBtYW5hZ2luZyBkaWZmZXJlbnQgc2VydmljZXMgb3IgbW9kdWxlcyB0aGF0IG1pZ2h0IGJlIGltcGxlbWVudGVkIGluIHRoZSBzYW1lIGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIgdG8gdW5kZXJzdGFuZCBob3cgbWFueSBsYXllcnMgb2YgY29tbXVuaWNhdGlvbiBhYnN0cmFjdGlvbiB0aGVyZSBtaWdodCBiZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Njg1OSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NDg6NDYuMzcxMzEzMDc3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTY3MDYyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmJveHNmX2NhbGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvdmJveHNmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM9NDA9dm9pZCB2Ym94c2ZfZGlzY29ubmVjdCh2b2lkKVxcbi0tXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTUyLVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYzo1MzpzdGF0aWMgaW50IHZib3hzZl9jYWxsKHUzMiBmdW5jdGlvbiwgdm9pZCAqcGFybXMsIHUzMiBwYXJtX2NvdW50LCBpbnQgKnN0YXR1cylcXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtNTQte1xcbi0tXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jPTc1PWludCB2Ym94c2ZfbWFwX2ZvbGRlcihzdHJ1Y3Qgc2hmbF9zdHJpbmcgKmZvbGRlcl9uYW1lLCB1MzIgKnJvb3QpXFxuLS1cXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtOTItXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jOjkzOlxcdGVyciA9IHZib3hzZl9jYWxsKFNIRkxfRk5fTUFQX0ZPTERFUiwgXFx1MDAyNnBhcm1zLCBTSEZMX0NQQVJNU19NQVBfRk9MREVSLFxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy05NC1cXHRcXHRcXHQgIFxcdTAwMjZzdGF0dXMpO1xcbi0tXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jPTEwMj1pbnQgdmJveHNmX3VubWFwX2ZvbGRlcih1MzIgcm9vdClcXG4tLVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy0xMDgtXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jOjEwOTpcXHRyZXR1cm4gdmJveHNmX2NhbGwoU0hGTF9GTl9VTk1BUF9GT0xERVIsIFxcdTAwMjZwYXJtcyxcXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMTEwLVxcdFxcdFxcdCAgIFNIRkxfQ1BBUk1TX1VOTUFQX0ZPTERFUiwgTlVMTCk7XFxuLS1cXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM9MTMwPWludCB2Ym94c2ZfY3JlYXRlKHUzMiByb290LCBzdHJ1Y3Qgc2hmbF9zdHJpbmcgKnBhcnNlZF9wYXRoLFxcbi0tXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTE0NS1cXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM6MTQ2OlxcdHJldHVybiB2Ym94c2ZfY2FsbChTSEZMX0ZOX0NSRUFURSwgXFx1MDAyNnBhcm1zLCBTSEZMX0NQQVJNU19DUkVBVEUsIE5VTEwpO1xcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy0xNDctfVxcbi0tXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jPTE0OT1pbnQgdmJveHNmX2Nsb3NlKHUzMiByb290LCB1NjQgaGFuZGxlKVxcbi0tXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTE1OC1cXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM6MTU5OlxcdHJldHVybiB2Ym94c2ZfY2FsbChTSEZMX0ZOX0NMT1NFLCBcXHUwMDI2cGFybXMsIFNIRkxfQ1BBUk1TX0NMT1NFLCBOVUxMKTtcXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMTYwLX1cXG4tLVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYz0xNjI9aW50IHZib3hzZl9yZW1vdmUodTMyIHJvb3QsIHN0cnVjdCBzaGZsX3N0cmluZyAqcGFyc2VkX3BhdGgsIHUzMiBmbGFncylcXG4tLVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy0xNzUtXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jOjE3NjpcXHRyZXR1cm4gdmJveHNmX2NhbGwoU0hGTF9GTl9SRU1PVkUsIFxcdTAwMjZwYXJtcywgU0hGTF9DUEFSTVNfUkVNT1ZFLCBOVUxMKTtcXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMTc3LX1cXG4tLVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYz0xNzk9aW50IHZib3hzZl9yZW5hbWUodTMyIHJvb3QsIHN0cnVjdCBzaGZsX3N0cmluZyAqc3JjX3BhdGgsXFxuLS1cXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMTk3LVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYzoxOTg6XFx0cmV0dXJuIHZib3hzZl9jYWxsKFNIRkxfRk5fUkVOQU1FLCBcXHUwMDI2cGFybXMsIFNIRkxfQ1BBUk1TX1JFTkFNRSwgTlVMTCk7XFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTE5OS19XFxuLS1cXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM9MjAxPWludCB2Ym94c2ZfcmVhZCh1MzIgcm9vdCwgdTY0IGhhbmRsZSwgdTY0IG9mZnNldCwgdTMyICpidWZfbGVuLCB1OCAqYnVmKVxcbi0tXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTIxOC1cXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM6MjE5OlxcdGVyciA9IHZib3hzZl9jYWxsKFNIRkxfRk5fUkVBRCwgXFx1MDAyNnBhcm1zLCBTSEZMX0NQQVJNU19SRUFELCBOVUxMKTtcXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMjIwLVxcbi0tXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jPTIyNT1pbnQgdmJveHNmX3dyaXRlKHUzMiByb290LCB1NjQgaGFuZGxlLCB1NjQgb2Zmc2V0LCB1MzIgKmJ1Zl9sZW4sIHU4ICpidWYpXFxuLS1cXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMjQyLVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYzoyNDM6XFx0ZXJyID0gdmJveHNmX2NhbGwoU0hGTF9GTl9XUklURSwgXFx1MDAyNnBhcm1zLCBTSEZMX0NQQVJNU19XUklURSwgTlVMTCk7XFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTI0NC1cXG4tLVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYz0yNTA9aW50IHZib3hzZl9kaXJpbmZvKHUzMiByb290LCB1NjQgaGFuZGxlLFxcbi0tXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTI4NC1cXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM6Mjg1OlxcdGVyciA9IHZib3hzZl9jYWxsKFNIRkxfRk5fTElTVCwgXFx1MDAyNnBhcm1zLCBTSEZMX0NQQVJNU19MSVNULCBcXHUwMDI2c3RhdHVzKTtcXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMjg2LVxcdGlmIChlcnIgPT0gLUVOT0RBVEEgXFx1MDAyNlxcdTAwMjYgc3RhdHVzID09IFZFUlJfTk9fTU9SRV9GSUxFUylcXG4tLVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYz0yOTQ9aW50IHZib3hzZl9mc2luZm8odTMyIHJvb3QsIHU2NCBoYW5kbGUsIHUzMiBmbGFncyxcXG4tLVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy0zMTItXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jOjMxMzpcXHRlcnIgPSB2Ym94c2ZfY2FsbChTSEZMX0ZOX0lORk9STUFUSU9OLCBcXHUwMDI2cGFybXMsIFNIRkxfQ1BBUk1TX0lORk9STUFUSU9OLFxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy0zMTQtXFx0XFx0XFx0ICBOVUxMKTtcXG4tLVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYz0zMjA9aW50IHZib3hzZl9yZWFkbGluayh1MzIgcm9vdCwgc3RydWN0IHNoZmxfc3RyaW5nICpwYXJzZWRfcGF0aCxcXG4tLVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy0zMzUtXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jOjMzNjpcXHRyZXR1cm4gdmJveHNmX2NhbGwoU0hGTF9GTl9SRUFETElOSywgXFx1MDAyNnBhcm1zLCBTSEZMX0NQQVJNU19SRUFETElOSyxcXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMzM3LVxcdFxcdFxcdCAgIE5VTEwpO1xcbi0tXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jPTM0MD1pbnQgdmJveHNmX3N5bWxpbmsodTMyIHJvb3QsIHN0cnVjdCBzaGZsX3N0cmluZyAqbmV3X3BhdGgsXFxuLS1cXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMzU5LVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYzozNjA6XFx0cmV0dXJuIHZib3hzZl9jYWxsKFNIRkxfRk5fU1lNTElOSywgXFx1MDAyNnBhcm1zLCBTSEZMX0NQQVJNU19TWU1MSU5LLCBOVUxMKTtcXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMzYxLX1cXG4tLVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYz0zNjM9aW50IHZib3hzZl9zZXRfdXRmOCh2b2lkKVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy0zNjQte1xcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYzozNjU6XFx0cmV0dXJuIHZib3hzZl9jYWxsKFNIRkxfRk5fU0VUX1VURjgsIE5VTEwsIDAsIE5VTEwpO1xcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy0zNjYtfVxcbi0tXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jPTM2OD1pbnQgdmJveHNmX3NldF9zeW1saW5rcyh2b2lkKVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy0zNjkte1xcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYzozNzA6XFx0cmV0dXJuIHZib3hzZl9jYWxsKFNIRkxfRk5fU0VUX1NZTUxJTktTLCBOVUxMLCAwLCBOVUxMKTtcXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMzcxLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NDg6NDYuNDg4MDI2MDM3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNDQ1OTg5MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSdyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBgdmJveHNmX2NhbGxgIEltcGxlbWVudGF0aW9uKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYHZib3hzZl9jYWxsYCBpbXBsZW1lbnRhdGlvbi4gSXQncyB0aGUgY29yZSBvZiBob3cgdGhlIFZpcnR1YWxCb3ggU2hhcmVkIEZvbGRlcnMgZmVhdHVyZSBsaWtlbHkgd29ya3MuIEknbSBnb2luZyB0byBzdGFydCBieSB0cmFjaW5nIHRocm91Z2ggdGhlIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUsIHRoZSBwYXJhbWV0ZXJzIGl0IHRha2VzLCBhbmQgd2hhdCBpdCdzIHVsdGltYXRlbHkgc3VwcG9zZWQgdG8gYWNoaWV2ZS4gV2hhdCdzIHRoZSBwdXJwb3NlIG9mIHRoaXMgcGFydGljdWxhciBzeXN0ZW0gY2FsbD8gSXMgaXQgZm9yIGZpbGUgYWNjZXNzLCBkaXJlY3Rvcnkgb3BlcmF0aW9ucywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBjb21tZW50cyBhcmUgaG9wZWZ1bGx5IGhlbHBmdWwsIGJ1dCBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ3Jhc3AgdGhlIG92ZXJhbGwgY29udGV4dC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBtZWF0IG9mIHRoZSBmdW5jdGlvbiAtIHRoZSBpbXBvcnRhbnQgY29udHJvbCBmbG93IGFuZCBhbnkgZXJyb3IgaGFuZGxpbmcuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgcGFzc2VkIGFuZCBtYW5pcHVsYXRlZCwgYXMgdGhhdCdzIHdoZXJlIHRoZSBjcnVjaWFsIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGd1ZXN0IGFuZCB0aGUgaG9zdCBwcm9iYWJseSBsaWVzLiBMZXQncyBzZWUgaG93IHRoZXkgaGFuZGxlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3Igb3RoZXIgY29uY3VycmVuY3kgaXNzdWVzOyBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMgdGhleSd2ZSBlbXBsb3llZC4gQW5kIG9mIGNvdXJzZSwgSSdtIGV4cGVjdGluZyBzb21lIGNsZXZlciB1c2Ugb2YgdGhlIFZpcnR1YWxCb3gncyBpbnRlcm5hbCBBUElzIG9yIGRldmljZSBkcml2ZXJzLiBUaGlzIGlzIHRoZSBwbGFjZSB0byBsb29rIGZvciB0aGF0IGludGVyYWN0aW9uLiBBbHJpZ2h0LCBsZXQncyBnZXQgaW50byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTIyMywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjQ4OjQ5LjYzMjYyNjk5MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTMsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNTM6XFx0c3RhdGljIGludCB2Ym94c2ZfY2FsbCh1MzIgZnVuY3Rpb24sIHZvaWQgKnBhcm1zLCB1MzIgcGFybV9jb3VudCwgaW50ICpzdGF0dXMpXFxuICA1NDpcXHR7XFxuICA1NTpcXHRcXHRzdHJ1Y3QgdmJnX2RldiAqZ2RldjtcXG4gIDU2OlxcdFxcdGludCBlcnIsIHZib3hfc3RhdHVzO1xcbiAgNTc6XFx0XFxuICA1ODpcXHRcXHRnZGV2ID0gdmJnX2dldF9nZGV2KCk7XFxuICA1OTpcXHRcXHRpZiAoSVNfRVJSKGdkZXYpKVxcbiAgNjA6XFx0XFx0XFx0cmV0dXJuIC1FU0hVVERPV047IC8qIGd1ZXN0LWRldiByZW1vdmVkIHVuZGVybmVhdGggdXMgKi9cXG4gIDYxOlxcdFxcbiAgNjI6XFx0XFx0ZXJyID0gdmJnX2hnY21fY2FsbChnZGV2LCBTSEZMX1JFUVVFU1QsIHZib3hzZl9jbGllbnRfaWQsIGZ1bmN0aW9uLFxcbiAgNjM6XFx0XFx0XFx0XFx0ICAgIFUzMl9NQVgsIHBhcm1zLCBwYXJtX2NvdW50LCBcXHUwMDI2dmJveF9zdGF0dXMpO1xcbiAgNjQ6XFx0XFx0dmJnX3B1dF9nZGV2KGdkZXYpO1xcbiAgNjU6XFx0XFxuICA2NjpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gIDY3OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuICA2ODpcXHRcXG4gIDY5OlxcdFxcdGlmIChzdGF0dXMpXFxuICA3MDpcXHRcXHRcXHQqc3RhdHVzID0gdmJveF9zdGF0dXM7XFxuICA3MTpcXHRcXG4gIDcyOlxcdFxcdHJldHVybiB2Ymdfc3RhdHVzX2NvZGVfdG9fZXJybm8odmJveF9zdGF0dXMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzo0ODo0OS42MzI3MDMwNTFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM3OTQ4MTc4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFZpcnR1YWxCb3ggR3Vlc3QgRGV2aWNlIGFuZCBTeXprYWxsZXIgRnV6emluZyoqXG5cbk9rYXksIHNvIGB2YmdfZ2V0X2dkZXZgIGlzIGhvdyB3ZSBzbmFnIHRoYXQgVmlydHVhbEJveCBndWVzdCBkZXZpY2UuIElmIHdlJ3JlIG5vdCBydW5uaW5nIGluc2lkZSBWaXJ0dWFsQm94LCBpdCdzIGdvaW5nIHRvIGVycm9yIG91dCwgbWVhbmluZyBgdmJveHNmYCB3b24ndCBtb3VudC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiBzeXprYWxsZXIgZnV6eiB0aGlzPyBCdXQgd2FpdCwgZG9lc24ndCBzeXprYWxsZXIgaGF2ZSAqdmJveGd1ZXN0KiBkcml2ZXIgZnV6emluZz8gTGV0IG1lIGNoZWNrLlxuXG5BbHJpZ2h0LCBub3cgSSByZW1lbWJlciwgc3l6a2FsbGVyIHJ1bnMgaW4gUUVNVS4gVGhhdCdzIGEgcHJvYmxlbSwgYmVjYXVzZSBpdCBkb2Vzbid0IGVtdWxhdGUgdGhlIFZpcnR1YWxCb3ggUENJIGRldmljZSBkaXJlY3RseS4gSG1tLCBidXQgZG9lc24ndCBzeXprYWxsZXIgaGF2ZSBzb21ldGhpbmcgbGlrZSBgc3l6X21vdW50X2ltYWdlYD8gRXZlbiB3aXRoIHRoYXQsIEknZCBzdGlsbCBuZWVkIHRoZSB1bmRlcmx5aW5nIGRldmljZS4uLiBTbywgZG9lc24ndCBzeXprYWxsZXIgcHJvdmlkZSBhIGBzeXpfdmJveGd1ZXN0YCBjYWxsPyBObywgaXQgbG9va3MgbGlrZSBpdCBkb2Vzbid0LlxuXG5Pa2F5LCBuZXcgYW5nbGUuIENhbiBJIGZ1enogYHZib3hzZmAgdGhyb3VnaCBgc3l6X21vdW50X2ltYWdlYCwgbWF5YmU/IFdhaXQgYSBzZWNvbmQuLi4gc3l6a2FsbGVyICpyZXBvcnRlZCogYSBwYXRjaCByZWxhdGVkIHRvIHRoaXMhIFRoZSBhdXRob3IgaXMgbGlzdGVkIGFzIFwic3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcIiwgYW5kIGl0IHNheXMgXCJzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcIi5cblxuVGhpcyBpcyBncmVhdCEgVGhhdCBtZWFucyBzeXprYWxsZXIgKmRpZCogYWN0dWFsbHkgZmluZCBhIGJ1ZyBpbiBgdmJveHNmX2Rpcl9lbWl0YCEgVGhlIG15c3RlcnkgaXMgaG93IHN5emthbGxlciBldmVuIGdvdCB0byBgdmJveHNmX2Rpcl9lbWl0YC4gVGltZSB0byBkaXZlIGludG8gYGZzL3Zib3hzZi9kaXIuY2AgYW5kIGZpZ3VyZSBvdXQgaG93IHN5emthbGxlciB0cmlnZ2VyZWQgdGhpcyBjb2RlIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4NzEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzo0ODo1NS4wMTIxODgzODhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3Zib3hzZi9kaXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMTA6XFx0XFx0XFx0XFx0Y3VyICs9IGItXFx1MDAzZWVudHJpZXM7XFxuIDExMTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gMTEyOlxcdFxcdFxcdH1cXG4gMTEzOlxcdFxcbiAxMTQ6XFx0XFx0XFx0LypcXG4gMTE1OlxcdFxcdFxcdCAqIE5vdGUgdGhlIHZib3hzZl9kaXJfaW5mbyBvYmplY3RzIHdlIGFyZSBpdGVyYXRpbmcgb3ZlciBoZXJlXFxuIDExNjpcXHRcXHRcXHQgKiBhcmUgdmFyaWFibGUgc2l6ZWQsIHNvIHRoZSBpbmZvIHBvaW50ZXIgbWF5IGVuZCB1cCBiZWluZ1xcbiAxMTc6XFx0XFx0XFx0ICogdW5hbGlnbmVkLiBUaGlzIGlzIGhvdyB3ZSBnZXQgdGhlIGRhdGEgZnJvbSB0aGUgaG9zdC5cXG4gMTE4OlxcdFxcdFxcdCAqIFNpbmNlIHZib3hzZiBpcyBvbmx5IHN1cHBvcnRlZCBvbiB4ODYgbWFjaGluZXMgdGhpcyBpcyBub3RcXG4gMTE5OlxcdFxcdFxcdCAqIGEgcHJvYmxlbS5cXG4gMTIwOlxcdFxcdFxcdCAqL1xcbiAxMjE6XFx0XFx0XFx0Zm9yIChpID0gMCwgaW5mbyA9IGItXFx1MDAzZWJ1ZjsgaSBcXHUwMDNjIGN0eC1cXHUwMDNlcG9zIC0gY3VyOyBpKyspIHtcXG4gMTIyOlxcdFxcdFxcdFxcdGVuZCA9IFxcdTAwMjZpbmZvLVxcdTAwM2VuYW1lLnN0cmluZy51dGY4W2luZm8tXFx1MDAzZW5hbWUuc2l6ZV07XFxuIDEyMzpcXHRcXHRcXHRcXHQvKiBPbmx5IGhhcHBlbnMgaWYgdGhlIGhvc3QgZ2l2ZXMgdXMgY29ycnVwdCBkYXRhICovXFxuIDEyNDpcXHRcXHRcXHRcXHRpZiAoV0FSTl9PTihlbmQgXFx1MDAzZSAoYi1cXHUwMDNlYnVmICsgYi1cXHUwMDNldXNlZCkpKVxcbiAxMjU6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAxMjY6XFx0XFx0XFx0XFx0aW5mbyA9IGVuZDtcXG4gMTI3OlxcdFxcdFxcdH1cXG4gMTI4OlxcdFxcbiAxMjk6XFx0XFx0XFx0ZW5kID0gXFx1MDAyNmluZm8tXFx1MDAzZW5hbWUuc3RyaW5nLnV0ZjhbaW5mby1cXHUwMDNlbmFtZS5zaXplXTtcXG4gMTMwOlxcdFxcdFxcdGlmIChXQVJOX09OKGVuZCBcXHUwMDNlIChiLVxcdTAwM2VidWYgKyBiLVxcdTAwM2V1c2VkKSkpXFxuIDEzMTpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDEzMjpcXHRcXHRcXHRpZiAoaW5mby1cXHUwMDNlbmFtZS5sZW5ndGggXFx1MDAzZSBpbmZvLVxcdTAwM2VuYW1lLnNpemUpXFxuIDEzMzpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDEzNDpcXHRcXG4gMTM1OlxcdFxcdFxcdC8qIEluZm8gbm93IHBvaW50cyB0byB0aGUgcmlnaHQgZW50cnksIGVtaXQgaXQuICovXFxuIDEzNjpcXHRcXHRcXHRkX3R5cGUgPSB2Ym94c2ZfZ2V0X2RfdHlwZShpbmZvLVxcdTAwM2VpbmZvLmF0dHIubW9kZSk7XFxuIDEzNzpcXHRcXG4gMTM4OlxcdFxcdFxcdC8qXFxuIDEzOTpcXHRcXHRcXHQgKiBPbiAzMi1iaXQgc3lzdGVtcyBwb3MgaXMgNjQtYml0IHNpZ25lZCwgd2hpbGUgaW5vIGlzIDMyLWJpdFxcbiAxNDA6XFx0XFx0XFx0ICogdW5zaWduZWQgc28gZmFrZV9pbm8gbWF5IG92ZXJmbG93LCBjaGVjayBmb3IgdGhpcy5cXG4gMTQxOlxcdFxcdFxcdCAqL1xcbiAxNDI6XFx0XFx0XFx0aWYgKChpbm9fdCkoY3R4LVxcdTAwM2Vwb3MgKyAxKSAhPSAodTY0KShjdHgtXFx1MDAzZXBvcyArIDEpKSB7XFxuIDE0MzpcXHRcXHRcXHRcXHR2YmdfZXJyKFxcXCJ2Ym94c2Y6IGZha2UgaW5vIG92ZXJmbG93LCB0cnVuY2F0aW5nIGRpclxcXFxuXFxcIik7XFxuIDE0NDpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDE0NTpcXHRcXHRcXHR9XFxuIDE0NjpcXHRcXHRcXHRmYWtlX2lubyA9IGN0eC1cXHUwMDNlcG9zICsgMTtcXG4gMTQ3OlxcdFxcbiAxNDg6XFx0XFx0XFx0aWYgKHNiaS1cXHUwMDNlbmxzKSB7XFxuIDE0OTpcXHRcXHRcXHRcXHRjaGFyIGRfbmFtZVtOQU1FX01BWF07XFxuIDE1MDpcXHRcXG4gMTUxOlxcdFxcdFxcdFxcdGVyciA9IHZib3hzZl9ubHNjcHkoc2JpLCBkX25hbWUsIE5BTUVfTUFYLFxcbiAxNTI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGluZm8tXFx1MDAzZW5hbWUuc3RyaW5nLnV0ZjgsXFxuIDE1MzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgaW5mby1cXHUwMDNlbmFtZS5sZW5ndGgpO1xcbiAxNTQ6XFx0XFx0XFx0XFx0aWYgKGVycikge1xcbiAxNTU6XFx0XFx0XFx0XFx0XFx0Lyogc2tpcCBlcnJvbmVvdXMgZW50cnkgYW5kIHByb2NlZWQgKi9cXG4gMTU2OlxcdFxcdFxcdFxcdFxcdGN0eC1cXHUwMDNlcG9zICs9IDE7XFxuIDE1NzpcXHRcXHRcXHRcXHRcXHRnb3RvIHRyeV9uZXh0X2VudHJ5O1xcbiAxNTg6XFx0XFx0XFx0XFx0fVxcbiAxNTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjQ4OjU1LjAxMjMwMjcwOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODIxNjExNDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBTeXprYWxsZXIncyBSZWFjaGFiaWxpdHkgb2YgdGhlIGB2Ym94c2ZgIEZpbGVzeXN0ZW0qKlxuXG5Pa2F5LCBzbyBzeXprYWxsZXIgKmRpZCogZmluZCBhIGJ1ZywgbWVhbmluZyBpdCAqY2FuKiBhY3R1YWxseSByZWFjaCB0aGlzIGNvZGUuIFRoZSBxdWVzdGlvbiBub3cgaXMgKmhvdyo/IE15IGluaXRpYWwgdGhvdWdodCB3YXMgVmlydHVhbEJveCwgc2luY2UgaXQncyBhIHBvc3NpYmlsaXR5IGZvciBzeXprYWxsZXIsIGJ1dCB0aGVuIEkgcmVtZW1iZXIgc3l6a2FsbGVyIGNhbiBydW4gd2l0aCB2YXJpb3VzIFZNIHR5cGVzLiBJdCBoYXMgc3VwcG9ydCBmb3IgbXVsdGlwbGUgVk1zIGFuZCBjYW4gYmUgY29uZmlndXJlZCB3aXRoIGB2bV90eXBlOiBcInFlbXVcImAsIGFuZCBvdGhlcnMuXG5cbkkgd29uZGVyZWQgaWYgaXQgaGFkIGEgYHZib3hndWVzdGAgZnV6emVyIGRpcmVjdGx5IG9yIGlmIGl0IHJ1bnMgKm9uKiBWaXJ0dWFsQm94LiBJIHJlbWVtYmVyZWQgYHN5el9tb3VudF9pbWFnZWAgd2hpY2ggY2FuIG1vdW50IGZpbGVzeXN0ZW1zLCBidXQgYHZib3hzZmAgaXNuJ3QgYmxvY2stYmFzZWQsIGl0J3MgbW9yZSBvZiBhIG5ldHdvcmstbGlrZSBjb25uZWN0aW9uIHRvIHRoZSBob3N0LiBUaGVuIEkgd29uZGVyZWQsIGNvdWxkIHN5emthbGxlciBiZSBkaXJlY3RseSBmdXp6aW5nIGB2Ym94c2ZgIG9yIGdvaW5nIHRocm91Z2ggYC9kZXYvdmJveGd1ZXN0YD8gTm8sIGJlY2F1c2UgYHZib3hzZmAgaXMgYSBmaWxlc3lzdGVtLlxuXG5UaGUgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZW0gaXMgbGlrZWx5IGB2YmdfaGdjbV9jYWxsYCB3aGljaCBgdmJveHNmYCB1c2VzLiBUaGlzIG1lYW5zIHRoYXQgaWYgc3l6a2FsbGVyIGlzIG1vdW50aW5nIGB2Ym94c2ZgLCBpdCBuZWVkcyB0aGUgYHZib3hndWVzdGAgZHJpdmVyIHRvIGJlIGluaXRpYWxpemVkLiBCdXQgaXMgdGhhdCBkcml2ZXIgaW5pdGlhbGl6ZWQgaW4gUUVNVT8gQW5kIHRoYXQncyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBUaGUgYHZib3hndWVzdGAgZHJpdmVyIGJpbmRzIHRvIFBDSSB2ZW5kb3IgSUQgMHg4MEVFIChJbm5vVGVrIFN5c3RlbWJlcmF0dW5nIEdtYkgpLCBhbmQgZGV2aWNlIElEIDB4Q0FGRS4gRG9lcyBRRU1VIGVtdWxhdGUgdGhpcyBkZXZpY2U/IE5vLCBpdCBkb2Vzbid0LlxuXG5Ib3dldmVyLCBzeXprYWxsZXIgKmRvZXMqIGhhdmUgdmFyaW91cyBmdXp6ZXIgb3B0aW9ucyBmb3IgUENJLCBhbmQgVVNCLiBTbyBpdCBtYXkgYmUgdXNpbmcgYHN5el9wY2lfYWRkYCB0byBpbmplY3QgUENJIGRldmljZXMuIEl0IG1pZ2h0IHVzZSBgdmZpb2Agb3Igc2ltaWxhciB0byBoYW5kbGUgUENJLCBzaW1pbGFyIHRvIGl0cyB1c2Ugb2YgYHZoY2lgIGZvciBVU0IuIEFjdHVhbGx5LCBpdCBoYXMgb3RoZXIgd2F5cyB0byBoYW5kbGUgVk1zLCBsaWtlIGBzeXpfa3ZtX3NldHVwX2NwdWAuIEkgZGlkbid0IHNlZSBhbnl0aGluZyBjYWxsZWQgYHN5el92Ym94Z3Vlc3RgLCBzbyBtYXliZSBpdCdzIG5vdCBkaXJlY3QuXG5cbkkgaGF2ZSB0byBnbyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBwcmVtaXNlOiBpZiBzeXprYWxsZXIgZm91bmQgdGhpcyBidWcsIGl0ICpjYW4qIHJlYWNoIHRoZSBjb2RlLiBOb3csIHRoZSBwcm9tcHQgZG9lcyBzYXkgc29tZXRoaW5nIGFib3V0IGNvZGUgcGF0aHMgYmVpbmcgdW5yZWFjaGFibGUgaW4gUUVNVSBvciBHQ0UgZXZlbiB3aXRoIGVtdWxhdGVkIGhhcmR3YXJlLiBJZiB0aGF0J3MgdHJ1ZSwgaG93IGNvdWxkIGl0IGJlIHJlYWNoYWJsZT9cblxuTWF5YmUgaXQncyBtb3VudGluZyBgdmJveHNmYCAqd2l0aG91dCogbmVlZGluZyB0aGUgUENJIGRldmljZSwgc29tZSBhbHRlcm5hdGUgaW5pdGlhbGl6YXRpb24gcGF0aD8gSSBoYXZlIHRvIGxvb2sgaW50byBgdmJnX2dldF9nZGV2YCB0byBzZWUgd2hhdCBjb3VsZCBiZSBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzQ1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njg0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NDk6MDMuODMzOTE2Njg3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Njk5MTgzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2YmdfZ2V0X2dkZXZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aXJ0L3Zib3hndWVzdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYz00MTk9c3RhdGljIHZvaWQgdmJnX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBjaSlcXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtNDMzLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmM6NDM0OnN0cnVjdCB2YmdfZGV2ICp2YmdfZ2V0X2dkZXYodm9pZClcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTQzNS17XFxuLS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTQ0OC19XFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzo0NDk6RVhQT1JUX1NZTUJPTCh2YmdfZ2V0X2dkZXYpO1xcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtNDUwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzo0OTowMy45MjA5MTQ5OTJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU0MDg0OTg1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEknbSB0YWtpbmcgYSBsb29rIGF0IGB2YmdfZ2V0X2dkZXZgIHdpdGhpbiB0aGUgYGRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmNgIGZpbGUuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIG9yIGF0IGxlYXN0IHdoZXJlIGEgY3JpdGljYWwgcGFydCBvZiB0aGUgZ3Vlc3QgZGV2aWNlIGludGVyYWN0aW9uIHdpdGggVmlydHVhbEJveCBrZXJuZWwgbW9kdWxlIHJlc2lkZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZ3Vlc3QgaXMgZ2V0dGluZyBhY2Nlc3MgdG8gcmVzb3VyY2VzIGFuZCBjYXBhYmlsaXRpZXMgaGVyZS4gVGhpcyBpcyBsaWtlbHkgYSBrZXkgZW50cnkgcG9pbnQgZm9yIHRoZSBWaXJ0dWFsQm94IEd1ZXN0IEFkZGl0aW9ucyB0byBpZGVudGlmeSBhbmQgaW50ZXJhY3Qgd2l0aCB0aGUgaG9zdC4gS25vd2luZyBob3cgdGhpcyBmdW5jdGlvbiB3b3JrcyBpcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgZ3Vlc3QtaG9zdCBjb21tdW5pY2F0aW9uIG9jY3VycyBhdCBhIGxvdyBsZXZlbC4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIHVuY292ZXIuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4MzEsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzo0OTowNi40NjE3Njg0MDFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI4MDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDM0LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDM0OlxcdHN0cnVjdCB2YmdfZGV2ICp2YmdfZ2V0X2dkZXYodm9pZClcXG4gNDM1OlxcdHtcXG4gNDM2OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnZiZ19nZGV2X211dGV4KTtcXG4gNDM3OlxcdFxcbiA0Mzg6XFx0XFx0LypcXG4gNDM5OlxcdFxcdCAqIE5vdGUgb24gc3VjY2VzcyB3ZSBrZWVwIHRoZSBtdXRleCBsb2NrZWQgdW50aWwgdmJnX3B1dF9nZGV2KCksXFxuIDQ0MDpcXHRcXHQgKiB0aGlzIHN0b3BzIHZiZ19wY2lfcmVtb3ZlIGZyb20gcmVtb3ZpbmcgdGhlIGRldmljZSBmcm9tIHVuZGVybmVhdGhcXG4gNDQxOlxcdFxcdCAqIHZib3hzZi4gdmJveHNmIHdpbGwgb25seSBob2xkIGEgcmVmZXJlbmNlIGZvciBhIHNob3J0IHdoaWxlLlxcbiA0NDI6XFx0XFx0ICovXFxuIDQ0MzpcXHRcXHRpZiAodmJnX2dkZXYpXFxuIDQ0NDpcXHRcXHRcXHRyZXR1cm4gdmJnX2dkZXY7XFxuIDQ0NTpcXHRcXG4gNDQ2OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2dmJnX2dkZXZfbXV0ZXgpO1xcbiA0NDc6XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7XFxuIDQ0ODpcXHR9XFxuIDQ0OTpcXHRFWFBPUlRfU1lNQk9MKHZiZ19nZXRfZ2Rldik7XFxuIDQ1MDpcXHRcXG4gNDUxOlxcdHZvaWQgdmJnX3B1dF9nZGV2KHN0cnVjdCB2YmdfZGV2ICpnZGV2KVxcbiA0NTI6XFx0e1xcbiA0NTM6XFx0XFx0V0FSTl9PTihnZGV2ICE9IHZiZ19nZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NDk6MDYuNDYxODk4MzMxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxNTUxNjk5OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgYHZib3hzZmAgQ29kZSBQYXRocyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGB2YmdfZ2RldmAgaXMgYSBnbG9iYWwgdmFyaWFibGUgaW5pdGlhbGl6ZWQgZHVyaW5nIFBDSSBkZXZpY2UgcHJvYmluZywgYW5kIGB2Ym94c2ZgIHJlbGllcyBvbiB0aGF0LiBUaGUgcXVlc3Rpb24gaXMsIGNhbiBzeXprYWxsZXIgaW5qZWN0IGEgUENJIGRldmljZSB0byBtYWtlIHRoaXMgaGFwcGVuPyBTeXprYWxsZXIgaGFzIHRoZSBtZWFucyB3aXRoIHRvb2xzIGxpa2UgYHN5el9wY2lgLCBgc3l6X3BjaXZmaW9gLCBvciBldmVuIHVzaW5nIGBQQ0lfU1RVQmAgb3IgYFZGSU9gLCBvciBwZXJoYXBzIGl0IGxldmVyYWdlcyBhIFBDSSBmdXp6ZXIgdGhhdCBlbXVsYXRlcyBkZXZpY2VzLiBIb2xkIG9uLCB0aG91Z2gg4oCTIHRoZXJlIGlzbid0IGEgcmVhZGlseSBhdmFpbGFibGUgZ2VuZXJhbCBzb2Z0d2FyZSBmcmFtZXdvcmsgaW4gdGhlIExpbnV4IGtlcm5lbCB0byBlbXVsYXRlICphcmJpdHJhcnkqIFBDSSBkZXZpY2VzLiBUaGUgb3B0aW9ucyBhcHBlYXIgdG8gYmUgbGltaXRlZCB0byB0aGluZ3MgbGlrZSBgcGNpX2VuZHBvaW50YCBvciBgdmZpb2AsIHdoaWNoIGFyZSBtb3JlIHNwZWNpYWxpemVkLlxuXG5CdXQgd2FpdCBhIG1pbnV0ZSEgU3l6a2FsbGVyIGhhcyBgc3l6X2dlbmV0bGlua2AgYW5kIG90aGVyIGNhcGFiaWxpdGllcywgd2hpY2ggY291bGQgYmUgcmVsZXZhbnQuIEFuZCB0aGVuIEkgcmVtZW1iZXJlZCwgc3l6a2FsbGVyICpkb2VzKiBydW4gb24gVmlydHVhbEJveCEgSXQgc3VwcG9ydHMgZW52aXJvbm1lbnRzIGxpa2UgYHZtL3FlbXVgLCBgdm0vZ2NlYCwgYW5kIGB2bS92Ym94YC4gVGhhdOKAmXMgdGhlIGtleS4gSWYgc3l6a2FsbGVyIGNhbiBydW4gb24gVmlydHVhbEJveCwgdGhlbiwgaW4gdGhlb3J5LCBgdmJveHNmYCBzaG91bGQgYmUgcmVhY2hhYmxlLCByaWdodD9cblxuQnV0IHRoZW4gdGhlIHByb21wdCByYWlzZXMgYSByZWQgZmxhZzogXCJDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmVcIi4gVGhpcyBpbXBsaWVzIHRoYXQgaWYgc29tZXRoaW5nIGlzIE9OTFkgcmVhY2hhYmxlIGluIFZpcnR1YWxCb3gsIGl0J3MgKm5vdCogcmVhY2hhYmxlIGluIEdDRSBvciBRRU1VLCBhbmQgdGhlcmVmb3JlIG1heSBub3QgYmUgd29ydGggZnV6emluZz9cblxuVGhlIGRpcmVjdGl2ZSBzcGVjaWZpZXM6IFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyAuLi4gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLlwiIElmIGB2Ym94c2ZgICpyZXF1aXJlcyogdGhlIFZpcnR1YWxCb3ggaHlwZXJ2aXNvciwgaXQgaXMsIGJ5IGRlZmluaXRpb24sIHVucmVhY2hhYmxlIGluIEdDRSBvciBRRU1VLlxuXG5Ob3csIGlzIHRoZXJlICphbnkqIHdheSB0byBnZXQgYHZib3hzZmAgd29ya2luZyBpbiBRRU1VPyBXaGF0IGFib3V0IHVzaW5nIGBVTUxgPyBObywgdGhhdCB3b24ndCBoZWxwLiBXaGF0IGFib3V0IGBzeXpfbW91bnRfaW1hZ2VgPyBUaGF0IHdvdWxkIGZhaWwgaW4gYHZib3hzZl9maWxsX3N1cGVyYCBiZWNhdXNlIGB2YmdfZ2V0X2dkZXYoKWAgd291bGQgcmV0dXJuIGAtRU5PREVWYC4gSSB0aGluayBJIG5lZWQgdG8gZGlnIGludG8gYHZib3hzZl9maWxsX3N1cGVyYCB0byBjb25maXJtIHRoaXMuIFRoYXQgaXMgdGhlIG5leHQgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzNjEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzo0OToxMy42MTcwNzExN1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE2NzgwOTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmJnX2dldF9nZGV2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Zib3hzZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jPTIwPWludCB2Ym94c2ZfY29ubmVjdCh2b2lkKVxcbi0tXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTI4LVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYzoyOTpcXHRnZGV2ID0gdmJnX2dldF9nZGV2KCk7XFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTMwLVxcdGlmIChJU19FUlIoZ2RldikpXFxuLS1cXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM9NDA9dm9pZCB2Ym94c2ZfZGlzY29ubmVjdCh2b2lkKVxcbi0tXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTQ0LVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYzo0NTpcXHRnZGV2ID0gdmJnX2dldF9nZGV2KCk7XFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTQ2LVxcdGlmIChJU19FUlIoZ2RldikpXFxuLS1cXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM9NTM9c3RhdGljIGludCB2Ym94c2ZfY2FsbCh1MzIgZnVuY3Rpb24sIHZvaWQgKnBhcm1zLCB1MzIgcGFybV9jb3VudCwgaW50ICpzdGF0dXMpXFxuLS1cXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtNTctXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jOjU4OlxcdGdkZXYgPSB2YmdfZ2V0X2dkZXYoKTtcXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtNTktXFx0aWYgKElTX0VSUihnZGV2KSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NDk6MTMuNzA4NzUzNjg0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxODc1NzA2NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKnZib3hzZiBEcml2ZXIgSW5pdGlhbGl6YXRpb24gQ29udW5kcnVtKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGUgVmlydHVhbEJveCBzaGFyZWQgZm9sZGVyICh2Ym94c2YpIGRyaXZlciBjb2RlLiBUaGUga2V5IHF1ZXN0aW9uIEknbSB0cnlpbmcgdG8gbmFpbCBkb3duIGlzIHRoZSBleGFjdCBwb2ludCB3aGVyZSB0aGUgaW5pdGlhbCBjb25uZWN0aW9uIHRvIHRoZSBzaGFyZWQgZm9sZGVyIGluZnJhc3RydWN0dXJlIGlzIGVzdGFibGlzaGVkLiBJIGtub3cgYHZib3hzZl9jb25uZWN0YCBpcyBjcml0aWNhbCBmb3IgdGhhdCwgYnV0IEkgbmVlZCB0byBwaW5wb2ludCAqd2hlcmUqIGl0J3MgY2FsbGVkLiBNeSBpbml0aWFsIHRoaW5raW5nIGlzIHRoYXQgaXQncyBlaXRoZXIgZ29pbmcgdG8gYmUgZnJvbSBgdmJveHNmX2luaXRgLCB3aGljaCBoYW5kbGVzIHRoZSBpbml0aWFsIG1vZHVsZSBsb2FkaW5nIGFuZCBzZXR1cCwgb3IgcGVyaGFwcyBmcm9tIGB2Ym94c2ZfZmlsbF9zdXBlcmAsIHdoaWNoIHdvdWxkIGJlIHRoZSBtb3JlIGxpa2VseSBsb2NhdGlvbiB3aGVuIGEgZmlsZXN5c3RlbSBpcyBiZWluZyBtb3VudGVkLiBJIG5lZWQgdG8gY29uZmlybSB3aGVyZSB0aGUgZHJpdmVyIGdldHMgdGhlIGNvbm5lY3Rpb24gc3RhcnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3ODMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzo0OToxNi44OTYzMjc1ODFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTg5MTU1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2Ym94c2ZfY29ubmVjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy92Ym94c2YvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Zib3hzZi9zdXBlci5jPTMyMz1zdGF0aWMgaW50IHZib3hzZl9zZXR1cCh2b2lkKVxcbi0tXFxuZnMvdmJveHNmL3N1cGVyLmMtMzQxLVxcbmZzL3Zib3hzZi9zdXBlci5jOjM0MjpcXHRlcnIgPSB2Ym94c2ZfY29ubmVjdCgpO1xcbmZzL3Zib3hzZi9zdXBlci5jLTM0My1cXHRpZiAoZXJyKSB7XFxuLS1cXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM9MTg9c3RhdGljIHUzMiB2Ym94c2ZfY2xpZW50X2lkO1xcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy0xOS1cXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM6MjA6aW50IHZib3hzZl9jb25uZWN0KHZvaWQpXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTIxLXtcXG4tLVxcbmZzL3Zib3hzZi92ZnNtb2QuaD0xMTE9aW50IHZib3hzZl9kaXJfcmVhZF9hbGwoc3RydWN0IHZib3hzZl9zYmkgKnNiaSwgc3RydWN0IHZib3hzZl9kaXJfaW5mbyAqc2ZfZCxcXG4tLVxcbmZzL3Zib3hzZi92ZnNtb2QuaC0xMTQtLyogZnJvbSB2Ym94c2Zfd3JhcHBlcnMuYyAqL1xcbmZzL3Zib3hzZi92ZnNtb2QuaDoxMTU6aW50IHZib3hzZl9jb25uZWN0KHZvaWQpO1xcbmZzL3Zib3hzZi92ZnNtb2QuaC0xMTYtdm9pZCB2Ym94c2ZfZGlzY29ubmVjdCh2b2lkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NDk6MTcuMDA2MjI0NTMxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1NzA4NDMyMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBWaXJ0dWFsQm94IFNoYXJlZCBGb2xkZXIgU2V0dXAqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIHplcm8gaW4gb24gdGhlIGB2Ym94c2Zfc2V0dXBgIGZ1bmN0aW9uIHdpdGhpbiBgZnMvdmJveHNmL3N1cGVyLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyAqcmVhbGx5KiBoYXBwZW5zIGluIFZpcnR1YWxCb3ggc2hhcmVkIGZvbGRlcnMsIHNwZWNpZmljYWxseSB0aGUgY3JpdGljYWwgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGZpbGVzeXN0ZW0uIEl0J3MgdGhlIGx5bmNocGluIGZvciBtb3VudGluZyBhbmQgbWFuYWdpbmcgdGhvc2Ugc2hhcmVkIGRpcmVjdG9yaWVzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgU3VwZXIgQmxvY2sgaXMgcG9wdWxhdGVkIGFuZCB0aGUgY29yZSBjb21wb25lbnRzIGFyZSBpbml0aWFsaXplZCBzbyBJIGNhbiBmaWd1cmUgb3V0IHdoYXQgaXMgYnJva2VuLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTMzMCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjQ5OjE5LjU3NzA3MDIzNVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzY2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvdmJveHNmL3N1cGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzIzLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzIzOlxcdHN0YXRpYyBpbnQgdmJveHNmX3NldHVwKHZvaWQpXFxuIDMyNDpcXHR7XFxuIDMyNTpcXHRcXHRpbnQgZXJyO1xcbiAzMjY6XFx0XFxuIDMyNzpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZ2Ym94c2Zfc2V0dXBfbXV0ZXgpO1xcbiAzMjg6XFx0XFxuIDMyOTpcXHRcXHRpZiAodmJveHNmX3NldHVwX2RvbmUpXFxuIDMzMDpcXHRcXHRcXHRnb3RvIHN1Y2Nlc3M7XFxuIDMzMTpcXHRcXG4gMzMyOlxcdFxcdHZib3hzZl9pbm9kZV9jYWNoZXAgPVxcbiAzMzM6XFx0XFx0XFx0a21lbV9jYWNoZV9jcmVhdGUoXFxcInZib3hzZl9pbm9kZV9jYWNoZVxcXCIsXFxuIDMzNDpcXHRcXHRcXHRcXHRcXHQgIHNpemVvZihzdHJ1Y3QgdmJveHNmX2lub2RlKSwgMCxcXG4gMzM1OlxcdFxcdFxcdFxcdFxcdCAgU0xBQl9SRUNMQUlNX0FDQ09VTlQgfCBTTEFCX0FDQ09VTlQsXFxuIDMzNjpcXHRcXHRcXHRcXHRcXHQgIHZib3hzZl9pbm9kZV9pbml0X29uY2UpO1xcbiAzMzc6XFx0XFx0aWYgKCF2Ym94c2ZfaW5vZGVfY2FjaGVwKSB7XFxuIDMzODpcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbiAzMzk6XFx0XFx0XFx0Z290byBmYWlsX25vbWVtO1xcbiAzNDA6XFx0XFx0fVxcbiAzNDE6XFx0XFxuIDM0MjpcXHRcXHRlcnIgPSB2Ym94c2ZfY29ubmVjdCgpO1xcbiAzNDM6XFx0XFx0aWYgKGVycikge1xcbiAzNDQ6XFx0XFx0XFx0dmJnX2VycihcXFwidmJveHNmOiBlcnIgJWQgY29ubmVjdGluZyB0byBndWVzdCBQQ0ktZGV2aWNlXFxcXG5cXFwiLCBlcnIpO1xcbiAzNDU6XFx0XFx0XFx0dmJnX2VycihcXFwidmJveHNmOiBtYWtlIHN1cmUgeW91IGFyZSBpbnNpZGUgYSBWaXJ0dWFsQm94IFZNXFxcXG5cXFwiKTtcXG4gMzQ2OlxcdFxcdFxcdHZiZ19lcnIoXFxcInZib3hzZjogYW5kIGNoZWNrIGRtZXNnIGZvciB2Ym94Z3Vlc3QgZXJyb3JzXFxcXG5cXFwiKTtcXG4gMzQ3OlxcdFxcdFxcdGdvdG8gZmFpbF9mcmVlX2NhY2hlO1xcbiAzNDg6XFx0XFx0fVxcbiAzNDk6XFx0XFxuIDM1MDpcXHRcXHRlcnIgPSB2Ym94c2Zfc2V0X3V0ZjgoKTtcXG4gMzUxOlxcdFxcdGlmIChlcnIpIHtcXG4gMzUyOlxcdFxcdFxcdHZiZ19lcnIoXFxcInZib3hzZl9zZXR1dGY4IGVycm9yICVkXFxcXG5cXFwiLCBlcnIpO1xcbiAzNTM6XFx0XFx0XFx0Z290byBmYWlsX2Rpc2Nvbm5lY3Q7XFxuIDM1NDpcXHRcXHR9XFxuIDM1NTpcXHRcXG4gMzU2OlxcdFxcdGlmICghZm9sbG93X3N5bWxpbmtzKSB7XFxuIDM1NzpcXHRcXHRcXHRlcnIgPSB2Ym94c2Zfc2V0X3N5bWxpbmtzKCk7XFxuIDM1ODpcXHRcXHRcXHRpZiAoZXJyKVxcbiAzNTk6XFx0XFx0XFx0XFx0dmJnX3dhcm4oXFxcInZib3hzZjogVW5hYmxlIHRvIHNob3cgc3ltbGlua3M6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbiAzNjA6XFx0XFx0fVxcbiAzNjE6XFx0XFxuIDM2MjpcXHRcXHR2Ym94c2Zfc2V0dXBfZG9uZSA9IHRydWU7XFxuIDM2MzpcXHRzdWNjZXNzOlxcbiAzNjQ6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2Ym94c2Zfc2V0dXBfbXV0ZXgpO1xcbiAzNjU6XFx0XFx0cmV0dXJuIDA7XFxuIDM2NjpcXHRcXG4gMzY3OlxcdGZhaWxfZGlzY29ubmVjdDpcXG4gMzY4OlxcdFxcdHZib3hzZl9kaXNjb25uZWN0KCk7XFxuIDM2OTpcXHRmYWlsX2ZyZWVfY2FjaGU6XFxuIDM3MDpcXHRcXHRrbWVtX2NhY2hlX2Rlc3Ryb3kodmJveHNmX2lub2RlX2NhY2hlcCk7XFxuIDM3MTpcXHRmYWlsX25vbWVtOlxcbiAzNzI6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2Ym94c2Zfc2V0dXBfbXV0ZXgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzo0OToxOS41NzczMTAwMTVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjIyNDIxODM0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbnZlc3RpZ2F0aW9uIGludG8gVmlydHVhbEJveCBHdWVzdCBGaWxlIFN5c3RlbSBNb3VudHMqKlxuXG5Pa2F5LCBzbyBgdmJveHNmX3NldHVwYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBkdXJpbmcgYSBtb3VudCBvcGVyYXRpb24uIE1ha2VzIHNlbnNlLiBBbmQgaWYgYHZib3hzZl9jb25uZWN0KClgIGZhaWxzLCB0aGUgd2hvbGUgbW91bnQgZmFpbHMuIEFscmlnaHQsIGZvbGxvd2luZyB0aGUgYnJlYWRjcnVtYnMsIGB2Ym94c2ZfY29ubmVjdCgpYCBjYWxscyBgdmJnX2dldF9nZGV2KClgLCB3aGljaCBnaXZlcyBtZSBhbiBgLUVOT0RFVmAgaWYgdGhlIFZpcnR1YWxCb3ggUENJIGRldmljZSBpc24ndCBhcm91bmQuIFNvLCBiYXNpY2FsbHksIEkgY2FuJ3QgbW91bnQgYHZib3hzZmAgaW4gc29tZXRoaW5nIGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgdW5sZXNzIHRoYXQgVmlydHVhbEJveCBQQ0kgZGV2aWNlIGlzIHBoeXNpY2FsbHkgKnByZXNlbnQqLiBIbW0sIGlzIGl0IGV2ZW4gKnBvc3NpYmxlKiB0byBpbmplY3QgdGhlIFZpcnR1YWxCb3ggUENJIGRldmljZSBpbnRvIFFFTVU/IFRoYXQncyB0aGUgbWlsbGlvbi1kb2xsYXIgcXVlc3Rpb24uXG5cbldhaXQgYSBzZWNvbmTigKYgd2Fzbid0IHRoZXJlIGEgYHN5emthbGxlcmAgZnV6emVyIGZvciBgdmJveGd1ZXN0YD8gTGV0J3MgcXVpY2tseSBkb3VibGUtY2hlY2sgaWYgc3l6a2FsbGVyIGhhcyBhIGZ1enplciBkZWRpY2F0ZWQgdG8gYHZib3hndWVzdGAuIFllcywgc3l6a2FsbGVyICpjYW4qIGZ1enogYC9kZXYvdmJveGd1ZXN0YCAtIGlmIHRoZSBkZXZpY2UgZXhpc3RzLiBCdXQgb2YgY291cnNlLCBpbiBhIGJhcmUgUUVNVSBlbnZpcm9ubWVudCwgaXQgZG9lc24ndC4gSG1tLlxuXG5Pa2F5LCBpcyB0aGVyZSBhIGBzeXpfcGNpX2FkZGAgZnVuY3Rpb24gaW4gc3l6a2FsbGVyPyBJdCBjb3VsZCAqcG90ZW50aWFsbHkqIGFkZCBhIFBDSSBkZXZpY2UsIGJ1dCBubywgc3l6a2FsbGVyIGRvZXNuJ3QgaGF2ZSBhIGJ1aWx0LWluIHNvZnR3YXJlIFBDSSBlbXVsYXRvciBpbiB0aGUga2VybmVsLiBPa2F5LCBzbyB0aGF0IGF2ZW51ZSBpcyBjbG9zZWQuXG5cbldhaXTigKYgd2hhdCBhYm91dCBsZXZlcmFnaW5nIGV4aXN0aW5nIHN5emthbGxlciBmZWF0dXJlcz8gU3l6a2FsbGVyIHVzZXMgYHZoY2lgIGZvciBVU0IsIGBtYWM4MDIxMV9od3NpbWAgZm9yIHdpZmksIGB1aW5wdXRgIGZvciBpbnB1dCwgYHZnZW1gIGZvciBkcm0sIGB2a21zYCBmb3IgZHJtLCBgbG9vcGAgZm9yIGJsb2NrLCBgdHVuYCBmb3IgbmV04oCmIEFyZSB0aGVyZSBhbnkgc2ltaWxhciB0cmlja3MgZm9yIGB2Ym94Z3Vlc3RgPyBJcyB0aGVyZSBhIHNvZnR3YXJlIGVtdWxhdGlvbiBvcHRpb24gZm9yIHRoYXQsIHNvbWUga2luZCBvZiB2aXJ0dWFsIGRldmljZT8gSSByZWFsbHkgbmVlZCB0byBnZXQgdGhpcyB0byB3b3JrLiBJIG5lZWQgdG8gZmluZCBhIHdheSB0byBtYWtlIHRoZSBkZXZpY2UgKmFwcGVhciouXG5cblJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGUga2VybmVsIHNvdXJjZS4gTGV0J3Mgc3RhcnQgd2l0aCBhIGZvY3VzZWQgc2VhcmNoIGZvciBcInZib3hndWVzdFwiIGFuZCBzZWUgd2hhdCBpbnNpZ2h0cyBpdCB5aWVsZHMuIExldCdzIHNlZSB3aGF0IHRoZSBrZXJuZWwga25vd3MgYWJvdXQgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyNjAsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzo0OToyNS44MDE1MzI3ODVaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5MTY1MzcxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2Ym94Z3Vlc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aXJ0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZpcnQvS2NvbmZpZz0yNj1jb25maWcgRlNMX0hWX01BTkFHRVJcXG4tLVxcbmRyaXZlcnMvdmlydC9LY29uZmlnLTQzLVxcbmRyaXZlcnMvdmlydC9LY29uZmlnOjQ0OnNvdXJjZSBcXFwiZHJpdmVycy92aXJ0L3Zib3hndWVzdC9LY29uZmlnXFxcIlxcbmRyaXZlcnMvdmlydC9LY29uZmlnLTQ1LVxcbi0tXFxuZHJpdmVycy92aXJ0L01ha2VmaWxlPTc9b2JqLSQoQ09ORklHX1ZNR0VOSUQpXFx0XFx0Kz0gdm1nZW5pZC5vXFxuZHJpdmVycy92aXJ0L01ha2VmaWxlOjg6b2JqLXlcXHRcXHRcXHRcXHQrPSB2Ym94Z3Vlc3QvXFxuZHJpdmVycy92aXJ0L01ha2VmaWxlLTktXFxuLS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L0tjb25maWc9Mj1jb25maWcgVkJPWEdVRVNUXFxuLS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L0tjb25maWctMTEtXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC9LY29uZmlnOjEyOlxcdCAgVGhpcyBkcml2ZXIgYWxzbyBvZmZlcnMgdmJveGd1ZXN0IElQQyBmdW5jdGlvbmFsaXR5IHdoaWNoIGlzIG5lZWRlZFxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvS2NvbmZpZy0xMy1cXHQgIGZvciB0aGUgdmJveGZzIGRyaXZlciB3aGljaCBvZmZlcnMgZm9sZGVyIHNoYXJpbmcgc3VwcG9ydC5cXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L01ha2VmaWxlOjI6dmJveGd1ZXN0LXkgOj0gdmJveGd1ZXN0X2xpbnV4Lm8gdmJveGd1ZXN0X2NvcmUubyB2Ym94Z3Vlc3RfdXRpbHMub1xcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvTWFrZWZpbGUtMy1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L01ha2VmaWxlOjQ6b2JqLSQoQ09ORklHX1ZCT1hHVUVTVCkgKz0gdmJveGd1ZXN0Lm9cXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy0yLS8qXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jOjM6ICogdmJveGd1ZXN0IGNvcmUgZ3Vlc3QtZGV2aWNlIGhhbmRsaW5nIGNvZGUsIFZCb3hHdWVzdC5jcHAgaW4gdXBzdHJlYW0gc3ZuLlxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy00LSAqXFxuLS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmMtMTYtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFxcdTAwM2VcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmM6MTc6I2luY2x1ZGUgXFxcInZib3hndWVzdF9jb3JlLmhcXFwiXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jOjE4OiNpbmNsdWRlIFxcXCJ2Ym94Z3Vlc3RfdmVyc2lvbi5oXFxcIlxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy0xOS1cXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYz04OTU9c3RhdGljIGludCB2YmdfcXVlcnlfaG9zdF92ZXJzaW9uKHN0cnVjdCB2YmdfZGV2ICpnZGV2KVxcbi0tXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jLTkxNS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmM6OTE2OlxcdHZiZ19pbmZvKFxcXCJ2Ym94Z3Vlc3Q6IGhvc3QtdmVyc2lvbjogJXMgJSN4XFxcXG5cXFwiLCBnZGV2LVxcdTAwM2Vob3N0X3ZlcnNpb24sXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jLTkxNy1cXHRcXHQgZ2Rldi1cXHUwMDNlaG9zdF9mZWF0dXJlcyk7XFxuLS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmMtOTE5LVxcdGlmICghKHJlcS1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBWTU1ERVZfSFZGX0hHQ01fUEhZU19QQUdFX0xJU1QpKSB7XFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jOjkyMDpcXHRcXHR2YmdfZXJyKFxcXCJ2Ym94Z3Vlc3Q6IEVycm9yIGhvc3QgdG9vIG9sZCAoZG9lcyBub3Qgc3VwcG9ydCBwYWdlLWxpc3RzKVxcXFxuXFxcIik7XFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jLTkyMS1cXHRcXHRyZXQgPSAtRU5PREVWO1xcbi0tXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jPTk0Mz1pbnQgdmJnX2NvcmVfaW5pdChzdHJ1Y3QgdmJnX2RldiAqZ2RldiwgdTMyIGZpeGVkX2V2ZW50cylcXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy05OTAtXFx0aWYgKHJldCkge1xcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYzo5OTE6XFx0XFx0dmJnX2VycihcXFwidmJveGd1ZXN0OiB2YmdfcmVwb3J0X2d1ZXN0X2luZm8gZXJyb3I6ICVkXFxcXG5cXFwiLCByZXQpO1xcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy05OTItXFx0XFx0Z290byBlcnJfZnJlZV9yZXFzO1xcbi0tXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jLTk5Ni1cXHRpZiAocmV0KSB7XFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jOjk5NzpcXHRcXHR2YmdfZXJyKFxcXCJ2Ym94Z3Vlc3Q6IEVycm9yIHNldHRpbmcgZml4ZWQgZXZlbnQgZmlsdGVyOiAlZFxcXFxuXFxcIixcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmMtOTk4LVxcdFxcdFxcdHJldCk7XFxuLS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmMtMTAwMy1cXHRpZiAocmV0KSB7XFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jOjEwMDQ6XFx0XFx0dmJnX2VycihcXFwidmJveGd1ZXN0OiBFcnJvciBjbGVhcmluZyBndWVzdCBjYXBhYmlsaXRpZXM6ICVkXFxcXG5cXFwiLFxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy0xMDA1LVxcdFxcdFxcdHJldCk7XFxuLS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmMtMTAxMC1cXHRpZiAocmV0KSB7XFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jOjEwMTE6XFx0XFx0dmJnX2VycihcXFwidmJveGd1ZXN0OiBFcnJvciBjbGVhcmluZyBtb3VzZSBzdGF0dXM6ICVkXFxcXG5cXFwiLCByZXQpO1xcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy0xMDEyLVxcdFxcdGdvdG8gZXJyX2ZyZWVfcmVxcztcXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy0xMDIxLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYzoxMDIyOlxcdFxcdHZiZ19lcnIoXFxcInZib3hndWVzdDogRXJyb3IgcmVwb3J0aW5nIGRyaXZlciBzdGF0dXM6ICVkXFxcXG5cXFwiLCByZXQpO1xcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy0xMDIzLVxcbi0tXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jLTEwNDAtLyoqXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jOjEwNDE6ICogdmJnX2NvcmVfZXhpdCAtIENhbGwgdGhpcyBvbiBleGl0IHRvIGNsZWFuLXVwIHZib3hndWVzdC1jb3JlIG1hbmFnZWRcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmMtMTA0Mi0gKlxcdHJlc291cmNlcy5cXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYz0xMDQ4PXZvaWQgdmJnX2NvcmVfZXhpdChzdHJ1Y3QgdmJnX2RldiAqZ2RldilcXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy0xMDc0LSAqXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jOjEwNzU6ICogdmJveGd1ZXN0X2xpbnV4LmMgY2FsbHMgdGhpcyB3aGVuIHVzZXJzcGFjZSBvcGVucyB0aGUgY2hhci1kZXZpY2UuXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jLTEwNzYtICpcXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuaC0xNC0jaW5jbHVkZSBcXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcXHUwMDNlXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5oOjE1OiNpbmNsdWRlIFxcdTAwM2NsaW51eC92Ym94Z3Vlc3QuaFxcdTAwM2VcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmgtMTYtI2luY2x1ZGUgXFxcInZtbWRldi5oXFxcIlxcbi0tXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5oLTE4LS8qXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5oOjE5OiAqIFRoZSBtYWlubGluZSBrZXJuZWwgdmVyc2lvbiAodGhpcyB2ZXJzaW9uKSBvZiB0aGUgdmJveGd1ZXN0IG1vZHVsZVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuaC0yMC0gKiBjb250YWluZWQgYSBidWcgd2hlcmUgaXQgZGVmaW5lZCBWQkdMX0lPQ1RMX1ZNTURFVl9SRVFVRVNUX0JJRyBhbmRcXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuaD02Nz1zdHJ1Y3QgdmJnX2RldiB7XFxuLS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmgtMTUyLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuaDoxNTM6XFx0LyoqIFxcXCJ2Ym94Z3Vlc3RcXFwiIGNoYXItZGV2aWNlICovXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5oLTE1NC1cXHRzdHJ1Y3QgbWlzY2RldmljZSBtaXNjX2RldmljZTtcXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuaD0yMDI9dm9pZCB2YmdfbGludXhfbW91c2VfZXZlbnQoc3RydWN0IHZiZ19kZXYgKmdkZXYpO1xcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuaC0yMDMtXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5oOjIwNDovKiBQcml2YXRlIChub24gZXhwb3J0ZWQpIGZ1bmN0aW9ucyBmb3JtIHZib3hndWVzdF91dGlscy5jICovXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5oLTIwNS12b2lkICp2YmdfcmVxX2FsbG9jKHNpemVfdCBsZW4sIGVudW0gdm1tZGV2X3JlcXVlc3RfdHlwZSByZXFfdHlwZSxcXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtMi0vKlxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmM6MzogKiB2Ym94Z3Vlc3QgbGludXggcGNpIGRyaXZlciwgY2hhci1kZXYgYW5kIGlucHV0LWRldmljZSBjb2RlLFxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtNC0gKlxcbi0tXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy0xNS0jaW5jbHVkZSBcXHUwMDNjbGludXgvdmJveF91dGlscy5oXFx1MDAzZVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmM6MTY6I2luY2x1ZGUgXFxcInZib3hndWVzdF9jb3JlLmhcXFwiXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy0xNy1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTE4LS8qKiBUaGUgZGV2aWNlIG5hbWUuICovXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzoxOTojZGVmaW5lIERFVklDRV9OQU1FXFx0XFx0XFxcInZib3hndWVzdFxcXCJcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTIwLS8qKiBUaGUgZGV2aWNlIG5hbWUgZm9yIHRoZSBkZXZpY2Ugbm9kZSBvcGVuIHRvIGV2ZXJ5b25lLiAqL1xcbi0tXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYz0yODc9c3RhdGljIGludCB2YmdfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtMzAwLVxcdGlmIChyZXQgIT0gMCkge1xcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmM6MzAxOlxcdFxcdHZiZ19lcnIoXFxcInZib3hndWVzdDogRXJyb3IgZW5hYmxpbmcgZGV2aWNlOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTMwMi1cXHRcXHRyZXR1cm4gcmV0O1xcbi0tXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy0zMDktXFx0aWYgKCFpbyB8fCAhaW9fbGVuKSB7XFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzozMTA6XFx0XFx0dmJnX2VycihcXFwidmJveGd1ZXN0OiBFcnJvciBJTy1wb3J0IHJlc291cmNlICgwKSBpcyBtaXNzaW5nXFxcXG5cXFwiKTtcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTMxMS1cXHRcXHRnb3RvIGVycl9kaXNhYmxlX3BjaWRldjtcXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtMzEzLVxcdGlmIChkZXZtX3JlcXVlc3RfcmVnaW9uKGRldiwgaW8sIGlvX2xlbiwgREVWSUNFX05BTUUpID09IE5VTEwpIHtcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jOjMxNDpcXHRcXHR2YmdfZXJyKFxcXCJ2Ym94Z3Vlc3Q6IEVycm9yIGNvdWxkIG5vdCBjbGFpbSBJTyByZXNvdXJjZVxcXFxuXFxcIik7XFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy0zMTUtXFx0XFx0cmV0ID0gLUVCVVNZO1xcbi0tXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy0zMjEtXFx0aWYgKCFtbWlvIHx8ICFtbWlvX2xlbikge1xcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmM6MzIyOlxcdFxcdHZiZ19lcnIoXFxcInZib3hndWVzdDogRXJyb3IgTU1JTyByZXNvdXJjZSAoMSkgaXMgbWlzc2luZ1xcXFxuXFxcIik7XFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy0zMjMtXFx0XFx0Z290byBlcnJfZGlzYWJsZV9wY2lkZXY7XFxuLS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTMyNi1cXHRpZiAoZGV2bV9yZXF1ZXN0X21lbV9yZWdpb24oZGV2LCBtbWlvLCBtbWlvX2xlbiwgREVWSUNFX05BTUUpID09IE5VTEwpIHtcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jOjMyNzpcXHRcXHR2YmdfZXJyKFxcXCJ2Ym94Z3Vlc3Q6IEVycm9yIGNvdWxkIG5vdCBjbGFpbSBNTUlPIHJlc291cmNlXFxcXG5cXFwiKTtcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTMyOC1cXHRcXHRyZXQgPSAtRUJVU1k7XFxuLS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTMzMy1cXHRpZiAoIXZtbWRldikge1xcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmM6MzM0OlxcdFxcdHZiZ19lcnIoXFxcInZib3hndWVzdDogRXJyb3IgaW9yZW1hcCBmYWlsZWQ7IE1NSU8gYWRkcj0lcGFwIHNpemU9JXBhcFxcXFxuXFxcIixcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTMzNS1cXHRcXHRcXHRcXHUwMDI2bW1pbywgXFx1MDAyNm1taW9fbGVuKTtcXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtMzQxLVxcdCAgICB2bW1kZXYtXFx1MDAzZXNpemUgXFx1MDAzYyAzMiB8fCB2bW1kZXYtXFx1MDAzZXNpemUgXFx1MDAzZSBtbWlvX2xlbikge1xcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmM6MzQyOlxcdFxcdHZiZ19lcnIoXFxcInZib3hndWVzdDogQm9ndXMgVk1NRGV2IG1lbW9yeTsgdmVyc2lvbj0lMDh4IChleHBlY3RlZCAlMDh4KSBzaXplPSVkIChleHBlY3RlZCBcXHUwMDNjPSAlZClcXFxcblxcXCIsXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy0zNDMtXFx0XFx0XFx0dm1tZGV2LVxcdTAwM2V2ZXJzaW9uLCBWTU1ERVZfTUVNT1JZX1ZFUlNJT04sXFxuLS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTM2My1cXHRpZiAocmV0KSB7XFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzozNjQ6XFx0XFx0dmJnX2VycihcXFwidmJveGd1ZXN0OiBFcnJvciBjcmVhdGluZyBpbnB1dCBkZXZpY2U6ICVkXFxcXG5cXFwiLCByZXQpO1xcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtMzY1LVxcdFxcdGdvdG8gZXJyX3ZiZ19jb3JlX2V4aXQ7XFxuLS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTM3MC1cXHRpZiAocmV0KSB7XFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzozNzE6XFx0XFx0dmJnX2VycihcXFwidmJveGd1ZXN0OiBFcnJvciByZXF1ZXN0aW5nIGlycTogJWRcXFxcblxcXCIsIHJldCk7XFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy0zNzItXFx0XFx0Z290byBlcnJfdmJnX2NvcmVfZXhpdDtcXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtMzc2LVxcdGlmIChyZXQpIHtcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jOjM3NzpcXHRcXHR2YmdfZXJyKFxcXCJ2Ym94Z3Vlc3Q6IEVycm9yIG1pc2NfcmVnaXN0ZXIgJXMgZmFpbGVkOiAlZFxcXFxuXFxcIixcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTM3OC1cXHRcXHRcXHRERVZJQ0VfTkFNRSwgcmV0KTtcXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtMzgzLVxcdGlmIChyZXQpIHtcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jOjM4NDpcXHRcXHR2YmdfZXJyKFxcXCJ2Ym94Z3Vlc3Q6IEVycm9yIG1pc2NfcmVnaXN0ZXIgJXMgZmFpbGVkOiAlZFxcXFxuXFxcIixcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTM4NS1cXHRcXHRcXHRERVZJQ0VfTkFNRV9VU0VSLCByZXQpO1xcbi0tXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy0zOTYtXFx0aWYgKHJldCkge1xcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmM6Mzk3OlxcdFxcdHZiZ19lcnIoXFxcInZib3hndWVzdDogRXJyb3IgbW9yZSB0aGVuIDEgdmJveCBndWVzdCBwY2kgZGV2aWNlXFxcXG5cXFwiKTtcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTM5OC1cXHRcXHRnb3RvIGVycl91bnJlZ2lzdGVyX21pc2NfZGV2aWNlX3VzZXI7XFxuLS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF91dGlscy5jLTItLypcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF91dGlscy5jOjM6ICogdmJveGd1ZXN0IHZtbS1yZXEgYW5kIGhnY20tY2FsbCBjb2RlLCBWQm94R3Vlc3RSMExpYkhHQ01JbnRlcm5hbC5jcHAsXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfdXRpbHMuYy00LSAqIFZCb3hHdWVzdFIwTGliR2VuZXJpY1JlcXVlc3QuY3BwIGFuZCBSVEVyckNvbnZlcnRUb0Vycm5vLmNwcCBpbiB2Ym94IHN2bi5cXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X3V0aWxzLmMtMTktI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Zib3hfdXRpbHMuaFxcdTAwM2VcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF91dGlscy5jOjIwOiNpbmNsdWRlIFxcXCJ2Ym94Z3Vlc3RfY29yZS5oXFxcIlxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X3V0aWxzLmMtMjEtXFxuLS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF92ZXJzaW9uLmgtNS0gKiBzeW5jZWQgd2l0aCB2Ym94IHVwc3RyZWFtcyB2ZXJzaW9uaW5nIHNjaGVtZSB3aGVuIHdlIGltcGxlbWVudCAvIHBvcnRcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF92ZXJzaW9uLmg6NjogKiBuZXcgZmVhdHVyZXMgZnJvbSB0aGUgdXBzdHJlYW0gb3V0LW9mLXRyZWUgdmJveGd1ZXN0IGRyaXZlci5cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF92ZXJzaW9uLmgtNy0gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NDk6MjYuMTkzMTkyMzg3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwNzQ4ODY1MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgYHZib3hzZl9kaXJfZW1pdGAgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCBpcyB3b3J0aCBmdXp6aW5nLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYHZib3hzZl9kaXJfZW1pdGAuIFRoZSBmaXJzdCB0aGluZyB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzLCBjYW4gc3l6a2FsbGVyIGV2ZW4gcmVhY2ggdGhpcyBjb2RlIHBhdGg/IE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gYXNzdW1lIHRoYXQgc3l6a2FsbGVyICpjYW4ndCogZGlyZWN0bHkgZnV6eiBgdmJveGd1ZXN0YCB1c2luZyBzb21ldGhpbmcgbGlrZSBgc3l6X3BjaV9hZGRgLCBiZWNhdXNlIHN5emthbGxlcidzIG5vdCBzZXQgdXAgZm9yIGFyYml0cmFyeSBQQ0kgZGV2aWNlIGZ1enppbmcuIEFsc28sIEkgZG9uJ3QgdGhpbmsgdGhlcmUncyBhIHNwZWNpZmljIGBzeXpfdmJveGd1ZXN0YCBjYWxsLlxuXG5CdXQgd2FpdCwgc3l6a2FsbGVyICpkaWQqIGZpbmQgdGhlIGJ1ZyEgVGhhdCdzIHRoZSBjcnVjaWFsIHBvaW50LiBPa2F5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqaG93Ki4gSWRlYWxseSwgSSdkIGNoZWNrIHRoZSBzeXprYWxsZXIgY29tbWl0IG1lc3NhZ2Ugb3IgdGhlIGRhc2hib2FyZCB0byBzZWUgaWYgdGhlcmUncyBhbnkgbWVudGlvbiBvZiBgdmJveHNmX2Rpcl9lbWl0YC4gU2hvb3QsIEkgZG9uJ3QgaGF2ZSBpbnRlcm5ldCBhY2Nlc3MsIHNvIEknbSBsaW1pdGVkIHRvIHVzaW5nIGp1c3QgdGhlIHRvb2xzIGF2YWlsYWJsZS5cblxuSWYgc3l6a2FsbGVyIGZvdW5kIGl0LCB0aGVuIGl0ICptdXN0KiBiZSByZWFjaGFibGUgc29tZWhvdy4gVGhpcyBmb3JjZXMgbWUgdG8gdGhpbmsuIEFoISBTeXprYWxsZXIgc3VwcG9ydHMgVmlydHVhbEJveCBhcyBhIFZNIGJhY2tlbmQsIHJpZ2h0PyBUaGUgYHZtX3R5cGU6IFwidmJveFwiYCBvcHRpb24uIElmIHN5emthbGxlciBpcyBydW5uaW5nIGluIFZpcnR1YWxCb3gsIHRoZW4gdGhlIGB2Ym94c2ZgIGZpbGVzeXN0ZW0gKmlzKiByZWFjaGFibGUsIGFuZCB0aGF0IG1lYW5zIHdlICpjb3VsZCogZnV6eiBpdCFcblxuTm93LCB0aGUgaW5zdHJ1Y3Rpb25zLi4uIFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucy4uLiBjb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmVcIi4gU28sIGlmIGl0J3Mgbm90IHJlYWNoYWJsZSBpbiBHQ0Ugb3IgUUVNVSwgdGhlbiBpdCdzIGJhZC4gQnV0LCB0aGUgcHJvbXB0ICpzcGVjaWZpY2FsbHkqIGNhbGxzIG91dCBcInZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLlwiIFZpcnR1YWxCb3ggKmlzKiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBJdCdzIGEgaHlwZXJ2aXNvci5cblxuQnV0Li4uIGhlcmUncyB0aGUga2lja2VyLiBTeXprYWxsZXIgKnR5cGljYWxseSogcnVucyBvbiBHQ0Ugb3IgUUVNVS4gSWYgaXQgcmVxdWlyZXMgVmlydHVhbEJveCwgZG9lcyB0aGF0IG1ha2UgaXQgdW5yZWFjaGFibGUgaW4gYSAqc3RhbmRhcmQqIHN5emthbGxlciBzZXR1cD8gUHJvYmFibHkuIFRoaXMgaXMgd2hlcmUgdGhlIHVuY2VydGFpbnR5IGxpZXMuIFRoZSBmYWN0IHRoYXQgc3l6a2FsbGVyICpkaWQqIGZpbmQgaXQgaXMgY3JpdGljYWwsIGFnYWluLCAqaG93Kj9cblxuTWF5YmUgYHZib3hzZmAgKmNhbiogYmUgbW91bnRlZCB3aXRob3V0IHRoZSBQQ0kgZGV2aWNlPyBPa2F5LCBsZXQgbWUgZ28gYmFjayB0byB0aGUgYHZib3hzZl9maWxsX3N1cGVyYCBjb2RlLiBJZiBgdmJveHNmX2Nvbm5lY3QoKWAgZmFpbHMsIGl0IHJldHVybnMgYW4gZXJyb3IuIGB2Ym94c2ZfY29ubmVjdCgpYCBjYWxscyBgdmJnX2dldF9nZGV2KClgLiBUaGUga2V5IHF1ZXN0aW9uIGlzLCBpcyB0aGVyZSAqYW55KiB3YXkgYHZiZ19nZXRfZ2RldigpYCBjYW4gcmV0dXJuIGEgdmFsaWQgcG9pbnRlciB3aXRob3V0IGEgUENJIGRldmljZT8gTGV0J3MgdHJhY2UgdGhhdCBgdmJnX2dkZXZgIGNvZGUuIEknbGwgZm9jdXMgb24gd2hldGhlciB0aGUgaHlwZXJ2aXNvciBjYW4gYmUgcmVhY2hlZCBpbiBhIHdheSB0aGF0IGRvZXNuJ3QgaW52b2x2ZSB0aGUgUENJIGRldmljZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA5OTMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NDk6MzMuMjY4MDgxNzJaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDk3NzA1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2YmdfZ2RldlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmg9MTYwPXN0cnVjdCB2Ymdfc2Vzc2lvbiB7XFxuLS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmgtMTY2LVxcdCAqIFRoZXNlIHdpbGwgYmUgYXV0b21hdGljYWxseSBkaXNjb25uZWN0ZWQgd2hlbiB0aGUgc2Vzc2lvbiBpcyBjbG9zZWQuXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5oOjE2NzpcXHQgKiBQcm90ZWN0ZWQgYnkgdmJnX2dkZXYuc2Vzc2lvbl9tdXRleC5cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmgtMTY4LVxcdCAqL1xcbi0tXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5oLTE3Mi1cXHQgKiBBbiBldmVudCB0eXBlIHJlcXVlc3RlZCBpbiBhbnkgZ3Vlc3Qgc2Vzc2lvbiB3aWxsIGJlIGFkZGVkIHRvIHRoZVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuaDoxNzM6XFx0ICogaG9zdCBmaWx0ZXIuIFByb3RlY3RlZCBieSB2YmdfZ2Rldi5zZXNzaW9uX211dGV4LlxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuaC0xNzQtXFx0ICovXFxuLS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmgtMTgzLVxcdCAqIEEgY2FwYWJpbGl0eSBjbGFpbWVkIGJ5IGFueSBndWVzdCBzZXNzaW9uIHdpbGwgYmUgcmVwb3J0ZWQgdG8gdGhlXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5oOjE4NDpcXHQgKiBob3N0LiBQcm90ZWN0ZWQgYnkgdmJnX2dkZXYuc2Vzc2lvbl9tdXRleC5cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmgtMTg1LVxcdCAqL1xcbi0tXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy0yNi1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jOjI3Oi8qKiBNdXRleCBwcm90ZWN0aW5nIHRoZSBnbG9iYWwgdmJnX2dkZXYgcG9pbnRlciB1c2VkIGJ5IHZiZ19nZXQvcHV0X2dkZXYuICovXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzoyODpzdGF0aWMgREVGSU5FX01VVEVYKHZiZ19nZGV2X211dGV4KTtcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jOjI5Oi8qKiBHbG9iYWwgdmJnX2dkZXYgcG9pbnRlciB1c2VkIGJ5IHZiZ19nZXQvcHV0X2dkZXYuICovXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzozMDpzdGF0aWMgc3RydWN0IHZiZ19kZXYgKnZiZ19nZGV2O1xcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtMzEtXFxuLS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jPTI4Nz1zdGF0aWMgaW50IHZiZ19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbi0tXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy0zODgtXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzozODk6XFx0bXV0ZXhfbG9jayhcXHUwMDI2dmJnX2dkZXZfbXV0ZXgpO1xcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmM6MzkwOlxcdGlmICghdmJnX2dkZXYpXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzozOTE6XFx0XFx0dmJnX2dkZXYgPSBnZGV2O1xcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtMzkyLVxcdGVsc2VcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTM5My1cXHRcXHRyZXQgPSAtRUJVU1k7XFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzozOTQ6XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2YmdfZ2Rldl9tdXRleCk7XFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy0zOTUtXFxuLS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jPTQxOT1zdGF0aWMgdm9pZCB2YmdfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGNpKVxcbi0tXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy00MjItXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzo0MjM6XFx0bXV0ZXhfbG9jayhcXHUwMDI2dmJnX2dkZXZfbXV0ZXgpO1xcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmM6NDI0OlxcdHZiZ19nZGV2ID0gTlVMTDtcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jOjQyNTpcXHRtdXRleF91bmxvY2soXFx1MDAyNnZiZ19nZGV2X211dGV4KTtcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTQyNi1cXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmM9NDM0PXN0cnVjdCB2YmdfZGV2ICp2YmdfZ2V0X2dkZXYodm9pZClcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTQzNS17XFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzo0MzY6XFx0bXV0ZXhfbG9jayhcXHUwMDI2dmJnX2dkZXZfbXV0ZXgpO1xcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtNDM3LVxcbi0tXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYy00NDItXFx0ICovXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfbGludXguYzo0NDM6XFx0aWYgKHZiZ19nZGV2KVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmM6NDQ0OlxcdFxcdHJldHVybiB2YmdfZ2RldjtcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTQ0NS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jOjQ0NjpcXHRtdXRleF91bmxvY2soXFx1MDAyNnZiZ19nZGV2X211dGV4KTtcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jLTQ0Ny1cXHRyZXR1cm4gRVJSX1BUUigtRU5PREVWKTtcXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmM9NDUxPXZvaWQgdmJnX3B1dF9nZGV2KHN0cnVjdCB2YmdfZGV2ICpnZGV2KVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtNDUyLXtcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jOjQ1MzpcXHRXQVJOX09OKGdkZXYgIT0gdmJnX2dkZXYpO1xcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmM6NDU0OlxcdG11dGV4X3VubG9jayhcXHUwMDI2dmJnX2dkZXZfbXV0ZXgpO1xcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtNDU1LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NDk6MzMuNDA5MDY0MDU1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0NzI2NzMzNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgYSBWaXJ0dWFsQm94IEJ1ZyoqXG5cbk9rYXksIHNvIGB2YmdfZ2RldmAgaXMgb25seSBzZXQgd2l0aGluIGB2YmdfcGNpX3Byb2JlYC4gVGhhdCdzIGEgcHJldHR5IGNsZWFyIGluZGljYXRvciB0aGF0IGl0J3Mgc3RyaWN0bHkgdGllZCB0byB0aGUgUENJIGRldmljZS4gSWYgc3l6a2FsbGVyIGZvdW5kIHRoaXMgYnVnLCB0aGF0IG1lYW5zIG9uZSBvZiB0d28gdGhpbmdzOiBlaXRoZXIgc3l6a2FsbGVyIHdhcyBydW5uaW5nIGluc2lkZSBWaXJ0dWFsQm94IChtYWtpbmcgdGhlIFBDSSBkZXZpY2UgYXZhaWxhYmxlKSwgb3Igc3l6a2FsbGVyIGhhcyBzb21lIGNsZXZlciB0cmljayBmb3IgaW5qZWN0aW5nIFBDSSBkZXZpY2VzLiBIbW0sIHdhaXQgYSBtaW51dGUuLi4gSSBrbm93IHN5emthbGxlciAqY2FuKiBpbmplY3QgZGV2aWNlcy4gSSB0aGluayB0aGVyZSBpcyBhIGBzeXpfcGNpX2FkZGAgZnVuY3Rpb24sIGFuZCBJJ20gZ3Vlc3NpbmcgdGhhdCB1c2VzIGB2ZmlvYCBvciBzb21ldGhpbmcgc2ltaWxhci4gTm8sIHRoYXQncyBub3QgcmlnaHQuIFN5emthbGxlciBkb2Vzbid0IGhhdmUgYSAqZ2VuZXJpYyogUENJIGVtdWxhdG9yIHJpZ2h0IGluIHRoZSBrZXJuZWwuIEJ1dCBpdCAqY291bGQqIGZ1enogYHZib3hndWVzdGAgaWYgaXQgcnVucyBpbiBWaXJ0dWFsQm94LlxuXG5SaWdodCwgYmFjayB0byB0aGUgcHJvbXB0LiBJdCBzYXlzIEkgc2hvdWxkIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggYWZmZWN0cyBjb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gZW52aXJvbm1lbnRzICpsaWtlKiBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIElzIFZpcnR1YWxCb3ggY29uc2lkZXJlZCBhIFwidmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVVwiPyBZZXMsIFZpcnR1YWxCb3ggKmlzKiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBCdXQgaXQgdXNlcyB0aGUgd29yZCBcImxpa2UuXCIgRG9lcyB0aGF0IG1hdHRlcj8gSWYgc29tZXRoaW5nIGlzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gR0NFIG9yIFFFTVUsIHRoZW4gSSBzaG91bGQgcmV0dXJuIGZhbHNlLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBJcyB0aGlzIGJ1ZyAqaW1wb3NzaWJsZSogdG8gcmVhY2ggaW4gR0NFIG9yIFFFTVU/IFllcywgaXQgaXMgYmVjYXVzZSBuZWl0aGVyIEdDRSBub3IgUUVNVSBlbXVsYXRlIHRoZSBWaXJ0dWFsQm94IFBDSSBkZXZpY2UuIFNvLCB0aGUgYnVnIGlzIHZlcnkgc3BlY2lmaWMgdG8gVmlydHVhbEJveC5cblxuQnV0IHdhaXQsIHdoYXQgYWJvdXQgdGhlIHNjZW5hcmlvIHdoZXJlIHN5emthbGxlciB1c2VzIGBzeXpfbW91bnRfaW1hZ2VgLCBhbmQgdGhlIGJ1ZyBsaWVzIHdpdGhpbiB0aGUgcGFyc2luZyBvZiB0aGUgaW1hZ2U/IEhtbSwgZG9lcyB0aGF0IGFwcGx5IGhlcmU/IEJ1dCBubywgYHZib3hzZmAgaXMgbm90IGEgYmxvY2sgZmlsZXN5c3RlbS4gSXQncyBuZXR3b3JrLWxpa2UuIFNvLCBhbiBpbWFnZSBpcyBub3QgaW52b2x2ZWQuXG5cbkFoYSwgdGhlIHBhdGNoIGlzIGluIGB2Ym94c2ZfZGlyX2VtaXRgLiBPa2F5LCBva2F5LiBUaW1lIHRvIGdvIGJhY2sgYW5kIHRha2UgYW5vdGhlciBsb29rIGF0IGB2Ym94c2ZfZGlyX2VtaXRgIGRpcmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzU4OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzo0OTozOS44ODE3NDI2MzJaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk0NzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3Zib3hzZi9kaXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMjE6XFx0XFx0XFx0Zm9yIChpID0gMCwgaW5mbyA9IGItXFx1MDAzZWJ1ZjsgaSBcXHUwMDNjIGN0eC1cXHUwMDNlcG9zIC0gY3VyOyBpKyspIHtcXG4gMTIyOlxcdFxcdFxcdFxcdGVuZCA9IFxcdTAwMjZpbmZvLVxcdTAwM2VuYW1lLnN0cmluZy51dGY4W2luZm8tXFx1MDAzZW5hbWUuc2l6ZV07XFxuIDEyMzpcXHRcXHRcXHRcXHQvKiBPbmx5IGhhcHBlbnMgaWYgdGhlIGhvc3QgZ2l2ZXMgdXMgY29ycnVwdCBkYXRhICovXFxuIDEyNDpcXHRcXHRcXHRcXHRpZiAoV0FSTl9PTihlbmQgXFx1MDAzZSAoYi1cXHUwMDNlYnVmICsgYi1cXHUwMDNldXNlZCkpKVxcbiAxMjU6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAxMjY6XFx0XFx0XFx0XFx0aW5mbyA9IGVuZDtcXG4gMTI3OlxcdFxcdFxcdH1cXG4gMTI4OlxcdFxcbiAxMjk6XFx0XFx0XFx0ZW5kID0gXFx1MDAyNmluZm8tXFx1MDAzZW5hbWUuc3RyaW5nLnV0ZjhbaW5mby1cXHUwMDNlbmFtZS5zaXplXTtcXG4gMTMwOlxcdFxcdFxcdGlmIChXQVJOX09OKGVuZCBcXHUwMDNlIChiLVxcdTAwM2VidWYgKyBiLVxcdTAwM2V1c2VkKSkpXFxuIDEzMTpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDEzMjpcXHRcXHRcXHRpZiAoaW5mby1cXHUwMDNlbmFtZS5sZW5ndGggXFx1MDAzZSBpbmZvLVxcdTAwM2VuYW1lLnNpemUpXFxuIDEzMzpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDEzNDpcXHRcXG4gMTM1OlxcdFxcdFxcdC8qIEluZm8gbm93IHBvaW50cyB0byB0aGUgcmlnaHQgZW50cnksIGVtaXQgaXQuICovXFxuIDEzNjpcXHRcXHRcXHRkX3R5cGUgPSB2Ym94c2ZfZ2V0X2RfdHlwZShpbmZvLVxcdTAwM2VpbmZvLmF0dHIubW9kZSk7XFxuIDEzNzpcXHRcXG4gMTM4OlxcdFxcdFxcdC8qXFxuIDEzOTpcXHRcXHRcXHQgKiBPbiAzMi1iaXQgc3lzdGVtcyBwb3MgaXMgNjQtYml0IHNpZ25lZCwgd2hpbGUgaW5vIGlzIDMyLWJpdFxcbiAxNDA6XFx0XFx0XFx0ICogdW5zaWduZWQgc28gZmFrZV9pbm8gbWF5IG92ZXJmbG93LCBjaGVjayBmb3IgdGhpcy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NDk6MzkuODgyMDQyNDgyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NjQ2NjE2NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgQ29ycnVwdCBEYXRhIElzc3VlKipcblxuT2theSwgc28gdGhlIGNvbW1lbnQgcG9pbnRzIHRoZSBmaW5nZXIgYXQgY29ycnVwdCBkYXRhLCBpbXBseWluZyB0aGUgcHJvYmxlbSBvcmlnaW5hdGVzIGZyb20gdGhlIGhvc3QsIHNwZWNpZmljYWxseSBWaXJ0dWFsQm94LiBUaGF0IG1ha2VzIHNlbnNlOyBpZiB0aGUgaG9zdCBwcm92aWRlcyBiYWQgZGF0YSwgd2UgY291bGQgZWFzaWx5IHNlZSBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIHNvbWUgb3RoZXIgbmFzdHkgbWVtb3J5IGNvcnJ1cHRpb24uIEJ1dCB0aGVuIEkgaGF2ZSB0byBhc2sgbXlzZWxmLCBob3cgd291bGQgc3l6a2FsbGVyLCBydW5uaW5nIGluIHRoZSBndWVzdCwgYmUgYWJsZSB0byBldmVuIHRyaWdnZXIgdGhpcyBzY2VuYXJpbz8gU3l6a2FsbGVyIGlzIGNvbmZpbmVkIHRvIHRoZSBndWVzdDsgaXQgY2FuJ3QgZGlyZWN0bHkgbWFuaXB1bGF0ZSB0aGUgaG9zdC4gVW5sZXNz4oCmIGNvdWxkIHN5emthbGxlciBzb21laG93IGludGVyY2VwdCB0aGUgSEdDTSBjYWxscyBhbmQgZmVlZCBiYWNrIGl0cyBvd24sIGludGVudGlvbmFsbHkgY29ycnVwdCBkYXRhP1xuXG5UaGlzIG1ha2VzIG1lIHRoaW5rLCBkb2VzIGB2Ym94Z3Vlc3RgIGhhdmUgYW55IGJ1aWx0LWluIGZlYXR1cmVzIGZvciBmYXVsdCBpbmplY3Rpb24gb3IgcGVyaGFwcyBzb21lIHNvcnQgb2YgZmFrZSBob3N0IG1vZGUgZGVzaWduZWQgZm9yIHRlc3Rpbmc/IEl0IHdvdWxkIG1ha2UgcGVyZmVjdCBzZW5zZSB0byBoYXZlIHNvbWV0aGluZyBsaWtlIHRoYXQuIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGB2Ym94Z3Vlc3RgIGNvZGUgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IGhvb2tzIG9yIGNhcGFiaWxpdGllcyB0byBzaW11bGF0ZSB0aGUgaG9zdCBhbmQgZ2VuZXJhdGUgc3BlY2lmaWMgZGF0YSBzY2VuYXJpb3MuIFRoYXQncyB0aGUga2V5OiBmaW5kaW5nIGEgd2F5IHRvIGNvbnRyb2wgdGhlIGRhdGEgZmxvdyBmcm9tIHRoZSBob3N0LCBldmVuIGluZGlyZWN0bHksIHNvIHdlIGNhbiByZWxpYWJseSByZXByb2R1Y2UgYW5kIGFuYWx5emUgdGhpcyBcImNvcnJ1cHQgZGF0YVwiIGNvbmRpdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ4NTgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzo0OTo0My43NDY3MDY2MTFaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDI1NzkzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmYXVsdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmM9MTI4ND1zdGF0aWMgaW50IHZiZ19yZXFfYWxsb3dlZChzdHJ1Y3QgdmJnX2RldiAqZ2Rldiwgc3RydWN0IHZiZ19zZXNzaW9uICpzZXNzaW9uLFxcbi0tXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jLTEzNTEtXFx0XFx0Y2FzZSBWQk9YR1VFU1RfRkFDSUxJVFlfVFlQRV9HUkFQSElDUzpcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmM6MTM1MjpcXHRcXHRkZWZhdWx0OlxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy0xMzUzLVxcdFxcdFxcdHRydXN0ZWRfYXBwc19vbmx5ID0gZmFsc2U7XFxuLS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmMtMTM1OC1cXHQvKiBBbnl0aGluZyBlbHNlIGlzIG5vdCBhbGxvd2VkLiAqL1xcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYzoxMzU5OlxcdGRlZmF1bHQ6XFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jLTEzNjAtXFx0XFx0dmJnX2VycihcXFwiRGVueWluZyB1c2Vyc3BhY2Ugdm1tIGNhbGwgdHlwZSAlIzA4eFxcXFxuXFxcIixcXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYz0xNDc4PXN0YXRpYyBib29sIHZiZ19wYXJhbV92YWxpZChlbnVtIHZtbWRldl9oZ2NtX2Z1bmN0aW9uX3BhcmFtZXRlcl90eXBlIHR5cGUpXFxuLS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmMtMTQ4Ni1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmM6MTQ4NzpcXHRkZWZhdWx0OlxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy0xNDg4LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X3V0aWxzLmM9MjUxPXN0YXRpYyBpbnQgaGdjbV9jYWxsX3ByZXByb2Nlc3MoXFxuLS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF91dGlscy5jLTI5Ni1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF91dGlscy5jOjI5NzpcXHRcXHRkZWZhdWx0OlxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X3V0aWxzLmMtMjk4LVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfdXRpbHMuYz0zMTI9c3RhdGljIHUzMiBoZ2NtX2NhbGxfbGluZWFyX2FkZHJfdHlwZV90b19wYWdlbGlzdF9mbGFncyhcXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X3V0aWxzLmMtMzE1LVxcdHN3aXRjaCAodHlwZSkge1xcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X3V0aWxzLmM6MzE2OlxcdGRlZmF1bHQ6XFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfdXRpbHMuYy0zMTctXFx0XFx0V0FSTl9PTigxKTtcXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X3V0aWxzLmM9Mzg0PXN0YXRpYyB2b2lkIGhnY21fY2FsbF9pbml0X2NhbGwoXFxuLS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF91dGlscy5jLTQyMy1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF91dGlscy5jOjQyNDpcXHRcXHRkZWZhdWx0OlxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X3V0aWxzLmMtNDI1LVxcdFxcdFxcdFdBUk5fT04oMSk7XFxuLS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF91dGlscy5jPTU2NT1zdGF0aWMgaW50IGhnY21fY2FsbF9jb3B5X2JhY2tfcmVzdWx0KFxcbi0tXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfdXRpbHMuYy02MDYtXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfdXRpbHMuYzo2MDc6XFx0XFx0ZGVmYXVsdDpcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF91dGlscy5jLTYwOC1cXHRcXHRcXHRXQVJOX09OKDEpO1xcbi0tXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfdXRpbHMuYz02NzE9aW50IHZiZ19oZ2NtX2NhbGwzMihcXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X3V0aWxzLmMtNzA2LVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X3V0aWxzLmM6NzA3OlxcdFxcdGRlZmF1bHQ6XFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfdXRpbHMuYy03MDgtXFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X3V0aWxzLmMtNzM1LVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X3V0aWxzLmM6NzM2OlxcdFxcdGRlZmF1bHQ6XFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfdXRpbHMuYy03MzctXFx0XFx0XFx0V0FSTl9PTigxKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NDk6NDMuOTE2OTc0MTkyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0ODM2ODU5NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBWaXJ0dWFsQm94IEJ1ZyBSZXBvcnQqKlxuXG5Pa2F5LCBzbyB0aGVyZSdzIGEgYnVnIHJlcG9ydCBmcm9tIHN5emthbGxlciwgYW5kIHRoZXJlJ3Mgbm8gbWVudGlvbiBvZiBmYXVsdCBpbmplY3Rpb24gb3IgYSBmYWtlZCBob3N0IGVudmlyb25tZW50LiBUaGF0J3MgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGF0IG1lLiBCdXQgaWYgc3l6a2FsbGVyIGZvdW5kIHRoaXMsIGhvdyBleGFjdGx5IGRpZCBpdCBtYW5hZ2UgdG8gbWFuaXB1bGF0ZSBob3N0IGRhdGE/IEhtbS4uLiB3YWl0IGEgbWludXRlLCBgdmJveHNmYCBpcyBhIGZpbGVzeXN0ZW0sIHJpZ2h0PyBTbywgc3l6a2FsbGVyICpjb3VsZCogaGF2ZSBtb3VudGVkIGl0LiBUaGUgaG9zdCAoVmlydHVhbEJveCkgd291bGQgdGhlbiBwcm92aWRlIHRoZSBkYXRhLiBCdXQgVmlydHVhbEJveCBpcyBhICp0cnVzdGVkKiBob3N0LiBJdCBzaG91bGRuJ3QgYmUgcmV0dXJuaW5nIGNvcnJ1cHQgZGF0YSB1bmxlc3MgdGhlcmUncyBhIGJ1ZyBpbiBWaXJ0dWFsQm94IGl0c2VsZiwgb3IuLi4gY291bGQgc3l6a2FsbGVyIGJlIGZ1enppbmcgdGhlIGhvc3QtZ3Vlc3QgY29tbXVuaWNhdGlvbiBzb21laG93P1xuXG5Ib2xkIG9uLi4uIEkgc2VlbSB0byByZWNhbGwgc2VlaW5nIHNvbWV0aGluZyBhYm91dCBhIGBzeXpfdmJveGd1ZXN0YCBmdW5jdGlvbiBzb21ld2hlcmUuIExldCBtZSBjaGVjayBpZiB0aGVyZSdzIGFueSBgc3l6X2AgZnVuY3Rpb24gcmVsYXRlZCB0byBgdmJveGd1ZXN0YCB3aXRoaW4gdGhlIHN5emthbGxlciBjb2RlLiBEYW1taXQsIEkgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIHN5emthbGxlciBzb3VyY2UgcmlnaHQgbm93LiBcblxuQnV0IHdhaXQgYSBtaW51dGUuLi4gY291bGQgaXQgYmUgZnV6emluZyBgdmJveHNmYCB0aHJvdWdoIGEgKmZha2UqIGB2Ym94Z3Vlc3RgIGRldmljZT8gVGhhdCB3b3VsZCBiZSBhIGNsZXZlciB0cmljay4gSSB3b25kZXIgaWYgc3VjaCBhIGZha2UgZGV2aWNlIGV4aXN0cy4gTGV0IG1lIGdvIGJhY2sgYW5kIHJlLWV4YW1pbmUgdGhlIGBkcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L2AgZGlyZWN0b3J5LiBNYXliZSBJIG1pc3NlZCBzb21ldGhpbmcgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2Mjc5LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjQ5OjQ4LjQwMDY2MjkzNFoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2OTI0NTcxLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmYWtlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzo0OTo0OC41MDc1OTY3NDVaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM0NDg0Nzc3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgU3l6a2FsbGVyIEZ1enppbmcgU2NlbmFyaW8qKlxuXG5Pa2F5LCBubyBzbW9rZSBhbmQgbWlycm9ycywganVzdCBwdXJlIGFuYWx5c2lzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJJcyBzeXprYWxsZXIgYWN0dWFsbHkgdGFyZ2V0aW5nIGAvZGV2L3Zib3hndWVzdGAgZGlyZWN0bHkgZnJvbSB1c2Vyc3BhY2U/XCIgVGhpcyBwYXRoIHNlZW1zIGludGVyZXN0aW5nLCBnaXZlbiB0aGF0IGAvZGV2L3Zib3hndWVzdGAgaXMgdGhlIGNvbmR1aXQgZm9yIHVzZXJzcGFjZSB0byBtYWtlIEhHQ00gY2FsbHMgdG8gdGhlIGhvc3QuIEhvd2V2ZXIsIGB2Ym94c2ZgIGlzIGEgKmtlcm5lbCogZmlsZXN5c3RlbSwgYWxzbyBjYXBhYmxlIG9mIHNlbmRpbmcgSEdDTSBjYWxscy4gSWYgc3l6a2FsbGVyJ3MgZm9jdXNlZCBvbiBgdmJveHNmYCwgaXQgd291bGQgbW91bnQgdGhlIGZpbGVzeXN0ZW0gYW5kIHBlcmZvcm0gZmlsZXN5c3RlbSBvcGVyYXRpb25zLCByaWdodD8gQnV0IGhvdyBleGFjdGx5IGNvdWxkIHN5emthbGxlciB0cmlnZ2VyIHRoaXMgXCJjb3JydXB0IGRhdGEgZnJvbSBob3N0XCIgc2NlbmFyaW8/XG5cbkl0J3MgZ290IG1lIHRoaW5raW5nLCB3YXMgdGhpcyBkaXNjb3ZlcmVkIGJ5IGEgZGlmZmVyZW50IGZ1enplciwgb3IgcGVyaGFwcyBzeXprYWxsZXIgc3R1bWJsZWQgdXBvbiBpdD8gQ291bGQgaXQgaGF2ZSBiZWVuIGFibGUgdG8gY29uc3RydWN0IGEgZGlyZWN0b3J5IG5hbWUgdGhhdCdzIGxhcmdlciB0aGFuIHRoZSBhbGxvY2F0ZWQgc2l6ZT8gVGhhdCBsYXN0IHRob3VnaHQgZmVlbHMgcHJvbWlzaW5nLi4uIFdhaXQgYSBtaW51dGUsIHdoYXQgaWYgd2XigJlyZSBkZWFsaW5nIHdpdGggYSBgaW5mby1cdTAwM2VuYW1lLmxlbmd0aCBcdTAwM2UgaW5mby1cdTAwM2VuYW1lLnNpemVgIHNpdHVhdGlvbj9cblxuTGV0IG1lIGludmVzdGlnYXRlIHRoYXQuIElmIGBpbmZvYCBpcyBhIGB2Ym94c2ZfZGlyX2luZm9gIHN0cnVjdCwgdGhpcyBjb3VsZCBiZSB0aGUga2V5LiBMZXQncyBkZWx2ZSBpbnRvIHRoZSBgdmJveHNmX2Rpcl9pbmZvYCBkZWZpbml0aW9uIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY4MjksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NDk6NTIuODUyNDQ3NzUxWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDczMDU5NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmJveHNmX2Rpcl9pbmZvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Zib3hzZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvdmJveHNmL2Rpci5jPTEyPXN0YXRpYyBpbnQgdmJveHNmX2Rpcl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxuZnMvdmJveHNmL2Rpci5jLTE1LVxcdHN0cnVjdCBzaGZsX2NyZWF0ZXBhcm1zIHBhcmFtcyA9IHt9O1xcbmZzL3Zib3hzZi9kaXIuYzoxNjpcXHRzdHJ1Y3QgdmJveHNmX2Rpcl9pbmZvICpzZl9kO1xcbmZzL3Zib3hzZi9kaXIuYy0xNy1cXHRpbnQgZXJyO1xcbmZzL3Zib3hzZi9kaXIuYy0xOC1cXG5mcy92Ym94c2YvZGlyLmM6MTk6XFx0c2ZfZCA9IHZib3hzZl9kaXJfaW5mb19hbGxvYygpO1xcbmZzL3Zib3hzZi9kaXIuYy0yMC1cXHRpZiAoIXNmX2QpXFxuLS1cXG5mcy92Ym94c2YvZGlyLmMtNDYtZXJyX2ZyZWVfZGlyX2luZm86XFxuZnMvdmJveHNmL2Rpci5jOjQ3OlxcdHZib3hzZl9kaXJfaW5mb19mcmVlKHNmX2QpO1xcbmZzL3Zib3hzZi9kaXIuYy00OC1cXHRyZXR1cm4gZXJyO1xcbi0tXFxuZnMvdmJveHNmL2Rpci5jPTUxPXN0YXRpYyBpbnQgdmJveHNmX2Rpcl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxuZnMvdmJveHNmL2Rpci5jLTUzLVxcdGlmIChmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGEpXFxuZnMvdmJveHNmL2Rpci5jOjU0OlxcdFxcdHZib3hzZl9kaXJfaW5mb19mcmVlKGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YSk7XFxuZnMvdmJveHNmL2Rpci5jLTU1LVxcbi0tXFxuZnMvdmJveHNmL2Rpci5jPTk1PXN0YXRpYyBib29sIHZib3hzZl9kaXJfZW1pdChzdHJ1Y3QgZmlsZSAqZGlyLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcXG4tLVxcbmZzL3Zib3hzZi9kaXIuYy05Ny1cXHRzdHJ1Y3QgdmJveHNmX3NiaSAqc2JpID0gVkJPWFNGX1NCSShmaWxlX2lub2RlKGRpciktXFx1MDAzZWlfc2IpO1xcbmZzL3Zib3hzZi9kaXIuYzo5ODpcXHRzdHJ1Y3QgdmJveHNmX2Rpcl9pbmZvICpzZl9kID0gZGlyLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuZnMvdmJveHNmL2Rpci5jLTk5LVxcdHN0cnVjdCBzaGZsX2RpcmluZm8gKmluZm87XFxuLS1cXG5mcy92Ym94c2YvZGlyLmMtMTE0LVxcdFxcdC8qXFxuZnMvdmJveHNmL2Rpci5jOjExNTpcXHRcXHQgKiBOb3RlIHRoZSB2Ym94c2ZfZGlyX2luZm8gb2JqZWN0cyB3ZSBhcmUgaXRlcmF0aW5nIG92ZXIgaGVyZVxcbmZzL3Zib3hzZi9kaXIuYy0xMTYtXFx0XFx0ICogYXJlIHZhcmlhYmxlIHNpemVkLCBzbyB0aGUgaW5mbyBwb2ludGVyIG1heSBlbmQgdXAgYmVpbmdcXG4tLVxcbmZzL3Zib3hzZi91dGlscy5jPTQ5OT1zdGF0aWMgdm9pZCB2Ym94c2ZfZGlyX2J1Zl9mcmVlKHN0cnVjdCB2Ym94c2ZfZGlyX2J1ZiAqYilcXG4tLVxcbmZzL3Zib3hzZi91dGlscy5jLTUwNS1cXG5mcy92Ym94c2YvdXRpbHMuYzo1MDY6c3RydWN0IHZib3hzZl9kaXJfaW5mbyAqdmJveHNmX2Rpcl9pbmZvX2FsbG9jKHZvaWQpXFxuZnMvdmJveHNmL3V0aWxzLmMtNTA3LXtcXG5mcy92Ym94c2YvdXRpbHMuYzo1MDg6XFx0c3RydWN0IHZib3hzZl9kaXJfaW5mbyAqcDtcXG5mcy92Ym94c2YvdXRpbHMuYy01MDktXFxuLS1cXG5mcy92Ym94c2YvdXRpbHMuYy01MTctXFxuZnMvdmJveHNmL3V0aWxzLmM6NTE4OnZvaWQgdmJveHNmX2Rpcl9pbmZvX2ZyZWUoc3RydWN0IHZib3hzZl9kaXJfaW5mbyAqcClcXG5mcy92Ym94c2YvdXRpbHMuYy01MTkte1xcbi0tXFxuZnMvdmJveHNmL3V0aWxzLmMtNTMxLVxcbmZzL3Zib3hzZi91dGlscy5jOjUzMjppbnQgdmJveHNmX2Rpcl9yZWFkX2FsbChzdHJ1Y3QgdmJveHNmX3NiaSAqc2JpLCBzdHJ1Y3QgdmJveHNmX2Rpcl9pbmZvICpzZl9kLFxcbmZzL3Zib3hzZi91dGlscy5jLTUzMy1cXHRcXHRcXHR1NjQgaGFuZGxlKVxcbi0tXFxuZnMvdmJveHNmL3Zmc21vZC5oPTUzPXN0cnVjdCB2Ym94c2ZfaW5vZGUge1xcbi0tXFxuZnMvdmJveHNmL3Zmc21vZC5oLTYzLVxcbmZzL3Zib3hzZi92ZnNtb2QuaDo2NDpzdHJ1Y3QgdmJveHNmX2Rpcl9pbmZvIHtcXG5mcy92Ym94c2YvdmZzbW9kLmgtNjUtXFx0c3RydWN0IGxpc3RfaGVhZCBpbmZvX2xpc3Q7XFxuLS1cXG5mcy92Ym94c2YvdmZzbW9kLmg9MTA3PWludCB2Ym94c2ZfbmxzY3B5KHN0cnVjdCB2Ym94c2Zfc2JpICpzYmksIGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX2JvdW5kX2xlbixcXG5mcy92Ym94c2YvdmZzbW9kLmgtMTA4LVxcdFxcdCAgY29uc3QgdW5zaWduZWQgY2hhciAqdXRmOF9uYW1lLCBzaXplX3QgdXRmOF9sZW4pO1xcbmZzL3Zib3hzZi92ZnNtb2QuaDoxMDk6c3RydWN0IHZib3hzZl9kaXJfaW5mbyAqdmJveHNmX2Rpcl9pbmZvX2FsbG9jKHZvaWQpO1xcbmZzL3Zib3hzZi92ZnNtb2QuaDoxMTA6dm9pZCB2Ym94c2ZfZGlyX2luZm9fZnJlZShzdHJ1Y3QgdmJveHNmX2Rpcl9pbmZvICpwKTtcXG5mcy92Ym94c2YvdmZzbW9kLmg6MTExOmludCB2Ym94c2ZfZGlyX3JlYWRfYWxsKHN0cnVjdCB2Ym94c2Zfc2JpICpzYmksIHN0cnVjdCB2Ym94c2ZfZGlyX2luZm8gKnNmX2QsXFxuZnMvdmJveHNmL3Zmc21vZC5oLTExMi1cXHRcXHRcXHR1NjQgaGFuZGxlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NDk6NTIuOTU5NzYxNjUyWiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2MjQzNTQwOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyBgc2hmbF9kaXJpbmZvYCoqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYGluZm9gIGlzIGRlZmluZWQgYXMgYSBgc3RydWN0IHNoZmxfZGlyaW5mb2AuIExldCdzIHBhdXNlIGFuZCBkaWcgaW50byB0aGF0IHNwZWNpZmljIHN0cnVjdHVyZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgdGhhdCBzdHJ1Y3QgaXMgYWN0dWFsbHkgY29tcG9zZWQgb2YuIFdoYXQgYXJlIHRoZSBrZXkgZmllbGRzIHdpdGhpbiBgc2hmbF9kaXJpbmZvYD8gVW5kZXJzdGFuZGluZyB0aG9zZSBtZW1iZXJzIGlzIGNydWNpYWwgdG8gaW50ZXJwcmV0aW5nIHRoZSBuZXh0IHN0ZXBzLiBJJ20gZ29pbmcgdG8gcXVpY2tseSByZWZlcmVuY2UgdGhlIGRvY3VtZW50YXRpb24gb3IgaGVhZGVyIGZpbGUgZm9yIGBzaGZsX2RpcmluZm9gLi4uIFRoaXMgaGVscHMgbWUgc2VlIGl0cyBtYWtldXAgd2l0aGluIHRoZSBncmVhdGVyIGNvbnRleHQsIGFzIEkgcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg1MTEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzo0OTo1NS41ODQxMTg1MDdaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4NTY0MjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBzaGZsX2RpcmluZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvdmJveHNmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy92Ym94c2YvZGlyLmM9OTU9c3RhdGljIGJvb2wgdmJveHNmX2Rpcl9lbWl0KHN0cnVjdCBmaWxlICpkaXIsIHN0cnVjdCBkaXJfY29udGV4dCAqY3R4KVxcbi0tXFxuZnMvdmJveHNmL2Rpci5jLTk4LVxcdHN0cnVjdCB2Ym94c2ZfZGlyX2luZm8gKnNmX2QgPSBkaXItXFx1MDAzZXByaXZhdGVfZGF0YTtcXG5mcy92Ym94c2YvZGlyLmM6OTk6XFx0c3RydWN0IHNoZmxfZGlyaW5mbyAqaW5mbztcXG5mcy92Ym94c2YvZGlyLmMtMTAwLVxcdHN0cnVjdCB2Ym94c2ZfZGlyX2J1ZiAqYjtcXG4tLVxcbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmg9Mzk2PXN0cnVjdCBzaGZsX2NyZWF0ZXBhcm1zIHtcXG4tLVxcbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmgtNDEzLS8qKiBTaGFyZWQgRm9sZGVyIGRpcmVjdG9yeSBpbmZvcm1hdGlvbiAqL1xcbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmg6NDE0OnN0cnVjdCBzaGZsX2RpcmluZm8ge1xcbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmgtNDE1LVxcdC8qKiBGdWxsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvYmplY3QuICovXFxuLS1cXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oPTY2Mz1zdHJ1Y3Qgc2hmbF9saXN0IHtcXG4tLVxcbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmgtNjk1LVxcdCAqIHBvaW50ZXIsIG91dDpcXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oOjY5NjpcXHQgKiBCdWZmZXIgdG8gcGxhY2UgbGlzdGluZyBpbmZvcm1hdGlvbiB0by4gKHN0cnVjdCBzaGZsX2RpcmluZm8pXFxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaC02OTctXFx0ICovXFxuLS1cXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM9MjUwPWludCB2Ym94c2ZfZGlyaW5mbyh1MzIgcm9vdCwgdTY0IGhhbmRsZSxcXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMjUxLVxcdFxcdCAgIHN0cnVjdCBzaGZsX3N0cmluZyAqcGFyc2VkX3BhdGgsIHUzMiBmbGFncywgdTMyIGluZGV4LFxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYzoyNTI6XFx0XFx0ICAgdTMyICpidWZfbGVuLCBzdHJ1Y3Qgc2hmbF9kaXJpbmZvICpidWYsIHUzMiAqZmlsZV9jb3VudClcXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMjUzLXtcXG4tLVxcbmZzL3Zib3hzZi92ZnNtb2QuaD0xMjk9aW50IHZib3hzZl9kaXJpbmZvKHUzMiByb290LCB1NjQgaGFuZGxlLFxcbmZzL3Zib3hzZi92ZnNtb2QuaC0xMzAtXFx0XFx0ICAgc3RydWN0IHNoZmxfc3RyaW5nICpwYXJzZWRfcGF0aCwgdTMyIGZsYWdzLCB1MzIgaW5kZXgsXFxuZnMvdmJveHNmL3Zmc21vZC5oOjEzMTpcXHRcXHQgICB1MzIgKmJ1Zl9sZW4sIHN0cnVjdCBzaGZsX2RpcmluZm8gKmJ1ZiwgdTMyICpmaWxlX2NvdW50KTtcXG5mcy92Ym94c2YvdmZzbW9kLmgtMTMyLWludCB2Ym94c2ZfZnNpbmZvKHUzMiByb290LCB1NjQgaGFuZGxlLCB1MzIgZmxhZ3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjQ5OjU1LjY4MjY5MjM3WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNzMyMDYyOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBWaXJ0dWFsQm94IFNoYXJlZCBGb2xkZXJzIEtlcm5lbCBNb2R1bGUqKlxuXG5SaWdodCwgbGV0J3Mgc2VlLCB0aGUgc3RydWN0dXJlIGBzaGZsX2RpcmluZm9gLi4uIHRoYXQncyBkZWZpbmVkIGluIGBmcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oYC4gT2theSwgc28gd2UncmUgdGFsa2luZyBhYm91dCB0aGUgVmlydHVhbEJveCBTaGFyZWQgRm9sZGVycyBrZXJuZWwgbW9kdWxlLCBzcGVjaWZpY2FsbHkgdGhlIGludGVyZmFjZSB3aXRoIHRoZSBob3N0LiBcInNoZmxcIiBsaWtlbHkgc3RhbmRzIGZvciBcInNoYXJlZCBmb2xkZXIsXCIgYW5kIGBkaXJpbmZvYCBzdHJvbmdseSBzdWdnZXN0cyB0aGlzIHN0cnVjdHVyZSBjb250YWlucyBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIGRpcmVjdG9yeSBsaXN0aW5ncyBvciBwZXJoYXBzIGF0dHJpYnV0ZSByZXRyaWV2YWwgZm9yIHNoYXJlZCBkaXJlY3Rvcmllcy4gV2UncmUgcHJvYmFibHkgbG9va2luZyBhdCBob3cgdGhlIGd1ZXN0IE9TIGludGVyYWN0cyB3aXRoIHRoZSBob3N0IGZpbGVzeXN0ZW0gdGhyb3VnaCB0aGlzIG1vZHVsZS4gS25vd2luZyB0aGUgaGVhZGVyIGZpbGUgaXQncyBpbiBpcyBrZXk7IGl0J2xsIGdpdmUgdXMgdGhlIGRlY2xhcmF0aW9uIG9mIHRoZSBzdHJ1Y3R1cmUgaXRzZWxmLCBhbmQgd2UgY2FuIGFsc28gc2VlIGFueSByZWxhdGVkIGZ1bmN0aW9ucyB0aGF0IGFyZSBkZWNsYXJlZCBpbiB0aGUgc2FtZSBoZWFkZXIgZmlsZS4gSWYgSSBuZWVkIHRvIGRlYnVnIG9yIGRpdmUgZGVlcGVyLCB0aGlzIGlzIHRoZSBwZXJmZWN0IHN0YXJ0aW5nIHBvaW50LiBUaGUgbmFtZSBpbXBsaWVzIGRpcmVjdG9yeSBkZXRhaWxzIGFyZSBzdG9yZWQgd2l0aGluIHRoaXMgc3RydWN0dXJlLCBzbyBpdCdzIHByb2JhYmx5IGhvdyBWQm94U0YgaGFuZGxlcyB0aGluZ3MgbGlrZSBkaXJlY3RvcnkgcGVybWlzc2lvbnMsIHRpbWVzdGFtcHMsIG9yIHBlcmhhcHMgZXZlbiBmaWxlIHNpemUgd2hlbiB0aGUgZ3Vlc3QgT1MgaW50ZXJhY3RzIHdpdGggdGhlIHNoYXJlZCBmb2xkZXJzLiBUaGUgaW5jbHVzaW9uIG9mIGBzaGZsX2hvc3RpbnRmLmhgIHNpZ25pZmllcyB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGludGVyZmFjZSBiZXR3ZWVuIHRoZSBWQm94U0Yga2VybmVsIG1vZHVsZSBhbmQgdGhlIGhvc3Qgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTM3MiwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjQ5OjU4Ljg1NTkwMzc4OVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjYyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA0MTMsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MTM6XFx0LyoqIFNoYXJlZCBGb2xkZXIgZGlyZWN0b3J5IGluZm9ybWF0aW9uICovXFxuIDQxNDpcXHRzdHJ1Y3Qgc2hmbF9kaXJpbmZvIHtcXG4gNDE1OlxcdFxcdC8qKiBGdWxsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvYmplY3QuICovXFxuIDQxNjpcXHRcXHRzdHJ1Y3Qgc2hmbF9mc29iamluZm8gaW5mbztcXG4gNDE3OlxcdFxcdC8qKlxcbiA0MTg6XFx0XFx0ICogVGhlIGxlbmd0aCBvZiB0aGUgc2hvcnQgZmllbGQgKG51bWJlciBvZiBVVEYxNiBjaGFycykuXFxuIDQxOTpcXHRcXHQgKiBJdCBpcyAxNi1iaXQgZm9yIHJlYXNvbnMgb2YgYWxpZ25tZW50LlxcbiA0MjA6XFx0XFx0ICovXFxuIDQyMTpcXHRcXHR1MTYgc2hvcnRfbmFtZV9sZW47XFxuIDQyMjpcXHRcXHQvKipcXG4gNDIzOlxcdFxcdCAqIFRoZSBzaG9ydCBuYW1lIGZvciA4LjMgY29tcGF0aWJpbGl0eS5cXG4gNDI0OlxcdFxcdCAqIEVtcHR5IHN0cmluZyBpZiBub3QgYXZhaWxhYmxlLlxcbiA0MjU6XFx0XFx0ICovXFxuIDQyNjpcXHRcXHR1MTYgc2hvcnRfbmFtZVsxNF07XFxuIDQyNzpcXHRcXHRzdHJ1Y3Qgc2hmbF9zdHJpbmcgbmFtZTtcXG4gNDI4OlxcdH07XFxuIDQyOTpcXHRcXG4gNDMwOlxcdC8qKiBTaGFyZWQgZm9sZGVyIGZpbGVzeXN0ZW0gcHJvcGVydGllcy4gKi9cXG4gNDMxOlxcdHN0cnVjdCBzaGZsX2ZzcHJvcGVydGllcyB7XFxuIDQzMjpcXHRcXHQvKipcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NDk6NTguODU2MDczODE5WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MTc5MzgyMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyB0aGUgU3RydWN0dXJlIERlZmluaXRpb25zKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoZSBjb2RlLCBhbmQgSSBzZWUgdGhlIGZhbWlsaWFyIGBzdHJ1Y3Qgc2hmbF9zdHJpbmdgIGRlZmluZWQgaW4gdGhpcyBibG9jay4gVGhpcyBpc24ndCB1bmV4cGVjdGVkLCBvZiBjb3Vyc2UuIEknZCBuZWVkIHRvIGdvIGRlZXBlciB0byB1bmRlcnN0YW5kIGl0cyBwcmVjaXNlIHJvbGUgaW4gdGhlIGJyb2FkZXIgc3lzdGVtLCBhbmQgdGhlIGZ1bmN0aW9ucyB0aGF0IHVzZSBpdCwgYnV0IHNlZWluZyB0aGlzIGRlZmluaXRpb24gaXMgYSBkYXRhIHBvaW50LiBJdCB0ZWxscyBtZSB0aGF0IHdoYXRldmVyIGxpYnJhcnkgb3IgbW9kdWxlIEknbSBleGFtaW5pbmcgbGlrZWx5IHJlbGllcyBvbiBzb21lIGN1c3RvbSBzdHJpbmcgcmVwcmVzZW50YXRpb24sIHdoaWNoIGlzIHZlcnkgY29tbW9uIGluIGhpZ2gtcGVyZm9ybWFuY2Ugb3IgcmVzb3VyY2UtY29uc3RyYWluZWQgZW52aXJvbm1lbnRzLiBJJ2xsIG1lbnRhbGx5IHRhZyB0aGlzIGFzIHNvbWV0aGluZyB0byBpbnZlc3RpZ2F0ZSBmb3IgaXRzIG1lbW9yeSBsYXlvdXQsIHBvdGVudGlhbCBvcHRpbWl6YXRpb24gdGVjaG5pcXVlcyAoZS5nLiwgU21hbGwgU3RyaW5nIE9wdGltaXphdGlvbiksIGFuZCBob3cgaXQgaGFuZGxlcyBzdHJpbmcgbWFuaXB1bGF0aW9uLiBLbm93aW5nIHRoZSBkZXRhaWxzIG9mIGl0cyBzdHJ1Y3R1cmUgd2lsbCB0ZWxsIG1lIG11Y2ggbW9yZSBhYm91dCB0aGUgcmVzdCBvZiB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk5OTgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjUwOjAxLjY3NDAxNjk5WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzg0NDAwODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IHNoZmxfc3RyaW5nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Zib3hzZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvdmJveHNmL2Rpci5jPTM1NT1zdGF0aWMgaW50IHZib3hzZl9kaXJfdW5saW5rKHN0cnVjdCBpbm9kZSAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuLS1cXG5mcy92Ym94c2YvZGlyLmMtMzU5LVxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkX2lub2RlKGRlbnRyeSk7XFxuZnMvdmJveHNmL2Rpci5jOjM2MDpcXHRzdHJ1Y3Qgc2hmbF9zdHJpbmcgKnBhdGg7XFxuZnMvdmJveHNmL2Rpci5jLTM2MS1cXHR1MzIgZmxhZ3M7XFxuLS1cXG5mcy92Ym94c2YvZGlyLmM9Mzg3PXN0YXRpYyBpbnQgdmJveHNmX2Rpcl9yZW5hbWUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLS1cXG5mcy92Ym94c2YvZGlyLmMtMzk3LVxcdHUzMiBzaGZsX2ZsYWdzID0gU0hGTF9SRU5BTUVfRklMRSB8IFNIRkxfUkVOQU1FX1JFUExBQ0VfSUZfRVhJU1RTO1xcbmZzL3Zib3hzZi9kaXIuYzozOTg6XFx0c3RydWN0IHNoZmxfc3RyaW5nICpvbGRfcGF0aCwgKm5ld19wYXRoO1xcbmZzL3Zib3hzZi9kaXIuYy0zOTktXFx0aW50IGVycjtcXG4tLVxcbmZzL3Zib3hzZi9kaXIuYz00MzA9c3RhdGljIGludCB2Ym94c2ZfZGlyX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLS1cXG5mcy92Ym94c2YvZGlyLmMtNDM2LVxcdGludCBzeW1uYW1lX3NpemUgPSBzdHJsZW4oc3ltbmFtZSkgKyAxO1xcbmZzL3Zib3hzZi9kaXIuYzo0Mzc6XFx0c3RydWN0IHNoZmxfc3RyaW5nICpwYXRoLCAqc3N5bW5hbWU7XFxuZnMvdmJveHNmL2Rpci5jLTQzOC1cXHRzdHJ1Y3Qgc2hmbF9mc29iamluZm8gaW5mbztcXG4tLVxcbmZzL3Zib3hzZi9maWxlLmM9MzU5PXN0YXRpYyBjb25zdCBjaGFyICp2Ym94c2ZfZ2V0X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvdmJveHNmL2ZpbGUuYy0zNjItXFx0c3RydWN0IHZib3hzZl9zYmkgKnNiaSA9IFZCT1hTRl9TQkkoaW5vZGUtXFx1MDAzZWlfc2IpO1xcbmZzL3Zib3hzZi9maWxlLmM6MzYzOlxcdHN0cnVjdCBzaGZsX3N0cmluZyAqcGF0aDtcXG5mcy92Ym94c2YvZmlsZS5jLTM2NC1cXHRjaGFyICpsaW5rO1xcbi0tXFxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaD0yNz1lbnVtIHtcXG4tLVxcbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmgtNjEtLyoqIFNoYXJlZCBmb2xkZXIgc3RyaW5nIGJ1ZmZlciBzdHJ1Y3R1cmUuICovXFxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaDo2MjpzdHJ1Y3Qgc2hmbF9zdHJpbmcge1xcbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmgtNjMtXFx0LyoqIEFsbG9jYXRlZCBzaXplIG9mIHRoZSBzdHJpbmcgbWVtYmVyIGluIGJ5dGVzLiAqL1xcbi0tXFxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaD03Nj1WTU1ERVZfQVNTRVJUX1NJWkUoc2hmbF9zdHJpbmcsIDYpO1xcbi0tXFxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaC04MS0vKiBDYWxjdWxhdGUgc2l6ZSBvZiB0aGUgc3RyaW5nLiAqL1xcbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmg6ODI6c3RhdGljIGlubGluZSB1MzIgc2hmbF9zdHJpbmdfYnVmX3NpemUoY29uc3Qgc3RydWN0IHNoZmxfc3RyaW5nICpzdHJpbmcpXFxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaC04My17XFxuLS1cXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oPTQxND1zdHJ1Y3Qgc2hmbF9kaXJpbmZvIHtcXG4tLVxcbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmgtNDI2LVxcdHUxNiBzaG9ydF9uYW1lWzE0XTtcXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oOjQyNzpcXHRzdHJ1Y3Qgc2hmbF9zdHJpbmcgbmFtZTtcXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oLTQyOC19O1xcbi0tXFxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaD00ODc9c3RydWN0IHNoZmxfbWFwX2ZvbGRlciB7XFxuLS1cXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oLTQ4OS1cXHQgKiBwb2ludGVyLCBpbjpcXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oOjQ5MDpcXHQgKiBQb2ludHMgdG8gc3RydWN0IHNoZmxfc3RyaW5nIGJ1ZmZlci5cXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oLTQ5MS1cXHQgKi9cXG4tLVxcbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmg9NTMzPXN0cnVjdCBzaGZsX2NyZWF0ZSB7XFxuLS1cXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oLTU0MS1cXHQgKiBwb2ludGVyLCBpbjpcXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oOjU0MjpcXHQgKiBQb2ludHMgdG8gc3RydWN0IHNoZmxfc3RyaW5nIGJ1ZmZlci5cXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oLTU0My1cXHQgKi9cXG4tLVxcbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmg9NjYzPXN0cnVjdCBzaGZsX2xpc3Qge1xcbi0tXFxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaC02ODktXFx0ICogcG9pbnRlciwgaW4vb3B0aW9uYWxcXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oOjY5MDpcXHQgKiBQb2ludHMgdG8gc3RydWN0IHNoZmxfc3RyaW5nIGJ1ZmZlciB0aGF0IHNwZWNpZmllcyBhIHNlYXJjaCBwYXRoLlxcbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmgtNjkxLVxcdCAqL1xcbi0tXFxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaD03MjA9c3RydWN0IHNoZmxfcmVhZExpbmsge1xcbi0tXFxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaC03MjgtXFx0ICogcG9pbnRlciwgaW46XFxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaDo3Mjk6XFx0ICogUG9pbnRzIHRvIHN0cnVjdCBzaGZsX3N0cmluZyBidWZmZXIuXFxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaC03MzAtXFx0ICovXFxuLS1cXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oPTgxMD1zdHJ1Y3Qgc2hmbF9yZW1vdmUge1xcbi0tXFxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaC04MTgtXFx0ICogcG9pbnRlciwgaW46XFxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaDo4MTk6XFx0ICogUG9pbnRzIHRvIHN0cnVjdCBzaGZsX3N0cmluZyBidWZmZXIuXFxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaC04MjAtXFx0ICovXFxuLS1cXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oPTg0MT1zdHJ1Y3Qgc2hmbF9yZW5hbWUge1xcbi0tXFxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaC04NDktXFx0ICogcG9pbnRlciwgaW46XFxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaDo4NTA6XFx0ICogUG9pbnRzIHRvIHN0cnVjdCBzaGZsX3N0cmluZyBzcmMuXFxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaC04NTEtXFx0ICovXFxuLS1cXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oLTg1NS1cXHQgKiBwb2ludGVyLCBpbjpcXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oOjg1NjpcXHQgKiBQb2ludHMgdG8gc3RydWN0IHNoZmxfc3RyaW5nIGRlc3QuXFxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaC04NTctXFx0ICovXFxuLS1cXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oPTg3Mj1zdHJ1Y3Qgc2hmbF9zeW1saW5rIHtcXG4tLVxcbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmgtODgwLVxcdCAqIHBvaW50ZXIsIGluOlxcbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmg6ODgxOlxcdCAqIFBvaW50cyB0byBzdHJ1Y3Qgc2hmbF9zdHJpbmcgb2YgcGF0aCBmb3IgdGhlIG5ldyBzeW1saW5rLlxcbmZzL3Zib3hzZi9zaGZsX2hvc3RpbnRmLmgtODgyLVxcdCAqL1xcbi0tXFxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaC04ODYtXFx0ICogcG9pbnRlciwgaW46XFxuZnMvdmJveHNmL3NoZmxfaG9zdGludGYuaDo4ODc6XFx0ICogUG9pbnRzIHRvIHN0cnVjdCBzaGZsX3N0cmluZyBvZiBkZXN0aW5hdGlvbiBmb3Igc3ltbGluay5cXG5mcy92Ym94c2Yvc2hmbF9ob3N0aW50Zi5oLTg4OC1cXHQgKi9cXG4tLVxcbmZzL3Zib3hzZi9zdXBlci5jPTExMT1zdGF0aWMgaW50IHZib3hzZl9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL3Zib3hzZi9zdXBlci5jLTExMy1cXHRzdHJ1Y3QgdmJveHNmX2ZzX2NvbnRleHQgKmN0eCA9IGZjLVxcdTAwM2Vmc19wcml2YXRlO1xcbmZzL3Zib3hzZi9zdXBlci5jOjExNDpcXHRzdHJ1Y3Qgc2hmbF9zdHJpbmcgKmZvbGRlcl9uYW1lLCByb290X3BhdGg7XFxuZnMvdmJveHNmL3N1cGVyLmMtMTE1LVxcdHN0cnVjdCB2Ym94c2Zfc2JpICpzYmk7XFxuLS1cXG5mcy92Ym94c2YvdXRpbHMuYz0xMzg9aW50IHZib3hzZl9jcmVhdGVfYXRfZGVudHJ5KHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL3Zib3hzZi91dGlscy5jLTE0MS1cXHRzdHJ1Y3QgdmJveHNmX3NiaSAqc2JpID0gVkJPWFNGX1NCSShkZW50cnktXFx1MDAzZWRfc2IpO1xcbmZzL3Zib3hzZi91dGlscy5jOjE0MjpcXHRzdHJ1Y3Qgc2hmbF9zdHJpbmcgKnBhdGg7XFxuZnMvdmJveHNmL3V0aWxzLmMtMTQzLVxcdGludCBlcnI7XFxuLS1cXG5mcy92Ym94c2YvdXRpbHMuYy0xNTQtXFxuZnMvdmJveHNmL3V0aWxzLmM6MTU1OmludCB2Ym94c2Zfc3RhdChzdHJ1Y3QgdmJveHNmX3NiaSAqc2JpLCBzdHJ1Y3Qgc2hmbF9zdHJpbmcgKnBhdGgsXFxuZnMvdmJveHNmL3V0aWxzLmMtMTU2LVxcdFxcdHN0cnVjdCBzaGZsX2Zzb2JqaW5mbyAqaW5mbylcXG4tLVxcbmZzL3Zib3hzZi91dGlscy5jPTE3Nz1pbnQgdmJveHNmX3N0YXRfZGVudHJ5KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IHNoZmxfZnNvYmppbmZvICppbmZvKVxcbi0tXFxuZnMvdmJveHNmL3V0aWxzLmMtMTc5LVxcdHN0cnVjdCB2Ym94c2Zfc2JpICpzYmkgPSBWQk9YU0ZfU0JJKGRlbnRyeS1cXHUwMDNlZF9zYik7XFxuZnMvdmJveHNmL3V0aWxzLmM6MTgwOlxcdHN0cnVjdCBzaGZsX3N0cmluZyAqcGF0aDtcXG5mcy92Ym94c2YvdXRpbHMuYy0xODEtXFx0aW50IGVycjtcXG4tLVxcbmZzL3Zib3hzZi91dGlscy5jPTI2MD1pbnQgdmJveHNmX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL3Zib3hzZi91dGlscy5jLTM2NS0gKi9cXG5mcy92Ym94c2YvdXRpbHMuYzozNjY6c3RydWN0IHNoZmxfc3RyaW5nICp2Ym94c2ZfcGF0aF9mcm9tX2RlbnRyeShzdHJ1Y3QgdmJveHNmX3NiaSAqc2JpLFxcbmZzL3Zib3hzZi91dGlscy5jLTM2Ny1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbmZzL3Zib3hzZi91dGlscy5jLTM2OC17XFxuZnMvdmJveHNmL3V0aWxzLmM6MzY5OlxcdHN0cnVjdCBzaGZsX3N0cmluZyAqc2hmbF9wYXRoO1xcbmZzL3Zib3hzZi91dGlscy5jLTM3MC1cXHRpbnQgcGF0aF9sZW4sIG91dF9sZW4sIG5iO1xcbi0tXFxuZnMvdmJveHNmL3V0aWxzLmMtNDI3LVxcdFxcdCAqL1xcbmZzL3Zib3hzZi91dGlscy5jOjQyODpcXHRcXHRzaGZsX3BhdGggPSAoc3RydWN0IHNoZmxfc3RyaW5nICopYnVmO1xcbmZzL3Zib3hzZi91dGlscy5jLTQyOS1cXHRcXHRtZW1tb3ZlKHNoZmxfcGF0aC1cXHUwMDNlc3RyaW5nLnV0ZjgsIHBhdGgsIHBhdGhfbGVuKTtcXG4tLVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYz01Mz1zdGF0aWMgaW50IHZib3hzZl9jYWxsKHUzMiBmdW5jdGlvbiwgdm9pZCAqcGFybXMsIHUzMiBwYXJtX2NvdW50LCBpbnQgKnN0YXR1cylcXG4tLVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy03NC1cXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM6NzU6aW50IHZib3hzZl9tYXBfZm9sZGVyKHN0cnVjdCBzaGZsX3N0cmluZyAqZm9sZGVyX25hbWUsIHUzMiAqcm9vdClcXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtNzYte1xcbi0tXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jPTEwMj1pbnQgdmJveHNmX3VubWFwX2ZvbGRlcih1MzIgcm9vdClcXG4tLVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy0xMjktICovXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jOjEzMDppbnQgdmJveHNmX2NyZWF0ZSh1MzIgcm9vdCwgc3RydWN0IHNoZmxfc3RyaW5nICpwYXJzZWRfcGF0aCxcXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMTMxLVxcdFxcdCAgc3RydWN0IHNoZmxfY3JlYXRlcGFybXMgKmNyZWF0ZV9wYXJtcylcXG4tLVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYz0xNDk9aW50IHZib3hzZl9jbG9zZSh1MzIgcm9vdCwgdTY0IGhhbmRsZSlcXG4tLVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy0xNjEtXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jOjE2MjppbnQgdmJveHNmX3JlbW92ZSh1MzIgcm9vdCwgc3RydWN0IHNoZmxfc3RyaW5nICpwYXJzZWRfcGF0aCwgdTMyIGZsYWdzKVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy0xNjMte1xcbi0tXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jLTE3OC1cXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM6MTc5OmludCB2Ym94c2ZfcmVuYW1lKHUzMiByb290LCBzdHJ1Y3Qgc2hmbF9zdHJpbmcgKnNyY19wYXRoLFxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYzoxODA6XFx0XFx0ICBzdHJ1Y3Qgc2hmbF9zdHJpbmcgKmRlc3RfcGF0aCwgdTMyIGZsYWdzKVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy0xODEte1xcbi0tXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jPTI1MD1pbnQgdmJveHNmX2RpcmluZm8odTMyIHJvb3QsIHU2NCBoYW5kbGUsXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jOjI1MTpcXHRcXHQgICBzdHJ1Y3Qgc2hmbF9zdHJpbmcgKnBhcnNlZF9wYXRoLCB1MzIgZmxhZ3MsIHUzMiBpbmRleCxcXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMjUyLVxcdFxcdCAgIHUzMiAqYnVmX2xlbiwgc3RydWN0IHNoZmxfZGlyaW5mbyAqYnVmLCB1MzIgKmZpbGVfY291bnQpXFxuLS1cXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmM9Mjk0PWludCB2Ym94c2ZfZnNpbmZvKHUzMiByb290LCB1NjQgaGFuZGxlLCB1MzIgZmxhZ3MsXFxuLS1cXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMzE5LVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYzozMjA6aW50IHZib3hzZl9yZWFkbGluayh1MzIgcm9vdCwgc3RydWN0IHNoZmxfc3RyaW5nICpwYXJzZWRfcGF0aCxcXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMzIxLVxcdFxcdCAgICB1MzIgYnVmX2xlbiwgdTggKmJ1ZilcXG4tLVxcbmZzL3Zib3hzZi92Ym94c2Zfd3JhcHBlcnMuYy0zMzktXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jOjM0MDppbnQgdmJveHNmX3N5bWxpbmsodTMyIHJvb3QsIHN0cnVjdCBzaGZsX3N0cmluZyAqbmV3X3BhdGgsXFxuZnMvdmJveHNmL3Zib3hzZl93cmFwcGVycy5jOjM0MTpcXHRcXHQgICBzdHJ1Y3Qgc2hmbF9zdHJpbmcgKm9sZF9wYXRoLCBzdHJ1Y3Qgc2hmbF9mc29iamluZm8gKmJ1ZilcXG5mcy92Ym94c2YvdmJveHNmX3dyYXBwZXJzLmMtMzQyLXtcXG4tLVxcbmZzL3Zib3hzZi92ZnNtb2QuaD05ND1pbnQgdmJveHNmX2NyZWF0ZV9hdF9kZW50cnkoc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbmZzL3Zib3hzZi92ZnNtb2QuaC05NS1cXHRcXHRcXHQgICAgc3RydWN0IHNoZmxfY3JlYXRlcGFybXMgKnBhcmFtcyk7XFxuZnMvdmJveHNmL3Zmc21vZC5oOjk2OmludCB2Ym94c2Zfc3RhdChzdHJ1Y3QgdmJveHNmX3NiaSAqc2JpLCBzdHJ1Y3Qgc2hmbF9zdHJpbmcgKnBhdGgsXFxuZnMvdmJveHNmL3Zmc21vZC5oLTk3LVxcdFxcdHN0cnVjdCBzaGZsX2Zzb2JqaW5mbyAqaW5mbyk7XFxuLS1cXG5mcy92Ym94c2YvdmZzbW9kLmg9MTAzPWludCB2Ym94c2Zfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbmZzL3Zib3hzZi92ZnNtb2QuaC0xMDQtXFx0XFx0ICAgc3RydWN0IGlhdHRyICppYXR0cik7XFxuZnMvdmJveHNmL3Zmc21vZC5oOjEwNTpzdHJ1Y3Qgc2hmbF9zdHJpbmcgKnZib3hzZl9wYXRoX2Zyb21fZGVudHJ5KHN0cnVjdCB2Ym94c2Zfc2JpICpzYmksXFxuZnMvdmJveHNmL3Zmc21vZC5oLTEwNi1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcXG4tLVxcbmZzL3Zib3hzZi92ZnNtb2QuaD0xMTY9dm9pZCB2Ym94c2ZfZGlzY29ubmVjdCh2b2lkKTtcXG5mcy92Ym94c2YvdmZzbW9kLmgtMTE3LVxcbmZzL3Zib3hzZi92ZnNtb2QuaDoxMTg6aW50IHZib3hzZl9jcmVhdGUodTMyIHJvb3QsIHN0cnVjdCBzaGZsX3N0cmluZyAqcGFyc2VkX3BhdGgsXFxuZnMvdmJveHNmL3Zmc21vZC5oLTExOS1cXHRcXHQgIHN0cnVjdCBzaGZsX2NyZWF0ZXBhcm1zICpjcmVhdGVfcGFybXMpO1xcbi0tXFxuZnMvdmJveHNmL3Zmc21vZC5oPTEyMT1pbnQgdmJveHNmX2Nsb3NlKHUzMiByb290LCB1NjQgaGFuZGxlKTtcXG5mcy92Ym94c2YvdmZzbW9kLmg6MTIyOmludCB2Ym94c2ZfcmVtb3ZlKHUzMiByb290LCBzdHJ1Y3Qgc2hmbF9zdHJpbmcgKnBhcnNlZF9wYXRoLCB1MzIgZmxhZ3MpO1xcbmZzL3Zib3hzZi92ZnNtb2QuaDoxMjM6aW50IHZib3hzZl9yZW5hbWUodTMyIHJvb3QsIHN0cnVjdCBzaGZsX3N0cmluZyAqc3JjX3BhdGgsXFxuZnMvdmJveHNmL3Zmc21vZC5oOjEyNDpcXHRcXHQgIHN0cnVjdCBzaGZsX3N0cmluZyAqZGVzdF9wYXRoLCB1MzIgZmxhZ3MpO1xcbmZzL3Zib3hzZi92ZnNtb2QuaC0xMjUtXFxuLS1cXG5mcy92Ym94c2YvdmZzbW9kLmg9MTI5PWludCB2Ym94c2ZfZGlyaW5mbyh1MzIgcm9vdCwgdTY0IGhhbmRsZSxcXG5mcy92Ym94c2YvdmZzbW9kLmg6MTMwOlxcdFxcdCAgIHN0cnVjdCBzaGZsX3N0cmluZyAqcGFyc2VkX3BhdGgsIHUzMiBmbGFncywgdTMyIGluZGV4LFxcbmZzL3Zib3hzZi92ZnNtb2QuaC0xMzEtXFx0XFx0ICAgdTMyICpidWZfbGVuLCBzdHJ1Y3Qgc2hmbF9kaXJpbmZvICpidWYsIHUzMiAqZmlsZV9jb3VudCk7XFxuZnMvdmJveHNmL3Zmc21vZC5oPTEzMj1pbnQgdmJveHNmX2ZzaW5mbyh1MzIgcm9vdCwgdTY0IGhhbmRsZSwgdTMyIGZsYWdzLFxcbi0tXFxuZnMvdmJveHNmL3Zmc21vZC5oLTEzNC1cXG5mcy92Ym94c2YvdmZzbW9kLmg6MTM1OmludCB2Ym94c2ZfbWFwX2ZvbGRlcihzdHJ1Y3Qgc2hmbF9zdHJpbmcgKmZvbGRlcl9uYW1lLCB1MzIgKnJvb3QpO1xcbmZzL3Zib3hzZi92ZnNtb2QuaC0xMzYtaW50IHZib3hzZl91bm1hcF9mb2xkZXIodTMyIHJvb3QpO1xcbmZzL3Zib3hzZi92ZnNtb2QuaC0xMzctXFxuZnMvdmJveHNmL3Zmc21vZC5oOjEzODppbnQgdmJveHNmX3JlYWRsaW5rKHUzMiByb290LCBzdHJ1Y3Qgc2hmbF9zdHJpbmcgKnBhcnNlZF9wYXRoLFxcbmZzL3Zib3hzZi92ZnNtb2QuaC0xMzktXFx0XFx0ICAgIHUzMiBidWZfbGVuLCB1OCAqYnVmKTtcXG5mcy92Ym94c2YvdmZzbW9kLmg6MTQwOmludCB2Ym94c2Zfc3ltbGluayh1MzIgcm9vdCwgc3RydWN0IHNoZmxfc3RyaW5nICpuZXdfcGF0aCxcXG5mcy92Ym94c2YvdmZzbW9kLmg6MTQxOlxcdFxcdCAgIHN0cnVjdCBzaGZsX3N0cmluZyAqb2xkX3BhdGgsIHN0cnVjdCBzaGZsX2Zzb2JqaW5mbyAqYnVmKTtcXG5mcy92Ym94c2YvdmZzbW9kLmgtMTQyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzo1MDowMS44MTI0NjE0MDZaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE4OTA1NTQ4OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTeXprYWxsZXItVHJpZ2dlcmVkIFZib3hzZiBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgc3RydWN0IHNoZmxfc3RyaW5nYCBhbmQgaXRzIGBsZW5ndGhgIGFuZCBgc2l6ZWAgbWVtYmVycy4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBzYW5pdHkgY2hlY2sgaW4gYHZib3hzZl9kaXJfZW1pdGA6IGBpZiAoaW5mby1cdTAwM2VuYW1lLmxlbmd0aCBcdTAwM2UgaW5mby1cdTAwM2VuYW1lLnNpemUpIHJldHVybiBmYWxzZTtgLiBTeXprYWxsZXIgZm91bmQgdGhpcywgd2hpY2ggbWVhbnMgaXQgdHJpZ2dlcmVkIGEgc3RhdGUgd2hlcmUgdGhlIHN0cmluZydzIHJlcG9ydGVkIGxlbmd0aCBleGNlZWRzIGl0cyBhbGxvY2F0ZWQgc2l6ZS4gVGhpcyBpcyBpbnRlcmVzdGluZy5cblxuVGhlIHByb21wdCB0aGVuIHBvc2VzIGEgcXVlc3Rpb24gYWJvdXQgY29kZSBwYXRocyBkZWVtZWQgXCJpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLlwiIFRoZSBrZXkgaXMgd2hldGhlciB0aGlzIHZ1bG5lcmFiaWxpdHkgZmFsbHMgaW50byB0aGF0IGNhdGVnb3J5LiBTaW5jZSBzeXprYWxsZXIgZm91bmQgaXQsIHRoZSBpbXBsaWNhdGlvbiBpcyB0aGF0IGl0J3MgKnJlYWNoYWJsZSosIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIG15IGNvbmNlcm4uXG5cbklmIHN5emthbGxlciBpcyBydW5uaW5nIG9uIFZpcnR1YWxCb3gsIGFzIGl0cyBgdm1fdHlwZTogXCJ2Ym94XCJgIHN1Z2dlc3RzLCB0aGVuIHRoYXQgc2VlbXMgcG9zc2libGUuIFRoaXMgaXMgd2hlcmUgSSBoYXZlIHRvIHN0b3AgYW5kIGJlIHByZWNpc2Ugd2l0aCBteSByZWFkaW5nLiBJcyBWaXJ0dWFsQm94IGNvbnNpZGVyZWQgYSBcInZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgR0NFIG9yIFFFTVVcIj8gKlllcyosIGl0IGlzLiBIb3dldmVyLCB0aGUgd29yZGluZyBjb3VsZCBiZSBpbnRlcnByZXRlZCBhcyBcImltcG9zc2libGUgdG8gcmVhY2ggaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuXCJcblxuVGhlIG9yaWdpbmFsIHByb2JsZW0gY2VudGVycyBhcm91bmQgdGhlIFZpcnR1YWxCb3ggUENJIGRldmljZSwgYW5kIHRoZSBjb2RlIGNsZWFybHkgcmVsaWVzIG9uIGl0LiBJIHJlLXJlYWQgdGhlIHByb21wdDogXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zLi4uIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4uLlwiIElmIGl0J3MgKm9ubHkqIHJlYWNoYWJsZSBpbiBWaXJ0dWFsQm94IGJlY2F1c2Ugb2YgdGhpcyBQQ0kgZGVwZW5kZW5jeSwgc2hvdWxkIEkgcmV0dXJuIGBmYWxzZWA/IEl0IHNlZW1zIGxpa2UgSSBzaG91bGQuXG5cbkkgcXVpY2tseSBjaGVjayB0aGUgb2J2aW91cy4gVGhlcmUgaXNuJ3QgYW55IGVtdWxhdGlvbiBvZiB0aGUgVmlydHVhbEJveCBQQ0kgZGV2aWNlIGluIFFFTVUgb3IgR0NFLiBJJ3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBgdmJveHNmX2ZpbGxfc3VwZXJgIHBhdGggY2FsbHMgYHZib3hzZl9jb25uZWN0KClgLCB3aGljaCB0aGVuIGNhbGxzIGB2YmdfZ2V0X2dkZXYoKWAsIGFuZCB0aGF0IHRoaXMgcmV0dXJucyBgLUVOT0RFVmAgaWYgdGhlIFBDSSBkZXZpY2UgaXNuJ3QgYXZhaWxhYmxlLiBUaGVyZWZvcmUsIHdpdGhvdXQgdGhlIFZpcnR1YWxCb3ggUENJIGRldmljZSwgaXQgc2hvdWxkIGJlIGltcG9zc2libGUgdG8gbW91bnQgdGhlIGZpbGVzeXN0ZW0gYW5kIHRodXMgaW1wb3NzaWJsZSB0byByZWFjaCB0aGF0IHBhcnRpY3VsYXIgY29kZSBwYXRoLlxuXG5CdXQgd2FpdCwgc3l6a2FsbGVyICpmb3VuZCogaXQhIFNvIGhvdz8gVGhlbiBpdCBoaXQgbWU6IHN5emthbGxlciBoYXMgYSBcInZib3hcIiBWTSB0eXBlISBUaGUgaW1wbGljYXRpb24gaXMgdGhhdCBpdCdzIHJ1bm5pbmcgaW5zaWRlIFZpcnR1YWxCb3guIFRoYXQgbWVhbnMgaXQgKmNhbiogcmVhY2ggdGhpcyBjb2RlIHBhdGgsIHdoaWNoIGlzIGRpcmVjdGx5IGNvbnRyYWRpY3RpbmcgdGhlIHdvcmRpbmcgb2YgdGhlIHByb21wdCwgYXMgVmlydHVhbEJveCBpcyBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlxuXG5Ob3cgSSBhbSBhdCBhIGZvcmsgaW4gdGhlIHJvYWQuIERvZXMgdGhlIHByb21wdCdzIHBocmFzZSBcImltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVVcIiBtZWFuIFwiaW1wb3NzaWJsZSB0byByZWFjaCBpbiAqYW55KiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCxcIiBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWZpYyB0byAqc3RhbmRhcmQqIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBhcyBpdCBzZWVtcyB0byBiZSBpbXBseWluZz8gVG8gcmVzb2x2ZSB0aGlzLCBJIGhhdmUgdG8gYXNzdW1lIHRoZSBpbnRlbnQgaXMgZm9yIGhhcmR3YXJlLXNwZWNpZmljIGNvZGUgdGhhdCBjYW5ub3QgYmUgdGVzdGVkIGluIGEgVk0uIFRoYXQsIGhvd2V2ZXIsIGlzIG5vdCB0aGUgY2FzZSBoZXJlLCBhcyBgdmJveHNmYCBpcyAqc3BlY2lmaWNhbGx5KiBkZXNpZ25lZCB0byBiZSB0ZXN0ZWQgaW4gVk1zIChWaXJ0dWFsQm94KS4gVGhlIHByb21wdCAqbWVudGlvbnMqIFwidmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXCIgYnV0IFZpcnR1YWxCb3ggKmlzKiBvbmUgb2YgdGhvc2UgZW52aXJvbm1lbnRzLlxuXG5JbiB0aGlzIHNjZW5hcmlvLCByZXR1cm5pbmcgYGZhbHNlYCB3b3VsZCBtZWFuIGlnbm9yaW5nIGEgcG90ZW50aWFsbHkgdmFsaWQgZmlsZXN5c3RlbSBidWcgdGhhdCBzeXprYWxsZXIgY2FuIGluZGVlZCBmdXp6IHdoZW4gcnVubmluZyBpbiBWaXJ0dWFsQm94LiBJcyBgdmJveHNmYCB3b3J0aCBmdXp6aW5nPyBZZXMsIGl0J3MgYSBmaWxlc3lzdGVtLCBzbyBieSBkZWZhdWx0LCBJIHNob3VsZCBjb25zaWRlciBpdCB3b3J0aCBmdXp6aW5nLiBUaGUgY29uY2x1c2lvbiwgdGhlbiwgaXMgdGhhdCAqaXQgaXMgd29ydGggZnV6emluZyosIGFuZCBzbyBJJ2xsIG5lZWQgdG8gcmV0dXJuIGB0cnVlYC5cblxuU2luY2UgSSdtIHJldHVybmluZyBgdHJ1ZWAsIEkgbmVlZCB0byBzcGVjaWZ5IGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AuIGBGb2N1c1N5bWJvbHNgIHdvdWxkIGluY2x1ZGU6IGB2Ym94c2ZfZGlyX2VtaXRgLCBgdmJveHNmX2Rpcl9yZWFkX2FsbGAsIGFuZCBzbyBvbi4gYEVuYWJsZUNvbmZpZ3NgIHdvdWxkIGNvbnNpc3Qgb2YgYFZCT1hTRl9GU2AgYW5kIGBWQk9YR1VFU1RgLiBJIHNob3VsZCBhbHNvIGNoZWNrIHRoZSBLY29uZmlnIGZvciBgdmJveHNmYCB0byBjb25maXJtIGFsbCBvZiB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDY2MCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NTA6MTMuNzAzMDIwODIzWiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg5NTU3OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZCT1hTRl9GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy92Ym94c2YvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Zib3hzZi9LY29uZmlnOjE6Y29uZmlnIFZCT1hTRl9GU1xcbmZzL3Zib3hzZi9LY29uZmlnLTItXFx0dHJpc3RhdGUgXFxcIlZpcnR1YWxCb3ggZ3Vlc3Qgc2hhcmVkIGZvbGRlciAodmJveHNmKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzo1MDoxMy44MjE5ODEwODJaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc0NTg5Njc3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgVmlydHVhbEJveCBTaGFyZWQgRm9sZGVyIEtjb25maWcqKlxuXG5BbHJpZ2h0LCBJIHNlZSBhIGJyZWFkY3J1bWIgLSBgZnMvdmJveHNmL0tjb25maWdgLiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgVmlydHVhbEJveCBzaGFyZWQgZm9sZGVycyB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0IGFyZSB3ZSB0cnlpbmcgdG8gdW5kZXJzdGFuZCBoZXJlPyBBcmUgd2UgdHJhY2tpbmcgZG93biBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gcHJvYmxlbT8gT3IgcGVyaGFwcyBsb29raW5nIHRvIG9wdGltaXplIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGZvciBhIHN5c3RlbSB0aGF0IGxldmVyYWdlcyBWaXJ0dWFsQm94P1xuXG5JIGV4cGVjdCB0byBmaW5kIGFsbCB0aGUgdXN1YWwgS2NvbmZpZyBlbGVtZW50czogYGNvbmZpZ2AgYmxvY2tzIGRlZmluaW5nIGJvb2xlYW4sIHRyaXN0YXRlLCBvciBzdHJpbmcgb3B0aW9ucy4gSSdsbCBiZSBsb29raW5nIGZvciBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgaGVscCB0ZXh0LiBLZXkgYXJlYXMgb2YgaW50ZXJlc3Qgd2lsbCBiZTpcblxuKiAgICoqRGVwZW5kZW5jaWVzOioqIFdoYXQgb3RoZXIga2VybmVsIGZlYXR1cmVzIG9yIG1vZHVsZXMgbmVlZCB0byBiZSBlbmFibGVkIGJlZm9yZSBgdmJveHNmYCBjYW4gYmUgY29uZmlndXJlZD8gVGhpcyBnaXZlcyBpbnNpZ2h0cyBpbnRvIHRoZSBvdmVyYWxsIHN5c3RlbSByZXF1aXJlbWVudHMuXG4qICAgKipEZWZhdWx0IFZhbHVlczoqKiBBcmUgdGhlIGRlZmF1bHRzIHNlbnNpYmxlIGZvciBjb21tb24gdXNlIGNhc2VzPyBPciBtaWdodCB0aGVyZSBiZSBhIG5lZWQgdG8gb3ZlcnJpZGUgdGhlbSBmb3IgcGFydGljdWxhciBlbnZpcm9ubWVudHM/XG4qICAgKipIZWxwIFRleHQ6KiogSXMgaXQgY2xlYXIgd2hhdCBlYWNoIG9wdGlvbiBkb2VzPyBJcyB0aGUgZG9jdW1lbnRhdGlvbiBjb21wcmVoZW5zaXZlIGFuZCBhY2N1cmF0ZSwgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgcmVsYXRpb25zaGlwIHdpdGggdGhlIHVuZGVybHlpbmcgVmlydHVhbEJveCBob3N0P1xuXG5CYXNlZCBvbiB0aGUgc3RydWN0dXJlIGFuZCBjb250ZW50IG9mIHRoaXMgS2NvbmZpZywgSSBjYW4gZGV0ZXJtaW5lIHdoZXJlIGB2Ym94c2ZgIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSdsbCBsb29rIGZvciBob3cgdGhlIG1vZHVsZSBpbnRlcmFjdHMgd2l0aCBmaWxlc3lzdGVtIHR5cGVzLCBuZXR3b3JrIGludGVyZmFjZXMsIGFuZCBhbnkgc2VjdXJpdHkgY29udGV4dHMuIEkgd2lsbCBhbHNvIG1ha2Ugbm90ZXMgYWJvdXQgaG93IHRvIG1vZGlmeSB0aGUgY29uZmlndXJhdGlvbiBvciB0cm91Ymxlc2hvb3QgaXRzIGltcGxlbWVudGF0aW9uIGZvciBiZXR0ZXIgdW5kZXJzdGFuZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY2NzgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzo1MDoxNy41Njc4ODEwOTJaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwNTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3Zib3hzZi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Y29uZmlnIFZCT1hTRl9GU1xcbiAgIDI6XFx0XFx0dHJpc3RhdGUgXFxcIlZpcnR1YWxCb3ggZ3Vlc3Qgc2hhcmVkIGZvbGRlciAodmJveHNmKSBzdXBwb3J0XFxcIlxcbiAgIDM6XFx0XFx0ZGVwZW5kcyBvbiAoQVJNNjQgfHwgWDg2KSBcXHUwMDI2XFx1MDAyNiBWQk9YR1VFU1RcXG4gICA0OlxcdFxcdHNlbGVjdCBOTFNcXG4gICA1OlxcdFxcdGhlbHBcXG4gICA2OlxcdFxcdCAgVmlydHVhbEJveCBob3N0cyBjYW4gc2hhcmUgZm9sZGVycyB3aXRoIGd1ZXN0cywgdGhpcyBkcml2ZXJcXG4gICA3OlxcdFxcdCAgaW1wbGVtZW50cyB0aGUgTGludXgtZ3Vlc3Qgc2lkZSBvZiB0aGlzIGFsbG93aW5nIGZvbGRlcnMgZXhwb3J0ZWRcXG4gICA4OlxcdFxcdCAgYnkgdGhlIGhvc3QgdG8gYmUgbW91bnRlZCB1bmRlciBMaW51eC5cXG4gICA5OlxcdFxcbiAgMTA6XFx0XFx0ICBJZiB5b3Ugd2FudCB0byB1c2Ugc2hhcmVkIGZvbGRlcnMgaW4gVmlydHVhbEJveCBndWVzdHMsIGFuc3dlciBZIG9yIE0uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjUwOjE3LjU2Nzk5Mzk2MloiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODM3NDAxODU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIGEgVmlydHVhbEJveC1TcGVjaWZpYyBCdWcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEknbSB0aGlua2luZyBhYm91dCBgVkJPWEdVRVNUYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0aGF0IGBFbmFibGVDb25maWdzYCBzaG91bGQgaW5jbHVkZSBib3RoIGBWQk9YU0ZfRlNgIGFuZCBgVkJPWEdVRVNUYCBiZWNhdXNlIGl0J3MgcHJvYmFibHkgZGVwZW5kZW50IG9uIHRoYXQuIEJ1dCB0aGVuIEkgcmUtcmVhZCB0aGUgcHJvbXB0LiBJdCdzIHNwZWNpZmljYWxseSB0YWxraW5nIGFib3V0IGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBlbnZpcm9ubWVudHMgKmxpa2UqIEdDRSBvciBRRU1VLCBldmVuIHdpdGggZW11bGF0ZWQgaGFyZHdhcmUuIFRoZSBwaHJhc2luZyBpcyBrZXkg4oCTIG1lbnRpb25pbmcgXCJsaWtlIEdDRSBvciBRRU1VXCIgbWFrZXMgbWUgdGhpbmsgdGhhdCAqaWYqIHRoaXMgYnVnIHJlcXVpcmVzIGEgaHlwZXJ2aXNvciB0aGF0J3MgKm5vdCogR0NFIG9yIFFFTVUsIHRoZW4gaXQncyBlZmZlY3RpdmVseSB1bnJlYWNoYWJsZSBpbiB0aGUgY29udGV4dCBvZiB0aGUgcHJvbXB0J3MgZm9jdXMuXG5cbk15IG1pbmQgdGhlbiBnb2VzIHRvIFN5emthbGxlciDigJMgb3VyIHByaW1hcnkgZnV6emluZyB0b29sLiBTeXprYWxsZXIgcnVucyBwcmltYXJpbHkgb24gR0NFIGFuZCBRRU1VLiBJZiB0aGlzIGJ1ZyBsaXZlcyBpbiBgdmJveHNmYCwgdGhhdCBzY3JlYW1zIFZpcnR1YWxCb3gtc3BlY2lmaWMuIEJ1dCB3YWl0Li4uIERvZXMgU3l6a2FsbGVyIGV2ZW4gKnVzZSogVmlydHVhbEJveCBpbnN0YW5jZXM/IEkgcmVtZW1iZXIgdGhlcmUgKmlzKiBhIGB2Ym94YCBWTSB0eXBlIGluIFN5emthbGxlciwgYnV0IGl0J3MgZmFyIGxlc3MgY29tbW9uIHRoYW4gYHFlbXVgIG9yIGBnY2VgLlxuXG5Pa2F5LCBidXQgaGFuZyBvbiBhIG1pbnV0ZS4uLiBUaGUgY29tbWl0IG1lc3NhZ2UhIEl0IHNheXMgXCJzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcIi4gVGhhdCBtZWFucyBTeXprYWxsZXIgKmRpZCogZmluZCB0aGlzIGJ1Zywgd2hpY2ggaW1wbGllcyBpdCdzIHJlYWNoYWJsZSBzb21laG93IHdpdGhpbiBTeXprYWxsZXIncyBzZXR1cCEgVGhpcyBtZWFucyBJJ20gbWlzc2luZyBzb21ldGhpbmcuIE1heWJlIFN5emthbGxlciBoYXMgYSB3YXkgdG8gZnV6eiBgdmJveHNmYCB3aXRob3V0IG5lZWRpbmcgYW4gYWN0dWFsIFZpcnR1YWxCb3ggaW5zdGFuY2UuIFNvbWUga2luZCBvZiBlbXVsYXRpb24/IEkgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBpcyBzb21lIGB2Ym94Z3Vlc3RgIGVtdWxhdGlvbiBpbiB0aGUga2VybmVsLlxuXG5MZXQgbWUgc2VlLi4uSSBzZWFyY2hlZCBmb3IgdGhlIHRlcm0gXCJmYWtlXCIgdG8gdHJ5IGFuZCBmaW5kIGFueSwgYnV0IG5vdGhpbmcuIFdoYXQgYWJvdXQgXCJkdW1teT9cIlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzIwOSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjUwOjIzLjQwNTM5ODM1OVoiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyODA0NjUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImR1bW15XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYz00Nj1zdGF0aWMgdm9pZCB2YmdfZ3Vlc3RfbWFwcGluZ3NfaW5pdChzdHJ1Y3QgdmJnX2RldiAqZ2RldilcXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy04MC1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmM6ODE6XFx0Z2Rldi1cXHUwMDNlZ3Vlc3RfbWFwcGluZ3NfZHVtbXlfcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0hJR0hVU0VSKTtcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmM6ODI6XFx0aWYgKCFnZGV2LVxcdTAwM2VndWVzdF9tYXBwaW5nc19kdW1teV9wYWdlKVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy04My1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy04NS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgKHNpemUgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7IGkrKylcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmM6ODY6XFx0XFx0cGFnZXNbaV0gPSBnZGV2LVxcdTAwM2VndWVzdF9tYXBwaW5nc19kdW1teV9wYWdlO1xcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy04Ny1cXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy0xMTQtXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jOjExNTpcXHQvKiBPbiBmYWlsdXJlIGZyZWUgdGhlIGR1bW15LXBhZ2UgYmFja2luZyB0aGUgdm1hcCAqL1xcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYy0xMTYtXFx0aWYgKCFnZGV2LVxcdTAwM2VndWVzdF9tYXBwaW5ncykge1xcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYzoxMTc6XFx0XFx0X19mcmVlX3BhZ2UoZ2Rldi1cXHUwMDNlZ3Vlc3RfbWFwcGluZ3NfZHVtbXlfcGFnZSk7XFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jOjExODpcXHRcXHRnZGV2LVxcdTAwM2VndWVzdF9tYXBwaW5nc19kdW1teV9wYWdlID0gTlVMTDtcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmMtMTE5LVxcdH1cXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYz0xMzE9c3RhdGljIHZvaWQgdmJnX2d1ZXN0X21hcHBpbmdzX2V4aXQoc3RydWN0IHZiZ19kZXYgKmdkZXYpXFxuLS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmMtMTYyLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuYzoxNjM6XFx0X19mcmVlX3BhZ2UoZ2Rldi1cXHUwMDNlZ3Vlc3RfbWFwcGluZ3NfZHVtbXlfcGFnZSk7XFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5jOjE2NDpcXHRnZGV2LVxcdTAwM2VndWVzdF9tYXBwaW5nc19kdW1teV9wYWdlID0gTlVMTDtcXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmMtMTY1LX1cXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuaD02Nz1zdHJ1Y3QgdmJnX2RldiB7XFxuLS1cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9jb3JlLmgtODAtXFx0ICovXFxuZHJpdmVycy92aXJ0L3Zib3hndWVzdC92Ym94Z3Vlc3RfY29yZS5oOjgxOlxcdHN0cnVjdCBwYWdlICpndWVzdF9tYXBwaW5nc19kdW1teV9wYWdlO1xcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2NvcmUuaC04Mi1cXHR2b2lkICpndWVzdF9tYXBwaW5ncztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NTA6MjMuNTA4MjEyMDMxWiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMjMzMTI0OTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIGEgVmlydHVhbEJveCBGaWxlc3lzdGVtIEJ1ZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIGl0J3MgXCJXb3J0aEZ1enppbmdcIi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGluIHR5cGljYWwgZnV6emluZyBlbnZpcm9ubWVudHMuIE5vIGR1bW15IGRldmljZTsgdGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGFib3V0IGB2Ym94c2ZgLCB0aGUgVmlydHVhbEJveCBzaGFyZWQgZm9sZGVyIGZpbGVzeXN0ZW0uIENhbiBJIG1vdW50IGl0IHdpdGhvdXQgYHZib3hndWVzdGA/IE5vLCBiZWNhdXNlIGB2Ym94c2ZfY29ubmVjdGAgbmVlZHMgYHZib3hndWVzdGAgdG8gYmUgcHJvYmVkLiBJdCBjYWxscyBgdmJnX2dldF9nZGV2YCwgd2hpY2ggcmV0dXJucyBhbiBlcnJvciBpZiBgdmJnX2dkZXZgIGlzIE5VTEwuIFNvLCBpdCdzIHN0cmljdGx5IGRlcGVuZGVudCBvbiB0aGUgYHZib3hndWVzdGAgUENJIGRyaXZlciwgd2hpY2ggYmluZHMgdG8gYFBDSV9WRU5ET1JfSURfVkJPWGAgYW5kIGBQQ0lfREVWSUNFX0lEX1ZCT1hfR1VFU1RgLlxuXG5UaGUgbmV4dCB0aG91Z2h0IGlzIHdoZXRoZXIgc3l6a2FsbGVyIGNhbiBpbmplY3QgdGhpcyBQQ0kgZGV2aWNlLiBEb2VzIGl0IGhhdmUgc29tZXRoaW5nIGxpa2UgYHN5el9wY2lfYWRkYD8gQWN0dWFsbHksIGl0ICpkb2VzKiBoYXZlIHNvbWV0aGluZyBzaW1pbGFyPyBMZXQncyBjaGVjayBmb3IgUENJIGluamVjdGlvbiBtZWNoYW5pc21zIGluIHRoZSBrZXJuZWwuIEkga25vdyBhYm91dCBgQ09ORklHX1BDSV9FTkRQT0lOVF9URVNUYCwgYHZmaW9gLCBhbmQgYHBjaV9zdHViYCwgYnV0IHN5emthbGxlciBkb2Vzbid0IHR5cGljYWxseSB1c2UgdGhlc2UgdG8gZW11bGF0ZSBhcmJpdHJhcnkgUENJIGRldmljZXMuIFdhaXQhIFN5emthbGxlciAqZG9lcyogaGF2ZSBgc3l6X2t2bWAsIHdoaWNoIGNhbiBydW4gYSBuZXN0ZWQgVk0uIEJ1dCB0aGUgcHJvYmxlbSBpcywgYHZib3hndWVzdGAgaXNuJ3QgYSBLVk0gZGV2aWNlLlxuXG5TbywgaG93IGRpZCBzeXprYWxsZXIgZmluZCB0aGlzIGJ1Zz8gTWF5YmUgaXQgd2FzIHJ1bm5pbmcgaW4gYSBWaXJ0dWFsQm94IFZNPyBBbmQgeWVzLCBzeXprYWxsZXIgZG9lcyBzdXBwb3J0IFZpcnR1YWxCb3guIElmIHN5emthbGxlciBzdXBwb3J0cyBWaXJ0dWFsQm94LCB0aGVuIGl0IGlzIHJlYWNoYWJsZSBpbiBzeXprYWxsZXIuIEF0IGZpcnN0LCBJJ20gdGhpbmtpbmcsIHNob3VsZCBJIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgPyBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBmaWxlc3lzdGVtIGRyaXZlciwgc28gaXQgc2VlbXMgbGlrZSBpdCdzIHdvcnRoIGl0LlxuXG5CdXQgdGhlIHByb21wdCB3YW50cyBtZSB0byBiZSBjYXJlZnVsLCBpdCBzYXlzIFwiQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlXCIuIElmIHRoZSBwcm9tcHQgbWVudGlvbnMgXCJsaWtlIEdDRSBvciBRRU1VXCIsIGl0J3MgcHJvYmFibHkgdGFsa2luZyBhYm91dCBzdGFuZGFyZCBjbG91ZCBvciBRRU1VIFZNcy4gSWYgSSByZXR1cm4gZmFsc2UsIEkgYW0gc2F5aW5nIGl0IGlzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gc3RhbmRhcmQgVk1zLiBCdXQgd2FpdCwgd2hhdCBpZiBzeXprYWxsZXIgKmNhbiogcmVhY2ggaXQgaW4gUUVNVT8gSG93P1xuXG5JcyB0aGVyZSBhIHdheSB0byB0cmlnZ2VyIGB2Ym94c2ZfZGlyX2VtaXRgIHdpdGhvdXQgbW91bnRpbmcgYHZib3hzZmA/IE5vLCBpdCdzIGEgc3RhdGljIGZ1bmN0aW9uIGFuZCBhIGNhbGxiYWNrIGluIGB2Ym94c2ZfZGlyX2ZvcHNgLiBUaGF0IG1lYW5zIGl0IG11c3QgYmUgbW91bnRlZCwgdGhlIHNhbWUgd2F5IGEgbm9ybWFsIGZpbGVzeXN0ZW0gbXVzdCBiZSBtb3VudGVkIHRvIGFjY2VzcyBpdHMgZGlyZWN0b3J5LiBgdmJveHNmX2Rpcl9pdGVyYXRlYCBjYWxscyBgdmJveHNmX2Rpcl9lbWl0YCwgc28gaXQgbXVzdCBiZSBtb3VudGVkLiBBbmQgdG8gbW91bnQgYHZib3hzZmAsIEkgbmVlZCBgdmJveHNmX2ZpbGxfc3VwZXJgIHRvIHN1Y2NlZWQuIFRoYXQgZGVwZW5kcyBvbiBgdmJveHNmX2Nvbm5lY3RgLCB3aGljaCBuZWVkcyBgdmJnX2dldF9nZGV2YCB0byByZXR1cm4gYSB2YWxpZCBwb2ludGVyLiBUaGF0LCBpbiB0dXJuLCBkZXBlbmRzIG9uIGB2YmdfcGNpX3Byb2JlYCBzdWNjZWVkaW5nLCB3aGljaCByZXF1aXJlcyB0aGUgUENJIGRldmljZSAweDgwZWU6MHhjYWZlIHRvIGJlIHByZXNlbnQuXG5cbklzIHRoaXMgUENJIGRldmljZSBwcmVzZW50IGluIFFFTVU/IFdhaXQhIFFFTVUgKmRvZXMqIGhhdmUgYSBgdmJveGd1ZXN0YCBkZXZpY2U/IExldCdzIGNoZWNrIHRoZSBRRU1VIHNvdXJjZSBjb2RlLi4uIEkgY2FuJ3QgY2hlY2sgdGhlIHNvdXJjZSByaWdodCBub3cuIEJ1dCB3YWl0LCBRRU1VIGhhcyBhIGB2Ym94YCBkaXNwbGF5IGRldmljZT8gTm8sIFFFTVUgc3VwcG9ydHMgVmlydHVhbEJveCBgLnZkaWAgZGlzayBpbWFnZXMsIGJ1dCBpdCBkb2Vzbid0IGVtdWxhdGUgdGhlIGB2Ym94Z3Vlc3RgIFBDSSBkZXZpY2UuXG5cbk9rYXksIHdoYXQgaWYgc3l6a2FsbGVyIHVzZXMgYHN5el9tb3VudF9pbWFnZWAsIGFuZCB0aGUgYnVnIGlzIGluIGB2Ym94c2ZfZGlyX2VtaXRgLCB0cmlnZ2VyZWQgYnkgcmVhZGluZyBhIGRpcmVjdG9yeT8gQnV0IGB2Ym94c2ZgIGlzIG5vdCBpbWFnZS1iYXNlZCwgcmlnaHQ/IEl0IG1vdW50cyB3aXRoIGBtb3VudCAtdCB2Ym94c2YgXHUwMDNjZm9sZGVyXHUwMDNlIFx1MDAzY21vdW50cG9pbnRcdTAwM2VgLiBUaGVyZWZvcmUsIGBzeXpfbW91bnRfaW1hZ2VgIGNhbm5vdCBiZSB1c2VkLiBTbywgaG93IGRpZCBzeXprYWxsZXIgZGlzY292ZXIgdGhpcz8gU3l6a2FsbGVyIG11c3QgYmUgcnVubmluZyBpbiBWaXJ0dWFsQm94IVxuXG5JZiBzeXprYWxsZXIgcnVucyBpbiBWaXJ0dWFsQm94LCBpdCdzIHJlYWNoYWJsZSBpbiB0aGF0IHNwZWNpZmljIGVudmlyb25tZW50LiBEb2VzIHRoZSBwcm9tcHQgd2FudCBtZSB0byByZXR1cm4gdHJ1ZSBvciBmYWxzZT8gXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOiAuLi4gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlXCIuIElmIGl0J3MgaW1wb3NzaWJsZSBpbiBHQ0Ugb3IgUUVNVSwgSSBzaG91bGQgcmV0dXJuIGZhbHNlLlxuXG5CdXQgd2FpdCwgaXMgaXQgcmVhbGx5IGltcG9zc2libGU/IFllcywgaXQgcmVxdWlyZXMgVmlydHVhbEJveCwgdGhlIHByb21wdCBtZW50aW9ucyBHQ0Ugb3IgUUVNVS4gQnV0IGlmIHN5emthbGxlciBmb3VuZCBpdCwgbWF5YmUgaXQgSVMgcmVhY2hhYmxlIGluIFFFTVU/IEhvdz9cblxuIiwiSW5wdXRUb2tlbnMiOjM4NzA4LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE5OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzo1MDozNi43NDEzNDAzNTRaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4OTgzNzQ5MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiMHg4MGVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2xvbnRpdW0tbHQ5NjExLmM9MTA4ND1zdGF0aWMgaW50IGx0OTYxMV9yZWFkX2RldmljZV9yZXYoc3RydWN0IGx0OTYxMSAqbHQ5NjExKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9sb250aXVtLWx0OTYxMS5jLTEwODgtXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9sb250aXVtLWx0OTYxMS5jOjEwODk6XFx0cmVnbWFwX3dyaXRlKGx0OTYxMS1cXHUwMDNlcmVnbWFwLCAweDgwZWUsIDB4MDEpO1xcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbG9udGl1bS1sdDk2MTEuYy0xMDkwLVxcdHJldCA9IHJlZ21hcF9yZWFkKGx0OTYxMS1cXHUwMDNlcmVnbWFwLCAweDgwMDIsIFxcdTAwMjZyZXYpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9sb250aXVtLWx0OTYxMXV4Yy5jPTEyMz1zdGF0aWMgdm9pZCBsdDk2MTF1eGNfbG9jayhzdHJ1Y3QgbHQ5NjExdXhjICpsdDk2MTF1eGMpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2xvbnRpdW0tbHQ5NjExdXhjLmMtMTI1LVxcdG11dGV4X2xvY2soXFx1MDAyNmx0OTYxMXV4Yy1cXHUwMDNlb2NtX2xvY2spO1xcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbG9udGl1bS1sdDk2MTF1eGMuYzoxMjY6XFx0cmVnbWFwX3dyaXRlKGx0OTYxMXV4Yy1cXHUwMDNlcmVnbWFwLCAweDgwZWUsIDB4MDEpO1xcbmRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbG9udGl1bS1sdDk2MTF1eGMuYy0xMjctfVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9sb250aXVtLWx0OTYxMXV4Yy5jPTEyOT1zdGF0aWMgdm9pZCBsdDk2MTF1eGNfdW5sb2NrKHN0cnVjdCBsdDk2MTF1eGMgKmx0OTYxMXV4YylcXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2xvbnRpdW0tbHQ5NjExdXhjLmMtMTMwLXtcXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2xvbnRpdW0tbHQ5NjExdXhjLmM6MTMxOlxcdHJlZ21hcF93cml0ZShsdDk2MTF1eGMtXFx1MDAzZXJlZ21hcCwgMHg4MGVlLCAweDAwKTtcXG5kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2xvbnRpdW0tbHQ5NjExdXhjLmMtMTMyLVxcdG1zbGVlcCg1MCk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vdmJveHZpZGVvL3Zib3hfZHJ2LmM9MzU9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaWlkbGlzdFtdID0ge1xcbmRyaXZlcnMvZ3B1L2RybS92Ym94dmlkZW8vdmJveF9kcnYuYzozNjpcXHR7IFBDSV9ERVZJQ0UoMHg4MGVlLCAweGJlZWYpIH0sXFxuZHJpdmVycy9ncHUvZHJtL3Zib3h2aWRlby92Ym94X2Rydi5jLTM3LVxcdHsgfVxcbi0tXFxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2FmOTAzM19wcml2Lmg9MTM0MD1zdGF0aWMgY29uc3Qgc3RydWN0IHJlZ192YWwgdHVuZXJfaW5pdF9pdDkxMzVfNjBbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9hZjkwMzNfcHJpdi5oLTE0NTItXFx0eyAweDgwZWQwMiwgMHg0MCB9LFxcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9hZjkwMzNfcHJpdi5oOjE0NTM6XFx0eyAweDgwZWU0MiwgMHg0MCB9LFxcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9hZjkwMzNfcHJpdi5oOjE0NTQ6XFx0eyAweDgwZWU4MiwgMHg0MCB9LFxcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9hZjkwMzNfcHJpdi5oLTE0NTUtXFx0eyAweDgwZjAwMCwgMHgwZiB9LFxcbi0tXFxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2FmOTAzM19wcml2Lmg9MTU1Nj1zdGF0aWMgY29uc3Qgc3RydWN0IHJlZ192YWwgdHVuZXJfaW5pdF9pdDkxMzVfNjFbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9hZjkwMzNfcHJpdi5oLTE2NjgtXFx0eyAweDgwZWQwMiwgMHg0MCB9LFxcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9hZjkwMzNfcHJpdi5oOjE2Njk6XFx0eyAweDgwZWU0MiwgMHg0MCB9LFxcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9hZjkwMzNfcHJpdi5oOjE2NzA6XFx0eyAweDgwZWU4MiwgMHg0MCB9LFxcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9hZjkwMzNfcHJpdi5oLTE2NzEtXFx0eyAweDgwZjAwMCwgMHgwZiB9LFxcbi0tXFxuZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2FmOTAzM19wcml2Lmg9MTc3Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHJlZ192YWwgdHVuZXJfaW5pdF9pdDkxMzVfNjJbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9hZjkwMzNfcHJpdi5oLTE4ODUtXFx0eyAweDgwZWQwMiwgMHhmZiB9LFxcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9hZjkwMzNfcHJpdi5oOjE4ODY6XFx0eyAweDgwZWU0MiwgMHhmZiB9LFxcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9hZjkwMzNfcHJpdi5oOjE4ODc6XFx0eyAweDgwZWU4MiwgMHhmZiB9LFxcbmRyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9hZjkwMzNfcHJpdi5oLTE4ODgtXFx0eyAweDgwZjAwMCwgMHgwZiB9LFxcbi0tXFxuZHJpdmVycy9tZWRpYS90dW5lcnMvaXQ5MTN4LmM9MjA3PXN0YXRpYyBpbnQgaXQ5MTN4X3NldF9wYXJhbXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpXFxuLS1cXG5kcml2ZXJzL21lZGlhL3R1bmVycy9pdDkxM3guYy0zMjItXFx0LyogWFhYOiBsYXRlc3Qgd2luZG93cyBkcml2ZXIgZG9lcyBub3Qgc2V0IHRoYXQgYXQgYWxsICovXFxuZHJpdmVycy9tZWRpYS90dW5lcnMvaXQ5MTN4LmM6MzIzOlxcdHJldCA9IHJlZ21hcF93cml0ZShkZXYtXFx1MDAzZXJlZ21hcCwgMHg4MGVlMDYsIGxuYV9iYW5kKTtcXG5kcml2ZXJzL21lZGlhL3R1bmVycy9pdDkxM3guYy0zMjQtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtMjItLyoqIFZpcnR1YWxCb3ggUENJIHZlbmRvciBJRC4gKi9cXG5kcml2ZXJzL3ZpcnQvdmJveGd1ZXN0L3Zib3hndWVzdF9saW51eC5jOjIzOiNkZWZpbmUgVkJPWF9WRU5ET1JJRFxcdFxcdDB4ODBlZVxcbmRyaXZlcnMvdmlydC92Ym94Z3Vlc3QvdmJveGd1ZXN0X2xpbnV4LmMtMjQtLyoqIFZNTURldiBQQ0kgY2FyZCBwcm9kdWN0IElELiAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzo1MDozOS42Mzk3MjIwMTFaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTEwMjI5NDA5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBgdmJveGd1ZXN0YCBFbXVsYXRpb24gUG9zc2liaWxpdGllcyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBgdmJveGd1ZXN0YCBhbmQgdGhvc2Ugc3BlY2lmaWMgYWRkcmVzc2VzIGl0IHVzZXMsIGAweDgwZWVgIGFuZCBgMHhjYWZlYC4gVGhlIGtleSBoZXJlIGlzIHRoYXQgdGhlcmUncyBubyBzb2Z0d2FyZSBlbXVsYXRvciBmb3IgaXQgYmFrZWQgaW50byB0aGUga2VybmVsIGl0c2VsZi4gVGhpcyBtZWFucywgYXMgZmFyIGFzIEkgdW5kZXJzdGFuZCwgZGlyZWN0bHkgaGl0dGluZyB0aGF0IGNvZGUgcGF0aCB0aHJvdWdoIGVpdGhlciBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZSBpcyBhIG5vbi1zdGFydGVyLlxuXG5CdXQsIGhvbGQgb24uLi4gaWYgc3l6a2FsbGVyIGNvdWxkIHVzZSBzb21ldGhpbmcgbGlrZSBgc3l6X3BjaV9hZGRgLCB0aGF0IG1pZ2h0IGNoYW5nZSB0aGUgZ2FtZS4gVGhhdCB3b3VsZCBiZSBhIHdheSB0byBjcmVhdGUgdGhlIGNvcnJlY3QgZW52aXJvbm1lbnQuIE5vdywgZG9lcyBzeXprYWxsZXIgKmFjdHVhbGx5KiBoYXZlIGEgc3lzdGVtIGNhbGwgbGlrZSB0aGF0PyBXYWl0LCBoYW5nIG9uLi4uIEkga25vdyBzeXprYWxsZXIgaGFzIGEgUENJIGZ1enplci4uLiBTbywgdGhlcmUgKm11c3QqIGJlIHNvbWUgd2F5IHRvIGluamVjdCBQQ0ktcmVsYXRlZCBhY3Rpb25zLi4uXG5cbk9rYXksIEknbSBzZWNvbmQtZ3Vlc3NpbmcgbXlzZWxmLiBJdCBkb2Vzbid0IGxvb2sgbGlrZSB0aGVyZSdzIGFuIGV4cGxpY2l0IGBzeXpfcGNpX2FkZGAuIEknbSByZW1lbWJlcmluZyBgc3l6X3VzYl9jb25uZWN0YCBmb3IgVVNCLCBgc3l6XzgwMjExX2luamVjdF9mcmFtZWAgZm9yIHdpZmksIGBzeXpfZ2VuZXRsaW5rX2dldF9mYW1pbHlfaWRgIGZvciBuZXRsaW5rOyB0aG9zZSBhcmUgc2ltaWxhciBpbmplY3Rpb24gcHJpbWl0aXZlcy4gRm9yIFBDSSwgaXQgaGFzIGBzeXpfa3ZtX3NldHVwX2NwdWAsIHdoaWNoIHJlbGF0ZXMgdG8gS1ZNLiBUaGlzIGhhcyBtZSB0aGlua2luZy5cblxuSSBhbSBub3cgZ29pbmcgdG8gbWFrZSBhIGRlZmluaXRpdmUgY2hlY2sgLSBjb3VsZCB0aGVyZSBiZSBhIGBzeXpfcGNpYCBmdW5jdGlvbiwgb3Igc29tZXRoaW5nIHNpbWlsYXIsIHRoYXQgSSdtIGp1c3QgYmxhbmtpbmcgb24/IE9rYXksIHRpbWUgdG8gbG9vayBmb3IgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gUENJIGluIHN5emthbGxlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI1MjEsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NTA6NDQuNzQyMDE5NjY2WiIsIlNlcSI6NTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDI1NzE3Mzk5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzeXpfcGNpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NTA6NDcuMTY3NzQ2NzM1WiIsIlNlcSI6NTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyODUwNzY0NjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRnV6emluZyBXb3J0aGluZXNzIG9mIGEgYHZib3hzZmAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGUgcXVlc3Rpb24gb2Ygd2hldGhlciBpdCdzIHdvcnRoIGZ1enppbmcuIFRoZSBrZXkgaXMgdGhpczogdGhlIHBhdGNoIHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gYHZib3hzZmAsIHdoaWNoIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIGFzIHRoZSBWaXJ0dWFsQm94IHNoYXJlZCBmb2xkZXIgZmlsZXN5c3RlbS4gTm93LCB0aGUgcHJvbXB0IHNheXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBjb2RlIHBhdGggaXMgXCJpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLlwiIE15IGluaXRpYWwgdGhvdWdodCBpcywgd2FpdCwgaG93IGRpZCBzeXprYWxsZXIgZXZlbiBmaW5kIHRoaXM/IEkga25vdyBzeXprYWxsZXIgY2FuJ3QgaW5qZWN0IFBDSSBkZXZpY2VzIGRpcmVjdGx5LiBUaGVuIGl0IGhpdHMgbWU6IHN5emthbGxlciBoYXMgYSBgdmJveGAgVk0gdHlwZSEgQmluZ28uIElmIHN5emthbGxlciBpcyBydW5uaW5nIG9uIFZpcnR1YWxCb3gsIHRoZW4sIHllcywgaXQgKmNhbiogcmVhY2ggdGhpcyBjb2RlLlxuXG5CdXQgdGhhdCBwcm9tcHQga2VlcHMgcmluZ2luZyBpbiBteSBlYXJzLiBJdCBleHBsaWNpdGx5IG5hbWVzIEdDRSBhbmQgUUVNVS4gVmlydHVhbEJveCAqaXMqIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIGJ1dCBpcyBpdCAqbGlrZSogR0NFIG9yIFFFTVUgaW4gdGhlIGNvbnRleHQgb2Ygc3RhbmRhcmQgZnV6emluZyBpbmZyYXN0cnVjdHVyZT8gR0NFIGFuZCBRRU1VIGFyZSB0aGUgbm9ybSBmb3Igc29tZXRoaW5nIGxpa2Ugc3l6Ym90LCByaWdodD8gU28gaWYgdGhpcyBpcyBWaXJ0dWFsQm94LXNwZWNpZmljLCBpcyB0aGF0IHdoYXQgdGhleSBtZWFuPyBBbmQgaWYgaXQncyBpbiBgdmJveHNmYCwgSSdtIGd1ZXNzaW5nIGl0IGNhbiBvbmx5IGJlIGZ1enplZCBpZiB0aGUgZnV6emVyIHJ1bnMgaW4gVmlydHVhbEJveC4gRG9lcyBzeXpib3QgaGF2ZSBpbnN0YW5jZXMgaW4gVmlydHVhbEJveD8gSSBkb24ndCAqdGhpbmsqIHNvLiBJJ2QgYXNzdW1lIHRoZSBzeXotY2x1c3RlciBjb21taXQgYXV0aG9yIGlzIGEgcmVkIGhlcnJpbmcuIEl0J3MganVzdCBhIGdlbmVyaWMgbGFiZWwuXG5cbk9rYXksIGxldCdzIGJhY2sgdXAuIElmIGl0ICppcyogcmVhY2hhYmxlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqaG93Ki4gQ2FuIEkgYnlwYXNzIGB2Ym94c2ZfY29ubmVjdGA/IEkgcXVpY2tseSByZXRyYWNlIHRoZSBjYWxscyBhbmQgc2VlIHRoYXQgYHZib3hzZl9maWxsX3N1cGVyYCBjYWxscyBpdC4gYHZib3hzZl9jb25uZWN0YCBjYWxscyBgdmJnX2dldF9nZGV2YCwgd2hpY2ggcmV0dXJucyBgdmJnX2dkZXZgLCB3aGljaCBpcyBzZXQgaW4gYHZiZ19wY2lfcHJvYmVgLiBOb3cgd2UgYXJlIGF0IHRoZSBQQ0kgbGV2ZWwuIGB2YmdfcGNpX3Byb2JlYCBpcyBjYWxsZWQgd2hlbiBhIGRldmljZSB3aXRoIHZlbmRvciBJRCAweDgwZWUgYW5kIGRldmljZSBJRCAweGNhZmUgaXMgZm91bmQsIHdoaWNoIGlzIFZpcnR1YWxCb3gncyBndWVzdCBkZXZpY2UuIENhbiBJIGZha2UgdGhhdCBpbiBRRU1VPyBJIGtub3cgUUVNVSAqY2FuKiBlbXVsYXRlIGRldmljZXMuIERvZXMgaXQgZW11bGF0ZSB0aGUgVmlydHVhbEJveCBndWVzdCBkZXZpY2U/IEkgY2FuJ3QgY2hlY2sgdGhlIFFFTVUgc291cmNlIHJpZ2h0IG5vdywgYnV0IEkgZG9uJ3QgKnRoaW5rKiBzby4gT3IgbWF5YmUgc3l6a2FsbGVyIGlzIHVzaW5nIFVNTD8gT3IgYSBmYWtlIFBDSSBkcml2ZXI/XG5cbkkga25vdyB0aGVyZSBpcyBhIGBwY2lfc3R1YmAgZHJpdmVyLCBidXQgaXQgZG9lc24ndCBjcmVhdGUgZmFrZSBkZXZpY2VzLiBXaGF0IGFib3V0IGBDT05GSUdfUENJX0VORFBPSU5UX1RFU1RgPyBNYXliZSBzeXpfbW91bnRfaW1hZ2U/IE5vLiBXYWl0ISBJZiBzeXprYWxsZXIgZm91bmQgdGhpcyBidWcsIGl0ICppcyogcmVhY2hhYmxlIHNvbWVob3csIHdoaWNoIG1ha2VzIG1lIHRoaW5rIGJhY2sgdG8gdGhlIHByb21wdC5cblxuU28gdGhlIHByb21wdCBpcyBjbGVhcmx5IHRlbGxpbmcgbWUgdG8gcmV0dXJuIGZhbHNlIGlmIGl0J3MgKmltcG9zc2libGUqIHRvIHJlYWNoIGluIEdDRSBvciBRRU1VLiBTaW5jZSB0aGlzIHJlcXVpcmVzIFZpcnR1YWxCb3gsIGl0J3MgaW1wb3NzaWJsZS4gQnV0IGlzIHRoaXMgYSB0cmljaz8gRG9lcyBRRU1VICphY3R1YWxseSogZW11bGF0ZSB0aGUgVmlydHVhbEJveCBndWVzdCBkZXZpY2U/IEEgcXVpY2sgbWVudGFsIHNlYXJjaCBjb25maXJtczogTm8uIFZpcnR1YWxCb3ggZ3Vlc3QgYWRkaXRpb25zIGFyZSBzcGVjaWZpYyB0byBWaXJ0dWFsQm94LlxuXG5Db3VsZCBzeXprYWxsZXIgYmUgcnVubmluZyBHQ0UsIGJ1dCB1c2luZyBuZXN0ZWQgdmlydHVhbGl6YXRpb24gdG8gcnVuIFZpcnR1YWxCb3ggKndpdGhpbiogdGhhdD8gUG9zc2libGUsIGJ1dCB0aGF0J3Mgd2lsZGx5IHVubGlrZWx5IGZvciBhIHN0YW5kYXJkIGZ1enppbmcgc2V0dXAuIFRoZW4gaXQgaGl0cyBtZS4gVGhlIHByb21wdCB3b3JkaW5nOiBcIkNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlwiIEl0IFBFUkZFQ1RMWSBkZXNjcmliZXMgYHZib3hzZmAgYW5kIGB2Ym94Z3Vlc3RgLiBUaGVyZSBpc24ndCBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSBmb3IgdGhlbSwgbGlrZSBgdXNiIGdhZGdldGAgb3IgYG1hYzgwMjExX2h3c2ltYC4gVGhleSAqcmVxdWlyZSogdGhlIFZpcnR1YWxCb3ggaHlwZXJ2aXNvci5cblxuQWxyaWdodCwgYWZ0ZXIgdGhpcyBkZXRhaWxlZCBtZW50YWwgd2Fsa3Rocm91Z2gsIEkgTVVTVCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIEp1c3QgdG8gYmUgc3VyZSwgSSB3aWxsIHF1aWNrbHkgdmVyaWZ5IHRoZXJlIGlzIG5vIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIGZvciBgdmJveGd1ZXN0YCwgYnV0IEkgYW0gc3VyZSB0aGVyZSBpcyBub25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzE0NiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NTE6MDAuMDE4NTEzMjE1WiIsIlNlcSI6NTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDE1MjE5NDgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZib3hndWVzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ0b29scy90ZXN0aW5nL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NTE6MDAuMjYwMDQzNjAzWiIsIlNlcSI6NTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NzM3NTM3OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhpbmtpbmcgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIFRlc3QgQ292ZXJhZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBmb3IgcmVsZXZhbnQgdGVzdGluZyBjb2RlLCBwcm9iYWJseSBmb3IgYSBuZXcgZmVhdHVyZSBvciB0byBkZWJ1ZyBzb21ldGhpbmcuIEkgc3RhcnRlZCBieSBjaGVja2luZyB0aGUgYHRvb2xzL3Rlc3RpbmcvYCBkaXJlY3RvcnksIHdoaWNoIGlzIHVzdWFsbHkgdGhlIGdvLXRvIGxvY2F0aW9uIGZvciBvdXIgdGVzdCBpbmZyYXN0cnVjdHVyZSBhbmQgcmVsYXRlZCBzY3JpcHRzLiBCdXQuLi4gbm90aGluZy4gTm8gbWF0Y2hlcyBhdCBhbGwuIFRoaXMgaXMgZWl0aGVyIGV4cGVjdGVkLCBvciB1bmV4cGVjdGVkLiBJdCBjb3VsZCBtZWFuIHRoZSByZWxldmFudCB0ZXN0cyBhcmUgbG9jYXRlZCBzb21ld2hlcmUgZWxzZSwgbWF5YmUgaW4gYSBtb2R1bGUgc3BlY2lmaWMgdGVzdCBmb2xkZXIsIG9yIHRoYXQgdGhleSBhcmUgbWFuYWdlZCBpbiBhIGRpZmZlcmVudCB3YXkuIEkgbmVlZCB0byB3aWRlbiB0aGUgc2VhcmNoIHNjb3BlIGFuZCBjb25zaWRlciBvdGhlciBsb2NhdGlvbnMuIEkgc2hvdWxkIGFsc28gdGhpbmsgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zIG9mIG5vIGV4aXN0aW5nIHRlc3Rpbmc7IG1heWJlIGl0J3MgdG9vIGVhcmx5IHRvIGxvb2sgYXQgdGVzdGluZyBhcyBvZiB5ZXQuIEknbGwgbmVlZCBtb3JlIGluZm9ybWF0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIG5leHQgc3RlcHMgYW5kIG1ha2UgYW55IGRlY2lzaW9ucyBhYm91dCB0ZXN0IGRlc2lnbiBhbmQvb3IgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1MjMyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzo1MTowMy4yMzM4MDAwNTdaIiwiU2VxIjo2MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzkzMTUyMSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmJveGd1ZXN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvcGNpL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NTE6MDMuMzQxNzQ0Njc4WiIsIlNlcSI6NjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk0MDY0NDU3OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgUmVhc29uaW5nIGZvciBGaWx0ZXJpbmcgdGhpcyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgY2hlY2tlZCBmb3IgYW55IHNvZnR3YXJlIGVtdWxhdG9ycyBmb3IgYHZib3hndWVzdGAgd2l0aGluIGBkcml2ZXJzL3BjaS9gLCBhbmQgdGhlcmUgYXJlIG5vbmUuIFRoYXQgbWVhbnMgdGhpcyBkcml2ZXIgKnN0cmljdGx5KiBkZXBlbmRzIG9uIHRoZSBWaXJ0dWFsQm94IGh5cGVydmlzb3IuXG5cblRoZSBwcm9tcHQgaXMgY3J5c3RhbCBjbGVhcjogSSBuZWVkIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiBhIHBhdGNoIGFmZmVjdHMgY29kZSB0aGF0IGlzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdpdGggc29mdHdhcmUgZW11bGF0ZWQgaGFyZHdhcmUuIGB2Ym94c2ZgLCB0aGUgVmlydHVhbEJveCBHdWVzdCBTaGFyZWQgRm9sZGVyLCBpcyBleGFjdGx5IHRoYXQga2luZCBvZiBjb2RlLiBJdCBhYnNvbHV0ZWx5IHJlcXVpcmVzIHRoZSBWaXJ0dWFsQm94IGh5cGVydmlzb3IgYmVjYXVzZSB0aGVyZSdzIG5vIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIGVxdWl2YWxlbnQuIFRoZXJlZm9yZSwgSSB3YXMgaW5pdGlhbGx5IGNvbmZpZGVudCB0aGF0IHRoaXMgcGF0Y2ggd291bGQgaW5kZWVkIGJlIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5Ib3dldmVyLCBhIHF1aWNrIHRob3VnaHQ6IGNvdWxkIHN5emthbGxlciwgdGhlIGZ1enplciwgaGF2ZSBwb3NzaWJseSBmb3VuZCBzb21ldGhpbmcgaW4gVmlydHVhbEJveD8gRXZlbiBpZiBpdCBkaWQsIHRoZSBwcm9tcHQgZXhwbGljaXRseSB0ZWxscyBtZSB0byBpZ25vcmUgdGhhdCBwb3NzaWJpbGl0eSBiZWNhdXNlIHRoZSBmdXp6aW5nIGluZnJhc3RydWN0dXJlIHRoYXQgdGhpcyBBSSBpcyBvcGVyYXRpbmcgZm9yIG1vc3QgbGlrZWx5IHVzZXMgR0NFIG9yIFFFTVUsIGFuZCB0aGV5IGRvIG5vdCB3YW50IHRvIHdhc3RlIGN5Y2xlcyBmdXp6aW5nIFZpcnR1YWxCb3gtc3BlY2lmaWMgY29kZSB0aGF0IHRoZXkgY2Fubm90IHJlYWNoLiBUaGlzIG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IHRoZSBnb2FsIGhlcmUgaXMgdG8gZmlsdGVyIHBhdGNoZXMgdGhhdCBjYW4ndCBiZSB0ZXN0ZWQgd2l0aCB0aGUgY3VycmVudCBpbmZyYXN0cnVjdHVyZS5cblxuSSd2ZSBjcmFmdGVkIGEgY29tcHJlaGVuc2l2ZSBleHBsYW5hdGlvbjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFZpcnR1YWxCb3ggR3Vlc3QgU2hhcmVkIEZvbGRlciAodmJveHNmKSBmaWxlc3lzdGVtIGRyaXZlci4gVGhpcyBmaWxlc3lzdGVtIHJlbGllcyBvbiB0aGUgVmlydHVhbEJveCBndWVzdCBQQ0kgZGV2aWNlICh2Ym94Z3Vlc3QpIGZvciBtb3VudGluZyBhbmQgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBob3N0LiBTaW5jZSB0aGlzIGRldmljZSBpcyBleGNsdXNpdmVseSBwcm92aWRlZCBieSB0aGUgVmlydHVhbEJveCBoeXBlcnZpc29yLCBhbmQgbm8gc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgZXhpc3RzIGZvciBpdCBpbiB0aGUga2VybmVsLCB0aGlzIGNvZGUgcGF0aCBpcyB1bnJlYWNoYWJsZSBhbmQgdW4tZnV6emFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuXCJcblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkndmUgZHVnIGludG8gdGhlIGNvZGUuIEkgZm9sbG93ZWQgdGhlIG1vdW50IHBhdGg6IGB2Ym94c2ZfZmlsbF9zdXBlcmAgLVx1MDAzZSBgdmJveHNmX2Nvbm5lY3RgIC1cdTAwM2UgYHZiZ19nZXRfZ2RldmAuIEkgc2VlIHRoYXQgYHZiZ19nZXRfZ2RldmAgcmV0dXJucyBgLUVOT0RFVmAgaWYgYHZiZ19nZGV2YCBpcyBOVUxMLiBUaGlzIGlzIHNldCAqb25seSogd2l0aGluIGB2YmdfcGNpX3Byb2JlYC4gVGhpcyBQQ0kgcHJvYmUgZnVuY3Rpb24gb25seSBnZXRzIGNhbGxlZCB3aGVuIHRoZSBQQ0kgZGV2aWNlIGAweDgwZWU6MHhjYWZlYCBnZXRzIHByb2JlZC4gU28sIGl0J3MgYSBoYXJkIHJlcXVpcmVtZW50IHRvIGhhdmUgdGhhdCBWaXJ0dWFsQm94IFBDSSBkZXZpY2UgcHJlc2VudCB0byBtb3VudCBgdmJveHNmYC5cblxuSSBldmVuIGNoZWNrZWQgaWYgdGhlcmUgd2FzIGFub3RoZXIgd2F5IHRvIHJlYWNoIHNvbWUgZnVuY3Rpb25zIGluc2lkZSwgbGlrZSBgdmJveHNmX2Rpcl9lbWl0YC4gSXQgaXMgYSBzdGF0aWMgZnVuY3Rpb24gaW4gYGZzL3Zib3hzZi9kaXIuY2AuIEl0J3Mgb25seSByZWZlcmVuY2VkIGluIGB2Ym94c2ZfZGlyX2l0ZXJhdGVgIGFuZCBgdmJveHNmX2Rpcl9mb3BzYC4gYHZib3hzZl9kaXJfZm9wc2AgaXMgb25seSB1c2VkIGZvciBkaXJlY3RvcnkgaW5vZGVzLiBEaXJlY3RvcnkgaW5vZGVzIGFyZSBvbmx5IGNyZWF0ZWQgd2hlbiBgdmJveHNmYCBpcyBtb3VudGVkLiBTbywgSSBoYXZlIHRvIGhhdmUgaXQgbW91bnRlZC5cblxuWWVzLCB0aGVyZSBpcyBubyB3YXkgdG8gcmVhY2ggdGhpcyBjb2RlIGluIEdDRSBvciBRRU1VLlxuXG5UaGVyZWZvcmUsIHRoZSBjb25jbHVzaW9uIGlzIGNsZWFyLiBJIHdpbGwgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTQ2NywiT3V0cHV0VG9rZW5zIjoxMjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6NTE6MTIuNzQ4MTkzNTg2WiIsIlNlcSI6NjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFZpcnR1YWxCb3ggR3Vlc3QgU2hhcmVkIEZvbGRlciAodmJveHNmKSBmaWxlc3lzdGVtIGRyaXZlci4gVGhpcyBmaWxlc3lzdGVtIHN0cmljdGx5IHJlcXVpcmVzIHRoZSBWaXJ0dWFsQm94IGd1ZXN0IFBDSSBkZXZpY2UgKHZib3hndWVzdCkgdG8gYmUgcHJlc2VudCBhbmQgaW5pdGlhbGl6ZWQgaW4gb3JkZXIgdG8gbW91bnQgYW5kIGNvbW11bmljYXRlIHdpdGggdGhlIGhvc3QuIFNpbmNlIHRoaXMgZGV2aWNlIGlzIG9ubHkgcHJvdmlkZWQgYnkgdGhlIFZpcnR1YWxCb3ggaHlwZXJ2aXNvciBhbmQgdGhlcmUgaXMgbm8gc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgZm9yIGl0IGluIHRoZSBrZXJuZWwsIHRoaXMgY29kZSBwYXRoIGlzIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1enogaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVmlydHVhbEJveCBHdWVzdCBTaGFyZWQgRm9sZGVyICh2Ym94c2YpIGZpbGVzeXN0ZW0gZHJpdmVyLiBUaGlzIGZpbGVzeXN0ZW0gc3RyaWN0bHkgcmVxdWlyZXMgdGhlIFZpcnR1YWxCb3ggZ3Vlc3QgUENJIGRldmljZSAodmJveGd1ZXN0KSB0byBiZSBwcmVzZW50IGFuZCBpbml0aWFsaXplZCBpbiBvcmRlciB0byBtb3VudCBhbmQgY29tbXVuaWNhdGUgd2l0aCB0aGUgaG9zdC4gU2luY2UgdGhpcyBkZXZpY2UgaXMgb25seSBwcm92aWRlZCBieSB0aGUgVmlydHVhbEJveCBoeXBlcnZpc29yIGFuZCB0aGVyZSBpcyBubyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSBmb3IgaXQgaW4gdGhlIGtlcm5lbCwgdGhpcyBjb2RlIHBhdGggaXMgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgZnV6eiBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxhstq[1] Phase: Running StartedAt: 2026-07-10 23:51:25 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxhstq[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-10 23:51:25 +0000 UTC FinishedAt: 2026-07-10 23:51:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}