From maintainers-request at octave dot org Fri Jan 6 23:57:12 2006 Subject: Octave-forge Date Functions Patch From: Bill Denney To: maintainers at octave dot org Date: Sat, 7 Jan 2006 00:56:01 -0500 (EST) This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --8323328-1124947576-1136613361=:4659 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed Here is a patch to the functions datesplit, datevec, and datenum to allow formats (as in strptime) to be used. It's very slow (at least on my testing in cygwin which I know is slow to begin with), so it may be worthwhile for someone to vectorize strptime. Changelog: 2005 Jan 7: Bill Denney datesplit.m, datevec.m, datenum.m: allow the specification of a format for the date Bill -- "Hurray for our side." -- Flynn, _Tron_ --8323328-1124947576-1136613361=:4659 Content-Type: TEXT/plain; charset=US-ASCII; name=datefunc-fmt.diff Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=datefunc-fmt.diff SW5kZXg6IGRhdGVudW0ubQ0KPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNT IGZpbGU6IC9jdnNyb290L29jdGF2ZS9vY3RhdmUtZm9yZ2UvbWFpbi90aW1l L2RhdGVudW0ubSx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOA0KZGlmZiAt dSAtcjEuOCBkYXRlbnVtLm0NCi0tLSBkYXRlbnVtLm0JOCBTZXAgMjAwNSAw MjowMDoxOCAtMDAwMAkxLjgNCisrKyBkYXRlbnVtLm0JNyBKYW4gMjAwNiAw NTo1MDozNiAtMDAwMA0KQEAgLTEsNiArMSw2IEBADQogIyMgLSotIHRleGlu Zm8gLSotDQogIyMgQGRlZnR5cGVmbiB7RnVuY3Rpb24gRmlsZX0ge30gZGF0 ZW51bShZLCBNLCBEIFssIGggLCBtIFssIHNdXSkNCi0jIyBAZGVmdHlwZWZu eCB7RnVuY3Rpb24gRmlsZX0ge30gZGF0ZW51bSgnZGF0ZScgWywgUF0pDQor IyMgQGRlZnR5cGVmbngge0Z1bmN0aW9uIEZpbGV9IHt9IGRhdGVudW0oJ2Rh dGUnIFssIFAgWywgZm10XV0pDQogIyMgUmV0dXJucyB0aGUgc3BlY2lmaWVk IGxvY2FsIHRpbWUgYXMgYSBkYXkgbnVtYmVyLCB3aXRoIEphbiAxLCAwMDAw DQogIyMgYmVpbmcgZGF5IDEuIEJ5IHRoaXMgcmVja29uaW5nLCBKYW4gMSwg MTk3MCBpcyBkYXkgbnVtYmVyIDcxOTUyOS4gIA0KICMjIFRoZSBmcmFjdGlv bmFsIHBvcnRpb24sIGNvcnJlc3BvbmRzIHRvIHRoZSBwb3J0aW9uIG9mIHRo ZSBzcGVjaWZpZWQgZGF5Lg0KQEAgLTEyLDYgKzEyLDE3IEBADQogIyMgRGF5 cyBiZWZvcmUgdGhlIGJlZ2lubmluZyBvZiB0aGUgbW9udGggZ28gdG8gdGhl IHByZXZpb3VzIG1vbnRoLg0KICMjIERheXMgY2FuIGJlIGZyYWN0aW9uYWwu DQogIyMNCisjIyBUaGUgcGFyYW1ldGVyIEB2YXJ7UH0gaXMgbmVlZGVkIHRv IGNvbnZlcnQgZGF0ZSBzdHJpbmdzIHdpdGggMiBkaWdpdA0KKyMjIHllYXJz IGludG8gZGF0ZXMgd2l0aCA0IGRpZ2l0IHllYXJzLiAgMiBkaWdpdCB5ZWFy cyBhcmUgYXNzdW1lZCB0byBiZQ0KKyMjIGJldHdlZW4gQHZhcntQfSBhbmQg QGNvZGV7UCs5OX0uIElmIEB2YXJ7UH0gaXMgbm90IGdpdmVuIHRoZW4gdGhl IA0KKyMjIGN1cnJlbnQgeWVhciAtIDUwIGlzIHVzZWQsIHNvIHRoYXQgZGF0 ZXMgYXJlIGNlbnRlcmVkIG9uIHRoZSBwcmVzZW50Lg0KKyMjIEZvciBiaXJ0 aGRhdGVzLCB5b3Ugd291bGQgd2FudCBAdmFye1B9IHRvIGJlIGN1cnJlbnQg eWVhciAtIDk5LiAgRm9yDQorIyMgYXBwb2ludG1lbnRzLCB5b3Ugd291bGQg d2FudCBAdmFye1B9IHRvIGJlIGN1cnJlbnQgeWVhci4NCisjIw0KKyMjIFRo ZSBwYXJhbWV0ZXIgQHZhcntmbXR9IGlzIG9wdGlvbmFsIGFuZCBpdCBhbGxv d3MgeW91IHRvIHNwZWNpZnkgdGhlDQorIyMgZm9ybWF0IGFzIGluIEBjb2Rl e3N0cmZ0aW1lfS4gIFNlZSB0aGUgQGNvZGV7c3RyZnRpbWV9IGhlbHAgZm9y IGhvdw0KKyMjIHRvIHNwZWNpZnkgYSBmb3JtYXQgc3RyaW5nLg0KKyMjDQog IyMgWFhYIFdBUk5JTkcgWFhYIHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgYXR0 ZW1wdCB0byBoYW5kbGUgSnVsaWFuDQogIyMgY2FsZW5kYXJzIHNvIGRhdGVz IGJlZm9yZSBPY3RhdmUgMTUsIDE1ODIgYXJlIHdyb25nIGJ5IGFzIG11Y2gN CiAjIyBhcyBlbGV2ZW4gZGF5cy4gIEFsc28gYmUgYXdhcmUgdGhhdCBvbmx5 IFJvbWFuIENhdGhvbGljIGNvdW50cmllcw0KQEAgLTIyLDcgKzMzLDcgQEAN CiAjIyBYWFggV0FSTklORyBYWFggbGVhcCBzZWNvbmRzIGFyZSBpZ25vcmVk LiAgQSB0YWJsZSBvZiBsZWFwIHNlY29uZHMNCiAjIyBpcyBhdmFpbGFibGUg b24gdGhlIFdpa2lwZWRpYSBlbnRyeSBmb3IgbGVhcCBzZWNvbmRzLg0KICMj DQotIyMgQHNlZWFsc297ZGF0ZSxjbG9jayxub3csZGF0ZXN0cixkYXRldmVj LGNhbGVuZGFyLHdlZWtkYXl9DQorIyMgQHNlZWFsc297ZGF0ZSxjbG9jayxu b3csZGF0ZXN0cixkYXRldmVjLGNhbGVuZGFyLHdlZWtkYXksc3RycHRpbWUs c3RyZnRpbWV9DQogIyMgQGVuZCBkZWZ0eXBlZm4NCiANCiAjIyBBbGdvcml0 aG06IFBldGVyIEJhdW0gKGh0dHA6Ly92c2cuY2FwZS5jb20vfnBiYXVtL2Rh dGUvZGF0ZTAuaHRtKQ0KQEAgLTMyLDEyICs0MywxMyBAQA0KIGZ1bmN0aW9u IG4gPSBkYXRlbnVtKFksTSxELGgsbSxzKQ0KICAgcGVyc2lzdGVudCBtb250 aHN0YXJ0ID0gWzMwNiwzMzcsMCwzMSw2MSw5MiwxMjIsMTUzLDE4NCwyMTQs MjQ1LDI3NV07DQogDQotICBpZiBuYXJnaW4gPT0gMCB8fCAobmFyZ2luID4g MiAgJiYgaXNjaGFyKFkpKSB8fCBuYXJnaW4gPiA2DQorICBpZiBuYXJnaW4g PT0gMCB8fCAobmFyZ2luID4gMyAmJiBpc3N0cihZKSkgfHwgbmFyZ2luID4g Ng0KICAgICB1c2FnZSgibj1kYXRlbnVtKCdkYXRlJyBbLCBQXSkgb3Igbj1k YXRlbnVtKFksIE0sIEQgWywgaCwgbSBbLCBzXV0pIik7DQogICBlbmRpZg0K LSAgaWYgaXNjaGFyKFkpDQotICAgIGlmIG5hcmdpbiA8IDIsIE09W107IGVu ZGlmDQotICAgIFtZLE0sRCxoLG0sc10gPSBkYXRldmVjKFksTSk7DQorICBp ZiAoaXNzdHIoWSkgfHwgaXNjZWxsc3RyKFkpKQ0KKyAgICBpZiBuYXJnaW4g PCAyLCBNPVtdOyBlbmRpZiAjIyBzZXQgUCBlbXB0eQ0KKyAgICBpZiBuYXJn aW4gPCAzLCBEPSIiOyBlbmRpZiAjIyBzZXQgZm10IGVtcHR5DQorICAgIFtZ LE0sRCxoLG0sc10gPSBkYXRldmVjKFksTSxEKTsNCiAgIGVsc2UNCiAgICAg aWYgbmFyZ2luIDwgNiwgcyA9IDA7IGVuZGlmDQogICAgIGlmIG5hcmdpbiA8 IDUsIG0gPSAwOyBlbmRpZg0KSW5kZXg6IGRhdGVzcGxpdC5tDQo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2N2c3Jvb3Qvb2N0YXZlL29j dGF2ZS1mb3JnZS9tYWluL3RpbWUvZGF0ZXNwbGl0Lm0sdg0KcmV0cmlldmlu ZyByZXZpc2lvbiAxLjYNCmRpZmYgLXUgLXIxLjYgZGF0ZXNwbGl0Lm0NCi0t LSBkYXRlc3BsaXQubQkyIE1heSAyMDA1IDE1OjMwOjE2IC0wMDAwCTEuNg0K KysrIGRhdGVzcGxpdC5tCTcgSmFuIDIwMDYgMDU6NTA6MzcgLTAwMDANCkBA IC0xNyw2ICsxNyw3IEBADQogIyMgLSotIHRleGluZm8gLSotDQogIyMgQGRl ZnR5cGVmbiB7RnVuY3Rpb24gRmlsZX0ge1kgPX0gZGF0ZXNwbGl0KGRhdGUs IFApDQogIyMgQGRlZnR5cGVmbngge0Z1bmN0aW9uIEZpbGV9IHtbWSxNLEQs aCxtLHNdID19IGRhdGVzcGxpdChkYXRlLCBQKQ0KKyMjIEBkZWZ0eXBlZm54 IHtGdW5jdGlvbiBGaWxlfSB7W1ksTSxELGgsbSxzXSA9fSBkYXRlc3BsaXQo ZGF0ZSwgUCwgZm10KQ0KICMjIFNwbGl0IGEgZGF0ZSBzdHJpbmcgaW50byB0 aGUgWWVhciwgTW9udGgsIERheSwgaG91ciwgbWludXRlLCBhbmQNCiAjIyBz ZWNvbmQuICBUaGlzIHJvdXRpbmUgdHJpZXMgdG8gYmUgYXMgZm9yZ2l2aW5n IGFzIHBvc3NpYmxlIHRvIHRoZQ0KICMjIGRhdGUgaW5wdXQgd2hpbGUgcmVx dWlyaW5nIHRoYXQgdGhlIGRhdGUgaXMgbm90IGFtYmlndW91cy4NCkBAIC0y NiwxMCArMjcsMTAgQEANCiAjIyBhbG9uZyB0aGUgc2FtZSBsaW5lcywgd2hl cmUgcG9zc2libGUsIGNvbW1hcyB3ZXJlIGFsbG93ZWQgd2l0aA0KICMjIHNw YWNlcywgYW5kIHRoZSB5ZWFyL21vbnRoL2RheSBzZXBhcmF0b3JzIHdlcmUg YWxsb3dlZCBhcyBwZXJpb2QgKC4pLA0KICMjIHNsYXNoICgvKSwgYW5kIGRh c2ggKC0pLiAgTm90IGFsbCBmb3JtYXQgcG9zc2liaWxpdGllcyBhcmUgc2hv d24gaW4NCi0jIyB0aGUgZm9sbG93aW5nIHRhYmxlLCBidXQgYSBkYXRlIGxp a2UgQGNvZGV7ZGQtbW1tLXl5eXkgSEg6TU06U1N9IGlzDQotIyMgcGFyc2Vk IGp1c3QgYXMgd2VsbCBhcyBAY29kZXtkL21tbS55eXl5LCAgLEg6TU0sIEFN fS4NCisjIyB0aGUgZm9sbG93aW5nIHRhYmxlLCBidXQgYSBkYXRlIGxpa2Ug QHZhcntkZC1tbW0teXl5eSBISDpNTTpTU30gaXMNCisjIyBwYXJzZWQganVz dCBhcyB3ZWxsIGFzIEB2YXJ7ZC9tbW0ueXl5eSwgICxIOk1NLCBBTX0uDQog IyMNCi0jIyBTdXBwb3J0ZWQgQGNvZGV7ZGF0ZX0gZm9ybWF0cyBpbmNsdWRl ICh0aGUgc2FtZSBhcyBkYXRlc3RyKToNCisjIyBTdXBwb3J0ZWQgQHZhcntk YXRlfSBmb3JtYXRzIGluY2x1ZGUgKHRoZSBzYW1lIGFzIGRhdGVzdHIpOg0K ICMjIEBtdWx0aXRhYmxlIEBjb2x1bW5mcmFjdGlvbnMgMC4xIDAuNDUgMC40 NQ0KICMjIEBpdGVtIEBzdHJvbmd7Q29kZX0gQHRhYiBAc3Ryb25ne0Zvcm1h dH0gQHRhYiBAc3Ryb25ne0V4YW1wbGV9DQogIyMgQGl0ZW0gIDAgIEB0YWIg ZGQtbW1tLXl5eXkgSEg6TU06U1MgICAgQHRhYiAwNy1TZXAtMjAwMCAxNToz ODowOQ0KQEAgLTU5LDEyICs2MCwxNiBAQA0KICMjIEBpdGVtIDMxICBAdGFi IHl5eXktbW0tZGQgSEg6TU06U1MgICAgIEB0YWIgMTA0Ny0wMy0xMyAxMzoy NjowMw0KICMjIEBlbmQgbXVsdGl0YWJsZQ0KICMjDQotIyMgVGhlIHBhcmFt ZXRlciBAY29kZXtQfSBpcyBuZWVkZWQgdG8gY29udmVydCBkYXRlIHN0cmlu Z3Mgd2l0aCAyIGRpZ2l0DQorIyMgVGhlIHBhcmFtZXRlciBAdmFye1B9IGlz IG5lZWRlZCB0byBjb252ZXJ0IGRhdGUgc3RyaW5ncyB3aXRoIDIgZGlnaXQN CiAjIyB5ZWFycyBpbnRvIGRhdGVzIHdpdGggNCBkaWdpdCB5ZWFycy4gIDIg ZGlnaXQgeWVhcnMgYXJlIGFzc3VtZWQgdG8gYmUNCi0jIyBiZXR3ZWVuIEBj b2Rle1B9IGFuZCBAY29kZXtQKzk5fS4gSWYgQGNvZGV7UH0gaXMgbm90IGdp dmVuIHRoZW4gdGhlIA0KKyMjIGJldHdlZW4gQHZhcntQfSBhbmQgQGNvZGV7 UCs5OX0uIElmIEB2YXJ7UH0gaXMgbm90IGdpdmVuIHRoZW4gdGhlIA0KICMj IGN1cnJlbnQgeWVhciAtIDUwIGlzIHVzZWQsIHNvIHRoYXQgZGF0ZXMgYXJl IGNlbnRlcmVkIG9uIHRoZSBwcmVzZW50Lg0KLSMjIEZvciBiaXJ0aGRhdGVz LCB5b3Ugd291bGQgd2FudCBAY29kZXtQfSB0byBiZSBjdXJyZW50IHllYXIg LSA5OS4gIEZvcg0KLSMjIGFwcG9pbnRtZW50cywgeW91IHdvdWxkIHdhbnQg QGNvZGV7UH0gdG8gYmUgY3VycmVudCB5ZWFyLg0KKyMjIEZvciBiaXJ0aGRh dGVzLCB5b3Ugd291bGQgd2FudCBAdmFye1B9IHRvIGJlIGN1cnJlbnQgeWVh ciAtIDk5LiAgRm9yDQorIyMgYXBwb2ludG1lbnRzLCB5b3Ugd291bGQgd2Fu dCBAdmFye1B9IHRvIGJlIGN1cnJlbnQgeWVhci4NCisjIw0KKyMjIFRoZSBw YXJhbWV0ZXIgQHZhcntmbXR9IGlzIG9wdGlvbmFsIGFuZCBpdCBhbGxvd3Mg eW91IHRvIHNwZWNpZnkgdGhlDQorIyMgZm9ybWF0IGFzIGluIHN0cnB0aW1l IGFuZCBzdHJmdGltZS4gIFNlZSB0aGUgc3RyZnRpbWUgaGVscCBmb3IgaG93 IHRvDQorIyMgc3BlY2lmeSBhIGZvcm1hdCBzdHJpbmcuDQogIyMNCiAjIyBU aGlzIGZ1bmN0aW9uIG1ha2VzIG5vIHN0cm9uZyBhdHRlbXB0IHRvIHZlcmlm eSB0aGUgYWNjdXJhY3kgb2YgdGhlDQogIyMgbnVtYmVycyB0aGF0IGl0IHJl dHVybnMgaW4gdGhhdCBpdCBkb2Vzbid0IChjdXJyZW50bHkpIGNoZWNrIHRv IHNlZQ0KQEAgLTc0LDEyICs3OSwxMCBAQA0KICMjIGJ1dCBpZiB0aGVyZSBp cyBkb3VidCwgZGF0ZXNwbGl0IHdpbGwgcmV0dXJuIGFuIGVycm9yIGluc3Rl YWQgb2YNCiAjIyB0cnlpbmcgdG8gZ3Vlc3MgdGhlIHdyb25nIHZhbHVlLg0K ICMjDQotIyMgQHNlZWFsc297ZGF0ZSxjbG9jayxub3csZGF0ZXN0cixkYXRl bnVtLGNhbGVuZGFyLHdlZWtkYXl9IA0KKyMjIEBzZWVhbHNve2RhdGUsY2xv Y2ssbm93LGRhdGVzdHIsZGF0ZW51bSxjYWxlbmRhcix3ZWVrZGF5LHN0cmZ0 aW1lLHN0cnB0aW1lfQ0KICMjIEBlbmQgZGVmdHlwZWZuDQogDQogIyMgVE9E TzoNCi0jIyAgKiBTb21lIGZvcm1hdHMgYXJlIGFtYmlndW91cy4gIEFsbG93 IHRoZSB1c2VyIHRvIHNwZWNpZnkgdGhlIGZvcm1hdA0KLSMjICAgIHRvIHJl bW92ZSBhbWJpZ3VpdHkuDQogIyMgICogVmFsaWRhdGUgdGhlIGRhdGVzLg0K ICMjICAqIFBvc3NpYmxlIGJ1ZyAoYWZ0ZXIgZGF0ZXMgYXJlIHZhbGlkYXRl ZCk6IFRoZXJlIGFyZSB0aW1lcyB3aGVyZQ0KICMjICAgIHRoZSB5ZWFyIGlz IGFzc3VtZWQsIEZlYiAyOSBtYXkgYmUgYSB2YWxpZCBkYXRlLCBidXQgd2l0 aCB0aGUNCkBAIC04OSwxMSArOTIsMTcgQEANCiANCiAjIyBBdXRob3I6IEJp bGwgRGVubmV5IDxiaWxsQGdpdmViaWxsbW9uZXkuY29tPg0KIA0KLWZ1bmN0 aW9uIFt5LCBtLCBkLCBoLCBtaSwgc10gPSBkYXRlc3BsaXQoZHMsIFApDQor ZnVuY3Rpb24gW3ksIG0sIGQsIGgsIG1pLCBzXSA9IGRhdGVzcGxpdChkcywg UCwgZm10KQ0KIA0KLSAgaWYgbmFyZ2luIDwgMg0KKyAgaWYgKG5hcmdpbiA8 IDEpDQorICAgIHVzYWdlKCJkYXRlc3BsaXQoZHMsIFAsIGZtdCkiKTsNCisg IGVuZGlmDQorICBpZiAobmFyZ2luIDwgMikNCiAgICAgUCA9IFtdOw0KICAg ZW5kaWYNCisgIGlmIChuYXJnaW4gPCAzKQ0KKyAgICBmbXQgPSAiIjsNCisg IGVuZGlmDQogDQogICB0b2RheSA9IGRhdGV2ZWMobm93KTsNCiANCkBAIC0x MDYsMTcgKzExNSw0OCBAQA0KICAgZ2xvYmFsIF9fZGF5X25hbWVzICAgPSBb IlN1biI7Ik1vbiI7IlR1ZSI7IldlZCI7IlRodSI7IkZyaSI7IlNhdCJdOw0K ICAgZ2xvYmFsIF9fdGltZV9uYW1lcyAgPSBbIkFNIjsiUE0iXTsNCiANCi0g IGlmIChpc2NlbGxzdHIoZHMpKQ0KKyAgaWYgaXNjZWxsKGRzKQ0KKyAgICBp ZiAocHJvZChzaXplKGRzKSkgPiAxKQ0KKyAgICAgIGVycm9yKCJkYXRlc3Bs aXQ6IG9ubHkgc2luZ2xlIGVsZW1lbnQgY2VsbHMgYXJlIGFsbG93ZWQuIik7 DQorICAgIGVuZGlmDQogICAgIGRzID0gZHN7MX07DQogICBlbmRpZg0KKw0K ICAgZHMgPSB0b2xvd2VyKGRlYmxhbmsoZHMpKTsNCiANCi0gIGlmIChuYXJn aW4gPCAxKQ0KLSAgICBlcnJvcigiZGF0ZXNwbGl0OiBubyBpbnB1dCBhcmd1 bWVudHMiKTsNCi0gIGVsc2VpZiAobmFyZ2luID09IDEpDQotICAgIGZtdCA9 IFtdOw0KKyAgIyMgaXQncyBlYXN5IGlmIHdlIGhhdmUgYSBmb3JtYXQgdG8g dXNlDQorICBpZiAofiBpc2VtcHR5KGZtdCkpDQorICAgIGZvciBpID0gMTpz aXplKGRzLDEpDQorICAgICAgZGF0ZXN0cnVjdChpKSA9IHN0cnB0aW1lKGRz KGksOiksIGZtdCk7DQorICAgIGVuZGZvcg0KKw0KKyAgICBmb3IgaSA9IDE6 bGVuZ3RoKGRhdGVzdHJ1Y3QpDQorICAgICAgeShpKSA9IGRhdGVzdHJ1Y3Qu eWVhcjsNCisgICAgICBtKGkpID0gZGF0ZXN0cnVjdC5tb247DQorICAgICAg ZChpKSA9IGRhdGVzdHJ1Y3QubWRheTsNCisgICAgICBoKGkpID0gZGF0ZXN0 cnVjdC5ob3VyOw0KKyAgICAgIG1pKGkpID0gZGF0ZXN0cnVjdC5taW47DQor ICAgICAgcyhpKSA9IGRhdGVzdHJ1Y3Quc2VjOw0KKyAgICBlbmRmb3INCisN CisgICAgIyMgY29udmVydCB0aGUgZGlnaXRzIHRvIHRoZSBkaWdpdHMgdGhh dCB3ZSB1c2UgaW4gdGhpcyBmdW5jdGlvbg0KKyAgICBpZiBhbGwoeSA8IDE3 MCkNCisgICAgICAjIyBzdHJmdGltZSBzcGxpdHMgYmV0d2VlbiB0aGUgY3Vy cmVudCBhbmQgdGhlIGxhc3QgY2VudHVyeSBhdA0KKyAgICAgICMjIDE5NzAu DQorDQorICAgICAgIyMgbWFrZSB0aGVtIHVzZSB0aGUgUCB0aGF0IGlzIHNw ZWNpZmllZCBieSBvdXIgZnVuY3Rpb24gYW5kDQorICAgICAgIyMgY29udmVy dCB0byBmb3VyIGRpZ2l0IHllYXJzDQorICAgICAgeSA9IG1vZCh5LDEwMCk7 DQorICAgICAgeSh5IDw9IFApID0geSh5IDw9IFApICsgMTAwOw0KKyAgICAg IHkgPSB5ICsgMTkwMDsNCisgICAgZW5kaWYNCisNCisgICAgIyMgY29udmVy dCB0aGUgbW9udGhzIGZyb20gemVybyB0byBvbmUgYmFzZWQNCisgICAgbSA9 IG0gKyAxOw0KKyAgICByZXR1cm47DQogICBlbmRpZg0KLSAgJSUgd2UgaGF2 ZSB0byBkZXRlcm1pbmUgdGhlIGZvcm1hdCwgdGhpcyBjb3VsZCBiZSBlcnJv ciBwcm9uZQ0KKw0KKyAgIyMgd2UgaGF2ZSB0byBkZXRlcm1pbmUgdGhlIGZv cm1hdCwgdGhpcyBjb3VsZCBiZSBlcnJvciBwcm9uZQ0KIA0KICAgIyMgZm9y bWF0ICAwICBkZC1tbW0teXl5eSBISDpNTTpTUyAgICBlLmcuIDA3LVNlcC0y MDAwIDE1OjM4OjA5DQogICBbbWF0Y2gsIGQsIG0sIHksIGgsIG1pLCBzLCBh cF0gPSBcDQpJbmRleDogZGF0ZXZlYy5tDQo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09DQpSQ1MgZmlsZTogL2N2c3Jvb3Qvb2N0YXZlL29jdGF2ZS1mb3JnZS9t YWluL3RpbWUvZGF0ZXZlYy5tLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS43 DQpkaWZmIC11IC1yMS43IGRhdGV2ZWMubQ0KLS0tIGRhdGV2ZWMubQk4IFNl cCAyMDA1IDAyOjAwOjE4IC0wMDAwCTEuNw0KKysrIGRhdGV2ZWMubQk3IEph biAyMDA2IDA1OjUwOjM3IC0wMDAwDQpAQCAtMiw2ICsyLDcgQEANCiAjIyAt Ki0gdGV4aW5mbyAtKi0NCiAjIyBAZGVmdHlwZWZuIHtGdW5jdGlvbiBGaWxl fSB7ViA9fSBkYXRldmVjKGRhdGUpDQogIyMgQGRlZnR5cGVmbngge0Z1bmN0 aW9uIEZpbGV9IHtbWSxNLEQsaCxtLHNdID19IGRhdGV2ZWMoZGF0ZSwgUCkN CisjIyBAZGVmdHlwZWZueCB7RnVuY3Rpb24gRmlsZX0ge1tZLE0sRCxoLG0s c10gPX0gZGF0ZXZlYyhkYXRlLCBQLCBmbXQpDQogIyMgQnJlYWtzIHRoZSBu dW1iZXIgb2YgZGF5cyBzaW5jZSBKYW4gMSwgMDAwMCBpbnRvIGEgeWVhci1t b250aC1kYXkNCiAjIyBob3VyLW1pbnV0ZS1zZWNvbmQgZm9ybWF0LiBCeSB0 aGlzIHJlY2tvbmluZywgSmFuIDEsIDE5NzAgaXMgZGF5DQogIyMgbnVtYmVy IDcxOTUyOS4gIFRoZSBmcmFjdGlvbmFsIHBvcnRpb24gb2YgQGNvZGV7ZGF0 ZX0gY29ycmVzcG9uZHMgdG8gdGhlDQpAQCAtMTksMTEgKzIwLDE0IEBADQog IyMgRm9yIGJpcnRoZGF0ZXMsIHlvdSB3b3VsZCB3YW50IEBjb2Rle1B9IHRv IGJlIGN1cnJlbnQgeWVhciAtIDk5LiAgRm9yDQogIyMgYXBwb2ludG1lbnRz LCB5b3Ugd291bGQgd2FudCBAY29kZXtQfSB0byBiZSBjdXJyZW50IHllYXIu DQogIyMNCisjIyBUaGUgb3B0aW9uYWwgYXJndWVtZW50IEB2YXJ7Zm10fSBp cyBhbGxvd2VkIHRvIGluZGljYXRlIGEgZm9ybWF0DQorIyMgKHBhcnNhYmxl IGJ5IEBjb2Rle3N0cnB0aW1lfSkgdG8gcmVtb3ZlIGFtYmlndWl0eSBhYm91 dCB0aGUgZGF0ZSBmb3JtYXQuDQorIyMNCiAjIyBEYXRlcyBtdXN0IGJlIHJl cHJlc2VudGVkIGFzIGFuIGludGVnZXIgZGF0ZSBjb2RlIG9yIGluIGEgZm9y bWF0DQogIyMgcmVjb2duaXNhYmxlIGJ5IGRhdGVzcGxpdCBhcyBlaXRoZXIg YSBzdHJpbmcsIHN0cmluZyBhcnJheSwgY2VsbCwgb3INCiAjIyBjZWxsIHN0 cmluZyBhcnJheS4NCiAjIw0KLSMjIEBzZWVhbHNve2RhdGUsY2xvY2ssbm93 LGRhdGVzdHIsZGF0ZW51bSxjYWxlbmRhcix3ZWVrZGF5LGRhdGVzcGxpdH0g DQorIyMgQHNlZWFsc297ZGF0ZSxjbG9jayxub3csZGF0ZXN0cixkYXRlbnVt LGNhbGVuZGFyLHdlZWtkYXksZGF0ZXNwbGl0LHN0cnB0aW1lLHN0cmZ0aW1l fSANCiAjIyBAZW5kIGRlZnR5cGVmbg0KIA0KICMjIEFsZ29yaXRobTogUGV0 ZXIgQmF1bSAoaHR0cDovL3ZzZy5jYXBlLmNvbS9+cGJhdW0vZGF0ZS9kYXRl MC5odG0pDQpAQCAtMzEsMTQgKzM1LDE1IEBADQogIyMgVGhpcyBwcm9ncmFt IGlzIGdyYW50ZWQgdG8gdGhlIHB1YmxpYyBkb21haW4uDQogIyMgTW9kaWZp ZWQtYnk6IEJpbGwgRGVubmV5IDxiaWxsQGdpdmViaWxsbW9uZXkuY29tPg0K IA0KLWZ1bmN0aW9uIFtZLE0sRCxoLG0sc10gPSBkYXRldmVjKGRhdGUsUCkN CitmdW5jdGlvbiBbWSxNLEQsaCxtLHNdID0gZGF0ZXZlYyhkdixQLGZtdCkN CiANCi0gIGlmIG5hcmdpbiA9PSAwIHx8IG5hcmdpbiA+IDINCi0gICAgdXNh Z2UoIlY9ZGF0ZXZlYyhuKSBvciBbWSxNLEQsaCxtLHNdPWRhdGV2ZWMobiki KTsNCisgIGlmIG5hcmdpbiA9PSAwIHx8IG5hcmdpbiA+IDMNCisgICAgdXNh Z2UoIlY9ZGF0ZXZlYyhuLFAsZm10KSBvciBbWSxNLEQsaCxtLHNdPWRhdGV2 ZWMobixQLGZtdCkiKTsNCiAgIGVuZGlmDQogICBpZiBuYXJnaW4gPCAyLCBQ ID0gW107IGVuZGlmDQorICBpZiBuYXJnaW4gPCAzLCBmbXQgPSAiIjsgZW5k aWYNCiANCi0gIGlmIChpc2NoYXIoZGF0ZSkgfHwgaXNjZWxsc3RyKGRhdGUp KQ0KKyAgaWYgKGlzc3RyKGR2KSB8fCBpc2NlbGxzdHIoZHYpKQ0KICAgICAj IyBoYW5kbGUgc3RyaW5ncw0KICAgICBpZiBpc2VtcHR5KFApDQogICAgICAg dG0gPSBsb2NhbHRpbWUodGltZSk7DQpAQCAtNDksMjIgKzU0LDI4IEBADQog CQkJICAgICJKdWwiOyJBdWciOyJTZXAiOyJPY3QiOyJOb3YiOyJEZWMiXTsN CiAgICAgZ2xvYmFsIF9fdGltZV9uYW1lcyA9IFsiQU0iOyJQTSJdOw0KIA0K LSAgICBZID0gaCA9IG0gPSBzID0gemVyb3Mocm93cyhkYXRlKSwxKTsNCisg ICAgaWYgaXNjZWxsc3RyKGR2KQ0KKyAgICAgIG5pdGVyID0gbGVuZ3RoKGR2 KDopKTsNCisgICAgZWxzZQ0KKyAgICAgIG5pdGVyID0gc2l6ZShkdiwxKTsN CisgICAgZW5kaWYNCisNCisgICAgWSA9IGggPSBtID0gcyA9IHplcm9zKG5p dGVyLDEpOw0KICAgICBNID0gRCA9IG9uZXMoc2l6ZShZKSk7DQogDQotICAg IGZvciBpID0gMTpzaXplKGRhdGUsMSkNCi0gICAgICBpZiAoaXNjZWxsc3Ry KGRhdGUpKQ0KLQl0aGlzZGF0ZSA9IGRhdGV7aX07DQorICAgIGZvciBpID0g MTpuaXRlcg0KKyAgICAgIGlmIChpc2NlbGxzdHIoZHYpKQ0KKwl0aGlzZHYg PSBkdntpfTsNCiAgICAgICBlbHNlDQotCXRoaXNkYXRlID0gZGF0ZShpLDop Ow0KKwl0aGlzZHYgPSBkdihpLDopOw0KICAgICAgIGVuZGlmDQotICAgICAg W1koaSkgTShpKSBEKGkpIGgoaSkgbShpKSBzKGkpXSA9IGRhdGVzcGxpdChk YXRlKGksOiksIFApOw0KKyAgICAgIFtZKGkpIE0oaSkgRChpKSBoKGkpIG0o aSkgcyhpKV0gPSBkYXRlc3BsaXQodGhpc2R2LCBQLCBmbXQpOw0KICAgICBl bmRmb3INCiAgIGVsc2UNCiAgICAgIyMgaGFuZGxlIGRhdGUgbnVtYmVycw0K IA0KICAgICAjIyBNb3ZlIGRheSAwIGZyb20gbWlkbmlnaHQgLTAwMDEtMTIt MzEgdG8gbWlkbmlnaHQgMDAwMS0zLTENCi0gICAgeiA9IGZsb29yKGRhdGUp IC0gNjA7IA0KKyAgICB6ID0gZmxvb3IoZHYpIC0gNjA7IA0KICAgICAjIyBD YWxjdWxhdGUgbnVtYmVyIG9mIGNlbnR1cmllczsgSzE9MC4yNSBpcyB0byBh dm9pZCByb3VuZGluZyBwcm9ibGVtcy4NCiAgICAgYSA9IGZsb29yKCh6LTAu MjUpLzM2NTI0LjI1KTsNCiAgICAgIyMgRGF5cyB3aXRoaW4gY2VudHVyeTsg IEsyPTAuMjUgaXMgdG8gYXZvaWQgcm91bmRpbmcgcHJvYmxlbXMuDQpAQCAt ODEsNyArOTIsNyBAQA0KICAgICBNKE0+MTIpLT0xMjsNCiANCiAgICAgIyMg Q29udmVydCBob3VyLW1pbnV0ZS1zZWNvbmRzDQotICAgIHMgPSA4NjQwMCoo ZGF0ZS1mbG9vcihkYXRlKSk7DQorICAgIHMgPSA4NjQwMCooZHYtZmxvb3Io ZHYpKTsNCiAgICAgaCA9IGZsb29yKHMvMzYwMCk7DQogICAgIHMgPSBzIC0g MzYwMCpoOw0KICAgICBtID0gZmxvb3Iocy82MCk7DQo= --8323328-1124947576-1136613361=:4659--