eval %q{IyBDb3B5cmlnaHQgRGlkaWVyIEJ1ciAtIDIwMDQKIyBBIHBlcnNvbmFsIGxp Y2Vuc2UgaXMgZ3JhbnRlZCB0byB5b3UgdG8gdXNlIHRoaXMgcHJvZ3JhbSBm cmVlbHkKIyBZb3UgYXJlIG5vdCBhdXRob3JpemVkIHRvIG1vZGlmeSBvciBj b3B5IHRoaXMgc2NyaXB0CiMgdG8gdXNlIGF0IGVuZHMgb2YgdHJhZGUKIyBU aGlzIGxpY2Vuc2UgZG9lcyBub3QgaW1wbHkgYW55IGd1YXJhbnRlZQojIFlv dSB1c2UgdGhpcyBwcm9ncmFtIGF0IHlvdXIgb3duIHJpc2tzCiMgRm9yIG1v cmUgaW5mb3JtYXRpb24sIHBsZWFzZSBjb250YWN0IDogYnVyQGNyYWkuYXJj aGkuZnIKCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEltcG9y dCBhIHBvaW50cyBjbG91ZHMgaW4gU1UsIGFzc3VtaW5nIHRoZSBmb3JtYXQg b2YgdGhlIGlucHV0IGZpbGUgaXM6CiMgeCBkZWxpbWl0ZXIgeSBkZWxpbWl0 ZXIgegojIGZvciBpbnN0YW5jZTogMS4wLDIuMCwzLjAgKGEgQ1NWIGZpbGUg Zm9ybWF0IGluIHRoaXMgY2FzZSkKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCiMgVmVyc2lvbnMgaGlzdG9yeToKIyAzMC4wNy4wNDogZmlyc3Qg cmVsZWFzZSwganVzdCByZWFkcyB0aGUgcG9pbnRzCiMgMDEuMDguMDQ6IHNv bWUgZGVsaW1pdGVycyBhZGRlZCwgbGF5ZXIgc2VsZWN0YWJsZQojIDE4LjA2 LjA3OiBiZXR0ZXIgYW5kIHNpbmdsZSBkaWFsb2cgYm94IChtb3JlIHVzZXIt ZnJpZW5kbHkpLgojICAgICAgICAgICBiZXR0ZXIgbGF5ZXIgc3VwcG9ydAoj ICAgICAgICAgICBtb3JlIGRlbGltaXRlcnMsIHNhbXBsZSBvZiBmaWxlIGxp bmUgZm9yIHJlZmVyZW5jZQojICAgICAgICAgICBpbnZhbGlkIGRhdGEgZmls ZSBkZXRlY3Rpb24sIG1vcmUgdGhhbiAzIGRhdGEgcGVyIGxpbmUgZGV0ZWN0 aW9uCiMgICAgICAgICAgIHNlbGVjdCBYWVogbG9jYXRpb25zIG9wdGlvbgoj ICAgICAgICAgICBmbGF0dGVuIFogY2NvcmRpbmF0ZSBvcHRpb24KIyAgICAg ICAgICAgem9vbSBleHRlbmQgYXQgY29tbWFuZCBlbmQKIyAgICAgICAgICAg U2NyaXB0T3JnYW5pemVyIGNvbXBhdGlibGUKIyAgICAgICAgICAgVHJpYW5n dWxhdGlvbiBvcHRpb24KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CgojIFN1cHBvcnRzIE9yZ2FuaXplci5yYgojJHN1Ym1lbnUgPyAob3JnYW5p emVyID0gJHN1Ym1lbnUpIDogKG9yZ2FuaXplciA9IFVJLm1lbnUoIlBsdWdp bnMiKSkKI29yZ2FuaXplci5hZGRfaXRlbSgiSW1wb3J0IHBvaW50cyBjbG91 ZCIpIHsgaW1wb3J0X3BvaW50c19jbG91ZCB9CgpyZXF1aXJlICdza2V0Y2h1 cC5yYicKCmRlZiBpbXBvcnRfcG9pbnRzX2Nsb3VkCgkKICBtb2RlbCA9IFNr ZXRjaHVwLmFjdGl2ZV9tb2RlbAogIHNhdmVkX2xheWVyID0gbW9kZWwuYWN0 aXZlX2xheWVyCiAgCiAgb3B0ID0gU2tldGNodXAuYWN0aXZlX21vZGVsLm9w dGlvbnMKICB1ID0gb3B0WzNdWzJdCmNhc2UgdQogIHdoZW4gMAogICAgJG11 bHQgPSAxCiAgd2hlbiAxCiAgICAkbXVsdCA9IDEyCiAgd2hlbiAyCiAgICAk bXVsdCA9IDAuMDM5MzcwMDc4NzQwMQogIHdoZW4gMwogICAgJG11bHQgPSAw LjM5MzcwMDc4NzQwMQogIHdoZW4gNAogICAgJG11bHQgPSAzOS4zNzAwNzg3 NDAxCmVuZCAgICAKCmNvbXBfbGlzdCA9IGNvbGxlY3RfY29tcG9uZW50cwpj b21wX2xpc3QucHVzaCAiQ29uc3RydWN0aW9uIHBvaW50IgpsYXlfbGlzdCA9 IGNvbGxlY3RfbGF5ZXJzCnN0YXJ0X2xheWVyID0gbW9kZWwuYWN0aXZlX2xh eWVyCgp2YWx1ZSA9IFVJLm9wZW5wYW5lbCAiU2VsZWN0IHBvaW50cyBjbG91 ZCBmaWxlIiAKaWYgdmFsdWUKICBwb2ludHNfY2xvdWRfRmlsZSA9IEZpbGUu bmV3KCB2YWx1ZS50b19zLCAiciIgKSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgI29wZW5zIHRoZSBpbnB1dCBmaWxlCiAgdGFibGVhdV9saWduZXMg PSBJTy5yZWFkbGluZXModmFsdWUudG9fcykKICB0YWJsZWF1X2xpZ25lcy51 bmlxIQogIG5wdHMgPSB0YWJsZWF1X2xpZ25lcy5sZW5ndGgKICBTa2V0Y2h1 cC5zZXRfc3RhdHVzX3RleHQobnB0cy50b19zICsgIiBwb2ludHMgdG8gaW1w b3J0LlxuIikKICAgIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0gRGlhbG9nIGJveAogICAgIyBEZWxpbWl0ZXIgc2V0dGluZ3MKICAgIEBk ZWxpbV9vcHRpb25zID0gIiwiIGlmIG5vdCBAZGVsaW1fb3B0aW9ucwogICAg JHBvaW50X3R5cGUgPSAiQ29uc3RydWN0aW9uIHBvaW50IiBpZiBub3QgJHBv aW50X3R5cGUKICAgIGZsYXR0ZW4gPSAiTm8iIGlmIG5vdCBmbGF0dGVuCiAg ICBkZWxpbV9vcHRpb25zID0gWyJTUEFDRSIsIiwiLCI7IiwiLiIsIiMiLCIt IiwiXyIsIiEiLCI/IiwiLyIsIjoiLCInIiwiKiJdCiAgICBlbnVtMSA9IFtk ZWxpbV9vcHRpb25zLmpvaW4oInwiKV0KICAgIGVudW0yID0gW2NvbXBfbGlz dC5qb2luKCJ8IildCiAgICBlbnVtMyA9IFtsYXlfbGlzdC5qb2luKCJ8Iild CiAgICBlbnVtNCA9IFtbIlllcyIsICJObyJdLmpvaW4oInwiKV0KICAgIGVu dW1zPVtlbnVtMSxlbnVtMixlbnVtNCxlbnVtM10KICAgIG5ld19sYXllciA9 ICIiCiAgICBwcm9tcHRzID0gWyJEYXRhIGRlbGltaXRlcjogIiwgIlBvaW50 IG9iamVjdDogIiwgIkZsYXR0ZW4gWiBjb29yZGluYXRlOiIsICJQdXQgcG9p bnRzIG9uIGV4aXN0aW5nIGxheWVyOiAiLCAiUHV0IHBvaW50cyBvbiBuZXcg bGF5ZXI6ICIsICJMaW5lIHNhbXBsZSBmb3IgcmVmZXJlbmNlOiAiXQogICAg dmFsdWVzID0gW0BkZWxpbV9vcHRpb25zLCAkcG9pbnRfdHlwZSwgZmxhdHRl biwgbGF5X2xpc3RbMF0sICIiLCB0YWJsZWF1X2xpZ25lc1swXV0KICAgIAog ICAgcmVzdWx0cyA9IGlucHV0Ym94IHByb21wdHMsIHZhbHVlcywgZW51bXMs ICJQb2ludHMgQ2xvdWQgT3B0aW9ucyAoIiArIG5wdHMudG9fcyArICIgcG9p bnRzIHRvIGltcG9ydCkuIgogICAgcmV0dXJuIG5pbCBpZiBub3QgcmVzdWx0 cwogICAgQGRlbGltX29wdGlvbnMgPSByZXN1bHRzWzBdCiAgICAkcG9pbnRf dHlwZSA9IHJlc3VsdHNbMV0KICAgIGxheWVyID0gcmVzdWx0c1szXQogICAg ZmxhdHRlbiA9IHJlc3VsdHNbMl0KICAgIG5ld19sYXllciA9IHJlc3VsdHNb NF0KICAgIAogICAgIyBEZWxpbWl0ZXIgZXhjZXB0aW9ucwogICAgaWYoIEBk ZWxpbV9vcHRpb25zID09ICJTUEFDRSIgKSAKICAgICAgQGRlbGltX29wdGlv bnMgPSAiICIgCiAgICBlbmQKICAgIAogICAgc2FtcGxlX2xpbmUgPSB0YWJs ZWF1X2xpZ25lc1swXS5zcGxpdChAZGVsaW1fb3B0aW9ucykKICAgICMgTm90 IGVub3VnaCBkYXRhIHBlciBsaW5lCiAgICBpZiBzYW1wbGVfbGluZS5sZW5n dGggPCAzCiAgICAgIFVJLm1lc3NhZ2Vib3goIk9ubHkgIiArIHNhbXBsZV9s aW5lLmxlbmd0aC50b19zICsgIiBkYXRhIHBlciBsaW5lLiBBYm9ydGluZy4u LiIpCiAgICAgIHJldHVybiBuaWwKICAgIGVuZAogICAgIyBNb3JlIHRoYW4g WFlaIGNvb3JkcyBwZXIgbGluZToKICAgIGlmIHNhbXBsZV9saW5lLmxlbmd0 aCA+IDMKICAgICAgVUkubWVzc2FnZWJveCgiTW9yZSB0aGFuIDMgWFlaIGNv b3JkaW5hdGVzIHBlciBsaW5lICgiICsgc2FtcGxlX2xpbmUubGVuZ3RoLnRv X3MgKyAiKS5cbiBQbGVhc2Ugc2VsZWN0IFgsIFksIGFuZCBaIGluIHRoZSBm b2xsb3dpbmcgbGluZSBzYW1wbGUuIikKICAgICAgZWxlbWVudHNfbGlzdD1b IkluZGljZSIsIlgiLCJZIiwiWiIsIk5vdGhpbmciLCAiTm90aGluZyJdCiAg ICAgIGVudW0gPSBbZWxlbWVudHNfbGlzdC5qb2luKCJ8IildCiAgICAgIGVu dW1zID0gW2VudW0sIGVudW0sIGVudW0sIGVudW0sIGVudW0sIGVudW1dCiAg ICAgIHByb21wdHMgPSBbIkZpcnN0IGVsZW1lbnQ6ICIsICJTZWNvbmQgZWxl bWVudDogIiwgIlRoaXJkIGVsZW1lbnQ6ICIsICJGb3VydGggZWxlbWVudCIs ICJGaWZ0aCBlbGVtZW50IiwiU2l4dGggZWxlbWVudDogIiwgIkxpbmUgc2Ft cGxlOiAiXQogICAgICB2YWx1ZXM9W2VsZW1lbnRzX2xpc3RbMF0sIGVsZW1l bnRzX2xpc3RbMV0sZWxlbWVudHNfbGlzdFsyXSxlbGVtZW50c19saXN0WzNd LGVsZW1lbnRzX2xpc3RbNF0sIGVsZW1lbnRzX2xpc3RbNV0sIHRhYmxlYXVf bGlnbmVzWzBdXQogICAgICBAb3JkZXIgPSBpbnB1dGJveCBwcm9tcHRzLCB2 YWx1ZXMsIGVudW1zLCAiU2VsZWN0IGNvb3JkaW5hdGVzIGxvY2F0aW9uIGlu IGxpbmUiCiAgICAgIGluZHg9IEBvcmRlci5pbmRleCgiWCIpCiAgICAgIGlu ZHk9IEBvcmRlci5pbmRleCgiWSIpCiAgICAgIGluZHo9IEBvcmRlci5pbmRl eCgiWiIpCiAgICAgIHJldHVybiBuaWwgaWYgbm90IEBvcmRlcgoKICAgIGVu ZAogICAgCiAgICAjIERlbGltaXRlciBleGNlcHRpb25zCiAgICBpZiggQGRl bGltX29wdGlvbnMgPT0gIlNQQUNFIiApIAogICAgICBAZGVsaW1fb3B0aW9u cyA9ICIgIiAKICAgIGVuZAogICAgI2lmKCBAZGVsaW1fb3B0aW9ucyA9PSAi VEFCIiApIAogICAgICAjQGRlbGltX29wdGlvbnMgPSAiXHQiIAogICAgI2Vu ZAogICAgCiAgICAjIExheWVyCiAgICBpZiBuZXdfbGF5ZXIgPT0gIiIKICAg ICAgbW9kZWwuYWN0aXZlX2xheWVyID0gbGF5ZXIKICAgIGVsc2UKICAgICAg bW9kZWwubGF5ZXJzLmFkZChuZXdfbGF5ZXIpCiAgICAgIG1vZGVsLmFjdGl2 ZV9sYXllciA9IG5ld19sYXllcgogICAgZW5kCiAgICAgIAogIG1vZGVsLnN0 YXJ0X29wZXJhdGlvbiAiUG9pbnRzIENsb3VkIElucHV0IgogIHNzID0gbW9k ZWwuc2VsZWN0aW9uCiAgc3MuY2xlYXIKICAKICAjIFJldHJpZXZlIGNvbXBv bmVudCBkZWZpbml0aW9uIGlmIG5lY2Vzc2FyeQogIGlmICRwb2ludF90eXBl ICE9ICJDb25zdHJ1Y3Rpb24gcG9pbnQiCiAgICBjb21wX2RlZiA9ICBTa2V0 Y2h1cC5hY3RpdmVfbW9kZWwuZGVmaW5pdGlvbnNbJHBvaW50X3R5cGVdCiAg ZW5kCiAgCiAgICAjIFByb2Nlc3MgaW5wdXQgZmlsZQogICAgIG5wID0gMQog ICAgdGFibGVhdV9saWduZXMuZWFjaCBkbyB8bGluZXwKICAgICAgY3VycmVu dF9wb2ludCA9IGxpbmUuc3BsaXQoIHBhdHRlcm49QGRlbGltX29wdGlvbnMp CiAgICAgIGlmIGluZHggPT0gbmlsCiAgICAgICAgeCA9IChjdXJyZW50X3Bv aW50WzBdLnRvX2YudG9fbCAqICRtdWx0KQogICAgICAgIHkgPSAoY3VycmVu dF9wb2ludFsxXS50b19mLnRvX2wgKiAkbXVsdCkKICAgICAgICB6ID0gKGN1 cnJlbnRfcG9pbnRbMl0udG9fZi50b19sICogJG11bHQpCiAgICAgICAgZWxz ZQogICAgICAgIHggPSAoY3VycmVudF9wb2ludFtpbmR4XS50b19mLnRvX2wg KiAkbXVsdCkKICAgICAgICB5ID0gKGN1cnJlbnRfcG9pbnRbaW5keV0udG9f Zi50b19sICogJG11bHQpCiAgICAgICAgeiA9IChjdXJyZW50X3BvaW50W2lu ZHpdLnRvX2YudG9fbCAqICRtdWx0KQogICAgICBlbmQKICAgICAgCiAgICAg IGNhc2UgZmxhdHRlbgogICAgICAgIHdoZW4gIk5vIgogICAgICAgICAgcHQg PSBHZW9tOjpQb2ludDNkLm5ldyh4LHkseikKICAgICAgICB3aGVuICJZZXMi CiAgICAgICAgICBwdCA9IEdlb206OlBvaW50M2QubmV3KHgseSwwLjApCiAg ICAgIGVuZAogICAgICBTa2V0Y2h1cC5zZXRfc3RhdHVzX3RleHQoIkFkZGlu ZyBwb2ludCAiICsgbnAudG9fcyArICIvICIgKyBucHRzLnRvX3MpCiAgICAg IGlmICRwb2ludF90eXBlID09ICJDb25zdHJ1Y3Rpb24gcG9pbnQiCiAgICAg ICAgY3AgPSBTa2V0Y2h1cC5hY3RpdmVfbW9kZWwuYWN0aXZlX2VudGl0aWVz LmFkZF9jcG9pbnQgcHQKICAgICAgICBzcy5hZGQgY3AKICAgICAgZWxzZQog ICAgICAgIHRyID0gR2VvbTo6VHJhbnNmb3JtYXRpb24ubmV3IHB0CiAgICAg ICAgU2tldGNodXAuYWN0aXZlX21vZGVsLmFjdGl2ZV9lbnRpdGllcy5hZGRf aW5zdGFuY2UgY29tcF9kZWYsIHRyCiAgICAgIGVuZAogICAgICBucCA9IG5w ICsgMQogICAgZW5kCiAgCiAgIyBab29tIGV4dGVudHMgdG8gcG9pbnRzIGNs b3VkCiAgdmlldyA9IG1vZGVsLmFjdGl2ZV92aWV3CiAgdmlldy56b29tX2V4 dGVudHMKICAKICAjIFRyaWFuZ3VsYXRpb24gb3B0aW9uCiAgYW5zd2VyID0g VUkubWVzc2FnZWJveCgiV291bGQgeW91IGxpa2UgdG8gdHJpYW5ndWxhdGUg dGhlIHBvaW50cyBjbG91ZCA/IiwgTUJfWUVTTk9DQU5DRUwsICJUcmlhbmd1 bGF0aW9uIikKICBjYXNlIGFuc3dlcgogICAgd2hlbiA2CiAgICAgIHRyaWFu Z3VsYXRlX2Nsb3VkCiAgICB3aGVuIDcKICAgICAgVUkubWVzc2FnZWJveCgo bnAtMSkudG9fcyArICIgcG9pbnRzIGltcG9ydGVkLiIpCiAgICB3aGVuIDIK ICAgICAgVUkubWVzc2FnZWJveCgobnAtMSkudG9fcyArICIgcG9pbnRzIGlt cG9ydGVkLiIpCiAgZW5kCiAgCiAgIyBSZXN0b3JlcyBwcmV2aW91cyBsYXll cgogIG1vZGVsLmFjdGl2ZV9sYXllciA9IHN0YXJ0X2xheWVyCiAgIyBDbG9z ZSB0aGUgZmlsZQogIHBvaW50c19jbG91ZF9GaWxlLmNsb3NlCiAgIyBDb21t YW5kIGVuZCBhbmQgdW5kbwogIG1vZGVsLmNvbW1pdF9vcGVyYXRpb24gCiAg CiAgZWxzZQogICAgVUkubWVzc2FnZWJveCAiTm8gaW5wdXQgZmlsZSBzZWxl Y3RlZC4iCiAgZW5kCmVuZAoKZGVmIGNvbGxlY3RfY29tcG9uZW50cwptb2Rl bCA9IFNrZXRjaHVwLmFjdGl2ZV9tb2RlbApjb21wb25lbnRzID0gbW9kZWwu ZGVmaW5pdGlvbnMKbGlzdCA9IFtdCmNvbXBvbmVudHMuZWFjaCBkbyB8Y3wK ICBpZiBub3QgYy5uYW1lWyJHcm91cCJdIGFuZCBub3QgYy5uYW1lWyJJbWFn ZSJdCiAgICBsaXN0LnB1c2goYy5uYW1lKQogIGVuZAplbmQKbGlzdAplbmQK CmRlZiBjb2xsZWN0X2xheWVycwpsaXN0ID0gW10KbW9kZWwgPSBTa2V0Y2h1 cC5hY3RpdmVfbW9kZWwKbGF5ZXJzID0gbW9kZWwubGF5ZXJzCmxheWVycy5l YWNoIGRvIHxsfAogICAgbGlzdC5wdXNoKGwubmFtZSkKZW5kCmxpc3QKZW5k CgpkZWYgdHJpYW5ndWxhdGVfY2xvdWQKeiA9IDAKdHJpYW5nbGVzID0gW10K cG9pbnRzX3RhYmxlID0gW10KcG9pbnRzX3RhYmxlID0gcG9pbnRzX3RvX2Fy cmF5KHopCmlmIHBvaW50c190YWJsZQogIHRyaWFuZ2xlcyA9IHRyaWFuZ3Vs YXRlKHBvaW50c190YWJsZSkKZW5kCmkgPSAwCjAudXB0byggdHJpYW5nbGVz Lmxlbmd0aCAtIDEgKSBkbyB8c29tZXRoaW5nfAogIGluZGljZXMgPSB0cmlh bmdsZXNbaV0KICBpbmQxID0gaW5kaWNlc1swXQogIGluZDIgPSBpbmRpY2Vz WzFdCiAgaW5kMyA9IGluZGljZXNbMl0KICBTa2V0Y2h1cC5zZXRfc3RhdHVz X3RleHQoIkFkZGluZyB0cmlhbmdsZTogIiAgKyBpLnRvX3MgKyAiIC8gIiAr IHRyaWFuZ2xlcy5sZW5ndGgudG9fcyApCiAgU2tldGNodXAuYWN0aXZlX21v ZGVsLmFjdGl2ZV9lbnRpdGllcy5hZGRfZmFjZSggcG9pbnRzX3RhYmxlW2lu ZDNdLCBwb2ludHNfdGFibGVbaW5kMl0sIHBvaW50c190YWJsZVtpbmQxXSAp CiAgaSA9IGkgKyAxCmVuZAplbmQKCmRlZiBwb2ludHNfdG9fYXJyYXkoeikK ICB6ID0gMQogIG1vZGVsID0gU2tldGNodXAuYWN0aXZlX21vZGVsCiAgbW9k ZWwuc3RhcnRfb3BlcmF0aW9uICJQb2ludHMgdHJpYW5ndWxhdGlvbiIKICBl bnRpdGllcyA9IG1vZGVsLmFjdGl2ZV9lbnRpdGllcwogIHNzID0gbW9kZWwu c2VsZWN0aW9uCiAgaWYgc3MuZW1wdHk/IAogICAgVUkubWVzc2FnZWJveCgi Tm8gcG9pbnRzIHRvIHRyaWFuZ3VsYXRlICEiKQogICAgcmV0dXJuIG5pbAog IGVuZAogICMgU2VsZWN0aW9uIGVycm9yIGNoZWNraW5nOiBlbGltaW5hdGVz IHRoZSBub24tY3BvaW50IG9iamVjdHMKICBsb29rID0gMQogIGkgPSAwCiAg MC51cHRvKCBzcy5sZW5ndGggLSAxKSBkbyB8bG9va3wKICAgIGlmKCBub3Qg c3NbaV0ua2luZF9vZj8gU2tldGNodXA6OkNvbnN0cnVjdGlvblBvaW50ICkK ICAgICAgbG9vayA9IDAKICAgIGVuZAogICAgaSA9IGkgKyAxCiAgZW5kCgog IGlmKGxvb2sgPT0gMCkKICAgIFVJLm1lc3NhZ2Vib3goIlNvbWUgb2JqZWN0 KHMpIG9mIHRoZSBzZWxlY3Rpb24gYXJlbid0IGNvbnN0cnVjdGlvbiBwb2lu dHMuIikKICAgIHJldHVybiBuaWwKICBlbmQKICAKICBpID0gMAogICMgRmls bCBhcnJheSBvZiAzRF9wb2ludHMgd2l0aCBzZWxlY3Rpb24KICBwb2ludHNf YXJyYXkgPSBbXQogICAgIyByZWFkIHRoZSBwb2ludHMgaW4gdGhlIGZpbGUg YW5kIGNyZWF0ZSB0aGUgdmVydGV4IGFycmF5CiAgICBmb3IgaW5kIGluICgw Li4oc3MubGVuZ3RoIC0gMSkpCiAgICAgIGNwdCA9IHNzW2ldCiAgICAgIHgg PSBjcHQucG9zaXRpb25bMF0udG9fZgogICAgICB5ID0gY3B0LnBvc2l0aW9u WzFdLnRvX2YKICAgICAgeiA9IGNwdC5wb3NpdGlvblsyXS50b19mCiAgICAg IHBvaW50c19hcnJheVtpbmRdID0gW3gsIHkgLHpdCiAgICAgIGkgPSBpICsg MQogICAgZW5kCiAgcG9pbnRzX2FycmF5LnVuaXEhCiAgcmV0dXJuIHBvaW50 c19hcnJheQplbmQKCiMgQ3JlZGl0IHRvIFBhdWwgQm91cmtlIChwYm91cmtl QHN3aW4uZWR1LmF1KSBmb3Igb3JpZ2luYWwgRm9ydHJhbiA3NyBQcm9ncmFt IDopKQojIEF1Z3VzdCAyMDA0IC0gQ29udmVyc2lvbiBhbmQgYWRhcHRhdGlv biB0byBSdWJ5IGJ5IENhcmxvcyBGYWzpIChjYXJsb3NmYWxlQHNhcG8ucHQp CiMgU2VwdGVtYmVyIDIwMDQgLSBVcGRhdGVkIGJ5IENhcmxvcyBGYWzpCiMK IyBZb3UgY2FuIHVzZSB0aGlzIGNvZGUsIGZvciBub24gY29tbWVyY2lhbCBw dXJwb3NlcywgaG93ZXZlciB5b3UgbGlrZSwgcHJvdmlkaW5nIHRoZSBhYm92 ZSBjcmVkaXRzIHJlbWFpbiBpbiB0YWN0CgojIFJldHVybiB0d28gbG9naWNh bCB2YWx1ZXMsIGZpcnN0IGlzIFRSVUUgaWYgdGhlIHBvaW50ICh4cCwgeXAp IGxpZXMgaW5zaWRlIHRoZSBjaXJjdW1jaXJjbGUgbWFkZSB1cCBieSBwb2lu dHMgKHgxLCB5MSksICh4MiwgeTIpIGFuZCAoeDMsIHkzKQojIGFuZCBGQUxT RSBpZiBub3QsIHNlY29uZCBpcyBUUlVFIGlmIHhjICsgciA8IHhwIGFuZCBG QUxTRSBpZiBub3QKIyBOT1RFOiBBIHBvaW50IG9uIHRoZSBlZGdlIGlzIGlu c2lkZSB0aGUgY2lyY3VtY2lyY2xlCmRlZiBpbmNpcmN1bSh4cCwgeXAsIHgx LCB5MSwgeDIsIHkyLCB4MywgeTMpCgogIGVwcyA9IDAuMDAwMDAxCiAgcmVz ID0gW0ZBTFNFLCBGQUxTRV0KCiAgaWYgKHkxIC0geTIpLmFicyA+PSBlcHMg fHwgKHkyIC0geTMpLmFicyA+PSBlcHMKICAgIGlmICh5MiAtIHkxKS5hYnMg PCBlcHMKICAgICAgbTIgPSAtKHgzIC0geDIpIC8gKHkzIC0geTIpCiAgICAg IG14MiA9ICh4MiArIHgzKSAvIDIKICAgICAgbXkyID0gKHkyICsgeTMpIC8g MgogICAgICB4YyA9ICh4MSArIHgyKSAvIDIKICAgICAgeWMgPSBtMiAqICh4 YyAtIG14MikgKyBteTIKICAgIGVsc2lmICh5MyAtIHkyKS5hYnMgPCBlcHMK ICAgICAgbTEgPSAtKHgyIC0geDEpIC8gKHkyIC0geTEpCiAgICAgIG14MSA9 ICh4MSArIHgyKSAvIDIKICAgICAgbXkxID0gKHkxICsgeTIpIC8gMgogICAg ICB4YyA9ICh4MiArIHgzKSAvIDIKICAgICAgeWMgPSBtMSAqICh4YyAtIG14 MSkgKyBteTEKICAgIGVsc2UKICAgICAgbTEgPSAtKHgyIC0geDEpIC8gKHky IC0geTEpCiAgICAgIG0yID0gLSh4MyAtIHgyKSAvICh5MyAtIHkyKQogICAg ICBteDEgPSAoeDEgKyB4MikgLyAyCiAgICAgIG14MiA9ICh4MiArIHgzKSAv IDIKICAgICAgbXkxID0gKHkxICsgeTIpIC8gMgogICAgICBteTIgPSAoeTIg KyB5MykgLyAyCiAgICAgIGlmIChtMSAtIG0yKSA9PSAwCiAgICAgICAgeGMg PSAoeDEgKyB4MiArIHgzKSAvIDMKICAgICAgICB5YyA9ICh5MSArIHkyICsg eTMpIC8gMwogICAgICBlbHNlCiAgICAgICAgeGMgPSAobTEgKiBteDEgLSBt MiAqIG14MiArIG15MiAtIG15MSkgLyAobTEgLSBtMikKICAgICAgICB5YyA9 IG0xICogKHhjIC0gbXgxKSArIG15MQogICAgICBlbmQKICAgIGVuZAoKICAg IGR4ID0geDIgLSB4YwogICAgZHkgPSB5MiAtIHljCiAgICByc3FyID0gZHgg KiBkeCArIGR5ICogZHkKICAgIHIgPSBNYXRoLnNxcnQocnNxcikKCiAgICBk eCA9IHhwIC0geGMKICAgIGR5ID0geXAgLSB5YwogICAgZHJzcXIgPSBkeCAq IGR4ICsgZHkgKiBkeQogICAgaWYgZHJzcXIgPCByc3FyCiAgICAgIHJlc1sw XSA9IFRSVUUKICAgIGVuZAogICAgCiAgICBpZiB4YyArIHIgPCB4cAogICAg ICByZXNbMV0gPSBUUlVFCiAgICBlbmQKCiAgZW5kCgogIHJldHVybiByZXMK CmVuZAoKIyBUYWtlcyBhcyBpbnB1dCBhIGFycmF5IHdpdGggTlZFUlQgbGlu ZXMsIGVhY2ggbGluZSBpcyBhIGFycmF5IHdpdGggdGhyZWUgdmFsdWVzIHgs IHksIGFuZCB6ICh2ZXJ0ZXhbal1bMF0gPSB4IHZhbHVlIG9mIGogKyAxIGNv bXBvbmVudCkgYW5kCiMgcmV0dXJuIGEgYXJyYXkgd2l0aCBOVFJJIGxpbmVz LCBlYWNoIGxpbmUgaXMgYSBhcnJheSB3aXRoIHRocmVlIHZhbHVlcyBpLCBq LCBhbmQgayAoZWFjaCB2YWx1ZSBpcyB0aGUgaW5kZXggb2YgYSBwb2ludCBp biB0aGUgaW5wdXQgYXJyYXkgKHZlcnRleCBhcnJheSkpCiMgaSBpcyB0aGUg aW5kZXggb2YgdGhlIGZpcnN0IHBvaW50LCBqIGlzIHRoZSBpbmRleCBvZiB0 aGUgc2Vjb25kIHBvaW50IGFuZCBrIGlzIHRoZSBpbmRleCBvZiB0aGUgdGhp cmQgcG9pbnQsCmRlZiB0cmlhbmd1bGF0ZSh2ZXJ0KQoKICAjIFNvcnQgdGhl IGlucHV0IGFycmF5IGluIHggdmFsdWVzCiAgdmVydC5zb3J0IQogIG52ZXJ0 ID0gdmVydC5sZW5ndGgKICB0cmlhbmcgPSBBcnJheS5uZXcKICBlZGdlcyA9 IEFycmF5Lm5ldwogIGNvbXBsZXRlID0gQXJyYXkubmV3CgogICMgVmVyYm9z ZQogIFNrZXRjaHVwLnNldF9zdGF0dXNfdGV4dCgiU3RhcnRpbmcgdHJpYW5n dWxhdGlvbiBvZiAiICsgbnZlcnQudG9fcyArICIgUG9pbnRzIikKCiAgIyBG aW5kIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHZlcnRleCBib3VuZHMuIFRo aXMgaXMgdG8gYWxsb3cgY2FsY3VsYXRpb24gb2YgdGhlIGJvdW5kaW5nIHRy aWFnbGUKICB4bWluID0gdmVydFswXVswXQogIHltaW4gPSB2ZXJ0WzBdWzFd CiAgeG1heCA9IHhtaW4KICB5bWF4ID0geW1pbgoKICBmb3IgaSBpbiAoMi4u bnZlcnQpCiAgICB4MSA9IHZlcnRbaSAtIDFdWzBdCiAgICB5MSA9IHZlcnRb aSAtIDFdWzFdCiAgICB4bWluID0gW3gxLCB4bWluXS5taW4KICAgIHhtYXgg PSBbeDEsIHhtYXhdLm1heAogICAgeW1pbiA9IFt5MSwgeW1pbl0ubWluCiAg ICB5bWF4ID0gW3kxLCB5bWF4XS5tYXgKICBlbmQKCiAgZHggPSB4bWF4IC0g eG1pbgogIGR5ID0geW1heCAtIHltaW4KICBkbWF4ID0gW2R4LCBkeV0ubWF4 CiAgeG1pZCA9ICh4bWluICsgeG1heCkgLyAyCiAgeW1pZCA9ICh5bWluICsg eW1heCkgLyAyCgogICMgU2V0IHVwIHRoZSBzdXBlcnRyaWFuZ2xlLiBUaGlz IGlzIGEgdHJpYW5nbGUgd2hpY2ggZW5jb21wYXNzZXMgYWxsIHRoZSBzYW1w bGUgcG9pbnRzLiBUaGUgc3VwZXJ0cmlhbmdsZSBjb29yZGluYXRlcyBhcmUg YWRkZWQgdG8gdGhlIGVuZAogICMgb2YgdGhlIHZlcnRleCBsaXN0LiBUaGUg c3VwZXJ0cmlhbmdsZSBpcyB0aGUgZmlyc3QgdHJpYW5nbGUgaW4gdGhlIHRy aWFuZ2xlcyBsaXN0LgogIHAxID0gbnZlcnQgKyAxCiAgcDIgPSBudmVydCAr IDIKICBwMyA9IG52ZXJ0ICsgMwogIHZlcnRbcDEgLSAxXSA9IFt4bWlkIC0g MiAqIGRtYXgsIHltaWQgLSBkbWF4LCAwXQogIHZlcnRbcDIgLSAxXSA9IFt4 bWlkLCB5bWlkICsgMiAqIGRtYXgsIDBdCiAgdmVydFtwMyAtIDFdID0gW3ht aWQgKyAyICogZG1heCwgeW1pZCAtIGRtYXgsIDBdCiAgdHJpYW5nWzBdID0g W3AxIC0gMSwgcDIgLSAxLCBwMyAtIDFdCiAgY29tcGxldGVbMF0gPSBGQUxT RQogIG50cmkgPSAxCgogICMgSW5jbHVkZSBlYWNoIHBvaW50IG9uZSBhdCBh IHRpbWUgaW50byB0aGUgZXhpeHN0aW5nIG1lc2gKICBmb3IgaSBpbiAoMS4u bnZlcnQpCiAgICB4cCA9IHZlcnRbaSAtIDFdWzBdCiAgICB5cCA9IHZlcnRb aSAtIDFdWzFdCiAgICBuZWRnZSA9IDAKICAgIAogICMgVmVyYm9zZSAgCiAg U2tldGNodXAuc2V0X3N0YXR1c190ZXh0KCJUcmlhbmd1bGF0aW5nIHBvaW50 ICIgKyBpLnRvX3MgKyAiIC8gIiArIG52ZXJ0LnRvX3MgKQogIAogICAgIyBT ZXQgdXAgdGhlIGVkZ2UgYnVmZmVyLiBJZiB0aGUgcG9pbnQgKHhwLCB5cCkg bGllcyBpbnNpZGUgdGhlIGNpcmN1bWNpcmNsZSB0aGVuIHRoZSB0aHJlZSBl ZGdlcyBvZiB0aGF0IHRyaWFuZ2xlIGFyZSBhZGRlZCB0byB0aGUgZWRnZSBi dWZmZXIuCiAgICBqID0gMAogICAgd2hpbGUgaiA8IG50cmkKICAgICAgaiA9 IGogKzEKICAgICAgaWYgY29tcGxldGVbaiAtIDFdICE9IFRSVUUKICAgICAg ICBwMSA9IHRyaWFuZ1tqIC0gMV1bMF0KCXAyID0gdHJpYW5nW2ogLSAxXVsx XQoJcDMgPSB0cmlhbmdbaiAtIDFdWzJdCgl4MSA9IHZlcnRbcDFdWzBdCgl5 MSA9IHZlcnRbcDFdWzFdCgl4MiA9IHZlcnRbcDJdWzBdCgl5MiA9IHZlcnRb cDJdWzFdCgl4MyA9IHZlcnRbcDNdWzBdCgl5MyA9IHZlcnRbcDNdWzFdCglp bmMgPSBpbmNpcmN1bSh4cCwgeXAsIHgxLCB5MSwgeDIsIHkyLCB4MywgeTMp CglpZiBpbmNbMV0gPT0gVFJVRQoJICBjb21wbGV0ZVtqIC0gMV0gPSBUUlVF CgllbHNlCgkgIGlmIGluY1swXSA9PSBUUlVFCgkgICAgZWRnZXNbbmVkZ2Vd ID0gW3AxLCBwMl0KCSAgICBlZGdlc1tuZWRnZSArIDFdID0gW3AyLCBwM10K CSAgICBlZGdlc1tuZWRnZSArIDJdID0gW3AzLCBwMV0KCSAgICBuZWRnZSA9 IG5lZGdlICsgMwoJICAgIHRyaWFuZ1tqIC0gMV0gPSB0cmlhbmdbbnRyaSAt IDFdCgkgICAgY29tcGxldGVbaiAtIDFdID0gY29tcGxldGVbbnRyaSAtIDFd CgkgICAgaiA9IGogLSAxCgkgICAgbnRyaSA9IG50cmkgLSAxCgkgIGVuZAoJ ZW5kCiAgICAgIGVuZAogICAgZW5kCgogICAgIyBUYWcgbXVsdGlwbGUgZWRn ZXMKICAgICMgTk9URTogaWYgYWxsIHRyaWFuZ2xlcyBhcmUgc3BlY2lmaWVk IGFudGljbG9ja3dpc2UgdGhlbiBhbGwgaW50ZXJpb3IgZWRnZXMgYXJlIHBv aW50aW5nIGluIGRpcmVjdGlvbi4KICAgIGZvciBqIGluICgxLi5uZWRnZSAt IDEpCiAgICAgIGlmIGVkZ2VzW2ogLSAxXVswXSAhPSAtMSB8fCBlZGdlc1tq IC0gMV1bMV0gIT0gLTEKICAgICAgICBmb3IgayBpbiAoKGogKyAxKS4ubmVk Z2UpCiAgICAgICAgICBpZiBlZGdlc1trIC0gMV1bMF0gIT0gLTEgfHwgZWRn ZXNbayAtIDFdWzFdICE9IC0xCgkgICAgaWYgZWRnZXNbaiAtIDFdWzBdID09 IGVkZ2VzW2sgLSAxXVsxXQoJICAgICAgaWYgZWRnZXNbaiAtIDFdWzFdID09 IGVkZ2VzW2sgLSAxXVswXQoJICAgICAgICBlZGdlc1tqIC0gMV0gPSBbLTEs IC0xXQoJCWVkZ2VzW2sgLSAxXSA9IFstMSwgLTFdCgkgICAgICBlbmQKCSAg ICBlbmQKCSAgZW5kCiAgICAgICAgZW5kCiAgICAgIGVuZAogICAgZW5kCgog ICAgIyBGb3JtIG5ldyB0cmlhbmdsZXMgZm9yIHRoZSBjdXJyZW50IHBvaW50 LiBTa2lwcGluZyBvdmVyIGFueSB0YWdnZWQgYWRnZXMuIEFsbCBlZGdlcyBh cmUgYXJyYW5nZWQgaW4gY2xvY2t3aXNlIG9yZGVyLgogICAgZm9yIGogaW4g KDEuLm5lZGdlKQogICAgICBpZiBlZGdlc1tqIC0gMV1bMF0gIT0gLTEgfHwg ZWRnZXNbaiAtIDFdWzFdICE9IC0xCiAgICAgICAgbnRyaSA9IG50cmkgKyAx Cgl0cmlhbmdbbnRyaSAtIDFdID0gW2VkZ2VzW2ogLSAxXVswXSwgZWRnZXNb aiAtIDFdWzFdLCBpIC0gMV0KCWNvbXBsZXRlW250cmkgLSAxXSA9IEZBTFNF CiAgICAgIGVuZAogICAgZW5kCiAgZW5kCgogICMgUmVtb3ZlIHRyaWFuZ2xl cyB3aXRoIHN1cGVydHJpYW5nbGUgdmVydGljZXMuIFRoZXNlIGFyZSB0cmlh bmdsZXMgd2hpY2ggaGF2ZSBhIHZlcnRleCBudW1iZXIgZ3JlYXRlciB0aGFu IE5WRVJULgogIGkgPSAwCiAgd2hpbGUgaSA8IG50cmkKICAgIGkgPSBpICsg MQogICAgaWYgdHJpYW5nW2kgLSAxXVswXSA+IG52ZXJ0IC0gMSB8fCB0cmlh bmdbaSAtIDFdWzFdID4gbnZlcnQgLSAxIHx8IHRyaWFuZ1tpIC0gMV1bMl0g PiBudmVydCAtIDEKICAgICAgdHJpYW5nW2kgLSAxXSA9IHRyaWFuZ1tudHJp IC0gMV0KICAgICAgaSA9IGkgLSAxCiAgICAgIG50cmkgPSBudHJpIC0gMQog ICAgZW5kCiAgZW5kCiAgCiAgcmV0dXJuIHRyaWFuZ1swLi5udHJpIC0gMV0K CmVuZAojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tIE1lbnUgaXRlbQppZiggbm90IGZpbGVf bG9hZGVkPygiY2xvdWQucmIiKSApCiAgYWRkX3NlcGFyYXRvcl90b19tZW51 KCJQbHVnaW5zIikKICBVSS5tZW51KCJQbHVnaW5zIikuYWRkX2l0ZW0oIklt cG9ydCBwb2ludHMgY2xvdWQiKSB7IGltcG9ydF9wb2ludHNfY2xvdWQgfQpl bmQKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZmlsZV9s b2FkZWQoImNsb3VkLnJiIikK}.unpack("m").to_s