IyMgY29uZmlnOm1hYy1wcmUuaW4KIyMgY29tbW9uIE1hY2ludG9zaCBwcmVmaXggZm9yIGFsbCBNYWtlZmlsZS5pbiBpbiB0aGUgS2VyYmVyb3MgVjUgdHJlZQoKIwojIE1QVy1zdHlsZSBsaW5lcyBmb3IgdGhlIE1ha2VGaWxlCiMKIyBUaGlzIGZpcnN0IHBhcnQgaXMgbG9uZyBlbm91Z2ggdGhhdCBORlM6U2hhcmUgZG9lc24ndCBub3RpY2UgdGhlIG5vbi1BU0NJSQojIGNoYXJhY3RlcnMgaW4gdGhlIHJlc3Qgb2YgdGhlIGZpbGUsIHNvIGl0IGNsYWltcyB0aGF0IHRoZSBmaWxlIGlzIHR5cGUKIyBURVhULCB3aGljaCBpcyB3aGF0IHdlIHdhbnQuICBUaGUgbm9uLUFTQ0lJIGNoYXJzIGFyZSBuZWNlc3NhcnkgZm9yIE1QVyAKIyBNYWtlCiMKIyBUaGlzIGZpcnN0IHBhcnQgaXMgbG9uZyBlbm91Z2ggdGhhdCBORlM6U2hhcmUgZG9lc24ndCBub3RpY2UgdGhlIG5vbi1BU0NJSQojIGNoYXJhY3RlcnMgaW4gdGhlIHJlc3Qgb2YgdGhlIGZpbGUsIHNvIGl0IGNsYWltcyB0aGF0IHRoZSBmaWxlIGlzIHR5cGUKIyBURVhULCB3aGljaCBpcyB3aGF0IHdlIHdhbnQuICBUaGUgbm9uLUFTQ0lJIGNoYXJzIGFyZSBuZWNlc3NhcnkgZm9yIE1QVyAKIyBNYWtlCiMKIyBUaGlzIGZpcnN0IHBhcnQgaXMgbG9uZyBlbm91Z2ggdGhhdCBORlM6U2hhcmUgZG9lc24ndCBub3RpY2UgdGhlIG5vbi1BU0NJSQojIGNoYXJhY3RlcnMgaW4gdGhlIHJlc3Qgb2YgdGhlIGZpbGUsIHNvIGl0IGNsYWltcyB0aGF0IHRoZSBmaWxlIGlzIHR5cGUKIyBURVhULCB3aGljaCBpcyB3aGF0IHdlIHdhbnQuICBUaGUgbm9uLUFTQ0lJIGNoYXJzIGFyZSBuZWNlc3NhcnkgZm9yIE1QVyAKIyBNYWtlCiMKIyBUaGlzIGZpcnN0IHBhcnQgaXMgbG9uZyBlbm91Z2ggdGhhdCBORlM6U2hhcmUgZG9lc24ndCBub3RpY2UgdGhlIG5vbi1BU0NJSQojIGNoYXJhY3RlcnMgaW4gdGhlIHJlc3Qgb2YgdGhlIGZpbGUsIHNvIGl0IGNsYWltcyB0aGF0IHRoZSBmaWxlIGlzIHR5cGUKIyBURVhULCB3aGljaCBpcyB3aGF0IHdlIHdhbnQuICBUaGUgbm9uLUFTQ0lJIGNoYXJzIGFyZSBuZWNlc3NhcnkgZm9yIE1QVyAKIyBNYWtlCiMKIyBUaGlzIGZpcnN0IHBhcnQgaXMgbG9uZyBlbm91Z2ggdGhhdCBORlM6U2hhcmUgZG9lc24ndCBub3RpY2UgdGhlIG5vbi1BU0NJSQojIGNoYXJhY3RlcnMgaW4gdGhlIHJlc3Qgb2YgdGhlIGZpbGUsIHNvIGl0IGNsYWltcyB0aGF0IHRoZSBmaWxlIGlzIHR5cGUKIyBURVhULCB3aGljaCBpcyB3aGF0IHdlIHdhbnQuICBUaGUgbm9uLUFTQ0lJIGNoYXJzIGFyZSBuZWNlc3NhcnkgZm9yIE1QVyAKIyBNYWtlCiMKIyBUaGlzIGZpcnN0IHBhcnQgaXMgbG9uZyBlbm91Z2ggdGhhdCBORlM6U2hhcmUgZG9lc24ndCBub3RpY2UgdGhlIG5vbi1BU0NJSQojIGNoYXJhY3RlcnMgaW4gdGhlIHJlc3Qgb2YgdGhlIGZpbGUsIHNvIGl0IGNsYWltcyB0aGF0IHRoZSBmaWxlIGlzIHR5cGUKIyBURVhULCB3aGljaCBpcyB3aGF0IHdlIHdhbnQuICBUaGUgbm9uLUFTQ0lJIGNoYXJzIGFyZSBuZWNlc3NhcnkgZm9yIE1QVyAKIyBNYWtlCiMKIyBUaGlzIGZpcnN0IHBhcnQgaXMgbG9uZyBlbm91Z2ggdGhhdCBORlM6U2hhcmUgZG9lc24ndCBub3RpY2UgdGhlIG5vbi1BU0NJSQojIGNoYXJhY3RlcnMgaW4gdGhlIHJlc3Qgb2YgdGhlIGZpbGUsIHNvIGl0IGNsYWltcyB0aGF0IHRoZSBmaWxlIGlzIHR5cGUKIyBURVhULCB3aGljaCBpcyB3aGF0IHdlIHdhbnQuICBUaGUgbm9uLUFTQ0lJIGNoYXJzIGFyZSBuZWNlc3NhcnkgZm9yIE1QVyAKIyBNYWtlCiMKIyBUaGlzIGZpcnN0IHBhcnQgaXMgbG9uZyBlbm91Z2ggdGhhdCBORlM6U2hhcmUgZG9lc24ndCBub3RpY2UgdGhlIG5vbi1BU0NJSQojIGNoYXJhY3RlcnMgaW4gdGhlIHJlc3Qgb2YgdGhlIGZpbGUsIHNvIGl0IGNsYWltcyB0aGF0IHRoZSBmaWxlIGlzIHR5cGUKIyBURVhULCB3aGljaCBpcyB3aGF0IHdlIHdhbnQuICBUaGUgbm9uLUFTQ0lJIGNoYXJzIGFyZSBuZWNlc3NhcnkgZm9yIE1QVyAKIyBNYWtlCiMKIyBUaGlzIGZpcnN0IHBhcnQgaXMgbG9uZyBlbm91Z2ggdGhhdCBORlM6U2hhcmUgZG9lc24ndCBub3RpY2UgdGhlIG5vbi1BU0NJSQojIGNoYXJhY3RlcnMgaW4gdGhlIHJlc3Qgb2YgdGhlIGZpbGUsIHNvIGl0IGNsYWltcyB0aGF0IHRoZSBmaWxlIGlzIHR5cGUKIyBURVhULCB3aGljaCBpcyB3aGF0IHdlIHdhbnQuICBUaGUgbm9uLUFTQ0lJIGNoYXJzIGFyZSBuZWNlc3NhcnkgZm9yIE1QVyAKIyBNYWtlCiMKIyBUaGlzIGZpcnN0IHBhcnQgaXMgbG9uZyBlbm91Z2ggdGhhdCBORlM6U2hhcmUgZG9lc24ndCBub3RpY2UgdGhlIG5vbi1BU0NJSQojIGNoYXJhY3RlcnMgaW4gdGhlIHJlc3Qgb2YgdGhlIGZpbGUsIHNvIGl0IGNsYWltcyB0aGF0IHRoZSBmaWxlIGlzIHR5cGUKIyBURVhULCB3aGljaCBpcyB3aGF0IHdlIHdhbnQuICBUaGUgbm9uLUFTQ0lJIGNoYXJzIGFyZSBuZWNlc3NhcnkgZm9yIE1QVyAKIyBNYWtlCiMKIyBUaGlzIGZpcnN0IHBhcnQgaXMgbG9uZyBlbm91Z2ggdGhhdCBORlM6U2hhcmUgZG9lc24ndCBub3RpY2UgdGhlIG5vbi1BU0NJSQojIGNoYXJhY3RlcnMgaW4gdGhlIHJlc3Qgb2YgdGhlIGZpbGUsIHNvIGl0IGNsYWltcyB0aGF0IHRoZSBmaWxlIGlzIHR5cGUKIyBURVhULCB3aGljaCBpcyB3aGF0IHdlIHdhbnQuICBUaGUgbm9uLUFTQ0lJIGNoYXJzIGFyZSBuZWNlc3NhcnkgZm9yIE1QVyAKIyBNYWtlCiMKIyBUaGlzIGZpcnN0IHBhcnQgaXMgbG9uZyBlbm91Z2ggdGhhdCBORlM6U2hhcmUgZG9lc24ndCBub3RpY2UgdGhlIG5vbi1BU0NJSQojIGNoYXJhY3RlcnMgaW4gdGhlIHJlc3Qgb2YgdGhlIGZpbGUsIHNvIGl0IGNsYWltcyB0aGF0IHRoZSBmaWxlIGlzIHR5cGUKIyBURVhULCB3aGljaCBpcyB3aGF0IHdlIHdhbnQuICBUaGUgbm9uLUFTQ0lJIGNoYXJzIGFyZSBuZWNlc3NhcnkgZm9yIE1QVyAKIyBNYWtlCiMKIyBUaGlzIGZpcnN0IHBhcnQgaXMgbG9uZyBlbm91Z2ggdGhhdCBORlM6U2hhcmUgZG9lc24ndCBub3RpY2UgdGhlIG5vbi1BU0NJSQojIGNoYXJhY3RlcnMgaW4gdGhlIHJlc3Qgb2YgdGhlIGZpbGUsIHNvIGl0IGNsYWltcyB0aGF0IHRoZSBmaWxlIGlzIHR5cGUKIyBURVhULCB3aGljaCBpcyB3aGF0IHdlIHdhbnQuICBUaGUgbm9uLUFTQ0lJIGNoYXJzIGFyZSBuZWNlc3NhcnkgZm9yIE1QVyAKIyBNYWtlCiMKIyBUaGlzIGZpcnN0IHBhcnQgaXMgbG9uZyBlbm91Z2ggdGhhdCBORlM6U2hhcmUgZG9lc24ndCBub3RpY2UgdGhlIG5vbi1BU0NJSQojIGNoYXJhY3RlcnMgaW4gdGhlIHJlc3Qgb2YgdGhlIGZpbGUsIHNvIGl0IGNsYWltcyB0aGF0IHRoZSBmaWxlIGlzIHR5cGUKIyBURVhULCB3aGljaCBpcyB3aGF0IHdlIHdhbnQuICBUaGUgbm9uLUFTQ0lJIGNoYXJzIGFyZSBuZWNlc3NhcnkgZm9yIE1QVyAKIyBNYWtlCgojCiMgRW5kIG9mIE1QVy1zdHlsZSBsaW5lcyBmb3IgTWFrZUZpbGUKIwoKV0hBVCA9IG1hYwoKIyBEaXJlY3Rvcnkgc3ludGF4IMQgClI9CkM9ClM9OgpVPToKCkJVSUxEVE9QID0gOjo6CnNyY2RpciA9IAoKIyBGSVhNRSDEICAgVGhpcyBkb2Vzbid0IHRyYW5zbGF0ZSB0byBNUFcgeWV0LCBzcmNkaXIgbXVzdCBiZSBzYW1lIGFzIG9iamRpcgojIEZpbGUgaW4gb2JqZWN0IGRpciBjYW4gY29tZSBmcm9tIGVpdGhlciB0aGUgY3VycmVudCBkaXIgb3Igc3JjZGlyCiMgCiMgLiAgxCAgLiAie3NyY2Rpcn0iCgojIERlZmF1bHQgcnVsZSB0aGF0IHB1dHMgZWFjaCBmaWxlIGludG8gc2VwYXJhdGUgc2VnbWVudAoKLmMubyDEICAuYwogICB7Q0N9ICB7RGVwRGlyfXtEZWZhdWx0fS5jIHtDRkxBR1N9IC1zIHtEZWZhdWx0fSAtbyB7VGFyZ0Rpcn17RGVmYXVsdH0uYy5vCgpDUFBGTEFHUyA9ICAtaSB7U1JDVE9QfTppbmNsdWRlIC1pIHtCVUlMRFRPUH06aW5jbHVkZSAtaSB7U1JDVE9QfTppbmNsdWRlOmtyYjUgLWkge0JVSUxEVE9QfTppbmNsdWRlOmtyYjUgLWkge0NJbmNsdWRlc30KREVGUyA9ICAge0NQUEZMQUdTfQpDQyA9IGMKTEQgPSBsaW5rCiMgVGhlIGZ1bm55IHF1b3RpbmcgaW4gdGhlIExERkxBR1MgaXMgdG8gYXZvaWQgeHh4LmMubyBiZWluZyBtYW5nbGVkIGJ5CiMgbWFjLW1mLnNlZCBpbnRvIHh4eC5jLm8KTERGTEFHUz0tdCBNUFNUIC1jICJNUFMgIiAtc3ltIG9uIHtMaWJyYXJpZXN9IlJ1bnRpbWUuIm8ge0NMaWJyYXJpZXN9IlN0ZENsaWIuIm8ge0xpYnJhcmllc30iVG9vbExpYnMuIm8ge0xpYnJhcmllc30iSW50ZXJmYWNlLiJvCkNDT1BUUyA9IApMSUJTID0gCktSQjVST09UPSBAS1JCNVJPT1RACktSQjQ9QEtSQjRACklOU1RBTEw9RHVwbGljYXRlIC15CklOU1RBTExfUFJPR1JBTT1EdXBsaWNhdGUgLXkKSU5TVEFMTF9EQVRBPUR1cGxpY2F0ZSAteQpJTlNUQUxMX1NFVFVJRD1EdXBsaWNhdGUgLXkKCktSQjVNQU5ST09UID0ge0tSQjVST09UfXtTfW1hbgpBRE1JTl9CSU5ESVIgPSB7S1JCNVJPT1R9e1N9YWRtaW4KU0VSVkVSX0JJTkRJUiA9IHtLUkI1Uk9PVH17U31zYmluCkNMSUVOVF9CSU5ESVIgPSB7S1JCNVJPT1R9e1N9YmluCkFETUlOX01BTkRJUiA9IHtLUkI1TUFOUk9PVH17U31tYW44ClNFUlZFUl9NQU5ESVIgPSB7S1JCNU1BTlJPT1R9e1N9bWFuOApDTElFTlRfTUFORElSID0ge0tSQjVNQU5ST09UfXtTfW1hbjEKRklMRV9NQU5ESVIgPSB7S1JCNU1BTlJPT1R9e1N9bWFuNQpLUkI1X0xJQkRJUiA9IHtLUkI1Uk9PVH17U31saWIKS1JCNV9JTkNESVIgPSB7S1JCNVJPT1R9e1N9aW5jbHVkZQpLUkI1X0lOQ1NVQkRJUlMgPSC2Cgl7S1JCNV9JTkNESVJ9e1N9a3JiNSC2Cgl7S1JCNV9JTkNESVJ9e1N9YXNuLjEgtgoJe0tSQjVfSU5DRElSfXtTfWtlcmJlcm9zSVYKCgpSTSA9IERlbGV0ZSAteSAtaQpDUCA9IER1cGxpY2F0ZSAteQpNViA9IG12IC1mCkNITU9EPWNobW9kClJBTkxJQiA9IEBSQU5MSUJACkFSQ0hJVkUgPSBAQVJDSElWRUAKQVJBREQgPSBAQVJBRERACkxOID0gQExOX1NACkFXSyA9IEBBV0tACkxFWCA9IEBMRVhACkxFWExJQiA9IEBMRVhMSUJACllBQ0MgPSBAWUFDQ0AKCiMgRklYTUUgxCAgIFRoaXMgd29uJ3Qgd29yayBmb3Igc3JjZGlyICE9IG9iamRpci4gIEJ1dCBvbiB0aGUgTWFjLCB0aGVyZQojIGlzIG5vIGVhc3kgd2F5IHRvIGJ1aWxkIGEgcmVsYXRpdmUgb3IgYWJzb2x1dGUgcGF0aCwgYmVjYXVzZSAgxCAgbWVhbnMKIyBib3RoIHRoZSBwYXRoIHNlcGFyYXRvciwgYW5kIHRoZSAiZ28gdXAgYSBkaXJlY3RvcnkiIGluZGljYXRvcgojU1JDVE9QID0ge3NyY2Rpcn17U317QlVJTERUT1B9ClNSQ1RPUCA9IHtCVUlMRFRPUH0KU1VCRElSUyA9IEBzdWJkaXJzQAoKVE9QTElCRCA9IHtCVUlMRFRPUH17U31saWIKCk9CSkVYVCA9IGMubwpMSUJFWFQgPSBhCkVYRUVYVCA9CgphbGwgxMQgCiMgR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgZnJvbSBNYWtlZmlsZS5pbiBieSBjb25maWd1cmUKQ0ZMQUdTID0ge0NDT1BUU30ge0RFRlN9IC1pIDo6ZGVzCgojI0RPU0JVSUxEVE9QID0gLi5cLi5cOgojI0RPU0xJQk5BTUU9Li5cY3J5cHRvLmxpYgojI0RPUyFpbmNsdWRlIHtCVUlMRFRPUH1cY29uZmlnXHdpbmRvd3MuaW4KCk9CSlM9CW1kNS57T0JKRVhUfSBtZDVnbHVlLntPQkpFWFR9IG1kNWNyeXB0by57T0JKRVhUfQoKU1JDUz0JbWQ1LmMgbWQ1Z2x1ZS5jIG1kNWNyeXB0by5jCgphbGwgxMQgIHtPQkpTfSAKCnRfbWRkcml2ZXIgxCAgdF9tZGRyaXZlci5jLm8gbWQ1LmMubwoJTGluayAgICB7TERGTEFHU30gLW8gdF9tZGRyaXZlciB0X21kZHJpdmVyLmMubyBtZDUuYy5vCgp0X21kZHJpdmVyLmV4ZSDEIAoJe0NDfSB7Q0ZMQUdTMn0gLW8gdF9tZGRyaXZlci5leGUgdF9tZGRyaXZlci5jIG1kNS5jCgpjaGVjayDExCAgdF9tZGRyaXZlcntFWEVFWFR9Cgl7Q310X21kZHJpdmVye0VYRUVYVH0gLXgKCmNsZWFuIMTEIAoJe1JNfSB0X21kZHJpdmVye0VYRUVYVH0gdF9tZGRyaXZlci57T0JKRVhUfQojIGNvbmZpZzpwb3N0LmluCiMgcHV0IGFsbCDExCAgZmlyc3QganVzdCBpbiBjYXNlIG5vIG90aGVyIHJ1bGVzIG9jY3VyIGhlcmUKIwphbGwgxMQgCgpjaGVjayDExCAKCmNsZWFuIMTEICBjbGVhbi17V0hBVH0KCXtSTX0gY29uZmlnLmxvZyBwcmUuYy5vdXQgcG9zdC5jLm91dCBNYWtlZmlsZS5jLm91dAoKY2xlYW4tdW5peCDExCAKCWlmIHRlc3QgLW4gIntPQkpTfSIgOyB0aGVuIHtSTX0ge09CSlN9OyBlbHNlICDEIDsgZmkKCmNsZWFuLXdpbmRvd3MgxMQgCgl7Uk19IMUue09CSkVYVH0KCXtSTX0gbXN2Yy5wZGIgxS5lcnIK