------ art_43225_24202216.1156977476917 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline Brian pointed out that I'd missed the spec and was hypenating two day runs instead of the minimum run called for. So, I've updated my solution to fix this, and keeping with the spirit of options, I added a :min_span option to set the minimum number of days to coalesce. I've also made to_s work with the :week_start option as well. I was going to go ahead and add the ability to specify the :week_start as a string as well as an integer, but I realized that I really need to refactor a bit before I do that, so I stopped for now. ---------- Forwarded message ---------- From: Bryan Donovan <brdonovan / gmail.com> Date: Aug 30, 2006 2:45 PM Subject: Re: [QUIZ] DayRange(#92) - My solution To: rick.denatale / gmail.com Rick, Wow, a very detailed and extensive solution... I did notice one thing, and maybe this was intentional, but when you pass in 1,2,4,5 you should get "Mon, Tue, Thu, Fri", not "Mon-Tue, Thu-Fri". However, this is just according to the quiz "rules" and is not necessarily the best way. Maybe an option to specify the minimum number of consecutive days to constitute a "range" would be a good addition. I'll probably add that to my own version ... Regards, Bryan On 8/30/06, Rick DeNatale <rick.denatale / gmail.com> wrote: > I sent this before with a big zipfile attachment including rdoc, and I > think that the mailing list rejected it due to the size of the > attachment. So I'm sending it again with just the source files. > > After solving the basic problem in a few minutes, doing the "simplest > thing which could possibly work," I've spent my spare time over the > last 4 or 5 days letting features, well, creep. > > I've noticed that there are two major styles of quiz respondants, some > go for brief code, others go for well-documented code sometimes with > lots of new features. I guess I fall into the latter camp. > > I really used this as an exercise to explore implementing rails-like > options parameters. The code is documented, and I've included the > html output of rdoc in the attached zip file. There's also a test > script. > > So here's my solution. A few goodies I've added. > > 1) Rails style options can be used on new, to_s and a few more. > 2) Option to select when the week starts, the ranges produced in to_s > will never span over a week boundary. > I just realized that I really should let you specify the start of the > week as either a number or a name, but it's time to lay my cards on > the table, so names will have to wait until the next 'release' <G>. > 3) Option to select a language. English and French are built-in. > 4) Support for ad-hoc languages, and adding new languages via a class > method, see the rdoc and testcases for examples of how to do this. > 5) A DayRange is enumerable and should act like an array containing > the day numbers with the week-start fixed as Monday extension to > add options are on the 'roadmap' <G> > 6) Probably some other things I'm overlooking as I type this note. > > -- > Rick DeNatale > > My blog on Ruby > http://talklikeaduck.denhaven2.com/ > > > -- Rick DeNatale My blog on Ruby http://talklikeaduck.denhaven2.com/ IPMS/USA Region 12 Coordinator http://ipmsr12.denhaven2.com/ Visit the Project Mercury Wiki Site http://www.mercuryspacecraft.com/ ------ art_43225_24202216.1156977476917 Content-Type: application/x-ruby; name="day_range.rb" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="day_range.rb" X-Attachment-Id: f_eriahuec IyBUaGlzIGNsYXNzIHdhcyB3cml0dGVuIGFzIGFuIGFuc3dlciB0byBSdWJ5UXVpejkyLgojCiMg VGhlIERheVJhbmdlLm5ldyBtZXRob2QgdGFrZXMgb25lIG9yIG1vcmUgZGF5IHNwZWNpZmljYXRp b25zIGFzIGVpdGhlciBpbnRlZ2VycyBvciBuYXR1cmFsIGxhbmd1YWdlCiMgc3RyaW5ncyByZXBy ZXNlbnRpbmcgZGF5IG5hbWVzLiAgQW4gaW5zdGFuY2Ugd2lsbCByZXNwb25kIHRvIHRvX3Mgd2l0 aCBhIHN0cmluZyByZXByZXNlbnRpbmcKIyB0aGUgbGlzdCBvZiBkYXlzIHdpdGggY29uc2VjdXRp dmUgZGF5cyBjb2xsYXBzZWQgdG8gYSBmb3JtIGxpa2UgJ01vbi1GcmknCiMKIyBTZXZlcmFsIG1l dGhvZHMgdGFrZSAiUmFpbHMtc3R5bGUiIG9wdGlvbnMsIG9uZSBvciBtb3JlIGFzc29jaWF0aW9u cyBhZnRlciBhbnkgbm9ybWFsIHBhcmFtZXRlcnMuCiMgVGhlIGtleXMgb2YgdGhlc2UgYXNzb2Np YXRpb25zIGNhbiBiZSBTdHJpbmdzIG9yIHN5bWJvbHMgd2hpY2ggd2lsbCBiZSBjb252ZXJ0ZWQg dXNpbmcgdG9fc3ltLgojCiMgRmVhdHVyZXMgbm90IGNhbGxlZCBmb3IgaW4gdGhlIHF1aXogaW5j bHVkZToKIyAgIAojICAgKiBBIG51bWJlciBmb3IgdGhlIHN0YXJ0IG9mIHRoZSB3ZWVrIG1heSBi ZSBzcGVjaWZpZWQuICBUaGlzIHdpbGwgYWZmZWN0IHRoZSBvdXRwdXQgb2YKIyAgICAgdG9fcy4g Rm9yIGV4YW1wbGUsIDp3ZWVrX3N0YXJ0ID0+IDcsIGluZGljYXRlcyB0aGF0IHRoZSB3ZWVrIHN0 YXJ0cyBvbiBTdW5kYXksIGFuZAojICAgICAgICBEYXlSYW5nZS5uZXcoJ1NhdCcsICdTdW4nLCAn TW9uJywgOndlZWtfc3RhcnQgPT4gNykudG9fcyA9PiAiU3VuLU1vbiwgU2F0IgojCiMgICAqIFN1 cHBvcnQgaXMgcHJvdmlkZWQgZm9yIGxhbmd1YWdlcyBvdGhlciB0aGFuIEVuZ2xpc2gsIEZyZW5j aCBpcyBidWlsdCBpbiwgYnV0IGFkZGl0aW9uYWwKIyAgICAgbGFuZ3VhZ2VzIGNhbiBiZSBhZGRl ZCwgZWl0aGVyIG9uIHRoZSBuZXcgY2FsbCwgb3IgYnkgYSBjbGFzcyBtZXRob2QgRGF5UmFuZ2Uu YWRkX2xhbmd1YWdlIAojCiMgICAqIERheVJhbmdlcyBhcmUgZW51bWVyYWJsZSBhbmQgcHJvZHVj ZSB0aGUgbnVtYmVycyBvZiB0aGUgZGF5IHRoZXkgY29udGFpbiwgaW4gTW9uZGF5LVN1bmRheQoj ICAgICBvcmRlci4KIwojICAgKiBUd28gRGF5cmFuZ2VzIGFyZSA9PSBpZiB0aGV5IGNvbnRhaW4g dGhlIHNhbWUgZGF5cwojICAgCiMgQXV0aG9yOiBSaWNrIERlTmF0YWxlICBodHRwOi8vdGFsa2xp a2VhZHVjay5kZW5oYXZlbjIuY29tCiMKIyBUZXN0IGNhc2VzIGFyZSBpbiB0aGUgZmlsZSB0ZXN0 ZGF5cmFuZ2UucmIKIwojIFRoZSBjb2RlIHdoaWNoIGRvZXMgbW9zdCBvZiB0aGUgd29yayBpbiBk ZXRlY3Rpbmcgc3ViLXJhbmdlcyBpcyBpbiB0aGUgZmlsZSBzdWJyYW5nZXMucmIKIyBUaGlzIGFk ZHMgYSBtZXRob2QgdG8gRW51bWVyYWJsZSB3aGljaCBwcm9kdWNlcyBhbiBhcnJheSBvZiByYW5n ZXMgd2hpY2ggY292ZXIgdGhlIHNhbWUgY29udGVudHMKIyBhcyB0aGUgRW51bWVyYXRpb24uICAK CnJlcXVpcmUgJ3N1YnJhbmdlcycKIyAKY2xhc3MgRGF5UmFuZ2UKCglpbmNsdWRlIEVudW1lcmFi bGUKCgkjIFN0cmluZ1N5bUhhc2ggZXh0ZW5kcyBIYXNoIHNvIHRoYXQgc3ltYm9sIGFuZCBzdHJp bmcga2V5cyBhcmUgZXF1aXZhbGVudCBhIGxhIFJhaWxzCgkjIE5vcm1hbGx5IEkgZG9uJ3QgbGlr ZSBpbXBsZW1lbnRpbmcgdGhpbmdzIGxpa2UgdGhpcyB2aWEgc3ViLWNsYXNzaW5nIGJ1dC4uLgoJ Y2xhc3MgU3RyaW5nU3ltSGFzaCA8IEhhc2gKCgkJZGVmIFtdKGtleSkKCQkJc3VwZXIoa2V5LnRv X3N5bSkKCQllbmQKCgkJZGVmIFtdPShrZXksdmFsdWUpCgkJCXN1cGVyKGtleS50b19zeW0sIHZh bHVlKQoJCWVuZAoKCQlkZWYgU3RyaW5nU3ltSGFzaC5bXShoYXNoKQoJCQlzc2ggPSBTdHJpbmdT eW1IYXNoLm5ldwoJCQloYXNoLmVhY2ggeyB8aywgdnwgc3NoW2tdID0gdn0KCQkJc3NoCgkJZW5k CgllbmQKCgkjIG1hcHMgYW5kIG5hbWVzIGZvciBFbmdsaXNoIGFuZCBGcmVuY2gKCUBAZGF5X21h cHMgPSBTdHJpbmdTeW1IYXNoWyA6RW5nbGlzaCA9PiAgeyAKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJ01vbmRheScgPT4gMSwgJ01vbicgPT4gMSwgJ1R1ZXNk YXknID0+IDIsICdUdWUnID0+IDIsCgkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnV2Vk bmVzZGF5JyA9PiAzLCAnV2VkJyA9PiAzLCAnVGh1cnNkYXknID0+IDQsICdUaHUnID0+IDQsCgkJ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRnJpZGF5JyA9PiA1LCAnRnJpJyA9PiA1LCAn U2F0dXJkYXknID0+IDYsICdTYXQnID0+IDYsCgkJICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAnU3VuZGF5JyA9PiA3LCAnU3VuJyA9PiA3IH0sIAoJCQkJICAgICA6RnJlbmNoID0+IHsgCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdMdW5kaScgPT4gMSwg J0x1bicgPT4gMSwgJ01hcmRpJyA9PiAyLCAnTWFyJyA9PiAyLAoJCSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJ01lcmNyZWRpJyA9PiAzLCAnTWVyJyA9PiAzLCAnSmV1ZGknID0+IDQsICdK ZXUnID0+IDQsCgkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVmVuZHJlZGknID0+IDUs ICdWZW4nID0+IDUsICdTYW1lZGknID0+IDYsICdTYW0nID0+IDYsCgkJICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAnRGltYW5jaGUnID0+IDcsICdEaW0nID0+IDcgfSBdCglAQGRheV9uYW1l cyA9IFN0cmluZ1N5bUhhc2hbCQoJCTpFbmdsaXNoID0+IFtuaWwsICdNb24nLCAnVHVlJywgJ1dl ZCcsICdUaHUnLCAnRnJpJywgJ1NhdCcsICdTdW4nXSwKCQk6RnJlbmNoID0+IFtuaWwsICdMdW4n LCAnTWFyJywgJ01lcicsICdKZXUnLCAnVmVuJywgJ1NhbScsICdEaW0nXSwKCV0KCgkjIEFkZCBh IGxhbmd1YWdlIHRvIHRob3NlIHN1cHBvcnRlZCBieSB0aGUgRGF5UmFuZ2UgY2xhc3MKCSMKCSMg OmNhbGwtc2VxOgoJIyAgICBEYXlSYW5nZS5hZGRfbGFuZ3VhZ2UobGFuZ19uYW1lLCBkYXlfbWFw WywgZGF5X25hbWVzXSkKCSMKCSMgVGhlIDxlbT5sYW5nX25hbWVfIHBhcmFtZXRlcjwvZW0+IGlz IHRoZSBuYW1lIG9mIHRoZSBsYW5ndWFnZS4gSXQgd2lsbCBiZSBpbnRlcm5hbGx5IGNvbnZlcnRl ZAoJIyB0byBhIHN5bWJvbC4gU28sIGZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZToKCSMKCSMgICAg IERheVJhbmdlLmFkZF9sYW5ndWFnZSgnRXNwZXJhbnRvJywgLi4uKQoJIwoJIyB0aGVuIG9uZSBj b3VsZCBhc2sgZm9yIGEgRGF5UmFuZ2UgaW4gRXNwZXJhbnRvIHdpdGg6CgkjICAgICAKCSMgICAg IERheVJhbmdlLm5ldygxLCAzLCA6TGFuZ3VhZ2UgPT4gOkVzcGVyYW50bykKCSMgICAgIAoJIyBU aGUgPGVtPmRheV9tYXA8L2VtPiBwYXJhbWV0ZXIgc2hvdWxkIGJlIGEgSGFzaCB3aGljaCBtYXBz IGRheSBuYW1lcyB0byBpbnRlZ2VycyBpbiAKCSMgdGhlIHJhbmdlICgxLi43KS4gIE1vcmUgdGhh biBvbmUgbmFtZSBtYXkgbWFwIHRvIGEgcGFydGljdWxhciBkYXlfbnVtYmVyLgoJIwoJIyBUaGUg X2RheV9uYW1lc18gcGFyYW1ldGVyIG11c3QgYmUgZHVjay10eXBlYWJsZSB0byBhIDctZWxlbWVu dCBhcnJheSBvciBTdHJpbmdzLCB3aXRoIHRoZQoJIyBmaXJzdCBlbGVtZW50IGNvbnRhaW5pbmcg dGhlIG5hbWUgd2hpY2ggd2lsbCBiZSB1c2VkIGZvciBNb25kYXkgZm9yIG91dHB1dCAoZS5nLiBm b3IgdG9fcyksCgkjIGFuZCB0aGUgbGFzdCBmb3IgU3VuZGF5LgoJIwoJIyBJZiBfZGF5X25hbWVz XyBpcyBvbWl0dGVkLCB0aGVuIGl0IHdpbGwgYmUgY29uc3RydWN0ZWQgYnkgZmluZGluZyBhIG5h bWUgZm9yIGVhY2ggZGF5X251bWJlcgoJIyBhcyBsZWFzdCBhcyBzaG9ydCBhcyBhbnkgb3RoZXIg bmFtZSB3aGljaCBtYXBzIHRvIHRoYXQgZGF5X251bWJlciBpbiBfZGF5X21hcF8KCWRlZiBEYXlS YW5nZS5hZGRfbGFuZ3VhZ2UobGFuZ19uYW1lLCBkYXlfbWFwLCBkYXlfbmFtZXMgPSBuaWwpCgkJ I0hBQ0sgLSBpZiB1c2VyIHN1cHBsaWVkIGRheV9uYW1lcyBwcmUtcGVuZCBhbiBlbGVtZW50IHNv IHRoYXQgd2UgY2FuIHVzZQoJCSMgcHNldWRvIDEtb3JpZ2luIGluZGV4aW5nCgoJCWRheV9uYW1l cyA9IGRheV9uYW1lcy5kdXAudW5zaGlmdCgnJykgaWYgZGF5X25hbWVzCgkJQEBkYXlfbmFtZXNb bGFuZ19uYW1lLnRvX3NdID0gdmFsaWRhdGVkX2RheV9uYW1lcyhkYXlfbmFtZXMgfHwgZGF5X25h bWVzX2Zyb21fZGF5X21hcChkYXlfbWFwKSkKCQlAQGRheV9tYXBzW2xhbmdfbmFtZS50b19zXSA9 IGRheV9tYXAuZHVwCgllbmQKCgkjIFJlbW92ZSB0aGUgbGFuZ3VhZ2UgX2xhbmdfbmFtZV8KCSMg RG8gbm90aGluZyBzaWxlbnRseSBpZiBfbGFuZ19uYW1lXyBpcyBub3QgcHJlc2VudAoJIwoJIyA6 Y2FsbC1zZXE6CgkjICAgIERheVJhbmdlLnJlbW92ZV9sYW5ndWFnZShsYW5nX25hbWUpCgkjCglk ZWYgRGF5UmFuZ2UucmVtb3ZlX2xhbmd1YWdlKGxhbmdfbmFtZSkKCQlAQGRheV9uYW1lcy5kZWxl dGUobGFuZ19uYW1lKQoJCUBAZGF5X21hcHMuZGVsZXRlKGxhbmdfbmFtZSkKCWVuZAoKCWRlZiBE YXlSYW5nZS5kYXlfbmFtZXNfZnJvbV9kYXlfbWFwKGRheV9tYXApICM6bm9kb2M6CgkJIyBzZXQg ZWFjaCBkYXlzIG5hbWUgdG8gdGhlIHNob3J0ZXN0IG5hbWUKCQkjIGluIHRoZSBuYW1lIG1hcHBp bmcKCQkjIHB1dHMoIkRlYnVnLSBEYXlSYW5nZS5kYXlfbmFtZXNfZnJvbV9kYXlfbWFwKCN7ZGF5 X21hcH0pIikKCQlkYXlfbmFtZXMgPSBBcnJheS5uZXcoOCkKCQlkYXlfbWFwLmVhY2ggZG8gfG5h bWUgLG51bWJlcnwKCQkJY3VycmVudF9uYW1lID0gZGF5X25hbWVzW251bWJlcl0gfHwgZGF5X25h bWVzW251bWJlcl0gPSBuYW1lCgkJCWRheV9uYW1lc1tudW1iZXJdID0gbmFtZSBpZiBuYW1lLmxl bmd0aCA8IGN1cnJlbnRfbmFtZS5sZW5ndGgKCQllbmQKCQl2YWxpZGF0ZWRfZGF5X25hbWVzKGRh eV9uYW1lcykKCWVuZAoKCWRlZiBEYXlSYW5nZS52YWxpZGF0ZWRfZGF5X25hbWVzKGRheV9uYW1l cykgIzpub2RvYzoKCQkoMS4uNykuZWFjaCBkbyB8aXwKCQkJY2hlY2tfYXJnKGRheV9uYW1lc1tp XSwgIk5vIG5hbWUgZm9yIGRheSBudW1iZXIgI3tpfSIpCgkJZW5kCgkJZGF5X25hbWVzCgllbmQK CglkZWYgRGF5UmFuZ2UuY2hlY2tfYXJnKGFzc2VydGlvbiwgbXNnKSAjIDpub2RvYzoKCQlyYWlz ZSBBcmd1bWVudEVycm9yLm5ldyggbXNnKSB1bmxlc3MgYXNzZXJ0aW9uCgllbmQKCglkZWYgRGF5 UmFuZ2UuZGF5X25hbWVzX2Zyb21fb3B0aW9ucyhvcHRpb25zLCBkYXlfbWFwKSAjIDpub2RvYzoK CQkjIHB1dHMgIkRlYnVnLSBEYXlSYW5nZS5kYXlfbmFtZXNfZnJvbV9vcHRpb25zKG9wdGlvbnM9 I3tvcHRpb25zLmluc3BlY3R9LCIKCQkjIHB1dHMgIiBkYXlfbWFwPSN7ZGF5X21hcC5pbnNwZWN0 fSkiCgkJcmV0dXJuIG9wdGlvbnNbOmRheV9uYW1lc10gaWYgb3B0aW9ucy5rZXk/KDpkYXlfbmFt ZXMpCgkJcmV0dXJuIERheVJhbmdlLmRheV9uYW1lc19mcm9tX2RheV9tYXAoZGF5X21hcCkKCWVu ZAoKCWRlZiBEYXlSYW5nZS5sYW5ndWFnZV9mcm9tX29wdGlvbnMob3B0aW9ucykgIyA6bm9kb2M6 CgkJZ2V0X29wdGlvbig6bGFuZ3VhZ2UsIG9wdGlvbnMsIDpFbmdsaXNoKQoJZW5kCgoJZGVmIERh eVJhbmdlLmdldF9vcHRpb24ob3B0aW9uLCBvcHRpb25zLCBkZWZhdWx0KSAjIDpub2RvYzoKCQlv cHRpb25zLmtleT8ob3B0aW9uKSA/IG9wdGlvbnNbb3B0aW9uXSA6IGRlZmF1bHQKCWVuZAoKCSMg UmV0dXJucyBhIG5ldyBEYXlSYW5nZSAod2hpY2ggY29udGFpbnMgb25lIG9yIG1vcmUgZGF5cyBv ZiB0aGUgd2VlaykKCSMKCSMgOmNhbGwtc2VxOgoJIyAgICAgRGF5UmFuZ2UubmV3KGRheSogWywg b3B0aW9uc10pCgkjCgkjIDxlbT5kYXk8L2VtPiBhcmd1bWVudHMgY2FuIGJlIGVpdGhlciBudW1i ZXJzIGluIHRoZSByYW5nZQoJIyAoMS4uNykgb3IgbmFtZXMgaW4gdGhlIDxlbT5kYXlfbWFwcGlu ZzwvZW0+IChzZWUgPGI+OmRheV9tYXBwaW5nPC9iPiBvcHRpb24pLgoJIwoJIyBPcHRpb25zOgoJ IwoJIyBbKjpsYW5ndWFnZSogPT4gc3ltYm9sXSBTcGVjaWZpZXMgdGhlIGxhbmd1YWdlIHRvIGJl IHVzZWQgdG8KCSMgaW50ZXJwcmV0IHRoZSBfZGF5X3Mgd2hpY2ggYXJlIFN0cmluZ3MsIGFuZCBm b3IgdGhlIGRlZmF1bHQgb3B0aW9ucyBmb3Igb3V0cHV0IHZpYSBEYXlOYW1lI3RvX3MKCSMgVGhl IHBvc3NpYmxlIHZhbHVlcyBmb3IgdGhlIHN5bWJvbCBhcmUgOkVuZ2xpc2gsIGFuZCA6RnJlbmNo LAoJIyBhZGRpdGlvbmFsIGxhbmd1YWdlcyBjYW4gYmUgYWRkZWQgdmlhIHRoZSBEYXlSYW5nZS5h ZGRMYW5ndWFnZSAKCSMgbWV0aG9kLiBJZiB0aGlzIG9wdGlvbiBpcyBub3Qgc3BlY2lmaWVkLCA6 RW5nbGlzaCB3aWxsIGJlIHVzZWQuCgkjIAoJIyBbKjpkYXlfX21hcCogPT4gaGFzaCBdIFRoZSB2 YWx1ZSBfaGFzaF8gc2hvdWxkIGJlIGEgaGFzaCB3aGljaCBtYXBzIHRoZSBuYW1lcwoJIyBvZiBk YXlzIHRvIHRoZSBudW1iZXIgb2YgdGhlIGRheSwgd2l0aCAxIGJlaW5nIHRoZSBmaXJzdAoJIyBk YXkgb2YgdGhlIHdlZWsgKG5vcm1hbGx5IE1vbmRheSksIHVwIHRvIDcgZm9yIHRoZSBsYXN0IGRh eSAKCSMgb2YgdGhlIHdlZWsgKG5vcm1hbGx5IFN1bmRheSkuCgkjIE1vcmUgdGhhbiBvbmUgbmFt ZSBtYXkgbWFwIHRvIHRoZSBzYW1lIGRheS4gSWYgbm90IHNwZWNpZmllZCwKCSMgdGhlIGRheV9t YXBwaW5nIGZvciB0aGUgc2VsZWN0ZWQgbGFuZ3VhZ2UgaXMgdXNlZC4KCSMKCSMgWyo6ZGF5X25h bWVzKiA9PiBhcnJheV0gVGhlIHZhbHVlIF9hcnJheV8gbXVzdCBiZSBkdWNrLXR5cGVhYmxlIHRv IGEgNy1lbGVtZW50IGFycmF5LgoJIyBUaGUgZWxlbWVudHMgYXJlIHRoZSBuYW1lcyBvZiB0aGUg ZGF5cyB0byBiZSB1c2VkIGJ5IGRlZmF1bHQgZm9yCgkjIG91dHB1dCAoZS5nLiB3aXRoIERheVJh bmdlI3RvX3MuICBJZiBub3Qgc3BlY2lmaWVkLCB0aGVuIHRoZSBkYXlfbmFtZXMgZm9yIHRoZSBz ZWxlY3RlZAoJIyBsYW5ndWFnZSB3aWxsIGJlIHVzZWQsIHVubGVzcyAqOmRheV9tYXAqIGlzIHNw ZWNpZmllZCBpbiB3aGljaCBjYXNlCgkjICo6ZGF5X25hbWVzKiB3aWxsIGJlIGNvbXB1dGVkIGZy b20gb25lIG9mIHRoZSBzb3J0ZXN0IG5hbWVzIGluIHRoZSBtYXAgZm9yIGVhY2ggCgkjIGRheS4K CSMKCSMgWyo6d2Vla19zdGFydCogPT4gaW50XSAgVGhlIHZhbHVlIF9pbnRfIG11c3QgYmUgaW4g dGhlIHJhbmdlICgxLCA3KS4gCgkjIEl0IGlzIHVzZWQgdG8gc2hpZnQgdGhlIHN0YXJ0IG9mIHRo ZSB3ZWVrLiBGb3IgZXhhbXBsZSB0byBjcmVhdGUgYQoJIyBEYXlSYW5nZSBmb3IgYSB3ZWVrIHdo aWNoIHN0YXJ0cyBvbiBTdW5kYXkgcmF0aGVyIHRoYW4gTW9uZGF5LAoJIyBzcGVjaWZ5IGEgd2Vl a19zdGFydCBvZiA3LiAgQWx0aG91Z2ggaXQgaXMgYWxzbyBwb3NzaWJsZSB0bwoJIyBhY2hpZXZl IHRoZSBzYW1lIGVmZmVjdCBieSBjaGFuZ2luZyB0aGUgbnVtYmVycyBpbiBkYXlfbWFwcGluZywK CSMgdXNpbmcgd2Vla19zdGFydCBhbGxvd3MgdGhlIHNhbWUgZGF5X21hcHBpbmcgdG8gYmUgdXNl ZCBmb3Igd2Vla3MKCSMgc3RhcnRpbmcgb24gZGlmZmVyZW50IGRheXMuIAoJIwoJIyBbKjptaW5f c3BhbiogPT4gaW50XSBUaGUgdmFsdWUgX2ludF8gaW5kaWNhdGVzIHRoZSBtaW5pbXVtIHNwYW4g b2YgZGF5cyB3aGljaCB3aWxsCgkjIGJlIGNvbGxhcHNlZCBpbnRvIGh5cGhlbmF0ZWQgZm9ybS4g IFRoZSBkZWZhdWx0IGlzIDMsIGFzIHNwZWNpZmllZCBieSB0aGUgUXVpeiBzcGVjCgkjIEkgbWlz c2VkIHRoaXMgdGhlIGZpcnN0IHRpbWUuCglkZWYgaW5pdGlhbGl6ZSggKmRheXMgKSAjOmRvYzoK CQlvcHRpb25zID0gZXh0cmFjdF9vcHRpb25zX2Zyb21fYXJncyEoZGF5cykKCQkjIHB1dHMgIkRl YnVnOiBvcHRpb25zID0gI3tvcHRpb25zLmluc3BlY3R9IgoJCUBkYXlfbWFwID0gZGF5X21hcF9m cm9tX29wdGlvbnMob3B0aW9ucykKCQlAZGF5X21hcC5lYWNoIGRvIHxuYW1lLCBudW1iZXJ8CgkJ CURheVJhbmdlLmNoZWNrX2FyZygoMS4uNykgPT09IG51bWJlciwgCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiJyN7bnVtYmVyfScgaXMgbm90IGFuIGFjY2VwdGFi bGUgZGF5IGZvciAje25hbWUudG9fc30uIikKCQllbmQKCQlAbWluX3NwYW4gPSBEYXlSYW5nZS5n ZXRfb3B0aW9uKDptaW5fc3Bhbiwgb3B0aW9ucywgMykKCQlAbGFuZ3VhZ2UgPSBEYXlSYW5nZS5s YW5ndWFnZV9mcm9tX29wdGlvbnMob3B0aW9ucykKCQlAZGF5X25hbWVzID0gRGF5UmFuZ2UuZGF5 X25hbWVzX2Zyb21fb3B0aW9ucyhvcHRpb25zLEBkYXlfbWFwKQoJCUB3ZWVrX3N0YXJ0ID0gd2Vl a19zdGFydF9mcm9tX29wdGlvbnMob3B0aW9ucywgQGRheV9tYXApCgkJQGRheV9udW1iZXJzID0g ZGF5cy5tYXAgZG8gfCBkYXkgfAoJCQludW1iZXIgPSBAZGF5X21hcFtkYXldIHx8IGRheQoJCQlE YXlSYW5nZS5jaGVja19hcmcoKDEuLjcpID09PSBudW1iZXIsICInI3tudW1iZXIuaW5zcGVjdH0n IGlzIG5vdCBhbiBhY2NlcHRhYmxlIGRheS4iKQoJCQludW1iZXIKCQllbmQKCQlAZGF5X251bWJl cnMuc29ydCEKCWVuZAoKCSMgUmV0dXJuIGFuIGFycmF5IG9mIHN1YnJhbmdlcyBvZiBAZGF5X251 bWJlcnMgYWRqdXN0ZWQgZm9yIHRoZSB3ZWVrX3N0YXJ0CglkZWYgYWRqdXN0ZWRfcmFuZ2VzKG1p bl9zcGFuLCB3ZWVrX3N0YXJ0KQoJCSh3ZWVrX3N0YXJ0ID09IDEgPyBAZGF5X251bWJlcnMgOiBA ZGF5X251bWJlcnMubWFwIHsgfGVsZW18IHdzX2FkaihlbGVtLHdlZWtfc3RhcnQpIH0pLnN1YnJh bmdlcyhtaW5fc3BhbikKCWVuZAoKCSMgVHdvIERheVJhbmdlcyBhcmUgPT0gaWYgdGhleSBjb250 YWluIHRoZSBzYW1lIGRheSBudW1iZXJzCglkZWYgPT0ob3RoZXIpCgkJZmFsc2UgdW5sZXNzIG90 aGVyLmtpbmRfb2Y/IERheVJhbmdlCgkJc2VsZi50b19hID09IG90aGVyLnRvX2EKCWVuZAoJCQoK CSMgQ2FsbCBfYmxvY2tfIG9uY2UgZm9yIGVhY2ggZGF5IG51bWJlciBpbiBfZGF5X3JhbmdlXyBw YXNzaW5nIHRoZSBkYXkgbnVtYmVyIHRvIHRoZSBibG9jay4KCSMgVGhlIG9yZGVyIHNob3VsZCBi ZSB0aGUgc2FtZSByZWdhcmRsZXNzIG9mIHdlZWsgc3RhcnQsIGkuZS4gTW9uZGF5IHNob3VsZCBh bHdheXMgY29tZSBmaXJzdAoJIyB0aGVuIFR1ZXNkYXksIGV0Yy4KCSMgCgkjIDpjYWxsLXNlcToK CSMgICAgICAgZGF5X3JhbmdlLmVhY2gge3xkYXlfbnVtYmVyfCBibG9jayB9IC0+IF9kYXlfcmFu Z2VfCglkZWYgZWFjaCgpCgkJQGRheV9udW1iZXJzLmVhY2ggeyB8IGVsZW0gfCB5aWVsZCBlbGVt IH0KCWVuZAoKCSMgQ29udmVydCBfZGF5X3JhbmdlXyB0byBhbiBhcnJheSwgZWxlbWVudHMgd2ls bCBiZSBpbiBvcmRlciBzbyB0aGF0IE1vbmRheSwgaWYgaXQgaXMgdGhlIHJhbmdlCgkjIHdpbGwg YmUgZmlyc3QgdGhlbiBUdWVzZGF5LCBldGMuICBpLmUuIHRoZSBlZmZlY3Qgb2Ygd2Vla3N0YXJ0 IHdpbGwgYmUgcmVtb3ZlZAoJIyA6Y2FsbC1zZXE6CgkjICAgICAgZGF5X3JhbmdlLnRvX2EKCWRl ZiB0b19hCgkJQGRheV9udW1iZXJzLmR1cAoJZW5kCgoJIyBDYWxsIF9ibG9ja18gb25jZSBmb3Ig ZWFjaCBkYXkgbmFtZSBpbiBfZGF5X3JhbmdlXywgcGFzc2luZyB0aGF0IG5hbWUgdG8gdGhlIGJs b2NrIAoJIwoJIyA6Y2FsbC1zZXE6CgkjICAgICBkYXlfcmFuZ2UuZWFjaF9uYW1lIFsob3B0aW9u cyldIHsgfGRheV9uYW1lfCBibG9jayB9IC0+IF9kYXlfcmFuZ2VfIAoJIwoJIyAqT3B0aW9ucyoK CSMKCSMgT3B0aW9ucyBhcmUgc3BlY2lmaWVkIFJhaWxzIHN0eWxlLCBhcyBvbmUgb3IgbW9yZSBh c3NvY2lhdGlvbnMgYXQgdGhlIGVuZCBvZiB0aGUgYXJndW1lbnQKCSMgbGlzdC4KCSMKCSMgWyo6 bGFuZ3VhZ2UqID0+IHN5bWJvbF0gU3BlY2lmaWVzIHRoZSBsYW5ndWFnZSB0byBiZSB1c2VkIGZv ciB0aGUgbmFtZXMKCSMgVGhlIHBvc3NpYmxlIHZhbHVlcyBmb3IgdGhlIF9zeW1ib2xfIGFyZSA6 RW5nbGlzaCwgYW5kIDpGcmVuY2gsCgkjIGFkZGl0aW9uYWwgbGFuZ3VhZ2VzIGNhbiBiZSBhZGRl ZCB2aWEgdGhlIERheVJhbmdlLmFkZExhbmd1YWdlIAoJIyBtZXRob2QuIElmIHRoaXMgb3B0aW9u IGlzIG5vdCBzcGVjaWZpZWQsIDpFbmdsaXNoIHdpbGwgYmUgdXNlZC4KCSMgCgkjIFsqOmRheV9u YW1lcyogPT4gYXJyYXldIFRoZSBfYXJyYXlfIG11c3QgYmUgNy1lbGVtZW50IGFycmF5LgoJIyBU aGUgZWxlbWVudHMgYXJlIHRoZSBuYW1lcyBvZiB0aGUgZGF5cyB0byBiZSB1c2VkIGJ5IGRlZmF1 bHQgZm9yCgkjIG91dHB1dCB2aWEgdG9fcy4gIElmIG5vdCBzcGVjaWZpZWQsIHRoZW4gdGhlIGRh eV9uYW1lIGZvciB0aGUgc2VsZWN0ZWQKCSMgbGFuZ3VhZ2Ugd2lsbCBiZSB1c2VkLgoJIwoJZGVm IGVhY2hfbmFtZShvcHRpb25zPXt9KQoJCW5hbWVzID0gZ2V0X25hbWVzX292ZXJyaWRlKG9wdGlv bnMpCgkJdG9fYS5lYWNoIHsgfCBkYXlfbnVtYmVyIHwgeWllbGQgbmFtZXNbZGF5X251bWJlcl0g fQoJZW5kCgoJZGVmIGdldF9uYW1lc19vdmVycmlkZShvcHRpb25zKQoJCXJldHVybiBvcHRpb25z WzpkYXlfbmFtZXNdLmR1cC51bnNoaWZ0KCcnKSBpZiBvcHRpb25zLmtleT8oOmRheV9uYW1lcykK CQlsYW5ndWFnZSA9IG9wdGlvbnNbOmxhbmd1YWdlXQoJCXJldHVybiBAQGRheV9uYW1lc1tsYW5n dWFnZV0gaWYgbGFuZ3VhZ2UKCQlAZGF5X25hbWVzCgllbmQKCQkKCgoJIyBSZXR1cm5zIGEgc3Ry aW5nIHJlcHJlc2VudGluZyB0aGUgRGF5UmFuZ2UsIE9wdGlvbnMgY2FuIGJlIHNwZWNpZmllZC4K CSMKCSMgOmNhbGwtc2VxOgoJIyAgICAgZGF5X3JhbmdlLnRvX3MgWyhvcHRpb25zKV0KCSMKCSMg T3B0aW9uczoKCSMKCSMgWyo6bGFuZ3VhZ2UqID0+IHN5bWJvbF0gU3BlY2lmaWVzIHRoZSBsYW5n dWFnZSB0byBiZSB1c2VkIGZvciBvdXRwdXQKCSMgVGhlIHBvc3NpYmxlIHZhbHVlcyBmb3IgX3N5 bWJvbF8gYXJlIDpFbmdsaXNoLCBhbmQgOkZyZW5jaCwKCSMgYWRkaXRpb25hbCBsYW5ndWFnZXMg Y2FuIGJlIGFkZGVkIHZpYSB0aGUgRGF5UmFuZ2UuYWRkTGFuZ3VhZ2UgCgkjIG1ldGhvZC4gSWYg dGhpcyBvcHRpb24gaXMgbm90IHNwZWNpZmllZCwgdGhlIGxhbmd1YWdlIHVzZWQgd2hlbiB0aGUg RGF5UmFuZ2UKCSMgd2FzIGNyZWF0ZWQgIHdpbGwgYmUgdXNlZC4KCSMgCgkjIFsqOmRheV9uYW1l cyogPT4gYXJyYXldIFRoZSBfYXJyYXlfIG11c3QgYmUgZHVjay10eXBlYWJsZSB0byBhIDctZWxl bWVudCBhcnJheS4KCSMgVGhlIGVsZW1lbnRzIGFyZSB0aGUgbmFtZXMgb2YgdGhlIGRheXMgdG8g YmUgdXNlZCBieSBkZWZhdWx0IGZvcgoJIyBvdXRwdXQgdmlhIHRvX3MuICBJZiBub3Qgc3BlY2lm aWVkLCB0aGVuIHRoZSBkYXlfbmFtZXMgZm9yIHRoZSBzZWxlY3RlZAoJIyBsYW5ndWFnZSB3aWxs IGJlIHVzZWQuCgkjCgkjIFsqOm1pbl9zcGFuKiA9PiBpbnRdIFRoZSB2YWx1ZSBfaW50XyBpbmRp Y2F0ZXMgdGhlIG1pbmltdW0gc3BhbiBvZiBkYXlzIHdoaWNoIHdpbGwKCSMgYmUgY29sbGFwc2Vk IGludG8gaHlwaGVuYXRlZCBmb3JtLiAgVGhlIGRlZmF1bHQgaXMgMywgYXMgc3BlY2lmaWVkIGJ5 IHRoZSBRdWl6IHNwZWMKCSMKCSMgWyo6d2Vla19zdGFydCogPT4gaW50XSAgVGhlIHZhbHVlIF9p bnRfIG11c3QgYmUgaW4gdGhlIHJhbmdlICgxLCA3KS4gCgkjCglkZWYgdG9fcyhvcHRpb25zPXt9 KQoJCW5hbWVzID0gZ2V0X25hbWVzX292ZXJyaWRlKG9wdGlvbnMpCgkJI3B1dHMgIkRlYnVnOiBA ZGF5X25hbWVzPSN7QGRheV9uYW1lcy5pbnNwZWN0fSwgbmFtZXM9I3tuYW1lc30iCgkJbWluX3Nw YW4gPSBEYXlSYW5nZS5nZXRfb3B0aW9uKDptaW5fc3Bhbiwgb3B0aW9ucywgQG1pbl9zcGFuKQoJ CXdlZWtfc3RhcnQgPSBEYXlSYW5nZS5nZXRfb3B0aW9uKDp3ZWVrX3N0YXJ0LCBvcHRpb25zLCBA d2Vla19zdGFydCkKCQoJCXJlc3VsdCA9ICIiCgkJYWRqdXN0ZWRfcmFuZ2VzKG1pbl9zcGFuLHdl ZWtfc3RhcnQpLm1hcCB7fHJhbmdlfCAKCQkJcmFuZ2UuZmlyc3QgPT0gcmFuZ2UubGFzdCA/ICAK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIje25hbWVzW3dzX3VuYWRqKHJhbmdlLmZp cnN0LCB3ZWVrX3N0YXJ0KV19IiA6IAoJCQkgICAgICAgIiN7bmFtZXNbd3NfdW5hZGoocmFuZ2Uu Zmlyc3QsIHdlZWtfc3RhcnQpXX0tI3tuYW1lc1t3c191bmFkaihyYW5nZS5sYXN0LHdlZWtfc3Rh cnQpXX0iCgkJfS5qb2luKCIsICIpCgllbmQKCglwcml2YXRlCiAgICAgICAgIyBjb252ZXJ0IGEg bnVtYmVyIHdoZXJlIDEgPSBNb24uLiA3ID0gU3VuZGF5IHRvIHRoZSBlcXVpdmFsZW50CgkjIHdo ZW4gdGhlIHdlZWsgc3RhcnRzIG9uIGRheSBudW1iZXIKCWRlZiB3c19hZGoobnVtYmVyLCB3ZWVr X3N0YXJ0KQoJCSgobnVtYmVyIC0gd2Vla19zdGFydCkgJSA3KSArIDEKCWVuZAoJCgkjIGNvbnZl cnQgYSBudW1iZXIgYmFjayB0byB0aGUgb3JpZ2luYWwgZm9ybQoJZGVmIHdzX3VuYWRqKG51bWJl ciwgd2Vla19zdGFydCkKCQkoKG51bWJlciArIHdlZWtfc3RhcnQgKyA1KSAlIDcpICsgMQoJZW5k CgoJZGVmIGV4dHJhY3Rfb3B0aW9uc19mcm9tX2FyZ3MhKGFyZ3MpCgkJI3B1dHMgIkRlYnVnIC0g ZXh0cmFjdF9vcHRpb25zX2Zyb21fYXJncyEoI3thcmdzLmluc3BlY3R9KSIKCQkjcHV0cyAiICAg ICAgICN7YXJncy5sYXN0LmNsYXNzfSIKCQlTdHJpbmdTeW1IYXNoW2FyZ3MubGFzdC5raW5kX29m PyhIYXNoKSA/IGFyZ3MucG9wIDoge31dCgllbmQKCglkZWYgZGF5X21hcF9mcm9tX29wdGlvbnMo b3B0aW9ucykKCQkjcHV0cyAiRGVidWc6IGxhbmd1YWdlPSN7RGF5UmFuZ2UubGFuZ3VhZ2VfZnJv bV9vcHRpb25zKG9wdGlvbnMpfSIKCSAgICAgICAgI3B1dHMgIgltYXA9I3tAQGRheV9tYXBzW0Rh eVJhbmdlLmxhbmd1YWdlX2Zyb21fb3B0aW9ucyhvcHRpb25zKV19IgoJCURheVJhbmdlLmdldF9v cHRpb24oOmRheV9tYXAsIG9wdGlvbnMsIEBAZGF5X21hcHNbRGF5UmFuZ2UubGFuZ3VhZ2VfZnJv bV9vcHRpb25zKG9wdGlvbnMpXSkKCWVuZAoKCWRlZiB3ZWVrX3N0YXJ0X2Zyb21fb3B0aW9ucyhv cHRpb25zLCBkYXlfbWFwKQoJCXdlZWtfc3RhcnQgPSBEYXlSYW5nZS5nZXRfb3B0aW9uKDp3ZWVr X3N0YXJ0LCBvcHRpb25zLCAxKQoJCXdlZWtfc3RhcnQgPSBkYXlfbWFwW3dlZWtfc3RhcnRdIHx8 IHdlZWtfc3RhcnQKCQlEYXlSYW5nZS5jaGVja19hcmcoKDEuLjcpID09PSB3ZWVrX3N0YXJ0LCI6 d2Vla19zdGFydCBtdXN0IGJlIGluIHRoZSByYW5nZSAoMS4uNykiKQoJCXdlZWtfc3RhcnQKCWVu ZAoKZW5kCg ------ art_43225_24202216.1156977476917 Content-Type: application/x-ruby; name="testdayrange.rb" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="testdayrange.rb" X-Attachment-Id: f_eriai605 cmVxdWlyZSAnZGF5X3JhbmdlLnJiJwpyZXF1aXJlICd0ZXN0L3VuaXQnCgpjbGFzcyBUZXN0RGF5 UmFuZ2UgPCBUZXN0OjpVbml0OjpUZXN0Q2FzZQoKCUVzcGVyYW50b01hcCA9IHsiTHVuZG8iID0+ IDEsICJMdW4iID0+IDEsICJNYXJkbyIgPT4gMiwgIk1hciIgPT4gMiwgIk1lcmtyZWRvIiA9PiAz LCAiTWVyIiA9PiAzLCAKCQkJIkpoYXVkbyIgPT4gNCwgIkpoYSIgPT4gNCwgIlZlbmRyZWRvIiA9 PiA1LCAiVmVuIiA9PiA1LCAiU2FiYXRvIiA9PiA2LCAiU2FiIiA9PiA2LAoJCQkiRGltYW5jaG8i ID0+IDcsICJEaW0iID0+IDd9CgoJRXNwZXJhbnRvTmFtZXMgPSBbIkx1biIsICJNYXIiLCAiTWVy IiwgIkpoYSIsICJWZW4iLCAiU2FiIiwiRGltIl0KCglHZXJtYW5NYXAgPSB7ICJNb250YWciID0+ IDEsICJNb24iID0+IDEsICJEaWVuc3RhZyIgPT4gMiwgIkRpZSIgPT4gMiwgIk1pdHR3b2NoIiA9 PiAzLCAiTWl0dCIgPT4gMywKCQkgICAgICAiRG9ubmVyc3RhZyIgPT4gNCwgIkRvbiIgPT4gNCwg IkZyZWl0YWciID0+IDUsICJGcmVpIiA9PiA1LCAiU2Ftc3RhZyIgPT4gNiwgIlNhbSIgPT4gNiwK CQkgICAgICAiU29ubnRhZyIgPT4gNywgIlNvbm4iID0+IDcgfQoJR2VybWFuTmFtZXMgPSBbIk1v biIsICJEaWUiLCAiTWl0dCIsICJEb24iLCAiRnJlaSIsICJTYW0iLCAiU29ubiJdCgoJZGVmIHRl c3RfZXF1YWxfMQoJCWRyMSA9ICBEYXlSYW5nZS5uZXcoMSwyLDQsNSkKCQlkcjIgPSAgRGF5UmFu Z2UubmV3KDEsMiw0LDUpCgkJZHIzID0gRGF5UmFuZ2UubmV3KDIsNSw0LDEpCgkJYXNzZXJ0X2Vx dWFsKGRyMSxkcjIpCgkJYXNzZXJ0X2VxdWFsKGRyMSxkcjMpCgllbmQKCglkZWYgdGVzdF93ZWVr c3RhcnRfMQoJCWRyMSA9IERheVJhbmdlLm5ldygnTW9uJywgJ1R1ZXNkYXknLCAnVGh1cnNkYXkn LCAnRnJpZGF5JywgJ1NhdCcsIDp3ZWVrX3N0YXJ0ID0+IDIpCgkJYXNzZXJ0X2VxdWFsKCJUdWUs IFRodS1TYXQsIE1vbiIsZHIxLnRvX3MpCgllbmQKCglkZWYgdGVzdF9lcXVhbF8yCgkJZHIxID0g IERheVJhbmdlLm5ldygxLDIsNCw1KQoJCWRyMiA9IERheVJhbmdlLm5ldygnTW9uZGF5JywgJ1R1 ZXNkYXknLCAnVGh1cnNkYXknLCAnRnJpZGF5JykKCQlhc3NlcnRfZXF1YWwoZHIxLGRyMikKCWVu ZAoKCWRlZiB0ZXN0X3RvX3NfbnVtYmVycwoJCWRyID0gIERheVJhbmdlLm5ldygxLDIsNCw1KQoJ CWFzc2VydF9lcXVhbCgiTW9uLVR1ZSwgVGh1LUZyaSIsZHIudG9fcyg6bWluX3NwYW4gPT4gMikp CgkJYXNzZXJ0X2VxdWFsKCJNb24sIFR1ZSwgVGh1LCBGcmkiLGRyLnRvX3MpCgkJZHIgPSAgRGF5 UmFuZ2UubmV3KDEsMiwzLCA1LDYpCgkJYXNzZXJ0X2VxdWFsKCJNb24tV2VkLCBGcmktU2F0Iixk ci50b19zKDptaW5fc3BhbiA9PiAyKSkKCQlhc3NlcnRfZXF1YWwoIk1vbi1XZWQsIEZyaSwgU2F0 Iixkci50b19zKQoJZW5kCgoJZGVmIHRlc3RfdG9fc19uYW1lcwoJCWRyID0gRGF5UmFuZ2UubmV3 KCdNb25kYXknLCAnVHVlc2RheScsICdUaHVyc2RheScsICdGcmlkYXknKQoJCWFzc2VydF9lcXVh bCgiTW9uLCBUdWUsIFRodSwgRnJpIixkci50b19zKQoJCWFzc2VydF9lcXVhbCgiTW9uLVR1ZSwg VGh1LUZyaSIsZHIudG9fcyg6bWluX3NwYW4gPT4gMikpCgllbmQKCglkZWYgdGVzdF90b19zX29w dGlvbnMKCQlkciA9IERheVJhbmdlLm5ldygnTW9uZGF5JywgJ1R1ZXNkYXknLCAnVGh1cnNkYXkn LCAnRnJpZGF5JykKCQlhc3NlcnRfZXF1YWwoIkx1biwgTWFyLCBKZXUsIFZlbiIsIGRyLnRvX3Mo Omxhbmd1YWdlID0+IDpGcmVuY2gpKQoJCWFzc2VydF9lcXVhbCgiTHVuLU1hciwgSmV1LVZlbiIs IGRyLnRvX3MoOmxhbmd1YWdlID0+IDpGcmVuY2gsIDptaW5fc3BhbiA9PiAyKSkKCQlhc3NlcnRf ZXF1YWwoIk1lcmN1cnktVmVudXMsIE1hcnMtU2F0dXJuIiwgCgkJCSAgICAgZHIudG9fcyg6ZGF5 X25hbWVzID0+ICV3W01lcmN1cnkgVmVudXMgRWFydGggTWFycyBTYXR1cm4gSnVwaXRlciBVcmFu dXNdLAoJCQkJICAgIDptaW5fc3BhbiA9PiAyKQoJCQkgICAgKQoKCSAgICAgICAgZHIgPSBEYXlS YW5nZS5uZXcoMSwgMiwgMywgNiwgNykKCQlhc3NlcnRfZXF1YWwoIk1vbi1XZWQsIFNhdCwgU3Vu IiwgZHIudG9fcykKCQlhc3NlcnRfZXF1YWwoIlR1ZSwgV2VkLCBTYXQtTW9uIiwgZHIudG9fcyg6 d2Vla19zdGFydCA9PiAyKSkKCQlhc3NlcnRfZXF1YWwoIldlZCwgU2F0LVR1ZSIsZHIudG9fcyg6 d2Vla19zdGFydCA9PiAzKSkKCQlhc3NlcnRfZXF1YWwoIlNhdC1XZWQiLCBkci50b19zKDp3ZWVr X3N0YXJ0ID0+IDQpKQoJCWFzc2VydF9lcXVhbCgiU2F0LVdlZCIsIGRyLnRvX3MoOndlZWtfc3Rh cnQgPT4gNSkpCgkJYXNzZXJ0X2VxdWFsKCJTYXQtV2VkIiwgZHIudG9fcyg6d2Vla19zdGFydCA9 PiA2KSkKCQlhc3NlcnRfZXF1YWwoIlN1bi1XZWQsIFNhdCIsIGRyLnRvX3MoOndlZWtfc3RhcnQg PT4gNykpCgllbmQKCWRlZiB0ZXN0X3RyYW5zbGF0ZV90b19mcmVuY2gKCQlkciA9ICBEYXlSYW5n ZS5uZXcoMSwyLDQsNSkKCQlhc3NlcnRfZXF1YWwoIkx1biwgTWFyLCBKZXUsIFZlbiIsZHIudG9f cyg6bGFuZ3VhZ2UgPT4gJ0ZyZW5jaCcpKQoJCWFzc2VydF9lcXVhbCgiTHVuLU1hciwgSmV1LVZl biIsZHIudG9fcyg6bGFuZ3VhZ2UgPT4gJ0ZyZW5jaCcsIDptaW5fc3BhbiA9PiAyKSkKCWVuZAoK CWRlZiB0ZXN0X25ld19mcmVuY2gKCQlkcjFGID0gRGF5UmFuZ2UubmV3KDEsMiw0LDUsIDpsYW5n dWFnZSA9PiAnRnJlbmNoJykKCQlkcjEgPSAgRGF5UmFuZ2UubmV3KDEsMiw0LDUpCgkJYXNzZXJ0 X2VxdWFsKGRyMSwgZHIxRikKCQlhc3NlcnRfZXF1YWwoIkx1bi1NYXIsIEpldS1WZW4iLGRyMUYu dG9fcyg6bWluX3NwYW4gPT4gMikpCgkJYXNzZXJ0X2VxdWFsKCJNb24tVHVlLCBUaHUtRnJpIixk cjFGLnRvX3MoOmxhbmd1YWdlID0+ICdFbmdsaXNoJywgOm1pbl9zcGFuID0+IDIpKQoJCWFzc2Vy dF9lcXVhbCgiTHVuLCBNYXIsIEpldSwgVmVuIixkcjFGLnRvX3MpCgkJYXNzZXJ0X2VxdWFsKCJN b24sIFR1ZSwgVGh1LCBGcmkiLGRyMUYudG9fcyg6bGFuZ3VhZ2UgPT4gJ0VuZ2xpc2gnKSkKCWVu ZAoKCWRlZiB0ZXN0X25ld19lc3BlcmFudG8KCQlkcjFFc3AgPSBEYXlSYW5nZS5uZXcoMSwyLDQs NSwgOmRheV9tYXAgPT4gRXNwZXJhbnRvTWFwKQoJCWRyMSA9ICBEYXlSYW5nZS5uZXcoMSwyLDQs NSkKCQlhc3NlcnRfZXF1YWwoZHIxLCBkcjFFc3ApCgkJYXNzZXJ0X2VxdWFsKCJMdW4tTWFyLCBK aGEtVmVuIiwgZHIxRXNwLnRvX3MoOm1pbl9zcGFuID0+IDIpKQoJZW5kCgoJZGVmIHRlc3RfYmFk X2RheXMKCQlhc3NlcnRfcmFpc2UoQXJndW1lbnRFcnJvcikge0RheVJhbmdlLm5ldygxLDIsOCl9 CgkJYXNzZXJ0X3JhaXNlKEFyZ3VtZW50RXJyb3IpIHtEYXlSYW5nZS5uZXcoMSwgOmRheV9tYXAg PT4geydNb24nID0+IDEsICJUdWUiID0+IDl9KX0KCWVuZAoKCWRlZiB0ZXN0X2FkZF9nZXJtYW4K CQlEYXlSYW5nZS5yZW1vdmVfbGFuZ3VhZ2UoOkdlcm1hbikKCQlEYXlSYW5nZS5hZGRfbGFuZ3Vh Z2UoOkdlcm1hbiwgR2VybWFuTWFwLCBHZXJtYW5OYW1lcykKCQlhc3NlcnRfZXF1YWwoIkRpZSwg RG9uLCBTYW0sIFNvbm4iLCBEYXlSYW5nZS5uZXcoMiw0LDYsNywgOmxhbmd1YWdlID0+ICdHZXJt YW4nKS50b19zKQoJCWFzc2VydF9lcXVhbCgiRGllLCBEb24sIFNhbS1Tb25uIiwgRGF5UmFuZ2Uu bmV3KDIsNCw2LDcsIAoJCQkJCQkJCTpsYW5ndWFnZSA9PiAnR2VybWFuJykudG9fcyg6bWluX3Nw YW4gPT4gMikpCgkJCgkJRGF5UmFuZ2UucmVtb3ZlX2xhbmd1YWdlKDpHZXJtYW4pCgkJRGF5UmFu Z2UuYWRkX2xhbmd1YWdlKDpHZXJtYW4sIEdlcm1hbk1hcCkKCQlhc3NlcnRfZXF1YWwoIkRpZSwg RG9uLCBTYW0sIFNvbm4iLCBEYXlSYW5nZS5uZXcoMiw0LDYsNywgOmxhbmd1YWdlID0+ICdHZXJt YW4nKS50b19zKQoJCWFzc2VydF9lcXVhbCgiRGllLCBEb24sIFNhbS1Tb25uIiwgRGF5UmFuZ2Uu bmV3KDIsNCw2LDcsIAoJCQkJCQkJCTpsYW5ndWFnZSA9PiAnR2VybWFuJykudG9fcyg6bWluX3Nw YW4gPT4gMikpCgllbmQKCglkZWYgdGVzdF9lYWNoX25hbWUKCQlkciA9IERheVJhbmdlLm5ldygx LDIsIDUsIDYpCgkJZXhwZWN0ZWQgPSBbJ01vbicsICdUdWUnLCAnRnJpJywgJ1NhdCddCgkJZHIu ZWFjaF9uYW1lIHsgfG5hbWV8IGFzc2VydF9lcXVhbChleHBlY3RlZC5zaGlmdCwgbmFtZSl9CgkJ YXNzZXJ0KGV4cGVjdGVkLmVtcHR5PywgIk1pc3NpbmcgcmVzdWx0cyAje2V4cGVjdGVkLmluc3Bl Y3R9IikKCQlleHBlY3RlZCA9IFsnRG9jJywgJ0dydW1weScsICdCYXNoZnVsJywgJ1NsZWVweSdd CgkJZHdhcnZlcyA9IFsnRG9jJywgJ0dydW1weScsICdIYXBweScsICdTbmVlenknLCdCYXNoZnVs JywgJ1NsZWVweScsICdEb3BleSddCgkJZHIuZWFjaF9uYW1lKDpkYXlfbmFtZXMgPT4gZHdhcnZl cykgeyB8bmFtZXwgYXNzZXJ0X2VxdWFsKGV4cGVjdGVkLnNoaWZ0LCBuYW1lKX0KCQlhc3NlcnQo ZXhwZWN0ZWQuZW1wdHk/LCAiTWlzc2luZyByZXN1bHRzICN7ZXhwZWN0ZWQuaW5zcGVjdH0iKQoJ CWV4cGVjdGVkID0gWydMdW4nLCAnTWFyJywgJ1ZlbicsICdTYW0nXQoJCWRyLmVhY2hfbmFtZSg6 bGFuZ3VhZ2UgPT4gJ0ZyZW5jaCcpIHsgfG5hbWV8IGFzc2VydF9lcXVhbChleHBlY3RlZC5zaGlm dCwgbmFtZSl9CgkJYXNzZXJ0KGV4cGVjdGVkLmVtcHR5PywgIk1pc3NpbmcgcmVzdWx0cyAje2V4 cGVjdGVkLmluc3BlY3R9IikKCWVuZAplbmQK ------ art_43225_24202216.1156977476917--