IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojICAgICAgICAgICAgICAgICAgICAgICBDQURFTkNFIENPUFlSSUdIVCBOT1RJQ0UKIyAgICAgICAgIKkgMjAwOC0yMDEzIENhZGVuY2UgRGVzaWduIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBGb3VuZGF0aW9uIEZsb3cgaXMgcHJvdmlkZWQgYXMgYW4gZXhhbXBsZSBvZiBob3cgdG8gcGVyZm9ybSBzcGVjaWFsaXplZAojIHRhc2tzLgojCiMgVGhpcyB3b3JrIG1heSBub3QgYmUgY29waWVkLCByZS1wdWJsaXNoZWQsIHVwbG9hZGVkLCBvciBkaXN0cmlidXRlZCBpbiBhbnkgd2F5LAojIGluIGFueSBtZWRpdW0sIHdoZXRoZXIgaW4gd2hvbGUgb3IgaW4gcGFydCwgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24KIyBmcm9tIENhZGVuY2UuIE5vdHdpdGhzdGFuZGluZyBhbnkgcmVzdHJpY3Rpb25zIGhlcmVpbiwgc3ViamVjdCB0byBjb21wbGlhbmNlCiMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIENhZGVuY2Ugc29mdHdhcmUgbGljZW5zZSBhZ3JlZW1lbnQgdW5kZXIKIyB3aGljaCB0aGlzIG1hdGVyaWFsIHdhcyBwcm92aWRlZCwgdGhpcyBtYXRlcmlhbCBtYXkgYmUgY29waWVkIGFuZCBpbnRlcm5hbGx5CiMgZGlzdHJpYnV0ZWQgc29sZWx5IGZvciBpbnRlcm5hbCBwdXJwb3NlcyBmb3IgdXNlIHdpdGggQ2FkZW5jZSB0b29scy4KIwojIFRoaXMgd29yayBpcyBDYWRlbmNlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBhbmQgbWF5IHVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgYmUKIyBnaXZlbiB0byB0aGlyZCBwYXJ0aWVzLCBuZWl0aGVyIGluIG9yaWdpbmFsIG5vciBpbiBtb2RpZmllZCB2ZXJzaW9ucywgd2l0aG91dAojIGV4cGxpY2l0IHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIENhZGVuY2UuIFRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaGVyZWluIGlzCiMgdGhlIHByb3ByaWV0YXJ5IGFuZCBjb25maWRlbnRpYWwgaW5mb3JtYXRpb24gb2YgQ2FkZW5jZSBvciBpdHMgbGljZW5zb3JzLCBhbmQKIyBpcyBzdXBwbGllZCBzdWJqZWN0IHRvLCBhbmQgbWF5IGJlIHVzZWQgb25seSBieSBDYWRlbmNlJ3MgY3VycmVudCBjdXN0b21lcnMKIyBpbiBhY2NvcmRhbmNlIHdpdGgsIGEgcHJldmlvdXNseSBleGVjdXRlZCBsaWNlbnNlIGFncmVlbWVudCBiZXR3ZWVuIENhZGVuY2UKIyBhbmQgaXRzIGN1c3RvbWVyLgojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUSElTIE1BVEVSSUFMIElTIFBST1ZJREVEIEJZIENBREVOQ0UgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAojIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCiMgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KIyBJTiBOTyBFVkVOVCBTSEFMTCBDQURFTkNFIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwKIyBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAojIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgojIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgIE1BVEVSSUFMLCBFVkVOIElGCiMgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKaWYge1tsaW5kZXggW3NwbGl0ICR2YXJzKHZlcnNpb24pICIuIl0gIDBdID4gMTB9IHsKICAgaWYge1tsaW5kZXggW3NwbGl0ICR2YXJzKHZlcnNpb24pICIuIl0gIDBdIDwgMTV9IHsKICAgICAgc2V0IHJkYV9kZWZhdWx0cyhhc3NpZ25fYnVmZmVyKSB7MX0KICAgfQogICBzZXQgcmRhX2RlZmF1bHRzKGltcG9ydF9tb2RlKSB7LXRyZWF0VW5kZWZpbmVkQ2VsbEFzQmJveCAwIC1rZWVwRW1wdHlNb2R1bGUgMSAtdXNlTGVmRGVmNTYgMSB9CiAgIHNldCByZGFfZGVmYXVsdHModW5pcXVpZnlfbmV0bGlzdCkgezF9Cn0gZWxzZSB7CiAgIHNldCByZGFfZGVmYXVsdHMoYXNzaWduX2J1ZmZlcikgezF9CiAgIHNldCByZGFfZGVmYXVsdHMoc2hyX3NjYWxlKSB7MS4wfQogICBzZXQgcmRhX2RlZmF1bHRzKGRlbGF5X2xpbWl0KSB7MTAwMH0KICAgc2V0IHJkYV9kZWZhdWx0cyhkZWZhdWx0X25ldF9kZWxheSkgezEwMDAuMHBzfQogICBzZXQgcmRhX2RlZmF1bHRzKGRlZmF1bHRfbmV0X2xvYWQpIHswLjVwZn0KICAgc2V0IHJkYV9kZWZhdWx0cyhkZWZhdWx0X3NsZXcpIHswcHN9CiAgIHNldCByZGFfZGVmYXVsdHMoZmxpcF9maXJzdF9yb3cpIHsxfQogICBzZXQgcmRhX2RlZmF1bHRzKGNvcmVfY29udHJvbCkge2FzcGVjdH0KICAgc2V0IHJkYV9kZWZhdWx0cyhpbXBvcnRfbW9kZSkgey10cmVhdFVuZGVmaW5lZENlbGxBc0Jib3ggMCAta2VlcEVtcHR5TW9kdWxlIDEgLXVzZUxlZkRlZjU2IDEgfQogICBzZXQgcmRhX2RlZmF1bHRzKGNvcmVfdXRpbCkgezAuN30KICAgaWYge1tpbmZvIGV4aXN0cyB2YXJzKG5ldGxpc3RfdHlwZSldfSB7CiAgICAgIHNldCByZGFfZGVmYXVsdHMobmV0bGlzdF90eXBlKSAkdmFycyhuZXRsaXN0X3R5cGUpCiAgIH0gZWxzZSB7CiAgICAgIHNldCByZGFfZGVmYXVsdHMobmV0bGlzdF90eXBlKSBWZXJpbG9nCiAgIH0KICAgc2V0IHJkYV9kZWZhdWx0cyh1bmlxdWlmeV9uZXRsaXN0KSB7MX0KICAgc2V0IHJkYV9kZWZhdWx0cyhydGxfbGlzdCkgIiIKICAgc2V0IHJkYV9kZWZhdWx0cyhpbG1fZGlyKSAiIgogICBzZXQgcmRhX2RlZmF1bHRzKGlsbV9saXN0KSAiIgogICBzZXQgcmRhX2RlZmF1bHRzKGlsbV9zcGVmKSAiIgogICBzZXQgcmRhX2RlZmF1bHRzKHNldF90b3BfY2VsbCkgezB9CiAgIHNldCByZGFfZGVmYXVsdHMoY2VsbGxpYikgIiIKICAgc2V0IHJkYV9kZWZhdWx0cyhpb19saWIpICIiCiAgIHNldCByZGFfZGVmYXVsdHMoYXJlYV9pb19saWIpICIiCiAgIHNldCByZGFfZGVmYXVsdHMoYmxrX2xpYikgIiIKICAgc2V0IHJkYV9kZWZhdWx0cyhrYm94X2xpYikgIiIKICAgc2V0IHJkYV9kZWZhdWx0cyhvYTJsZWZ2ZXJzaW9uKSB7fQogICBzZXQgcmRhX2RlZmF1bHRzKHZpZXdfZGVmaW5pdGlvbl9maWxlKSAiIgogICBzZXQgcmRhX2RlZmF1bHRzKHNtb2RfZGVmKSAiIgogICBzZXQgcmRhX2RlZmF1bHRzKHNtb2RfZGF0YSkgIiIKICAgc2V0IHJkYV9kZWZhdWx0cyhsb2N2X2xpYikgIiIKICAgc2V0IHJkYV9kZWZhdWx0cyhkYXRhX3BhdGgpICIiCiAgIHNldCByZGFfZGVmYXVsdHModGVjaF9maWxlKSAiIgogICBzZXQgcmRhX2RlZmF1bHRzKGlvX2ZpbGUpICIiCiAgIHNldCByZGFfZGVmYXVsdHMobGF0ZW5jeV9maWxlKSAiIgogICBzZXQgcmRhX2RlZmF1bHRzKHNjaGVkdWxpbmdfZmlsZSkgIiIKICAgc2V0IHJkYV9kZWZhdWx0cyhidWZfZm9vdHByaW50KSB7fQogICBzZXQgcmRhX2RlZmF1bHRzKGRlbF9mb290cHJpbnQpIHt9CiAgIHNldCByZGFfZGVmYXVsdHMoaW52X2Zvb3RwcmludCkge30KICAgc2V0IHJkYV9kZWZhdWx0cyhjdHNfY2VsbF9mb290cHJpbnQpIHt9CiAgIHNldCByZGFfZGVmYXVsdHMoY3RzX2NlbGxfbGlzdCkge30KICAgc2V0IHJkYV9kZWZhdWx0cyhhc3BlY3RfcmF0aW8pIHsxLjB9CiAgIHNldCByZGFfZGVmYXVsdHMoY29yZV9oZWlnaHQpIHt9CiAgIHNldCByZGFfZGVmYXVsdHMoY29yZV93aWR0aCkge30KICAgc2V0IHJkYV9kZWZhdWx0cyhjb3JlX3RvX2xlZnQpIHt9CiAgIHNldCByZGFfZGVmYXVsdHMoY29yZV90b19yaWdodCkge30KICAgc2V0IHJkYV9kZWZhdWx0cyhjb3JlX3RvX3RvcCkge30KICAgc2V0IHJkYV9kZWZhdWx0cyhjb3JlX3RvX2JvdHRvbSkge30KICAgc2V0IHJkYV9kZWZhdWx0cyhtYXhfaW9faGVpZ2h0KSB7MH0KICAgc2V0IHJkYV9kZWZhdWx0cyhyb3dfaGVpZ2h0KSB7fQogICBzZXQgcmRhX2RlZmF1bHRzKGhvcl90cmFja19oYWxmX3BpdGNoKSB7MH0KICAgc2V0IHJkYV9kZWZhdWx0cyh2ZXJfdHJhY2tfaGFsZl9waXRjaCkgezF9CiAgIHNldCByZGFfZGVmYXVsdHMoaW9fb3JpZW50YXRpb24pIHtSMH0KICAgc2V0IHJkYV9kZWZhdWx0cyhjZW50ZXJfb3JpZ2luKSB7MH0KICAgc2V0IHJkYV9kZWZhdWx0cyh2ZXJ0aWNhbF9yb3dzKSB7MH0KICAgc2V0IHJkYV9kZWZhdWx0cyhleGNsdWRlX25ldHMpICIiCiAgIHNldCByZGFfZGVmYXVsdHModGltZV91bml0KSB7bm9uZX0KICAgc2V0IHJkYV9kZWZhdWx0cyhjYXBfdW5pdCkge30KICAgc2V0IHJkYV9kZWZhdWx0cyhvYV9yZWZfbGliKSAiIgogICBzZXQgcmRhX2RlZmF1bHRzKG9hX2Fic3RyYWN0X25hbWUpIHt9CiAgIHNldCByZGFfZGVmYXVsdHMob2FfbGF5b3V0X25hbWUpIHt9CiAgIHNldCByZGFfZGVmYXVsdHMob2FfZGVzaWduX2xpYikge30KICAgc2V0IHJkYV9kZWZhdWx0cyhvYV9kZXNpZ25fY2VsbCkge30KICAgc2V0IHJkYV9kZWZhdWx0cyhvYV9kZXNpZ25fdmlldykge30KICAgc2V0IHJkYV9kZWZhdWx0cyhzaWduYWxzdG9ybV9saWIpICIiCiAgIHNldCByZGFfZGVmYXVsdHMoZWNob19maWxlLG1pbikgIiIKICAgc2V0IHJkYV9kZWZhdWx0cyhlY2hvX2ZpbGUsbWF4KSAiIgogICBzZXQgcmRhX2RlZmF1bHRzKGVjaG9fZmlsZSkgIiIKICAgc2V0IHJkYV9kZWZhdWx0cyh4dGFsa190d2ZfZmlsZSkgIiIKICAgc2V0IHJkYV9kZWZhdWx0cyhkb3VibGVfYmFjaykgezF9CiAgIHNldCByZGFfZGVmYXVsdHMoZ2VuX2Zvb3RwcmludCkgezB9CiAgIHNldCByZGFfZGVmYXVsdHMocHdybmV0KSAiIgogICBzZXQgcmRhX2RlZmF1bHRzKGduZG5ldCkgIiIKICAgc2V0IHJkYV9kZWZhdWx0cyhnZHNfZmlsZXMpICIiCn0K