eval %q{IyBDb3B5cmlnaHQgMjAwNywgRGlkaWVyIEJ1cgojCiMgUGVybWlzc2lvbiB0 byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0 d2FyZSBmb3IgCiMgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhl cmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQojIGNvcHly aWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCiMgCiMgVEhJUyBT T0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBXSVRIT1VUIEFOWSBF WFBSRVNTIE9SCiMgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJ VEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKIyBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMg TmFtZSA6IEFsaWduIDJEIFRvb2wKIyBEZXNjcmlwdGlvbiA6IEEgdG9vbCB0 byBhbGlnbiBhIHNlbGVjdGlvbiBvZiBncm91cHMvY29tcG9uZW50cyBhbG9u ZyBhIGxpbmUgZGVmaW5lZCBieSAyIHBvaW50cy4KIyBNZW51IEl0ZW0gOiBU b29scyAvIEFsaWduIDJECiMgVXNhZ2UgOiAxLiBNYWtlIGEgc2VsZWN0aW9u IGZpcnN0CiMgICAgICAgICAyLiBDbGljayBhIHN0YXJ0IGFsaWduIGF4aXMs IGNsaWNrIGFuIGVuZCBhbGlnbiBheGlzCiMgRGF0ZSA6IDExIE1heSAyMDA3 CiMgVHlwZSA6IFRvb2wKIyBIaXN0b3J5OiAxMSBNYXkgMjAwNzogZmlyc3Qg dmVyc2lvbgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKcmVx dWlyZSAnc2tldGNodXAucmInCgptb2R1bGUgQWxpZ24yZAoKY2xhc3MgIEFs aWduMmRUb29sCgpkZWYgaW5pdGlhbGl6ZQogICAgQGlwMSA9IG5pbAogICAg QGlwMiA9IG5pbAogICAgQHhkb3duID0gMAogICAgQHlkb3duID0gMAogICAg JGFsaWduX3BvaW50cz1bXQogICAgQHNlbCA9IFNrZXRjaHVwLmFjdGl2ZV9t b2RlbC5zZWxlY3Rpb24KICAgIEBzdGF0ZSA9IDAKICAgIAogICAgaWYgQHNl bC5lbXB0eT8KICAgICAgVUkubWVzc2FnZWJveCgiTm8gc2VsZWN0aW9uIHRv IGFsaWduLiIpCiAgICAgIFNrZXRjaHVwLnNlbmRfYWN0aW9uICJzZWxlY3RT ZWxlY3Rpb25Ub29sOiIKICAgIGVuZAogICAgCiAgICBAc2VsLmVhY2ggZG8g fGVsdHwKICAgICAgaWYgZWx0LnR5cGVuYW1lICE9ICJHcm91cCIgYW5kIGVs dC50eXBlbmFtZSAhPSAiQ29tcG9uZW50SW5zdGFuY2UiCiAgICAgICAgQHNl bC5yZW1vdmUgZWx0CiAgICAgIGVuZAogICAgZW5kCiAgICBAbXJvX2F4ZXMg PSBTa2V0Y2h1cC5hY3RpdmVfbW9kZWwucmVuZGVyaW5nX29wdGlvbnNbIkRp c3BsYXlJbnN0YW5jZUF4ZXMiXQogICAgU2tldGNodXAuYWN0aXZlX21vZGVs LnJlbmRlcmluZ19vcHRpb25zWyJEaXNwbGF5SW5zdGFuY2VBeGVzIl0gPSB0 cnVlCmVuZAoKCmRlZiBhY3RpdmF0ZQogIFNrZXRjaHVwLmFjdGl2ZV9tb2Rl bC5zdGFydF9vcGVyYXRpb24gIkFsaWduIDJEIgogIEBpcDEgPSBTa2V0Y2h1 cDo6SW5wdXRQb2ludC5uZXcKICBAaXAyID0gU2tldGNodXA6OklucHV0UG9p bnQubmV3CiAgQGlwID0gU2tldGNodXA6OklucHV0UG9pbnQubmV3CiAgQGRy YXduID0gZmFsc2UKICBTa2V0Y2h1cDo6c2V0X3N0YXR1c190ZXh0ICJMZW5n dGgiLCBTQl9WQ0JfTEFCRUwKICBzZWxmLnJlc2V0KG5pbCkKZW5kCgpkZWYg ZGVhY3RpdmF0ZSh2aWV3KQogICAgdmlldy5pbnZhbGlkYXRlIGlmIEBkcmF3 bgplbmQKCmRlZiBvbk1vdXNlTW92ZShmbGFncywgeCwgeSwgdmlldykKICAg IGlmKCBAc3RhdGUgPT0gMCApCiAgICAgICAgQGlwLnBpY2sgdmlldywgeCwg eQogICAgICAgIGlmKCBAaXAgIT0gQGlwMSApCiAgICAgICAgICAgIHZpZXcu aW52YWxpZGF0ZSBpZiggQGlwLmRpc3BsYXk/IG9yIEBpcDEuZGlzcGxheT8g KQogICAgICAgICAgICBAaXAxLmNvcHkhIEBpcAogICAgICAgICAgICB2aWV3 LnRvb2x0aXAgPSBAaXAxLnRvb2x0aXAKICAgICAgICBlbmQKICAgIGVsc2UK ICAgICAgICBAaXAyLnBpY2sgdmlldywgeCwgeSwgQGlwMQogICAgICAgIHZp ZXcudG9vbHRpcCA9IEBpcDIudG9vbHRpcCBpZiggQGlwMi52YWxpZD8gKQog ICAgICAgIHZpZXcuaW52YWxpZGF0ZQogICAgICAgIGlmKCBAaXAyLnZhbGlk PyApCiAgICAgICAgICAgIGxlbmd0aCA9IEBpcDEucG9zaXRpb24uZGlzdGFu Y2UoQGlwMi5wb3NpdGlvbikKICAgICAgICAgICAgU2tldGNodXA6OnNldF9z dGF0dXNfdGV4dCBsZW5ndGgudG9fcywgU0JfVkNCX1ZBTFVFCiAgICAgICAg ZW5kCiAgICAgICAgaWYoICh4LUB4ZG93bikuYWJzID4gMTAgfHwgKHktQHlk b3duKS5hYnMgPiAxMCApCiAgICAgICAgICAgIEBkcmFnZ2luZyA9IHRydWUK ICAgICAgICBlbmQKICAgIGVuZAplbmQKCmRlZiBvbkxCdXR0b25Eb3duX29s ZChmbGFncywgeCwgeSwgdmlldykKICAgIGlmIEBzdGF0ZSA9PSAwCiAgICAg ICAgQGlwMS5waWNrIHZpZXcsIHgsIHkKICAgICAgICBpZiggQGlwMS52YWxp ZD8gKQogICAgICAgICAgICBAc3RhdGUgPSAxCiAgICAgICAgICAgIFNrZXRj aHVwOjpzZXRfc3RhdHVzX3RleHQgJGV4U3RyaW5ncy5HZXRTdHJpbmcoIlNl bGVjdCBzZWNvbmQgZW5kIiksIFNCX1BST01QVAogICAgICAgICAgICBAeGRv d24gPSB4CiAgICAgICAgICAgIEB5ZG93biA9IHkKICAgICAgICAgICAgJGFs aWduX3BvaW50cy5wdXNoIEBpcDEucG9zaXRpb24KICAgICAgICBlbmQKICAg IGVsc2lmIEBzdGF0ZSA9PSAxCiAgICAgICAgaWYoIEBpcDIudmFsaWQ/ICkK ICAgICAgICAgICAgc2VsZi5yZXNldCh2aWV3KQogICAgICAgICAgICBAc3Rh dGUgPSAyCiAgICAgICAgICAgIEB4ZG93biA9IHgKICAgICAgICAgICAgQHlk b3duID0geQogICAgICAgICAgICAkYWxpZ25fcG9pbnRzLnB1c2ggQGlwMi5w b3NpdGlvbgogICAgICAgICAgICBzZWxmLmFsaWduMmRfZ2VvbWV0cnkodmll dykgaWYgQHN0YXRlID09IDIKICAgICAgICBlbmQKICAgIGVuZAogICAgdmll dy5sb2NrX2luZmVyZW5jZQplbmQKCmRlZiBvbkxCdXR0b25Eb3duKGZsYWdz LCB4LCB5LCB2aWV3KQogIGNhc2UgQHN0YXRlCiAgICB3aGVuIDAKICAgICAg U2tldGNodXA6OnNldF9zdGF0dXNfdGV4dCgiU3RhcnQgYWxpZ25tZW50IHBv aW50IiwgU0JfUFJPTVBUKQogICAgICBAeGRvd24gPSB4CiAgICAgIEB5ZG93 biA9IHkKICAgICAgQGlwMS5waWNrIHZpZXcsIHgsIHkKICAgICAgdmlldy50 b29sdGlwID0gQGlwMS50b29sdGlwIGlmKCBAaXAxLnZhbGlkPyApCiAgICAg ICRhbGlnbl9wb2ludHMucHVzaCBAaXAxLnBvc2l0aW9uCiAgICAgIEBzdGF0 ZSA9IDEKICAgICAgdmlldy5pbnZhbGlkYXRlCiAgICB3aGVuIDEKICAgICAg U2tldGNodXA6OnNldF9zdGF0dXNfdGV4dCgiRW5kIGFsaWdubWVudCBwb2lu dCIsIFNCX1BST01QVCkKICAgICAgQHhkb3duID0geAogICAgICBAeWRvd24g PSB5CiAgICAgIEBpcDIucGljayB2aWV3LCB4LCB5LCBAaXAxCiAgICAgIHZp ZXcudG9vbHRpcCA9IEBpcDIudG9vbHRpcCBpZiggQGlwMi52YWxpZD8gKQog ICAgICAkYWxpZ25fcG9pbnRzLnB1c2ggQGlwMi5wb3NpdGlvbgogICAgICBA c3RhdGUgPSAyCiAgICAgIHZpZXcuaW52YWxpZGF0ZSAgICAKICAgICAgdmll dy5sb2NrX2luZmVyZW5jZQogIGVuZCAjY2FzZQojZW5kCmVuZAoKZGVmIG9u TEJ1dHRvblVwKGZsYWdzLCB4LCB5LCB2aWV3KQogICAgaWYoIEBkcmFnZ2lu ZyAmJiBAaXAyLnZhbGlkPyApCiAgICAgICAgc2VsZi5hbGlnbjJkX2dlb21l dHJ5KHZpZXcpIGlmIEBzdGF0ZSA9PSAyCiAgICAgICAgc2VsZi5yZXNldCh2 aWV3KQogICAgZW5kCmVuZAoKZGVmIG9uS2V5RG93bihrZXksIHJlcGVhdCwg ZmxhZ3MsIHZpZXcpCiAgICBpZigga2V5ID09IENPTlNUUkFJTl9NT0RJRklF Ul9LRVkgJiYgcmVwZWF0ID09IDEgKQogICAgICAgIEBzaGlmdF9kb3duX3Rp bWUgPSBUaW1lLm5vdwogICAgICAgIGlmKCB2aWV3LmluZmVyZW5jZV9sb2Nr ZWQ/ICkKICAgICAgICAgICAgdmlldy5sb2NrX2luZmVyZW5jZQogICAgICAg IGVsc2lmKCBAc3RhdGUgPT0gMCAmJiBAaXAxLnZhbGlkPyApCiAgICAgICAg ICAgIHZpZXcubG9ja19pbmZlcmVuY2UgQGlwMQogICAgICAgIGVsc2lmKCBA c3RhdGUgPT0gMSAmJiBAaXAyLnZhbGlkPyApCiAgICAgICAgICAgIHZpZXcu bG9ja19pbmZlcmVuY2UgQGlwMiwgQGlwMQogICAgICAgIGVuZAogICAgZW5k CmVuZAoKZGVmIG9uS2V5VXAoa2V5LCByZXBlYXQsIGZsYWdzLCB2aWV3KQog ICAgaWYoIGtleSA9PSBDT05TVFJBSU5fTU9ESUZJRVJfS0VZICYmCiAgICAg ICAgdmlldy5pbmZlcmVuY2VfbG9ja2VkPyAmJgogICAgICAgIChUaW1lLm5v dyAtIEBzaGlmdF9kb3duX3RpbWUpID4gMC41ICkKICAgICAgICB2aWV3Lmxv Y2tfaW5mZXJlbmNlCiAgICBlbmQKZW5kCgpkZWYgb25Vc2VyVGV4dCh0ZXh0 LCB2aWV3KQogICAgcmV0dXJuIGlmIG5vdCBAc3RhdGUgPT0gMQogICAgcmV0 dXJuIGlmIG5vdCBAaXAyLnZhbGlkPwogICAgYmVnaW4KICAgICAgICB2YWx1 ZSA9IHRleHQudG9fbAogICAgcmVzY3VlCiAgICAgICAgIyBFcnJvciBwYXJz aW5nIHRoZSB0ZXh0CiAgICAgICAgVUkuYmVlcAogICAgICAgIHB1dHMgIkNh bm5vdCBjb252ZXJ0ICN7dGV4dH0gdG8gYSBMZW5ndGgiCiAgICAgICAgdmFs dWUgPSBuaWwKICAgICAgICBTa2V0Y2h1cDo6c2V0X3N0YXR1c190ZXh0ICIi LCBTQl9WQ0JfVkFMVUUKICAgIGVuZAogICAgcmV0dXJuIGlmICF2YWx1ZQoK ICAgICMgQ29tcHV0ZSB0aGUgZGlyZWN0aW9uIGFuZCB0aGUgc2Vjb25kIHBv aW50CiAgICBwdDEgPSBAaXAxLnBvc2l0aW9uCiAgICB2ZWMgPSBAaXAyLnBv c2l0aW9uIC0gcHQxCiAgICBpZiggdmVjLmxlbmd0aCA9PSAwLjAgKQogICAg ICAgIFVJLmJlZXAKICAgICAgICByZXR1cm4KICAgIGVuZAogICAgdmVjLmxl bmd0aCA9IHZhbHVlCiAgICBwdDIgPSBwdDEgKyB2ZWMKICAgIHNlbGYucmVz ZXQodmlldykKZW5kCgpkZWYgZHJhdyh2aWV3KQogICAgaWYoIEBpcDEudmFs aWQ/ICkKICAgICAgICBpZiggQGlwMS5kaXNwbGF5PyApCiAgICAgICAgICAg IEBpcDEuZHJhdyh2aWV3KQogICAgICAgICAgICBAZHJhd24gPSB0cnVlCiAg ICAgICAgZW5kCiAgICAgICAgCiAgICAgICAgaWYoIEBpcDIudmFsaWQ/ICkK ICAgICAgICAgICAgQGlwMi5kcmF3KHZpZXcpIGlmKCBAaXAyLmRpc3BsYXk/ ICkKICAgICAgICAgICAgdmlldy5zZXRfY29sb3JfZnJvbV9saW5lKEBpcDEs IEBpcDIpCiAgICAgICAgICAgIHNlbGYuZHJhd19nZW9tZXRyeShAaXAxLnBv c2l0aW9uLCBAaXAyLnBvc2l0aW9uLCB2aWV3KQogICAgICAgICAgICBAZHJh d24gPSB0cnVlCiAgICAgICAgZW5kCiAgICBlbmQKICAgIGlmICRhbGlnbl9w b2ludHMubGVuZ3RoID09IDEKICAgICAgdmlldy5kcmF3X3BvaW50cyAkYWxp Z25fcG9pbnRzLCA4LCAyLCAicmVkIgogICAgZW5kCiAgCiAgICBpZiAkYWxp Z25fcG9pbnRzLmxlbmd0aCA9PSAyCiAgICAgIHZpZXcuZHJhd19wb2ludHMg JGFsaWduX3BvaW50c1swXSwgOCwgMiwgInJlZCIKICAgICAgdmlldy5kcmF3 X3BvaW50cyAkYWxpZ25fcG9pbnRzWzFdLCA4LCAyLCAicmVkIgogICAgZW5k CmVuZAoKIyBVc2VyIGhpdHMgdGhlIGVzY2FwZSBrZXkKZGVmIG9uQ2FuY2Vs KGZsYWcsIHZpZXcpCiAgICBzZWxmLnJlc2V0KHZpZXcpCiAgICBzZWxmLmFs aWduMmRfZ2VvbWV0cnkodmlldykgaWYgQHN0YXRlID09IDIKICAgIGlmICRh bGlnbl9wb2ludHMubGVuZ3RoIDwgMgogICAgICAjIFdlIGdvdCBsZXNzIHRo YW4gMiBwb2ludHMKICAgICAgVUkubWVzc2FnZWJveCgkYWxpZ25fcG9pbnRz Lmxlbmd0aC50b19zICsgIiBwb2ludCBpcyBub3QgZW5vdWdoICEiKQogICAg ICBzZWxmLnJlc2V0KHZpZXcpCiAgICBlbmQKZW5kCgojIFJlc2V0IHRoZSB0 b29sIGJhY2sgdG8gaXRzIGluaXRpYWwgc3RhdGUKZGVmIHJlc2V0KHZpZXcp CiAgICBAc3RhdGUgPSAwCiAgICAjIERpc3BsYXkgYSBwcm9tcHQgb24gdGhl IHN0YXR1cyBiYXIKICAgIFNrZXRjaHVwOjpzZXRfc3RhdHVzX3RleHQoIlNl bGVjdCBmaXJzdCBlbmQiLCBTQl9QUk9NUFQpCiAgICAjIGNsZWFyIHRoZSBJ bnB1dFBvaW50cwogICAgQGlwMS5jbGVhcgogICAgQGlwMi5jbGVhcgogICAg aWYoIHZpZXcgKQogICAgICAgIHZpZXcudG9vbHRpcCA9IG5pbAogICAgICAg IHZpZXcuaW52YWxpZGF0ZSBpZiBAZHJhd24KICAgIGVuZAogICAgQGRyYXdu ID0gZmFsc2UKICAgIEBkcmFnZ2luZyA9IGZhbHNlCmVuZAoKIyBBbGlnbi9j b3B5IGdlb21ldHJ5IHdoZW4gdGhlIHVzZXIgaGFzIHNlbGVjdGVkIHR3byBw b2ludHMuCmRlZiBhbGlnbjJkX2dlb21ldHJ5KHZpZXcpCgojIFZlY3RvcnMK ICAkdnhiYXNlID0gR2VvbTo6VmVjdG9yM2QubmV3KDEwMDAwMCwgMCwgMCkK ICAkdnliYXNlID0gR2VvbTo6VmVjdG9yM2QubmV3KDAsIDEwMDAwMCwgMCkK ICAkdnpiYXNlID0gR2VvbTo6VmVjdG9yM2QubmV3KDAsIDAsIDEwMDAwMCkK ICAKaWYgJGFsaWduX3BvaW50cy5sZW5ndGggPT0gMgogICMgZmxhdHRlbiB0 aGUgYWxpZ25tZW50IGF4aXMKICAkYWxpZ25fcG9pbnRzWzBdID0gWyRhbGln bl9wb2ludHNbMF0ueCwgJGFsaWduX3BvaW50c1swXS55LCAwXQogICRhbGln bl9wb2ludHNbMV0gPSBbJGFsaWduX3BvaW50c1sxXS54LCAkYWxpZ25fcG9p bnRzWzFdLnksIDBdCiAgc2VsZi5yZXNldCh2aWV3KQogICMgVmlydHVhbCBs aW5lIGJldHdlZW4gYXhpcyBwb2ludHMKICB2X2F4aXMgPSAkYWxpZ25fcG9p bnRzWzBdLnZlY3Rvcl90byAkYWxpZ25fcG9pbnRzWzFdCiAgdl9heGlzLmxl bmd0aCA9IDEwMDAwMC4wCiAgeGxpbmUgPSBTa2V0Y2h1cC5hY3RpdmVfbW9k ZWwuZW50aXRpZXMuYWRkX2NsaW5lICRhbGlnbl9wb2ludHNbMF0sIHZfYXhp cywgIi0uLSIKICAjIFBlcnBlbmRpY3VsYXIgdmVjdG9yCiAgcm90YXRlX2hh bGZwaSA9IEdlb206OlRyYW5zZm9ybWF0aW9uLnJvdGF0aW9uKCAkYWxpZ25f cG9pbnRzWzBdLCAkdnpiYXNlLCAoTWF0aDo6UEkgLyAyLjApICkKICB2X2F4 aXNfcGVycCA9IHZfYXhpcy50cmFuc2Zvcm0gcm90YXRlX2hhbGZwaQogIHZf YXhpc19wZXJwLmxlbmd0aCA9IDEwMDAwMC4wCiAgIyBEaWFsb2cKICAkYWxp Z25fdHlwZSA9ICJIb3Jpem9udGFsbHkiIGlmIG5vdCAkYWxpZ25fdHlwZQog ICRhbGlnbl9kZWwgPSAiWWVzIiBpZiBub3QgJGFsaWduX2RlbAogICRhbGln bl9jb3B5ID0gIk5vIiBpZiBub3QgJGFsaWduX2NvcHkKICAkYWxpZ25fcm90 YXRlID0gIktlZXAgY3VycmVudCIgaWYgbm90ICRhbGlnbl9yb3RhdGUKICBs aXN0MSA9IFsiSG9yaXpvbnRhbGx5IiwiVmVydGljYWxseSIsIlBlcnBlbmRp Y3VsYXJseSJdCiAgbGlzdDIgPSBbIlllcyIsICJObyJdCiAgbGlzdDMgPSBb IlllcyIsICJObyJdCiAgbGlzdDQgPSBbIktlZXAgY3VycmVudCIsICJNYXRj aCBYJ3Mgd2l0aCBhbGlnbm1lbnQgbGluZSIsICJNYXRjaCBZJ3Mgd2l0aCBh bGlnbm1lbnQgbGluZSIsICJNYXRjaCBaJ3Mgd2l0aCBhbGlnbm1lbnQgbGlu ZSJdCiAgZW51bXMgPSBbbGlzdDEuam9pbigifCIpLCBsaXN0Mi5qb2luKCJ8 IiksIGxpc3QzLmpvaW4oInwiKSwgbGlzdDQuam9pbigifCIpXQogIHByb21w dHMgPSBbIkFsaWduOiAiLCAiRGVsZXRlIENvbnN0cnVjdGlvbiBsaW5lOiAi LCAiQ29weSBHcm91cHMvY29tcG9uZW50czogIiwgIlJvdGF0ZSBHcm91cHMv Y29tcG9uZW50czogICAiXQogIHZhbHVlcyA9IFskYWxpZ25fdHlwZSwkYWxp Z25fZGVsLCRhbGlnbl9jb3B5LCAkYWxpZ25fcm90YXRlXQogIHJlc3VsdHMg PSBpbnB1dGJveCBwcm9tcHRzLCB2YWx1ZXMsIGVudW1zLCAiQWxpZ24gb3B0 aW9ucyIKICByZXR1cm4gaWYgbm90IHJlc3VsdHMKICAkYWxpZ25fdHlwZSA9 IHJlc3VsdHNbMF0KICAkYWxpZ25fZGVsID0gcmVzdWx0c1sxXQogICRhbGln bl9jb3B5ID0gcmVzdWx0c1syXQogICRhbGlnbl9yb3RhdGUgPSByZXN1bHRz WzNdCiAgCiAgIyBDaGVjayBmb3Igc2FtZSB2ZWN0b3IgZGlyZWN0aW9ucyBw cm9ibGVtCiAgZG9hYmxlID0gdHJ1ZQogIGRvYWJsZSA9IGZhbHNlIGlmIHZf YXhpcy5zYW1lZGlyZWN0aW9uPyAkdnhiYXNlIGFuZCAkYWxpZ25fdHlwZSA9 PSAiSG9yaXpvbnRhbGx5IgogIGRvYWJsZSA9IGZhbHNlIGlmIHZfYXhpcy5z YW1lZGlyZWN0aW9uPyAkdnliYXNlIGFuZCAkYWxpZ25fdHlwZSA9PSAiVmVy dGljYWxseSIKICAKICBpZiBkb2FibGUKICAjIFByb2NlZWQgd2l0aCBlYWNo IHNlbGVjdGlvbiBvYmplY3QKICBAc2VsLmVhY2ggZG8gfGV8CiAgICB0eXBl ID0gZS50eXBlbmFtZQogICAgdHJhbnMgPSBlLnRyYW5zZm9ybWF0aW9uCiAg ICBvcmlnaW4gPSB0cmFucy5vcmlnaW4KICAgIG9yaWdpbj1bb3JpZ2luLngs IG9yaWdpbi55LCAwXQogICAgIyBDb21wdXRlIGludGVyc2VjdGlvbiBmcm9t IGNvbXBvbmVudCBvcmlnaW4gdG8gYWxpZ25tZW50IGF4aXMKICAgIGNhc2Ug JGFsaWduX3R5cGUKICAgICAgd2hlbiAiSG9yaXpvbnRhbGx5IgogICAgICAg IGludGVyc19wb2ludCA9IEdlb20uaW50ZXJzZWN0X2xpbmVfbGluZSBbJGFs aWduX3BvaW50c1swXSx2X2F4aXNdLCBbb3JpZ2luLCAkdnhiYXNlXQogICAg ICB3aGVuICJWZXJ0aWNhbGx5IgogICAgICAgIGludGVyc19wb2ludCA9IEdl b20uaW50ZXJzZWN0X2xpbmVfbGluZSBbJGFsaWduX3BvaW50c1swXSx2X2F4 aXNdLCBbb3JpZ2luLCAkdnliYXNlXQogICAgICB3aGVuICJQZXJwZW5kaWN1 bGFybHkiCiAgICAgICAgaW50ZXJzX3BvaW50ID0gR2VvbS5pbnRlcnNlY3Rf bGluZV9saW5lIFskYWxpZ25fcG9pbnRzWzBdLHZfYXhpc10sIFtvcmlnaW4s IHZfYXhpc19wZXJwXQogICAgZW5kCiAgICAKICAgICMgRGVmaW5lIHRyYW5z bGF0aW9uCiAgICB0cmFuc2xhdGUgPSBHZW9tOjpUcmFuc2Zvcm1hdGlvbi50 cmFuc2xhdGlvbiggb3JpZ2luLnZlY3Rvcl90byggaW50ZXJzX3BvaW50ICkg KQogICAgCiAgICAjIEFwcGx5IHRyYW5zbGF0aW9uIG9yIGNvcHkKICAgIGNh c2UgJGFsaWduX2NvcHkKICAgICAgd2hlbiAiTm8iCiAgICAgICAgU2tldGNo dXAuYWN0aXZlX21vZGVsLmVudGl0aWVzLnRyYW5zZm9ybV9lbnRpdGllcygg dHJhbnNsYXRlLCBlICkKICAgICAgd2hlbiAiWWVzIgogICAgICAgIGNhc2Ug dHlwZQogICAgICAgICAgd2hlbiAiR3JvdXAiCiAgICAgICAgICAgIG5ld19n cm91cCA9IGUuY29weQogICAgICAgICAgICBTa2V0Y2h1cC5hY3RpdmVfbW9k ZWwuZW50aXRpZXMudHJhbnNmb3JtX2VudGl0aWVzKCB0cmFuc2xhdGUsIG5l d19ncm91cCApCiAgICAgICAgICB3aGVuICJDb21wb25lbnRJbnN0YW5jZSIK ICAgICAgICAgICAgbmV3X2NvbXAgPSBTa2V0Y2h1cC5hY3RpdmVfbW9kZWwu ZW50aXRpZXMuYWRkX2luc3RhbmNlIGUuZGVmaW5pdGlvbiwgdHJhbnMKICAg ICAgICAgICAgU2tldGNodXAuYWN0aXZlX21vZGVsLmVudGl0aWVzLnRyYW5z Zm9ybV9lbnRpdGllcyggdHJhbnNsYXRlLCBuZXdfY29tcCApCiAgICAgICAg ZW5kCiAgICBlbmQKICAgIAogICAgY2FzZSAkYWxpZ25fcm90YXRlCiAgICAg IHdoZW4gIk1hdGNoIFgncyB3aXRoIGFsaWdubWVudCBsaW5lIgogICAgICAg IG5ld190cmFucyA9IEdlb206OlRyYW5zZm9ybWF0aW9uLm5ldyB2X2F4aXMs IHRyYW5zLnlheGlzLCB0cmFucy56YXhpcywgZS50cmFuc2Zvcm1hdGlvbi5v cmlnaW4KICAgICAgICBlLnRyYW5zZm9ybWF0aW9uID0gbmV3X3RyYW5zCiAg ICAgIHdoZW4gIk1hdGNoIFkncyB3aXRoIGFsaWdubWVudCBsaW5lIgogICAg ICBwdXRzICJ5IgogICAgICAgIG5ld190cmFucyA9IEdlb206OlRyYW5zZm9y bWF0aW9uLm5ldyB0cmFucy54YXhpcywgdl9heGlzLCB0cmFucy56YXhpcywg ZS50cmFuc2Zvcm1hdGlvbi5vcmlnaW4KICAgICAgICBlLnRyYW5zZm9ybWF0 aW9uID0gbmV3X3RyYW5zCiAgICAgICAgd2hlbiAiTWF0Y2ggWidzIHdpdGgg YWxpZ25tZW50IGxpbmUiCiAgICAgICAgbmV3X3RyYW5zID0gR2VvbTo6VHJh bnNmb3JtYXRpb24ubmV3IHRyYW5zLnhheGlzLCB0cmFucy55YXhpcywgdl9h eGlzLCBlLnRyYW5zZm9ybWF0aW9uLm9yaWdpbgogICAgICAgIGUudHJhbnNm b3JtYXRpb24gPSBuZXdfdHJhbnMKICAgIGVuZAogICAgCiAgZW5kICNlYWNo IGUKICBlbHNlCiAgVUkubWVzc2FnZWJveCgiVW5hYmxlIHRvIGFsaWduICIg KyAkYWxpZ25fdHlwZSArICIgd2l0aCB0aGlzIGFsaWdubWVudCBsaW5lLiIp CiAgI3JldHVybiBuaWwKICBTa2V0Y2h1cC5zZW5kX2FjdGlvbiAic2VsZWN0 U2VsZWN0aW9uVG9vbDoiCiAgZW5kICNpZiBkb2FibGUKICAKICAjIHJlc2V0 IHBvaW50cyBhcnJheSwgZXJhc2UgeGxpbmUsIG9sZCBkaXNwbGF5IGF4ZXMs IGFuZCBleGl0CiAgeGxpbmUuZXJhc2UhIGlmICRhbGlnbl9kZWwgPT0gIlll cyIKICAkYWxpZ25fcG9pbnRzPVtdCiAgU2tldGNodXAuYWN0aXZlX21vZGVs LnJlbmRlcmluZ19vcHRpb25zWyJEaXNwbGF5SW5zdGFuY2VBeGVzIl0gPSBA bXJvX2F4ZXMKICBTa2V0Y2h1cC5zZW5kX2FjdGlvbiAic2VsZWN0U2VsZWN0 aW9uVG9vbDoiCiAgU2tldGNodXAuYWN0aXZlX21vZGVsLmNvbW1pdF9vcGVy YXRpb24KZW5kCmVuZAoKIyBEcmF3IHRoZSBnZW9tZXRyeQpkZWYgZHJhd19n ZW9tZXRyeShwdDEsIHB0MiwgdmlldykKICAgIHZpZXcuZHJhd19saW5lKHB0 MSwgcHQyKQplbmQKCmVuZCAjIGNsYXNzIEFsaWduMmRUb29sCgoKIy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENoZWNrIGlm IHRoZXJlIGlzIHNvbWV0aGluZyB0byBhbGlnbiAgCiMtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGVmIEFsaWduMmQuc29tZXRo aW5nX3NlbGVjdGVkCiAgc3MgPSBTa2V0Y2h1cC5hY3RpdmVfbW9kZWwuc2Vs ZWN0aW9uCiAgaWYgc3MuZW1wdHk/CiAgICByZXR1cm4gbmlsCiAgZWxzZQog ICAgcmV0dXJuIHRydWUKICBlbmQKZW5kCgojLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENoZWNrIGlmIHNl bGVjdGlvbiBpcyBhIHNldCBvZiBncm91cHMvY29tcG9uZW50cwojLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpk ZWYgQWxpZ24yZC5zb21ldGhpbmdfc2VsZWN0ZWQKIGlmIFNrZXRjaHVwLmFj dGl2ZV9tb2RlbC5zZWxlY3Rpb24uZW1wdHk/CiAgcmV0dXJuIGZhbHNlCiBl bHNlCiAgcmV0dXJuIHRydWUKIGVuZAplbmQKCiMtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBTZWxlY3QgdGhlIEFsaWduIHRv b2wgICAgICAgICAgICAgICAgIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCmRlZiBBbGlnbjJkLnRvb2wKICAgIFNrZXRjaHVw LmFjdGl2ZV9tb2RlbC5zZWxlY3RfdG9vbCBBbGlnbjJkVG9vbC5uZXcKZW5k CgplbmQgIyBtb2R1bGUgQWxpZ24KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQojIFNob3J0Y3V0IGZvciBzZWxlY3RpbmcgdGhlIG5ldyB0 b29sIHdpdGhpbiB0aGUgVUkgICAgICAgICAgICAgICAgICAgICAgICAgICAK Iy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgppZiBub3QgJGFs aWduXzJEX2xvYWRlZAogIG1haW5fbWVudSA9IFVJLm1lbnUoIlRvb2xzIiku YWRkX2l0ZW0oIkFsaWduIDJEIikgeyBBbGlnbjJkLnRvb2wgfQogICMgQ29u dGV4dCBtZW51IGhhbmRsZXIKICBVSS5hZGRfY29udGV4dF9tZW51X2hhbmRs ZXIgZG8gfG1lbnV8CiAgICBpZiggQWxpZ24yZC5zb21ldGhpbmdfc2VsZWN0 ZWQgKQogICAgICBtZW51LmFkZF9pdGVtKCJBbGlnbiAyRCIpIHsgQWxpZ24y ZC50b29sIH0KICAgIGVuZAogIGVuZAplbmQKJGFsaWduXzJEX2xvYWRlZCA9 IHRydWUK}.unpack("m").to_s