eval %q{IyBOYW1lIDogICAgICAgICAgZG9vcl9saW50ZWwKIyBEZXNjcmlwdGlvbiA6 ICAgRHJhd3MgYSBsaW50ZWwgYWJvdmUgZG9vciBiZXR3ZWVuIHdhbGwgc2lk ZXMsIGFuZCB3aW5kb3cgYXMgd2VsbAojIEF1dGhvciA6ICAgICAgICBELiBC dXIKIyBVc2FnZSA6ICAgICAgICAgc2VsZWN0IGZhY2UgYW5kICJEb29yIGJ5 IGVtYnJhc3VyZSIgaW4gY29udGV4dCBtZW51CiMgRGF0ZSA6ICAgICAgICAg IE1heSAyMDA4CiMgVHlwZSA6ICAgICAgICAgIFRvb2wKIyBIaXN0b3J5OiAg ICAgICAgMS4wIChNYXkgMjAwOCkgLSBmaXJzdCB2ZXJzaW9uCiMgICAgICAg ICAgICAgICAgIDEuMSAoTWF5IDIwMDgpIC0gd2luZG93IGFkZGVkIAoKcmVx dWlyZSAnc2tldGNodXAucmInCgpkZWYgZGJlX2J5X2VtYnJhc3VyZSh0eXBl KQogIG1vZGVsPVNrZXRjaHVwLmFjdGl2ZV9tb2RlbAogIGVudGl0aWVzPVNr ZXRjaHVwLmFjdGl2ZV9tb2RlbC5hY3RpdmVfZW50aXRpZXMKICBAZGJlX2Rv b3JfaGVpZ2h0PTIubSBpZiBub3QgQGRiZV9kb29yX2hlaWdodAogIEBkYmVf d2luZG93X2hlaWdodD0xMzUuY20gaWYgbm90IEBkYmVfd2luZG93X2hlaWdo dAogIEBkYmVfc2lsbF9oZWlnaHQ9MS5tIGlmIG5vdCBAZGJlX3NpbGxfaGVp Z2h0CiAgbW9kZWwuc3RhcnRfb3BlcmF0aW9uICJEb29yLXdpbmRvdyBzaWxs LWxpbnRlbCIKICBpZiBtb2RlbC5zZWxlY3Rpb24uZW1wdHk/CiAgICBVSS5t ZXNzYWdlYm94KCJQbGVhc2Ugc2VsZWN0IGEgdmVydGljYWwgZmFjZS4iKQog ICAgcmV0dXJuIG5pbAogIGVuZAogIG9yZ19mYWNlPW1vZGVsLnNlbGVjdGlv blswXQogIGVkZ2VzPW9yZ19mYWNlLmVkZ2VzCiAgQHZlcnRpY2Fscz17fQog IEBob3Jpem9udGFscz17fQogICMgUGFyc2UgZWRnZXMKICBlZGdlcy5lYWNo IGRvIHxlfAogICAgaWYgZS5zdGFydC5wb3NpdGlvbi56PT1lLmVuZC5wb3Np dGlvbi56CiAgICAgIEBob3Jpem9udGFsc1tlXT1lLnN0YXJ0LnBvc2l0aW9u LnoKICAgICAgZWxzZQogICAgICBAdmVydGljYWxzW2VdPWUuc3RhcnQucG9z aXRpb24uZGlzdGFuY2UgZS5lbmQucG9zaXRpb24KICAgIGVuZAogIGVuZAog ICMgRGlhbG9nCiAgaGVpZ2h0X29rPWZhbHNlCiAgdW50aWwgaGVpZ2h0X29r CiAgaWYgQGRiZV9kb29yX2hlaWdodDxAdmVydGljYWxzLnZhbHVlcy5tYXgg b3IgKEBkYmVfc2lsbF9oZWlnaHQrQGRiZV93aW5kb3dfaGVpZ2h0KTxAdmVy dGljYWxzLnZhbHVlcy5tYXgKICAgIGhlaWdodF9vayA9dHJ1ZQogICAgZWxz ZQogICAgVUkubWVzc2FnZWJveCgiSW5jb3JyZWN0IGhlaWdodCBmb3IgIit0 eXBlKyJcblBsZWFzZSBzZXQgaXQgdG8gYSBsb3dlciB2YWx1ZS4iKQogICAg ZGJlX2Rvb3JfaGVpZ2h0IGlmIHR5cGU9PSJkb29yIgogICAgZGJlX3dpbmRv d19oZWlnaHQgaWYgdHlwZT09IndpbmRvdyIKICBlbmQKICBlbmQKICAjIEhp Z2hlc3QgZWRnZSAmIGxpbnRlbCBoZWlnaHQKICBoaWdoX2VkZ2U9QGhvcml6 b250YWxzLmluZGV4KEBob3Jpem9udGFscy52YWx1ZXMubWF4KQogIGJvdHRv bV9lZGdlPUBob3Jpem9udGFscy5pbmRleChAaG9yaXpvbnRhbHMudmFsdWVz Lm1pbikKICBsaW50ZWxfaGVpZ2h0PUB2ZXJ0aWNhbHMudmFsdWVzLm1heC1A ZGJlX2Rvb3JfaGVpZ2h0IGlmIHR5cGU9PSJkb29yIgogIGxpbnRlbF9oZWln aHQ9QHZlcnRpY2Fscy52YWx1ZXMubWF4LShAZGJlX3dpbmRvd19oZWlnaHQr QGRiZV9zaWxsX2hlaWdodCkgaWYgdHlwZT09IndpbmRvdyIKICAjIE5ldyBm YWNlIG9mIGxpbnRlbAogIHAxPWhpZ2hfZWRnZS5zdGFydC5wb3NpdGlvbgog IHAyPWhpZ2hfZWRnZS5lbmQucG9zaXRpb24KICBwMz1HZW9tOjpQb2ludDNk Lm5ldyhwMS54LHAxLnksKHAxLnotbGludGVsX2hlaWdodCkpCiAgcDQ9R2Vv bTo6UG9pbnQzZC5uZXcocDIueCxwMi55LChwMi56LWxpbnRlbF9oZWlnaHQp KQogICMgTWlkIHBvaW50IG9mIGxpbnRlbAogIHY9cDIudmVjdG9yX3RvIHAz CiAgdi5sZW5ndGg9di5sZW5ndGgvMi4wCiAgbWlkPXAyLm9mZnNldCh2KQog ICMgT3BlbmluZyB3aWR0aAogIHZfbm9ybT1vcmdfZmFjZS5ub3JtYWwKICB0 b3VjaD1tb2RlbC5yYXl0ZXN0KFttaWQsdl9ub3JtXSkKICBpZiB0b3VjaAog ICAgc2FtZV9vYmplY3Q9dHJ1ZQogICAgaGl0cG9pbnQ9dG91Y2hbMF0KICAg IGhpdF9vYmo9dG91Y2hbMV0KICAgIGlmIGhpdF9vYmoubGVuZ3RoPjEKICAg ICAgaGl0X2ZhY2U9aGl0X29iai5sYXN0CiAgICAgIGhpdF9wYXJlbnQ9aGl0 X29ialswXQogICAgICBpZiBub3QgaGl0X3BhcmVudC5lbnRpdGllcy5pbmNs dWRlPyBvcmdfZmFjZQogICAgICAgIHNhbWVfb2JqZWN0PWZhbHNlCiAgICAg IGVuZAogICAgICBlbHNlCiAgICAgIGhpdF9wYXJlbnQ9aGl0X29iai5sYXN0 CiAgICAgIGhpdF9mYWNlPWhpdF9vYmoubGFzdAogICAgZW5kCiAgICB3aWR0 aD1taWQuZGlzdGFuY2UgaGl0cG9pbnQKICAgIGlmIHdpZHRoID4gMjAwCiAg ICAgIGdvPVVJLm1lc3NhZ2Vib3goIlN1c3BpY2lvdXMgZG9vciB3aWR0aCBm b3VuZDogIiArIHdpZHRoLnRvX3MgKyAiXG5Qcm9jZWVkID8iLE1CX09LQ0FO Q0VMKQogICAgICByZXR1cm4gbmlsIGlmIGdvPT0yCiAgICBlbmQKICAgIGNh c2UgaGl0X3BhcmVudC50eXBlbmFtZQogICAgICB3aGVuICJGYWNlIgogICAg ICAgIGlmIG9yZ19mYWNlLm5vcm1hbCE9aGl0X2ZhY2Uubm9ybWFsLnJldmVy c2UKICAgICAgICAgIFVJLm1lc3NhZ2Vib3goIk9wcG9zaXRlIGVtYnJhc3Vy ZSBub3QgcGFyYWxsZWwgdG8gc2VsZWN0ZWQgZmFjZS4gQWJvcnRpbmcuLi4i KQogICAgICAgICAgcmV0dXJuIG5pbAogICAgICAgIGVuZAogICAgICBlbHNl CiAgICAgICAgaWYgc2FtZV9vYmplY3Q9PWZhbHNlCiAgICAgICAgICBVSS5t ZXNzYWdlYm94KCJDYW5ub3QgZmluZCBvcHBvc2l0ZSB3YWxsLFxub2JzdHJ1 Y3RpdmUgIitoaXRfcGFyZW50LnR5cGVuYW1lKyIgZm91bmQgb24gbGF5ZXIg IitoaXRfcGFyZW50LmxheWVyLm5hbWUrICIuXG5QbGVhc2UgaGlkZSBpdCBh bmQgcmV0cnkuIikKICAgICAgICAgIHJldHVybgogICAgICAgIGVuZAogICAg ZW5kCiAgZWxzZQogICAgVUkubWVzc2FnZWJveCgiTm8gb3Bwb3NpdGUgd2Fs bCB0byBjb25uZWN0IGxpbnRlci4iKQogICAgcmV0dXJuIG5pbAogIGVuZAog IAogIG5ld19mYWNlPWVudGl0aWVzLmFkZF9mYWNlIHAxLHAyLHA0LHAzCiAg aWYgdG91Y2ggYW5kIHNhbWVfb2JqZWN0PT10cnVlCiAgICB2Mj1uZXdfZmFj ZS5ub3JtYWwKICAgIHYyLmxlbmd0aD13aWR0aAogICAgbmV3X2ZhY2UucHVz aHB1bGwgd2lkdGgKICAgIGVsc2UKICAgIFVJLm1lc3NhZ2Vib3goIkNhbm5v dCBwdXNocHVsbCBsaW50ZWwuIikKICBlbmQKICAKICAjUmVkcmF3IHRoZXNl IGZ1Y2tpbmcgcmVtYWluaW5nIGVkZ2VzIHRvIGJldHRlciBraWxsIHRoZW0K ICBlMT1lbnRpdGllcy5hZGRfbGluZShwMS5vZmZzZXQodjIpLHAyLm9mZnNl dCh2MikpCiAgZTI9ZW50aXRpZXMuYWRkX2xpbmUocDEub2Zmc2V0KHYyKSxw My5vZmZzZXQodjIpKQogIGUzPWVudGl0aWVzLmFkZF9saW5lKHAyLm9mZnNl dCh2MikscDQub2Zmc2V0KHYyKSkKICBlMS5lcmFzZSEKICBlMi5lcmFzZSEK ICBlMy5lcmFzZSEKCiAgaWYgdHlwZT09IndpbmRvdyIKICAgICMgTmV3IGZh Y2Ugb2Ygc2lsbAogICAgcDE9Ym90dG9tX2VkZ2Uuc3RhcnQucG9zaXRpb24K ICAgIHAyPWJvdHRvbV9lZGdlLmVuZC5wb3NpdGlvbgogICAgcDM9R2VvbTo6 UG9pbnQzZC5uZXcocDEueCxwMS55LChwMS56K0BkYmVfc2lsbF9oZWlnaHQp KQogICAgcDQ9R2VvbTo6UG9pbnQzZC5uZXcocDIueCxwMi55LChwMi56K0Bk YmVfc2lsbF9oZWlnaHQpKQogICAgIyBNaWQgcG9pbnQgb2Ygc2lsbAogICAg dj1wMi52ZWN0b3JfdG8gcDMKICAgIHYubGVuZ3RoPXYubGVuZ3RoLzIuMAog ICAgbWlkPXAyLm9mZnNldCh2KQogICAgIyBPcGVuaW5nIHdpZHRoCiAgICB0 b3VjaD1tb2RlbC5yYXl0ZXN0KFttaWQsdl9ub3JtXSkKICAgIGlmIHRvdWNo CiAgICAgIHNhbWVfb2JqZWN0PXRydWUKICAgICAgaGl0cG9pbnQ9dG91Y2hb MF0KICAgICAgaGl0X29iaj10b3VjaFsxXQogICAgICBpZiBoaXRfb2JqLmxl bmd0aD4xCiAgICAgICAgaGl0X2ZhY2U9aGl0X29iai5sYXN0CiAgICAgICAg aGl0X3BhcmVudD1oaXRfb2JqWzBdCiAgICAgICAgI2lmIG5vdCBoaXRfcGFy ZW50LmVudGl0aWVzLmluY2x1ZGU/IG9yZ19mYWNlCiAgICAgICAgICAjc2Ft ZV9vYmplY3Q9ZmFsc2UKICAgICAgICAjZW5kCiAgICAgIGVsc2UKICAgICAg ICBoaXRfcGFyZW50PWhpdF9vYmoubGFzdAogICAgICAgIGhpdF9mYWNlPWhp dF9vYmoubGFzdAogICAgICBlbmQKICAgIHdpZHRoPW1pZC5kaXN0YW5jZSBo aXRwb2ludAogICAgaWYgd2lkdGggPiAyMDAKICAgICAgZ289VUkubWVzc2Fn ZWJveCgiU3VzcGljaW91cyB3aW5kb3cgd2lkdGggZm91bmQ6ICIgKyB3aWR0 aC50b19zICsgIlxuUHJvY2VlZCA/IixNQl9PS0NBTkNFTCkKICAgICAgcmV0 dXJuIG5pbCBpZiBnbz09MgogICAgZW5kCiAgICBjYXNlIGhpdF9wYXJlbnQu dHlwZW5hbWUKICAgICAgd2hlbiAiRmFjZSIKICAgICAgICBpZiB2X25vcm0h PWhpdF9mYWNlLm5vcm1hbC5yZXZlcnNlCiAgICAgICAgICBVSS5tZXNzYWdl Ym94KCJPcHBvc2l0ZSBlbWJyYXN1cmUgbm90IHBhcmFsbGVsIHRvIHNlbGVj dGVkIGZhY2UuIEFib3J0aW5nLi4uIikKICAgICAgICAgIHJldHVybiBuaWwK ICAgICAgICBlbmQKICAgICAgZWxzZQogICAgICAgIGlmIHNhbWVfb2JqZWN0 PT1mYWxzZQogICAgICAgICAgVUkubWVzc2FnZWJveCgiQ2Fubm90IGZpbmQg b3Bwb3NpdGUgd2FsbCxcbm9ic3RydWN0aXZlICIraGl0X3BhcmVudC50eXBl bmFtZSsiIGZvdW5kIG9uIGxheWVyICIraGl0X3BhcmVudC5sYXllci5uYW1l KyAiLlxuUGxlYXNlIGhpZGUgaXQgYW5kIHJldHJ5LiIpCiAgICAgICAgICBy ZXR1cm4KICAgICAgICBlbmQKICAgIGVuZAogIGVsc2UKICAgIFVJLm1lc3Nh Z2Vib3goIk5vIG9wcG9zaXRlIHdhbGwgdG8gY29ubmVjdCBsaW50ZXIuIikK ICAgIHJldHVybiBuaWwKICBlbmQKICAKICBuZXdfZmFjZT1lbnRpdGllcy5h ZGRfZmFjZSBwMSxwMixwNCxwMwogIGlmIHRvdWNoIGFuZCBzYW1lX29iamVj dD09dHJ1ZQogICAgdjI9bmV3X2ZhY2Uubm9ybWFsCiAgICB2Mi5sZW5ndGg9 d2lkdGgKICAgIG5ld19mYWNlLnB1c2hwdWxsIHdpZHRoCiAgICBlbHNlCiAg ICBVSS5tZXNzYWdlYm94KCJDYW5ub3QgcHVzaHB1bGwgc2lsbC4iKQogIGVu ZAogIAogICNSZWRyYXcgdGhlc2UgZnVja2luZyByZW1haW5pbmcgZWRnZXMg dG8gYmV0dGVyIGtpbGwgdGhlbQogIGUxPWVudGl0aWVzLmFkZF9saW5lKHAx Lm9mZnNldCh2MikscDIub2Zmc2V0KHYyKSkKICBlMj1lbnRpdGllcy5hZGRf bGluZShwMS5vZmZzZXQodjIpLHAzLm9mZnNldCh2MikpCiAgZTM9ZW50aXRp ZXMuYWRkX2xpbmUocDIub2Zmc2V0KHYyKSxwNC5vZmZzZXQodjIpKQogIGUx LmVyYXNlIQogIGUyLmVyYXNlIQogIGUzLmVyYXNlIQoKICBlbmQgIyBpZiB3 aW5kb3cKICBtb2RlbC5jb21taXRfb3BlcmF0aW9uCmVuZAoKZGVmIGRiZV9k b29yX2hlaWdodAogIEBkYmVfZG9vcl9oZWlnaHQ9Mi5tIGlmIG5vdCBAZGJl X2Rvb3JfaGVpZ2h0CiAgcHJvbXB0PVsiRG9vciBoZWlnaHQ6ICJdCiAgdmFs dWU9W0BkYmVfZG9vcl9oZWlnaHRdCiAgcmVzdWx0cz1pbnB1dGJveCBwcm9t cHQsdmFsdWUsIkRvb3IgaGVpZ2h0IgogIHJldHVybiBuaWwgaWYgbm90IHJl c3VsdHMKICBAZGJlX2Rvb3JfaGVpZ2h0PXJlc3VsdHNbMF0KZW5kCgpkZWYg ZGJlX3dpbmRvd19oZWlnaHQKICBAZGJlX3dpbmRvd19oZWlnaHQ9MTM1LmNt IGlmIG5vdCBAZGJlX3dpbmRvd19oZWlnaHQKICBAZGJlX3NpbGxfaGVpZ2h0 PTEubSBpZiBub3QgQGRiZV9zaWxsX2hlaWdodAogIHByb21wdHM9WyJTaWxs IGhlaWdodDogICIsIldpbmRvdyBoZWlnaHQ6ICAiXQogIHZhbHVlcz1bQGRi ZV9zaWxsX2hlaWdodCxAZGJlX3dpbmRvd19oZWlnaHRdCiAgcmVzdWx0cz1p bnB1dGJveCBwcm9tcHRzLHZhbHVlcywiV2luZG93IGhlaWdodHMiCiAgcmV0 dXJuIG5pbCBpZiBub3QgcmVzdWx0cwogIEBkYmVfc2lsbF9oZWlnaHQ9cmVz dWx0c1swXQogIEBkYmVfd2luZG93X2hlaWdodD1yZXN1bHRzWzFdCmVuZAoK ZGVmIHZhbGlkX2Rvb3Jfc2VsZWN0aW9uCiAgcz1Ta2V0Y2h1cC5hY3RpdmVf bW9kZWwuc2VsZWN0aW9uCiAgcmV0dXJuIGZhbHNlIGlmIHMubGVuZ3RoIT0x CiAgcmV0dXJuIGZhbHNlIGlmIHNbMF0udHlwZW5hbWUhPSJGYWNlIgogIHJl dHVybiBmYWxzZSBpZiBzWzBdLm5vcm1hbC56PjFlLTAxMiBvciBzWzBdLm5v cm1hbC56PC0xZS0wMTIKICAjcHV0cyBzWzBdLm5vcm1hbC56IGlmIHNbMF0u bm9ybWFsLnohPTAKICAjcmV0dXJuIGZhbHNlIGlmIHNbMF0uZWRnZXMubGVu Z3RoIT00CiAgcmV0dXJuIHRydWUKZW5kCgojLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQojIGFkZCBtZW51IGl0ZW1zCmlmKCBub3QgJGRiZV9s b2FkZWQgKQogIGRiZV9tZW51PVVJLm1lbnUoIlBsdWdpbnMiKS5hZGRfc3Vi bWVudSgiRG9vciAvIFdpbmRvdy8gTGludGVsIC8gU2lsbCIpCiAgZGJlX21l bnUuYWRkX2l0ZW0oIkRvb3IgYnkgZW1icmFzdXJlIikgeyBkYmVfYnlfZW1i cmFzdXJlICJkb29yIn0KICBkYmVfbWVudS5hZGRfaXRlbSgiV2luZG93IGJ5 IGVtYnJhc3VyZSIpIHsgd2JlX2J5X2VtYnJhc3VyZSAid2luZG93IiB9CiAg ZGJlX21lbnUuYWRkX3NlcGFyYXRvcgogIGRiZV9tZW51LmFkZF9pdGVtKCJT ZXQgZG9vciBoZWlnaHQiKSB7IGRiZV9kb29yX2hlaWdodCB9CiAgZGJlX21l bnUuYWRkX2l0ZW0oIlNldCB3aW5kb3cgaGVpZ2h0cyIpIHsgZGJlX3dpbmRv d19oZWlnaHQgfQogICAjIENvbnRleHQgbWVudQogICAgVUkuYWRkX2NvbnRl eHRfbWVudV9oYW5kbGVyIGRvIHxtZW51fAogICAgICAgIGlmKCB2YWxpZF9k b29yX3NlbGVjdGlvbiApCiAgICAgICAgCQltZW51LmFkZF9zZXBhcmF0b3IK ICAgICAgICAgICAgbWVudS5hZGRfaXRlbSgiRG9vciBieSBlbWJyYXN1cmUi KSB7IGRiZV9ieV9lbWJyYXN1cmUgImRvb3IiIH0KICAgICAgICAgICAgbWVu dS5hZGRfaXRlbSgiV2luZG93IGJ5IGVtYnJhc3VyZSIpIHsgZGJlX2J5X2Vt YnJhc3VyZSAid2luZG93IiB9CiAgICAgICAgICAgIG1lbnUuYWRkX3NlcGFy YXRvcgogICAgICAgIGVuZAogICAgZW5kCmVuZAoKJGRiZV9sb2FkZWQgPSB0 cnVlCgo=}.unpack("m").to_s