IyEvdXNyL2Jpbi9lbnYgcGVybAojCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBXcml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQG9wZW5zc2wub3JnPiBmb3IgdGhlIE9wZW5TU0wKIyBwcm9qZWN0LiBUaGUgbW9kdWxlIGlzLCBob3dldmVyLCBkdWFsIGxpY2Vuc2VkIHVuZGVyIE9wZW5TU0wgYW5kCiMgQ1JZUFRPR0FNUyBsaWNlbnNlcyBkZXBlbmRpbmcgb24gd2hlcmUgeW91IG9idGFpbiBpdC4gRm9yIGZ1cnRoZXIKIyBkZXRhaWxzIHNlZSBodHRwOi8vd3d3Lm9wZW5zc2wub3JnL35hcHByby9jcnlwdG9nYW1zLy4KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojCiMgTWFyY2gsIE1heSwgSnVuZSAyMDEwCiMKIyBUaGUgbW9kdWxlIGltcGxlbWVudHMgIjQtYml0IiBHQ00gR0hBU0ggZnVuY3Rpb24gYW5kIHVuZGVybHlpbmcKIyBzaW5nbGUgbXVsdGlwbGljYXRpb24gb3BlcmF0aW9uIGluIEdGKDJeMTI4KS4gIjQtYml0IiBtZWFucyB0aGF0IGl0CiMgdXNlcyAyNTYgYnl0ZXMgcGVyLWtleSB0YWJsZSBbKzY0LzEyOCBieXRlcyBmaXhlZCB0YWJsZV0uIEl0IGhhcyB0d28KIyBjb2RlIHBhdGhzOiB2YW5pbGxhIHg4NiBhbmQgdmFuaWxsYSBTU0UuIEZvcm1lciB3aWxsIGJlIGV4ZWN1dGVkIG9uCiMgNDg2IGFuZCBQZW50aXVtLCBsYXR0ZXIgb24gYWxsIG90aGVycy4gU1NFIEdIQVNIIGZlYXR1cmVzIHNvIGNhbGxlZAojICI1MjhCIiB2YXJpYW50IG9mICI0LWJpdCIgbWV0aG9kIHV0aWxpemluZyBhZGRpdGlvbmFsIDI1NisxNiBieXRlcwojIG9mIHBlci1rZXkgc3RvcmFnZSBbKzUxMiBieXRlcyBzaGFyZWQgdGFibGVdLiBQZXJmb3JtYW5jZSByZXN1bHRzCiMgYXJlIGZvciBzdHJlYW1lZCBHSEFTSCBzdWJyb3V0aW5lIGFuZCBhcmUgZXhwcmVzc2VkIGluIGN5Y2xlcyBwZXIKIyBwcm9jZXNzZWQgYnl0ZSwgbGVzcyBpcyBiZXR0ZXI6CiMKIwkJZ2NjIDIuOTUuMygqKQlTU0UgYXNzZW1ibGVyCXg4NiBhc3NlbWJsZXIKIwojIFBlbnRpdW0JMTA1LzExMSgqKikJLQkJNTAKIyBQSUlJCQk2OCAvNzUJCTEyLjIJCTI0CiMgUDQJCTEyNS8xMjUJCTE3LjgJCTg0KCoqKikKIyBPcHRlcm9uCTY2IC83MAkJMTAuMQkJMzAKIyBDb3JlMgkJNTQgLzY3CQk4LjQJCTE4CiMgQXRvbQkJMTA1LzEwNQkJMTYuOAkJNTMKIyBWSUEgTmFubwk2OSAvNzEJCTEzLjAJCTI3CiMKIyAoKikJZ2NjIDMuNC54IHdhcyBvYnNlcnZlZCB0byBnZW5lcmF0ZSBmZXcgcGVyY2VudCBzbG93ZXIgY29kZSwKIwl3aGljaCBpcyBvbmUgb2YgcmVhc29ucyB3aHkgMi45NS4zIHJlc3VsdHMgd2VyZSBjaG9zZW4sCiMJYW5vdGhlciByZWFzb24gaXMgbGFjayBvZiAzLjQueCByZXN1bHRzIGZvciBvbGRlciBDUFVzOwojCWNvbXBhcmlzb24gd2l0aCBTU0UgcmVzdWx0cyBpcyBub3QgY29tcGxldGVseSBmYWlyLCBiZWNhdXNlIEMKIwlyZXN1bHRzIGFyZSBmb3IgdmFuaWxsYSAiMjU2QiIgaW1wbGVtZW50YXRpb24sIHdoaWxlCiMJYXNzZW1ibGVyIHJlc3VsdHMgYXJlIGZvciAiNTI4QiI7LSkKIyAoKiopCXNlY29uZCBudW1iZXIgaXMgcmVzdWx0IGZvciBjb2RlIGNvbXBpbGVkIHdpdGggLWZQSUMgZmxhZywKIwl3aGljaCBpcyBhY3R1YWxseSBtb3JlIHJlbGV2YW50LCBiZWNhdXNlIGFzc2VtYmxlciBjb2RlIGlzCiMJcG9zaXRpb24taW5kZXBlbmRlbnQ7CiMgKCoqKikJc2VlIGNvbW1lbnQgaW4gbm9uLU1NWCByb3V0aW5lIGZvciBmdXJ0aGVyIGRldGFpbHM7CiMKIyBUbyBzdW1tYXJpemUsIGl0J3MgPjItNSB0aW1lcyBmYXN0ZXIgdGhhbiBnY2MtZ2VuZXJhdGVkIGNvZGUuIFRvCiMgYW5jaG9yIGl0IHRvIHNvbWV0aGluZyBlbHNlIFNIQTEgYXNzZW1ibGVyIHByb2Nlc3NlcyBvbmUgYnl0ZSBpbgojIH43IGN5Y2xlcyBvbiBjb250ZW1wb3JhcnkgeDg2IGNvcmVzLiBBcyBmb3IgY2hvaWNlIG9mIE1NWC9TU0UKIyBpbiBwYXJ0aWN1bGFyLCBzZWUgY29tbWVudCBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLi4uCgojIE1heSAyMDEwCiMKIyBBZGQgUENMTVVMUURRIHZlcnNpb24gcGVyZm9ybWluZyBhdCAyLjEwIGN5Y2xlcyBwZXIgcHJvY2Vzc2VkIGJ5dGUuCiMgVGhlIHF1ZXN0aW9uIGlzIGhvdyBjbG9zZSBpcyBpdCB0byB0aGVvcmV0aWNhbCBsaW1pdD8gVGhlIHBjbG11bHFkcQojIGluc3RydWN0aW9uIGxhdGVuY3kgYXBwZWFycyB0byBiZSAxNCBjeWNsZXMgYW5kIHRoZXJlIGNhbid0IGJlIG1vcmUKIyB0aGFuIDIgb2YgdGhlbSBleGVjdXRpbmcgYXQgYW55IGdpdmVuIHRpbWUuIFRoaXMgbWVhbnMgdGhhdCBzaW5nbGUKIyBLYXJhdHN1YmEgbXVsdGlwbGljYXRpb24gd291bGQgdGFrZSAyOCBjeWNsZXMgKnBsdXMqIGZldyBjeWNsZXMgZm9yCiMgcHJlLSBhbmQgcG9zdC1wcm9jZXNzaW5nLiBUaGVuIG11bHRpcGxpY2F0aW9uIGhhcyB0byBiZSBmb2xsb3dlZCBieQojIG1vZHVsby1yZWR1Y3Rpb24uIEdpdmVuIHRoYXQgYWdncmVnYXRlZCByZWR1Y3Rpb24gbWV0aG9kIFtzZWUKIyAiQ2FycnktbGVzcyBNdWx0aXBsaWNhdGlvbiBhbmQgSXRzIFVzYWdlIGZvciBDb21wdXRpbmcgdGhlIEdDTSBNb2RlIgojIHdoaXRlIHBhcGVyIGJ5IEludGVsXSBhbGxvd3MgeW91IHRvIHBlcmZvcm0gcmVkdWN0aW9uIG9ubHkgb25jZSBpbgojIGEgd2hpbGUgd2UgY2FuIGFzc3VtZSB0aGF0IGFzeW1wdG90aWMgcGVyZm9ybWFuY2UgY2FuIGJlIGVzdGltYXRlZAojIGFzICgyOCtUbW9kL05hZ2dyKS8xNiwgd2hlcmUgVG1vZCBpcyB0aW1lIHRvIHBlcmZvcm0gcmVkdWN0aW9uCiMgYW5kIE5hZ2dyIGlzIHRoZSBhZ2dyZWdhdGlvbiBmYWN0b3IuCiMKIyBCZWZvcmUgd2UgcHJvY2VlZCB0byB0aGlzIGltcGxlbWVudGF0aW9uIGxldCdzIGhhdmUgY2xvc2VyIGxvb2sgYXQKIyB0aGUgYmVzdC1wZXJmb3JtaW5nIGNvZGUgc3VnZ2VzdGVkIGJ5IEludGVsIGluIHRoZWlyIHdoaXRlIHBhcGVyLgojIEJ5IHRyYWNpbmcgaW50ZXItcmVnaXN0ZXIgZGVwZW5kZW5jaWVzIFRtb2QgaXMgZXN0aW1hdGVkIGFzIH4xOQojIGN5Y2xlcyBhbmQgTmFnZ3IgY2hvc2VuIGJ5IEludGVsIGlzIDQsIHJlc3VsdGluZyBpbiAyLjA1IGN5Y2xlcyBwZXIKIyBwcm9jZXNzZWQgYnl0ZS4gQXMgaW1wbGllZCwgdGhpcyBpcyBxdWl0ZSBvcHRpbWlzdGljIGVzdGltYXRlLAojIGJlY2F1c2UgaXQgZG9lcyBub3QgYWNjb3VudCBmb3IgS2FyYXRzdWJhIHByZS0gYW5kIHBvc3QtcHJvY2Vzc2luZywKIyB3aGljaCBmb3IgYSBzaW5nbGUgbXVsdGlwbGljYXRpb24gaXMgfjUgY3ljbGVzLiBVbmZvcnR1bmF0ZWx5IEludGVsCiMgZG9lcyBub3QgcHJvdmlkZSBwZXJmb3JtYW5jZSBkYXRhIGZvciBHSEFTSCBhbG9uZS4gQnV0IGJlbmNobWFya2luZwojIEFFU19HQ01fZW5jcnlwdCByaXBwZWQgb3V0IG9mIEZpZy4gMTUgb2YgdGhlIHdoaXRlIHBhcGVyIHdpdGggYWFkdAojIGFsb25lIHJlc3VsdGVkIGluIDIuNDYgY3ljbGVzIHBlciBieXRlIG9mIG91dCAxNktCIGJ1ZmZlci4gTm90ZSB0aGF0CiMgdGhlIHJlc3VsdCBhY2NvdW50cyBldmVuIGZvciBwcmUtY29tcHV0aW5nIG9mIGRlZ3JlZXMgb2YgdGhlIGhhc2gKIyBrZXkgSCwgYnV0IGl0cyBwb3J0aW9uIGlzIG5lZ2xpZ2libGUgYXQgMTZLQiBidWZmZXIgc2l6ZS4KIwojIE1vdmluZyBvbiB0byB0aGUgaW1wbGVtZW50YXRpb24gaW4gcXVlc3Rpb24uIFRtb2QgaXMgZXN0aW1hdGVkIGFzCiMgfjEzIGN5Y2xlcyBhbmQgTmFnZ3IgaXMgMiwgZ2l2aW5nIGFzeW1wdG90aWMgcGVyZm9ybWFuY2Ugb2YgLi4uCiMgMi4xNi4gSG93IGlzIGl0IHBvc3NpYmxlIHRoYXQgbWVhc3VyZWQgcGVyZm9ybWFuY2UgaXMgYmV0dGVyIHRoYW4KIyBvcHRpbWlzdGljIHRoZW9yZXRpY2FsIGVzdGltYXRlPyBUaGVyZSBpcyBvbmUgdGhpbmcgSW50ZWwgZmFpbGVkCiMgdG8gcmVjb2duaXplLiBCeSBzZXJpYWxpemluZyBHSEFTSCB3aXRoIENUUiBpbiBzYW1lIHN1YnJvdXRpbmUKIyBmb3JtZXIncyBwZXJmb3JtYW5jZSBpcyByZWFsbHkgbGltaXRlZCB0byBhYm92ZSAoVG11bCArIFRtb2QvTmFnZ3IpCiMgZXF1YXRpb24uIEJ1dCBpZiBHSEFTSCBwcm9jZWR1cmUgaXMgZGV0YWNoZWQsIHRoZSBtb2R1bG8tcmVkdWN0aW9uCiMgY2FuIGJlIGludGVybGVhdmVkIHdpdGggTmFnZ3ItMSBtdWx0aXBsaWNhdGlvbnMgYXQgaW5zdHJ1Y3Rpb24gbGV2ZWwKIyBhbmQgdW5kZXIgaWRlYWwgY29uZGl0aW9ucyBldmVuIGRpc2FwcGVhciBmcm9tIHRoZSBlcXVhdGlvbi4gU28gdGhhdAojIG9wdGltaXN0aWMgdGhlb3JldGljYWwgZXN0aW1hdGUgZm9yIHRoaXMgaW1wbGVtZW50YXRpb24gaXMgLi4uCiMgMjgvMTY9MS43NSwgYW5kIG5vdCAyLjE2LiBXZWxsLCBpdCdzIHByb2JhYmx5IHdheSB0b28gb3B0aW1pc3RpYywKIyBhdCBsZWFzdCBmb3Igc3VjaCBzbWFsbCBOYWdnci4gSSdkIGFyZ3VlIHRoYXQgKDI4K1Rwcm9jL05hZ2dyKSwKIyB3aGVyZSBUcHJvYyBpcyB0aW1lIHJlcXVpcmVkIGZvciBLYXJhdHN1YmEgcHJlLSBhbmQgcG9zdC1wcm9jZXNzaW5nLAojIGlzIG1vcmUgcmVhbGlzdGljIGVzdGltYXRlLiBJbiB0aGlzIGNhc2UgaXQgZ2l2ZXMgLi4uIDEuOTEgY3ljbGVzLgojIE9yIGluIG90aGVyIHdvcmRzLCBkZXBlbmRpbmcgb24gaG93IHdlbGwgd2UgY2FuIGludGVybGVhdmUgcmVkdWN0aW9uCiMgYW5kIG9uZSBvZiB0aGUgdHdvIG11bHRpcGxpY2F0aW9ucyB0aGUgcGVyZm9ybWFuY2Ugc2hvdWxkIGJlIGJldHdlbgojIDEuOTEgYW5kIDIuMTYuIEFzIGFscmVhZHkgbWVudGlvbmVkLCB0aGlzIGltcGxlbWVudGF0aW9uIHByb2Nlc3NlcwojIG9uZSBieXRlIG91dCBvZiA4S0IgYnVmZmVyIGluIDIuMTAgY3ljbGVzLCB3aGlsZSB4ODZfNjQgY291bnRlcnBhcnQKIyAtIGluIDIuMDIuIHg4Nl82NCBwZXJmb3JtYW5jZSBpcyBiZXR0ZXIsIGJlY2F1c2UgbGFyZ2VyIHJlZ2lzdGVyCiMgYmFuayBhbGxvd3MgdG8gaW50ZXJsZWF2ZSByZWR1Y3Rpb24gYW5kIG11bHRpcGxpY2F0aW9uIGJldHRlci4KIwojIERvZXMgaXQgbWFrZSBzZW5zZSB0byBpbmNyZWFzZSBOYWdncj8gVG8gc3RhcnQgd2l0aCBpdCdzIHZpcnR1YWxseQojIGltcG9zc2libGUgaW4gMzItYml0IG1vZGUsIGJlY2F1c2Ugb2YgbGltaXRlZCByZWdpc3RlciBiYW5rCiMgY2FwYWNpdHkuIE90aGVyd2lzZSBpbXByb3ZlbWVudCBoYXMgdG8gYmUgd2VpZ2hlZCBhZ2lhaW5zdCBzbG93ZXIKIyBzZXR1cCwgYXMgd2VsbCBhcyBjb2RlIHNpemUgYW5kIGNvbXBsZXhpdHkgaW5jcmVhc2UuIEFzIGV2ZW4KIyBvcHRpbWlzdGljIGVzdGltYXRlIGRvZXNuJ3QgcHJvbWlzZSAzMCUgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQsCiMgdGhlcmUgYXJlIGN1cnJlbnRseSBubyBwbGFucyB0byBpbmNyZWFzZSBOYWdnci4KIwojIFNwZWNpYWwgdGhhbmtzIHRvIERhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4gZm9yCiMgcHJvdmlkaW5nIGFjY2VzcyB0byBhIFdlc3RtZXJlLWJhc2VkIHN5c3RlbSBvbiBiZWhhbGYgb2YgSW50ZWwKIyBPcGVuIFNvdXJjZSBUZWNobm9sb2d5IENlbnRyZS4KCiMgSmFudWFyeSAyMDEwCiMKIyBUd2Vha2VkIHRvIG9wdGltaXplIHRyYW5zaXRpb25zIGJldHdlZW4gaW50ZWdlciBhbmQgRlAgb3BlcmF0aW9ucwojIG9uIHNhbWUgWE1NIHJlZ2lzdGVyLCBQQ0xNVUxRRFEgc3Vicm91dGluZSB3YXMgbWVhc3VyZWQgdG8gcHJvY2VzcwojIG9uZSBieXRlIGluIDIuMDcgY3ljbGVzIG9uIFNhbmR5IEJyaWRnZSwgYW5kIGluIDIuMTIgLSBvbiBXZXN0bWVyZS4KIyBUaGUgbWlub3IgcmVncmVzc2lvbiBvbiBXZXN0bWVyZSBpcyBvdXR3ZWlnaGVkIGJ5IH4xNSUgaW1wcm92ZW1lbnQKIyBvbiBTYW5keSBCcmlkZ2UuIFN0cmFuZ2VseSBlbm91Z2ggYXR0ZW1wdCB0byBtb2RpZnkgNjQtYml0IGNvZGUgaW4KIyBzaW1pbGFyIG1hbm5lciByZXN1bHRlZCBpbiBhbG1vc3QgMjAlIGRlZ3JhZGF0aW9uIG9uIFNhbmR5IEJyaWRnZSwKIyB3aGVyZSBvcmlnaW5hbCA2NC1iaXQgY29kZSBwcm9jZXNzZXMgb25lIGJ5dGUgaW4gMS45NSBjeWNsZXMuCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBGb3IgcmVmZXJlbmNlLCBBTUQgQnVsbGRvemVyIHByb2Nlc3NlcyBvbmUgYnl0ZSBpbiAxLjk4IGN5Y2xlcyBpbgojIDMyLWJpdCBtb2RlIGFuZCAxLjg5IGluIDY0LWJpdC4KCiMgRmVicnVhcnkgMjAxMwojCiMgT3ZlcmhhdWw6IGFnZ3JlZ2F0ZSBLYXJhdHN1YmEgcG9zdC1wcm9jZXNzaW5nLCBpbXByb3ZlIElMUCBpbgojIHJlZHVjdGlvbl9hbGc5LiBSZXN1bHRpbmcgcGVyZm9ybWFuY2UgaXMgMS45NiBjeWNsZXMgcGVyIGJ5dGUgb24KIyBXZXN0bWVyZSwgMS45NSAtIG9uIFNhbmR5L0l2eSBCcmlkZ2UsIDEuNzYgLSBvbiBCdWxsZG96ZXIuCgokMCA9fiBtLyguKltcL1xcXSlbXlwvXFxdKyQvOyAkZGlyPSQxOwpwdXNoKEBJTkMsIiR7ZGlyfSIsIiR7ZGlyfS4uLy4uL3Blcmxhc20iKTsKcmVxdWlyZSAieDg2YXNtLnBsIjsKCiZhc21faW5pdCgkQVJHVlswXSwiZ2hhc2gteDg2LnBsIiwkeDg2b25seSA9ICRBUkdWWyQjQVJHVl0gZXEgIjM4NiIpOwoKJHNzZTI9MDsKZm9yIChAQVJHVikgeyAkc3NlMj0xIGlmICgvLURPUEVOU1NMX0lBMzJfU1NFMi8pOyB9CgooJFpoaCwkWmhsLCRabGgsJFpsbCkgPSAoImVicCIsImVkeCIsImVjeCIsImVieCIpOwokaW5wICA9ICJlZGkiOwokSHRibCA9ICJlc2kiOwoMCiR1bnJvbGwgPSAwOwkjIEFmZmVjdHMgeDg2IGxvb3AuIEZvbGRlZCBsb29wIHBlcmZvcm1zIH43JSB3b3JzZQoJCSMgdGhhbiB1bnJvbGxlZCwgd2hpY2ggaGFzIHRvIGJlIHdlaWdodGVkIGFnYWluc3QKCQkjIDIuNXggeDg2LXNwZWNpZmljIGNvZGUgc2l6ZSByZWR1Y3Rpb24uCgpzdWIgeDg2X2xvb3AgewogICAgbXkgJG9mZiA9IHNoaWZ0OwogICAgbXkgJHJlbSA9ICJlYXgiOwoKCSZtb3YJKCRaaGgsJkRXUCg0LCRIdGJsLCRabGwpKTsKCSZtb3YJKCRaaGwsJkRXUCgwLCRIdGJsLCRabGwpKTsKCSZtb3YJKCRabGgsJkRXUCgxMiwkSHRibCwkWmxsKSk7CgkmbW92CSgkWmxsLCZEV1AoOCwkSHRibCwkWmxsKSk7CgkmeG9yCSgkcmVtLCRyZW0pOwkjIGF2b2lkIHBhcnRpYWwgcmVnaXN0ZXIgc3RhbGxzIG9uIFBJSUkKCgkjIHNocmQgcHJhY3RpY2FsbHkga2lsbHMgUDQsIDIuNXggZGV0ZXJpb3JhdGlvbiwgYnV0IFA0IGhhcwoJIyBNTVggY29kZS1wYXRoIHRvIGV4ZWN1dGUuIHNocmQgcnVucyB0YWQgZmFzdGVyIFt0aGFuIHR3aWNlCgkjIHRoZSBzaGlmdHMsIG1vdmUncyBhbmQgb3Inc10gb24gcHJlLU1NWCBQZW50aXVtIChhcyB3ZWxsIGFzCgkjIFBJSUkgYW5kIENvcmUyKSwgKmJ1dCogbWluaW1pemVzIGNvZGUgc2l6ZSwgc3BhcmVzIHJlZ2lzdGVyCgkjIGFuZCB0aHVzIGFsbG93cyB0byBmb2xkIHRoZSBsb29wLi4uCglpZiAoISR1bnJvbGwpIHsKCW15ICRjbnQgPSAkaW5wOwoJJm1vdgkoJGNudCwxNSk7Cgkmam1wCSgmbGFiZWwoIng4Nl9sb29wIikpOwoJJnNldF9sYWJlbCgieDg2X2xvb3AiLDE2KTsKCSAgICBmb3IoJGk9MTskaTw9MjskaSsrKSB7CgkJJm1vdgkoJkxCKCRyZW0pLCZMQigkWmxsKSk7CgkJJnNocmQJKCRabGwsJFpsaCw0KTsKCQkmYW5kCSgmTEIoJHJlbSksMHhmKTsKCQkmc2hyZAkoJFpsaCwkWmhsLDQpOwoJCSZzaHJkCSgkWmhsLCRaaGgsNCk7CgkJJnNocgkoJFpoaCw0KTsKCQkmeG9yCSgkWmhoLCZEV1AoJG9mZisxNiwiZXNwIiwkcmVtLDQpKTsKCgkJJm1vdgkoJkxCKCRyZW0pLCZCUCgkb2ZmLCJlc3AiLCRjbnQpKTsKCQlpZiAoJGkmMSkgewoJCQkmYW5kCSgmTEIoJHJlbSksMHhmMCk7CgkJfSBlbHNlIHsKCQkJJnNobAkoJkxCKCRyZW0pLDQpOwoJCX0KCgkJJnhvcgkoJFpsbCwmRFdQKDgsJEh0YmwsJHJlbSkpOwoJCSZ4b3IJKCRabGgsJkRXUCgxMiwkSHRibCwkcmVtKSk7CgkJJnhvcgkoJFpobCwmRFdQKDAsJEh0YmwsJHJlbSkpOwoJCSZ4b3IJKCRaaGgsJkRXUCg0LCRIdGJsLCRyZW0pKTsKCgkJaWYgKCRpJjEpIHsKCQkJJmRlYwkoJGNudCk7CgkJCSZqcwkoJmxhYmVsKCJ4ODZfYnJlYWsiKSk7CgkJfSBlbHNlIHsKCQkJJmptcAkoJmxhYmVsKCJ4ODZfbG9vcCIpKTsKCQl9CgkgICAgfQoJJnNldF9sYWJlbCgieDg2X2JyZWFrIiwxNik7Cgl9IGVsc2UgewoJICAgIGZvcigkaT0xOyRpPDMyOyRpKyspIHsKCQkmY29tbWVudCgkaSk7CgkJJm1vdgkoJkxCKCRyZW0pLCZMQigkWmxsKSk7CgkJJnNocmQJKCRabGwsJFpsaCw0KTsKCQkmYW5kCSgmTEIoJHJlbSksMHhmKTsKCQkmc2hyZAkoJFpsaCwkWmhsLDQpOwoJCSZzaHJkCSgkWmhsLCRaaGgsNCk7CgkJJnNocgkoJFpoaCw0KTsKCQkmeG9yCSgkWmhoLCZEV1AoJG9mZisxNiwiZXNwIiwkcmVtLDQpKTsKCgkJaWYgKCRpJjEpIHsKCQkJJm1vdgkoJkxCKCRyZW0pLCZCUCgkb2ZmKzE1LSgkaT4+MSksImVzcCIpKTsKCQkJJmFuZAkoJkxCKCRyZW0pLDB4ZjApOwoJCX0gZWxzZSB7CgkJCSZtb3YJKCZMQigkcmVtKSwmQlAoJG9mZisxNS0oJGk+PjEpLCJlc3AiKSk7CgkJCSZzaGwJKCZMQigkcmVtKSw0KTsKCQl9CgoJCSZ4b3IJKCRabGwsJkRXUCg4LCRIdGJsLCRyZW0pKTsKCQkmeG9yCSgkWmxoLCZEV1AoMTIsJEh0YmwsJHJlbSkpOwoJCSZ4b3IJKCRaaGwsJkRXUCgwLCRIdGJsLCRyZW0pKTsKCQkmeG9yCSgkWmhoLCZEV1AoNCwkSHRibCwkcmVtKSk7CgkgICAgfQoJfQoJJmJzd2FwCSgkWmxsKTsKCSZic3dhcAkoJFpsaCk7CgkmYnN3YXAJKCRaaGwpOwoJaWYgKCEkeDg2b25seSkgewoJCSZic3dhcAkoJFpoaCk7Cgl9IGVsc2UgewoJCSZtb3YJKCJlYXgiLCRaaGgpOwoJCSZic3dhcAkoImVheCIpOwoJCSZtb3YJKCRaaGgsImVheCIpOwoJfQp9CgppZiAoJHVucm9sbCkgewogICAgJmZ1bmN0aW9uX2JlZ2luX0IoIl94ODZfZ211bHRfNGJpdF9pbm5lciIpOwoJJng4Nl9sb29wKDQpOwoJJnJldAkoKTsKICAgICZmdW5jdGlvbl9lbmRfQigiX3g4Nl9nbXVsdF80Yml0X2lubmVyIik7Cn0KCnN1YiBkZXBvc2l0X3JlbV80Yml0IHsKICAgIG15ICRiaWFzID0gc2hpZnQ7CgoJJm1vdgkoJkRXUCgkYmlhcyswLCAiZXNwIiksMHgwMDAwPDwxNik7CgkmbW92CSgmRFdQKCRiaWFzKzQsICJlc3AiKSwweDFDMjA8PDE2KTsKCSZtb3YJKCZEV1AoJGJpYXMrOCwgImVzcCIpLDB4Mzg0MDw8MTYpOwoJJm1vdgkoJkRXUCgkYmlhcysxMiwiZXNwIiksMHgyNDYwPDwxNik7CgkmbW92CSgmRFdQKCRiaWFzKzE2LCJlc3AiKSwweDcwODA8PDE2KTsKCSZtb3YJKCZEV1AoJGJpYXMrMjAsImVzcCIpLDB4NkNBMDw8MTYpOwoJJm1vdgkoJkRXUCgkYmlhcysyNCwiZXNwIiksMHg0OEMwPDwxNik7CgkmbW92CSgmRFdQKCRiaWFzKzI4LCJlc3AiKSwweDU0RTA8PDE2KTsKCSZtb3YJKCZEV1AoJGJpYXMrMzIsImVzcCIpLDB4RTEwMDw8MTYpOwoJJm1vdgkoJkRXUCgkYmlhcyszNiwiZXNwIiksMHhGRDIwPDwxNik7CgkmbW92CSgmRFdQKCRiaWFzKzQwLCJlc3AiKSwweEQ5NDA8PDE2KTsKCSZtb3YJKCZEV1AoJGJpYXMrNDQsImVzcCIpLDB4QzU2MDw8MTYpOwoJJm1vdgkoJkRXUCgkYmlhcys0OCwiZXNwIiksMHg5MTgwPDwxNik7CgkmbW92CSgmRFdQKCRiaWFzKzUyLCJlc3AiKSwweDhEQTA8PDE2KTsKCSZtb3YJKCZEV1AoJGJpYXMrNTYsImVzcCIpLDB4QTlDMDw8MTYpOwoJJm1vdgkoJkRXUCgkYmlhcys2MCwiZXNwIiksMHhCNUUwPDwxNik7Cn0KDAokc3VmZml4ID0gJHg4Nm9ubHkgPyAiIiA6ICJfeDg2IjsKCiZmdW5jdGlvbl9iZWdpbigiZ2NtX2dtdWx0XzRiaXQiLiRzdWZmaXgpOwoJJnN0YWNrX3B1c2goMTYrNCsxKTsJCQkjICsxIGZvciBzdGFjayBhbGlnbm1lbnQKCSZtb3YJKCRpbnAsJndwYXJhbSgwKSk7CQkjIGxvYWQgWGkKCSZtb3YJKCRIdGJsLCZ3cGFyYW0oMSkpOwkJIyBsb2FkIEh0YWJsZQoKCSZtb3YJKCRaaGgsJkRXUCgwLCRpbnApKTsJCSMgbG9hZCBYaVsxNl0KCSZtb3YJKCRaaGwsJkRXUCg0LCRpbnApKTsKCSZtb3YJKCRabGgsJkRXUCg4LCRpbnApKTsKCSZtb3YJKCRabGwsJkRXUCgxMiwkaW5wKSk7CgoJJmRlcG9zaXRfcmVtXzRiaXQoMTYpOwoKCSZtb3YJKCZEV1AoMCwiZXNwIiksJFpoaCk7CQkjIGNvcHkgWGlbMTZdIG9uIHN0YWNrCgkmbW92CSgmRFdQKDQsImVzcCIpLCRaaGwpOwoJJm1vdgkoJkRXUCg4LCJlc3AiKSwkWmxoKTsKCSZtb3YJKCZEV1AoMTIsImVzcCIpLCRabGwpOwoJJnNocgkoJFpsbCwyMCk7CgkmYW5kCSgkWmxsLDB4ZjApOwoKCWlmICgkdW5yb2xsKSB7CgkJJmNhbGwJKCJfeDg2X2dtdWx0XzRiaXRfaW5uZXIiKTsKCX0gZWxzZSB7CgkJJng4Nl9sb29wKDApOwoJCSZtb3YJKCRpbnAsJndwYXJhbSgwKSk7Cgl9CgoJJm1vdgkoJkRXUCgxMiwkaW5wKSwkWmxsKTsKCSZtb3YJKCZEV1AoOCwkaW5wKSwkWmxoKTsKCSZtb3YJKCZEV1AoNCwkaW5wKSwkWmhsKTsKCSZtb3YJKCZEV1AoMCwkaW5wKSwkWmhoKTsKCSZzdGFja19wb3AoMTYrNCsxKTsKJmZ1bmN0aW9uX2VuZCgiZ2NtX2dtdWx0XzRiaXQiLiRzdWZmaXgpOwoKJmZ1bmN0aW9uX2JlZ2luKCJnY21fZ2hhc2hfNGJpdCIuJHN1ZmZpeCk7Cgkmc3RhY2tfcHVzaCgxNis0KzEpOwkJCSMgKzEgZm9yIDY0LWJpdCBhbGlnbm1lbnQKCSZtb3YJKCRabGwsJndwYXJhbSgwKSk7CQkjIGxvYWQgWGkKCSZtb3YJKCRIdGJsLCZ3cGFyYW0oMSkpOwkJIyBsb2FkIEh0YWJsZQoJJm1vdgkoJGlucCwmd3BhcmFtKDIpKTsJCSMgbG9hZCBpbgoJJm1vdgkoImVjeCIsJndwYXJhbSgzKSk7CQkjIGxvYWQgbGVuCgkmYWRkCSgiZWN4IiwkaW5wKTsKCSZtb3YJKCZ3cGFyYW0oMyksImVjeCIpOwoKCSZtb3YJKCRaaGgsJkRXUCgwLCRabGwpKTsJCSMgbG9hZCBYaVsxNl0KCSZtb3YJKCRaaGwsJkRXUCg0LCRabGwpKTsKCSZtb3YJKCRabGgsJkRXUCg4LCRabGwpKTsKCSZtb3YJKCRabGwsJkRXUCgxMiwkWmxsKSk7CgoJJmRlcG9zaXRfcmVtXzRiaXQoMTYpOwoKICAgICZzZXRfbGFiZWwoIng4Nl9vdXRlcl9sb29wIiwxNik7CgkmeG9yCSgkWmxsLCZEV1AoMTIsJGlucCkpOwkJIyB4b3Igd2l0aCBpbnB1dAoJJnhvcgkoJFpsaCwmRFdQKDgsJGlucCkpOwoJJnhvcgkoJFpobCwmRFdQKDQsJGlucCkpOwoJJnhvcgkoJFpoaCwmRFdQKDAsJGlucCkpOwoJJm1vdgkoJkRXUCgxMiwiZXNwIiksJFpsbCk7CQkjIGR1bXAgaXQgb24gc3RhY2sKCSZtb3YJKCZEV1AoOCwiZXNwIiksJFpsaCk7CgkmbW92CSgmRFdQKDQsImVzcCIpLCRaaGwpOwoJJm1vdgkoJkRXUCgwLCJlc3AiKSwkWmhoKTsKCgkmc2hyCSgkWmxsLDIwKTsKCSZhbmQJKCRabGwsMHhmMCk7CgoJaWYgKCR1bnJvbGwpIHsKCQkmY2FsbAkoIl94ODZfZ211bHRfNGJpdF9pbm5lciIpOwoJfSBlbHNlIHsKCQkmeDg2X2xvb3AoMCk7CgkJJm1vdgkoJGlucCwmd3BhcmFtKDIpKTsKCX0KCSZsZWEJKCRpbnAsJkRXUCgxNiwkaW5wKSk7CgkmY21wCSgkaW5wLCZ3cGFyYW0oMykpOwoJJm1vdgkoJndwYXJhbSgyKSwkaW5wKQlpZiAoISR1bnJvbGwpOwoJJmpiCSgmbGFiZWwoIng4Nl9vdXRlcl9sb29wIikpOwoKCSZtb3YJKCRpbnAsJndwYXJhbSgwKSk7CSMgbG9hZCBYaQoJJm1vdgkoJkRXUCgxMiwkaW5wKSwkWmxsKTsKCSZtb3YJKCZEV1AoOCwkaW5wKSwkWmxoKTsKCSZtb3YJKCZEV1AoNCwkaW5wKSwkWmhsKTsKCSZtb3YJKCZEV1AoMCwkaW5wKSwkWmhoKTsKCSZzdGFja19wb3AoMTYrNCsxKTsKJmZ1bmN0aW9uX2VuZCgiZ2NtX2doYXNoXzRiaXQiLiRzdWZmaXgpOwoMCmlmICghJHg4Nm9ubHkpIHt7ewoKJnN0YXRpY19sYWJlbCgicmVtXzRiaXQiKTsKCmlmICghJHNzZTIpIHt7CSMgcHVyZS1NTVggIk1heSIgdmVyc2lvbi4uLgoKJFM9MTI7CQkjIHNoaWZ0IGZhY3RvciBmb3IgcmVtXzRiaXQKCiZmdW5jdGlvbl9iZWdpbl9CKCJfbW14X2dtdWx0XzRiaXRfaW5uZXIiKTsKIyBNTVggdmVyc2lvbiBwZXJmb3JtcyAzLjUgdGltZXMgYmV0dGVyIG9uIFA0IChzZWUgY29tbWVudCBpbiBub24tTU1YCiMgcm91dGluZSBmb3IgZnVydGhlciBkZXRhaWxzKSwgMTAwJSBiZXR0ZXIgb24gT3B0ZXJvbiwgfjcwJSBiZXR0ZXIKIyBvbiBDb3JlMiBhbmQgUElJSS4uLiBJbiBvdGhlciB3b3JkcyBlZmZvcnQgaXMgY29uc2lkZXJlZCB0byBiZSB3ZWxsCiMgc3BlbnQuLi4gU2luY2UgaW5pdGlhbCByZWxlYXNlIHRoZSBsb29wIHdhcyB1bnJvbGxlZCBpbiBvcmRlciB0bwojICJsaWJlcmF0ZSIgcmVnaXN0ZXIgcHJldmlvdXNseSB1c2VkIGFzIGxvb3AgY291bnRlci4gSW5zdGVhZCBpdCdzCiMgdXNlZCB0byBvcHRpbWl6ZSBjcml0aWNhbCBwYXRoIGluICdaLmhpIF49IHJlbV80Yml0W1oubG8mMHhmXScuCiMgVGhlIHBhdGggaW52b2x2ZXMgbW92ZSBvZiBaLmxvIGZyb20gTU1YIHRvIGludGVnZXIgcmVnaXN0ZXIsCiMgZWZmZWN0aXZlIGFkZHJlc3MgY2FsY3VsYXRpb24gYW5kIGZpbmFsbHkgbWVyZ2Ugb2YgdmFsdWUgdG8gWi5oaS4KIyBSZWZlcmVuY2UgdG8gcmVtXzRiaXQgaXMgc2NoZWR1bGVkIHNvIGxhdGUgdGhhdCBJIGhhZCB0byA+PjQKIyByZW1fNGJpdCBlbGVtZW50cy4gVGhpcyByZXN1bHRlZCBpbiAyMC00NSUgcHJvY2VudCBpbXByb3ZlbWVudAojIG9uIGNvbnRlbXBvcmFyeSC1LWFyY2hzLgp7CiAgICBteSAkY250OwogICAgbXkgJHJlbV80Yml0ID0gImVheCI7CiAgICBteSBAcmVtID0gKCRaaGgsJFpsbCk7CiAgICBteSAkbmhpID0gJFpobDsKICAgIG15ICRubG8gPSAkWmxoOwoKICAgIG15ICgkWmxvLCRaaGkpID0gKCJtbTAiLCJtbTEiKTsKICAgIG15ICR0bXAgPSAibW0yIjsKCgkmeG9yCSgkbmxvLCRubG8pOwkjIGF2b2lkIHBhcnRpYWwgcmVnaXN0ZXIgc3RhbGxzIG9uIFBJSUkKCSZtb3YJKCRuaGksJFpsbCk7CgkmbW92CSgmTEIoJG5sbyksJkxCKCRuaGkpKTsKCSZzaGwJKCZMQigkbmxvKSw0KTsKCSZhbmQJKCRuaGksMHhmMCk7CgkmbW92cQkoJFpsbywmUVdQKDgsJEh0YmwsJG5sbykpOwoJJm1vdnEJKCRaaGksJlFXUCgwLCRIdGJsLCRubG8pKTsKCSZtb3ZkCSgkcmVtWzBdLCRabG8pOwoKCWZvciAoJGNudD0yODskY250Pj0tMjskY250LS0pIHsKCSAgICBteSAkb2RkID0gJGNudCYxOwoJICAgIG15ICRuaXggPSAkb2RkID8gJG5sbyA6ICRuaGk7CgoJCSZzaGwJKCZMQigkbmxvKSw0KQkJCWlmICgkb2RkKTsKCQkmcHNybHEJKCRabG8sNCk7CgkJJm1vdnEJKCR0bXAsJFpoaSk7CgkJJnBzcmxxCSgkWmhpLDQpOwoJCSZweG9yCSgkWmxvLCZRV1AoOCwkSHRibCwkbml4KSk7CgkJJm1vdgkoJkxCKCRubG8pLCZCUCgkY250LzIsJGlucCkpCWlmICghJG9kZCAmJiAkY250Pj0wKTsKCQkmcHNsbHEJKCR0bXAsNjApOwoJCSZhbmQJKCRuaGksMHhmMCkJCQlpZiAoJG9kZCk7CgkJJnB4b3IJKCRaaGksJlFXUCgwLCRyZW1fNGJpdCwkcmVtWzFdLDgpKSBpZiAoJGNudDwyOCk7CgkJJmFuZAkoJHJlbVswXSwweGYpOwoJCSZweG9yCSgkWmhpLCZRV1AoMCwkSHRibCwkbml4KSk7CgkJJm1vdgkoJG5oaSwkbmxvKQkJCWlmICghJG9kZCAmJiAkY250Pj0wKTsKCQkmbW92ZAkoJHJlbVsxXSwkWmxvKTsKCQkmcHhvcgkoJFpsbywkdG1wKTsKCgkJcHVzaAkoQHJlbSxzaGlmdChAcmVtKSk7CQkjICJyb3RhdGUiIHJlZ2lzdGVycwoJfQoKCSZtb3YJKCRpbnAsJkRXUCg0LCRyZW1fNGJpdCwkcmVtWzFdLDgpKTsJIyBsYXN0IHJlbV80Yml0W3JlbV0KCgkmcHNybHEJKCRabG8sMzIpOwkjIGxvd2VyIHBhcnQgb2YgWmxvIGlzIGFscmVhZHkgdGhlcmUKCSZtb3ZkCSgkWmhsLCRaaGkpOwoJJnBzcmxxCSgkWmhpLDMyKTsKCSZtb3ZkCSgkWmxoLCRabG8pOwoJJm1vdmQJKCRaaGgsJFpoaSk7Cgkmc2hsCSgkaW5wLDQpOwkjIGNvbXBlbnNhdGUgZm9yIHJlbV80Yml0W2ldIGJlaW5nID4+NAoKCSZic3dhcAkoJFpsbCk7CgkmYnN3YXAJKCRaaGwpOwoJJmJzd2FwCSgkWmxoKTsKCSZ4b3IJKCRaaGgsJGlucCk7CgkmYnN3YXAJKCRaaGgpOwoKCSZyZXQJKCk7Cn0KJmZ1bmN0aW9uX2VuZF9CKCJfbW14X2dtdWx0XzRiaXRfaW5uZXIiKTsKCiZmdW5jdGlvbl9iZWdpbigiZ2NtX2dtdWx0XzRiaXRfbW14Iik7CgkmbW92CSgkaW5wLCZ3cGFyYW0oMCkpOwkjIGxvYWQgWGkKCSZtb3YJKCRIdGJsLCZ3cGFyYW0oMSkpOwkjIGxvYWQgSHRhYmxlCgoJJmNhbGwJKCZsYWJlbCgicGljX3BvaW50IikpOwoJJnNldF9sYWJlbCgicGljX3BvaW50Iik7CgkmYmxpbmRwb3AoImVheCIpOwoJJmxlYQkoImVheCIsJkRXUCgmbGFiZWwoInJlbV80Yml0IikuIi0iLiZsYWJlbCgicGljX3BvaW50IiksImVheCIpKTsKCgkmbW92egkoJFpsbCwmQlAoMTUsJGlucCkpOwoKCSZjYWxsCSgiX21teF9nbXVsdF80Yml0X2lubmVyIik7CgoJJm1vdgkoJGlucCwmd3BhcmFtKDApKTsJIyBsb2FkIFhpCgkmZW1tcwkoKTsKCSZtb3YJKCZEV1AoMTIsJGlucCksJFpsbCk7CgkmbW92CSgmRFdQKDQsJGlucCksJFpobCk7CgkmbW92CSgmRFdQKDgsJGlucCksJFpsaCk7CgkmbW92CSgmRFdQKDAsJGlucCksJFpoaCk7CiZmdW5jdGlvbl9lbmQoImdjbV9nbXVsdF80Yml0X21teCIpOwoMCiMgU3RyZWFtZWQgdmVyc2lvbiBwZXJmb3JtcyAyMCUgYmV0dGVyIG9uIFA0LCA3JSBvbiBPcHRlcm9uLAojIDEwJSBvbiBDb3JlMiBhbmQgUElJSS4uLgomZnVuY3Rpb25fYmVnaW4oImdjbV9naGFzaF80Yml0X21teCIpOwoJJm1vdgkoJFpoaCwmd3BhcmFtKDApKTsJIyBsb2FkIFhpCgkmbW92CSgkSHRibCwmd3BhcmFtKDEpKTsJIyBsb2FkIEh0YWJsZQoJJm1vdgkoJGlucCwmd3BhcmFtKDIpKTsJIyBsb2FkIGluCgkmbW92CSgkWmxoLCZ3cGFyYW0oMykpOwkjIGxvYWQgbGVuCgoJJmNhbGwJKCZsYWJlbCgicGljX3BvaW50IikpOwoJJnNldF9sYWJlbCgicGljX3BvaW50Iik7CgkmYmxpbmRwb3AoImVheCIpOwoJJmxlYQkoImVheCIsJkRXUCgmbGFiZWwoInJlbV80Yml0IikuIi0iLiZsYWJlbCgicGljX3BvaW50IiksImVheCIpKTsKCgkmYWRkCSgkWmxoLCRpbnApOwoJJm1vdgkoJndwYXJhbSgzKSwkWmxoKTsJIyBsZW4gdG8gcG9pbnQgYXQgdGhlIGVuZCBvZiBpbnB1dAoJJnN0YWNrX3B1c2goNCsxKTsJCSMgKzEgZm9yIHN0YWNrIGFsaWdubWVudAoKCSZtb3YJKCRabGwsJkRXUCgxMiwkWmhoKSk7CSMgbG9hZCBYaVsxNl0KCSZtb3YJKCRaaGwsJkRXUCg0LCRaaGgpKTsKCSZtb3YJKCRabGgsJkRXUCg4LCRaaGgpKTsKCSZtb3YJKCRaaGgsJkRXUCgwLCRaaGgpKTsKCSZqbXAJKCZsYWJlbCgibW14X291dGVyX2xvb3AiKSk7CgogICAgJnNldF9sYWJlbCgibW14X291dGVyX2xvb3AiLDE2KTsKCSZ4b3IJKCRabGwsJkRXUCgxMiwkaW5wKSk7CgkmeG9yCSgkWmhsLCZEV1AoNCwkaW5wKSk7CgkmeG9yCSgkWmxoLCZEV1AoOCwkaW5wKSk7CgkmeG9yCSgkWmhoLCZEV1AoMCwkaW5wKSk7CgkmbW92CSgmd3BhcmFtKDIpLCRpbnApOwoJJm1vdgkoJkRXUCgxMiwiZXNwIiksJFpsbCk7CgkmbW92CSgmRFdQKDQsImVzcCIpLCRaaGwpOwoJJm1vdgkoJkRXUCg4LCJlc3AiKSwkWmxoKTsKCSZtb3YJKCZEV1AoMCwiZXNwIiksJFpoaCk7CgoJJm1vdgkoJGlucCwiZXNwIik7Cgkmc2hyCSgkWmxsLDI0KTsKCgkmY2FsbAkoIl9tbXhfZ211bHRfNGJpdF9pbm5lciIpOwoKCSZtb3YJKCRpbnAsJndwYXJhbSgyKSk7CgkmbGVhCSgkaW5wLCZEV1AoMTYsJGlucCkpOwoJJmNtcAkoJGlucCwmd3BhcmFtKDMpKTsKCSZqYgkoJmxhYmVsKCJtbXhfb3V0ZXJfbG9vcCIpKTsKCgkmbW92CSgkaW5wLCZ3cGFyYW0oMCkpOwkjIGxvYWQgWGkKCSZlbW1zCSgpOwoJJm1vdgkoJkRXUCgxMiwkaW5wKSwkWmxsKTsKCSZtb3YJKCZEV1AoNCwkaW5wKSwkWmhsKTsKCSZtb3YJKCZEV1AoOCwkaW5wKSwkWmxoKTsKCSZtb3YJKCZEV1AoMCwkaW5wKSwkWmhoKTsKCgkmc3RhY2tfcG9wKDQrMSk7CiZmdW5jdGlvbl9lbmQoImdjbV9naGFzaF80Yml0X21teCIpOwoMCn19IGVsc2Uge3sJIyAiSnVuZSIgTU1YIHZlcnNpb24uLi4KCQkjIC4uLiBoYXMgc2xvd2VyICJBcHJpbCIgZ2NtX2dtdWx0XzRiaXRfbW14IHdpdGggZm9sZGVkCgkJIyBsb29wLiBUaGlzIGlzIGRvbmUgdG8gY29uc2VydmUgY29kZSBzaXplLi4uCiRTPTE2OwkJIyBzaGlmdCBmYWN0b3IgZm9yIHJlbV80Yml0CgpzdWIgbW14X2xvb3AoKSB7CiMgTU1YIHZlcnNpb24gcGVyZm9ybXMgMi44IHRpbWVzIGJldHRlciBvbiBQNCAoc2VlIGNvbW1lbnQgaW4gbm9uLU1NWAojIHJvdXRpbmUgZm9yIGZ1cnRoZXIgZGV0YWlscyksIDQwJSBiZXR0ZXIgb24gT3B0ZXJvbiBhbmQgQ29yZTIsIDUwJQojIGJldHRlciBvbiBQSUlJLi4uIEluIG90aGVyIHdvcmRzIGVmZm9ydCBpcyBjb25zaWRlcmVkIHRvIGJlIHdlbGwKIyBzcGVudC4uLgogICAgbXkgJGlucCA9IHNoaWZ0OwogICAgbXkgJHJlbV80Yml0ID0gc2hpZnQ7CiAgICBteSAkY250ID0gJFpoaDsKICAgIG15ICRuaGkgPSAkWmhsOwogICAgbXkgJG5sbyA9ICRabGg7CiAgICBteSAkcmVtID0gJFpsbDsKCiAgICBteSAoJFpsbywkWmhpKSA9ICgibW0wIiwibW0xIik7CiAgICBteSAkdG1wID0gIm1tMiI7CgoJJnhvcgkoJG5sbywkbmxvKTsJIyBhdm9pZCBwYXJ0aWFsIHJlZ2lzdGVyIHN0YWxscyBvbiBQSUlJCgkmbW92CSgkbmhpLCRabGwpOwoJJm1vdgkoJkxCKCRubG8pLCZMQigkbmhpKSk7CgkmbW92CSgkY250LDE0KTsKCSZzaGwJKCZMQigkbmxvKSw0KTsKCSZhbmQJKCRuaGksMHhmMCk7CgkmbW92cQkoJFpsbywmUVdQKDgsJEh0YmwsJG5sbykpOwoJJm1vdnEJKCRaaGksJlFXUCgwLCRIdGJsLCRubG8pKTsKCSZtb3ZkCSgkcmVtLCRabG8pOwoJJmptcAkoJmxhYmVsKCJtbXhfbG9vcCIpKTsKCiAgICAmc2V0X2xhYmVsKCJtbXhfbG9vcCIsMTYpOwoJJnBzcmxxCSgkWmxvLDQpOwoJJmFuZAkoJHJlbSwweGYpOwoJJm1vdnEJKCR0bXAsJFpoaSk7CgkmcHNybHEJKCRaaGksNCk7CgkmcHhvcgkoJFpsbywmUVdQKDgsJEh0YmwsJG5oaSkpOwoJJm1vdgkoJkxCKCRubG8pLCZCUCgwLCRpbnAsJGNudCkpOwoJJnBzbGxxCSgkdG1wLDYwKTsKCSZweG9yCSgkWmhpLCZRV1AoMCwkcmVtXzRiaXQsJHJlbSw4KSk7CgkmZGVjCSgkY250KTsKCSZtb3ZkCSgkcmVtLCRabG8pOwoJJnB4b3IJKCRaaGksJlFXUCgwLCRIdGJsLCRuaGkpKTsKCSZtb3YJKCRuaGksJG5sbyk7CgkmcHhvcgkoJFpsbywkdG1wKTsKCSZqcwkoJmxhYmVsKCJtbXhfYnJlYWsiKSk7CgoJJnNobAkoJkxCKCRubG8pLDQpOwoJJmFuZAkoJHJlbSwweGYpOwoJJnBzcmxxCSgkWmxvLDQpOwoJJmFuZAkoJG5oaSwweGYwKTsKCSZtb3ZxCSgkdG1wLCRaaGkpOwoJJnBzcmxxCSgkWmhpLDQpOwoJJnB4b3IJKCRabG8sJlFXUCg4LCRIdGJsLCRubG8pKTsKCSZwc2xscQkoJHRtcCw2MCk7CgkmcHhvcgkoJFpoaSwmUVdQKDAsJHJlbV80Yml0LCRyZW0sOCkpOwoJJm1vdmQJKCRyZW0sJFpsbyk7CgkmcHhvcgkoJFpoaSwmUVdQKDAsJEh0YmwsJG5sbykpOwoJJnB4b3IJKCRabG8sJHRtcCk7Cgkmam1wCSgmbGFiZWwoIm1teF9sb29wIikpOwoKICAgICZzZXRfbGFiZWwoIm1teF9icmVhayIsMTYpOwoJJnNobAkoJkxCKCRubG8pLDQpOwoJJmFuZAkoJHJlbSwweGYpOwoJJnBzcmxxCSgkWmxvLDQpOwoJJmFuZAkoJG5oaSwweGYwKTsKCSZtb3ZxCSgkdG1wLCRaaGkpOwoJJnBzcmxxCSgkWmhpLDQpOwoJJnB4b3IJKCRabG8sJlFXUCg4LCRIdGJsLCRubG8pKTsKCSZwc2xscQkoJHRtcCw2MCk7CgkmcHhvcgkoJFpoaSwmUVdQKDAsJHJlbV80Yml0LCRyZW0sOCkpOwoJJm1vdmQJKCRyZW0sJFpsbyk7CgkmcHhvcgkoJFpoaSwmUVdQKDAsJEh0YmwsJG5sbykpOwoJJnB4b3IJKCRabG8sJHRtcCk7CgoJJnBzcmxxCSgkWmxvLDQpOwoJJmFuZAkoJHJlbSwweGYpOwoJJm1vdnEJKCR0bXAsJFpoaSk7CgkmcHNybHEJKCRaaGksNCk7CgkmcHhvcgkoJFpsbywmUVdQKDgsJEh0YmwsJG5oaSkpOwoJJnBzbGxxCSgkdG1wLDYwKTsKCSZweG9yCSgkWmhpLCZRV1AoMCwkcmVtXzRiaXQsJHJlbSw4KSk7CgkmbW92ZAkoJHJlbSwkWmxvKTsKCSZweG9yCSgkWmhpLCZRV1AoMCwkSHRibCwkbmhpKSk7CgkmcHhvcgkoJFpsbywkdG1wKTsKCgkmcHNybHEJKCRabG8sMzIpOwkjIGxvd2VyIHBhcnQgb2YgWmxvIGlzIGFscmVhZHkgdGhlcmUKCSZtb3ZkCSgkWmhsLCRaaGkpOwoJJnBzcmxxCSgkWmhpLDMyKTsKCSZtb3ZkCSgkWmxoLCRabG8pOwoJJm1vdmQJKCRaaGgsJFpoaSk7CgoJJmJzd2FwCSgkWmxsKTsKCSZic3dhcAkoJFpobCk7CgkmYnN3YXAJKCRabGgpOwoJJmJzd2FwCSgkWmhoKTsKfQoKJmZ1bmN0aW9uX2JlZ2luKCJnY21fZ211bHRfNGJpdF9tbXgiKTsKCSZtb3YJKCRpbnAsJndwYXJhbSgwKSk7CSMgbG9hZCBYaQoJJm1vdgkoJEh0YmwsJndwYXJhbSgxKSk7CSMgbG9hZCBIdGFibGUKCgkmY2FsbAkoJmxhYmVsKCJwaWNfcG9pbnQiKSk7Cgkmc2V0X2xhYmVsKCJwaWNfcG9pbnQiKTsKCSZibGluZHBvcCgiZWF4Iik7CgkmbGVhCSgiZWF4IiwmRFdQKCZsYWJlbCgicmVtXzRiaXQiKS4iLSIuJmxhYmVsKCJwaWNfcG9pbnQiKSwiZWF4IikpOwoKCSZtb3Z6CSgkWmxsLCZCUCgxNSwkaW5wKSk7CgoJJm1teF9sb29wKCRpbnAsImVheCIpOwoKCSZlbW1zCSgpOwoJJm1vdgkoJkRXUCgxMiwkaW5wKSwkWmxsKTsKCSZtb3YJKCZEV1AoNCwkaW5wKSwkWmhsKTsKCSZtb3YJKCZEV1AoOCwkaW5wKSwkWmxoKTsKCSZtb3YJKCZEV1AoMCwkaW5wKSwkWmhoKTsKJmZ1bmN0aW9uX2VuZCgiZ2NtX2dtdWx0XzRiaXRfbW14Iik7CgwKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIEJlbG93IHN1YnJvdXRpbmUgaXMgIjUyOEIiIHZhcmlhbnQgb2YgIjQtYml0IiBHQ00gR0hBU0ggZnVuY3Rpb24KIyAoc2VlIGdjbTEyOC5jIGZvciBkZXRhaWxzKS4gSXQgcHJvdmlkZXMgZnVydGhlciAyMC00MCUgcGVyZm9ybWFuY2UKIyBpbXByb3ZlbWVudCBvdmVyIGFib3ZlIG1lbnRpb25lZCAiTWF5IiB2ZXJzaW9uLgoKJnN0YXRpY19sYWJlbCgicmVtXzhiaXQiKTsKCiZmdW5jdGlvbl9iZWdpbigiZ2NtX2doYXNoXzRiaXRfbW14Iik7CnsgbXkgKCRabG8sJFpoaSkgPSAoIm1tNyIsIm1tNiIpOwogIG15ICRyZW1fOGJpdCA9ICJlc2kiOwogIG15ICRIdGJsID0gImVieCI7CgogICAgIyBwYXJhbWV0ZXIgYmxvY2sKICAgICZtb3YJKCJlYXgiLCZ3cGFyYW0oMCkpOwkJIyBYaQogICAgJm1vdgkoImVieCIsJndwYXJhbSgxKSk7CQkjIEh0YWJsZQogICAgJm1vdgkoImVjeCIsJndwYXJhbSgyKSk7CQkjIGlucAogICAgJm1vdgkoImVkeCIsJndwYXJhbSgzKSk7CQkjIGxlbgogICAgJm1vdgkoImVicCIsImVzcCIpOwkJCSMgb3JpZ2luYWwgJWVzcAogICAgJmNhbGwJKCZsYWJlbCgicGljX3BvaW50IikpOwogICAgJnNldF9sYWJlbAkoInBpY19wb2ludCIpOwogICAgJmJsaW5kcG9wCSgkcmVtXzhiaXQpOwogICAgJmxlYQkoJHJlbV84Yml0LCZEV1AoJmxhYmVsKCJyZW1fOGJpdCIpLiItIi4mbGFiZWwoInBpY19wb2ludCIpLCRyZW1fOGJpdCkpOwoKICAgICZzdWIJKCJlc3AiLDUxMisxNisxNik7CQkjIGFsbG9jYXRlIHN0YWNrIGZyYW1lLi4uCiAgICAmYW5kCSgiZXNwIiwtNjQpOwkJCSMgLi4uYW5kIGFsaWduIGl0CiAgICAmc3ViCSgiZXNwIiwxNik7CQkJIyBwbGFjZSBmb3IgKHU4KShIW108PDQpCgogICAgJmFkZAkoImVkeCIsImVjeCIpOwkJCSMgcG9pbnRlciB0byB0aGUgZW5kIG9mIGlucHV0CiAgICAmbW92CSgmRFdQKDUyOCsxNiswLCJlc3AiKSwiZWF4Iik7CSMgc2F2ZSBYaQogICAgJm1vdgkoJkRXUCg1MjgrMTYrOCwiZXNwIiksImVkeCIpOwkjIHNhdmUgaW5wK2xlbgogICAgJm1vdgkoJkRXUCg1MjgrMTYrMTIsImVzcCIpLCJlYnAiKTsJIyBzYXZlIG9yaWdpbmFsICVlc3AKCiAgICB7IG15IEBsbyAgPSAoIm1tMCIsIm1tMSIsIm1tMiIpOwogICAgICBteSBAaGkgID0gKCJtbTMiLCJtbTQiLCJtbTUiKTsKICAgICAgbXkgQHRtcCA9ICgibW02IiwibW03Iik7CiAgICAgIG15ICgkb2ZmMSwkb2ZmMiwkaSkgPSAoMCwwLCk7CgogICAgICAmYWRkCSgkSHRibCwxMjgpOwkJCSMgb3B0aW1pemUgZm9yIHNpemUKICAgICAgJmxlYQkoImVkaSIsJkRXUCgxNisxMjgsImVzcCIpKTsKICAgICAgJmxlYQkoImVicCIsJkRXUCgxNisyNTYrMTI4LCJlc3AiKSk7CgogICAgICAjIGRlY29tcG9zZSBIdGFibGUgKGxvdyBhbmQgaGlnaCBwYXJ0cyBhcmUga2VwdCBzZXBhcmF0ZWx5KSwKICAgICAgIyBnZW5lcmF0ZSBIdGFibGVbXT4+NCwgKHU4KShIdGFibGVbXTw8NCksIHNhdmUgdG8gc3RhY2suLi4KICAgICAgZm9yICgkaT0wOyRpPDE4OyRpKyspIHsKCgkmbW92CSgiZWR4IiwmRFdQKDE2KiRpKzgtMTI4LCRIdGJsKSkJCWlmICgkaTwxNik7CgkmbW92cQkoJGxvWzBdLCZRV1AoMTYqJGkrOC0xMjgsJEh0YmwpKQlpZiAoJGk8MTYpOwoJJnBzbGxxCSgkdG1wWzFdLDYwKQkJCQlpZiAoJGk+MSk7CgkmbW92cQkoJGhpWzBdLCZRV1AoMTYqJGkrMC0xMjgsJEh0YmwpKQlpZiAoJGk8MTYpOwoJJnBvcgkoJGxvWzJdLCR0bXBbMV0pCQkJaWYgKCRpPjEpOwoJJm1vdnEJKCZRV1AoJG9mZjEtMTI4LCJlZGkiKSwkbG9bMV0pCQlpZiAoJGk+MCAmJiAkaTwxNyk7CgkmcHNybHEJKCRsb1sxXSw0KQkJCQlpZiAoJGk+MCAmJiAkaTwxNyk7CgkmbW92cQkoJlFXUCgkb2ZmMSwiZWRpIiksJGhpWzFdKQkJaWYgKCRpPjAgJiYgJGk8MTcpOwoJJm1vdnEJKCR0bXBbMF0sJGhpWzFdKQkJCWlmICgkaT4wICYmICRpPDE3KTsKCSZtb3ZxCSgmUVdQKCRvZmYyLTEyOCwiZWJwIiksJGxvWzJdKQkJaWYgKCRpPjEpOwoJJnBzcmxxCSgkaGlbMV0sNCkJCQkJaWYgKCRpPjAgJiYgJGk8MTcpOwoJJm1vdnEJKCZRV1AoJG9mZjIsImVicCIpLCRoaVsyXSkJCWlmICgkaT4xKTsKCSZzaGwJKCJlZHgiLDQpCQkJCWlmICgkaTwxNik7CgkmbW92CSgmQlAoJGksImVzcCIpLCZMQigiZWR4IikpCQlpZiAoJGk8MTYpOwoKCXVuc2hpZnQJKEBsbyxwb3AoQGxvKSk7CQkJIyAicm90YXRlIiByZWdpc3RlcnMKCXVuc2hpZnQJKEBoaSxwb3AoQGhpKSk7Cgl1bnNoaWZ0CShAdG1wLHBvcChAdG1wKSk7Cgkkb2ZmMSArPSA4CWlmICgkaT4wKTsKCSRvZmYyICs9IDgJaWYgKCRpPjEpOwogICAgICB9CiAgICB9CgogICAgJm1vdnEJKCRaaGksJlFXUCgwLCJlYXgiKSk7CiAgICAmbW92CSgiZWJ4IiwmRFdQKDgsImVheCIpKTsKICAgICZtb3YJKCJlZHgiLCZEV1AoMTIsImVheCIpKTsJCSMgbG9hZCBYaQoKJnNldF9sYWJlbCgib3V0ZXIiLDE2KTsKICB7IG15ICRubG8gPSAiZWF4IjsKICAgIG15ICRkYXQgPSAiZWR4IjsKICAgIG15IEBuaGkgPSAoImVkaSIsImVicCIpOwogICAgbXkgQHJlbSA9ICgiZWJ4IiwiZWN4Iik7CiAgICBteSBAcmVkID0gKCJtbTAiLCJtbTEiLCJtbTIiKTsKICAgIG15ICR0bXAgPSAibW0zIjsKCiAgICAmeG9yCSgkZGF0LCZEV1AoMTIsImVjeCIpKTsJCSMgbWVyZ2UgaW5wdXQgZGF0YQogICAgJnhvcgkoImVieCIsJkRXUCg4LCJlY3giKSk7CiAgICAmcHhvcgkoJFpoaSwmUVdQKDAsImVjeCIpKTsKICAgICZsZWEJKCJlY3giLCZEV1AoMTYsImVjeCIpKTsJCSMgaW5wKz0xNgogICAgIyZtb3YJKCZEV1AoNTI4KzEyLCJlc3AiKSwkZGF0KTsJIyBzYXZlIGlucF5YaQogICAgJm1vdgkoJkRXUCg1MjgrOCwiZXNwIiksImVieCIpOwogICAgJm1vdnEJKCZRV1AoNTI4KzAsImVzcCIpLCRaaGkpOwogICAgJm1vdgkoJkRXUCg1MjgrMTYrNCwiZXNwIiksImVjeCIpOwkjIHNhdmUgaW5wCgogICAgJnhvcgkoJG5sbywkbmxvKTsKICAgICZyb2wJKCRkYXQsOCk7CiAgICAmbW92CSgmTEIoJG5sbyksJkxCKCRkYXQpKTsKICAgICZtb3YJKCRuaGlbMV0sJG5sbyk7CiAgICAmYW5kCSgmTEIoJG5sbyksMHgwZik7CiAgICAmc2hyCSgkbmhpWzFdLDQpOwogICAgJnB4b3IJKCRyZWRbMF0sJHJlZFswXSk7CiAgICAmcm9sCSgkZGF0LDgpOwkJCSMgbmV4dCBieXRlCiAgICAmcHhvcgkoJHJlZFsxXSwkcmVkWzFdKTsKICAgICZweG9yCSgkcmVkWzJdLCRyZWRbMl0pOwoKICAgICMgSnVzdCBsaWtlIGluICJNYXkiIHZlcnNvbiBtb2R1bG8tc2NoZWR1bGUgZm9yIGNyaXRpY2FsIHBhdGggaW4KICAgICMgJ1ouaGkgXj0gcmVtXzhiaXRbWi5sbyYweGZmXigodTgpSFtuaGldPDw0KV08PDQ4Jy4gRmluYWwgJ3B4b3InCiAgICAjIGlzIHNjaGVkdWxlZCBzbyBsYXRlIHRoYXQgcmVtXzhiaXRbXSBoYXMgdG8gYmUgc2hpZnRlZCAqcmlnaHQqCiAgICAjIGJ5IDE2LCB3aGljaCBpcyB3aHkgbGFzdCBhcmd1bWVudCB0byBwaW5zcncgaXMgMiwgd2hpY2gKICAgICMgY29ycmVzcG9uZHMgdG8gPDwzMj08PDQ4Pj4xNi4uLgogICAgZm9yICgkaj0xMSwkaT0wOyRpPDE1OyRpKyspIHsKCiAgICAgIGlmICgkaT4wKSB7CgkmcHhvcgkoJFpsbywmUVdQKDE2LCJlc3AiLCRubG8sOCkpOwkJIyBaXj1IW25sb10KCSZyb2wJKCRkYXQsOCk7CQkJCSMgbmV4dCBieXRlCgkmcHhvcgkoJFpoaSwmUVdQKDE2KzEyOCwiZXNwIiwkbmxvLDgpKTsKCgkmcHhvcgkoJFpsbywkdG1wKTsKCSZweG9yCSgkWmhpLCZRV1AoMTYrMjU2KzEyOCwiZXNwIiwkbmhpWzBdLDgpKTsKCSZ4b3IJKCZMQigkcmVtWzFdKSwmQlAoMCwiZXNwIiwkbmhpWzBdKSk7CSMgcmVtXihIW25oaV08PDQpCiAgICAgIH0gZWxzZSB7CgkmbW92cQkoJFpsbywmUVdQKDE2LCJlc3AiLCRubG8sOCkpOwoJJm1vdnEJKCRaaGksJlFXUCgxNisxMjgsImVzcCIsJG5sbyw4KSk7CiAgICAgIH0KCgkmbW92CSgmTEIoJG5sbyksJkxCKCRkYXQpKTsKCSZtb3YJKCRkYXQsJkRXUCg1MjgrJGosImVzcCIpKQkJaWYgKC0tJGolND09MCk7CgoJJm1vdmQJKCRyZW1bMF0sJFpsbyk7CgkmbW92egkoJHJlbVsxXSwmTEIoJHJlbVsxXSkpCQkJaWYgKCRpPjApOwoJJnBzcmxxCSgkWmxvLDgpOwkJCQkjIFo+Pj04CgoJJm1vdnEJKCR0bXAsJFpoaSk7CgkmbW92CSgkbmhpWzBdLCRubG8pOwoJJnBzcmxxCSgkWmhpLDgpOwoKCSZweG9yCSgkWmxvLCZRV1AoMTYrMjU2KzAsImVzcCIsJG5oaVsxXSw4KSk7CSMgWl49SFtuaGldPj40CgkmYW5kCSgmTEIoJG5sbyksMHgwZik7CgkmcHNsbHEJKCR0bXAsNTYpOwoKCSZweG9yCSgkWmhpLCRyZWRbMV0pCQkJCWlmICgkaT4xKTsKCSZzaHIJKCRuaGlbMF0sNCk7CgkmcGluc3J3CSgkcmVkWzBdLCZXUCgwLCRyZW1fOGJpdCwkcmVtWzFdLDIpLDIpCWlmICgkaT4wKTsKCgl1bnNoaWZ0CShAcmVkLHBvcChAcmVkKSk7CQkJIyAicm90YXRlIiByZWdpc3RlcnMKCXVuc2hpZnQJKEByZW0scG9wKEByZW0pKTsKCXVuc2hpZnQJKEBuaGkscG9wKEBuaGkpKTsKICAgIH0KCiAgICAmcHhvcgkoJFpsbywmUVdQKDE2LCJlc3AiLCRubG8sOCkpOwkJIyBaXj1IW25sb10KICAgICZweG9yCSgkWmhpLCZRV1AoMTYrMTI4LCJlc3AiLCRubG8sOCkpOwogICAgJnhvcgkoJkxCKCRyZW1bMV0pLCZCUCgwLCJlc3AiLCRuaGlbMF0pKTsJIyByZW1eKEhbbmhpXTw8NCkKCiAgICAmcHhvcgkoJFpsbywkdG1wKTsKICAgICZweG9yCSgkWmhpLCZRV1AoMTYrMjU2KzEyOCwiZXNwIiwkbmhpWzBdLDgpKTsKICAgICZtb3Z6CSgkcmVtWzFdLCZMQigkcmVtWzFdKSk7CgogICAgJnB4b3IJKCRyZWRbMl0sJHJlZFsyXSk7CQkJIyBjbGVhciAybmQgd29yZAogICAgJnBzbGxxCSgkcmVkWzFdLDQpOwoKICAgICZtb3ZkCSgkcmVtWzBdLCRabG8pOwogICAgJnBzcmxxCSgkWmxvLDQpOwkJCQkjIFo+Pj00CgogICAgJm1vdnEJKCR0bXAsJFpoaSk7CiAgICAmcHNybHEJKCRaaGksNCk7CiAgICAmc2hsCSgkcmVtWzBdLDQpOwkJCQkjIHJlbTw8NAoKICAgICZweG9yCSgkWmxvLCZRV1AoMTYsImVzcCIsJG5oaVsxXSw4KSk7CSMgWl49SFtuaGldCiAgICAmcHNsbHEJKCR0bXAsNjApOwogICAgJm1vdnoJKCRyZW1bMF0sJkxCKCRyZW1bMF0pKTsKCiAgICAmcHhvcgkoJFpsbywkdG1wKTsKICAgICZweG9yCSgkWmhpLCZRV1AoMTYrMTI4LCJlc3AiLCRuaGlbMV0sOCkpOwoKICAgICZwaW5zcncJKCRyZWRbMF0sJldQKDAsJHJlbV84Yml0LCRyZW1bMV0sMiksMik7CiAgICAmcHhvcgkoJFpoaSwkcmVkWzFdKTsKCiAgICAmbW92ZAkoJGRhdCwkWmxvKTsKICAgICZwaW5zcncJKCRyZWRbMl0sJldQKDAsJHJlbV84Yml0LCRyZW1bMF0sMiksMyk7CSMgbGFzdCBpcyA8PDQ4CgogICAgJnBzbGxxCSgkcmVkWzBdLDEyKTsJCQkJIyBjb3JyZWN0IGJ5IDw8MTY+PjQKICAgICZweG9yCSgkWmhpLCRyZWRbMF0pOwogICAgJnBzcmxxCSgkWmxvLDMyKTsKICAgICZweG9yCSgkWmhpLCRyZWRbMl0pOwoKICAgICZtb3YJKCJlY3giLCZEV1AoNTI4KzE2KzQsImVzcCIpKTsJIyByZXN0b3JlIGlucAogICAgJm1vdmQJKCJlYngiLCRabG8pOwogICAgJm1vdnEJKCR0bXAsJFpoaSk7CQkJIyAwMTIzNDU2NwogICAgJnBzbGx3CSgkWmhpLDgpOwkJCSMgMS4zLjUuNy4KICAgICZwc3JsdwkoJHRtcCw4KTsJCQkjIC4wLjIuNC42CiAgICAmcG9yCSgkWmhpLCR0bXApOwkJCSMgMTAzMjU0NzYKICAgICZic3dhcAkoJGRhdCk7CiAgICAmcHNodWZ3CSgkWmhpLCRaaGksMGIwMDAxMTAxMSk7CQkjIDc2NTQzMjEwCiAgICAmYnN3YXAJKCJlYngiKTsKICAgIAogICAgJmNtcAkoImVjeCIsJkRXUCg1MjgrMTYrOCwiZXNwIikpOwkjIGFyZSB3ZSBkb25lPwogICAgJmpuZQkoJmxhYmVsKCJvdXRlciIpKTsKICB9CgogICAgJm1vdgkoImVheCIsJkRXUCg1MjgrMTYrMCwiZXNwIikpOwkjIHJlc3RvcmUgWGkKICAgICZtb3YJKCZEV1AoMTIsImVheCIpLCJlZHgiKTsKICAgICZtb3YJKCZEV1AoOCwiZWF4IiksImVieCIpOwogICAgJm1vdnEJKCZRV1AoMCwiZWF4IiksJFpoaSk7CgogICAgJm1vdgkoImVzcCIsJkRXUCg1MjgrMTYrMTIsImVzcCIpKTsJIyByZXN0b3JlIG9yaWdpbmFsICVlc3AKICAgICZlbW1zCSgpOwp9CiZmdW5jdGlvbl9lbmQoImdjbV9naGFzaF80Yml0X21teCIpOwp9fQoMCmlmICgkc3NlMikge3sKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFBDTE1VTFFEUSB2ZXJzaW9uLgoKJFhpcD0iZWF4IjsKJEh0Ymw9ImVkeCI7CiRjb25zdD0iZWN4IjsKJGlucD0iZXNpIjsKJGxlbj0iZWJ4IjsKCigkWGksJFhoaSk9KCJ4bW0wIiwieG1tMSIpOwkkSGtleT0ieG1tMiI7CigkVDEsJFQyLCRUMyk9KCJ4bW0zIiwieG1tNCIsInhtbTUiKTsKKCRYbiwkWGhuKT0oInhtbTYiLCJ4bW03Iik7Cgomc3RhdGljX2xhYmVsKCJic3dhcCIpOwoKc3ViIGNsbXVsNjR4NjRfVDIgewkjIG1pbmltYWwgInJlZ2lzdGVyIiBwcmVzc3VyZQpteSAoJFhoaSwkWGksJEhrZXksJEhLKT1AXzsKCgkmbW92ZHFhCQkoJFhoaSwkWGkpOwkJIwoJJnBzaHVmZAkJKCRUMSwkWGksMGIwMTAwMTExMCk7CgkmcHNodWZkCQkoJFQyLCRIa2V5LDBiMDEwMDExMTApCWlmICghZGVmaW5lZCgkSEspKTsKCSZweG9yCQkoJFQxLCRYaSk7CQkjCgkmcHhvcgkJKCRUMiwkSGtleSkJCWlmICghZGVmaW5lZCgkSEspKTsKCQkJJEhLPSRUMgkJCWlmICghZGVmaW5lZCgkSEspKTsKCgkmcGNsbXVscWRxCSgkWGksJEhrZXksMHgwMCk7CSMjIyMjIyMKCSZwY2xtdWxxZHEJKCRYaGksJEhrZXksMHgxMSk7CSMjIyMjIyMKCSZwY2xtdWxxZHEJKCRUMSwkSEssMHgwMCk7CQkjIyMjIyMjCgkmeG9ycHMJCSgkVDEsJFhpKTsJCSMKCSZ4b3JwcwkJKCRUMSwkWGhpKTsJCSMKCgkmbW92ZHFhCQkoJFQyLCRUMSk7CQkjCgkmcHNybGRxCQkoJFQxLDgpOwoJJnBzbGxkcQkJKCRUMiw4KTsJCSMKCSZweG9yCQkoJFhoaSwkVDEpOwoJJnB4b3IJCSgkWGksJFQyKTsJCSMKfQoKc3ViIGNsbXVsNjR4NjRfVDMgewojIEV2ZW4gdGhvdWdoIHRoaXMgc3Vicm91dGluZSBvZmZlcnMgdmlzdWFsbHkgYmV0dGVyIElMUCwgaXQKIyB3YXMgZW1waXJpY2FsbHkgZm91bmQgdG8gYmUgYSB0YWQgc2xvd2VyIHRoYW4gYWJvdmUgdmVyc2lvbi4KIyBBdCBsZWFzdCBpbiBnY21fZ2hhc2hfY2xtdWwgY29udGV4dC4gQnV0IGl0J3MganVzdCBhcyB3ZWxsLAojIGJlY2F1c2UgbG9vcCBtb2R1bG8tc2NoZWR1bGluZyBpcyBwb3NzaWJsZSBvbmx5IHRoYW5rcyB0bwojIG1pbmltaXplZCAicmVnaXN0ZXIiIHByZXNzdXJlLi4uCm15ICgkWGhpLCRYaSwkSGtleSk9QF87CgoJJm1vdmRxYQkJKCRUMSwkWGkpOwkJIwoJJm1vdmRxYQkJKCRYaGksJFhpKTsKCSZwY2xtdWxxZHEJKCRYaSwkSGtleSwweDAwKTsJIyMjIyMjIwoJJnBjbG11bHFkcQkoJFhoaSwkSGtleSwweDExKTsJIyMjIyMjIwoJJnBzaHVmZAkJKCRUMiwkVDEsMGIwMTAwMTExMCk7CSMKCSZwc2h1ZmQJCSgkVDMsJEhrZXksMGIwMTAwMTExMCk7CgkmcHhvcgkJKCRUMiwkVDEpOwkJIwoJJnB4b3IJCSgkVDMsJEhrZXkpOwoJJnBjbG11bHFkcQkoJFQyLCRUMywweDAwKTsJCSMjIyMjIyMKCSZweG9yCQkoJFQyLCRYaSk7CQkjCgkmcHhvcgkJKCRUMiwkWGhpKTsJCSMKCgkmbW92ZHFhCQkoJFQzLCRUMik7CQkjCgkmcHNybGRxCQkoJFQyLDgpOwoJJnBzbGxkcQkJKCRUMyw4KTsJCSMKCSZweG9yCQkoJFhoaSwkVDIpOwoJJnB4b3IJCSgkWGksJFQzKTsJCSMKfQoMCmlmICgxKSB7CQkjIEFsZ29yaXRobSA5IHdpdGggPDwxIHR3aXN0LgoJCQkjIFJlZHVjdGlvbiBpcyBzaG9ydGVyIGFuZCB1c2VzIG9ubHkgdHdvCgkJCSMgdGVtcG9yYXJ5IHJlZ2lzdGVycywgd2hpY2ggbWFrZXMgaXQgYmV0dGVyCgkJCSMgY2FuZGlkYXRlIGZvciBpbnRlcmxlYXZpbmcgd2l0aCA2NHg2NAoJCQkjIG11bHRpcGxpY2F0aW9uLiBQcmUtbW9kdWxvLXNjaGVkdWxlZCBsb29wCgkJCSMgd2FzIGZvdW5kIHRvIGJlIH4yMCUgZmFzdGVyIHRoYW4gQWxnb3JpdGhtIDUKCQkJIyBiZWxvdy4gQWxnb3JpdGhtIDkgd2FzIHRoZXJlZm9yZSBjaG9zZW4gZm9yCgkJCSMgZnVydGhlciBvcHRpbWl6YXRpb24uLi4KCnN1YiByZWR1Y3Rpb25fYWxnOSB7CSMgMTcvMTEgdGltZXMgZmFzdGVyIHRoYW4gSW50ZWwgdmVyc2lvbgpteSAoJFhoaSwkWGkpID0gQF87CgoJIyAxc3QgcGhhc2UKCSZtb3ZkcWEJCSgkVDIsJFhpKTsJCSMKCSZtb3ZkcWEJCSgkVDEsJFhpKTsKCSZwc2xscQkJKCRYaSw1KTsKCSZweG9yCQkoJFQxLCRYaSk7CQkjCgkmcHNsbHEJCSgkWGksMSk7CgkmcHhvcgkJKCRYaSwkVDEpOwkJIwoJJnBzbGxxCQkoJFhpLDU3KTsJCSMKCSZtb3ZkcWEJCSgkVDEsJFhpKTsJCSMKCSZwc2xsZHEJCSgkWGksOCk7CgkmcHNybGRxCQkoJFQxLDgpOwkJIwkKCSZweG9yCQkoJFhpLCRUMik7CgkmcHhvcgkJKCRYaGksJFQxKTsJCSMKCgkjIDJuZCBwaGFzZQoJJm1vdmRxYQkJKCRUMiwkWGkpOwoJJnBzcmxxCQkoJFhpLDEpOwoJJnB4b3IJCSgkWGhpLCRUMik7CQkjCgkmcHhvcgkJKCRUMiwkWGkpOwoJJnBzcmxxCQkoJFhpLDUpOwoJJnB4b3IJCSgkWGksJFQyKTsJCSMKCSZwc3JscQkJKCRYaSwxKTsJCSMKCSZweG9yCQkoJFhpLCRYaGkpCQkjCn0KCiZmdW5jdGlvbl9iZWdpbl9CKCJnY21faW5pdF9jbG11bCIpOwoJJm1vdgkJKCRIdGJsLCZ3cGFyYW0oMCkpOwoJJm1vdgkJKCRYaXAsJndwYXJhbSgxKSk7CgoJJmNhbGwJCSgmbGFiZWwoInBpYyIpKTsKJnNldF9sYWJlbCgicGljIik7CgkmYmxpbmRwb3AJKCRjb25zdCk7CgkmbGVhCQkoJGNvbnN0LCZEV1AoJmxhYmVsKCJic3dhcCIpLiItIi4mbGFiZWwoInBpYyIpLCRjb25zdCkpOwoKCSZtb3ZkcXUJCSgkSGtleSwmUVdQKDAsJFhpcCkpOwoJJnBzaHVmZAkJKCRIa2V5LCRIa2V5LDBiMDEwMDExMTApOyMgZHdvcmQgc3dhcAoKCSMgPDwxIHR3aXN0CgkmcHNodWZkCQkoJFQyLCRIa2V5LDBiMTExMTExMTEpOwkjIGJyb2FkY2FzdCB1cHBlcm1vc3QgZHdvcmQKCSZtb3ZkcWEJCSgkVDEsJEhrZXkpOwoJJnBzbGxxCQkoJEhrZXksMSk7CgkmcHhvcgkJKCRUMywkVDMpOwkJIwoJJnBzcmxxCQkoJFQxLDYzKTsKCSZwY21wZ3RkCSgkVDMsJFQyKTsJCSMgYnJvYWRjYXN0IGNhcnJ5IGJpdAoJJnBzbGxkcQkJKCRUMSw4KTsKCSZwb3IJCSgkSGtleSwkVDEpOwkJIyBIPDw9MQoKCSMgbWFnaWMgcmVkdWN0aW9uCgkmcGFuZAkJKCRUMywmUVdQKDE2LCRjb25zdCkpOwkjIDB4MWMyX3BvbHlub21pYWwKCSZweG9yCQkoJEhrZXksJFQzKTsJCSMgaWYoY2FycnkpIEhePTB4MWMyX3BvbHlub21pYWwKCgkjIGNhbGN1bGF0ZSBIXjIKCSZtb3ZkcWEJCSgkWGksJEhrZXkpOwoJJmNsbXVsNjR4NjRfVDIJKCRYaGksJFhpLCRIa2V5KTsKCSZyZWR1Y3Rpb25fYWxnOQkoJFhoaSwkWGkpOwoKCSZwc2h1ZmQJCSgkVDEsJEhrZXksMGIwMTAwMTExMCk7CgkmcHNodWZkCQkoJFQyLCRYaSwwYjAxMDAxMTEwKTsKCSZweG9yCQkoJFQxLCRIa2V5KTsJCSMgS2FyYXRzdWJhIHByZS1wcm9jZXNzaW5nCgkmbW92ZHF1CQkoJlFXUCgwLCRIdGJsKSwkSGtleSk7CSMgc2F2ZSBICgkmcHhvcgkJKCRUMiwkWGkpOwkJIyBLYXJhdHN1YmEgcHJlLXByb2Nlc3NpbmcKCSZtb3ZkcXUJCSgmUVdQKDE2LCRIdGJsKSwkWGkpOwkjIHNhdmUgSF4yCgkmcGFsaWducgkoJFQyLCRUMSw4KTsJCSMgbG93IHBhcnQgaXMgSC5sb15ILmhpCgkmbW92ZHF1CQkoJlFXUCgzMiwkSHRibCksJFQyKTsJIyBzYXZlIEthcmF0c3ViYSAic2FsdCIKCgkmcmV0CQkoKTsKJmZ1bmN0aW9uX2VuZF9CKCJnY21faW5pdF9jbG11bCIpOwoKJmZ1bmN0aW9uX2JlZ2luX0IoImdjbV9nbXVsdF9jbG11bCIpOwoJJm1vdgkJKCRYaXAsJndwYXJhbSgwKSk7CgkmbW92CQkoJEh0YmwsJndwYXJhbSgxKSk7CgoJJmNhbGwJCSgmbGFiZWwoInBpYyIpKTsKJnNldF9sYWJlbCgicGljIik7CgkmYmxpbmRwb3AJKCRjb25zdCk7CgkmbGVhCQkoJGNvbnN0LCZEV1AoJmxhYmVsKCJic3dhcCIpLiItIi4mbGFiZWwoInBpYyIpLCRjb25zdCkpOwoKCSZtb3ZkcXUJCSgkWGksJlFXUCgwLCRYaXApKTsKCSZtb3ZkcWEJCSgkVDMsJlFXUCgwLCRjb25zdCkpOwoJJm1vdnVwcwkJKCRIa2V5LCZRV1AoMCwkSHRibCkpOwoJJnBzaHVmYgkJKCRYaSwkVDMpOwoJJm1vdnVwcwkJKCRUMiwmUVdQKDMyLCRIdGJsKSk7CgoJJmNsbXVsNjR4NjRfVDIJKCRYaGksJFhpLCRIa2V5LCRUMik7CgkmcmVkdWN0aW9uX2FsZzkJKCRYaGksJFhpKTsKCgkmcHNodWZiCQkoJFhpLCRUMyk7CgkmbW92ZHF1CQkoJlFXUCgwLCRYaXApLCRYaSk7CgoJJnJldAkoKTsKJmZ1bmN0aW9uX2VuZF9CKCJnY21fZ211bHRfY2xtdWwiKTsKCiZmdW5jdGlvbl9iZWdpbigiZ2NtX2doYXNoX2NsbXVsIik7CgkmbW92CQkoJFhpcCwmd3BhcmFtKDApKTsKCSZtb3YJCSgkSHRibCwmd3BhcmFtKDEpKTsKCSZtb3YJCSgkaW5wLCZ3cGFyYW0oMikpOwoJJm1vdgkJKCRsZW4sJndwYXJhbSgzKSk7CgoJJmNhbGwJCSgmbGFiZWwoInBpYyIpKTsKJnNldF9sYWJlbCgicGljIik7CgkmYmxpbmRwb3AJKCRjb25zdCk7CgkmbGVhCQkoJGNvbnN0LCZEV1AoJmxhYmVsKCJic3dhcCIpLiItIi4mbGFiZWwoInBpYyIpLCRjb25zdCkpOwoKCSZtb3ZkcXUJCSgkWGksJlFXUCgwLCRYaXApKTsKCSZtb3ZkcWEJCSgkVDMsJlFXUCgwLCRjb25zdCkpOwoJJm1vdmRxdQkJKCRIa2V5LCZRV1AoMCwkSHRibCkpOwoJJnBzaHVmYgkJKCRYaSwkVDMpOwoKCSZzdWIJCSgkbGVuLDB4MTApOwoJJmp6CQkoJmxhYmVsKCJvZGRfdGFpbCIpKTsKCgkjIyMjIyMjCgkjIFhpKzIgPVtIKihJaSsxICsgWGkrMSldIG1vZCBQID0KCSMJWyhIKklpKzEpICsgKEgqWGkrMSldIG1vZCBQID0KCSMJWyhIKklpKzEpICsgSF4yKihJaStYaSldIG1vZCBQCgkjCgkmbW92ZHF1CQkoJFQxLCZRV1AoMCwkaW5wKSk7CSMgSWkKCSZtb3ZkcXUJCSgkWG4sJlFXUCgxNiwkaW5wKSk7CSMgSWkrMQoJJnBzaHVmYgkJKCRUMSwkVDMpOwoJJnBzaHVmYgkJKCRYbiwkVDMpOwoJJm1vdmRxdQkJKCRUMywmUVdQKDMyLCRIdGJsKSk7CgkmcHhvcgkJKCRYaSwkVDEpOwkJIyBJaStYaQoKCSZwc2h1ZmQJCSgkVDEsJFhuLDBiMDEwMDExMTApOwkjIEgqSWkrMQoJJm1vdmRxYQkJKCRYaG4sJFhuKTsKCSZweG9yCQkoJFQxLCRYbik7CQkjCgkmbGVhCQkoJGlucCwmRFdQKDMyLCRpbnApKTsJIyBpKz0yCgoJJnBjbG11bHFkcQkoJFhuLCRIa2V5LDB4MDApOwkjIyMjIyMjCgkmcGNsbXVscWRxCSgkWGhuLCRIa2V5LDB4MTEpOwkjIyMjIyMjCgkmcGNsbXVscWRxCSgkVDEsJFQzLDB4MDApOwkJIyMjIyMjIwoJJm1vdnVwcwkJKCRIa2V5LCZRV1AoMTYsJEh0YmwpKTsJIyBsb2FkIEheMgoJJm5vcAkJKCk7CgoJJnN1YgkJKCRsZW4sMHgyMCk7CgkmamJlCQkoJmxhYmVsKCJldmVuX3RhaWwiKSk7Cgkmam1wCQkoJmxhYmVsKCJtb2RfbG9vcCIpKTsKCiZzZXRfbGFiZWwoIm1vZF9sb29wIiwzMik7CgkmcHNodWZkCQkoJFQyLCRYaSwwYjAxMDAxMTEwKTsJIyBIXjIqKElpK1hpKQoJJm1vdmRxYQkJKCRYaGksJFhpKTsKCSZweG9yCQkoJFQyLCRYaSk7CQkjCgkmbm9wCQkoKTsKCgkmcGNsbXVscWRxCSgkWGksJEhrZXksMHgwMCk7CSMjIyMjIyMKCSZwY2xtdWxxZHEJKCRYaGksJEhrZXksMHgxMSk7CSMjIyMjIyMKCSZwY2xtdWxxZHEJKCRUMiwkVDMsMHgxMCk7CQkjIyMjIyMjCgkmbW92dXBzCQkoJEhrZXksJlFXUCgwLCRIdGJsKSk7CSMgbG9hZCBICgoJJnhvcnBzCQkoJFhpLCRYbik7CQkjIChIKklpKzEpICsgSF4yKihJaStYaSkKCSZtb3ZkcWEJCSgkVDMsJlFXUCgwLCRjb25zdCkpOwoJJnhvcnBzCQkoJFhoaSwkWGhuKTsKCSAmbW92ZHF1CSgkWGhuLCZRV1AoMCwkaW5wKSk7CSMgSWkKCSZweG9yCQkoJFQxLCRYaSk7CQkjIGFnZ3JlZ2F0ZWQgS2FyYXRzdWJhIHBvc3QtcHJvY2Vzc2luZwoJICZtb3ZkcXUJKCRYbiwmUVdQKDE2LCRpbnApKTsJIyBJaSsxCgkmcHhvcgkJKCRUMSwkWGhpKTsJCSMKCgkgJnBzaHVmYgkoJFhobiwkVDMpOwoJJnB4b3IJCSgkVDIsJFQxKTsJCSMKCgkmbW92ZHFhCQkoJFQxLCRUMik7CQkjCgkmcHNybGRxCQkoJFQyLDgpOwoJJnBzbGxkcQkJKCRUMSw4KTsJCSMKCSZweG9yCQkoJFhoaSwkVDIpOwoJJnB4b3IJCSgkWGksJFQxKTsJCSMKCSAmcHNodWZiCSgkWG4sJFQzKTsKCSAmcHhvcgkJKCRYaGksJFhobik7CQkjICJJaStYaSIsIGNvbnN1bWUgZWFybHkKCgkmbW92ZHFhCQkoJFhobiwkWG4pOwkJIyZjbG11bDY0eDY0X1RYCSgkWGhuLCRYbiwkSGtleSk7IEgqSWkrMQoJICAmbW92ZHFhCSgkVDIsJFhpKTsJCSMmcmVkdWN0aW9uX2FsZzkoJFhoaSwkWGkpOyAxc3QgcGhhc2UKCSAgJm1vdmRxYQkoJFQxLCRYaSk7CgkgICZwc2xscQkoJFhpLDUpOwoJICAmcHhvcgkJKCRUMSwkWGkpOwkJIwoJICAmcHNsbHEJKCRYaSwxKTsKCSAgJnB4b3IJCSgkWGksJFQxKTsJCSMKCSZwY2xtdWxxZHEJKCRYbiwkSGtleSwweDAwKTsJIyMjIyMjIwoJJm1vdnVwcwkJKCRUMywmUVdQKDMyLCRIdGJsKSk7CgkgICZwc2xscQkoJFhpLDU3KTsJCSMKCSAgJm1vdmRxYQkoJFQxLCRYaSk7CQkjCgkgICZwc2xsZHEJKCRYaSw4KTsKCSAgJnBzcmxkcQkoJFQxLDgpOwkJIwkKCSAgJnB4b3IJCSgkWGksJFQyKTsKCSAgJnB4b3IJCSgkWGhpLCRUMSk7CQkjCgkmcHNodWZkCQkoJFQxLCRYaG4sMGIwMTAwMTExMCk7CgkgICZtb3ZkcWEJKCRUMiwkWGkpOwkJIyAybmQgcGhhc2UKCSAgJnBzcmxxCSgkWGksMSk7CgkmcHhvcgkJKCRUMSwkWGhuKTsKCSAgJnB4b3IJCSgkWGhpLCRUMik7CQkjCgkmcGNsbXVscWRxCSgkWGhuLCRIa2V5LDB4MTEpOwkjIyMjIyMjCgkmbW92dXBzCQkoJEhrZXksJlFXUCgxNiwkSHRibCkpOwkjIGxvYWQgSF4yCgkgICZweG9yCQkoJFQyLCRYaSk7CgkgICZwc3JscQkoJFhpLDUpOwoJICAmcHhvcgkJKCRYaSwkVDIpOwkJIwoJICAmcHNybHEJKCRYaSwxKTsJCSMKCSAgJnB4b3IJCSgkWGksJFhoaSkJCSMKCSZwY2xtdWxxZHEJKCRUMSwkVDMsMHgwMCk7CQkjIyMjIyMjCgoJJmxlYQkJKCRpbnAsJkRXUCgzMiwkaW5wKSk7Cgkmc3ViCQkoJGxlbiwweDIwKTsKCSZqYQkJKCZsYWJlbCgibW9kX2xvb3AiKSk7Cgomc2V0X2xhYmVsKCJldmVuX3RhaWwiKTsKCSZwc2h1ZmQJCSgkVDIsJFhpLDBiMDEwMDExMTApOwkjIEheMiooSWkrWGkpCgkmbW92ZHFhCQkoJFhoaSwkWGkpOwoJJnB4b3IJCSgkVDIsJFhpKTsJCSMKCgkmcGNsbXVscWRxCSgkWGksJEhrZXksMHgwMCk7CSMjIyMjIyMKCSZwY2xtdWxxZHEJKCRYaGksJEhrZXksMHgxMSk7CSMjIyMjIyMKCSZwY2xtdWxxZHEJKCRUMiwkVDMsMHgxMCk7CQkjIyMjIyMjCgkmbW92ZHFhCQkoJFQzLCZRV1AoMCwkY29uc3QpKTsKCgkmeG9ycHMJCSgkWGksJFhuKTsJCSMgKEgqSWkrMSkgKyBIXjIqKElpK1hpKQoJJnhvcnBzCQkoJFhoaSwkWGhuKTsKCSZweG9yCQkoJFQxLCRYaSk7CQkjIGFnZ3JlZ2F0ZWQgS2FyYXRzdWJhIHBvc3QtcHJvY2Vzc2luZwoJJnB4b3IJCSgkVDEsJFhoaSk7CQkjCgoJJnB4b3IJCSgkVDIsJFQxKTsJCSMKCgkmbW92ZHFhCQkoJFQxLCRUMik7CQkjCgkmcHNybGRxCQkoJFQyLDgpOwoJJnBzbGxkcQkJKCRUMSw4KTsJCSMKCSZweG9yCQkoJFhoaSwkVDIpOwoJJnB4b3IJCSgkWGksJFQxKTsJCSMKCgkmcmVkdWN0aW9uX2FsZzkJKCRYaGksJFhpKTsKCgkmdGVzdAkJKCRsZW4sJGxlbik7Cgkmam56CQkoJmxhYmVsKCJkb25lIikpOwoKCSZtb3Z1cHMJCSgkSGtleSwmUVdQKDAsJEh0YmwpKTsJIyBsb2FkIEgKJnNldF9sYWJlbCgib2RkX3RhaWwiKTsKCSZtb3ZkcXUJCSgkVDEsJlFXUCgwLCRpbnApKTsJIyBJaQoJJnBzaHVmYgkJKCRUMSwkVDMpOwoJJnB4b3IJCSgkWGksJFQxKTsJCSMgSWkrWGkKCgkmY2xtdWw2NHg2NF9UMgkoJFhoaSwkWGksJEhrZXkpOwkjIEgqKElpK1hpKQoJJnJlZHVjdGlvbl9hbGc5CSgkWGhpLCRYaSk7Cgomc2V0X2xhYmVsKCJkb25lIik7CgkmcHNodWZiCQkoJFhpLCRUMyk7CgkmbW92ZHF1CQkoJlFXUCgwLCRYaXApLCRYaSk7CiZmdW5jdGlvbl9lbmQoImdjbV9naGFzaF9jbG11bCIpOwoMCn0gZWxzZSB7CQkjIEFsZ29yaXRoIDUuIEtlcHQgZm9yIHJlZmVyZW5jZSBwdXJwb3Nlcy4KCnN1YiByZWR1Y3Rpb25fYWxnNSB7CSMgMTkvMTYgdGltZXMgZmFzdGVyIHRoYW4gSW50ZWwgdmVyc2lvbgpteSAoJFhoaSwkWGkpPUBfOwoKCSMgPDwxCgkmbW92ZHFhCQkoJFQxLCRYaSk7CQkjCgkmbW92ZHFhCQkoJFQyLCRYaGkpOwoJJnBzbGxkCQkoJFhpLDEpOwoJJnBzbGxkCQkoJFhoaSwxKTsJCSMKCSZwc3JsZAkJKCRUMSwzMSk7CgkmcHNybGQJCSgkVDIsMzEpOwkJIwoJJm1vdmRxYQkJKCRUMywkVDEpOwoJJnBzbGxkcQkJKCRUMSw0KTsKCSZwc3JsZHEJCSgkVDMsMTIpOwkJIwoJJnBzbGxkcQkJKCRUMiw0KTsKCSZwb3IJCSgkWGhpLCRUMyk7CQkjCgkmcG9yCQkoJFhpLCRUMSk7CgkmcG9yCQkoJFhoaSwkVDIpOwkJIwoKCSMgMXN0IHBoYXNlCgkmbW92ZHFhCQkoJFQxLCRYaSk7CgkmbW92ZHFhCQkoJFQyLCRYaSk7CgkmbW92ZHFhCQkoJFQzLCRYaSk7CQkjCgkmcHNsbGQJCSgkVDEsMzEpOwoJJnBzbGxkCQkoJFQyLDMwKTsKCSZwc2xsZAkJKCRYaSwyNSk7CQkjCgkmcHhvcgkJKCRUMSwkVDIpOwoJJnB4b3IJCSgkVDEsJFhpKTsJCSMKCSZtb3ZkcWEJCSgkVDIsJFQxKTsJCSMKCSZwc2xsZHEJCSgkVDEsMTIpOwoJJnBzcmxkcQkJKCRUMiw0KTsJCSMKCSZweG9yCQkoJFQzLCRUMSk7CgoJIyAybmQgcGhhc2UKCSZweG9yCQkoJFhoaSwkVDMpOwkJIwoJJm1vdmRxYQkJKCRYaSwkVDMpOwoJJm1vdmRxYQkJKCRUMSwkVDMpOwoJJnBzcmxkCQkoJFhpLDEpOwkJIwoJJnBzcmxkCQkoJFQxLDIpOwoJJnBzcmxkCQkoJFQzLDcpOwkJIwoJJnB4b3IJCSgkWGksJFQxKTsKCSZweG9yCQkoJFhoaSwkVDIpOwoJJnB4b3IJCSgkWGksJFQzKTsJCSMKCSZweG9yCQkoJFhpLCRYaGkpOwkJIwp9CgomZnVuY3Rpb25fYmVnaW5fQigiZ2NtX2luaXRfY2xtdWwiKTsKCSZtb3YJCSgkSHRibCwmd3BhcmFtKDApKTsKCSZtb3YJCSgkWGlwLCZ3cGFyYW0oMSkpOwoKCSZjYWxsCQkoJmxhYmVsKCJwaWMiKSk7CiZzZXRfbGFiZWwoInBpYyIpOwoJJmJsaW5kcG9wCSgkY29uc3QpOwoJJmxlYQkJKCRjb25zdCwmRFdQKCZsYWJlbCgiYnN3YXAiKS4iLSIuJmxhYmVsKCJwaWMiKSwkY29uc3QpKTsKCgkmbW92ZHF1CQkoJEhrZXksJlFXUCgwLCRYaXApKTsKCSZwc2h1ZmQJCSgkSGtleSwkSGtleSwwYjAxMDAxMTEwKTsjIGR3b3JkIHN3YXAKCgkjIGNhbGN1bGF0ZSBIXjIKCSZtb3ZkcWEJCSgkWGksJEhrZXkpOwoJJmNsbXVsNjR4NjRfVDMJKCRYaGksJFhpLCRIa2V5KTsKCSZyZWR1Y3Rpb25fYWxnNQkoJFhoaSwkWGkpOwoKCSZtb3ZkcXUJCSgmUVdQKDAsJEh0YmwpLCRIa2V5KTsJIyBzYXZlIEgKCSZtb3ZkcXUJCSgmUVdQKDE2LCRIdGJsKSwkWGkpOwkjIHNhdmUgSF4yCgoJJnJldAkJKCk7CiZmdW5jdGlvbl9lbmRfQigiZ2NtX2luaXRfY2xtdWwiKTsKCiZmdW5jdGlvbl9iZWdpbl9CKCJnY21fZ211bHRfY2xtdWwiKTsKCSZtb3YJCSgkWGlwLCZ3cGFyYW0oMCkpOwoJJm1vdgkJKCRIdGJsLCZ3cGFyYW0oMSkpOwoKCSZjYWxsCQkoJmxhYmVsKCJwaWMiKSk7CiZzZXRfbGFiZWwoInBpYyIpOwoJJmJsaW5kcG9wCSgkY29uc3QpOwoJJmxlYQkJKCRjb25zdCwmRFdQKCZsYWJlbCgiYnN3YXAiKS4iLSIuJmxhYmVsKCJwaWMiKSwkY29uc3QpKTsKCgkmbW92ZHF1CQkoJFhpLCZRV1AoMCwkWGlwKSk7CgkmbW92ZHFhCQkoJFhuLCZRV1AoMCwkY29uc3QpKTsKCSZtb3ZkcXUJCSgkSGtleSwmUVdQKDAsJEh0YmwpKTsKCSZwc2h1ZmIJCSgkWGksJFhuKTsKCgkmY2xtdWw2NHg2NF9UMwkoJFhoaSwkWGksJEhrZXkpOwoJJnJlZHVjdGlvbl9hbGc1CSgkWGhpLCRYaSk7CgoJJnBzaHVmYgkJKCRYaSwkWG4pOwoJJm1vdmRxdQkJKCZRV1AoMCwkWGlwKSwkWGkpOwoKCSZyZXQJKCk7CiZmdW5jdGlvbl9lbmRfQigiZ2NtX2dtdWx0X2NsbXVsIik7CgomZnVuY3Rpb25fYmVnaW4oImdjbV9naGFzaF9jbG11bCIpOwoJJm1vdgkJKCRYaXAsJndwYXJhbSgwKSk7CgkmbW92CQkoJEh0YmwsJndwYXJhbSgxKSk7CgkmbW92CQkoJGlucCwmd3BhcmFtKDIpKTsKCSZtb3YJCSgkbGVuLCZ3cGFyYW0oMykpOwoKCSZjYWxsCQkoJmxhYmVsKCJwaWMiKSk7CiZzZXRfbGFiZWwoInBpYyIpOwoJJmJsaW5kcG9wCSgkY29uc3QpOwoJJmxlYQkJKCRjb25zdCwmRFdQKCZsYWJlbCgiYnN3YXAiKS4iLSIuJmxhYmVsKCJwaWMiKSwkY29uc3QpKTsKCgkmbW92ZHF1CQkoJFhpLCZRV1AoMCwkWGlwKSk7CgkmbW92ZHFhCQkoJFQzLCZRV1AoMCwkY29uc3QpKTsKCSZtb3ZkcXUJCSgkSGtleSwmUVdQKDAsJEh0YmwpKTsKCSZwc2h1ZmIJCSgkWGksJFQzKTsKCgkmc3ViCQkoJGxlbiwweDEwKTsKCSZqegkJKCZsYWJlbCgib2RkX3RhaWwiKSk7CgoJIyMjIyMjIwoJIyBYaSsyID1bSCooSWkrMSArIFhpKzEpXSBtb2QgUCA9CgkjCVsoSCpJaSsxKSArIChIKlhpKzEpXSBtb2QgUCA9CgkjCVsoSCpJaSsxKSArIEheMiooSWkrWGkpXSBtb2QgUAoJIwoJJm1vdmRxdQkJKCRUMSwmUVdQKDAsJGlucCkpOwkjIElpCgkmbW92ZHF1CQkoJFhuLCZRV1AoMTYsJGlucCkpOwkjIElpKzEKCSZwc2h1ZmIJCSgkVDEsJFQzKTsKCSZwc2h1ZmIJCSgkWG4sJFQzKTsKCSZweG9yCQkoJFhpLCRUMSk7CQkjIElpK1hpCgoJJmNsbXVsNjR4NjRfVDMJKCRYaG4sJFhuLCRIa2V5KTsJIyBIKklpKzEKCSZtb3ZkcXUJCSgkSGtleSwmUVdQKDE2LCRIdGJsKSk7CSMgbG9hZCBIXjIKCgkmc3ViCQkoJGxlbiwweDIwKTsKCSZsZWEJCSgkaW5wLCZEV1AoMzIsJGlucCkpOwkjIGkrPTIKCSZqYmUJCSgmbGFiZWwoImV2ZW5fdGFpbCIpKTsKCiZzZXRfbGFiZWwoIm1vZF9sb29wIik7CgkmY2xtdWw2NHg2NF9UMwkoJFhoaSwkWGksJEhrZXkpOwkjIEheMiooSWkrWGkpCgkmbW92ZHF1CQkoJEhrZXksJlFXUCgwLCRIdGJsKSk7CSMgbG9hZCBICgoJJnB4b3IJCSgkWGksJFhuKTsJCSMgKEgqSWkrMSkgKyBIXjIqKElpK1hpKQoJJnB4b3IJCSgkWGhpLCRYaG4pOwoKCSZyZWR1Y3Rpb25fYWxnNQkoJFhoaSwkWGkpOwoKCSMjIyMjIyMKCSZtb3ZkcWEJCSgkVDMsJlFXUCgwLCRjb25zdCkpOwoJJm1vdmRxdQkJKCRUMSwmUVdQKDAsJGlucCkpOwkjIElpCgkmbW92ZHF1CQkoJFhuLCZRV1AoMTYsJGlucCkpOwkjIElpKzEKCSZwc2h1ZmIJCSgkVDEsJFQzKTsKCSZwc2h1ZmIJCSgkWG4sJFQzKTsKCSZweG9yCQkoJFhpLCRUMSk7CQkjIElpK1hpCgoJJmNsbXVsNjR4NjRfVDMJKCRYaG4sJFhuLCRIa2V5KTsJIyBIKklpKzEKCSZtb3ZkcXUJCSgkSGtleSwmUVdQKDE2LCRIdGJsKSk7CSMgbG9hZCBIXjIKCgkmc3ViCQkoJGxlbiwweDIwKTsKCSZsZWEJCSgkaW5wLCZEV1AoMzIsJGlucCkpOwoJJmphCQkoJmxhYmVsKCJtb2RfbG9vcCIpKTsKCiZzZXRfbGFiZWwoImV2ZW5fdGFpbCIpOwoJJmNsbXVsNjR4NjRfVDMJKCRYaGksJFhpLCRIa2V5KTsJIyBIXjIqKElpK1hpKQoKCSZweG9yCQkoJFhpLCRYbik7CQkjIChIKklpKzEpICsgSF4yKihJaStYaSkKCSZweG9yCQkoJFhoaSwkWGhuKTsKCgkmcmVkdWN0aW9uX2FsZzUJKCRYaGksJFhpKTsKCgkmbW92ZHFhCQkoJFQzLCZRV1AoMCwkY29uc3QpKTsKCSZ0ZXN0CQkoJGxlbiwkbGVuKTsKCSZqbnoJCSgmbGFiZWwoImRvbmUiKSk7CgoJJm1vdmRxdQkJKCRIa2V5LCZRV1AoMCwkSHRibCkpOwkjIGxvYWQgSAomc2V0X2xhYmVsKCJvZGRfdGFpbCIpOwoJJm1vdmRxdQkJKCRUMSwmUVdQKDAsJGlucCkpOwkjIElpCgkmcHNodWZiCQkoJFQxLCRUMyk7CgkmcHhvcgkJKCRYaSwkVDEpOwkJIyBJaStYaQoKCSZjbG11bDY0eDY0X1QzCSgkWGhpLCRYaSwkSGtleSk7CSMgSCooSWkrWGkpCgkmcmVkdWN0aW9uX2FsZzUJKCRYaGksJFhpKTsKCgkmbW92ZHFhCQkoJFQzLCZRV1AoMCwkY29uc3QpKTsKJnNldF9sYWJlbCgiZG9uZSIpOwoJJnBzaHVmYgkJKCRYaSwkVDMpOwoJJm1vdmRxdQkJKCZRV1AoMCwkWGlwKSwkWGkpOwomZnVuY3Rpb25fZW5kKCJnY21fZ2hhc2hfY2xtdWwiKTsKCn0KDAomc2V0X2xhYmVsKCJic3dhcCIsNjQpOwoJJmRhdGFfYnl0ZSgxNSwxNCwxMywxMiwxMSwxMCw5LDgsNyw2LDUsNCwzLDIsMSwwKTsKCSZkYXRhX2J5dGUoMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMHhjMik7CSMgMHgxYzJfcG9seW5vbWlhbAomc2V0X2xhYmVsKCJyZW1fOGJpdCIsNjQpOwoJJmRhdGFfc2hvcnQoMHgwMDAwLDB4MDFDMiwweDAzODQsMHgwMjQ2LDB4MDcwOCwweDA2Q0EsMHgwNDhDLDB4MDU0RSk7CgkmZGF0YV9zaG9ydCgweDBFMTAsMHgwRkQyLDB4MEQ5NCwweDBDNTYsMHgwOTE4LDB4MDhEQSwweDBBOUMsMHgwQjVFKTsKCSZkYXRhX3Nob3J0KDB4MUMyMCwweDFERTIsMHgxRkE0LDB4MUU2NiwweDFCMjgsMHgxQUVBLDB4MThBQywweDE5NkUpOwoJJmRhdGFfc2hvcnQoMHgxMjMwLDB4MTNGMiwweDExQjQsMHgxMDc2LDB4MTUzOCwweDE0RkEsMHgxNkJDLDB4MTc3RSk7CgkmZGF0YV9zaG9ydCgweDM4NDAsMHgzOTgyLDB4M0JDNCwweDNBMDYsMHgzRjQ4LDB4M0U4QSwweDNDQ0MsMHgzRDBFKTsKCSZkYXRhX3Nob3J0KDB4MzY1MCwweDM3OTIsMHgzNUQ0LDB4MzQxNiwweDMxNTgsMHgzMDlBLDB4MzJEQywweDMzMUUpOwoJJmRhdGFfc2hvcnQoMHgyNDYwLDB4MjVBMiwweDI3RTQsMHgyNjI2LDB4MjM2OCwweDIyQUEsMHgyMEVDLDB4MjEyRSk7CgkmZGF0YV9zaG9ydCgweDJBNzAsMHgyQkIyLDB4MjlGNCwweDI4MzYsMHgyRDc4LDB4MkNCQSwweDJFRkMsMHgyRjNFKTsKCSZkYXRhX3Nob3J0KDB4NzA4MCwweDcxNDIsMHg3MzA0LDB4NzJDNiwweDc3ODgsMHg3NjRBLDB4NzQwQywweDc1Q0UpOwoJJmRhdGFfc2hvcnQoMHg3RTkwLDB4N0Y1MiwweDdEMTQsMHg3Q0Q2LDB4Nzk5OCwweDc4NUEsMHg3QTFDLDB4N0JERSk7CgkmZGF0YV9zaG9ydCgweDZDQTAsMHg2RDYyLDB4NkYyNCwweDZFRTYsMHg2QkE4LDB4NkE2QSwweDY4MkMsMHg2OUVFKTsKCSZkYXRhX3Nob3J0KDB4NjJCMCwweDYzNzIsMHg2MTM0LDB4NjBGNiwweDY1QjgsMHg2NDdBLDB4NjYzQywweDY3RkUpOwoJJmRhdGFfc2hvcnQoMHg0OEMwLDB4NDkwMiwweDRCNDQsMHg0QTg2LDB4NEZDOCwweDRFMEEsMHg0QzRDLDB4NEQ4RSk7CgkmZGF0YV9zaG9ydCgweDQ2RDAsMHg0NzEyLDB4NDU1NCwweDQ0OTYsMHg0MUQ4LDB4NDAxQSwweDQyNUMsMHg0MzlFKTsKCSZkYXRhX3Nob3J0KDB4NTRFMCwweDU1MjIsMHg1NzY0LDB4NTZBNiwweDUzRTgsMHg1MjJBLDB4NTA2QywweDUxQUUpOwoJJmRhdGFfc2hvcnQoMHg1QUYwLDB4NUIzMiwweDU5NzQsMHg1OEI2LDB4NURGOCwweDVDM0EsMHg1RTdDLDB4NUZCRSk7CgkmZGF0YV9zaG9ydCgweEUxMDAsMHhFMEMyLDB4RTI4NCwweEUzNDYsMHhFNjA4LDB4RTdDQSwweEU1OEMsMHhFNDRFKTsKCSZkYXRhX3Nob3J0KDB4RUYxMCwweEVFRDIsMHhFQzk0LDB4RUQ1NiwweEU4MTgsMHhFOURBLDB4RUI5QywweEVBNUUpOwoJJmRhdGFfc2hvcnQoMHhGRDIwLDB4RkNFMiwweEZFQTQsMHhGRjY2LDB4RkEyOCwweEZCRUEsMHhGOUFDLDB4Rjg2RSk7CgkmZGF0YV9zaG9ydCgweEYzMzAsMHhGMkYyLDB4RjBCNCwweEYxNzYsMHhGNDM4LDB4RjVGQSwweEY3QkMsMHhGNjdFKTsKCSZkYXRhX3Nob3J0KDB4RDk0MCwweEQ4ODIsMHhEQUM0LDB4REIwNiwweERFNDgsMHhERjhBLDB4RERDQywweERDMEUpOwoJJmRhdGFfc2hvcnQoMHhENzUwLDB4RDY5MiwweEQ0RDQsMHhENTE2LDB4RDA1OCwweEQxOUEsMHhEM0RDLDB4RDIxRSk7CgkmZGF0YV9zaG9ydCgweEM1NjAsMHhDNEEyLDB4QzZFNCwweEM3MjYsMHhDMjY4LDB4QzNBQSwweEMxRUMsMHhDMDJFKTsKCSZkYXRhX3Nob3J0KDB4Q0I3MCwweENBQjIsMHhDOEY0LDB4QzkzNiwweENDNzgsMHhDREJBLDB4Q0ZGQywweENFM0UpOwoJJmRhdGFfc2hvcnQoMHg5MTgwLDB4OTA0MiwweDkyMDQsMHg5M0M2LDB4OTY4OCwweDk3NEEsMHg5NTBDLDB4OTRDRSk7CgkmZGF0YV9zaG9ydCgweDlGOTAsMHg5RTUyLDB4OUMxNCwweDlERDYsMHg5ODk4LDB4OTk1QSwweDlCMUMsMHg5QURFKTsKCSZkYXRhX3Nob3J0KDB4OERBMCwweDhDNjIsMHg4RTI0LDB4OEZFNiwweDhBQTgsMHg4QjZBLDB4ODkyQywweDg4RUUpOwoJJmRhdGFfc2hvcnQoMHg4M0IwLDB4ODI3MiwweDgwMzQsMHg4MUY2LDB4ODRCOCwweDg1N0EsMHg4NzNDLDB4ODZGRSk7CgkmZGF0YV9zaG9ydCgweEE5QzAsMHhBODAyLDB4QUE0NCwweEFCODYsMHhBRUM4LDB4QUYwQSwweEFENEMsMHhBQzhFKTsKCSZkYXRhX3Nob3J0KDB4QTdEMCwweEE2MTIsMHhBNDU0LDB4QTU5NiwweEEwRDgsMHhBMTFBLDB4QTM1QywweEEyOUUpOwoJJmRhdGFfc2hvcnQoMHhCNUUwLDB4QjQyMiwweEI2NjQsMHhCN0E2LDB4QjJFOCwweEIzMkEsMHhCMTZDLDB4QjBBRSk7CgkmZGF0YV9zaG9ydCgweEJCRjAsMHhCQTMyLDB4Qjg3NCwweEI5QjYsMHhCQ0Y4LDB4QkQzQSwweEJGN0MsMHhCRUJFKTsKfX0JIyAkc3NlMgoKJnNldF9sYWJlbCgicmVtXzRiaXQiLDY0KTsKCSZkYXRhX3dvcmQoMCwweDAwMDA8PCRTLDAsMHgxQzIwPDwkUywwLDB4Mzg0MDw8JFMsMCwweDI0NjA8PCRTKTsKCSZkYXRhX3dvcmQoMCwweDcwODA8PCRTLDAsMHg2Q0EwPDwkUywwLDB4NDhDMDw8JFMsMCwweDU0RTA8PCRTKTsKCSZkYXRhX3dvcmQoMCwweEUxMDA8PCRTLDAsMHhGRDIwPDwkUywwLDB4RDk0MDw8JFMsMCwweEM1NjA8PCRTKTsKCSZkYXRhX3dvcmQoMCwweDkxODA8PCRTLDAsMHg4REEwPDwkUywwLDB4QTlDMDw8JFMsMCwweEI1RTA8PCRTKTsKfX19CSMgISR4ODZvbmx5CgomYXNjaXooIkdIQVNIIGZvciB4ODYsIENSWVBUT0dBTVMgYnkgPGFwcHJvXEBvcGVuc3NsLm9yZz4iKTsKJmFzbV9maW5pc2goKTsKCiMgQSBxdWVzdGlvbiB3YXMgcmlzZW4gYWJvdXQgY2hvaWNlIG9mIHZhbmlsbGEgTU1YLiBPciByYXRoZXIgd2h5IHdhc24ndAojIFNTRTIgY2hvc2VuIGluc3RlYWQ/IEluIGFkZGl0aW9uIHRvIHRoZSBmYWN0IHRoYXQgTU1YIHJ1bnMgb24gbGVnYWN5CiMgQ1BVcyBzdWNoIGFzIFBJSUksICI0LWJpdCIgTU1YIHZlcnNpb24gd2FzIG9ic2VydmVkIHRvIHByb3ZpZGUgYmV0dGVyCiMgcGVyZm9ybWFuY2UgdGhhbiAqY29ycmVzcG9uZGluZyogU1NFMiBvbmUgZXZlbiBvbiBjb250ZW1wb3JhcnkgQ1BVcy4KIyBTU0UyIHJlc3VsdHMgd2VyZSBwcm92aWRlZCBieSBQZXRlci1NaWNoYWVsIEhhZ2VyLiBIZSBtYWludGFpbnMgU1NFMgojIGltcGxlbWVudGF0aW9uIGZlYXR1cmluZyBmdWxsIHJhbmdlIG9mIGxvb2t1cC10YWJsZSBzaXplcywgYnV0IHdpdGgKIyBwZXItaW52b2NhdGlvbiBsb29rdXAgdGFibGUgc2V0dXAuIExhdHRlciBtZWFucyB0aGF0IHRhYmxlIHNpemUgaXMKIyBjaG9zZW4gZGVwZW5kaW5nIG9uIGhvdyBtdWNoIGRhdGEgaXMgdG8gYmUgaGFzaGVkIGluIGV2ZXJ5IGdpdmVuIGNhbGwsCiMgbW9yZSBkYXRhIC0gbGFyZ2VyIHRhYmxlLiBCZXN0IHJlcG9ydGVkIHJlc3VsdCBmb3IgQ29yZTIgaXMgfjQgY3ljbGVzCiMgcGVyIHByb2Nlc3NlZCBieXRlIG91dCBvZiA2NEtCIGJsb2NrLiBUaGlzIG51bWJlciBhY2NvdW50cyBldmVuIGZvcgojIDY0S0IgdGFibGUgc2V0dXAgb3ZlcmhlYWQuIEFzIGRpc2N1c3NlZCBpbiBnY20xMjguYyB3ZSBjaG9vc2UgdG8gYmUKIyBtb3JlIGNvbnNlcnZhdGl2ZSBpbiByZXNwZWN0IHRvIGxvb2t1cCB0YWJsZSBzaXplcywgYnV0IGhvdyBkbyB0aGUKIyByZXN1bHRzIGNvbXBhcmU/IE1pbmltYWxpc3RpYyAiMjU2QiIgTU1YIHZlcnNpb24gZGVsaXZlcnMgfjExIGN5Y2xlcwojIG9uIHNhbWUgcGxhdGZvcm0uIEFzIGFsc28gZGlzY3Vzc2VkIGluIGdjbTEyOC5jLCBuZXh0IGluIGxpbmUgIjgtYml0CiMgU2hvdXAncyIgb3IgIjRLQiIgbWV0aG9kIHNob3VsZCBkZWxpdmVyIHR3aWNlIHRoZSBwZXJmb3JtYW5jZSBvZgojICIyNTZCIiBvbmUsIGluIG90aGVyIHdvcmRzIG5vdCB3b3JzZSB0aGFuIH42IGN5Y2xlcyBwZXIgYnl0ZS4gSXQKIyBzaG91bGQgYmUgYWxzbyBiZSBub3RlZCB0aGF0IGluIFNTRTIgY2FzZSBpbXByb3ZlbWVudCBjYW4gYmUgInN1cGVyLQojIGxpbmVhciwiIGkuZS4gbW9yZSB0aGFuIHR3aWNlLCBtb3N0bHkgYmVjYXVzZSA+PjggbWFwcyB0byBzaW5nbGUKIyBpbnN0cnVjdGlvbiBvbiBTU0UyIHJlZ2lzdGVyLiBUaGlzIGlzIHVubGlrZSAiNC1iaXQiIGNhc2Ugd2hlbiA+PjQKIyBtYXBzIHRvIHNhbWUgYW1vdW50IG9mIGluc3RydWN0aW9ucyBpbiBib3RoIE1NWCBhbmQgU1NFMiBjYXNlcy4KIyBCb3R0b20gbGluZSBpcyB0aGF0IHN3aXRjaCB0byBTU0UyIGlzIGNvbnNpZGVyZWQgdG8gYmUganVzdGlmaWFibGUKIyBvbmx5IGluIGNhc2Ugd2UgY2hvb3NlIHRvIGltcGxlbWVudCAiOC1iaXQiIG1ldGhvZC4uLgo=