From ff637a3ff4a34a6d5bd498a8990ef42023c0c718 Mon Sep 17 00:00:00 2001 From: Matt Gardner Date: Wed, 24 Jan 2018 14:07:40 -0800 Subject: [PATCH 01/18] OS#15490382: assign string value type to the result of TypeofElem --- lib/Backend/GlobOpt.cpp | 1 + test/Bugs/bug15490382.js | 23 +++++++++++++++++++++++ test/Bugs/rlexe.xml | 5 +++++ 3 files changed, 29 insertions(+) create mode 100644 test/Bugs/bug15490382.js diff --git a/lib/Backend/GlobOpt.cpp b/lib/Backend/GlobOpt.cpp index 6c708e825ea..17399330392 100644 --- a/lib/Backend/GlobOpt.cpp +++ b/lib/Backend/GlobOpt.cpp @@ -5195,6 +5195,7 @@ GlobOpt::ValueNumberDst(IR::Instr **pInstr, Value *src1Val, Value *src2Val) break; case Js::OpCode::Typeof: + case Js::OpCode::TypeofElem: return this->NewGenericValue(ValueType::String, dst); case Js::OpCode::InitLocalClosure: Assert(instr->GetDst()); diff --git a/test/Bugs/bug15490382.js b/test/Bugs/bug15490382.js new file mode 100644 index 00000000000..c9e4cc0ca91 --- /dev/null +++ b/test/Bugs/bug15490382.js @@ -0,0 +1,23 @@ +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- + +function bar(x) +{ + if (x != x) + { + return; + } +} + +function foo() +{ + bar(typeof arguments[0]); +}; + +foo(); +foo(); +foo(); + +WScript.Echo("Passed"); diff --git a/test/Bugs/rlexe.xml b/test/Bugs/rlexe.xml index 47ee9c4263f..2756763f927 100644 --- a/test/Bugs/rlexe.xml +++ b/test/Bugs/rlexe.xml @@ -432,4 +432,9 @@ bug13830477.baseline + + + bug15490382.js + + From b8fb743932a116e49219f5d9c3b2213c831cf402 Mon Sep 17 00:00:00 2001 From: Xiaoyin Liu Date: Wed, 24 Jan 2018 13:36:20 -0800 Subject: [PATCH 02/18] Refactor test/Date/parseISO.js (Fixes #4543) This PR splits parseISO.js into two files parseValidISO.js and parseInvalidISO.js. Unfortunately they still have to be tagged exclude_jenkins,exclude_xplat, because of time zone and negative years. But they are no longer slow: parseValidISO.js takes 2.4 s to complete. Fixes #4543 --- test/Date/parseISO.baseline | 7899 ---------------------------- test/Date/parseISO.js | 432 -- test/Date/parseInvalidISO.baseline | 329 ++ test/Date/parseInvalidISO.js | 231 + test/Date/parseValidISO.baseline | 1891 +++++++ test/Date/parseValidISO.js | 227 + test/Date/rlexe.xml | 28 +- 7 files changed, 2697 insertions(+), 8340 deletions(-) delete mode 100644 test/Date/parseISO.baseline delete mode 100644 test/Date/parseISO.js create mode 100644 test/Date/parseInvalidISO.baseline create mode 100644 test/Date/parseInvalidISO.js create mode 100644 test/Date/parseValidISO.baseline create mode 100644 test/Date/parseValidISO.js diff --git a/test/Date/parseISO.baseline b/test/Date/parseISO.baseline deleted file mode 100644 index 794be83289c..00000000000 --- a/test/Date/parseISO.baseline +++ /dev/null @@ -1,7899 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// Definitely valid ISO strings - -// Auto-generated - -0000 -0000-01-01T00:00:00.000Z --62167219200000 === -62167219200000 - -0001 -0001-01-01T00:00:00.000Z --62135596800000 === -62135596800000 - -1000 -1000-01-01T00:00:00.000Z --30610224000000 === -30610224000000 - -0000T00:00 -0000-01-01T08:00:00.000Z --62167190400000 === -62167190400000 - -0000T00:00Z -0000-01-01T00:00:00.000Z --62167219200000 === -62167219200000 - -0000T00:00+00:00 -0000-01-01T00:00:00.000Z --62167219200000 === -62167219200000 - -0000T00:00-00:00 -0000-01-01T00:00:00.000Z --62167219200000 === -62167219200000 - -0000T00:00+00:01 --000001-12-31T23:59:00.000Z --62167219260000 === -62167219260000 - -0000T00:00-00:01 -0000-01-01T00:01:00.000Z --62167219140000 === -62167219140000 - -0000T00:00+00:10 --000001-12-31T23:50:00.000Z --62167219800000 === -62167219800000 - -0000T00:00-00:10 -0000-01-01T00:10:00.000Z --62167218600000 === -62167218600000 - -0000T00:00+01:00 --000001-12-31T23:00:00.000Z --62167222800000 === -62167222800000 - -0000T00:00-01:00 -0000-01-01T01:00:00.000Z --62167215600000 === -62167215600000 - -0000T00:00+01:01 --000001-12-31T22:59:00.000Z --62167222860000 === -62167222860000 - -0000T00:00-01:01 -0000-01-01T01:01:00.000Z --62167215540000 === -62167215540000 - -0000T00:00+01:10 --000001-12-31T22:50:00.000Z --62167223400000 === -62167223400000 - -0000T00:00-01:10 -0000-01-01T01:10:00.000Z --62167215000000 === -62167215000000 - -0000T00:00+10:00 --000001-12-31T14:00:00.000Z --62167255200000 === -62167255200000 - -0000T00:00-10:00 -0000-01-01T10:00:00.000Z --62167183200000 === -62167183200000 - -0000T00:00+10:01 --000001-12-31T13:59:00.000Z --62167255260000 === -62167255260000 - -0000T00:00-10:01 -0000-01-01T10:01:00.000Z --62167183140000 === -62167183140000 - -0000T00:00+10:10 --000001-12-31T13:50:00.000Z --62167255800000 === -62167255800000 - -0000T00:00-10:10 -0000-01-01T10:10:00.000Z --62167182600000 === -62167182600000 - -0001T01:01 -0001-01-01T09:01:00.000Z --62135564340000 === -62135564340000 - -0001T01:01Z -0001-01-01T01:01:00.000Z --62135593140000 === -62135593140000 - -0001T01:01+00:00 -0001-01-01T01:01:00.000Z --62135593140000 === -62135593140000 - -0001T01:01-00:00 -0001-01-01T01:01:00.000Z --62135593140000 === -62135593140000 - -0001T01:01+00:01 -0001-01-01T01:00:00.000Z --62135593200000 === -62135593200000 - -0001T01:01-00:01 -0001-01-01T01:02:00.000Z --62135593080000 === -62135593080000 - -0001T01:01+00:10 -0001-01-01T00:51:00.000Z --62135593740000 === -62135593740000 - -0001T01:01-00:10 -0001-01-01T01:11:00.000Z --62135592540000 === -62135592540000 - -0001T01:01+01:00 -0001-01-01T00:01:00.000Z --62135596740000 === -62135596740000 - -0001T01:01-01:00 -0001-01-01T02:01:00.000Z --62135589540000 === -62135589540000 - -0001T01:01+01:01 -0001-01-01T00:00:00.000Z --62135596800000 === -62135596800000 - -0001T01:01-01:01 -0001-01-01T02:02:00.000Z --62135589480000 === -62135589480000 - -0001T01:01+01:10 -0000-12-31T23:51:00.000Z --62135597340000 === -62135597340000 - -0001T01:01-01:10 -0001-01-01T02:11:00.000Z --62135588940000 === -62135588940000 - -0001T01:01+10:00 -0000-12-31T15:01:00.000Z --62135629140000 === -62135629140000 - -0001T01:01-10:00 -0001-01-01T11:01:00.000Z --62135557140000 === -62135557140000 - -0001T01:01+10:01 -0000-12-31T15:00:00.000Z --62135629200000 === -62135629200000 - -0001T01:01-10:01 -0001-01-01T11:02:00.000Z --62135557080000 === -62135557080000 - -0001T01:01+10:10 -0000-12-31T14:51:00.000Z --62135629740000 === -62135629740000 - -0001T01:01-10:10 -0001-01-01T11:11:00.000Z --62135556540000 === -62135556540000 - -1000T10:10 -1000-01-01T18:10:00.000Z --30610158600000 === -30610158600000 - -1000T10:10Z -1000-01-01T10:10:00.000Z --30610187400000 === -30610187400000 - -1000T10:10+00:00 -1000-01-01T10:10:00.000Z --30610187400000 === -30610187400000 - -1000T10:10-00:00 -1000-01-01T10:10:00.000Z --30610187400000 === -30610187400000 - -1000T10:10+00:01 -1000-01-01T10:09:00.000Z --30610187460000 === -30610187460000 - -1000T10:10-00:01 -1000-01-01T10:11:00.000Z --30610187340000 === -30610187340000 - -1000T10:10+00:10 -1000-01-01T10:00:00.000Z --30610188000000 === -30610188000000 - -1000T10:10-00:10 -1000-01-01T10:20:00.000Z --30610186800000 === -30610186800000 - -1000T10:10+01:00 -1000-01-01T09:10:00.000Z --30610191000000 === -30610191000000 - -1000T10:10-01:00 -1000-01-01T11:10:00.000Z --30610183800000 === -30610183800000 - -1000T10:10+01:01 -1000-01-01T09:09:00.000Z --30610191060000 === -30610191060000 - -1000T10:10-01:01 -1000-01-01T11:11:00.000Z --30610183740000 === -30610183740000 - -1000T10:10+01:10 -1000-01-01T09:00:00.000Z --30610191600000 === -30610191600000 - -1000T10:10-01:10 -1000-01-01T11:20:00.000Z --30610183200000 === -30610183200000 - -1000T10:10+10:00 -1000-01-01T00:10:00.000Z --30610223400000 === -30610223400000 - -1000T10:10-10:00 -1000-01-01T20:10:00.000Z --30610151400000 === -30610151400000 - -1000T10:10+10:01 -1000-01-01T00:09:00.000Z --30610223460000 === -30610223460000 - -1000T10:10-10:01 -1000-01-01T20:11:00.000Z --30610151340000 === -30610151340000 - -1000T10:10+10:10 -1000-01-01T00:00:00.000Z --30610224000000 === -30610224000000 - -1000T10:10-10:10 -1000-01-01T20:20:00.000Z --30610150800000 === -30610150800000 - -0000T00:00:00 -0000-01-01T08:00:00.000Z --62167190400000 === -62167190400000 - -0000T00:00:00Z -0000-01-01T00:00:00.000Z --62167219200000 === -62167219200000 - -0000T00:00:00+00:00 -0000-01-01T00:00:00.000Z --62167219200000 === -62167219200000 - -0000T00:00:00-00:00 -0000-01-01T00:00:00.000Z --62167219200000 === -62167219200000 - -0000T00:00:00+00:01 --000001-12-31T23:59:00.000Z --62167219260000 === -62167219260000 - -0000T00:00:00-00:01 -0000-01-01T00:01:00.000Z --62167219140000 === -62167219140000 - -0000T00:00:00+00:10 --000001-12-31T23:50:00.000Z --62167219800000 === -62167219800000 - -0000T00:00:00-00:10 -0000-01-01T00:10:00.000Z --62167218600000 === -62167218600000 - -0000T00:00:00+01:00 --000001-12-31T23:00:00.000Z --62167222800000 === -62167222800000 - -0000T00:00:00-01:00 -0000-01-01T01:00:00.000Z --62167215600000 === -62167215600000 - -0000T00:00:00+01:01 --000001-12-31T22:59:00.000Z --62167222860000 === -62167222860000 - -0000T00:00:00-01:01 -0000-01-01T01:01:00.000Z --62167215540000 === -62167215540000 - -0000T00:00:00+01:10 --000001-12-31T22:50:00.000Z --62167223400000 === -62167223400000 - -0000T00:00:00-01:10 -0000-01-01T01:10:00.000Z --62167215000000 === -62167215000000 - -0000T00:00:00+10:00 --000001-12-31T14:00:00.000Z --62167255200000 === -62167255200000 - -0000T00:00:00-10:00 -0000-01-01T10:00:00.000Z --62167183200000 === -62167183200000 - -0000T00:00:00+10:01 --000001-12-31T13:59:00.000Z --62167255260000 === -62167255260000 - -0000T00:00:00-10:01 -0000-01-01T10:01:00.000Z --62167183140000 === -62167183140000 - -0000T00:00:00+10:10 --000001-12-31T13:50:00.000Z --62167255800000 === -62167255800000 - -0000T00:00:00-10:10 -0000-01-01T10:10:00.000Z --62167182600000 === -62167182600000 - -0001T01:01:01 -0001-01-01T09:01:01.000Z --62135564339000 === -62135564339000 - -0001T01:01:01Z -0001-01-01T01:01:01.000Z --62135593139000 === -62135593139000 - -0001T01:01:01+00:00 -0001-01-01T01:01:01.000Z --62135593139000 === -62135593139000 - -0001T01:01:01-00:00 -0001-01-01T01:01:01.000Z --62135593139000 === -62135593139000 - -0001T01:01:01+00:01 -0001-01-01T01:00:01.000Z --62135593199000 === -62135593199000 - -0001T01:01:01-00:01 -0001-01-01T01:02:01.000Z --62135593079000 === -62135593079000 - -0001T01:01:01+00:10 -0001-01-01T00:51:01.000Z --62135593739000 === -62135593739000 - -0001T01:01:01-00:10 -0001-01-01T01:11:01.000Z --62135592539000 === -62135592539000 - -0001T01:01:01+01:00 -0001-01-01T00:01:01.000Z --62135596739000 === -62135596739000 - -0001T01:01:01-01:00 -0001-01-01T02:01:01.000Z --62135589539000 === -62135589539000 - -0001T01:01:01+01:01 -0001-01-01T00:00:01.000Z --62135596799000 === -62135596799000 - -0001T01:01:01-01:01 -0001-01-01T02:02:01.000Z --62135589479000 === -62135589479000 - -0001T01:01:01+01:10 -0000-12-31T23:51:01.000Z --62135597339000 === -62135597339000 - -0001T01:01:01-01:10 -0001-01-01T02:11:01.000Z --62135588939000 === -62135588939000 - -0001T01:01:01+10:00 -0000-12-31T15:01:01.000Z --62135629139000 === -62135629139000 - -0001T01:01:01-10:00 -0001-01-01T11:01:01.000Z --62135557139000 === -62135557139000 - -0001T01:01:01+10:01 -0000-12-31T15:00:01.000Z --62135629199000 === -62135629199000 - -0001T01:01:01-10:01 -0001-01-01T11:02:01.000Z --62135557079000 === -62135557079000 - -0001T01:01:01+10:10 -0000-12-31T14:51:01.000Z --62135629739000 === -62135629739000 - -0001T01:01:01-10:10 -0001-01-01T11:11:01.000Z --62135556539000 === -62135556539000 - -1000T10:10:10 -1000-01-01T18:10:10.000Z --30610158590000 === -30610158590000 - -1000T10:10:10Z -1000-01-01T10:10:10.000Z --30610187390000 === -30610187390000 - -1000T10:10:10+00:00 -1000-01-01T10:10:10.000Z --30610187390000 === -30610187390000 - -1000T10:10:10-00:00 -1000-01-01T10:10:10.000Z --30610187390000 === -30610187390000 - -1000T10:10:10+00:01 -1000-01-01T10:09:10.000Z --30610187450000 === -30610187450000 - -1000T10:10:10-00:01 -1000-01-01T10:11:10.000Z --30610187330000 === -30610187330000 - -1000T10:10:10+00:10 -1000-01-01T10:00:10.000Z --30610187990000 === -30610187990000 - -1000T10:10:10-00:10 -1000-01-01T10:20:10.000Z --30610186790000 === -30610186790000 - -1000T10:10:10+01:00 -1000-01-01T09:10:10.000Z --30610190990000 === -30610190990000 - -1000T10:10:10-01:00 -1000-01-01T11:10:10.000Z --30610183790000 === -30610183790000 - -1000T10:10:10+01:01 -1000-01-01T09:09:10.000Z --30610191050000 === -30610191050000 - -1000T10:10:10-01:01 -1000-01-01T11:11:10.000Z --30610183730000 === -30610183730000 - -1000T10:10:10+01:10 -1000-01-01T09:00:10.000Z --30610191590000 === -30610191590000 - -1000T10:10:10-01:10 -1000-01-01T11:20:10.000Z --30610183190000 === -30610183190000 - -1000T10:10:10+10:00 -1000-01-01T00:10:10.000Z --30610223390000 === -30610223390000 - -1000T10:10:10-10:00 -1000-01-01T20:10:10.000Z --30610151390000 === -30610151390000 - -1000T10:10:10+10:01 -1000-01-01T00:09:10.000Z --30610223450000 === -30610223450000 - -1000T10:10:10-10:01 -1000-01-01T20:11:10.000Z --30610151330000 === -30610151330000 - -1000T10:10:10+10:10 -1000-01-01T00:00:10.000Z --30610223990000 === -30610223990000 - -1000T10:10:10-10:10 -1000-01-01T20:20:10.000Z --30610150790000 === -30610150790000 - -0000T00:00:00.010 -0000-01-01T08:00:00.010Z --62167190399990 === -62167190399990 - -0000T00:00:00.010Z -0000-01-01T00:00:00.010Z --62167219199990 === -62167219199990 - -0000T00:00:00.010+00:00 -0000-01-01T00:00:00.010Z --62167219199990 === -62167219199990 - -0000T00:00:00.010-00:00 -0000-01-01T00:00:00.010Z --62167219199990 === -62167219199990 - -0000T00:00:00.010+00:01 --000001-12-31T23:59:00.010Z --62167219259990 === -62167219259990 - -0000T00:00:00.010-00:01 -0000-01-01T00:01:00.010Z --62167219139990 === -62167219139990 - -0000T00:00:00.010+00:10 --000001-12-31T23:50:00.010Z --62167219799990 === -62167219799990 - -0000T00:00:00.010-00:10 -0000-01-01T00:10:00.010Z --62167218599990 === -62167218599990 - -0000T00:00:00.010+01:00 --000001-12-31T23:00:00.010Z --62167222799990 === -62167222799990 - -0000T00:00:00.010-01:00 -0000-01-01T01:00:00.010Z --62167215599990 === -62167215599990 - -0000T00:00:00.010+01:01 --000001-12-31T22:59:00.010Z --62167222859990 === -62167222859990 - -0000T00:00:00.010-01:01 -0000-01-01T01:01:00.010Z --62167215539990 === -62167215539990 - -0000T00:00:00.010+01:10 --000001-12-31T22:50:00.010Z --62167223399990 === -62167223399990 - -0000T00:00:00.010-01:10 -0000-01-01T01:10:00.010Z --62167214999990 === -62167214999990 - -0000T00:00:00.010+10:00 --000001-12-31T14:00:00.010Z --62167255199990 === -62167255199990 - -0000T00:00:00.010-10:00 -0000-01-01T10:00:00.010Z --62167183199990 === -62167183199990 - -0000T00:00:00.010+10:01 --000001-12-31T13:59:00.010Z --62167255259990 === -62167255259990 - -0000T00:00:00.010-10:01 -0000-01-01T10:01:00.010Z --62167183139990 === -62167183139990 - -0000T00:00:00.010+10:10 --000001-12-31T13:50:00.010Z --62167255799990 === -62167255799990 - -0000T00:00:00.010-10:10 -0000-01-01T10:10:00.010Z --62167182599990 === -62167182599990 - -0001T01:01:01.000 -0001-01-01T09:01:01.000Z --62135564339000 === -62135564339000 - -0001T01:01:01.000Z -0001-01-01T01:01:01.000Z --62135593139000 === -62135593139000 - -0001T01:01:01.000+00:00 -0001-01-01T01:01:01.000Z --62135593139000 === -62135593139000 - -0001T01:01:01.000-00:00 -0001-01-01T01:01:01.000Z --62135593139000 === -62135593139000 - -0001T01:01:01.000+00:01 -0001-01-01T01:00:01.000Z --62135593199000 === -62135593199000 - -0001T01:01:01.000-00:01 -0001-01-01T01:02:01.000Z --62135593079000 === -62135593079000 - -0001T01:01:01.000+00:10 -0001-01-01T00:51:01.000Z --62135593739000 === -62135593739000 - -0001T01:01:01.000-00:10 -0001-01-01T01:11:01.000Z --62135592539000 === -62135592539000 - -0001T01:01:01.000+01:00 -0001-01-01T00:01:01.000Z --62135596739000 === -62135596739000 - -0001T01:01:01.000-01:00 -0001-01-01T02:01:01.000Z --62135589539000 === -62135589539000 - -0001T01:01:01.000+01:01 -0001-01-01T00:00:01.000Z --62135596799000 === -62135596799000 - -0001T01:01:01.000-01:01 -0001-01-01T02:02:01.000Z --62135589479000 === -62135589479000 - -0001T01:01:01.000+01:10 -0000-12-31T23:51:01.000Z --62135597339000 === -62135597339000 - -0001T01:01:01.000-01:10 -0001-01-01T02:11:01.000Z --62135588939000 === -62135588939000 - -0001T01:01:01.000+10:00 -0000-12-31T15:01:01.000Z --62135629139000 === -62135629139000 - -0001T01:01:01.000-10:00 -0001-01-01T11:01:01.000Z --62135557139000 === -62135557139000 - -0001T01:01:01.000+10:01 -0000-12-31T15:00:01.000Z --62135629199000 === -62135629199000 - -0001T01:01:01.000-10:01 -0001-01-01T11:02:01.000Z --62135557079000 === -62135557079000 - -0001T01:01:01.000+10:10 -0000-12-31T14:51:01.000Z --62135629739000 === -62135629739000 - -0001T01:01:01.000-10:10 -0001-01-01T11:11:01.000Z --62135556539000 === -62135556539000 - -1000T10:10:10.001 -1000-01-01T18:10:10.001Z --30610158589999 === -30610158589999 - -1000T10:10:10.001Z -1000-01-01T10:10:10.001Z --30610187389999 === -30610187389999 - -1000T10:10:10.001+00:00 -1000-01-01T10:10:10.001Z --30610187389999 === -30610187389999 - -1000T10:10:10.001-00:00 -1000-01-01T10:10:10.001Z --30610187389999 === -30610187389999 - -1000T10:10:10.001+00:01 -1000-01-01T10:09:10.001Z --30610187449999 === -30610187449999 - -1000T10:10:10.001-00:01 -1000-01-01T10:11:10.001Z --30610187329999 === -30610187329999 - -1000T10:10:10.001+00:10 -1000-01-01T10:00:10.001Z --30610187989999 === -30610187989999 - -1000T10:10:10.001-00:10 -1000-01-01T10:20:10.001Z --30610186789999 === -30610186789999 - -1000T10:10:10.001+01:00 -1000-01-01T09:10:10.001Z --30610190989999 === -30610190989999 - -1000T10:10:10.001-01:00 -1000-01-01T11:10:10.001Z --30610183789999 === -30610183789999 - -1000T10:10:10.001+01:01 -1000-01-01T09:09:10.001Z --30610191049999 === -30610191049999 - -1000T10:10:10.001-01:01 -1000-01-01T11:11:10.001Z --30610183729999 === -30610183729999 - -1000T10:10:10.001+01:10 -1000-01-01T09:00:10.001Z --30610191589999 === -30610191589999 - -1000T10:10:10.001-01:10 -1000-01-01T11:20:10.001Z --30610183189999 === -30610183189999 - -1000T10:10:10.001+10:00 -1000-01-01T00:10:10.001Z --30610223389999 === -30610223389999 - -1000T10:10:10.001-10:00 -1000-01-01T20:10:10.001Z --30610151389999 === -30610151389999 - -1000T10:10:10.001+10:01 -1000-01-01T00:09:10.001Z --30610223449999 === -30610223449999 - -1000T10:10:10.001-10:01 -1000-01-01T20:11:10.001Z --30610151329999 === -30610151329999 - -1000T10:10:10.001+10:10 -1000-01-01T00:00:10.001Z --30610223989999 === -30610223989999 - -1000T10:10:10.001-10:10 -1000-01-01T20:20:10.001Z --30610150789999 === -30610150789999 - -1000T10:10:10.100 -1000-01-01T18:10:10.100Z --30610158589900 === -30610158589900 - -1000T10:10:10.100Z -1000-01-01T10:10:10.100Z --30610187389900 === -30610187389900 - -1000T10:10:10.100+00:00 -1000-01-01T10:10:10.100Z --30610187389900 === -30610187389900 - -1000T10:10:10.100-00:00 -1000-01-01T10:10:10.100Z --30610187389900 === -30610187389900 - -1000T10:10:10.100+00:01 -1000-01-01T10:09:10.100Z --30610187449900 === -30610187449900 - -1000T10:10:10.100-00:01 -1000-01-01T10:11:10.100Z --30610187329900 === -30610187329900 - -1000T10:10:10.100+00:10 -1000-01-01T10:00:10.100Z --30610187989900 === -30610187989900 - -1000T10:10:10.100-00:10 -1000-01-01T10:20:10.100Z --30610186789900 === -30610186789900 - -1000T10:10:10.100+01:00 -1000-01-01T09:10:10.100Z --30610190989900 === -30610190989900 - -1000T10:10:10.100-01:00 -1000-01-01T11:10:10.100Z --30610183789900 === -30610183789900 - -1000T10:10:10.100+01:01 -1000-01-01T09:09:10.100Z --30610191049900 === -30610191049900 - -1000T10:10:10.100-01:01 -1000-01-01T11:11:10.100Z --30610183729900 === -30610183729900 - -1000T10:10:10.100+01:10 -1000-01-01T09:00:10.100Z --30610191589900 === -30610191589900 - -1000T10:10:10.100-01:10 -1000-01-01T11:20:10.100Z --30610183189900 === -30610183189900 - -1000T10:10:10.100+10:00 -1000-01-01T00:10:10.100Z --30610223389900 === -30610223389900 - -1000T10:10:10.100-10:00 -1000-01-01T20:10:10.100Z --30610151389900 === -30610151389900 - -1000T10:10:10.100+10:01 -1000-01-01T00:09:10.100Z --30610223449900 === -30610223449900 - -1000T10:10:10.100-10:01 -1000-01-01T20:11:10.100Z --30610151329900 === -30610151329900 - -1000T10:10:10.100+10:10 -1000-01-01T00:00:10.100Z --30610223989900 === -30610223989900 - -1000T10:10:10.100-10:10 -1000-01-01T20:20:10.100Z --30610150789900 === -30610150789900 - -0000-01 -0000-01-01T00:00:00.000Z --62167219200000 === -62167219200000 - -0001-10 -0001-10-01T00:00:00.000Z --62112009600000 === -62112009600000 - -1000-01 -1000-01-01T00:00:00.000Z --30610224000000 === -30610224000000 - -0000-01T00:00 -0000-01-01T08:00:00.000Z --62167190400000 === -62167190400000 - -0000-01T00:00Z -0000-01-01T00:00:00.000Z --62167219200000 === -62167219200000 - -0000-01T00:00+00:00 -0000-01-01T00:00:00.000Z --62167219200000 === -62167219200000 - -0000-01T00:00-00:00 -0000-01-01T00:00:00.000Z --62167219200000 === -62167219200000 - -0000-01T00:00+00:01 --000001-12-31T23:59:00.000Z --62167219260000 === -62167219260000 - -0000-01T00:00-00:01 -0000-01-01T00:01:00.000Z --62167219140000 === -62167219140000 - -0000-01T00:00+00:10 --000001-12-31T23:50:00.000Z --62167219800000 === -62167219800000 - -0000-01T00:00-00:10 -0000-01-01T00:10:00.000Z --62167218600000 === -62167218600000 - -0000-01T00:00+01:00 --000001-12-31T23:00:00.000Z --62167222800000 === -62167222800000 - -0000-01T00:00-01:00 -0000-01-01T01:00:00.000Z --62167215600000 === -62167215600000 - -0000-01T00:00+01:01 --000001-12-31T22:59:00.000Z --62167222860000 === -62167222860000 - -0000-01T00:00-01:01 -0000-01-01T01:01:00.000Z --62167215540000 === -62167215540000 - -0000-01T00:00+01:10 --000001-12-31T22:50:00.000Z --62167223400000 === -62167223400000 - -0000-01T00:00-01:10 -0000-01-01T01:10:00.000Z --62167215000000 === -62167215000000 - -0000-01T00:00+10:00 --000001-12-31T14:00:00.000Z --62167255200000 === -62167255200000 - -0000-01T00:00-10:00 -0000-01-01T10:00:00.000Z --62167183200000 === -62167183200000 - -0000-01T00:00+10:01 --000001-12-31T13:59:00.000Z --62167255260000 === -62167255260000 - -0000-01T00:00-10:01 -0000-01-01T10:01:00.000Z --62167183140000 === -62167183140000 - -0000-01T00:00+10:10 --000001-12-31T13:50:00.000Z --62167255800000 === -62167255800000 - -0000-01T00:00-10:10 -0000-01-01T10:10:00.000Z --62167182600000 === -62167182600000 - -0001-10T01:01 -0001-10-01T08:01:00.000Z --62111980740000 === -62111980740000 - -0001-10T01:01Z -0001-10-01T01:01:00.000Z --62112005940000 === -62112005940000 - -0001-10T01:01+00:00 -0001-10-01T01:01:00.000Z --62112005940000 === -62112005940000 - -0001-10T01:01-00:00 -0001-10-01T01:01:00.000Z --62112005940000 === -62112005940000 - -0001-10T01:01+00:01 -0001-10-01T01:00:00.000Z --62112006000000 === -62112006000000 - -0001-10T01:01-00:01 -0001-10-01T01:02:00.000Z --62112005880000 === -62112005880000 - -0001-10T01:01+00:10 -0001-10-01T00:51:00.000Z --62112006540000 === -62112006540000 - -0001-10T01:01-00:10 -0001-10-01T01:11:00.000Z --62112005340000 === -62112005340000 - -0001-10T01:01+01:00 -0001-10-01T00:01:00.000Z --62112009540000 === -62112009540000 - -0001-10T01:01-01:00 -0001-10-01T02:01:00.000Z --62112002340000 === -62112002340000 - -0001-10T01:01+01:01 -0001-10-01T00:00:00.000Z --62112009600000 === -62112009600000 - -0001-10T01:01-01:01 -0001-10-01T02:02:00.000Z --62112002280000 === -62112002280000 - -0001-10T01:01+01:10 -0001-09-30T23:51:00.000Z --62112010140000 === -62112010140000 - -0001-10T01:01-01:10 -0001-10-01T02:11:00.000Z --62112001740000 === -62112001740000 - -0001-10T01:01+10:00 -0001-09-30T15:01:00.000Z --62112041940000 === -62112041940000 - -0001-10T01:01-10:00 -0001-10-01T11:01:00.000Z --62111969940000 === -62111969940000 - -0001-10T01:01+10:01 -0001-09-30T15:00:00.000Z --62112042000000 === -62112042000000 - -0001-10T01:01-10:01 -0001-10-01T11:02:00.000Z --62111969880000 === -62111969880000 - -0001-10T01:01+10:10 -0001-09-30T14:51:00.000Z --62112042540000 === -62112042540000 - -0001-10T01:01-10:10 -0001-10-01T11:11:00.000Z --62111969340000 === -62111969340000 - -1000-01T10:10 -1000-01-01T18:10:00.000Z --30610158600000 === -30610158600000 - -1000-01T10:10Z -1000-01-01T10:10:00.000Z --30610187400000 === -30610187400000 - -1000-01T10:10+00:00 -1000-01-01T10:10:00.000Z --30610187400000 === -30610187400000 - -1000-01T10:10-00:00 -1000-01-01T10:10:00.000Z --30610187400000 === -30610187400000 - -1000-01T10:10+00:01 -1000-01-01T10:09:00.000Z --30610187460000 === -30610187460000 - -1000-01T10:10-00:01 -1000-01-01T10:11:00.000Z --30610187340000 === -30610187340000 - -1000-01T10:10+00:10 -1000-01-01T10:00:00.000Z --30610188000000 === -30610188000000 - -1000-01T10:10-00:10 -1000-01-01T10:20:00.000Z --30610186800000 === -30610186800000 - -1000-01T10:10+01:00 -1000-01-01T09:10:00.000Z --30610191000000 === -30610191000000 - -1000-01T10:10-01:00 -1000-01-01T11:10:00.000Z --30610183800000 === -30610183800000 - -1000-01T10:10+01:01 -1000-01-01T09:09:00.000Z --30610191060000 === -30610191060000 - -1000-01T10:10-01:01 -1000-01-01T11:11:00.000Z --30610183740000 === -30610183740000 - -1000-01T10:10+01:10 -1000-01-01T09:00:00.000Z --30610191600000 === -30610191600000 - -1000-01T10:10-01:10 -1000-01-01T11:20:00.000Z --30610183200000 === -30610183200000 - -1000-01T10:10+10:00 -1000-01-01T00:10:00.000Z --30610223400000 === -30610223400000 - -1000-01T10:10-10:00 -1000-01-01T20:10:00.000Z --30610151400000 === -30610151400000 - -1000-01T10:10+10:01 -1000-01-01T00:09:00.000Z --30610223460000 === -30610223460000 - -1000-01T10:10-10:01 -1000-01-01T20:11:00.000Z --30610151340000 === -30610151340000 - -1000-01T10:10+10:10 -1000-01-01T00:00:00.000Z --30610224000000 === -30610224000000 - -1000-01T10:10-10:10 -1000-01-01T20:20:00.000Z --30610150800000 === -30610150800000 - -0000-01T00:00:00 -0000-01-01T08:00:00.000Z --62167190400000 === -62167190400000 - -0000-01T00:00:00Z -0000-01-01T00:00:00.000Z --62167219200000 === -62167219200000 - -0000-01T00:00:00+00:00 -0000-01-01T00:00:00.000Z --62167219200000 === -62167219200000 - -0000-01T00:00:00-00:00 -0000-01-01T00:00:00.000Z --62167219200000 === -62167219200000 - -0000-01T00:00:00+00:01 --000001-12-31T23:59:00.000Z --62167219260000 === -62167219260000 - -0000-01T00:00:00-00:01 -0000-01-01T00:01:00.000Z --62167219140000 === -62167219140000 - -0000-01T00:00:00+00:10 --000001-12-31T23:50:00.000Z --62167219800000 === -62167219800000 - -0000-01T00:00:00-00:10 -0000-01-01T00:10:00.000Z --62167218600000 === -62167218600000 - -0000-01T00:00:00+01:00 --000001-12-31T23:00:00.000Z --62167222800000 === -62167222800000 - -0000-01T00:00:00-01:00 -0000-01-01T01:00:00.000Z --62167215600000 === -62167215600000 - -0000-01T00:00:00+01:01 --000001-12-31T22:59:00.000Z --62167222860000 === -62167222860000 - -0000-01T00:00:00-01:01 -0000-01-01T01:01:00.000Z --62167215540000 === -62167215540000 - -0000-01T00:00:00+01:10 --000001-12-31T22:50:00.000Z --62167223400000 === -62167223400000 - -0000-01T00:00:00-01:10 -0000-01-01T01:10:00.000Z --62167215000000 === -62167215000000 - -0000-01T00:00:00+10:00 --000001-12-31T14:00:00.000Z --62167255200000 === -62167255200000 - -0000-01T00:00:00-10:00 -0000-01-01T10:00:00.000Z --62167183200000 === -62167183200000 - -0000-01T00:00:00+10:01 --000001-12-31T13:59:00.000Z --62167255260000 === -62167255260000 - -0000-01T00:00:00-10:01 -0000-01-01T10:01:00.000Z --62167183140000 === -62167183140000 - -0000-01T00:00:00+10:10 --000001-12-31T13:50:00.000Z --62167255800000 === -62167255800000 - -0000-01T00:00:00-10:10 -0000-01-01T10:10:00.000Z --62167182600000 === -62167182600000 - -0001-10T01:01:01 -0001-10-01T08:01:01.000Z --62111980739000 === -62111980739000 - -0001-10T01:01:01Z -0001-10-01T01:01:01.000Z --62112005939000 === -62112005939000 - -0001-10T01:01:01+00:00 -0001-10-01T01:01:01.000Z --62112005939000 === -62112005939000 - -0001-10T01:01:01-00:00 -0001-10-01T01:01:01.000Z --62112005939000 === -62112005939000 - -0001-10T01:01:01+00:01 -0001-10-01T01:00:01.000Z --62112005999000 === -62112005999000 - -0001-10T01:01:01-00:01 -0001-10-01T01:02:01.000Z --62112005879000 === -62112005879000 - -0001-10T01:01:01+00:10 -0001-10-01T00:51:01.000Z --62112006539000 === -62112006539000 - -0001-10T01:01:01-00:10 -0001-10-01T01:11:01.000Z --62112005339000 === -62112005339000 - -0001-10T01:01:01+01:00 -0001-10-01T00:01:01.000Z --62112009539000 === -62112009539000 - -0001-10T01:01:01-01:00 -0001-10-01T02:01:01.000Z --62112002339000 === -62112002339000 - -0001-10T01:01:01+01:01 -0001-10-01T00:00:01.000Z --62112009599000 === -62112009599000 - -0001-10T01:01:01-01:01 -0001-10-01T02:02:01.000Z --62112002279000 === -62112002279000 - -0001-10T01:01:01+01:10 -0001-09-30T23:51:01.000Z --62112010139000 === -62112010139000 - -0001-10T01:01:01-01:10 -0001-10-01T02:11:01.000Z --62112001739000 === -62112001739000 - -0001-10T01:01:01+10:00 -0001-09-30T15:01:01.000Z --62112041939000 === -62112041939000 - -0001-10T01:01:01-10:00 -0001-10-01T11:01:01.000Z --62111969939000 === -62111969939000 - -0001-10T01:01:01+10:01 -0001-09-30T15:00:01.000Z --62112041999000 === -62112041999000 - -0001-10T01:01:01-10:01 -0001-10-01T11:02:01.000Z --62111969879000 === -62111969879000 - -0001-10T01:01:01+10:10 -0001-09-30T14:51:01.000Z --62112042539000 === -62112042539000 - -0001-10T01:01:01-10:10 -0001-10-01T11:11:01.000Z --62111969339000 === -62111969339000 - -1000-01T10:10:10 -1000-01-01T18:10:10.000Z --30610158590000 === -30610158590000 - -1000-01T10:10:10Z -1000-01-01T10:10:10.000Z --30610187390000 === -30610187390000 - -1000-01T10:10:10+00:00 -1000-01-01T10:10:10.000Z --30610187390000 === -30610187390000 - -1000-01T10:10:10-00:00 -1000-01-01T10:10:10.000Z --30610187390000 === -30610187390000 - -1000-01T10:10:10+00:01 -1000-01-01T10:09:10.000Z --30610187450000 === -30610187450000 - -1000-01T10:10:10-00:01 -1000-01-01T10:11:10.000Z --30610187330000 === -30610187330000 - -1000-01T10:10:10+00:10 -1000-01-01T10:00:10.000Z --30610187990000 === -30610187990000 - -1000-01T10:10:10-00:10 -1000-01-01T10:20:10.000Z --30610186790000 === -30610186790000 - -1000-01T10:10:10+01:00 -1000-01-01T09:10:10.000Z --30610190990000 === -30610190990000 - -1000-01T10:10:10-01:00 -1000-01-01T11:10:10.000Z --30610183790000 === -30610183790000 - -1000-01T10:10:10+01:01 -1000-01-01T09:09:10.000Z --30610191050000 === -30610191050000 - -1000-01T10:10:10-01:01 -1000-01-01T11:11:10.000Z --30610183730000 === -30610183730000 - -1000-01T10:10:10+01:10 -1000-01-01T09:00:10.000Z --30610191590000 === -30610191590000 - -1000-01T10:10:10-01:10 -1000-01-01T11:20:10.000Z --30610183190000 === -30610183190000 - -1000-01T10:10:10+10:00 -1000-01-01T00:10:10.000Z --30610223390000 === -30610223390000 - -1000-01T10:10:10-10:00 -1000-01-01T20:10:10.000Z --30610151390000 === -30610151390000 - -1000-01T10:10:10+10:01 -1000-01-01T00:09:10.000Z --30610223450000 === -30610223450000 - -1000-01T10:10:10-10:01 -1000-01-01T20:11:10.000Z --30610151330000 === -30610151330000 - -1000-01T10:10:10+10:10 -1000-01-01T00:00:10.000Z --30610223990000 === -30610223990000 - -1000-01T10:10:10-10:10 -1000-01-01T20:20:10.000Z --30610150790000 === -30610150790000 - -0000-01T00:00:00.010 -0000-01-01T08:00:00.010Z --62167190399990 === -62167190399990 - -0000-01T00:00:00.010Z -0000-01-01T00:00:00.010Z --62167219199990 === -62167219199990 - -0000-01T00:00:00.010+00:00 -0000-01-01T00:00:00.010Z --62167219199990 === -62167219199990 - -0000-01T00:00:00.010-00:00 -0000-01-01T00:00:00.010Z --62167219199990 === -62167219199990 - -0000-01T00:00:00.010+00:01 --000001-12-31T23:59:00.010Z --62167219259990 === -62167219259990 - -0000-01T00:00:00.010-00:01 -0000-01-01T00:01:00.010Z --62167219139990 === -62167219139990 - -0000-01T00:00:00.010+00:10 --000001-12-31T23:50:00.010Z --62167219799990 === -62167219799990 - -0000-01T00:00:00.010-00:10 -0000-01-01T00:10:00.010Z --62167218599990 === -62167218599990 - -0000-01T00:00:00.010+01:00 --000001-12-31T23:00:00.010Z --62167222799990 === -62167222799990 - -0000-01T00:00:00.010-01:00 -0000-01-01T01:00:00.010Z --62167215599990 === -62167215599990 - -0000-01T00:00:00.010+01:01 --000001-12-31T22:59:00.010Z --62167222859990 === -62167222859990 - -0000-01T00:00:00.010-01:01 -0000-01-01T01:01:00.010Z --62167215539990 === -62167215539990 - -0000-01T00:00:00.010+01:10 --000001-12-31T22:50:00.010Z --62167223399990 === -62167223399990 - -0000-01T00:00:00.010-01:10 -0000-01-01T01:10:00.010Z --62167214999990 === -62167214999990 - -0000-01T00:00:00.010+10:00 --000001-12-31T14:00:00.010Z --62167255199990 === -62167255199990 - -0000-01T00:00:00.010-10:00 -0000-01-01T10:00:00.010Z --62167183199990 === -62167183199990 - -0000-01T00:00:00.010+10:01 --000001-12-31T13:59:00.010Z --62167255259990 === -62167255259990 - -0000-01T00:00:00.010-10:01 -0000-01-01T10:01:00.010Z --62167183139990 === -62167183139990 - -0000-01T00:00:00.010+10:10 --000001-12-31T13:50:00.010Z --62167255799990 === -62167255799990 - -0000-01T00:00:00.010-10:10 -0000-01-01T10:10:00.010Z --62167182599990 === -62167182599990 - -0001-10T01:01:01.000 -0001-10-01T08:01:01.000Z --62111980739000 === -62111980739000 - -0001-10T01:01:01.000Z -0001-10-01T01:01:01.000Z --62112005939000 === -62112005939000 - -0001-10T01:01:01.000+00:00 -0001-10-01T01:01:01.000Z --62112005939000 === -62112005939000 - -0001-10T01:01:01.000-00:00 -0001-10-01T01:01:01.000Z --62112005939000 === -62112005939000 - -0001-10T01:01:01.000+00:01 -0001-10-01T01:00:01.000Z --62112005999000 === -62112005999000 - -0001-10T01:01:01.000-00:01 -0001-10-01T01:02:01.000Z --62112005879000 === -62112005879000 - -0001-10T01:01:01.000+00:10 -0001-10-01T00:51:01.000Z --62112006539000 === -62112006539000 - -0001-10T01:01:01.000-00:10 -0001-10-01T01:11:01.000Z --62112005339000 === -62112005339000 - -0001-10T01:01:01.000+01:00 -0001-10-01T00:01:01.000Z --62112009539000 === -62112009539000 - -0001-10T01:01:01.000-01:00 -0001-10-01T02:01:01.000Z --62112002339000 === -62112002339000 - -0001-10T01:01:01.000+01:01 -0001-10-01T00:00:01.000Z --62112009599000 === -62112009599000 - -0001-10T01:01:01.000-01:01 -0001-10-01T02:02:01.000Z --62112002279000 === -62112002279000 - -0001-10T01:01:01.000+01:10 -0001-09-30T23:51:01.000Z --62112010139000 === -62112010139000 - -0001-10T01:01:01.000-01:10 -0001-10-01T02:11:01.000Z --62112001739000 === -62112001739000 - -0001-10T01:01:01.000+10:00 -0001-09-30T15:01:01.000Z --62112041939000 === -62112041939000 - -0001-10T01:01:01.000-10:00 -0001-10-01T11:01:01.000Z --62111969939000 === -62111969939000 - -0001-10T01:01:01.000+10:01 -0001-09-30T15:00:01.000Z --62112041999000 === -62112041999000 - -0001-10T01:01:01.000-10:01 -0001-10-01T11:02:01.000Z --62111969879000 === -62111969879000 - -0001-10T01:01:01.000+10:10 -0001-09-30T14:51:01.000Z --62112042539000 === -62112042539000 - -0001-10T01:01:01.000-10:10 -0001-10-01T11:11:01.000Z --62111969339000 === -62111969339000 - -1000-01T10:10:10.001 -1000-01-01T18:10:10.001Z --30610158589999 === -30610158589999 - -1000-01T10:10:10.001Z -1000-01-01T10:10:10.001Z --30610187389999 === -30610187389999 - -1000-01T10:10:10.001+00:00 -1000-01-01T10:10:10.001Z --30610187389999 === -30610187389999 - -1000-01T10:10:10.001-00:00 -1000-01-01T10:10:10.001Z --30610187389999 === -30610187389999 - -1000-01T10:10:10.001+00:01 -1000-01-01T10:09:10.001Z --30610187449999 === -30610187449999 - -1000-01T10:10:10.001-00:01 -1000-01-01T10:11:10.001Z --30610187329999 === -30610187329999 - -1000-01T10:10:10.001+00:10 -1000-01-01T10:00:10.001Z --30610187989999 === -30610187989999 - -1000-01T10:10:10.001-00:10 -1000-01-01T10:20:10.001Z --30610186789999 === -30610186789999 - -1000-01T10:10:10.001+01:00 -1000-01-01T09:10:10.001Z --30610190989999 === -30610190989999 - -1000-01T10:10:10.001-01:00 -1000-01-01T11:10:10.001Z --30610183789999 === -30610183789999 - -1000-01T10:10:10.001+01:01 -1000-01-01T09:09:10.001Z --30610191049999 === -30610191049999 - -1000-01T10:10:10.001-01:01 -1000-01-01T11:11:10.001Z --30610183729999 === -30610183729999 - -1000-01T10:10:10.001+01:10 -1000-01-01T09:00:10.001Z --30610191589999 === -30610191589999 - -1000-01T10:10:10.001-01:10 -1000-01-01T11:20:10.001Z --30610183189999 === -30610183189999 - -1000-01T10:10:10.001+10:00 -1000-01-01T00:10:10.001Z --30610223389999 === -30610223389999 - -1000-01T10:10:10.001-10:00 -1000-01-01T20:10:10.001Z --30610151389999 === -30610151389999 - -1000-01T10:10:10.001+10:01 -1000-01-01T00:09:10.001Z --30610223449999 === -30610223449999 - -1000-01T10:10:10.001-10:01 -1000-01-01T20:11:10.001Z --30610151329999 === -30610151329999 - -1000-01T10:10:10.001+10:10 -1000-01-01T00:00:10.001Z --30610223989999 === -30610223989999 - -1000-01T10:10:10.001-10:10 -1000-01-01T20:20:10.001Z --30610150789999 === -30610150789999 - -1000-01T10:10:10.100 -1000-01-01T18:10:10.100Z --30610158589900 === -30610158589900 - -1000-01T10:10:10.100Z -1000-01-01T10:10:10.100Z --30610187389900 === -30610187389900 - -1000-01T10:10:10.100+00:00 -1000-01-01T10:10:10.100Z --30610187389900 === -30610187389900 - -1000-01T10:10:10.100-00:00 -1000-01-01T10:10:10.100Z --30610187389900 === -30610187389900 - -1000-01T10:10:10.100+00:01 -1000-01-01T10:09:10.100Z --30610187449900 === -30610187449900 - -1000-01T10:10:10.100-00:01 -1000-01-01T10:11:10.100Z --30610187329900 === -30610187329900 - -1000-01T10:10:10.100+00:10 -1000-01-01T10:00:10.100Z --30610187989900 === -30610187989900 - -1000-01T10:10:10.100-00:10 -1000-01-01T10:20:10.100Z --30610186789900 === -30610186789900 - -1000-01T10:10:10.100+01:00 -1000-01-01T09:10:10.100Z --30610190989900 === -30610190989900 - -1000-01T10:10:10.100-01:00 -1000-01-01T11:10:10.100Z --30610183789900 === -30610183789900 - -1000-01T10:10:10.100+01:01 -1000-01-01T09:09:10.100Z --30610191049900 === -30610191049900 - -1000-01T10:10:10.100-01:01 -1000-01-01T11:11:10.100Z --30610183729900 === -30610183729900 - -1000-01T10:10:10.100+01:10 -1000-01-01T09:00:10.100Z --30610191589900 === -30610191589900 - -1000-01T10:10:10.100-01:10 -1000-01-01T11:20:10.100Z --30610183189900 === -30610183189900 - -1000-01T10:10:10.100+10:00 -1000-01-01T00:10:10.100Z --30610223389900 === -30610223389900 - -1000-01T10:10:10.100-10:00 -1000-01-01T20:10:10.100Z --30610151389900 === -30610151389900 - -1000-01T10:10:10.100+10:01 -1000-01-01T00:09:10.100Z --30610223449900 === -30610223449900 - -1000-01T10:10:10.100-10:01 -1000-01-01T20:11:10.100Z --30610151329900 === -30610151329900 - -1000-01T10:10:10.100+10:10 -1000-01-01T00:00:10.100Z --30610223989900 === -30610223989900 - -1000-01T10:10:10.100-10:10 -1000-01-01T20:20:10.100Z --30610150789900 === -30610150789900 - -0000-01-01 -0000-01-01T00:00:00.000Z --62167219200000 === -62167219200000 - -0001-10-10 -0001-10-10T00:00:00.000Z --62111232000000 === -62111232000000 - -1000-01-01 -1000-01-01T00:00:00.000Z --30610224000000 === -30610224000000 - -0000-01-01T00:00 -0000-01-01T08:00:00.000Z --62167190400000 === -62167190400000 - -0000-01-01T00:00Z -0000-01-01T00:00:00.000Z --62167219200000 === -62167219200000 - -0000-01-01T00:00+00:00 -0000-01-01T00:00:00.000Z --62167219200000 === -62167219200000 - -0000-01-01T00:00-00:00 -0000-01-01T00:00:00.000Z --62167219200000 === -62167219200000 - -0000-01-01T00:00+00:01 --000001-12-31T23:59:00.000Z --62167219260000 === -62167219260000 - -0000-01-01T00:00-00:01 -0000-01-01T00:01:00.000Z --62167219140000 === -62167219140000 - -0000-01-01T00:00+00:10 --000001-12-31T23:50:00.000Z --62167219800000 === -62167219800000 - -0000-01-01T00:00-00:10 -0000-01-01T00:10:00.000Z --62167218600000 === -62167218600000 - -0000-01-01T00:00+01:00 --000001-12-31T23:00:00.000Z --62167222800000 === -62167222800000 - -0000-01-01T00:00-01:00 -0000-01-01T01:00:00.000Z --62167215600000 === -62167215600000 - -0000-01-01T00:00+01:01 --000001-12-31T22:59:00.000Z --62167222860000 === -62167222860000 - -0000-01-01T00:00-01:01 -0000-01-01T01:01:00.000Z --62167215540000 === -62167215540000 - -0000-01-01T00:00+01:10 --000001-12-31T22:50:00.000Z --62167223400000 === -62167223400000 - -0000-01-01T00:00-01:10 -0000-01-01T01:10:00.000Z --62167215000000 === -62167215000000 - -0000-01-01T00:00+10:00 --000001-12-31T14:00:00.000Z --62167255200000 === -62167255200000 - -0000-01-01T00:00-10:00 -0000-01-01T10:00:00.000Z --62167183200000 === -62167183200000 - -0000-01-01T00:00+10:01 --000001-12-31T13:59:00.000Z --62167255260000 === -62167255260000 - -0000-01-01T00:00-10:01 -0000-01-01T10:01:00.000Z --62167183140000 === -62167183140000 - -0000-01-01T00:00+10:10 --000001-12-31T13:50:00.000Z --62167255800000 === -62167255800000 - -0000-01-01T00:00-10:10 -0000-01-01T10:10:00.000Z --62167182600000 === -62167182600000 - -0001-10-10T01:01 -0001-10-10T08:01:00.000Z --62111203140000 === -62111203140000 - -0001-10-10T01:01Z -0001-10-10T01:01:00.000Z --62111228340000 === -62111228340000 - -0001-10-10T01:01+00:00 -0001-10-10T01:01:00.000Z --62111228340000 === -62111228340000 - -0001-10-10T01:01-00:00 -0001-10-10T01:01:00.000Z --62111228340000 === -62111228340000 - -0001-10-10T01:01+00:01 -0001-10-10T01:00:00.000Z --62111228400000 === -62111228400000 - -0001-10-10T01:01-00:01 -0001-10-10T01:02:00.000Z --62111228280000 === -62111228280000 - -0001-10-10T01:01+00:10 -0001-10-10T00:51:00.000Z --62111228940000 === -62111228940000 - -0001-10-10T01:01-00:10 -0001-10-10T01:11:00.000Z --62111227740000 === -62111227740000 - -0001-10-10T01:01+01:00 -0001-10-10T00:01:00.000Z --62111231940000 === -62111231940000 - -0001-10-10T01:01-01:00 -0001-10-10T02:01:00.000Z --62111224740000 === -62111224740000 - -0001-10-10T01:01+01:01 -0001-10-10T00:00:00.000Z --62111232000000 === -62111232000000 - -0001-10-10T01:01-01:01 -0001-10-10T02:02:00.000Z --62111224680000 === -62111224680000 - -0001-10-10T01:01+01:10 -0001-10-09T23:51:00.000Z --62111232540000 === -62111232540000 - -0001-10-10T01:01-01:10 -0001-10-10T02:11:00.000Z --62111224140000 === -62111224140000 - -0001-10-10T01:01+10:00 -0001-10-09T15:01:00.000Z --62111264340000 === -62111264340000 - -0001-10-10T01:01-10:00 -0001-10-10T11:01:00.000Z --62111192340000 === -62111192340000 - -0001-10-10T01:01+10:01 -0001-10-09T15:00:00.000Z --62111264400000 === -62111264400000 - -0001-10-10T01:01-10:01 -0001-10-10T11:02:00.000Z --62111192280000 === -62111192280000 - -0001-10-10T01:01+10:10 -0001-10-09T14:51:00.000Z --62111264940000 === -62111264940000 - -0001-10-10T01:01-10:10 -0001-10-10T11:11:00.000Z --62111191740000 === -62111191740000 - -1000-01-01T10:10 -1000-01-01T18:10:00.000Z --30610158600000 === -30610158600000 - -1000-01-01T10:10Z -1000-01-01T10:10:00.000Z --30610187400000 === -30610187400000 - -1000-01-01T10:10+00:00 -1000-01-01T10:10:00.000Z --30610187400000 === -30610187400000 - -1000-01-01T10:10-00:00 -1000-01-01T10:10:00.000Z --30610187400000 === -30610187400000 - -1000-01-01T10:10+00:01 -1000-01-01T10:09:00.000Z --30610187460000 === -30610187460000 - -1000-01-01T10:10-00:01 -1000-01-01T10:11:00.000Z --30610187340000 === -30610187340000 - -1000-01-01T10:10+00:10 -1000-01-01T10:00:00.000Z --30610188000000 === -30610188000000 - -1000-01-01T10:10-00:10 -1000-01-01T10:20:00.000Z --30610186800000 === -30610186800000 - -1000-01-01T10:10+01:00 -1000-01-01T09:10:00.000Z --30610191000000 === -30610191000000 - -1000-01-01T10:10-01:00 -1000-01-01T11:10:00.000Z --30610183800000 === -30610183800000 - -1000-01-01T10:10+01:01 -1000-01-01T09:09:00.000Z --30610191060000 === -30610191060000 - -1000-01-01T10:10-01:01 -1000-01-01T11:11:00.000Z --30610183740000 === -30610183740000 - -1000-01-01T10:10+01:10 -1000-01-01T09:00:00.000Z --30610191600000 === -30610191600000 - -1000-01-01T10:10-01:10 -1000-01-01T11:20:00.000Z --30610183200000 === -30610183200000 - -1000-01-01T10:10+10:00 -1000-01-01T00:10:00.000Z --30610223400000 === -30610223400000 - -1000-01-01T10:10-10:00 -1000-01-01T20:10:00.000Z --30610151400000 === -30610151400000 - -1000-01-01T10:10+10:01 -1000-01-01T00:09:00.000Z --30610223460000 === -30610223460000 - -1000-01-01T10:10-10:01 -1000-01-01T20:11:00.000Z --30610151340000 === -30610151340000 - -1000-01-01T10:10+10:10 -1000-01-01T00:00:00.000Z --30610224000000 === -30610224000000 - -1000-01-01T10:10-10:10 -1000-01-01T20:20:00.000Z --30610150800000 === -30610150800000 - -0000-01-01T00:00:00 -0000-01-01T08:00:00.000Z --62167190400000 === -62167190400000 - -0000-01-01T00:00:00Z -0000-01-01T00:00:00.000Z --62167219200000 === -62167219200000 - -0000-01-01T00:00:00+00:00 -0000-01-01T00:00:00.000Z --62167219200000 === -62167219200000 - -0000-01-01T00:00:00-00:00 -0000-01-01T00:00:00.000Z --62167219200000 === -62167219200000 - -0000-01-01T00:00:00+00:01 --000001-12-31T23:59:00.000Z --62167219260000 === -62167219260000 - -0000-01-01T00:00:00-00:01 -0000-01-01T00:01:00.000Z --62167219140000 === -62167219140000 - -0000-01-01T00:00:00+00:10 --000001-12-31T23:50:00.000Z --62167219800000 === -62167219800000 - -0000-01-01T00:00:00-00:10 -0000-01-01T00:10:00.000Z --62167218600000 === -62167218600000 - -0000-01-01T00:00:00+01:00 --000001-12-31T23:00:00.000Z --62167222800000 === -62167222800000 - -0000-01-01T00:00:00-01:00 -0000-01-01T01:00:00.000Z --62167215600000 === -62167215600000 - -0000-01-01T00:00:00+01:01 --000001-12-31T22:59:00.000Z --62167222860000 === -62167222860000 - -0000-01-01T00:00:00-01:01 -0000-01-01T01:01:00.000Z --62167215540000 === -62167215540000 - -0000-01-01T00:00:00+01:10 --000001-12-31T22:50:00.000Z --62167223400000 === -62167223400000 - -0000-01-01T00:00:00-01:10 -0000-01-01T01:10:00.000Z --62167215000000 === -62167215000000 - -0000-01-01T00:00:00+10:00 --000001-12-31T14:00:00.000Z --62167255200000 === -62167255200000 - -0000-01-01T00:00:00-10:00 -0000-01-01T10:00:00.000Z --62167183200000 === -62167183200000 - -0000-01-01T00:00:00+10:01 --000001-12-31T13:59:00.000Z --62167255260000 === -62167255260000 - -0000-01-01T00:00:00-10:01 -0000-01-01T10:01:00.000Z --62167183140000 === -62167183140000 - -0000-01-01T00:00:00+10:10 --000001-12-31T13:50:00.000Z --62167255800000 === -62167255800000 - -0000-01-01T00:00:00-10:10 -0000-01-01T10:10:00.000Z --62167182600000 === -62167182600000 - -0001-10-10T01:01:01 -0001-10-10T08:01:01.000Z --62111203139000 === -62111203139000 - -0001-10-10T01:01:01Z -0001-10-10T01:01:01.000Z --62111228339000 === -62111228339000 - -0001-10-10T01:01:01+00:00 -0001-10-10T01:01:01.000Z --62111228339000 === -62111228339000 - -0001-10-10T01:01:01-00:00 -0001-10-10T01:01:01.000Z --62111228339000 === -62111228339000 - -0001-10-10T01:01:01+00:01 -0001-10-10T01:00:01.000Z --62111228399000 === -62111228399000 - -0001-10-10T01:01:01-00:01 -0001-10-10T01:02:01.000Z --62111228279000 === -62111228279000 - -0001-10-10T01:01:01+00:10 -0001-10-10T00:51:01.000Z --62111228939000 === -62111228939000 - -0001-10-10T01:01:01-00:10 -0001-10-10T01:11:01.000Z --62111227739000 === -62111227739000 - -0001-10-10T01:01:01+01:00 -0001-10-10T00:01:01.000Z --62111231939000 === -62111231939000 - -0001-10-10T01:01:01-01:00 -0001-10-10T02:01:01.000Z --62111224739000 === -62111224739000 - -0001-10-10T01:01:01+01:01 -0001-10-10T00:00:01.000Z --62111231999000 === -62111231999000 - -0001-10-10T01:01:01-01:01 -0001-10-10T02:02:01.000Z --62111224679000 === -62111224679000 - -0001-10-10T01:01:01+01:10 -0001-10-09T23:51:01.000Z --62111232539000 === -62111232539000 - -0001-10-10T01:01:01-01:10 -0001-10-10T02:11:01.000Z --62111224139000 === -62111224139000 - -0001-10-10T01:01:01+10:00 -0001-10-09T15:01:01.000Z --62111264339000 === -62111264339000 - -0001-10-10T01:01:01-10:00 -0001-10-10T11:01:01.000Z --62111192339000 === -62111192339000 - -0001-10-10T01:01:01+10:01 -0001-10-09T15:00:01.000Z --62111264399000 === -62111264399000 - -0001-10-10T01:01:01-10:01 -0001-10-10T11:02:01.000Z --62111192279000 === -62111192279000 - -0001-10-10T01:01:01+10:10 -0001-10-09T14:51:01.000Z --62111264939000 === -62111264939000 - -0001-10-10T01:01:01-10:10 -0001-10-10T11:11:01.000Z --62111191739000 === -62111191739000 - -1000-01-01T10:10:10 -1000-01-01T18:10:10.000Z --30610158590000 === -30610158590000 - -1000-01-01T10:10:10Z -1000-01-01T10:10:10.000Z --30610187390000 === -30610187390000 - -1000-01-01T10:10:10+00:00 -1000-01-01T10:10:10.000Z --30610187390000 === -30610187390000 - -1000-01-01T10:10:10-00:00 -1000-01-01T10:10:10.000Z --30610187390000 === -30610187390000 - -1000-01-01T10:10:10+00:01 -1000-01-01T10:09:10.000Z --30610187450000 === -30610187450000 - -1000-01-01T10:10:10-00:01 -1000-01-01T10:11:10.000Z --30610187330000 === -30610187330000 - -1000-01-01T10:10:10+00:10 -1000-01-01T10:00:10.000Z --30610187990000 === -30610187990000 - -1000-01-01T10:10:10-00:10 -1000-01-01T10:20:10.000Z --30610186790000 === -30610186790000 - -1000-01-01T10:10:10+01:00 -1000-01-01T09:10:10.000Z --30610190990000 === -30610190990000 - -1000-01-01T10:10:10-01:00 -1000-01-01T11:10:10.000Z --30610183790000 === -30610183790000 - -1000-01-01T10:10:10+01:01 -1000-01-01T09:09:10.000Z --30610191050000 === -30610191050000 - -1000-01-01T10:10:10-01:01 -1000-01-01T11:11:10.000Z --30610183730000 === -30610183730000 - -1000-01-01T10:10:10+01:10 -1000-01-01T09:00:10.000Z --30610191590000 === -30610191590000 - -1000-01-01T10:10:10-01:10 -1000-01-01T11:20:10.000Z --30610183190000 === -30610183190000 - -1000-01-01T10:10:10+10:00 -1000-01-01T00:10:10.000Z --30610223390000 === -30610223390000 - -1000-01-01T10:10:10-10:00 -1000-01-01T20:10:10.000Z --30610151390000 === -30610151390000 - -1000-01-01T10:10:10+10:01 -1000-01-01T00:09:10.000Z --30610223450000 === -30610223450000 - -1000-01-01T10:10:10-10:01 -1000-01-01T20:11:10.000Z --30610151330000 === -30610151330000 - -1000-01-01T10:10:10+10:10 -1000-01-01T00:00:10.000Z --30610223990000 === -30610223990000 - -1000-01-01T10:10:10-10:10 -1000-01-01T20:20:10.000Z --30610150790000 === -30610150790000 - -0000-01-01T00:00:00.010 -0000-01-01T08:00:00.010Z --62167190399990 === -62167190399990 - -0000-01-01T00:00:00.010Z -0000-01-01T00:00:00.010Z --62167219199990 === -62167219199990 - -0000-01-01T00:00:00.010+00:00 -0000-01-01T00:00:00.010Z --62167219199990 === -62167219199990 - -0000-01-01T00:00:00.010-00:00 -0000-01-01T00:00:00.010Z --62167219199990 === -62167219199990 - -0000-01-01T00:00:00.010+00:01 --000001-12-31T23:59:00.010Z --62167219259990 === -62167219259990 - -0000-01-01T00:00:00.010-00:01 -0000-01-01T00:01:00.010Z --62167219139990 === -62167219139990 - -0000-01-01T00:00:00.010+00:10 --000001-12-31T23:50:00.010Z --62167219799990 === -62167219799990 - -0000-01-01T00:00:00.010-00:10 -0000-01-01T00:10:00.010Z --62167218599990 === -62167218599990 - -0000-01-01T00:00:00.010+01:00 --000001-12-31T23:00:00.010Z --62167222799990 === -62167222799990 - -0000-01-01T00:00:00.010-01:00 -0000-01-01T01:00:00.010Z --62167215599990 === -62167215599990 - -0000-01-01T00:00:00.010+01:01 --000001-12-31T22:59:00.010Z --62167222859990 === -62167222859990 - -0000-01-01T00:00:00.010-01:01 -0000-01-01T01:01:00.010Z --62167215539990 === -62167215539990 - -0000-01-01T00:00:00.010+01:10 --000001-12-31T22:50:00.010Z --62167223399990 === -62167223399990 - -0000-01-01T00:00:00.010-01:10 -0000-01-01T01:10:00.010Z --62167214999990 === -62167214999990 - -0000-01-01T00:00:00.010+10:00 --000001-12-31T14:00:00.010Z --62167255199990 === -62167255199990 - -0000-01-01T00:00:00.010-10:00 -0000-01-01T10:00:00.010Z --62167183199990 === -62167183199990 - -0000-01-01T00:00:00.010+10:01 --000001-12-31T13:59:00.010Z --62167255259990 === -62167255259990 - -0000-01-01T00:00:00.010-10:01 -0000-01-01T10:01:00.010Z --62167183139990 === -62167183139990 - -0000-01-01T00:00:00.010+10:10 --000001-12-31T13:50:00.010Z --62167255799990 === -62167255799990 - -0000-01-01T00:00:00.010-10:10 -0000-01-01T10:10:00.010Z --62167182599990 === -62167182599990 - -0001-10-10T01:01:01.000 -0001-10-10T08:01:01.000Z --62111203139000 === -62111203139000 - -0001-10-10T01:01:01.000Z -0001-10-10T01:01:01.000Z --62111228339000 === -62111228339000 - -0001-10-10T01:01:01.000+00:00 -0001-10-10T01:01:01.000Z --62111228339000 === -62111228339000 - -0001-10-10T01:01:01.000-00:00 -0001-10-10T01:01:01.000Z --62111228339000 === -62111228339000 - -0001-10-10T01:01:01.000+00:01 -0001-10-10T01:00:01.000Z --62111228399000 === -62111228399000 - -0001-10-10T01:01:01.000-00:01 -0001-10-10T01:02:01.000Z --62111228279000 === -62111228279000 - -0001-10-10T01:01:01.000+00:10 -0001-10-10T00:51:01.000Z --62111228939000 === -62111228939000 - -0001-10-10T01:01:01.000-00:10 -0001-10-10T01:11:01.000Z --62111227739000 === -62111227739000 - -0001-10-10T01:01:01.000+01:00 -0001-10-10T00:01:01.000Z --62111231939000 === -62111231939000 - -0001-10-10T01:01:01.000-01:00 -0001-10-10T02:01:01.000Z --62111224739000 === -62111224739000 - -0001-10-10T01:01:01.000+01:01 -0001-10-10T00:00:01.000Z --62111231999000 === -62111231999000 - -0001-10-10T01:01:01.000-01:01 -0001-10-10T02:02:01.000Z --62111224679000 === -62111224679000 - -0001-10-10T01:01:01.000+01:10 -0001-10-09T23:51:01.000Z --62111232539000 === -62111232539000 - -0001-10-10T01:01:01.000-01:10 -0001-10-10T02:11:01.000Z --62111224139000 === -62111224139000 - -0001-10-10T01:01:01.000+10:00 -0001-10-09T15:01:01.000Z --62111264339000 === -62111264339000 - -0001-10-10T01:01:01.000-10:00 -0001-10-10T11:01:01.000Z --62111192339000 === -62111192339000 - -0001-10-10T01:01:01.000+10:01 -0001-10-09T15:00:01.000Z --62111264399000 === -62111264399000 - -0001-10-10T01:01:01.000-10:01 -0001-10-10T11:02:01.000Z --62111192279000 === -62111192279000 - -0001-10-10T01:01:01.000+10:10 -0001-10-09T14:51:01.000Z --62111264939000 === -62111264939000 - -0001-10-10T01:01:01.000-10:10 -0001-10-10T11:11:01.000Z --62111191739000 === -62111191739000 - -1000-01-01T10:10:10.001 -1000-01-01T18:10:10.001Z --30610158589999 === -30610158589999 - -1000-01-01T10:10:10.001Z -1000-01-01T10:10:10.001Z --30610187389999 === -30610187389999 - -1000-01-01T10:10:10.001+00:00 -1000-01-01T10:10:10.001Z --30610187389999 === -30610187389999 - -1000-01-01T10:10:10.001-00:00 -1000-01-01T10:10:10.001Z --30610187389999 === -30610187389999 - -1000-01-01T10:10:10.001+00:01 -1000-01-01T10:09:10.001Z --30610187449999 === -30610187449999 - -1000-01-01T10:10:10.001-00:01 -1000-01-01T10:11:10.001Z --30610187329999 === -30610187329999 - -1000-01-01T10:10:10.001+00:10 -1000-01-01T10:00:10.001Z --30610187989999 === -30610187989999 - -1000-01-01T10:10:10.001-00:10 -1000-01-01T10:20:10.001Z --30610186789999 === -30610186789999 - -1000-01-01T10:10:10.001+01:00 -1000-01-01T09:10:10.001Z --30610190989999 === -30610190989999 - -1000-01-01T10:10:10.001-01:00 -1000-01-01T11:10:10.001Z --30610183789999 === -30610183789999 - -1000-01-01T10:10:10.001+01:01 -1000-01-01T09:09:10.001Z --30610191049999 === -30610191049999 - -1000-01-01T10:10:10.001-01:01 -1000-01-01T11:11:10.001Z --30610183729999 === -30610183729999 - -1000-01-01T10:10:10.001+01:10 -1000-01-01T09:00:10.001Z --30610191589999 === -30610191589999 - -1000-01-01T10:10:10.001-01:10 -1000-01-01T11:20:10.001Z --30610183189999 === -30610183189999 - -1000-01-01T10:10:10.001+10:00 -1000-01-01T00:10:10.001Z --30610223389999 === -30610223389999 - -1000-01-01T10:10:10.001-10:00 -1000-01-01T20:10:10.001Z --30610151389999 === -30610151389999 - -1000-01-01T10:10:10.001+10:01 -1000-01-01T00:09:10.001Z --30610223449999 === -30610223449999 - -1000-01-01T10:10:10.001-10:01 -1000-01-01T20:11:10.001Z --30610151329999 === -30610151329999 - -1000-01-01T10:10:10.001+10:10 -1000-01-01T00:00:10.001Z --30610223989999 === -30610223989999 - -1000-01-01T10:10:10.001-10:10 -1000-01-01T20:20:10.001Z --30610150789999 === -30610150789999 - -1000-01-01T10:10:10.100 -1000-01-01T18:10:10.100Z --30610158589900 === -30610158589900 - -1000-01-01T10:10:10.100Z -1000-01-01T10:10:10.100Z --30610187389900 === -30610187389900 - -1000-01-01T10:10:10.100+00:00 -1000-01-01T10:10:10.100Z --30610187389900 === -30610187389900 - -1000-01-01T10:10:10.100-00:00 -1000-01-01T10:10:10.100Z --30610187389900 === -30610187389900 - -1000-01-01T10:10:10.100+00:01 -1000-01-01T10:09:10.100Z --30610187449900 === -30610187449900 - -1000-01-01T10:10:10.100-00:01 -1000-01-01T10:11:10.100Z --30610187329900 === -30610187329900 - -1000-01-01T10:10:10.100+00:10 -1000-01-01T10:00:10.100Z --30610187989900 === -30610187989900 - -1000-01-01T10:10:10.100-00:10 -1000-01-01T10:20:10.100Z --30610186789900 === -30610186789900 - -1000-01-01T10:10:10.100+01:00 -1000-01-01T09:10:10.100Z --30610190989900 === -30610190989900 - -1000-01-01T10:10:10.100-01:00 -1000-01-01T11:10:10.100Z --30610183789900 === -30610183789900 - -1000-01-01T10:10:10.100+01:01 -1000-01-01T09:09:10.100Z --30610191049900 === -30610191049900 - -1000-01-01T10:10:10.100-01:01 -1000-01-01T11:11:10.100Z --30610183729900 === -30610183729900 - -1000-01-01T10:10:10.100+01:10 -1000-01-01T09:00:10.100Z --30610191589900 === -30610191589900 - -1000-01-01T10:10:10.100-01:10 -1000-01-01T11:20:10.100Z --30610183189900 === -30610183189900 - -1000-01-01T10:10:10.100+10:00 -1000-01-01T00:10:10.100Z --30610223389900 === -30610223389900 - -1000-01-01T10:10:10.100-10:00 -1000-01-01T20:10:10.100Z --30610151389900 === -30610151389900 - -1000-01-01T10:10:10.100+10:01 -1000-01-01T00:09:10.100Z --30610223449900 === -30610223449900 - -1000-01-01T10:10:10.100-10:01 -1000-01-01T20:11:10.100Z --30610151329900 === -30610151329900 - -1000-01-01T10:10:10.100+10:10 -1000-01-01T00:00:10.100Z --30610223989900 === -30610223989900 - -1000-01-01T10:10:10.100-10:10 -1000-01-01T20:20:10.100Z --30610150789900 === -30610150789900 - -+010010 -+010010-01-01T00:00:00.000Z -253717920000000 === 253717920000000 - --010010 --010010-01-01T00:00:00.000Z --378052272000000 === -378052272000000 - -+000000 -0000-01-01T00:00:00.000Z --62167219200000 === -62167219200000 - -+000001 -0001-01-01T00:00:00.000Z --62135596800000 === -62135596800000 - --000001 --000001-01-01T00:00:00.000Z --62198755200000 === -62198755200000 - -+100000 -+100000-01-01T00:00:00.000Z -3093527980800000 === 3093527980800000 - --100000 --100000-01-01T00:00:00.000Z --3217862419200000 === -3217862419200000 - -+010010T00:00 -+010010-01-01T08:00:00.000Z -253717948800000 === 253717948800000 - --010010T00:00 --010010-01-01T08:00:00.000Z --378052243200000 === -378052243200000 - -+010010T00:00Z -+010010-01-01T00:00:00.000Z -253717920000000 === 253717920000000 - --010010T00:00Z --010010-01-01T00:00:00.000Z --378052272000000 === -378052272000000 - -+010010T00:00+00:00 -+010010-01-01T00:00:00.000Z -253717920000000 === 253717920000000 - --010010T00:00+00:00 --010010-01-01T00:00:00.000Z --378052272000000 === -378052272000000 - -+010010T00:00-00:00 -+010010-01-01T00:00:00.000Z -253717920000000 === 253717920000000 - --010010T00:00-00:00 --010010-01-01T00:00:00.000Z --378052272000000 === -378052272000000 - -+010010T00:00+00:01 -+010009-12-31T23:59:00.000Z -253717919940000 === 253717919940000 - --010010T00:00+00:01 --010011-12-31T23:59:00.000Z --378052272060000 === -378052272060000 - -+010010T00:00-00:01 -+010010-01-01T00:01:00.000Z -253717920060000 === 253717920060000 - --010010T00:00-00:01 --010010-01-01T00:01:00.000Z --378052271940000 === -378052271940000 - -+010010T00:00+00:10 -+010009-12-31T23:50:00.000Z -253717919400000 === 253717919400000 - --010010T00:00+00:10 --010011-12-31T23:50:00.000Z --378052272600000 === -378052272600000 - -+010010T00:00-00:10 -+010010-01-01T00:10:00.000Z -253717920600000 === 253717920600000 - --010010T00:00-00:10 --010010-01-01T00:10:00.000Z --378052271400000 === -378052271400000 - -+010010T00:00+01:00 -+010009-12-31T23:00:00.000Z -253717916400000 === 253717916400000 - --010010T00:00+01:00 --010011-12-31T23:00:00.000Z --378052275600000 === -378052275600000 - -+010010T00:00-01:00 -+010010-01-01T01:00:00.000Z -253717923600000 === 253717923600000 - --010010T00:00-01:00 --010010-01-01T01:00:00.000Z --378052268400000 === -378052268400000 - -+010010T00:00+01:01 -+010009-12-31T22:59:00.000Z -253717916340000 === 253717916340000 - --010010T00:00+01:01 --010011-12-31T22:59:00.000Z --378052275660000 === -378052275660000 - -+010010T00:00-01:01 -+010010-01-01T01:01:00.000Z -253717923660000 === 253717923660000 - --010010T00:00-01:01 --010010-01-01T01:01:00.000Z --378052268340000 === -378052268340000 - -+010010T00:00+01:10 -+010009-12-31T22:50:00.000Z -253717915800000 === 253717915800000 - --010010T00:00+01:10 --010011-12-31T22:50:00.000Z --378052276200000 === -378052276200000 - -+010010T00:00-01:10 -+010010-01-01T01:10:00.000Z -253717924200000 === 253717924200000 - --010010T00:00-01:10 --010010-01-01T01:10:00.000Z --378052267800000 === -378052267800000 - -+010010T00:00+10:00 -+010009-12-31T14:00:00.000Z -253717884000000 === 253717884000000 - --010010T00:00+10:00 --010011-12-31T14:00:00.000Z --378052308000000 === -378052308000000 - -+010010T00:00-10:00 -+010010-01-01T10:00:00.000Z -253717956000000 === 253717956000000 - --010010T00:00-10:00 --010010-01-01T10:00:00.000Z --378052236000000 === -378052236000000 - -+010010T00:00+10:01 -+010009-12-31T13:59:00.000Z -253717883940000 === 253717883940000 - --010010T00:00+10:01 --010011-12-31T13:59:00.000Z --378052308060000 === -378052308060000 - -+010010T00:00-10:01 -+010010-01-01T10:01:00.000Z -253717956060000 === 253717956060000 - --010010T00:00-10:01 --010010-01-01T10:01:00.000Z --378052235940000 === -378052235940000 - -+010010T00:00+10:10 -+010009-12-31T13:50:00.000Z -253717883400000 === 253717883400000 - --010010T00:00+10:10 --010011-12-31T13:50:00.000Z --378052308600000 === -378052308600000 - -+010010T00:00-10:10 -+010010-01-01T10:10:00.000Z -253717956600000 === 253717956600000 - --010010T00:00-10:10 --010010-01-01T10:10:00.000Z --378052235400000 === -378052235400000 - -+000000T01:01 -0000-01-01T09:01:00.000Z --62167186740000 === -62167186740000 - -+000000T01:01Z -0000-01-01T01:01:00.000Z --62167215540000 === -62167215540000 - -+000000T01:01+00:00 -0000-01-01T01:01:00.000Z --62167215540000 === -62167215540000 - -+000000T01:01-00:00 -0000-01-01T01:01:00.000Z --62167215540000 === -62167215540000 - -+000000T01:01+00:01 -0000-01-01T01:00:00.000Z --62167215600000 === -62167215600000 - -+000000T01:01-00:01 -0000-01-01T01:02:00.000Z --62167215480000 === -62167215480000 - -+000000T01:01+00:10 -0000-01-01T00:51:00.000Z --62167216140000 === -62167216140000 - -+000000T01:01-00:10 -0000-01-01T01:11:00.000Z --62167214940000 === -62167214940000 - -+000000T01:01+01:00 -0000-01-01T00:01:00.000Z --62167219140000 === -62167219140000 - -+000000T01:01-01:00 -0000-01-01T02:01:00.000Z --62167211940000 === -62167211940000 - -+000000T01:01+01:01 -0000-01-01T00:00:00.000Z --62167219200000 === -62167219200000 - -+000000T01:01-01:01 -0000-01-01T02:02:00.000Z --62167211880000 === -62167211880000 - -+000000T01:01+01:10 --000001-12-31T23:51:00.000Z --62167219740000 === -62167219740000 - -+000000T01:01-01:10 -0000-01-01T02:11:00.000Z --62167211340000 === -62167211340000 - -+000000T01:01+10:00 --000001-12-31T15:01:00.000Z --62167251540000 === -62167251540000 - -+000000T01:01-10:00 -0000-01-01T11:01:00.000Z --62167179540000 === -62167179540000 - -+000000T01:01+10:01 --000001-12-31T15:00:00.000Z --62167251600000 === -62167251600000 - -+000000T01:01-10:01 -0000-01-01T11:02:00.000Z --62167179480000 === -62167179480000 - -+000000T01:01+10:10 --000001-12-31T14:51:00.000Z --62167252140000 === -62167252140000 - -+000000T01:01-10:10 -0000-01-01T11:11:00.000Z --62167178940000 === -62167178940000 - -+000001T10:10 -0001-01-01T18:10:00.000Z --62135531400000 === -62135531400000 - --000001T10:10 --000001-01-01T18:10:00.000Z --62198689800000 === -62198689800000 - -+000001T10:10Z -0001-01-01T10:10:00.000Z --62135560200000 === -62135560200000 - --000001T10:10Z --000001-01-01T10:10:00.000Z --62198718600000 === -62198718600000 - -+000001T10:10+00:00 -0001-01-01T10:10:00.000Z --62135560200000 === -62135560200000 - --000001T10:10+00:00 --000001-01-01T10:10:00.000Z --62198718600000 === -62198718600000 - -+000001T10:10-00:00 -0001-01-01T10:10:00.000Z --62135560200000 === -62135560200000 - --000001T10:10-00:00 --000001-01-01T10:10:00.000Z --62198718600000 === -62198718600000 - -+000001T10:10+00:01 -0001-01-01T10:09:00.000Z --62135560260000 === -62135560260000 - --000001T10:10+00:01 --000001-01-01T10:09:00.000Z --62198718660000 === -62198718660000 - -+000001T10:10-00:01 -0001-01-01T10:11:00.000Z --62135560140000 === -62135560140000 - --000001T10:10-00:01 --000001-01-01T10:11:00.000Z --62198718540000 === -62198718540000 - -+000001T10:10+00:10 -0001-01-01T10:00:00.000Z --62135560800000 === -62135560800000 - --000001T10:10+00:10 --000001-01-01T10:00:00.000Z --62198719200000 === -62198719200000 - -+000001T10:10-00:10 -0001-01-01T10:20:00.000Z --62135559600000 === -62135559600000 - --000001T10:10-00:10 --000001-01-01T10:20:00.000Z --62198718000000 === -62198718000000 - -+000001T10:10+01:00 -0001-01-01T09:10:00.000Z --62135563800000 === -62135563800000 - --000001T10:10+01:00 --000001-01-01T09:10:00.000Z --62198722200000 === -62198722200000 - -+000001T10:10-01:00 -0001-01-01T11:10:00.000Z --62135556600000 === -62135556600000 - --000001T10:10-01:00 --000001-01-01T11:10:00.000Z --62198715000000 === -62198715000000 - -+000001T10:10+01:01 -0001-01-01T09:09:00.000Z --62135563860000 === -62135563860000 - --000001T10:10+01:01 --000001-01-01T09:09:00.000Z --62198722260000 === -62198722260000 - -+000001T10:10-01:01 -0001-01-01T11:11:00.000Z --62135556540000 === -62135556540000 - --000001T10:10-01:01 --000001-01-01T11:11:00.000Z --62198714940000 === -62198714940000 - -+000001T10:10+01:10 -0001-01-01T09:00:00.000Z --62135564400000 === -62135564400000 - --000001T10:10+01:10 --000001-01-01T09:00:00.000Z --62198722800000 === -62198722800000 - -+000001T10:10-01:10 -0001-01-01T11:20:00.000Z --62135556000000 === -62135556000000 - --000001T10:10-01:10 --000001-01-01T11:20:00.000Z --62198714400000 === -62198714400000 - -+000001T10:10+10:00 -0001-01-01T00:10:00.000Z --62135596200000 === -62135596200000 - --000001T10:10+10:00 --000001-01-01T00:10:00.000Z --62198754600000 === -62198754600000 - -+000001T10:10-10:00 -0001-01-01T20:10:00.000Z --62135524200000 === -62135524200000 - --000001T10:10-10:00 --000001-01-01T20:10:00.000Z --62198682600000 === -62198682600000 - -+000001T10:10+10:01 -0001-01-01T00:09:00.000Z --62135596260000 === -62135596260000 - --000001T10:10+10:01 --000001-01-01T00:09:00.000Z --62198754660000 === -62198754660000 - -+000001T10:10-10:01 -0001-01-01T20:11:00.000Z --62135524140000 === -62135524140000 - --000001T10:10-10:01 --000001-01-01T20:11:00.000Z --62198682540000 === -62198682540000 - -+000001T10:10+10:10 -0001-01-01T00:00:00.000Z --62135596800000 === -62135596800000 - --000001T10:10+10:10 --000001-01-01T00:00:00.000Z --62198755200000 === -62198755200000 - -+000001T10:10-10:10 -0001-01-01T20:20:00.000Z --62135523600000 === -62135523600000 - --000001T10:10-10:10 --000001-01-01T20:20:00.000Z --62198682000000 === -62198682000000 - -+100000T00:00 -+100000-01-01T08:00:00.000Z -3093528009600000 === 3093528009600000 - --100000T00:00 --100000-01-01T08:00:00.000Z --3217862390400000 === -3217862390400000 - -+100000T00:00Z -+100000-01-01T00:00:00.000Z -3093527980800000 === 3093527980800000 - --100000T00:00Z --100000-01-01T00:00:00.000Z --3217862419200000 === -3217862419200000 - -+100000T00:00+00:00 -+100000-01-01T00:00:00.000Z -3093527980800000 === 3093527980800000 - --100000T00:00+00:00 --100000-01-01T00:00:00.000Z --3217862419200000 === -3217862419200000 - -+100000T00:00-00:00 -+100000-01-01T00:00:00.000Z -3093527980800000 === 3093527980800000 - --100000T00:00-00:00 --100000-01-01T00:00:00.000Z --3217862419200000 === -3217862419200000 - -+100000T00:00+00:01 -+099999-12-31T23:59:00.000Z -3093527980740000 === 3093527980740000 - --100000T00:00+00:01 --100001-12-31T23:59:00.000Z --3217862419260000 === -3217862419260000 - -+100000T00:00-00:01 -+100000-01-01T00:01:00.000Z -3093527980860000 === 3093527980860000 - --100000T00:00-00:01 --100000-01-01T00:01:00.000Z --3217862419140000 === -3217862419140000 - -+100000T00:00+00:10 -+099999-12-31T23:50:00.000Z -3093527980200000 === 3093527980200000 - --100000T00:00+00:10 --100001-12-31T23:50:00.000Z --3217862419800000 === -3217862419800000 - -+100000T00:00-00:10 -+100000-01-01T00:10:00.000Z -3093527981400000 === 3093527981400000 - --100000T00:00-00:10 --100000-01-01T00:10:00.000Z --3217862418600000 === -3217862418600000 - -+100000T00:00+01:00 -+099999-12-31T23:00:00.000Z -3093527977200000 === 3093527977200000 - --100000T00:00+01:00 --100001-12-31T23:00:00.000Z --3217862422800000 === -3217862422800000 - -+100000T00:00-01:00 -+100000-01-01T01:00:00.000Z -3093527984400000 === 3093527984400000 - --100000T00:00-01:00 --100000-01-01T01:00:00.000Z --3217862415600000 === -3217862415600000 - -+100000T00:00+01:01 -+099999-12-31T22:59:00.000Z -3093527977140000 === 3093527977140000 - --100000T00:00+01:01 --100001-12-31T22:59:00.000Z --3217862422860000 === -3217862422860000 - -+100000T00:00-01:01 -+100000-01-01T01:01:00.000Z -3093527984460000 === 3093527984460000 - --100000T00:00-01:01 --100000-01-01T01:01:00.000Z --3217862415540000 === -3217862415540000 - -+100000T00:00+01:10 -+099999-12-31T22:50:00.000Z -3093527976600000 === 3093527976600000 - --100000T00:00+01:10 --100001-12-31T22:50:00.000Z --3217862423400000 === -3217862423400000 - -+100000T00:00-01:10 -+100000-01-01T01:10:00.000Z -3093527985000000 === 3093527985000000 - --100000T00:00-01:10 --100000-01-01T01:10:00.000Z --3217862415000000 === -3217862415000000 - -+100000T00:00+10:00 -+099999-12-31T14:00:00.000Z -3093527944800000 === 3093527944800000 - --100000T00:00+10:00 --100001-12-31T14:00:00.000Z --3217862455200000 === -3217862455200000 - -+100000T00:00-10:00 -+100000-01-01T10:00:00.000Z -3093528016800000 === 3093528016800000 - --100000T00:00-10:00 --100000-01-01T10:00:00.000Z --3217862383200000 === -3217862383200000 - -+100000T00:00+10:01 -+099999-12-31T13:59:00.000Z -3093527944740000 === 3093527944740000 - --100000T00:00+10:01 --100001-12-31T13:59:00.000Z --3217862455260000 === -3217862455260000 - -+100000T00:00-10:01 -+100000-01-01T10:01:00.000Z -3093528016860000 === 3093528016860000 - --100000T00:00-10:01 --100000-01-01T10:01:00.000Z --3217862383140000 === -3217862383140000 - -+100000T00:00+10:10 -+099999-12-31T13:50:00.000Z -3093527944200000 === 3093527944200000 - --100000T00:00+10:10 --100001-12-31T13:50:00.000Z --3217862455800000 === -3217862455800000 - -+100000T00:00-10:10 -+100000-01-01T10:10:00.000Z -3093528017400000 === 3093528017400000 - --100000T00:00-10:10 --100000-01-01T10:10:00.000Z --3217862382600000 === -3217862382600000 - -+010010T00:00:00 -+010010-01-01T08:00:00.000Z -253717948800000 === 253717948800000 - --010010T00:00:00 --010010-01-01T08:00:00.000Z --378052243200000 === -378052243200000 - -+010010T00:00:00Z -+010010-01-01T00:00:00.000Z -253717920000000 === 253717920000000 - --010010T00:00:00Z --010010-01-01T00:00:00.000Z --378052272000000 === -378052272000000 - -+010010T00:00:00+00:00 -+010010-01-01T00:00:00.000Z -253717920000000 === 253717920000000 - --010010T00:00:00+00:00 --010010-01-01T00:00:00.000Z --378052272000000 === -378052272000000 - -+010010T00:00:00-00:00 -+010010-01-01T00:00:00.000Z -253717920000000 === 253717920000000 - --010010T00:00:00-00:00 --010010-01-01T00:00:00.000Z --378052272000000 === -378052272000000 - -+010010T00:00:00+00:01 -+010009-12-31T23:59:00.000Z -253717919940000 === 253717919940000 - --010010T00:00:00+00:01 --010011-12-31T23:59:00.000Z --378052272060000 === -378052272060000 - -+010010T00:00:00-00:01 -+010010-01-01T00:01:00.000Z -253717920060000 === 253717920060000 - --010010T00:00:00-00:01 --010010-01-01T00:01:00.000Z --378052271940000 === -378052271940000 - -+010010T00:00:00+00:10 -+010009-12-31T23:50:00.000Z -253717919400000 === 253717919400000 - --010010T00:00:00+00:10 --010011-12-31T23:50:00.000Z --378052272600000 === -378052272600000 - -+010010T00:00:00-00:10 -+010010-01-01T00:10:00.000Z -253717920600000 === 253717920600000 - --010010T00:00:00-00:10 --010010-01-01T00:10:00.000Z --378052271400000 === -378052271400000 - -+010010T00:00:00+01:00 -+010009-12-31T23:00:00.000Z -253717916400000 === 253717916400000 - --010010T00:00:00+01:00 --010011-12-31T23:00:00.000Z --378052275600000 === -378052275600000 - -+010010T00:00:00-01:00 -+010010-01-01T01:00:00.000Z -253717923600000 === 253717923600000 - --010010T00:00:00-01:00 --010010-01-01T01:00:00.000Z --378052268400000 === -378052268400000 - -+010010T00:00:00+01:01 -+010009-12-31T22:59:00.000Z -253717916340000 === 253717916340000 - --010010T00:00:00+01:01 --010011-12-31T22:59:00.000Z --378052275660000 === -378052275660000 - -+010010T00:00:00-01:01 -+010010-01-01T01:01:00.000Z -253717923660000 === 253717923660000 - --010010T00:00:00-01:01 --010010-01-01T01:01:00.000Z --378052268340000 === -378052268340000 - -+010010T00:00:00+01:10 -+010009-12-31T22:50:00.000Z -253717915800000 === 253717915800000 - --010010T00:00:00+01:10 --010011-12-31T22:50:00.000Z --378052276200000 === -378052276200000 - -+010010T00:00:00-01:10 -+010010-01-01T01:10:00.000Z -253717924200000 === 253717924200000 - --010010T00:00:00-01:10 --010010-01-01T01:10:00.000Z --378052267800000 === -378052267800000 - -+010010T00:00:00+10:00 -+010009-12-31T14:00:00.000Z -253717884000000 === 253717884000000 - --010010T00:00:00+10:00 --010011-12-31T14:00:00.000Z --378052308000000 === -378052308000000 - -+010010T00:00:00-10:00 -+010010-01-01T10:00:00.000Z -253717956000000 === 253717956000000 - --010010T00:00:00-10:00 --010010-01-01T10:00:00.000Z --378052236000000 === -378052236000000 - -+010010T00:00:00+10:01 -+010009-12-31T13:59:00.000Z -253717883940000 === 253717883940000 - --010010T00:00:00+10:01 --010011-12-31T13:59:00.000Z --378052308060000 === -378052308060000 - -+010010T00:00:00-10:01 -+010010-01-01T10:01:00.000Z -253717956060000 === 253717956060000 - --010010T00:00:00-10:01 --010010-01-01T10:01:00.000Z --378052235940000 === -378052235940000 - -+010010T00:00:00+10:10 -+010009-12-31T13:50:00.000Z -253717883400000 === 253717883400000 - --010010T00:00:00+10:10 --010011-12-31T13:50:00.000Z --378052308600000 === -378052308600000 - -+010010T00:00:00-10:10 -+010010-01-01T10:10:00.000Z -253717956600000 === 253717956600000 - --010010T00:00:00-10:10 --010010-01-01T10:10:00.000Z --378052235400000 === -378052235400000 - -+000000T01:01:01 -0000-01-01T09:01:01.000Z --62167186739000 === -62167186739000 - -+000000T01:01:01Z -0000-01-01T01:01:01.000Z --62167215539000 === -62167215539000 - -+000000T01:01:01+00:00 -0000-01-01T01:01:01.000Z --62167215539000 === -62167215539000 - -+000000T01:01:01-00:00 -0000-01-01T01:01:01.000Z --62167215539000 === -62167215539000 - -+000000T01:01:01+00:01 -0000-01-01T01:00:01.000Z --62167215599000 === -62167215599000 - -+000000T01:01:01-00:01 -0000-01-01T01:02:01.000Z --62167215479000 === -62167215479000 - -+000000T01:01:01+00:10 -0000-01-01T00:51:01.000Z --62167216139000 === -62167216139000 - -+000000T01:01:01-00:10 -0000-01-01T01:11:01.000Z --62167214939000 === -62167214939000 - -+000000T01:01:01+01:00 -0000-01-01T00:01:01.000Z --62167219139000 === -62167219139000 - -+000000T01:01:01-01:00 -0000-01-01T02:01:01.000Z --62167211939000 === -62167211939000 - -+000000T01:01:01+01:01 -0000-01-01T00:00:01.000Z --62167219199000 === -62167219199000 - -+000000T01:01:01-01:01 -0000-01-01T02:02:01.000Z --62167211879000 === -62167211879000 - -+000000T01:01:01+01:10 --000001-12-31T23:51:01.000Z --62167219739000 === -62167219739000 - -+000000T01:01:01-01:10 -0000-01-01T02:11:01.000Z --62167211339000 === -62167211339000 - -+000000T01:01:01+10:00 --000001-12-31T15:01:01.000Z --62167251539000 === -62167251539000 - -+000000T01:01:01-10:00 -0000-01-01T11:01:01.000Z --62167179539000 === -62167179539000 - -+000000T01:01:01+10:01 --000001-12-31T15:00:01.000Z --62167251599000 === -62167251599000 - -+000000T01:01:01-10:01 -0000-01-01T11:02:01.000Z --62167179479000 === -62167179479000 - -+000000T01:01:01+10:10 --000001-12-31T14:51:01.000Z --62167252139000 === -62167252139000 - -+000000T01:01:01-10:10 -0000-01-01T11:11:01.000Z --62167178939000 === -62167178939000 - -+000001T10:10:10 -0001-01-01T18:10:10.000Z --62135531390000 === -62135531390000 - --000001T10:10:10 --000001-01-01T18:10:10.000Z --62198689790000 === -62198689790000 - -+000001T10:10:10Z -0001-01-01T10:10:10.000Z --62135560190000 === -62135560190000 - --000001T10:10:10Z --000001-01-01T10:10:10.000Z --62198718590000 === -62198718590000 - -+000001T10:10:10+00:00 -0001-01-01T10:10:10.000Z --62135560190000 === -62135560190000 - --000001T10:10:10+00:00 --000001-01-01T10:10:10.000Z --62198718590000 === -62198718590000 - -+000001T10:10:10-00:00 -0001-01-01T10:10:10.000Z --62135560190000 === -62135560190000 - --000001T10:10:10-00:00 --000001-01-01T10:10:10.000Z --62198718590000 === -62198718590000 - -+000001T10:10:10+00:01 -0001-01-01T10:09:10.000Z --62135560250000 === -62135560250000 - --000001T10:10:10+00:01 --000001-01-01T10:09:10.000Z --62198718650000 === -62198718650000 - -+000001T10:10:10-00:01 -0001-01-01T10:11:10.000Z --62135560130000 === -62135560130000 - --000001T10:10:10-00:01 --000001-01-01T10:11:10.000Z --62198718530000 === -62198718530000 - -+000001T10:10:10+00:10 -0001-01-01T10:00:10.000Z --62135560790000 === -62135560790000 - --000001T10:10:10+00:10 --000001-01-01T10:00:10.000Z --62198719190000 === -62198719190000 - -+000001T10:10:10-00:10 -0001-01-01T10:20:10.000Z --62135559590000 === -62135559590000 - --000001T10:10:10-00:10 --000001-01-01T10:20:10.000Z --62198717990000 === -62198717990000 - -+000001T10:10:10+01:00 -0001-01-01T09:10:10.000Z --62135563790000 === -62135563790000 - --000001T10:10:10+01:00 --000001-01-01T09:10:10.000Z --62198722190000 === -62198722190000 - -+000001T10:10:10-01:00 -0001-01-01T11:10:10.000Z --62135556590000 === -62135556590000 - --000001T10:10:10-01:00 --000001-01-01T11:10:10.000Z --62198714990000 === -62198714990000 - -+000001T10:10:10+01:01 -0001-01-01T09:09:10.000Z --62135563850000 === -62135563850000 - --000001T10:10:10+01:01 --000001-01-01T09:09:10.000Z --62198722250000 === -62198722250000 - -+000001T10:10:10-01:01 -0001-01-01T11:11:10.000Z --62135556530000 === -62135556530000 - --000001T10:10:10-01:01 --000001-01-01T11:11:10.000Z --62198714930000 === -62198714930000 - -+000001T10:10:10+01:10 -0001-01-01T09:00:10.000Z --62135564390000 === -62135564390000 - --000001T10:10:10+01:10 --000001-01-01T09:00:10.000Z --62198722790000 === -62198722790000 - -+000001T10:10:10-01:10 -0001-01-01T11:20:10.000Z --62135555990000 === -62135555990000 - --000001T10:10:10-01:10 --000001-01-01T11:20:10.000Z --62198714390000 === -62198714390000 - -+000001T10:10:10+10:00 -0001-01-01T00:10:10.000Z --62135596190000 === -62135596190000 - --000001T10:10:10+10:00 --000001-01-01T00:10:10.000Z --62198754590000 === -62198754590000 - -+000001T10:10:10-10:00 -0001-01-01T20:10:10.000Z --62135524190000 === -62135524190000 - --000001T10:10:10-10:00 --000001-01-01T20:10:10.000Z --62198682590000 === -62198682590000 - -+000001T10:10:10+10:01 -0001-01-01T00:09:10.000Z --62135596250000 === -62135596250000 - --000001T10:10:10+10:01 --000001-01-01T00:09:10.000Z --62198754650000 === -62198754650000 - -+000001T10:10:10-10:01 -0001-01-01T20:11:10.000Z --62135524130000 === -62135524130000 - --000001T10:10:10-10:01 --000001-01-01T20:11:10.000Z --62198682530000 === -62198682530000 - -+000001T10:10:10+10:10 -0001-01-01T00:00:10.000Z --62135596790000 === -62135596790000 - --000001T10:10:10+10:10 --000001-01-01T00:00:10.000Z --62198755190000 === -62198755190000 - -+000001T10:10:10-10:10 -0001-01-01T20:20:10.000Z --62135523590000 === -62135523590000 - --000001T10:10:10-10:10 --000001-01-01T20:20:10.000Z --62198681990000 === -62198681990000 - -+100000T00:00:00 -+100000-01-01T08:00:00.000Z -3093528009600000 === 3093528009600000 - --100000T00:00:00 --100000-01-01T08:00:00.000Z --3217862390400000 === -3217862390400000 - -+100000T00:00:00Z -+100000-01-01T00:00:00.000Z -3093527980800000 === 3093527980800000 - --100000T00:00:00Z --100000-01-01T00:00:00.000Z --3217862419200000 === -3217862419200000 - -+100000T00:00:00+00:00 -+100000-01-01T00:00:00.000Z -3093527980800000 === 3093527980800000 - --100000T00:00:00+00:00 --100000-01-01T00:00:00.000Z --3217862419200000 === -3217862419200000 - -+100000T00:00:00-00:00 -+100000-01-01T00:00:00.000Z -3093527980800000 === 3093527980800000 - --100000T00:00:00-00:00 --100000-01-01T00:00:00.000Z --3217862419200000 === -3217862419200000 - -+100000T00:00:00+00:01 -+099999-12-31T23:59:00.000Z -3093527980740000 === 3093527980740000 - --100000T00:00:00+00:01 --100001-12-31T23:59:00.000Z --3217862419260000 === -3217862419260000 - -+100000T00:00:00-00:01 -+100000-01-01T00:01:00.000Z -3093527980860000 === 3093527980860000 - --100000T00:00:00-00:01 --100000-01-01T00:01:00.000Z --3217862419140000 === -3217862419140000 - -+100000T00:00:00+00:10 -+099999-12-31T23:50:00.000Z -3093527980200000 === 3093527980200000 - --100000T00:00:00+00:10 --100001-12-31T23:50:00.000Z --3217862419800000 === -3217862419800000 - -+100000T00:00:00-00:10 -+100000-01-01T00:10:00.000Z -3093527981400000 === 3093527981400000 - --100000T00:00:00-00:10 --100000-01-01T00:10:00.000Z --3217862418600000 === -3217862418600000 - -+100000T00:00:00+01:00 -+099999-12-31T23:00:00.000Z -3093527977200000 === 3093527977200000 - --100000T00:00:00+01:00 --100001-12-31T23:00:00.000Z --3217862422800000 === -3217862422800000 - -+100000T00:00:00-01:00 -+100000-01-01T01:00:00.000Z -3093527984400000 === 3093527984400000 - --100000T00:00:00-01:00 --100000-01-01T01:00:00.000Z --3217862415600000 === -3217862415600000 - -+100000T00:00:00+01:01 -+099999-12-31T22:59:00.000Z -3093527977140000 === 3093527977140000 - --100000T00:00:00+01:01 --100001-12-31T22:59:00.000Z --3217862422860000 === -3217862422860000 - -+100000T00:00:00-01:01 -+100000-01-01T01:01:00.000Z -3093527984460000 === 3093527984460000 - --100000T00:00:00-01:01 --100000-01-01T01:01:00.000Z --3217862415540000 === -3217862415540000 - -+100000T00:00:00+01:10 -+099999-12-31T22:50:00.000Z -3093527976600000 === 3093527976600000 - --100000T00:00:00+01:10 --100001-12-31T22:50:00.000Z --3217862423400000 === -3217862423400000 - -+100000T00:00:00-01:10 -+100000-01-01T01:10:00.000Z -3093527985000000 === 3093527985000000 - --100000T00:00:00-01:10 --100000-01-01T01:10:00.000Z --3217862415000000 === -3217862415000000 - -+100000T00:00:00+10:00 -+099999-12-31T14:00:00.000Z -3093527944800000 === 3093527944800000 - --100000T00:00:00+10:00 --100001-12-31T14:00:00.000Z --3217862455200000 === -3217862455200000 - -+100000T00:00:00-10:00 -+100000-01-01T10:00:00.000Z -3093528016800000 === 3093528016800000 - --100000T00:00:00-10:00 --100000-01-01T10:00:00.000Z --3217862383200000 === -3217862383200000 - -+100000T00:00:00+10:01 -+099999-12-31T13:59:00.000Z -3093527944740000 === 3093527944740000 - --100000T00:00:00+10:01 --100001-12-31T13:59:00.000Z --3217862455260000 === -3217862455260000 - -+100000T00:00:00-10:01 -+100000-01-01T10:01:00.000Z -3093528016860000 === 3093528016860000 - --100000T00:00:00-10:01 --100000-01-01T10:01:00.000Z --3217862383140000 === -3217862383140000 - -+100000T00:00:00+10:10 -+099999-12-31T13:50:00.000Z -3093527944200000 === 3093527944200000 - --100000T00:00:00+10:10 --100001-12-31T13:50:00.000Z --3217862455800000 === -3217862455800000 - -+100000T00:00:00-10:10 -+100000-01-01T10:10:00.000Z -3093528017400000 === 3093528017400000 - --100000T00:00:00-10:10 --100000-01-01T10:10:00.000Z --3217862382600000 === -3217862382600000 - -+010010T00:00:00.010 -+010010-01-01T08:00:00.010Z -253717948800010 === 253717948800010 - --010010T00:00:00.010 --010010-01-01T08:00:00.010Z --378052243199990 === -378052243199990 - -+010010T00:00:00.010Z -+010010-01-01T00:00:00.010Z -253717920000010 === 253717920000010 - --010010T00:00:00.010Z --010010-01-01T00:00:00.010Z --378052271999990 === -378052271999990 - -+010010T00:00:00.010+00:00 -+010010-01-01T00:00:00.010Z -253717920000010 === 253717920000010 - --010010T00:00:00.010+00:00 --010010-01-01T00:00:00.010Z --378052271999990 === -378052271999990 - -+010010T00:00:00.010-00:00 -+010010-01-01T00:00:00.010Z -253717920000010 === 253717920000010 - --010010T00:00:00.010-00:00 --010010-01-01T00:00:00.010Z --378052271999990 === -378052271999990 - -+010010T00:00:00.010+00:01 -+010009-12-31T23:59:00.010Z -253717919940010 === 253717919940010 - --010010T00:00:00.010+00:01 --010011-12-31T23:59:00.010Z --378052272059990 === -378052272059990 - -+010010T00:00:00.010-00:01 -+010010-01-01T00:01:00.010Z -253717920060010 === 253717920060010 - --010010T00:00:00.010-00:01 --010010-01-01T00:01:00.010Z --378052271939990 === -378052271939990 - -+010010T00:00:00.010+00:10 -+010009-12-31T23:50:00.010Z -253717919400010 === 253717919400010 - --010010T00:00:00.010+00:10 --010011-12-31T23:50:00.010Z --378052272599990 === -378052272599990 - -+010010T00:00:00.010-00:10 -+010010-01-01T00:10:00.010Z -253717920600010 === 253717920600010 - --010010T00:00:00.010-00:10 --010010-01-01T00:10:00.010Z --378052271399990 === -378052271399990 - -+010010T00:00:00.010+01:00 -+010009-12-31T23:00:00.010Z -253717916400010 === 253717916400010 - --010010T00:00:00.010+01:00 --010011-12-31T23:00:00.010Z --378052275599990 === -378052275599990 - -+010010T00:00:00.010-01:00 -+010010-01-01T01:00:00.010Z -253717923600010 === 253717923600010 - --010010T00:00:00.010-01:00 --010010-01-01T01:00:00.010Z --378052268399990 === -378052268399990 - -+010010T00:00:00.010+01:01 -+010009-12-31T22:59:00.010Z -253717916340010 === 253717916340010 - --010010T00:00:00.010+01:01 --010011-12-31T22:59:00.010Z --378052275659990 === -378052275659990 - -+010010T00:00:00.010-01:01 -+010010-01-01T01:01:00.010Z -253717923660010 === 253717923660010 - --010010T00:00:00.010-01:01 --010010-01-01T01:01:00.010Z --378052268339990 === -378052268339990 - -+010010T00:00:00.010+01:10 -+010009-12-31T22:50:00.010Z -253717915800010 === 253717915800010 - --010010T00:00:00.010+01:10 --010011-12-31T22:50:00.010Z --378052276199990 === -378052276199990 - -+010010T00:00:00.010-01:10 -+010010-01-01T01:10:00.010Z -253717924200010 === 253717924200010 - --010010T00:00:00.010-01:10 --010010-01-01T01:10:00.010Z --378052267799990 === -378052267799990 - -+010010T00:00:00.010+10:00 -+010009-12-31T14:00:00.010Z -253717884000010 === 253717884000010 - --010010T00:00:00.010+10:00 --010011-12-31T14:00:00.010Z --378052307999990 === -378052307999990 - -+010010T00:00:00.010-10:00 -+010010-01-01T10:00:00.010Z -253717956000010 === 253717956000010 - --010010T00:00:00.010-10:00 --010010-01-01T10:00:00.010Z --378052235999990 === -378052235999990 - -+010010T00:00:00.010+10:01 -+010009-12-31T13:59:00.010Z -253717883940010 === 253717883940010 - --010010T00:00:00.010+10:01 --010011-12-31T13:59:00.010Z --378052308059990 === -378052308059990 - -+010010T00:00:00.010-10:01 -+010010-01-01T10:01:00.010Z -253717956060010 === 253717956060010 - --010010T00:00:00.010-10:01 --010010-01-01T10:01:00.010Z --378052235939990 === -378052235939990 - -+010010T00:00:00.010+10:10 -+010009-12-31T13:50:00.010Z -253717883400010 === 253717883400010 - --010010T00:00:00.010+10:10 --010011-12-31T13:50:00.010Z --378052308599990 === -378052308599990 - -+010010T00:00:00.010-10:10 -+010010-01-01T10:10:00.010Z -253717956600010 === 253717956600010 - --010010T00:00:00.010-10:10 --010010-01-01T10:10:00.010Z --378052235399990 === -378052235399990 - -+000000T01:01:01.000 -0000-01-01T09:01:01.000Z --62167186739000 === -62167186739000 - -+000000T01:01:01.000Z -0000-01-01T01:01:01.000Z --62167215539000 === -62167215539000 - -+000000T01:01:01.000+00:00 -0000-01-01T01:01:01.000Z --62167215539000 === -62167215539000 - -+000000T01:01:01.000-00:00 -0000-01-01T01:01:01.000Z --62167215539000 === -62167215539000 - -+000000T01:01:01.000+00:01 -0000-01-01T01:00:01.000Z --62167215599000 === -62167215599000 - -+000000T01:01:01.000-00:01 -0000-01-01T01:02:01.000Z --62167215479000 === -62167215479000 - -+000000T01:01:01.000+00:10 -0000-01-01T00:51:01.000Z --62167216139000 === -62167216139000 - -+000000T01:01:01.000-00:10 -0000-01-01T01:11:01.000Z --62167214939000 === -62167214939000 - -+000000T01:01:01.000+01:00 -0000-01-01T00:01:01.000Z --62167219139000 === -62167219139000 - -+000000T01:01:01.000-01:00 -0000-01-01T02:01:01.000Z --62167211939000 === -62167211939000 - -+000000T01:01:01.000+01:01 -0000-01-01T00:00:01.000Z --62167219199000 === -62167219199000 - -+000000T01:01:01.000-01:01 -0000-01-01T02:02:01.000Z --62167211879000 === -62167211879000 - -+000000T01:01:01.000+01:10 --000001-12-31T23:51:01.000Z --62167219739000 === -62167219739000 - -+000000T01:01:01.000-01:10 -0000-01-01T02:11:01.000Z --62167211339000 === -62167211339000 - -+000000T01:01:01.000+10:00 --000001-12-31T15:01:01.000Z --62167251539000 === -62167251539000 - -+000000T01:01:01.000-10:00 -0000-01-01T11:01:01.000Z --62167179539000 === -62167179539000 - -+000000T01:01:01.000+10:01 --000001-12-31T15:00:01.000Z --62167251599000 === -62167251599000 - -+000000T01:01:01.000-10:01 -0000-01-01T11:02:01.000Z --62167179479000 === -62167179479000 - -+000000T01:01:01.000+10:10 --000001-12-31T14:51:01.000Z --62167252139000 === -62167252139000 - -+000000T01:01:01.000-10:10 -0000-01-01T11:11:01.000Z --62167178939000 === -62167178939000 - -+000001T10:10:10.001 -0001-01-01T18:10:10.001Z --62135531389999 === -62135531389999 - --000001T10:10:10.001 --000001-01-01T18:10:10.001Z --62198689789999 === -62198689789999 - -+000001T10:10:10.001Z -0001-01-01T10:10:10.001Z --62135560189999 === -62135560189999 - --000001T10:10:10.001Z --000001-01-01T10:10:10.001Z --62198718589999 === -62198718589999 - -+000001T10:10:10.001+00:00 -0001-01-01T10:10:10.001Z --62135560189999 === -62135560189999 - --000001T10:10:10.001+00:00 --000001-01-01T10:10:10.001Z --62198718589999 === -62198718589999 - -+000001T10:10:10.001-00:00 -0001-01-01T10:10:10.001Z --62135560189999 === -62135560189999 - --000001T10:10:10.001-00:00 --000001-01-01T10:10:10.001Z --62198718589999 === -62198718589999 - -+000001T10:10:10.001+00:01 -0001-01-01T10:09:10.001Z --62135560249999 === -62135560249999 - --000001T10:10:10.001+00:01 --000001-01-01T10:09:10.001Z --62198718649999 === -62198718649999 - -+000001T10:10:10.001-00:01 -0001-01-01T10:11:10.001Z --62135560129999 === -62135560129999 - --000001T10:10:10.001-00:01 --000001-01-01T10:11:10.001Z --62198718529999 === -62198718529999 - -+000001T10:10:10.001+00:10 -0001-01-01T10:00:10.001Z --62135560789999 === -62135560789999 - --000001T10:10:10.001+00:10 --000001-01-01T10:00:10.001Z --62198719189999 === -62198719189999 - -+000001T10:10:10.001-00:10 -0001-01-01T10:20:10.001Z --62135559589999 === -62135559589999 - --000001T10:10:10.001-00:10 --000001-01-01T10:20:10.001Z --62198717989999 === -62198717989999 - -+000001T10:10:10.001+01:00 -0001-01-01T09:10:10.001Z --62135563789999 === -62135563789999 - --000001T10:10:10.001+01:00 --000001-01-01T09:10:10.001Z --62198722189999 === -62198722189999 - -+000001T10:10:10.001-01:00 -0001-01-01T11:10:10.001Z --62135556589999 === -62135556589999 - --000001T10:10:10.001-01:00 --000001-01-01T11:10:10.001Z --62198714989999 === -62198714989999 - -+000001T10:10:10.001+01:01 -0001-01-01T09:09:10.001Z --62135563849999 === -62135563849999 - --000001T10:10:10.001+01:01 --000001-01-01T09:09:10.001Z --62198722249999 === -62198722249999 - -+000001T10:10:10.001-01:01 -0001-01-01T11:11:10.001Z --62135556529999 === -62135556529999 - --000001T10:10:10.001-01:01 --000001-01-01T11:11:10.001Z --62198714929999 === -62198714929999 - -+000001T10:10:10.001+01:10 -0001-01-01T09:00:10.001Z --62135564389999 === -62135564389999 - --000001T10:10:10.001+01:10 --000001-01-01T09:00:10.001Z --62198722789999 === -62198722789999 - -+000001T10:10:10.001-01:10 -0001-01-01T11:20:10.001Z --62135555989999 === -62135555989999 - --000001T10:10:10.001-01:10 --000001-01-01T11:20:10.001Z --62198714389999 === -62198714389999 - -+000001T10:10:10.001+10:00 -0001-01-01T00:10:10.001Z --62135596189999 === -62135596189999 - --000001T10:10:10.001+10:00 --000001-01-01T00:10:10.001Z --62198754589999 === -62198754589999 - -+000001T10:10:10.001-10:00 -0001-01-01T20:10:10.001Z --62135524189999 === -62135524189999 - --000001T10:10:10.001-10:00 --000001-01-01T20:10:10.001Z --62198682589999 === -62198682589999 - -+000001T10:10:10.001+10:01 -0001-01-01T00:09:10.001Z --62135596249999 === -62135596249999 - --000001T10:10:10.001+10:01 --000001-01-01T00:09:10.001Z --62198754649999 === -62198754649999 - -+000001T10:10:10.001-10:01 -0001-01-01T20:11:10.001Z --62135524129999 === -62135524129999 - --000001T10:10:10.001-10:01 --000001-01-01T20:11:10.001Z --62198682529999 === -62198682529999 - -+000001T10:10:10.001+10:10 -0001-01-01T00:00:10.001Z --62135596789999 === -62135596789999 - --000001T10:10:10.001+10:10 --000001-01-01T00:00:10.001Z --62198755189999 === -62198755189999 - -+000001T10:10:10.001-10:10 -0001-01-01T20:20:10.001Z --62135523589999 === -62135523589999 - --000001T10:10:10.001-10:10 --000001-01-01T20:20:10.001Z --62198681989999 === -62198681989999 - -+100000T00:00:00.100 -+100000-01-01T08:00:00.100Z -3093528009600100 === 3093528009600100 - --100000T00:00:00.100 --100000-01-01T08:00:00.100Z --3217862390399900 === -3217862390399900 - -+100000T00:00:00.100Z -+100000-01-01T00:00:00.100Z -3093527980800100 === 3093527980800100 - --100000T00:00:00.100Z --100000-01-01T00:00:00.100Z --3217862419199900 === -3217862419199900 - -+100000T00:00:00.100+00:00 -+100000-01-01T00:00:00.100Z -3093527980800100 === 3093527980800100 - --100000T00:00:00.100+00:00 --100000-01-01T00:00:00.100Z --3217862419199900 === -3217862419199900 - -+100000T00:00:00.100-00:00 -+100000-01-01T00:00:00.100Z -3093527980800100 === 3093527980800100 - --100000T00:00:00.100-00:00 --100000-01-01T00:00:00.100Z --3217862419199900 === -3217862419199900 - -+100000T00:00:00.100+00:01 -+099999-12-31T23:59:00.100Z -3093527980740100 === 3093527980740100 - --100000T00:00:00.100+00:01 --100001-12-31T23:59:00.100Z --3217862419259900 === -3217862419259900 - -+100000T00:00:00.100-00:01 -+100000-01-01T00:01:00.100Z -3093527980860100 === 3093527980860100 - --100000T00:00:00.100-00:01 --100000-01-01T00:01:00.100Z --3217862419139900 === -3217862419139900 - -+100000T00:00:00.100+00:10 -+099999-12-31T23:50:00.100Z -3093527980200100 === 3093527980200100 - --100000T00:00:00.100+00:10 --100001-12-31T23:50:00.100Z --3217862419799900 === -3217862419799900 - -+100000T00:00:00.100-00:10 -+100000-01-01T00:10:00.100Z -3093527981400100 === 3093527981400100 - --100000T00:00:00.100-00:10 --100000-01-01T00:10:00.100Z --3217862418599900 === -3217862418599900 - -+100000T00:00:00.100+01:00 -+099999-12-31T23:00:00.100Z -3093527977200100 === 3093527977200100 - --100000T00:00:00.100+01:00 --100001-12-31T23:00:00.100Z --3217862422799900 === -3217862422799900 - -+100000T00:00:00.100-01:00 -+100000-01-01T01:00:00.100Z -3093527984400100 === 3093527984400100 - --100000T00:00:00.100-01:00 --100000-01-01T01:00:00.100Z --3217862415599900 === -3217862415599900 - -+100000T00:00:00.100+01:01 -+099999-12-31T22:59:00.100Z -3093527977140100 === 3093527977140100 - --100000T00:00:00.100+01:01 --100001-12-31T22:59:00.100Z --3217862422859900 === -3217862422859900 - -+100000T00:00:00.100-01:01 -+100000-01-01T01:01:00.100Z -3093527984460100 === 3093527984460100 - --100000T00:00:00.100-01:01 --100000-01-01T01:01:00.100Z --3217862415539900 === -3217862415539900 - -+100000T00:00:00.100+01:10 -+099999-12-31T22:50:00.100Z -3093527976600100 === 3093527976600100 - --100000T00:00:00.100+01:10 --100001-12-31T22:50:00.100Z --3217862423399900 === -3217862423399900 - -+100000T00:00:00.100-01:10 -+100000-01-01T01:10:00.100Z -3093527985000100 === 3093527985000100 - --100000T00:00:00.100-01:10 --100000-01-01T01:10:00.100Z --3217862414999900 === -3217862414999900 - -+100000T00:00:00.100+10:00 -+099999-12-31T14:00:00.100Z -3093527944800100 === 3093527944800100 - --100000T00:00:00.100+10:00 --100001-12-31T14:00:00.100Z --3217862455199900 === -3217862455199900 - -+100000T00:00:00.100-10:00 -+100000-01-01T10:00:00.100Z -3093528016800100 === 3093528016800100 - --100000T00:00:00.100-10:00 --100000-01-01T10:00:00.100Z --3217862383199900 === -3217862383199900 - -+100000T00:00:00.100+10:01 -+099999-12-31T13:59:00.100Z -3093527944740100 === 3093527944740100 - --100000T00:00:00.100+10:01 --100001-12-31T13:59:00.100Z --3217862455259900 === -3217862455259900 - -+100000T00:00:00.100-10:01 -+100000-01-01T10:01:00.100Z -3093528016860100 === 3093528016860100 - --100000T00:00:00.100-10:01 --100000-01-01T10:01:00.100Z --3217862383139900 === -3217862383139900 - -+100000T00:00:00.100+10:10 -+099999-12-31T13:50:00.100Z -3093527944200100 === 3093527944200100 - --100000T00:00:00.100+10:10 --100001-12-31T13:50:00.100Z --3217862455799900 === -3217862455799900 - -+100000T00:00:00.100-10:10 -+100000-01-01T10:10:00.100Z -3093528017400100 === 3093528017400100 - --100000T00:00:00.100-10:10 --100000-01-01T10:10:00.100Z --3217862382599900 === -3217862382599900 - -+010010-01 -+010010-01-01T00:00:00.000Z -253717920000000 === 253717920000000 - --010010-01 --010010-01-01T00:00:00.000Z --378052272000000 === -378052272000000 - -+000000-10 -0000-10-01T00:00:00.000Z --62143545600000 === -62143545600000 - -+000001-01 -0001-01-01T00:00:00.000Z --62135596800000 === -62135596800000 - --000001-01 --000001-01-01T00:00:00.000Z --62198755200000 === -62198755200000 - -+100000-10 -+100000-10-01T00:00:00.000Z -3093551654400000 === 3093551654400000 - --100000-10 --100000-10-01T00:00:00.000Z --3217838745600000 === -3217838745600000 - -+010010-01T00:00 -+010010-01-01T08:00:00.000Z -253717948800000 === 253717948800000 - --010010-01T00:00 --010010-01-01T08:00:00.000Z --378052243200000 === -378052243200000 - -+010010-01T00:00Z -+010010-01-01T00:00:00.000Z -253717920000000 === 253717920000000 - --010010-01T00:00Z --010010-01-01T00:00:00.000Z --378052272000000 === -378052272000000 - -+010010-01T00:00+00:00 -+010010-01-01T00:00:00.000Z -253717920000000 === 253717920000000 - --010010-01T00:00+00:00 --010010-01-01T00:00:00.000Z --378052272000000 === -378052272000000 - -+010010-01T00:00-00:00 -+010010-01-01T00:00:00.000Z -253717920000000 === 253717920000000 - --010010-01T00:00-00:00 --010010-01-01T00:00:00.000Z --378052272000000 === -378052272000000 - -+010010-01T00:00+00:01 -+010009-12-31T23:59:00.000Z -253717919940000 === 253717919940000 - --010010-01T00:00+00:01 --010011-12-31T23:59:00.000Z --378052272060000 === -378052272060000 - -+010010-01T00:00-00:01 -+010010-01-01T00:01:00.000Z -253717920060000 === 253717920060000 - --010010-01T00:00-00:01 --010010-01-01T00:01:00.000Z --378052271940000 === -378052271940000 - -+010010-01T00:00+00:10 -+010009-12-31T23:50:00.000Z -253717919400000 === 253717919400000 - --010010-01T00:00+00:10 --010011-12-31T23:50:00.000Z --378052272600000 === -378052272600000 - -+010010-01T00:00-00:10 -+010010-01-01T00:10:00.000Z -253717920600000 === 253717920600000 - --010010-01T00:00-00:10 --010010-01-01T00:10:00.000Z --378052271400000 === -378052271400000 - -+010010-01T00:00+01:00 -+010009-12-31T23:00:00.000Z -253717916400000 === 253717916400000 - --010010-01T00:00+01:00 --010011-12-31T23:00:00.000Z --378052275600000 === -378052275600000 - -+010010-01T00:00-01:00 -+010010-01-01T01:00:00.000Z -253717923600000 === 253717923600000 - --010010-01T00:00-01:00 --010010-01-01T01:00:00.000Z --378052268400000 === -378052268400000 - -+010010-01T00:00+01:01 -+010009-12-31T22:59:00.000Z -253717916340000 === 253717916340000 - --010010-01T00:00+01:01 --010011-12-31T22:59:00.000Z --378052275660000 === -378052275660000 - -+010010-01T00:00-01:01 -+010010-01-01T01:01:00.000Z -253717923660000 === 253717923660000 - --010010-01T00:00-01:01 --010010-01-01T01:01:00.000Z --378052268340000 === -378052268340000 - -+010010-01T00:00+01:10 -+010009-12-31T22:50:00.000Z -253717915800000 === 253717915800000 - --010010-01T00:00+01:10 --010011-12-31T22:50:00.000Z --378052276200000 === -378052276200000 - -+010010-01T00:00-01:10 -+010010-01-01T01:10:00.000Z -253717924200000 === 253717924200000 - --010010-01T00:00-01:10 --010010-01-01T01:10:00.000Z --378052267800000 === -378052267800000 - -+010010-01T00:00+10:00 -+010009-12-31T14:00:00.000Z -253717884000000 === 253717884000000 - --010010-01T00:00+10:00 --010011-12-31T14:00:00.000Z --378052308000000 === -378052308000000 - -+010010-01T00:00-10:00 -+010010-01-01T10:00:00.000Z -253717956000000 === 253717956000000 - --010010-01T00:00-10:00 --010010-01-01T10:00:00.000Z --378052236000000 === -378052236000000 - -+010010-01T00:00+10:01 -+010009-12-31T13:59:00.000Z -253717883940000 === 253717883940000 - --010010-01T00:00+10:01 --010011-12-31T13:59:00.000Z --378052308060000 === -378052308060000 - -+010010-01T00:00-10:01 -+010010-01-01T10:01:00.000Z -253717956060000 === 253717956060000 - --010010-01T00:00-10:01 --010010-01-01T10:01:00.000Z --378052235940000 === -378052235940000 - -+010010-01T00:00+10:10 -+010009-12-31T13:50:00.000Z -253717883400000 === 253717883400000 - --010010-01T00:00+10:10 --010011-12-31T13:50:00.000Z --378052308600000 === -378052308600000 - -+010010-01T00:00-10:10 -+010010-01-01T10:10:00.000Z -253717956600000 === 253717956600000 - --010010-01T00:00-10:10 --010010-01-01T10:10:00.000Z --378052235400000 === -378052235400000 - -+000000-10T01:01 -0000-10-01T08:01:00.000Z --62143516740000 === -62143516740000 - -+000000-10T01:01Z -0000-10-01T01:01:00.000Z --62143541940000 === -62143541940000 - -+000000-10T01:01+00:00 -0000-10-01T01:01:00.000Z --62143541940000 === -62143541940000 - -+000000-10T01:01-00:00 -0000-10-01T01:01:00.000Z --62143541940000 === -62143541940000 - -+000000-10T01:01+00:01 -0000-10-01T01:00:00.000Z --62143542000000 === -62143542000000 - -+000000-10T01:01-00:01 -0000-10-01T01:02:00.000Z --62143541880000 === -62143541880000 - -+000000-10T01:01+00:10 -0000-10-01T00:51:00.000Z --62143542540000 === -62143542540000 - -+000000-10T01:01-00:10 -0000-10-01T01:11:00.000Z --62143541340000 === -62143541340000 - -+000000-10T01:01+01:00 -0000-10-01T00:01:00.000Z --62143545540000 === -62143545540000 - -+000000-10T01:01-01:00 -0000-10-01T02:01:00.000Z --62143538340000 === -62143538340000 - -+000000-10T01:01+01:01 -0000-10-01T00:00:00.000Z --62143545600000 === -62143545600000 - -+000000-10T01:01-01:01 -0000-10-01T02:02:00.000Z --62143538280000 === -62143538280000 - -+000000-10T01:01+01:10 -0000-09-30T23:51:00.000Z --62143546140000 === -62143546140000 - -+000000-10T01:01-01:10 -0000-10-01T02:11:00.000Z --62143537740000 === -62143537740000 - -+000000-10T01:01+10:00 -0000-09-30T15:01:00.000Z --62143577940000 === -62143577940000 - -+000000-10T01:01-10:00 -0000-10-01T11:01:00.000Z --62143505940000 === -62143505940000 - -+000000-10T01:01+10:01 -0000-09-30T15:00:00.000Z --62143578000000 === -62143578000000 - -+000000-10T01:01-10:01 -0000-10-01T11:02:00.000Z --62143505880000 === -62143505880000 - -+000000-10T01:01+10:10 -0000-09-30T14:51:00.000Z --62143578540000 === -62143578540000 - -+000000-10T01:01-10:10 -0000-10-01T11:11:00.000Z --62143505340000 === -62143505340000 - -+000001-01T10:10 -0001-01-01T18:10:00.000Z --62135531400000 === -62135531400000 - --000001-01T10:10 --000001-01-01T18:10:00.000Z --62198689800000 === -62198689800000 - -+000001-01T10:10Z -0001-01-01T10:10:00.000Z --62135560200000 === -62135560200000 - --000001-01T10:10Z --000001-01-01T10:10:00.000Z --62198718600000 === -62198718600000 - -+000001-01T10:10+00:00 -0001-01-01T10:10:00.000Z --62135560200000 === -62135560200000 - --000001-01T10:10+00:00 --000001-01-01T10:10:00.000Z --62198718600000 === -62198718600000 - -+000001-01T10:10-00:00 -0001-01-01T10:10:00.000Z --62135560200000 === -62135560200000 - --000001-01T10:10-00:00 --000001-01-01T10:10:00.000Z --62198718600000 === -62198718600000 - -+000001-01T10:10+00:01 -0001-01-01T10:09:00.000Z --62135560260000 === -62135560260000 - --000001-01T10:10+00:01 --000001-01-01T10:09:00.000Z --62198718660000 === -62198718660000 - -+000001-01T10:10-00:01 -0001-01-01T10:11:00.000Z --62135560140000 === -62135560140000 - --000001-01T10:10-00:01 --000001-01-01T10:11:00.000Z --62198718540000 === -62198718540000 - -+000001-01T10:10+00:10 -0001-01-01T10:00:00.000Z --62135560800000 === -62135560800000 - --000001-01T10:10+00:10 --000001-01-01T10:00:00.000Z --62198719200000 === -62198719200000 - -+000001-01T10:10-00:10 -0001-01-01T10:20:00.000Z --62135559600000 === -62135559600000 - --000001-01T10:10-00:10 --000001-01-01T10:20:00.000Z --62198718000000 === -62198718000000 - -+000001-01T10:10+01:00 -0001-01-01T09:10:00.000Z --62135563800000 === -62135563800000 - --000001-01T10:10+01:00 --000001-01-01T09:10:00.000Z --62198722200000 === -62198722200000 - -+000001-01T10:10-01:00 -0001-01-01T11:10:00.000Z --62135556600000 === -62135556600000 - --000001-01T10:10-01:00 --000001-01-01T11:10:00.000Z --62198715000000 === -62198715000000 - -+000001-01T10:10+01:01 -0001-01-01T09:09:00.000Z --62135563860000 === -62135563860000 - --000001-01T10:10+01:01 --000001-01-01T09:09:00.000Z --62198722260000 === -62198722260000 - -+000001-01T10:10-01:01 -0001-01-01T11:11:00.000Z --62135556540000 === -62135556540000 - --000001-01T10:10-01:01 --000001-01-01T11:11:00.000Z --62198714940000 === -62198714940000 - -+000001-01T10:10+01:10 -0001-01-01T09:00:00.000Z --62135564400000 === -62135564400000 - --000001-01T10:10+01:10 --000001-01-01T09:00:00.000Z --62198722800000 === -62198722800000 - -+000001-01T10:10-01:10 -0001-01-01T11:20:00.000Z --62135556000000 === -62135556000000 - --000001-01T10:10-01:10 --000001-01-01T11:20:00.000Z --62198714400000 === -62198714400000 - -+000001-01T10:10+10:00 -0001-01-01T00:10:00.000Z --62135596200000 === -62135596200000 - --000001-01T10:10+10:00 --000001-01-01T00:10:00.000Z --62198754600000 === -62198754600000 - -+000001-01T10:10-10:00 -0001-01-01T20:10:00.000Z --62135524200000 === -62135524200000 - --000001-01T10:10-10:00 --000001-01-01T20:10:00.000Z --62198682600000 === -62198682600000 - -+000001-01T10:10+10:01 -0001-01-01T00:09:00.000Z --62135596260000 === -62135596260000 - --000001-01T10:10+10:01 --000001-01-01T00:09:00.000Z --62198754660000 === -62198754660000 - -+000001-01T10:10-10:01 -0001-01-01T20:11:00.000Z --62135524140000 === -62135524140000 - --000001-01T10:10-10:01 --000001-01-01T20:11:00.000Z --62198682540000 === -62198682540000 - -+000001-01T10:10+10:10 -0001-01-01T00:00:00.000Z --62135596800000 === -62135596800000 - --000001-01T10:10+10:10 --000001-01-01T00:00:00.000Z --62198755200000 === -62198755200000 - -+000001-01T10:10-10:10 -0001-01-01T20:20:00.000Z --62135523600000 === -62135523600000 - --000001-01T10:10-10:10 --000001-01-01T20:20:00.000Z --62198682000000 === -62198682000000 - -+100000-10T00:00 -+100000-10-01T07:00:00.000Z -3093551679600000 === 3093551679600000 - --100000-10T00:00 --100000-10-01T07:00:00.000Z --3217838720400000 === -3217838720400000 - -+100000-10T00:00Z -+100000-10-01T00:00:00.000Z -3093551654400000 === 3093551654400000 - --100000-10T00:00Z --100000-10-01T00:00:00.000Z --3217838745600000 === -3217838745600000 - -+100000-10T00:00+00:00 -+100000-10-01T00:00:00.000Z -3093551654400000 === 3093551654400000 - --100000-10T00:00+00:00 --100000-10-01T00:00:00.000Z --3217838745600000 === -3217838745600000 - -+100000-10T00:00-00:00 -+100000-10-01T00:00:00.000Z -3093551654400000 === 3093551654400000 - --100000-10T00:00-00:00 --100000-10-01T00:00:00.000Z --3217838745600000 === -3217838745600000 - -+100000-10T00:00+00:01 -+100000-09-30T23:59:00.000Z -3093551654340000 === 3093551654340000 - --100000-10T00:00+00:01 --100000-09-30T23:59:00.000Z --3217838745660000 === -3217838745660000 - -+100000-10T00:00-00:01 -+100000-10-01T00:01:00.000Z -3093551654460000 === 3093551654460000 - --100000-10T00:00-00:01 --100000-10-01T00:01:00.000Z --3217838745540000 === -3217838745540000 - -+100000-10T00:00+00:10 -+100000-09-30T23:50:00.000Z -3093551653800000 === 3093551653800000 - --100000-10T00:00+00:10 --100000-09-30T23:50:00.000Z --3217838746200000 === -3217838746200000 - -+100000-10T00:00-00:10 -+100000-10-01T00:10:00.000Z -3093551655000000 === 3093551655000000 - --100000-10T00:00-00:10 --100000-10-01T00:10:00.000Z --3217838745000000 === -3217838745000000 - -+100000-10T00:00+01:00 -+100000-09-30T23:00:00.000Z -3093551650800000 === 3093551650800000 - --100000-10T00:00+01:00 --100000-09-30T23:00:00.000Z --3217838749200000 === -3217838749200000 - -+100000-10T00:00-01:00 -+100000-10-01T01:00:00.000Z -3093551658000000 === 3093551658000000 - --100000-10T00:00-01:00 --100000-10-01T01:00:00.000Z --3217838742000000 === -3217838742000000 - -+100000-10T00:00+01:01 -+100000-09-30T22:59:00.000Z -3093551650740000 === 3093551650740000 - --100000-10T00:00+01:01 --100000-09-30T22:59:00.000Z --3217838749260000 === -3217838749260000 - -+100000-10T00:00-01:01 -+100000-10-01T01:01:00.000Z -3093551658060000 === 3093551658060000 - --100000-10T00:00-01:01 --100000-10-01T01:01:00.000Z --3217838741940000 === -3217838741940000 - -+100000-10T00:00+01:10 -+100000-09-30T22:50:00.000Z -3093551650200000 === 3093551650200000 - --100000-10T00:00+01:10 --100000-09-30T22:50:00.000Z --3217838749800000 === -3217838749800000 - -+100000-10T00:00-01:10 -+100000-10-01T01:10:00.000Z -3093551658600000 === 3093551658600000 - --100000-10T00:00-01:10 --100000-10-01T01:10:00.000Z --3217838741400000 === -3217838741400000 - -+100000-10T00:00+10:00 -+100000-09-30T14:00:00.000Z -3093551618400000 === 3093551618400000 - --100000-10T00:00+10:00 --100000-09-30T14:00:00.000Z --3217838781600000 === -3217838781600000 - -+100000-10T00:00-10:00 -+100000-10-01T10:00:00.000Z -3093551690400000 === 3093551690400000 - --100000-10T00:00-10:00 --100000-10-01T10:00:00.000Z --3217838709600000 === -3217838709600000 - -+100000-10T00:00+10:01 -+100000-09-30T13:59:00.000Z -3093551618340000 === 3093551618340000 - --100000-10T00:00+10:01 --100000-09-30T13:59:00.000Z --3217838781660000 === -3217838781660000 - -+100000-10T00:00-10:01 -+100000-10-01T10:01:00.000Z -3093551690460000 === 3093551690460000 - --100000-10T00:00-10:01 --100000-10-01T10:01:00.000Z --3217838709540000 === -3217838709540000 - -+100000-10T00:00+10:10 -+100000-09-30T13:50:00.000Z -3093551617800000 === 3093551617800000 - --100000-10T00:00+10:10 --100000-09-30T13:50:00.000Z --3217838782200000 === -3217838782200000 - -+100000-10T00:00-10:10 -+100000-10-01T10:10:00.000Z -3093551691000000 === 3093551691000000 - --100000-10T00:00-10:10 --100000-10-01T10:10:00.000Z --3217838709000000 === -3217838709000000 - -+010010-01T00:00:00 -+010010-01-01T08:00:00.000Z -253717948800000 === 253717948800000 - --010010-01T00:00:00 --010010-01-01T08:00:00.000Z --378052243200000 === -378052243200000 - -+010010-01T00:00:00Z -+010010-01-01T00:00:00.000Z -253717920000000 === 253717920000000 - --010010-01T00:00:00Z --010010-01-01T00:00:00.000Z --378052272000000 === -378052272000000 - -+010010-01T00:00:00+00:00 -+010010-01-01T00:00:00.000Z -253717920000000 === 253717920000000 - --010010-01T00:00:00+00:00 --010010-01-01T00:00:00.000Z --378052272000000 === -378052272000000 - -+010010-01T00:00:00-00:00 -+010010-01-01T00:00:00.000Z -253717920000000 === 253717920000000 - --010010-01T00:00:00-00:00 --010010-01-01T00:00:00.000Z --378052272000000 === -378052272000000 - -+010010-01T00:00:00+00:01 -+010009-12-31T23:59:00.000Z -253717919940000 === 253717919940000 - --010010-01T00:00:00+00:01 --010011-12-31T23:59:00.000Z --378052272060000 === -378052272060000 - -+010010-01T00:00:00-00:01 -+010010-01-01T00:01:00.000Z -253717920060000 === 253717920060000 - --010010-01T00:00:00-00:01 --010010-01-01T00:01:00.000Z --378052271940000 === -378052271940000 - -+010010-01T00:00:00+00:10 -+010009-12-31T23:50:00.000Z -253717919400000 === 253717919400000 - --010010-01T00:00:00+00:10 --010011-12-31T23:50:00.000Z --378052272600000 === -378052272600000 - -+010010-01T00:00:00-00:10 -+010010-01-01T00:10:00.000Z -253717920600000 === 253717920600000 - --010010-01T00:00:00-00:10 --010010-01-01T00:10:00.000Z --378052271400000 === -378052271400000 - -+010010-01T00:00:00+01:00 -+010009-12-31T23:00:00.000Z -253717916400000 === 253717916400000 - --010010-01T00:00:00+01:00 --010011-12-31T23:00:00.000Z --378052275600000 === -378052275600000 - -+010010-01T00:00:00-01:00 -+010010-01-01T01:00:00.000Z -253717923600000 === 253717923600000 - --010010-01T00:00:00-01:00 --010010-01-01T01:00:00.000Z --378052268400000 === -378052268400000 - -+010010-01T00:00:00+01:01 -+010009-12-31T22:59:00.000Z -253717916340000 === 253717916340000 - --010010-01T00:00:00+01:01 --010011-12-31T22:59:00.000Z --378052275660000 === -378052275660000 - -+010010-01T00:00:00-01:01 -+010010-01-01T01:01:00.000Z -253717923660000 === 253717923660000 - --010010-01T00:00:00-01:01 --010010-01-01T01:01:00.000Z --378052268340000 === -378052268340000 - -+010010-01T00:00:00+01:10 -+010009-12-31T22:50:00.000Z -253717915800000 === 253717915800000 - --010010-01T00:00:00+01:10 --010011-12-31T22:50:00.000Z --378052276200000 === -378052276200000 - -+010010-01T00:00:00-01:10 -+010010-01-01T01:10:00.000Z -253717924200000 === 253717924200000 - --010010-01T00:00:00-01:10 --010010-01-01T01:10:00.000Z --378052267800000 === -378052267800000 - -+010010-01T00:00:00+10:00 -+010009-12-31T14:00:00.000Z -253717884000000 === 253717884000000 - --010010-01T00:00:00+10:00 --010011-12-31T14:00:00.000Z --378052308000000 === -378052308000000 - -+010010-01T00:00:00-10:00 -+010010-01-01T10:00:00.000Z -253717956000000 === 253717956000000 - --010010-01T00:00:00-10:00 --010010-01-01T10:00:00.000Z --378052236000000 === -378052236000000 - -+010010-01T00:00:00+10:01 -+010009-12-31T13:59:00.000Z -253717883940000 === 253717883940000 - --010010-01T00:00:00+10:01 --010011-12-31T13:59:00.000Z --378052308060000 === -378052308060000 - -+010010-01T00:00:00-10:01 -+010010-01-01T10:01:00.000Z -253717956060000 === 253717956060000 - --010010-01T00:00:00-10:01 --010010-01-01T10:01:00.000Z --378052235940000 === -378052235940000 - -+010010-01T00:00:00+10:10 -+010009-12-31T13:50:00.000Z -253717883400000 === 253717883400000 - --010010-01T00:00:00+10:10 --010011-12-31T13:50:00.000Z --378052308600000 === -378052308600000 - -+010010-01T00:00:00-10:10 -+010010-01-01T10:10:00.000Z -253717956600000 === 253717956600000 - --010010-01T00:00:00-10:10 --010010-01-01T10:10:00.000Z --378052235400000 === -378052235400000 - -+000000-10T01:01:01 -0000-10-01T08:01:01.000Z --62143516739000 === -62143516739000 - -+000000-10T01:01:01Z -0000-10-01T01:01:01.000Z --62143541939000 === -62143541939000 - -+000000-10T01:01:01+00:00 -0000-10-01T01:01:01.000Z --62143541939000 === -62143541939000 - -+000000-10T01:01:01-00:00 -0000-10-01T01:01:01.000Z --62143541939000 === -62143541939000 - -+000000-10T01:01:01+00:01 -0000-10-01T01:00:01.000Z --62143541999000 === -62143541999000 - -+000000-10T01:01:01-00:01 -0000-10-01T01:02:01.000Z --62143541879000 === -62143541879000 - -+000000-10T01:01:01+00:10 -0000-10-01T00:51:01.000Z --62143542539000 === -62143542539000 - -+000000-10T01:01:01-00:10 -0000-10-01T01:11:01.000Z --62143541339000 === -62143541339000 - -+000000-10T01:01:01+01:00 -0000-10-01T00:01:01.000Z --62143545539000 === -62143545539000 - -+000000-10T01:01:01-01:00 -0000-10-01T02:01:01.000Z --62143538339000 === -62143538339000 - -+000000-10T01:01:01+01:01 -0000-10-01T00:00:01.000Z --62143545599000 === -62143545599000 - -+000000-10T01:01:01-01:01 -0000-10-01T02:02:01.000Z --62143538279000 === -62143538279000 - -+000000-10T01:01:01+01:10 -0000-09-30T23:51:01.000Z --62143546139000 === -62143546139000 - -+000000-10T01:01:01-01:10 -0000-10-01T02:11:01.000Z --62143537739000 === -62143537739000 - -+000000-10T01:01:01+10:00 -0000-09-30T15:01:01.000Z --62143577939000 === -62143577939000 - -+000000-10T01:01:01-10:00 -0000-10-01T11:01:01.000Z --62143505939000 === -62143505939000 - -+000000-10T01:01:01+10:01 -0000-09-30T15:00:01.000Z --62143577999000 === -62143577999000 - -+000000-10T01:01:01-10:01 -0000-10-01T11:02:01.000Z --62143505879000 === -62143505879000 - -+000000-10T01:01:01+10:10 -0000-09-30T14:51:01.000Z --62143578539000 === -62143578539000 - -+000000-10T01:01:01-10:10 -0000-10-01T11:11:01.000Z --62143505339000 === -62143505339000 - -+000001-01T10:10:10 -0001-01-01T18:10:10.000Z --62135531390000 === -62135531390000 - --000001-01T10:10:10 --000001-01-01T18:10:10.000Z --62198689790000 === -62198689790000 - -+000001-01T10:10:10Z -0001-01-01T10:10:10.000Z --62135560190000 === -62135560190000 - --000001-01T10:10:10Z --000001-01-01T10:10:10.000Z --62198718590000 === -62198718590000 - -+000001-01T10:10:10+00:00 -0001-01-01T10:10:10.000Z --62135560190000 === -62135560190000 - --000001-01T10:10:10+00:00 --000001-01-01T10:10:10.000Z --62198718590000 === -62198718590000 - -+000001-01T10:10:10-00:00 -0001-01-01T10:10:10.000Z --62135560190000 === -62135560190000 - --000001-01T10:10:10-00:00 --000001-01-01T10:10:10.000Z --62198718590000 === -62198718590000 - -+000001-01T10:10:10+00:01 -0001-01-01T10:09:10.000Z --62135560250000 === -62135560250000 - --000001-01T10:10:10+00:01 --000001-01-01T10:09:10.000Z --62198718650000 === -62198718650000 - -+000001-01T10:10:10-00:01 -0001-01-01T10:11:10.000Z --62135560130000 === -62135560130000 - --000001-01T10:10:10-00:01 --000001-01-01T10:11:10.000Z --62198718530000 === -62198718530000 - -+000001-01T10:10:10+00:10 -0001-01-01T10:00:10.000Z --62135560790000 === -62135560790000 - --000001-01T10:10:10+00:10 --000001-01-01T10:00:10.000Z --62198719190000 === -62198719190000 - -+000001-01T10:10:10-00:10 -0001-01-01T10:20:10.000Z --62135559590000 === -62135559590000 - --000001-01T10:10:10-00:10 --000001-01-01T10:20:10.000Z --62198717990000 === -62198717990000 - -+000001-01T10:10:10+01:00 -0001-01-01T09:10:10.000Z --62135563790000 === -62135563790000 - --000001-01T10:10:10+01:00 --000001-01-01T09:10:10.000Z --62198722190000 === -62198722190000 - -+000001-01T10:10:10-01:00 -0001-01-01T11:10:10.000Z --62135556590000 === -62135556590000 - --000001-01T10:10:10-01:00 --000001-01-01T11:10:10.000Z --62198714990000 === -62198714990000 - -+000001-01T10:10:10+01:01 -0001-01-01T09:09:10.000Z --62135563850000 === -62135563850000 - --000001-01T10:10:10+01:01 --000001-01-01T09:09:10.000Z --62198722250000 === -62198722250000 - -+000001-01T10:10:10-01:01 -0001-01-01T11:11:10.000Z --62135556530000 === -62135556530000 - --000001-01T10:10:10-01:01 --000001-01-01T11:11:10.000Z --62198714930000 === -62198714930000 - -+000001-01T10:10:10+01:10 -0001-01-01T09:00:10.000Z --62135564390000 === -62135564390000 - --000001-01T10:10:10+01:10 --000001-01-01T09:00:10.000Z --62198722790000 === -62198722790000 - -+000001-01T10:10:10-01:10 -0001-01-01T11:20:10.000Z --62135555990000 === -62135555990000 - --000001-01T10:10:10-01:10 --000001-01-01T11:20:10.000Z --62198714390000 === -62198714390000 - -+000001-01T10:10:10+10:00 -0001-01-01T00:10:10.000Z --62135596190000 === -62135596190000 - --000001-01T10:10:10+10:00 --000001-01-01T00:10:10.000Z --62198754590000 === -62198754590000 - -+000001-01T10:10:10-10:00 -0001-01-01T20:10:10.000Z --62135524190000 === -62135524190000 - --000001-01T10:10:10-10:00 --000001-01-01T20:10:10.000Z --62198682590000 === -62198682590000 - -+000001-01T10:10:10+10:01 -0001-01-01T00:09:10.000Z --62135596250000 === -62135596250000 - --000001-01T10:10:10+10:01 --000001-01-01T00:09:10.000Z --62198754650000 === -62198754650000 - -+000001-01T10:10:10-10:01 -0001-01-01T20:11:10.000Z --62135524130000 === -62135524130000 - --000001-01T10:10:10-10:01 --000001-01-01T20:11:10.000Z --62198682530000 === -62198682530000 - -+000001-01T10:10:10+10:10 -0001-01-01T00:00:10.000Z --62135596790000 === -62135596790000 - --000001-01T10:10:10+10:10 --000001-01-01T00:00:10.000Z --62198755190000 === -62198755190000 - -+000001-01T10:10:10-10:10 -0001-01-01T20:20:10.000Z --62135523590000 === -62135523590000 - --000001-01T10:10:10-10:10 --000001-01-01T20:20:10.000Z --62198681990000 === -62198681990000 - -+100000-10T00:00:00 -+100000-10-01T07:00:00.000Z -3093551679600000 === 3093551679600000 - --100000-10T00:00:00 --100000-10-01T07:00:00.000Z --3217838720400000 === -3217838720400000 - -+100000-10T00:00:00Z -+100000-10-01T00:00:00.000Z -3093551654400000 === 3093551654400000 - --100000-10T00:00:00Z --100000-10-01T00:00:00.000Z --3217838745600000 === -3217838745600000 - -+100000-10T00:00:00+00:00 -+100000-10-01T00:00:00.000Z -3093551654400000 === 3093551654400000 - --100000-10T00:00:00+00:00 --100000-10-01T00:00:00.000Z --3217838745600000 === -3217838745600000 - -+100000-10T00:00:00-00:00 -+100000-10-01T00:00:00.000Z -3093551654400000 === 3093551654400000 - --100000-10T00:00:00-00:00 --100000-10-01T00:00:00.000Z --3217838745600000 === -3217838745600000 - -+100000-10T00:00:00+00:01 -+100000-09-30T23:59:00.000Z -3093551654340000 === 3093551654340000 - --100000-10T00:00:00+00:01 --100000-09-30T23:59:00.000Z --3217838745660000 === -3217838745660000 - -+100000-10T00:00:00-00:01 -+100000-10-01T00:01:00.000Z -3093551654460000 === 3093551654460000 - --100000-10T00:00:00-00:01 --100000-10-01T00:01:00.000Z --3217838745540000 === -3217838745540000 - -+100000-10T00:00:00+00:10 -+100000-09-30T23:50:00.000Z -3093551653800000 === 3093551653800000 - --100000-10T00:00:00+00:10 --100000-09-30T23:50:00.000Z --3217838746200000 === -3217838746200000 - -+100000-10T00:00:00-00:10 -+100000-10-01T00:10:00.000Z -3093551655000000 === 3093551655000000 - --100000-10T00:00:00-00:10 --100000-10-01T00:10:00.000Z --3217838745000000 === -3217838745000000 - -+100000-10T00:00:00+01:00 -+100000-09-30T23:00:00.000Z -3093551650800000 === 3093551650800000 - --100000-10T00:00:00+01:00 --100000-09-30T23:00:00.000Z --3217838749200000 === -3217838749200000 - -+100000-10T00:00:00-01:00 -+100000-10-01T01:00:00.000Z -3093551658000000 === 3093551658000000 - --100000-10T00:00:00-01:00 --100000-10-01T01:00:00.000Z --3217838742000000 === -3217838742000000 - -+100000-10T00:00:00+01:01 -+100000-09-30T22:59:00.000Z -3093551650740000 === 3093551650740000 - --100000-10T00:00:00+01:01 --100000-09-30T22:59:00.000Z --3217838749260000 === -3217838749260000 - -+100000-10T00:00:00-01:01 -+100000-10-01T01:01:00.000Z -3093551658060000 === 3093551658060000 - --100000-10T00:00:00-01:01 --100000-10-01T01:01:00.000Z --3217838741940000 === -3217838741940000 - -+100000-10T00:00:00+01:10 -+100000-09-30T22:50:00.000Z -3093551650200000 === 3093551650200000 - --100000-10T00:00:00+01:10 --100000-09-30T22:50:00.000Z --3217838749800000 === -3217838749800000 - -+100000-10T00:00:00-01:10 -+100000-10-01T01:10:00.000Z -3093551658600000 === 3093551658600000 - --100000-10T00:00:00-01:10 --100000-10-01T01:10:00.000Z --3217838741400000 === -3217838741400000 - -+100000-10T00:00:00+10:00 -+100000-09-30T14:00:00.000Z -3093551618400000 === 3093551618400000 - --100000-10T00:00:00+10:00 --100000-09-30T14:00:00.000Z --3217838781600000 === -3217838781600000 - -+100000-10T00:00:00-10:00 -+100000-10-01T10:00:00.000Z -3093551690400000 === 3093551690400000 - --100000-10T00:00:00-10:00 --100000-10-01T10:00:00.000Z --3217838709600000 === -3217838709600000 - -+100000-10T00:00:00+10:01 -+100000-09-30T13:59:00.000Z -3093551618340000 === 3093551618340000 - --100000-10T00:00:00+10:01 --100000-09-30T13:59:00.000Z --3217838781660000 === -3217838781660000 - -+100000-10T00:00:00-10:01 -+100000-10-01T10:01:00.000Z -3093551690460000 === 3093551690460000 - --100000-10T00:00:00-10:01 --100000-10-01T10:01:00.000Z --3217838709540000 === -3217838709540000 - -+100000-10T00:00:00+10:10 -+100000-09-30T13:50:00.000Z -3093551617800000 === 3093551617800000 - --100000-10T00:00:00+10:10 --100000-09-30T13:50:00.000Z --3217838782200000 === -3217838782200000 - -+100000-10T00:00:00-10:10 -+100000-10-01T10:10:00.000Z -3093551691000000 === 3093551691000000 - --100000-10T00:00:00-10:10 --100000-10-01T10:10:00.000Z --3217838709000000 === -3217838709000000 - -+010010-01T00:00:00.010 -+010010-01-01T08:00:00.010Z -253717948800010 === 253717948800010 - --010010-01T00:00:00.010 --010010-01-01T08:00:00.010Z --378052243199990 === -378052243199990 - -+010010-01T00:00:00.010Z -+010010-01-01T00:00:00.010Z -253717920000010 === 253717920000010 - --010010-01T00:00:00.010Z --010010-01-01T00:00:00.010Z --378052271999990 === -378052271999990 - -+010010-01T00:00:00.010+00:00 -+010010-01-01T00:00:00.010Z -253717920000010 === 253717920000010 - --010010-01T00:00:00.010+00:00 --010010-01-01T00:00:00.010Z --378052271999990 === -378052271999990 - -+010010-01T00:00:00.010-00:00 -+010010-01-01T00:00:00.010Z -253717920000010 === 253717920000010 - --010010-01T00:00:00.010-00:00 --010010-01-01T00:00:00.010Z --378052271999990 === -378052271999990 - -+010010-01T00:00:00.010+00:01 -+010009-12-31T23:59:00.010Z -253717919940010 === 253717919940010 - --010010-01T00:00:00.010+00:01 --010011-12-31T23:59:00.010Z --378052272059990 === -378052272059990 - -+010010-01T00:00:00.010-00:01 -+010010-01-01T00:01:00.010Z -253717920060010 === 253717920060010 - --010010-01T00:00:00.010-00:01 --010010-01-01T00:01:00.010Z --378052271939990 === -378052271939990 - -+010010-01T00:00:00.010+00:10 -+010009-12-31T23:50:00.010Z -253717919400010 === 253717919400010 - --010010-01T00:00:00.010+00:10 --010011-12-31T23:50:00.010Z --378052272599990 === -378052272599990 - -+010010-01T00:00:00.010-00:10 -+010010-01-01T00:10:00.010Z -253717920600010 === 253717920600010 - --010010-01T00:00:00.010-00:10 --010010-01-01T00:10:00.010Z --378052271399990 === -378052271399990 - -+010010-01T00:00:00.010+01:00 -+010009-12-31T23:00:00.010Z -253717916400010 === 253717916400010 - --010010-01T00:00:00.010+01:00 --010011-12-31T23:00:00.010Z --378052275599990 === -378052275599990 - -+010010-01T00:00:00.010-01:00 -+010010-01-01T01:00:00.010Z -253717923600010 === 253717923600010 - --010010-01T00:00:00.010-01:00 --010010-01-01T01:00:00.010Z --378052268399990 === -378052268399990 - -+010010-01T00:00:00.010+01:01 -+010009-12-31T22:59:00.010Z -253717916340010 === 253717916340010 - --010010-01T00:00:00.010+01:01 --010011-12-31T22:59:00.010Z --378052275659990 === -378052275659990 - -+010010-01T00:00:00.010-01:01 -+010010-01-01T01:01:00.010Z -253717923660010 === 253717923660010 - --010010-01T00:00:00.010-01:01 --010010-01-01T01:01:00.010Z --378052268339990 === -378052268339990 - -+010010-01T00:00:00.010+01:10 -+010009-12-31T22:50:00.010Z -253717915800010 === 253717915800010 - --010010-01T00:00:00.010+01:10 --010011-12-31T22:50:00.010Z --378052276199990 === -378052276199990 - -+010010-01T00:00:00.010-01:10 -+010010-01-01T01:10:00.010Z -253717924200010 === 253717924200010 - --010010-01T00:00:00.010-01:10 --010010-01-01T01:10:00.010Z --378052267799990 === -378052267799990 - -+010010-01T00:00:00.010+10:00 -+010009-12-31T14:00:00.010Z -253717884000010 === 253717884000010 - --010010-01T00:00:00.010+10:00 --010011-12-31T14:00:00.010Z --378052307999990 === -378052307999990 - -+010010-01T00:00:00.010-10:00 -+010010-01-01T10:00:00.010Z -253717956000010 === 253717956000010 - --010010-01T00:00:00.010-10:00 --010010-01-01T10:00:00.010Z --378052235999990 === -378052235999990 - -+010010-01T00:00:00.010+10:01 -+010009-12-31T13:59:00.010Z -253717883940010 === 253717883940010 - --010010-01T00:00:00.010+10:01 --010011-12-31T13:59:00.010Z --378052308059990 === -378052308059990 - -+010010-01T00:00:00.010-10:01 -+010010-01-01T10:01:00.010Z -253717956060010 === 253717956060010 - --010010-01T00:00:00.010-10:01 --010010-01-01T10:01:00.010Z --378052235939990 === -378052235939990 - -+010010-01T00:00:00.010+10:10 -+010009-12-31T13:50:00.010Z -253717883400010 === 253717883400010 - --010010-01T00:00:00.010+10:10 --010011-12-31T13:50:00.010Z --378052308599990 === -378052308599990 - -+010010-01T00:00:00.010-10:10 -+010010-01-01T10:10:00.010Z -253717956600010 === 253717956600010 - --010010-01T00:00:00.010-10:10 --010010-01-01T10:10:00.010Z --378052235399990 === -378052235399990 - -+000000-10T01:01:01.000 -0000-10-01T08:01:01.000Z --62143516739000 === -62143516739000 - -+000000-10T01:01:01.000Z -0000-10-01T01:01:01.000Z --62143541939000 === -62143541939000 - -+000000-10T01:01:01.000+00:00 -0000-10-01T01:01:01.000Z --62143541939000 === -62143541939000 - -+000000-10T01:01:01.000-00:00 -0000-10-01T01:01:01.000Z --62143541939000 === -62143541939000 - -+000000-10T01:01:01.000+00:01 -0000-10-01T01:00:01.000Z --62143541999000 === -62143541999000 - -+000000-10T01:01:01.000-00:01 -0000-10-01T01:02:01.000Z --62143541879000 === -62143541879000 - -+000000-10T01:01:01.000+00:10 -0000-10-01T00:51:01.000Z --62143542539000 === -62143542539000 - -+000000-10T01:01:01.000-00:10 -0000-10-01T01:11:01.000Z --62143541339000 === -62143541339000 - -+000000-10T01:01:01.000+01:00 -0000-10-01T00:01:01.000Z --62143545539000 === -62143545539000 - -+000000-10T01:01:01.000-01:00 -0000-10-01T02:01:01.000Z --62143538339000 === -62143538339000 - -+000000-10T01:01:01.000+01:01 -0000-10-01T00:00:01.000Z --62143545599000 === -62143545599000 - -+000000-10T01:01:01.000-01:01 -0000-10-01T02:02:01.000Z --62143538279000 === -62143538279000 - -+000000-10T01:01:01.000+01:10 -0000-09-30T23:51:01.000Z --62143546139000 === -62143546139000 - -+000000-10T01:01:01.000-01:10 -0000-10-01T02:11:01.000Z --62143537739000 === -62143537739000 - -+000000-10T01:01:01.000+10:00 -0000-09-30T15:01:01.000Z --62143577939000 === -62143577939000 - -+000000-10T01:01:01.000-10:00 -0000-10-01T11:01:01.000Z --62143505939000 === -62143505939000 - -+000000-10T01:01:01.000+10:01 -0000-09-30T15:00:01.000Z --62143577999000 === -62143577999000 - -+000000-10T01:01:01.000-10:01 -0000-10-01T11:02:01.000Z --62143505879000 === -62143505879000 - -+000000-10T01:01:01.000+10:10 -0000-09-30T14:51:01.000Z --62143578539000 === -62143578539000 - -+000000-10T01:01:01.000-10:10 -0000-10-01T11:11:01.000Z --62143505339000 === -62143505339000 - -+000001-01T10:10:10.001 -0001-01-01T18:10:10.001Z --62135531389999 === -62135531389999 - --000001-01T10:10:10.001 --000001-01-01T18:10:10.001Z --62198689789999 === -62198689789999 - -+000001-01T10:10:10.001Z -0001-01-01T10:10:10.001Z --62135560189999 === -62135560189999 - --000001-01T10:10:10.001Z --000001-01-01T10:10:10.001Z --62198718589999 === -62198718589999 - -+000001-01T10:10:10.001+00:00 -0001-01-01T10:10:10.001Z --62135560189999 === -62135560189999 - --000001-01T10:10:10.001+00:00 --000001-01-01T10:10:10.001Z --62198718589999 === -62198718589999 - -+000001-01T10:10:10.001-00:00 -0001-01-01T10:10:10.001Z --62135560189999 === -62135560189999 - --000001-01T10:10:10.001-00:00 --000001-01-01T10:10:10.001Z --62198718589999 === -62198718589999 - -+000001-01T10:10:10.001+00:01 -0001-01-01T10:09:10.001Z --62135560249999 === -62135560249999 - --000001-01T10:10:10.001+00:01 --000001-01-01T10:09:10.001Z --62198718649999 === -62198718649999 - -+000001-01T10:10:10.001-00:01 -0001-01-01T10:11:10.001Z --62135560129999 === -62135560129999 - --000001-01T10:10:10.001-00:01 --000001-01-01T10:11:10.001Z --62198718529999 === -62198718529999 - -+000001-01T10:10:10.001+00:10 -0001-01-01T10:00:10.001Z --62135560789999 === -62135560789999 - --000001-01T10:10:10.001+00:10 --000001-01-01T10:00:10.001Z --62198719189999 === -62198719189999 - -+000001-01T10:10:10.001-00:10 -0001-01-01T10:20:10.001Z --62135559589999 === -62135559589999 - --000001-01T10:10:10.001-00:10 --000001-01-01T10:20:10.001Z --62198717989999 === -62198717989999 - -+000001-01T10:10:10.001+01:00 -0001-01-01T09:10:10.001Z --62135563789999 === -62135563789999 - --000001-01T10:10:10.001+01:00 --000001-01-01T09:10:10.001Z --62198722189999 === -62198722189999 - -+000001-01T10:10:10.001-01:00 -0001-01-01T11:10:10.001Z --62135556589999 === -62135556589999 - --000001-01T10:10:10.001-01:00 --000001-01-01T11:10:10.001Z --62198714989999 === -62198714989999 - -+000001-01T10:10:10.001+01:01 -0001-01-01T09:09:10.001Z --62135563849999 === -62135563849999 - --000001-01T10:10:10.001+01:01 --000001-01-01T09:09:10.001Z --62198722249999 === -62198722249999 - -+000001-01T10:10:10.001-01:01 -0001-01-01T11:11:10.001Z --62135556529999 === -62135556529999 - --000001-01T10:10:10.001-01:01 --000001-01-01T11:11:10.001Z --62198714929999 === -62198714929999 - -+000001-01T10:10:10.001+01:10 -0001-01-01T09:00:10.001Z --62135564389999 === -62135564389999 - --000001-01T10:10:10.001+01:10 --000001-01-01T09:00:10.001Z --62198722789999 === -62198722789999 - -+000001-01T10:10:10.001-01:10 -0001-01-01T11:20:10.001Z --62135555989999 === -62135555989999 - --000001-01T10:10:10.001-01:10 --000001-01-01T11:20:10.001Z --62198714389999 === -62198714389999 - -+000001-01T10:10:10.001+10:00 -0001-01-01T00:10:10.001Z --62135596189999 === -62135596189999 - --000001-01T10:10:10.001+10:00 --000001-01-01T00:10:10.001Z --62198754589999 === -62198754589999 - -+000001-01T10:10:10.001-10:00 -0001-01-01T20:10:10.001Z --62135524189999 === -62135524189999 - --000001-01T10:10:10.001-10:00 --000001-01-01T20:10:10.001Z --62198682589999 === -62198682589999 - -+000001-01T10:10:10.001+10:01 -0001-01-01T00:09:10.001Z --62135596249999 === -62135596249999 - --000001-01T10:10:10.001+10:01 --000001-01-01T00:09:10.001Z --62198754649999 === -62198754649999 - -+000001-01T10:10:10.001-10:01 -0001-01-01T20:11:10.001Z --62135524129999 === -62135524129999 - --000001-01T10:10:10.001-10:01 --000001-01-01T20:11:10.001Z --62198682529999 === -62198682529999 - -+000001-01T10:10:10.001+10:10 -0001-01-01T00:00:10.001Z --62135596789999 === -62135596789999 - --000001-01T10:10:10.001+10:10 --000001-01-01T00:00:10.001Z --62198755189999 === -62198755189999 - -+000001-01T10:10:10.001-10:10 -0001-01-01T20:20:10.001Z --62135523589999 === -62135523589999 - --000001-01T10:10:10.001-10:10 --000001-01-01T20:20:10.001Z --62198681989999 === -62198681989999 - -+100000-10T00:00:00.100 -+100000-10-01T07:00:00.100Z -3093551679600100 === 3093551679600100 - --100000-10T00:00:00.100 --100000-10-01T07:00:00.100Z --3217838720399900 === -3217838720399900 - -+100000-10T00:00:00.100Z -+100000-10-01T00:00:00.100Z -3093551654400100 === 3093551654400100 - --100000-10T00:00:00.100Z --100000-10-01T00:00:00.100Z --3217838745599900 === -3217838745599900 - -+100000-10T00:00:00.100+00:00 -+100000-10-01T00:00:00.100Z -3093551654400100 === 3093551654400100 - --100000-10T00:00:00.100+00:00 --100000-10-01T00:00:00.100Z --3217838745599900 === -3217838745599900 - -+100000-10T00:00:00.100-00:00 -+100000-10-01T00:00:00.100Z -3093551654400100 === 3093551654400100 - --100000-10T00:00:00.100-00:00 --100000-10-01T00:00:00.100Z --3217838745599900 === -3217838745599900 - -+100000-10T00:00:00.100+00:01 -+100000-09-30T23:59:00.100Z -3093551654340100 === 3093551654340100 - --100000-10T00:00:00.100+00:01 --100000-09-30T23:59:00.100Z --3217838745659900 === -3217838745659900 - -+100000-10T00:00:00.100-00:01 -+100000-10-01T00:01:00.100Z -3093551654460100 === 3093551654460100 - --100000-10T00:00:00.100-00:01 --100000-10-01T00:01:00.100Z --3217838745539900 === -3217838745539900 - -+100000-10T00:00:00.100+00:10 -+100000-09-30T23:50:00.100Z -3093551653800100 === 3093551653800100 - --100000-10T00:00:00.100+00:10 --100000-09-30T23:50:00.100Z --3217838746199900 === -3217838746199900 - -+100000-10T00:00:00.100-00:10 -+100000-10-01T00:10:00.100Z -3093551655000100 === 3093551655000100 - --100000-10T00:00:00.100-00:10 --100000-10-01T00:10:00.100Z --3217838744999900 === -3217838744999900 - -+100000-10T00:00:00.100+01:00 -+100000-09-30T23:00:00.100Z -3093551650800100 === 3093551650800100 - --100000-10T00:00:00.100+01:00 --100000-09-30T23:00:00.100Z --3217838749199900 === -3217838749199900 - -+100000-10T00:00:00.100-01:00 -+100000-10-01T01:00:00.100Z -3093551658000100 === 3093551658000100 - --100000-10T00:00:00.100-01:00 --100000-10-01T01:00:00.100Z --3217838741999900 === -3217838741999900 - -+100000-10T00:00:00.100+01:01 -+100000-09-30T22:59:00.100Z -3093551650740100 === 3093551650740100 - --100000-10T00:00:00.100+01:01 --100000-09-30T22:59:00.100Z --3217838749259900 === -3217838749259900 - -+100000-10T00:00:00.100-01:01 -+100000-10-01T01:01:00.100Z -3093551658060100 === 3093551658060100 - --100000-10T00:00:00.100-01:01 --100000-10-01T01:01:00.100Z --3217838741939900 === -3217838741939900 - -+100000-10T00:00:00.100+01:10 -+100000-09-30T22:50:00.100Z -3093551650200100 === 3093551650200100 - --100000-10T00:00:00.100+01:10 --100000-09-30T22:50:00.100Z --3217838749799900 === -3217838749799900 - -+100000-10T00:00:00.100-01:10 -+100000-10-01T01:10:00.100Z -3093551658600100 === 3093551658600100 - --100000-10T00:00:00.100-01:10 --100000-10-01T01:10:00.100Z --3217838741399900 === -3217838741399900 - -+100000-10T00:00:00.100+10:00 -+100000-09-30T14:00:00.100Z -3093551618400100 === 3093551618400100 - --100000-10T00:00:00.100+10:00 --100000-09-30T14:00:00.100Z --3217838781599900 === -3217838781599900 - -+100000-10T00:00:00.100-10:00 -+100000-10-01T10:00:00.100Z -3093551690400100 === 3093551690400100 - --100000-10T00:00:00.100-10:00 --100000-10-01T10:00:00.100Z --3217838709599900 === -3217838709599900 - -+100000-10T00:00:00.100+10:01 -+100000-09-30T13:59:00.100Z -3093551618340100 === 3093551618340100 - --100000-10T00:00:00.100+10:01 --100000-09-30T13:59:00.100Z --3217838781659900 === -3217838781659900 - -+100000-10T00:00:00.100-10:01 -+100000-10-01T10:01:00.100Z -3093551690460100 === 3093551690460100 - --100000-10T00:00:00.100-10:01 --100000-10-01T10:01:00.100Z --3217838709539900 === -3217838709539900 - -+100000-10T00:00:00.100+10:10 -+100000-09-30T13:50:00.100Z -3093551617800100 === 3093551617800100 - --100000-10T00:00:00.100+10:10 --100000-09-30T13:50:00.100Z --3217838782199900 === -3217838782199900 - -+100000-10T00:00:00.100-10:10 -+100000-10-01T10:10:00.100Z -3093551691000100 === 3093551691000100 - --100000-10T00:00:00.100-10:10 --100000-10-01T10:10:00.100Z --3217838708999900 === -3217838708999900 - -+010010-01-01 -+010010-01-01T00:00:00.000Z -253717920000000 === 253717920000000 - --010010-01-01 --010010-01-01T00:00:00.000Z --378052272000000 === -378052272000000 - -+000000-10-10 -0000-10-10T00:00:00.000Z --62142768000000 === -62142768000000 - -+000001-01-01 -0001-01-01T00:00:00.000Z --62135596800000 === -62135596800000 - --000001-01-01 --000001-01-01T00:00:00.000Z --62198755200000 === -62198755200000 - -+100000-10-10 -+100000-10-10T00:00:00.000Z -3093552432000000 === 3093552432000000 - --100000-10-10 --100000-10-10T00:00:00.000Z --3217837968000000 === -3217837968000000 - -+010010-01-01T00:00 -+010010-01-01T08:00:00.000Z -253717948800000 === 253717948800000 - --010010-01-01T00:00 --010010-01-01T08:00:00.000Z --378052243200000 === -378052243200000 - -+010010-01-01T00:00Z -+010010-01-01T00:00:00.000Z -253717920000000 === 253717920000000 - --010010-01-01T00:00Z --010010-01-01T00:00:00.000Z --378052272000000 === -378052272000000 - -+010010-01-01T00:00+00:00 -+010010-01-01T00:00:00.000Z -253717920000000 === 253717920000000 - --010010-01-01T00:00+00:00 --010010-01-01T00:00:00.000Z --378052272000000 === -378052272000000 - -+010010-01-01T00:00-00:00 -+010010-01-01T00:00:00.000Z -253717920000000 === 253717920000000 - --010010-01-01T00:00-00:00 --010010-01-01T00:00:00.000Z --378052272000000 === -378052272000000 - -+010010-01-01T00:00+00:01 -+010009-12-31T23:59:00.000Z -253717919940000 === 253717919940000 - --010010-01-01T00:00+00:01 --010011-12-31T23:59:00.000Z --378052272060000 === -378052272060000 - -+010010-01-01T00:00-00:01 -+010010-01-01T00:01:00.000Z -253717920060000 === 253717920060000 - --010010-01-01T00:00-00:01 --010010-01-01T00:01:00.000Z --378052271940000 === -378052271940000 - -+010010-01-01T00:00+00:10 -+010009-12-31T23:50:00.000Z -253717919400000 === 253717919400000 - --010010-01-01T00:00+00:10 --010011-12-31T23:50:00.000Z --378052272600000 === -378052272600000 - -+010010-01-01T00:00-00:10 -+010010-01-01T00:10:00.000Z -253717920600000 === 253717920600000 - --010010-01-01T00:00-00:10 --010010-01-01T00:10:00.000Z --378052271400000 === -378052271400000 - -+010010-01-01T00:00+01:00 -+010009-12-31T23:00:00.000Z -253717916400000 === 253717916400000 - --010010-01-01T00:00+01:00 --010011-12-31T23:00:00.000Z --378052275600000 === -378052275600000 - -+010010-01-01T00:00-01:00 -+010010-01-01T01:00:00.000Z -253717923600000 === 253717923600000 - --010010-01-01T00:00-01:00 --010010-01-01T01:00:00.000Z --378052268400000 === -378052268400000 - -+010010-01-01T00:00+01:01 -+010009-12-31T22:59:00.000Z -253717916340000 === 253717916340000 - --010010-01-01T00:00+01:01 --010011-12-31T22:59:00.000Z --378052275660000 === -378052275660000 - -+010010-01-01T00:00-01:01 -+010010-01-01T01:01:00.000Z -253717923660000 === 253717923660000 - --010010-01-01T00:00-01:01 --010010-01-01T01:01:00.000Z --378052268340000 === -378052268340000 - -+010010-01-01T00:00+01:10 -+010009-12-31T22:50:00.000Z -253717915800000 === 253717915800000 - --010010-01-01T00:00+01:10 --010011-12-31T22:50:00.000Z --378052276200000 === -378052276200000 - -+010010-01-01T00:00-01:10 -+010010-01-01T01:10:00.000Z -253717924200000 === 253717924200000 - --010010-01-01T00:00-01:10 --010010-01-01T01:10:00.000Z --378052267800000 === -378052267800000 - -+010010-01-01T00:00+10:00 -+010009-12-31T14:00:00.000Z -253717884000000 === 253717884000000 - --010010-01-01T00:00+10:00 --010011-12-31T14:00:00.000Z --378052308000000 === -378052308000000 - -+010010-01-01T00:00-10:00 -+010010-01-01T10:00:00.000Z -253717956000000 === 253717956000000 - --010010-01-01T00:00-10:00 --010010-01-01T10:00:00.000Z --378052236000000 === -378052236000000 - -+010010-01-01T00:00+10:01 -+010009-12-31T13:59:00.000Z -253717883940000 === 253717883940000 - --010010-01-01T00:00+10:01 --010011-12-31T13:59:00.000Z --378052308060000 === -378052308060000 - -+010010-01-01T00:00-10:01 -+010010-01-01T10:01:00.000Z -253717956060000 === 253717956060000 - --010010-01-01T00:00-10:01 --010010-01-01T10:01:00.000Z --378052235940000 === -378052235940000 - -+010010-01-01T00:00+10:10 -+010009-12-31T13:50:00.000Z -253717883400000 === 253717883400000 - --010010-01-01T00:00+10:10 --010011-12-31T13:50:00.000Z --378052308600000 === -378052308600000 - -+010010-01-01T00:00-10:10 -+010010-01-01T10:10:00.000Z -253717956600000 === 253717956600000 - --010010-01-01T00:00-10:10 --010010-01-01T10:10:00.000Z --378052235400000 === -378052235400000 - -+000000-10-10T01:01 -0000-10-10T08:01:00.000Z --62142739140000 === -62142739140000 - -+000000-10-10T01:01Z -0000-10-10T01:01:00.000Z --62142764340000 === -62142764340000 - -+000000-10-10T01:01+00:00 -0000-10-10T01:01:00.000Z --62142764340000 === -62142764340000 - -+000000-10-10T01:01-00:00 -0000-10-10T01:01:00.000Z --62142764340000 === -62142764340000 - -+000000-10-10T01:01+00:01 -0000-10-10T01:00:00.000Z --62142764400000 === -62142764400000 - -+000000-10-10T01:01-00:01 -0000-10-10T01:02:00.000Z --62142764280000 === -62142764280000 - -+000000-10-10T01:01+00:10 -0000-10-10T00:51:00.000Z --62142764940000 === -62142764940000 - -+000000-10-10T01:01-00:10 -0000-10-10T01:11:00.000Z --62142763740000 === -62142763740000 - -+000000-10-10T01:01+01:00 -0000-10-10T00:01:00.000Z --62142767940000 === -62142767940000 - -+000000-10-10T01:01-01:00 -0000-10-10T02:01:00.000Z --62142760740000 === -62142760740000 - -+000000-10-10T01:01+01:01 -0000-10-10T00:00:00.000Z --62142768000000 === -62142768000000 - -+000000-10-10T01:01-01:01 -0000-10-10T02:02:00.000Z --62142760680000 === -62142760680000 - -+000000-10-10T01:01+01:10 -0000-10-09T23:51:00.000Z --62142768540000 === -62142768540000 - -+000000-10-10T01:01-01:10 -0000-10-10T02:11:00.000Z --62142760140000 === -62142760140000 - -+000000-10-10T01:01+10:00 -0000-10-09T15:01:00.000Z --62142800340000 === -62142800340000 - -+000000-10-10T01:01-10:00 -0000-10-10T11:01:00.000Z --62142728340000 === -62142728340000 - -+000000-10-10T01:01+10:01 -0000-10-09T15:00:00.000Z --62142800400000 === -62142800400000 - -+000000-10-10T01:01-10:01 -0000-10-10T11:02:00.000Z --62142728280000 === -62142728280000 - -+000000-10-10T01:01+10:10 -0000-10-09T14:51:00.000Z --62142800940000 === -62142800940000 - -+000000-10-10T01:01-10:10 -0000-10-10T11:11:00.000Z --62142727740000 === -62142727740000 - -+000001-01-01T10:10 -0001-01-01T18:10:00.000Z --62135531400000 === -62135531400000 - --000001-01-01T10:10 --000001-01-01T18:10:00.000Z --62198689800000 === -62198689800000 - -+000001-01-01T10:10Z -0001-01-01T10:10:00.000Z --62135560200000 === -62135560200000 - --000001-01-01T10:10Z --000001-01-01T10:10:00.000Z --62198718600000 === -62198718600000 - -+000001-01-01T10:10+00:00 -0001-01-01T10:10:00.000Z --62135560200000 === -62135560200000 - --000001-01-01T10:10+00:00 --000001-01-01T10:10:00.000Z --62198718600000 === -62198718600000 - -+000001-01-01T10:10-00:00 -0001-01-01T10:10:00.000Z --62135560200000 === -62135560200000 - --000001-01-01T10:10-00:00 --000001-01-01T10:10:00.000Z --62198718600000 === -62198718600000 - -+000001-01-01T10:10+00:01 -0001-01-01T10:09:00.000Z --62135560260000 === -62135560260000 - --000001-01-01T10:10+00:01 --000001-01-01T10:09:00.000Z --62198718660000 === -62198718660000 - -+000001-01-01T10:10-00:01 -0001-01-01T10:11:00.000Z --62135560140000 === -62135560140000 - --000001-01-01T10:10-00:01 --000001-01-01T10:11:00.000Z --62198718540000 === -62198718540000 - -+000001-01-01T10:10+00:10 -0001-01-01T10:00:00.000Z --62135560800000 === -62135560800000 - --000001-01-01T10:10+00:10 --000001-01-01T10:00:00.000Z --62198719200000 === -62198719200000 - -+000001-01-01T10:10-00:10 -0001-01-01T10:20:00.000Z --62135559600000 === -62135559600000 - --000001-01-01T10:10-00:10 --000001-01-01T10:20:00.000Z --62198718000000 === -62198718000000 - -+000001-01-01T10:10+01:00 -0001-01-01T09:10:00.000Z --62135563800000 === -62135563800000 - --000001-01-01T10:10+01:00 --000001-01-01T09:10:00.000Z --62198722200000 === -62198722200000 - -+000001-01-01T10:10-01:00 -0001-01-01T11:10:00.000Z --62135556600000 === -62135556600000 - --000001-01-01T10:10-01:00 --000001-01-01T11:10:00.000Z --62198715000000 === -62198715000000 - -+000001-01-01T10:10+01:01 -0001-01-01T09:09:00.000Z --62135563860000 === -62135563860000 - --000001-01-01T10:10+01:01 --000001-01-01T09:09:00.000Z --62198722260000 === -62198722260000 - -+000001-01-01T10:10-01:01 -0001-01-01T11:11:00.000Z --62135556540000 === -62135556540000 - --000001-01-01T10:10-01:01 --000001-01-01T11:11:00.000Z --62198714940000 === -62198714940000 - -+000001-01-01T10:10+01:10 -0001-01-01T09:00:00.000Z --62135564400000 === -62135564400000 - --000001-01-01T10:10+01:10 --000001-01-01T09:00:00.000Z --62198722800000 === -62198722800000 - -+000001-01-01T10:10-01:10 -0001-01-01T11:20:00.000Z --62135556000000 === -62135556000000 - --000001-01-01T10:10-01:10 --000001-01-01T11:20:00.000Z --62198714400000 === -62198714400000 - -+000001-01-01T10:10+10:00 -0001-01-01T00:10:00.000Z --62135596200000 === -62135596200000 - --000001-01-01T10:10+10:00 --000001-01-01T00:10:00.000Z --62198754600000 === -62198754600000 - -+000001-01-01T10:10-10:00 -0001-01-01T20:10:00.000Z --62135524200000 === -62135524200000 - --000001-01-01T10:10-10:00 --000001-01-01T20:10:00.000Z --62198682600000 === -62198682600000 - -+000001-01-01T10:10+10:01 -0001-01-01T00:09:00.000Z --62135596260000 === -62135596260000 - --000001-01-01T10:10+10:01 --000001-01-01T00:09:00.000Z --62198754660000 === -62198754660000 - -+000001-01-01T10:10-10:01 -0001-01-01T20:11:00.000Z --62135524140000 === -62135524140000 - --000001-01-01T10:10-10:01 --000001-01-01T20:11:00.000Z --62198682540000 === -62198682540000 - -+000001-01-01T10:10+10:10 -0001-01-01T00:00:00.000Z --62135596800000 === -62135596800000 - --000001-01-01T10:10+10:10 --000001-01-01T00:00:00.000Z --62198755200000 === -62198755200000 - -+000001-01-01T10:10-10:10 -0001-01-01T20:20:00.000Z --62135523600000 === -62135523600000 - --000001-01-01T10:10-10:10 --000001-01-01T20:20:00.000Z --62198682000000 === -62198682000000 - -+100000-10-10T00:00 -+100000-10-10T07:00:00.000Z -3093552457200000 === 3093552457200000 - --100000-10-10T00:00 --100000-10-10T07:00:00.000Z --3217837942800000 === -3217837942800000 - -+100000-10-10T00:00Z -+100000-10-10T00:00:00.000Z -3093552432000000 === 3093552432000000 - --100000-10-10T00:00Z --100000-10-10T00:00:00.000Z --3217837968000000 === -3217837968000000 - -+100000-10-10T00:00+00:00 -+100000-10-10T00:00:00.000Z -3093552432000000 === 3093552432000000 - --100000-10-10T00:00+00:00 --100000-10-10T00:00:00.000Z --3217837968000000 === -3217837968000000 - -+100000-10-10T00:00-00:00 -+100000-10-10T00:00:00.000Z -3093552432000000 === 3093552432000000 - --100000-10-10T00:00-00:00 --100000-10-10T00:00:00.000Z --3217837968000000 === -3217837968000000 - -+100000-10-10T00:00+00:01 -+100000-10-09T23:59:00.000Z -3093552431940000 === 3093552431940000 - --100000-10-10T00:00+00:01 --100000-10-09T23:59:00.000Z --3217837968060000 === -3217837968060000 - -+100000-10-10T00:00-00:01 -+100000-10-10T00:01:00.000Z -3093552432060000 === 3093552432060000 - --100000-10-10T00:00-00:01 --100000-10-10T00:01:00.000Z --3217837967940000 === -3217837967940000 - -+100000-10-10T00:00+00:10 -+100000-10-09T23:50:00.000Z -3093552431400000 === 3093552431400000 - --100000-10-10T00:00+00:10 --100000-10-09T23:50:00.000Z --3217837968600000 === -3217837968600000 - -+100000-10-10T00:00-00:10 -+100000-10-10T00:10:00.000Z -3093552432600000 === 3093552432600000 - --100000-10-10T00:00-00:10 --100000-10-10T00:10:00.000Z --3217837967400000 === -3217837967400000 - -+100000-10-10T00:00+01:00 -+100000-10-09T23:00:00.000Z -3093552428400000 === 3093552428400000 - --100000-10-10T00:00+01:00 --100000-10-09T23:00:00.000Z --3217837971600000 === -3217837971600000 - -+100000-10-10T00:00-01:00 -+100000-10-10T01:00:00.000Z -3093552435600000 === 3093552435600000 - --100000-10-10T00:00-01:00 --100000-10-10T01:00:00.000Z --3217837964400000 === -3217837964400000 - -+100000-10-10T00:00+01:01 -+100000-10-09T22:59:00.000Z -3093552428340000 === 3093552428340000 - --100000-10-10T00:00+01:01 --100000-10-09T22:59:00.000Z --3217837971660000 === -3217837971660000 - -+100000-10-10T00:00-01:01 -+100000-10-10T01:01:00.000Z -3093552435660000 === 3093552435660000 - --100000-10-10T00:00-01:01 --100000-10-10T01:01:00.000Z --3217837964340000 === -3217837964340000 - -+100000-10-10T00:00+01:10 -+100000-10-09T22:50:00.000Z -3093552427800000 === 3093552427800000 - --100000-10-10T00:00+01:10 --100000-10-09T22:50:00.000Z --3217837972200000 === -3217837972200000 - -+100000-10-10T00:00-01:10 -+100000-10-10T01:10:00.000Z -3093552436200000 === 3093552436200000 - --100000-10-10T00:00-01:10 --100000-10-10T01:10:00.000Z --3217837963800000 === -3217837963800000 - -+100000-10-10T00:00+10:00 -+100000-10-09T14:00:00.000Z -3093552396000000 === 3093552396000000 - --100000-10-10T00:00+10:00 --100000-10-09T14:00:00.000Z --3217838004000000 === -3217838004000000 - -+100000-10-10T00:00-10:00 -+100000-10-10T10:00:00.000Z -3093552468000000 === 3093552468000000 - --100000-10-10T00:00-10:00 --100000-10-10T10:00:00.000Z --3217837932000000 === -3217837932000000 - -+100000-10-10T00:00+10:01 -+100000-10-09T13:59:00.000Z -3093552395940000 === 3093552395940000 - --100000-10-10T00:00+10:01 --100000-10-09T13:59:00.000Z --3217838004060000 === -3217838004060000 - -+100000-10-10T00:00-10:01 -+100000-10-10T10:01:00.000Z -3093552468060000 === 3093552468060000 - --100000-10-10T00:00-10:01 --100000-10-10T10:01:00.000Z --3217837931940000 === -3217837931940000 - -+100000-10-10T00:00+10:10 -+100000-10-09T13:50:00.000Z -3093552395400000 === 3093552395400000 - --100000-10-10T00:00+10:10 --100000-10-09T13:50:00.000Z --3217838004600000 === -3217838004600000 - -+100000-10-10T00:00-10:10 -+100000-10-10T10:10:00.000Z -3093552468600000 === 3093552468600000 - --100000-10-10T00:00-10:10 --100000-10-10T10:10:00.000Z --3217837931400000 === -3217837931400000 - -+010010-01-01T00:00:00 -+010010-01-01T08:00:00.000Z -253717948800000 === 253717948800000 - --010010-01-01T00:00:00 --010010-01-01T08:00:00.000Z --378052243200000 === -378052243200000 - -+010010-01-01T00:00:00Z -+010010-01-01T00:00:00.000Z -253717920000000 === 253717920000000 - --010010-01-01T00:00:00Z --010010-01-01T00:00:00.000Z --378052272000000 === -378052272000000 - -+010010-01-01T00:00:00+00:00 -+010010-01-01T00:00:00.000Z -253717920000000 === 253717920000000 - --010010-01-01T00:00:00+00:00 --010010-01-01T00:00:00.000Z --378052272000000 === -378052272000000 - -+010010-01-01T00:00:00-00:00 -+010010-01-01T00:00:00.000Z -253717920000000 === 253717920000000 - --010010-01-01T00:00:00-00:00 --010010-01-01T00:00:00.000Z --378052272000000 === -378052272000000 - -+010010-01-01T00:00:00+00:01 -+010009-12-31T23:59:00.000Z -253717919940000 === 253717919940000 - --010010-01-01T00:00:00+00:01 --010011-12-31T23:59:00.000Z --378052272060000 === -378052272060000 - -+010010-01-01T00:00:00-00:01 -+010010-01-01T00:01:00.000Z -253717920060000 === 253717920060000 - --010010-01-01T00:00:00-00:01 --010010-01-01T00:01:00.000Z --378052271940000 === -378052271940000 - -+010010-01-01T00:00:00+00:10 -+010009-12-31T23:50:00.000Z -253717919400000 === 253717919400000 - --010010-01-01T00:00:00+00:10 --010011-12-31T23:50:00.000Z --378052272600000 === -378052272600000 - -+010010-01-01T00:00:00-00:10 -+010010-01-01T00:10:00.000Z -253717920600000 === 253717920600000 - --010010-01-01T00:00:00-00:10 --010010-01-01T00:10:00.000Z --378052271400000 === -378052271400000 - -+010010-01-01T00:00:00+01:00 -+010009-12-31T23:00:00.000Z -253717916400000 === 253717916400000 - --010010-01-01T00:00:00+01:00 --010011-12-31T23:00:00.000Z --378052275600000 === -378052275600000 - -+010010-01-01T00:00:00-01:00 -+010010-01-01T01:00:00.000Z -253717923600000 === 253717923600000 - --010010-01-01T00:00:00-01:00 --010010-01-01T01:00:00.000Z --378052268400000 === -378052268400000 - -+010010-01-01T00:00:00+01:01 -+010009-12-31T22:59:00.000Z -253717916340000 === 253717916340000 - --010010-01-01T00:00:00+01:01 --010011-12-31T22:59:00.000Z --378052275660000 === -378052275660000 - -+010010-01-01T00:00:00-01:01 -+010010-01-01T01:01:00.000Z -253717923660000 === 253717923660000 - --010010-01-01T00:00:00-01:01 --010010-01-01T01:01:00.000Z --378052268340000 === -378052268340000 - -+010010-01-01T00:00:00+01:10 -+010009-12-31T22:50:00.000Z -253717915800000 === 253717915800000 - --010010-01-01T00:00:00+01:10 --010011-12-31T22:50:00.000Z --378052276200000 === -378052276200000 - -+010010-01-01T00:00:00-01:10 -+010010-01-01T01:10:00.000Z -253717924200000 === 253717924200000 - --010010-01-01T00:00:00-01:10 --010010-01-01T01:10:00.000Z --378052267800000 === -378052267800000 - -+010010-01-01T00:00:00+10:00 -+010009-12-31T14:00:00.000Z -253717884000000 === 253717884000000 - --010010-01-01T00:00:00+10:00 --010011-12-31T14:00:00.000Z --378052308000000 === -378052308000000 - -+010010-01-01T00:00:00-10:00 -+010010-01-01T10:00:00.000Z -253717956000000 === 253717956000000 - --010010-01-01T00:00:00-10:00 --010010-01-01T10:00:00.000Z --378052236000000 === -378052236000000 - -+010010-01-01T00:00:00+10:01 -+010009-12-31T13:59:00.000Z -253717883940000 === 253717883940000 - --010010-01-01T00:00:00+10:01 --010011-12-31T13:59:00.000Z --378052308060000 === -378052308060000 - -+010010-01-01T00:00:00-10:01 -+010010-01-01T10:01:00.000Z -253717956060000 === 253717956060000 - --010010-01-01T00:00:00-10:01 --010010-01-01T10:01:00.000Z --378052235940000 === -378052235940000 - -+010010-01-01T00:00:00+10:10 -+010009-12-31T13:50:00.000Z -253717883400000 === 253717883400000 - --010010-01-01T00:00:00+10:10 --010011-12-31T13:50:00.000Z --378052308600000 === -378052308600000 - -+010010-01-01T00:00:00-10:10 -+010010-01-01T10:10:00.000Z -253717956600000 === 253717956600000 - --010010-01-01T00:00:00-10:10 --010010-01-01T10:10:00.000Z --378052235400000 === -378052235400000 - -+000000-10-10T01:01:01 -0000-10-10T08:01:01.000Z --62142739139000 === -62142739139000 - -+000000-10-10T01:01:01Z -0000-10-10T01:01:01.000Z --62142764339000 === -62142764339000 - -+000000-10-10T01:01:01+00:00 -0000-10-10T01:01:01.000Z --62142764339000 === -62142764339000 - -+000000-10-10T01:01:01-00:00 -0000-10-10T01:01:01.000Z --62142764339000 === -62142764339000 - -+000000-10-10T01:01:01+00:01 -0000-10-10T01:00:01.000Z --62142764399000 === -62142764399000 - -+000000-10-10T01:01:01-00:01 -0000-10-10T01:02:01.000Z --62142764279000 === -62142764279000 - -+000000-10-10T01:01:01+00:10 -0000-10-10T00:51:01.000Z --62142764939000 === -62142764939000 - -+000000-10-10T01:01:01-00:10 -0000-10-10T01:11:01.000Z --62142763739000 === -62142763739000 - -+000000-10-10T01:01:01+01:00 -0000-10-10T00:01:01.000Z --62142767939000 === -62142767939000 - -+000000-10-10T01:01:01-01:00 -0000-10-10T02:01:01.000Z --62142760739000 === -62142760739000 - -+000000-10-10T01:01:01+01:01 -0000-10-10T00:00:01.000Z --62142767999000 === -62142767999000 - -+000000-10-10T01:01:01-01:01 -0000-10-10T02:02:01.000Z --62142760679000 === -62142760679000 - -+000000-10-10T01:01:01+01:10 -0000-10-09T23:51:01.000Z --62142768539000 === -62142768539000 - -+000000-10-10T01:01:01-01:10 -0000-10-10T02:11:01.000Z --62142760139000 === -62142760139000 - -+000000-10-10T01:01:01+10:00 -0000-10-09T15:01:01.000Z --62142800339000 === -62142800339000 - -+000000-10-10T01:01:01-10:00 -0000-10-10T11:01:01.000Z --62142728339000 === -62142728339000 - -+000000-10-10T01:01:01+10:01 -0000-10-09T15:00:01.000Z --62142800399000 === -62142800399000 - -+000000-10-10T01:01:01-10:01 -0000-10-10T11:02:01.000Z --62142728279000 === -62142728279000 - -+000000-10-10T01:01:01+10:10 -0000-10-09T14:51:01.000Z --62142800939000 === -62142800939000 - -+000000-10-10T01:01:01-10:10 -0000-10-10T11:11:01.000Z --62142727739000 === -62142727739000 - -+000001-01-01T10:10:10 -0001-01-01T18:10:10.000Z --62135531390000 === -62135531390000 - --000001-01-01T10:10:10 --000001-01-01T18:10:10.000Z --62198689790000 === -62198689790000 - -+000001-01-01T10:10:10Z -0001-01-01T10:10:10.000Z --62135560190000 === -62135560190000 - --000001-01-01T10:10:10Z --000001-01-01T10:10:10.000Z --62198718590000 === -62198718590000 - -+000001-01-01T10:10:10+00:00 -0001-01-01T10:10:10.000Z --62135560190000 === -62135560190000 - --000001-01-01T10:10:10+00:00 --000001-01-01T10:10:10.000Z --62198718590000 === -62198718590000 - -+000001-01-01T10:10:10-00:00 -0001-01-01T10:10:10.000Z --62135560190000 === -62135560190000 - --000001-01-01T10:10:10-00:00 --000001-01-01T10:10:10.000Z --62198718590000 === -62198718590000 - -+000001-01-01T10:10:10+00:01 -0001-01-01T10:09:10.000Z --62135560250000 === -62135560250000 - --000001-01-01T10:10:10+00:01 --000001-01-01T10:09:10.000Z --62198718650000 === -62198718650000 - -+000001-01-01T10:10:10-00:01 -0001-01-01T10:11:10.000Z --62135560130000 === -62135560130000 - --000001-01-01T10:10:10-00:01 --000001-01-01T10:11:10.000Z --62198718530000 === -62198718530000 - -+000001-01-01T10:10:10+00:10 -0001-01-01T10:00:10.000Z --62135560790000 === -62135560790000 - --000001-01-01T10:10:10+00:10 --000001-01-01T10:00:10.000Z --62198719190000 === -62198719190000 - -+000001-01-01T10:10:10-00:10 -0001-01-01T10:20:10.000Z --62135559590000 === -62135559590000 - --000001-01-01T10:10:10-00:10 --000001-01-01T10:20:10.000Z --62198717990000 === -62198717990000 - -+000001-01-01T10:10:10+01:00 -0001-01-01T09:10:10.000Z --62135563790000 === -62135563790000 - --000001-01-01T10:10:10+01:00 --000001-01-01T09:10:10.000Z --62198722190000 === -62198722190000 - -+000001-01-01T10:10:10-01:00 -0001-01-01T11:10:10.000Z --62135556590000 === -62135556590000 - --000001-01-01T10:10:10-01:00 --000001-01-01T11:10:10.000Z --62198714990000 === -62198714990000 - -+000001-01-01T10:10:10+01:01 -0001-01-01T09:09:10.000Z --62135563850000 === -62135563850000 - --000001-01-01T10:10:10+01:01 --000001-01-01T09:09:10.000Z --62198722250000 === -62198722250000 - -+000001-01-01T10:10:10-01:01 -0001-01-01T11:11:10.000Z --62135556530000 === -62135556530000 - --000001-01-01T10:10:10-01:01 --000001-01-01T11:11:10.000Z --62198714930000 === -62198714930000 - -+000001-01-01T10:10:10+01:10 -0001-01-01T09:00:10.000Z --62135564390000 === -62135564390000 - --000001-01-01T10:10:10+01:10 --000001-01-01T09:00:10.000Z --62198722790000 === -62198722790000 - -+000001-01-01T10:10:10-01:10 -0001-01-01T11:20:10.000Z --62135555990000 === -62135555990000 - --000001-01-01T10:10:10-01:10 --000001-01-01T11:20:10.000Z --62198714390000 === -62198714390000 - -+000001-01-01T10:10:10+10:00 -0001-01-01T00:10:10.000Z --62135596190000 === -62135596190000 - --000001-01-01T10:10:10+10:00 --000001-01-01T00:10:10.000Z --62198754590000 === -62198754590000 - -+000001-01-01T10:10:10-10:00 -0001-01-01T20:10:10.000Z --62135524190000 === -62135524190000 - --000001-01-01T10:10:10-10:00 --000001-01-01T20:10:10.000Z --62198682590000 === -62198682590000 - -+000001-01-01T10:10:10+10:01 -0001-01-01T00:09:10.000Z --62135596250000 === -62135596250000 - --000001-01-01T10:10:10+10:01 --000001-01-01T00:09:10.000Z --62198754650000 === -62198754650000 - -+000001-01-01T10:10:10-10:01 -0001-01-01T20:11:10.000Z --62135524130000 === -62135524130000 - --000001-01-01T10:10:10-10:01 --000001-01-01T20:11:10.000Z --62198682530000 === -62198682530000 - -+000001-01-01T10:10:10+10:10 -0001-01-01T00:00:10.000Z --62135596790000 === -62135596790000 - --000001-01-01T10:10:10+10:10 --000001-01-01T00:00:10.000Z --62198755190000 === -62198755190000 - -+000001-01-01T10:10:10-10:10 -0001-01-01T20:20:10.000Z --62135523590000 === -62135523590000 - --000001-01-01T10:10:10-10:10 --000001-01-01T20:20:10.000Z --62198681990000 === -62198681990000 - -+100000-10-10T00:00:00 -+100000-10-10T07:00:00.000Z -3093552457200000 === 3093552457200000 - --100000-10-10T00:00:00 --100000-10-10T07:00:00.000Z --3217837942800000 === -3217837942800000 - -+100000-10-10T00:00:00Z -+100000-10-10T00:00:00.000Z -3093552432000000 === 3093552432000000 - --100000-10-10T00:00:00Z --100000-10-10T00:00:00.000Z --3217837968000000 === -3217837968000000 - -+100000-10-10T00:00:00+00:00 -+100000-10-10T00:00:00.000Z -3093552432000000 === 3093552432000000 - --100000-10-10T00:00:00+00:00 --100000-10-10T00:00:00.000Z --3217837968000000 === -3217837968000000 - -+100000-10-10T00:00:00-00:00 -+100000-10-10T00:00:00.000Z -3093552432000000 === 3093552432000000 - --100000-10-10T00:00:00-00:00 --100000-10-10T00:00:00.000Z --3217837968000000 === -3217837968000000 - -+100000-10-10T00:00:00+00:01 -+100000-10-09T23:59:00.000Z -3093552431940000 === 3093552431940000 - --100000-10-10T00:00:00+00:01 --100000-10-09T23:59:00.000Z --3217837968060000 === -3217837968060000 - -+100000-10-10T00:00:00-00:01 -+100000-10-10T00:01:00.000Z -3093552432060000 === 3093552432060000 - --100000-10-10T00:00:00-00:01 --100000-10-10T00:01:00.000Z --3217837967940000 === -3217837967940000 - -+100000-10-10T00:00:00+00:10 -+100000-10-09T23:50:00.000Z -3093552431400000 === 3093552431400000 - --100000-10-10T00:00:00+00:10 --100000-10-09T23:50:00.000Z --3217837968600000 === -3217837968600000 - -+100000-10-10T00:00:00-00:10 -+100000-10-10T00:10:00.000Z -3093552432600000 === 3093552432600000 - --100000-10-10T00:00:00-00:10 --100000-10-10T00:10:00.000Z --3217837967400000 === -3217837967400000 - -+100000-10-10T00:00:00+01:00 -+100000-10-09T23:00:00.000Z -3093552428400000 === 3093552428400000 - --100000-10-10T00:00:00+01:00 --100000-10-09T23:00:00.000Z --3217837971600000 === -3217837971600000 - -+100000-10-10T00:00:00-01:00 -+100000-10-10T01:00:00.000Z -3093552435600000 === 3093552435600000 - --100000-10-10T00:00:00-01:00 --100000-10-10T01:00:00.000Z --3217837964400000 === -3217837964400000 - -+100000-10-10T00:00:00+01:01 -+100000-10-09T22:59:00.000Z -3093552428340000 === 3093552428340000 - --100000-10-10T00:00:00+01:01 --100000-10-09T22:59:00.000Z --3217837971660000 === -3217837971660000 - -+100000-10-10T00:00:00-01:01 -+100000-10-10T01:01:00.000Z -3093552435660000 === 3093552435660000 - --100000-10-10T00:00:00-01:01 --100000-10-10T01:01:00.000Z --3217837964340000 === -3217837964340000 - -+100000-10-10T00:00:00+01:10 -+100000-10-09T22:50:00.000Z -3093552427800000 === 3093552427800000 - --100000-10-10T00:00:00+01:10 --100000-10-09T22:50:00.000Z --3217837972200000 === -3217837972200000 - -+100000-10-10T00:00:00-01:10 -+100000-10-10T01:10:00.000Z -3093552436200000 === 3093552436200000 - --100000-10-10T00:00:00-01:10 --100000-10-10T01:10:00.000Z --3217837963800000 === -3217837963800000 - -+100000-10-10T00:00:00+10:00 -+100000-10-09T14:00:00.000Z -3093552396000000 === 3093552396000000 - --100000-10-10T00:00:00+10:00 --100000-10-09T14:00:00.000Z --3217838004000000 === -3217838004000000 - -+100000-10-10T00:00:00-10:00 -+100000-10-10T10:00:00.000Z -3093552468000000 === 3093552468000000 - --100000-10-10T00:00:00-10:00 --100000-10-10T10:00:00.000Z --3217837932000000 === -3217837932000000 - -+100000-10-10T00:00:00+10:01 -+100000-10-09T13:59:00.000Z -3093552395940000 === 3093552395940000 - --100000-10-10T00:00:00+10:01 --100000-10-09T13:59:00.000Z --3217838004060000 === -3217838004060000 - -+100000-10-10T00:00:00-10:01 -+100000-10-10T10:01:00.000Z -3093552468060000 === 3093552468060000 - --100000-10-10T00:00:00-10:01 --100000-10-10T10:01:00.000Z --3217837931940000 === -3217837931940000 - -+100000-10-10T00:00:00+10:10 -+100000-10-09T13:50:00.000Z -3093552395400000 === 3093552395400000 - --100000-10-10T00:00:00+10:10 --100000-10-09T13:50:00.000Z --3217838004600000 === -3217838004600000 - -+100000-10-10T00:00:00-10:10 -+100000-10-10T10:10:00.000Z -3093552468600000 === 3093552468600000 - --100000-10-10T00:00:00-10:10 --100000-10-10T10:10:00.000Z --3217837931400000 === -3217837931400000 - -+010010-01-01T00:00:00.010 -+010010-01-01T08:00:00.010Z -253717948800010 === 253717948800010 - --010010-01-01T00:00:00.010 --010010-01-01T08:00:00.010Z --378052243199990 === -378052243199990 - -+010010-01-01T00:00:00.010Z -+010010-01-01T00:00:00.010Z -253717920000010 === 253717920000010 - --010010-01-01T00:00:00.010Z --010010-01-01T00:00:00.010Z --378052271999990 === -378052271999990 - -+010010-01-01T00:00:00.010+00:00 -+010010-01-01T00:00:00.010Z -253717920000010 === 253717920000010 - --010010-01-01T00:00:00.010+00:00 --010010-01-01T00:00:00.010Z --378052271999990 === -378052271999990 - -+010010-01-01T00:00:00.010-00:00 -+010010-01-01T00:00:00.010Z -253717920000010 === 253717920000010 - --010010-01-01T00:00:00.010-00:00 --010010-01-01T00:00:00.010Z --378052271999990 === -378052271999990 - -+010010-01-01T00:00:00.010+00:01 -+010009-12-31T23:59:00.010Z -253717919940010 === 253717919940010 - --010010-01-01T00:00:00.010+00:01 --010011-12-31T23:59:00.010Z --378052272059990 === -378052272059990 - -+010010-01-01T00:00:00.010-00:01 -+010010-01-01T00:01:00.010Z -253717920060010 === 253717920060010 - --010010-01-01T00:00:00.010-00:01 --010010-01-01T00:01:00.010Z --378052271939990 === -378052271939990 - -+010010-01-01T00:00:00.010+00:10 -+010009-12-31T23:50:00.010Z -253717919400010 === 253717919400010 - --010010-01-01T00:00:00.010+00:10 --010011-12-31T23:50:00.010Z --378052272599990 === -378052272599990 - -+010010-01-01T00:00:00.010-00:10 -+010010-01-01T00:10:00.010Z -253717920600010 === 253717920600010 - --010010-01-01T00:00:00.010-00:10 --010010-01-01T00:10:00.010Z --378052271399990 === -378052271399990 - -+010010-01-01T00:00:00.010+01:00 -+010009-12-31T23:00:00.010Z -253717916400010 === 253717916400010 - --010010-01-01T00:00:00.010+01:00 --010011-12-31T23:00:00.010Z --378052275599990 === -378052275599990 - -+010010-01-01T00:00:00.010-01:00 -+010010-01-01T01:00:00.010Z -253717923600010 === 253717923600010 - --010010-01-01T00:00:00.010-01:00 --010010-01-01T01:00:00.010Z --378052268399990 === -378052268399990 - -+010010-01-01T00:00:00.010+01:01 -+010009-12-31T22:59:00.010Z -253717916340010 === 253717916340010 - --010010-01-01T00:00:00.010+01:01 --010011-12-31T22:59:00.010Z --378052275659990 === -378052275659990 - -+010010-01-01T00:00:00.010-01:01 -+010010-01-01T01:01:00.010Z -253717923660010 === 253717923660010 - --010010-01-01T00:00:00.010-01:01 --010010-01-01T01:01:00.010Z --378052268339990 === -378052268339990 - -+010010-01-01T00:00:00.010+01:10 -+010009-12-31T22:50:00.010Z -253717915800010 === 253717915800010 - --010010-01-01T00:00:00.010+01:10 --010011-12-31T22:50:00.010Z --378052276199990 === -378052276199990 - -+010010-01-01T00:00:00.010-01:10 -+010010-01-01T01:10:00.010Z -253717924200010 === 253717924200010 - --010010-01-01T00:00:00.010-01:10 --010010-01-01T01:10:00.010Z --378052267799990 === -378052267799990 - -+010010-01-01T00:00:00.010+10:00 -+010009-12-31T14:00:00.010Z -253717884000010 === 253717884000010 - --010010-01-01T00:00:00.010+10:00 --010011-12-31T14:00:00.010Z --378052307999990 === -378052307999990 - -+010010-01-01T00:00:00.010-10:00 -+010010-01-01T10:00:00.010Z -253717956000010 === 253717956000010 - --010010-01-01T00:00:00.010-10:00 --010010-01-01T10:00:00.010Z --378052235999990 === -378052235999990 - -+010010-01-01T00:00:00.010+10:01 -+010009-12-31T13:59:00.010Z -253717883940010 === 253717883940010 - --010010-01-01T00:00:00.010+10:01 --010011-12-31T13:59:00.010Z --378052308059990 === -378052308059990 - -+010010-01-01T00:00:00.010-10:01 -+010010-01-01T10:01:00.010Z -253717956060010 === 253717956060010 - --010010-01-01T00:00:00.010-10:01 --010010-01-01T10:01:00.010Z --378052235939990 === -378052235939990 - -+010010-01-01T00:00:00.010+10:10 -+010009-12-31T13:50:00.010Z -253717883400010 === 253717883400010 - --010010-01-01T00:00:00.010+10:10 --010011-12-31T13:50:00.010Z --378052308599990 === -378052308599990 - -+010010-01-01T00:00:00.010-10:10 -+010010-01-01T10:10:00.010Z -253717956600010 === 253717956600010 - --010010-01-01T00:00:00.010-10:10 --010010-01-01T10:10:00.010Z --378052235399990 === -378052235399990 - -+000000-10-10T01:01:01.000 -0000-10-10T08:01:01.000Z --62142739139000 === -62142739139000 - -+000000-10-10T01:01:01.000Z -0000-10-10T01:01:01.000Z --62142764339000 === -62142764339000 - -+000000-10-10T01:01:01.000+00:00 -0000-10-10T01:01:01.000Z --62142764339000 === -62142764339000 - -+000000-10-10T01:01:01.000-00:00 -0000-10-10T01:01:01.000Z --62142764339000 === -62142764339000 - -+000000-10-10T01:01:01.000+00:01 -0000-10-10T01:00:01.000Z --62142764399000 === -62142764399000 - -+000000-10-10T01:01:01.000-00:01 -0000-10-10T01:02:01.000Z --62142764279000 === -62142764279000 - -+000000-10-10T01:01:01.000+00:10 -0000-10-10T00:51:01.000Z --62142764939000 === -62142764939000 - -+000000-10-10T01:01:01.000-00:10 -0000-10-10T01:11:01.000Z --62142763739000 === -62142763739000 - -+000000-10-10T01:01:01.000+01:00 -0000-10-10T00:01:01.000Z --62142767939000 === -62142767939000 - -+000000-10-10T01:01:01.000-01:00 -0000-10-10T02:01:01.000Z --62142760739000 === -62142760739000 - -+000000-10-10T01:01:01.000+01:01 -0000-10-10T00:00:01.000Z --62142767999000 === -62142767999000 - -+000000-10-10T01:01:01.000-01:01 -0000-10-10T02:02:01.000Z --62142760679000 === -62142760679000 - -+000000-10-10T01:01:01.000+01:10 -0000-10-09T23:51:01.000Z --62142768539000 === -62142768539000 - -+000000-10-10T01:01:01.000-01:10 -0000-10-10T02:11:01.000Z --62142760139000 === -62142760139000 - -+000000-10-10T01:01:01.000+10:00 -0000-10-09T15:01:01.000Z --62142800339000 === -62142800339000 - -+000000-10-10T01:01:01.000-10:00 -0000-10-10T11:01:01.000Z --62142728339000 === -62142728339000 - -+000000-10-10T01:01:01.000+10:01 -0000-10-09T15:00:01.000Z --62142800399000 === -62142800399000 - -+000000-10-10T01:01:01.000-10:01 -0000-10-10T11:02:01.000Z --62142728279000 === -62142728279000 - -+000000-10-10T01:01:01.000+10:10 -0000-10-09T14:51:01.000Z --62142800939000 === -62142800939000 - -+000000-10-10T01:01:01.000-10:10 -0000-10-10T11:11:01.000Z --62142727739000 === -62142727739000 - -+000001-01-01T10:10:10.001 -0001-01-01T18:10:10.001Z --62135531389999 === -62135531389999 - --000001-01-01T10:10:10.001 --000001-01-01T18:10:10.001Z --62198689789999 === -62198689789999 - -+000001-01-01T10:10:10.001Z -0001-01-01T10:10:10.001Z --62135560189999 === -62135560189999 - --000001-01-01T10:10:10.001Z --000001-01-01T10:10:10.001Z --62198718589999 === -62198718589999 - -+000001-01-01T10:10:10.001+00:00 -0001-01-01T10:10:10.001Z --62135560189999 === -62135560189999 - --000001-01-01T10:10:10.001+00:00 --000001-01-01T10:10:10.001Z --62198718589999 === -62198718589999 - -+000001-01-01T10:10:10.001-00:00 -0001-01-01T10:10:10.001Z --62135560189999 === -62135560189999 - --000001-01-01T10:10:10.001-00:00 --000001-01-01T10:10:10.001Z --62198718589999 === -62198718589999 - -+000001-01-01T10:10:10.001+00:01 -0001-01-01T10:09:10.001Z --62135560249999 === -62135560249999 - --000001-01-01T10:10:10.001+00:01 --000001-01-01T10:09:10.001Z --62198718649999 === -62198718649999 - -+000001-01-01T10:10:10.001-00:01 -0001-01-01T10:11:10.001Z --62135560129999 === -62135560129999 - --000001-01-01T10:10:10.001-00:01 --000001-01-01T10:11:10.001Z --62198718529999 === -62198718529999 - -+000001-01-01T10:10:10.001+00:10 -0001-01-01T10:00:10.001Z --62135560789999 === -62135560789999 - --000001-01-01T10:10:10.001+00:10 --000001-01-01T10:00:10.001Z --62198719189999 === -62198719189999 - -+000001-01-01T10:10:10.001-00:10 -0001-01-01T10:20:10.001Z --62135559589999 === -62135559589999 - --000001-01-01T10:10:10.001-00:10 --000001-01-01T10:20:10.001Z --62198717989999 === -62198717989999 - -+000001-01-01T10:10:10.001+01:00 -0001-01-01T09:10:10.001Z --62135563789999 === -62135563789999 - --000001-01-01T10:10:10.001+01:00 --000001-01-01T09:10:10.001Z --62198722189999 === -62198722189999 - -+000001-01-01T10:10:10.001-01:00 -0001-01-01T11:10:10.001Z --62135556589999 === -62135556589999 - --000001-01-01T10:10:10.001-01:00 --000001-01-01T11:10:10.001Z --62198714989999 === -62198714989999 - -+000001-01-01T10:10:10.001+01:01 -0001-01-01T09:09:10.001Z --62135563849999 === -62135563849999 - --000001-01-01T10:10:10.001+01:01 --000001-01-01T09:09:10.001Z --62198722249999 === -62198722249999 - -+000001-01-01T10:10:10.001-01:01 -0001-01-01T11:11:10.001Z --62135556529999 === -62135556529999 - --000001-01-01T10:10:10.001-01:01 --000001-01-01T11:11:10.001Z --62198714929999 === -62198714929999 - -+000001-01-01T10:10:10.001+01:10 -0001-01-01T09:00:10.001Z --62135564389999 === -62135564389999 - --000001-01-01T10:10:10.001+01:10 --000001-01-01T09:00:10.001Z --62198722789999 === -62198722789999 - -+000001-01-01T10:10:10.001-01:10 -0001-01-01T11:20:10.001Z --62135555989999 === -62135555989999 - --000001-01-01T10:10:10.001-01:10 --000001-01-01T11:20:10.001Z --62198714389999 === -62198714389999 - -+000001-01-01T10:10:10.001+10:00 -0001-01-01T00:10:10.001Z --62135596189999 === -62135596189999 - --000001-01-01T10:10:10.001+10:00 --000001-01-01T00:10:10.001Z --62198754589999 === -62198754589999 - -+000001-01-01T10:10:10.001-10:00 -0001-01-01T20:10:10.001Z --62135524189999 === -62135524189999 - --000001-01-01T10:10:10.001-10:00 --000001-01-01T20:10:10.001Z --62198682589999 === -62198682589999 - -+000001-01-01T10:10:10.001+10:01 -0001-01-01T00:09:10.001Z --62135596249999 === -62135596249999 - --000001-01-01T10:10:10.001+10:01 --000001-01-01T00:09:10.001Z --62198754649999 === -62198754649999 - -+000001-01-01T10:10:10.001-10:01 -0001-01-01T20:11:10.001Z --62135524129999 === -62135524129999 - --000001-01-01T10:10:10.001-10:01 --000001-01-01T20:11:10.001Z --62198682529999 === -62198682529999 - -+000001-01-01T10:10:10.001+10:10 -0001-01-01T00:00:10.001Z --62135596789999 === -62135596789999 - --000001-01-01T10:10:10.001+10:10 --000001-01-01T00:00:10.001Z --62198755189999 === -62198755189999 - -+000001-01-01T10:10:10.001-10:10 -0001-01-01T20:20:10.001Z --62135523589999 === -62135523589999 - --000001-01-01T10:10:10.001-10:10 --000001-01-01T20:20:10.001Z --62198681989999 === -62198681989999 - -+100000-10-10T00:00:00.100 -+100000-10-10T07:00:00.100Z -3093552457200100 === 3093552457200100 - --100000-10-10T00:00:00.100 --100000-10-10T07:00:00.100Z --3217837942799900 === -3217837942799900 - -+100000-10-10T00:00:00.100Z -+100000-10-10T00:00:00.100Z -3093552432000100 === 3093552432000100 - --100000-10-10T00:00:00.100Z --100000-10-10T00:00:00.100Z --3217837967999900 === -3217837967999900 - -+100000-10-10T00:00:00.100+00:00 -+100000-10-10T00:00:00.100Z -3093552432000100 === 3093552432000100 - --100000-10-10T00:00:00.100+00:00 --100000-10-10T00:00:00.100Z --3217837967999900 === -3217837967999900 - -+100000-10-10T00:00:00.100-00:00 -+100000-10-10T00:00:00.100Z -3093552432000100 === 3093552432000100 - --100000-10-10T00:00:00.100-00:00 --100000-10-10T00:00:00.100Z --3217837967999900 === -3217837967999900 - -+100000-10-10T00:00:00.100+00:01 -+100000-10-09T23:59:00.100Z -3093552431940100 === 3093552431940100 - --100000-10-10T00:00:00.100+00:01 --100000-10-09T23:59:00.100Z --3217837968059900 === -3217837968059900 - -+100000-10-10T00:00:00.100-00:01 -+100000-10-10T00:01:00.100Z -3093552432060100 === 3093552432060100 - --100000-10-10T00:00:00.100-00:01 --100000-10-10T00:01:00.100Z --3217837967939900 === -3217837967939900 - -+100000-10-10T00:00:00.100+00:10 -+100000-10-09T23:50:00.100Z -3093552431400100 === 3093552431400100 - --100000-10-10T00:00:00.100+00:10 --100000-10-09T23:50:00.100Z --3217837968599900 === -3217837968599900 - -+100000-10-10T00:00:00.100-00:10 -+100000-10-10T00:10:00.100Z -3093552432600100 === 3093552432600100 - --100000-10-10T00:00:00.100-00:10 --100000-10-10T00:10:00.100Z --3217837967399900 === -3217837967399900 - -+100000-10-10T00:00:00.100+01:00 -+100000-10-09T23:00:00.100Z -3093552428400100 === 3093552428400100 - --100000-10-10T00:00:00.100+01:00 --100000-10-09T23:00:00.100Z --3217837971599900 === -3217837971599900 - -+100000-10-10T00:00:00.100-01:00 -+100000-10-10T01:00:00.100Z -3093552435600100 === 3093552435600100 - --100000-10-10T00:00:00.100-01:00 --100000-10-10T01:00:00.100Z --3217837964399900 === -3217837964399900 - -+100000-10-10T00:00:00.100+01:01 -+100000-10-09T22:59:00.100Z -3093552428340100 === 3093552428340100 - --100000-10-10T00:00:00.100+01:01 --100000-10-09T22:59:00.100Z --3217837971659900 === -3217837971659900 - -+100000-10-10T00:00:00.100-01:01 -+100000-10-10T01:01:00.100Z -3093552435660100 === 3093552435660100 - --100000-10-10T00:00:00.100-01:01 --100000-10-10T01:01:00.100Z --3217837964339900 === -3217837964339900 - -+100000-10-10T00:00:00.100+01:10 -+100000-10-09T22:50:00.100Z -3093552427800100 === 3093552427800100 - --100000-10-10T00:00:00.100+01:10 --100000-10-09T22:50:00.100Z --3217837972199900 === -3217837972199900 - -+100000-10-10T00:00:00.100-01:10 -+100000-10-10T01:10:00.100Z -3093552436200100 === 3093552436200100 - --100000-10-10T00:00:00.100-01:10 --100000-10-10T01:10:00.100Z --3217837963799900 === -3217837963799900 - -+100000-10-10T00:00:00.100+10:00 -+100000-10-09T14:00:00.100Z -3093552396000100 === 3093552396000100 - --100000-10-10T00:00:00.100+10:00 --100000-10-09T14:00:00.100Z --3217838003999900 === -3217838003999900 - -+100000-10-10T00:00:00.100-10:00 -+100000-10-10T10:00:00.100Z -3093552468000100 === 3093552468000100 - --100000-10-10T00:00:00.100-10:00 --100000-10-10T10:00:00.100Z --3217837931999900 === -3217837931999900 - -+100000-10-10T00:00:00.100+10:01 -+100000-10-09T13:59:00.100Z -3093552395940100 === 3093552395940100 - --100000-10-10T00:00:00.100+10:01 --100000-10-09T13:59:00.100Z --3217838004059900 === -3217838004059900 - -+100000-10-10T00:00:00.100-10:01 -+100000-10-10T10:01:00.100Z -3093552468060100 === 3093552468060100 - --100000-10-10T00:00:00.100-10:01 --100000-10-10T10:01:00.100Z --3217837931939900 === -3217837931939900 - -+100000-10-10T00:00:00.100+10:10 -+100000-10-09T13:50:00.100Z -3093552395400100 === 3093552395400100 - --100000-10-10T00:00:00.100+10:10 --100000-10-09T13:50:00.100Z --3217838004599900 === -3217838004599900 - -+100000-10-10T00:00:00.100-10:10 -+100000-10-10T10:10:00.100Z -3093552468600100 === 3093552468600100 - --100000-10-10T00:00:00.100-10:10 --100000-10-10T10:10:00.100Z --3217837931399900 === -3217837931399900 - -Total: 1890 -Accepted: 1890 -Rejected: 0 -Failed: 0 - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// Definitely invalid ISO strings - -// Field value outside valid range - -0001-00-01T01:01:01.001Z -Invalid Date - -0001-13-01T01:01:01.001Z -Invalid Date - -0001-01-00T01:01:01.001Z -Invalid Date - -0001-01-32T01:01:01.001Z -Invalid Date - -0001-01-01T25:01:01.001Z -Invalid Date - -0001-01-01T01:01:01.001+25:00 -Invalid Date - -0001-01-01T01:60:01.001Z -Invalid Date - -0001-01-01T01:01:01.001+00:60 -Invalid Date - -0001-01-01T01:01:60.001Z -Invalid Date - -// Time value outside valid range - --300000-01-01T01:01:01.001Z -Invalid Date - -+300000-01-01T01:01:01.001Z -Invalid Date - -Total: 11 -Accepted: 0 -Rejected: 11 -Failed: 0 - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// Potential cross-browser compatibility issues - -// Leading and trailing whitespace, nulls, or non-whitespace non-nulls - -0001-01-01T01:01:01.001Z -0001-01-01T01:01:01.001Z --62135593138999 === -62135593138999 - -0001-01-01T01:01:01.001Z -0001-01-01T01:01:01.001Z --62135593138999 === -62135593138999 - -0001-01-01T01:01:01.001Zx -Invalid Date - -\00001-01-01T01:01:01.001Z -Invalid Date - -0001-01-01T01:01:01.001Z\0 -Invalid Date - -0001-01-01T01:01:01.001Z\0x -Invalid Date - -\x090001-01-01T01:01:01.001Z -0001-01-01T01:01:01.001Z --62135593138999 === -62135593138999 - -0001-01-01T01:01:01.001Z\x09 -0001-01-01T01:01:01.001Z --62135593138999 === -62135593138999 - -0001-01-01T01:01:01.001Z\x09x -Invalid Date - -\x0a0001-01-01T01:01:01.001Z -0001-01-01T01:01:01.001Z --62135593138999 === -62135593138999 - -0001-01-01T01:01:01.001Z\x0a -0001-01-01T01:01:01.001Z --62135593138999 === -62135593138999 - -0001-01-01T01:01:01.001Z\x0ax -Invalid Date - -\x0b0001-01-01T01:01:01.001Z -0001-01-01T01:01:01.001Z --62135593138999 === -62135593138999 - -0001-01-01T01:01:01.001Z\x0b -0001-01-01T01:01:01.001Z --62135593138999 === -62135593138999 - -0001-01-01T01:01:01.001Z\x0bx -Invalid Date - -\x0c0001-01-01T01:01:01.001Z -0001-01-01T01:01:01.001Z --62135593138999 === -62135593138999 - -0001-01-01T01:01:01.001Z\x0c -0001-01-01T01:01:01.001Z --62135593138999 === -62135593138999 - -0001-01-01T01:01:01.001Z\x0cx -Invalid Date - -\x0d0001-01-01T01:01:01.001Z -0001-01-01T01:01:01.001Z --62135593138999 === -62135593138999 - -0001-01-01T01:01:01.001Z\x0d -0001-01-01T01:01:01.001Z --62135593138999 === -62135593138999 - -0001-01-01T01:01:01.001Z\x0dx -Invalid Date - - 0001-01-01T01:01:01.001Z -0001-01-01T01:01:01.001Z --62135593138999 === -62135593138999 - -0001-01-01T01:01:01.001Z -0001-01-01T01:01:01.001Z --62135593138999 === -62135593138999 - -0001-01-01T01:01:01.001Z x -Invalid Date - -\xa00001-01-01T01:01:01.001Z -0001-01-01T01:01:01.001Z --62135593138999 === -62135593138999 - -0001-01-01T01:01:01.001Z\xa0 -0001-01-01T01:01:01.001Z --62135593138999 === -62135593138999 - -0001-01-01T01:01:01.001Z\xa0x -Invalid Date - -\u20280001-01-01T01:01:01.001Z -0001-01-01T01:01:01.001Z --62135593138999 === -62135593138999 - -0001-01-01T01:01:01.001Z\u2028 -0001-01-01T01:01:01.001Z --62135593138999 === -62135593138999 - -0001-01-01T01:01:01.001Z\u2028x -Invalid Date - -\u20290001-01-01T01:01:01.001Z -0001-01-01T01:01:01.001Z --62135593138999 === -62135593138999 - -0001-01-01T01:01:01.001Z\u2029 -0001-01-01T01:01:01.001Z --62135593138999 === -62135593138999 - -0001-01-01T01:01:01.001Z\u2029x -Invalid Date - -\ufeff0001-01-01T01:01:01.001Z -0001-01-01T01:01:01.001Z --62135593138999 === -62135593138999 - -0001-01-01T01:01:01.001Z\ufeff -0001-01-01T01:01:01.001Z --62135593138999 === -62135593138999 - -0001-01-01T01:01:01.001Z\ufeffx -Invalid Date - -// Less and more digits per field - -001-01-01T01:01:01.001Z -Invalid Date - -00001-01-01T01:01:01.001Z -Invalid Date - -0001-1-01T01:01:01.001Z -Invalid Date - -0001-001-01T01:01:01.001Z -Invalid Date - -0001-01-1T01:01:01.001Z -Invalid Date - -0001-01-001T01:01:01.001Z -Invalid Date - -0001-01-01T1:01:01.001Z -Invalid Date - -0001-01-01T001:01:01.001Z -Invalid Date - -0001-01-01T01:1:01.001Z -Invalid Date - -0001-01-01T01:001:01.001Z -Invalid Date - -0001-01-01T01:01:1.001Z -Invalid Date - -0001-01-01T01:01:001.001Z -Invalid Date - -0001-01-01T01:01:01.01Z -0001-01-01T01:01:01.010Z --62135593138990 === -62135593138990 - -0001-01-01T01:01:01.0001Z -0001-01-01T01:01:01.000Z --62135593139000 === -62135593139000 - -// Date-only forms with UTC offset - -0001Z -Invalid Date - -0001-01Z -Invalid Date - -0001-01-01Z -0001-01-01T00:00:00.000Z --62135596800000 === -62135596800000 - -// Optionality of minutes - -0001-01-01T01Z -Invalid Date - -0001-01-01T01:01:01.001+01 -0001-01-01T00:01:01.001Z --62135596738999 === -62135596738999 - -// Time-only forms - -T01:01Z -Invalid Date - -T01:01:01Z -Invalid Date - -T01:01:01.001Z -Invalid Date - -// Field before missing optional field ending with separator - -0001- -Invalid Date - -0001-01- -Invalid Date - -0001-T01:01:01.001Z -Invalid Date - -0001-01-T01:01:01.001Z -Invalid Date - -0001-01-01T01:01:Z -Invalid Date - -0001-01-01T01:01:01.Z -Invalid Date - -// Optionality and type of sign on years - -+0001-01-01T01:01:01.001Z -Invalid Date - --0001-01-01T01:01:01.001Z -Invalid Date - -010000-01-01T01:01:01.001Z -Invalid Date - --000000-01-01T01:01:01.001Z -Invalid Date - -// Test support for zones without colons (DEVDIV2: 481975) - -2012-02-22T03:08:26+0000 -2012-02-22T03:08:26.000Z -1329880106000 === 1329880106000 - -// Test support for zones(Issue#1402:OS8026281) - -Wed Jul 22 16:04:54 2016 +0000 -2016-07-22T16:04:54.000Z -1469203494000 === 1469203494000 - -Wed Jul 22 16:04:54 +0000 2016 -2016-07-22T16:04:54.000Z -1469203494000 === 1469203494000 - -Wed Jul 22 +0000 16:04:54 2016 -Invalid Date - -Wed Jul +0000 22 16:04:54 2016 -Invalid Date - -Wed +0000 Jul 22 16:04:54 2016 -Invalid Date - -+0000 Wed Jul 22 16:04:54 2016 -Invalid Date - -Wed Jul 22 16:04:54 2016 -2016-07-22T23:04:54.000Z -1469228694000 === 1469228694000 - -Total: 76 -Accepted: 30 -Rejected: 46 -Failed: 0 - diff --git a/test/Date/parseISO.js b/test/Date/parseISO.js deleted file mode 100644 index 43011c6d646..00000000000 --- a/test/Date/parseISO.js +++ /dev/null @@ -1,432 +0,0 @@ -//------------------------------------------------------------------------------------------------------- -// Copyright (C) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. -//------------------------------------------------------------------------------------------------------- - -var total = 0, accepted = 0, failed = 0; - -echo("////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////"); -echo("// Definitely valid ISO strings"); -echo(""); - -echo("// Auto-generated"); -echo(""); -initializeGenerateDateStrings(); -var yearDigits = 0, monthDigits = 0, dayDigits = 0, hourMinuteDigits = 0, secondDigits = 0, millisecondDigits = 0; -for (yearDigits = 4; yearDigits <= 6; yearDigits += 2) { - dayDigits = monthDigits = 0; - runGenerateTestWithValidTime(); - monthDigits = 2; - runGenerateTestWithValidTime(); - dayDigits = 2; - runGenerateTestWithValidTime(); -} -function runGenerateTestWithValidTime() { - millisecondDigits = secondDigits = hourMinuteDigits = 0; - runGenerateTest(); - hourMinuteDigits = 2; - runGenerateTest(); - secondDigits = 2; - runGenerateTest(); - millisecondDigits = 3; - runGenerateTest(); -} - -writeStats(); - -echo("////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////"); -echo("// Definitely invalid ISO strings"); -echo(""); - -echo("// Field value outside valid range"); -echo(""); -runTest("0001-00-01T01:01:01.001Z"); -runTest("0001-13-01T01:01:01.001Z"); -runTest("0001-01-00T01:01:01.001Z"); -runTest("0001-01-32T01:01:01.001Z"); -runTest("0001-01-01T25:01:01.001Z"); -runTest("0001-01-01T01:01:01.001+25:00"); -runTest("0001-01-01T01:60:01.001Z"); -runTest("0001-01-01T01:01:01.001+00:60"); -runTest("0001-01-01T01:01:60.001Z"); - -echo("// Time value outside valid range"); -echo(""); -runTest("-300000-01-01T01:01:01.001Z"); -runTest("+300000-01-01T01:01:01.001Z"); - -// Many other invalid ISO strings are tested in "potential cross-browser compatibility issues" section - -writeStats(); - -echo("////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////"); -echo("// Potential cross-browser compatibility issues"); -echo(""); - -echo("// Leading and trailing whitespace, nulls, or non-whitespace non-nulls"); -echo(""); -var s = "0001-01-01T01:01:01.001Z"; -var spaceNulls = ["", "\0", "\t", "\n", "\v", "\f", "\r", " ", "\u00a0", "\u2028", "\u2029", "\ufeff"]; -for (var i = 0; i < spaceNulls.length; ++i) { - if (s !== "") { - runTest(spaceNulls[i] + s); - runTest(s + spaceNulls[i]); - } - runTest(s + spaceNulls[i] + "x"); -} - -echo("// Less and more digits per field"); -echo(""); -runTest("001-01-01T01:01:01.001Z"); -runTest("00001-01-01T01:01:01.001Z"); -runTest("0001-1-01T01:01:01.001Z"); -runTest("0001-001-01T01:01:01.001Z"); -runTest("0001-01-1T01:01:01.001Z"); -runTest("0001-01-001T01:01:01.001Z"); -runTest("0001-01-01T1:01:01.001Z"); -runTest("0001-01-01T001:01:01.001Z"); -runTest("0001-01-01T01:1:01.001Z"); -runTest("0001-01-01T01:001:01.001Z"); -runTest("0001-01-01T01:01:1.001Z"); -runTest("0001-01-01T01:01:001.001Z"); -runTest("0001-01-01T01:01:01.01Z"); -runTest("0001-01-01T01:01:01.0001Z"); - -echo("// Date-only forms with UTC offset"); -echo(""); -runTest("0001Z"); -runTest("0001-01Z"); -runTest("0001-01-01Z"); // note: this is rejected by the ISO parser as it should be, but it's accepted by the fallback parser - -echo("// Optionality of minutes"); -echo(""); -runTest("0001-01-01T01Z"); -runTest("0001-01-01T01:01:01.001+01"); - -echo("// Time-only forms"); -echo(""); -runTest("T01:01Z"); -runTest("T01:01:01Z"); -runTest("T01:01:01.001Z"); - -echo("// Field before missing optional field ending with separator"); -echo(""); -runTest("0001-"); -runTest("0001-01-"); -runTest("0001-T01:01:01.001Z"); -runTest("0001-01-T01:01:01.001Z"); -runTest("0001-01-01T01:01:Z"); -runTest("0001-01-01T01:01:01.Z"); - -echo("// Optionality and type of sign on years"); -echo(""); -runTest("+0001-01-01T01:01:01.001Z"); -runTest("-0001-01-01T01:01:01.001Z"); -runTest("010000-01-01T01:01:01.001Z"); -runTest("-000000-01-01T01:01:01.001Z"); - -echo("// Test support for zones without colons (DEVDIV2: 481975)"); -echo(""); -runTest("2012-02-22T03:08:26+0000"); - -echo("// Test support for zones(Issue#1402:OS8026281)"); -echo(""); -runTest("Wed Jul 22 16:04:54 2016 +0000"); -runTest("Wed Jul 22 16:04:54 +0000 2016"); -runTest("Wed Jul 22 +0000 16:04:54 2016"); -runTest("Wed Jul +0000 22 16:04:54 2016"); -runTest("Wed +0000 Jul 22 16:04:54 2016"); -runTest("+0000 Wed Jul 22 16:04:54 2016"); -runTest("Wed Jul 22 16:04:54 2016"); - -writeStats(); - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// Test-specific helpers - -function runTest(s) { - ++total; - echo(s); - safeCall(function () { - var iso = new Date(s); - var timeValue1 = iso.getTime(); - if (isNaN(timeValue1)) { - echo(iso); - } else { - iso = iso.toISOString(); - echo(iso); - var timeValue2 = new Date(iso).getTime(); - echo(timeValue1 + " " + (timeValue1 === timeValue2 ? "===" : "!==") + " " + timeValue2); - if (iso.indexOf("Invalid", 0) === -1) { - if (timeValue1 === timeValue2) - ++accepted; - else - ++failed; - } - } - }); - echo(""); -} - -function runGenerateTest() { - var s = - generateDateStrings( - yearDigits, - monthDigits, - dayDigits, - hourMinuteDigits, - hourMinuteDigits, - secondDigits, - millisecondDigits); - for (var i = 0; i < s.length; ++i) - runTest(s[i]); -} - -var signs, zones; -function initializeGenerateDateStrings() { - signs = ["+", "-"]; - zones = ["", "Z"]; - var zoneDigitCombinations = ["00", "01", "10"]; - for (var i = 0; i < zoneDigitCombinations.length; ++i) - for (var j = 0; j < zoneDigitCombinations.length; ++j) - for (var k = 0; k < signs.length; ++k) - zones.push(signs[k] + zoneDigitCombinations[i] + ":" + zoneDigitCombinations[j]); -} - -// Generates date strings in the following format: -// date format: "[+|-]YYYYYY[-MM[-DD]]" -// separator: "T| " -// time format: "HH:mm[:ss[.sss]]" -// time zone: "Z|(+|-)HH:mm" -// - The separator is required only if both the date and time portions are included in the string. -// - Zero-padding is optional -// - Positive sign (+) is optional when the year is nonnegative -// - Negative sign (-) is optional when the year is zero -// - Time zone is optional -// -// The function will return an array of strings to test against, based on the parameters. -function generateDateStrings( - yearDigits, // number of digits to include for the year (0-6), 0 - exclude the year (monthDigits must also be 0) - monthDigits, // number of digits to include for the month (0-2), 0 - exclude the month (dayDigits must also be 0) - dayDigits, // number of digits to include for the day (0-2), 0 - exclude the day - hourDigits, // number of digits to include for the hour (0-2), 0 - exclude the hour (minuteDigits must also be 0) - minuteDigits, // number of digits to include for the minute (0-2), 0 - exclude the minute (hourDigits and secondDigits must also be 0) - secondDigits, // number of digits to include for the second (0-2), 0 - exclude the second (millisecondDigits must also be 0) - millisecondDigits) // number of digits to include for the millisecond (0-3), 0 - exclude the millisecond -{ - if (yearDigits === 0 && monthDigits !== 0 || - monthDigits === 0 && dayDigits !== 0 || - hourDigits === 0 && minuteDigits !== 0 || - minuteDigits === 0 && (hourDigits !== 0 || secondDigits !== 0) || - secondDigits === 0 && millisecondDigits !== 0 || - yearDigits === 0 && (hourDigits === 0 || minuteDigits === 0)) - return []; - - var s = [""]; - - if (yearDigits !== 0) { - appendDigits(s, yearDigits, true); - if (monthDigits !== 0) { - append(s, ["-"]); - appendDigits(s, monthDigits, false); - if (dayDigits !== 0) { - append(s, ["-"]); - appendDigits(s, dayDigits, false); - } - } - } - - if (hourDigits !== 0 && minuteDigits !== 0) { - append(s, ["T"]); - appendDigits(s, hourDigits, true); - append(s, [":"]); - appendDigits(s, minuteDigits, true); - if (secondDigits !== 0) { - append(s, [":"]); - appendDigits(s, secondDigits, true); - if (millisecondDigits !== 0) { - append(s, ["."]); - appendDigits(s, millisecondDigits, true); - } - } - } - - if (yearDigits !== 0 && hourDigits !== 0 && minuteDigits !== 0) - s = applyToEach(s, zones, function (str, zone) { return str + zone; }); - if(yearDigits === 6) { - s = - applyToEach( - s, - signs, - function (str, sign) { - if(sign === "-" && str.length >= 6 && str.substring(0, 6) === "000000") - return undefined; // "-000000" is not allowed - return sign + str; - }); - } - - return s; -} - -// Appends interesting combinations of n digits to the string array -function appendDigits(a, n, includeZero) { - var d = []; - switch (n) { - case 0: - break; - - case 1: - if (includeZero) - d.push("0"); - d.push("1"); - append(a, d); - break; - - case 3: - case 6: - if (n === 3) - d.push("010"); - else - d.push("010010"); - - default: - var z = zeroes(n - 1); - if (includeZero) - d.push(z + "0"); - d.push(z + "1"); - d.push("1" + z); - append(a, d); - break; - } -} - -// Returns a string of n zeroes -function zeroes(n) { - var s = ""; - while (n-- > 0) - s += "0"; - return s; -} - -// Appends patterns to the string array. The array is extended to acommodate the number of patterns, and the patterns are -// repeated to acommodate the length of the array. -function append(a, p) { - extend(a, p.length); - for (var i = 0; i < a.length; ++i) - a[i] += p[i % p.length]; -} - -// Applies the function 'f' to each combination of elements in 'a' and 'p'. 'f' will receive the element of 'a' on which it -// should apply the pattern from 'p' and it should return the modified string. The string returned by 'f' will be pushed onto a -// new array, which will be returned. -function applyToEach(a, p, f) { - var a2 = []; - for(var i = 0; i < a.length; ++i) { - for(var j = 0; j < p.length; ++j) { - var transformed = f(a[i], p[j]); - if(transformed !== undefined) - a2.push(transformed); - } - } - return a2; -} - -// Extends an array to have length n, by copying the last element as necessary -function extend(a, n) { - var originalLength = a.length; - for (var i = originalLength; i < n; ++i) - a.push(a[originalLength - 1]); -} - -function writeStats() { - echo("Total: " + total); - echo("Accepted: " + accepted); - echo("Rejected: " + (total - accepted - failed)); - echo("Failed: " + failed); - echo(""); - failed = accepted = total = 0; -} - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// General helpers - -function toString(o, quoteStrings) { - switch (o) { - case null: - case undefined: - return "" + o; - } - - switch (typeof o) { - case "boolean": - case "number": - return "" + o; - - case "string": - { - var hex = "0123456789abcdef"; - var s = ""; - for (var i = 0; i < o.length; ++i) { - var c = o.charCodeAt(i); - if (c === 0) - s += "\\0"; - else if (c >= 0x20 && c < 0x7f) - s += quoteStrings && o.charAt(i) === "\"" ? "\\\"" : o.charAt(i); - else if (c <= 0xff) - s += "\\x" + hex.charAt((c >> 4) & 0xf) + hex.charAt(c & 0xf); - else - s += "\\u" + hex.charAt((c >> 12) & 0xf) + hex.charAt((c >> 8) & 0xf) + hex.charAt((c >> 4) & 0xf) + hex.charAt(c & 0xf); - } - if (quoteStrings) - s = "\"" + s + "\""; - return s; - } - - case "object": - case "function": - break; - - default: - return ""; - } - - if (o instanceof Array) { - var s = "["; - for (var i = 0; i < o.length; ++i) { - if (i) - s += ", "; - - s += this.toString(o[i], true); - } - return s + "]"; - } - if (o instanceof Error) - return o.name + ": " + o.message; - if (o instanceof RegExp) - return o.toString() + (o.lastIndex === 0 ? "" : " (lastIndex: " + o.lastIndex + ")"); - return "" + o; -} - -function echo(o) { - var s = this.toString(o); - try { - document.write(s + "
"); - } catch (ex) { - try { - WScript.Echo(s); - } catch (ex2) { - print(s); - } - } -} - -function safeCall(f) { - var args = []; - for (var a = 1; a < arguments.length; ++a) - args.push(arguments[a]); - try { - return f.apply(this, args); - } catch (ex) { - echo(ex); - } -} diff --git a/test/Date/parseInvalidISO.baseline b/test/Date/parseInvalidISO.baseline new file mode 100644 index 00000000000..49c4e7f435e --- /dev/null +++ b/test/Date/parseInvalidISO.baseline @@ -0,0 +1,329 @@ +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Definitely invalid ISO strings + +// Field value outside valid range + +0001-00-01T01:01:01.001Z +Invalid Date + +0001-13-01T01:01:01.001Z +Invalid Date + +0001-01-00T01:01:01.001Z +Invalid Date + +0001-01-32T01:01:01.001Z +Invalid Date + +0001-01-01T25:01:01.001Z +Invalid Date + +0001-01-01T01:01:01.001+25:00 +Invalid Date + +0001-01-01T01:60:01.001Z +Invalid Date + +0001-01-01T01:01:01.001+00:60 +Invalid Date + +0001-01-01T01:01:60.001Z +Invalid Date + +// Time value outside valid range + +-300000-01-01T01:01:01.001Z +Invalid Date + ++300000-01-01T01:01:01.001Z +Invalid Date + +Total: 11 +Accepted: 0 +Rejected: 11 +Failed: 0 + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Potential cross-browser compatibility issues + +// Leading and trailing whitespace, nulls, or non-whitespace non-nulls + +0001-01-01T01:01:01.001Z +0001-01-01T01:01:01.001Z +-62135593138999 === -62135593138999 + +0001-01-01T01:01:01.001Z +0001-01-01T01:01:01.001Z +-62135593138999 === -62135593138999 + +0001-01-01T01:01:01.001Zx +Invalid Date + +\00001-01-01T01:01:01.001Z +Invalid Date + +0001-01-01T01:01:01.001Z\0 +Invalid Date + +0001-01-01T01:01:01.001Z\0x +Invalid Date + +\x090001-01-01T01:01:01.001Z +0001-01-01T01:01:01.001Z +-62135593138999 === -62135593138999 + +0001-01-01T01:01:01.001Z\x09 +0001-01-01T01:01:01.001Z +-62135593138999 === -62135593138999 + +0001-01-01T01:01:01.001Z\x09x +Invalid Date + +\x0a0001-01-01T01:01:01.001Z +0001-01-01T01:01:01.001Z +-62135593138999 === -62135593138999 + +0001-01-01T01:01:01.001Z\x0a +0001-01-01T01:01:01.001Z +-62135593138999 === -62135593138999 + +0001-01-01T01:01:01.001Z\x0ax +Invalid Date + +\x0b0001-01-01T01:01:01.001Z +0001-01-01T01:01:01.001Z +-62135593138999 === -62135593138999 + +0001-01-01T01:01:01.001Z\x0b +0001-01-01T01:01:01.001Z +-62135593138999 === -62135593138999 + +0001-01-01T01:01:01.001Z\x0bx +Invalid Date + +\x0c0001-01-01T01:01:01.001Z +0001-01-01T01:01:01.001Z +-62135593138999 === -62135593138999 + +0001-01-01T01:01:01.001Z\x0c +0001-01-01T01:01:01.001Z +-62135593138999 === -62135593138999 + +0001-01-01T01:01:01.001Z\x0cx +Invalid Date + +\x0d0001-01-01T01:01:01.001Z +0001-01-01T01:01:01.001Z +-62135593138999 === -62135593138999 + +0001-01-01T01:01:01.001Z\x0d +0001-01-01T01:01:01.001Z +-62135593138999 === -62135593138999 + +0001-01-01T01:01:01.001Z\x0dx +Invalid Date + + 0001-01-01T01:01:01.001Z +0001-01-01T01:01:01.001Z +-62135593138999 === -62135593138999 + +0001-01-01T01:01:01.001Z +0001-01-01T01:01:01.001Z +-62135593138999 === -62135593138999 + +0001-01-01T01:01:01.001Z x +Invalid Date + +\xa00001-01-01T01:01:01.001Z +0001-01-01T01:01:01.001Z +-62135593138999 === -62135593138999 + +0001-01-01T01:01:01.001Z\xa0 +0001-01-01T01:01:01.001Z +-62135593138999 === -62135593138999 + +0001-01-01T01:01:01.001Z\xa0x +Invalid Date + +\u20280001-01-01T01:01:01.001Z +0001-01-01T01:01:01.001Z +-62135593138999 === -62135593138999 + +0001-01-01T01:01:01.001Z\u2028 +0001-01-01T01:01:01.001Z +-62135593138999 === -62135593138999 + +0001-01-01T01:01:01.001Z\u2028x +Invalid Date + +\u20290001-01-01T01:01:01.001Z +0001-01-01T01:01:01.001Z +-62135593138999 === -62135593138999 + +0001-01-01T01:01:01.001Z\u2029 +0001-01-01T01:01:01.001Z +-62135593138999 === -62135593138999 + +0001-01-01T01:01:01.001Z\u2029x +Invalid Date + +\ufeff0001-01-01T01:01:01.001Z +0001-01-01T01:01:01.001Z +-62135593138999 === -62135593138999 + +0001-01-01T01:01:01.001Z\ufeff +0001-01-01T01:01:01.001Z +-62135593138999 === -62135593138999 + +0001-01-01T01:01:01.001Z\ufeffx +Invalid Date + +// Less and more digits per field + +001-01-01T01:01:01.001Z +Invalid Date + +00001-01-01T01:01:01.001Z +Invalid Date + +0001-1-01T01:01:01.001Z +Invalid Date + +0001-001-01T01:01:01.001Z +Invalid Date + +0001-01-1T01:01:01.001Z +Invalid Date + +0001-01-001T01:01:01.001Z +Invalid Date + +0001-01-01T1:01:01.001Z +Invalid Date + +0001-01-01T001:01:01.001Z +Invalid Date + +0001-01-01T01:1:01.001Z +Invalid Date + +0001-01-01T01:001:01.001Z +Invalid Date + +0001-01-01T01:01:1.001Z +Invalid Date + +0001-01-01T01:01:001.001Z +Invalid Date + +0001-01-01T01:01:01.01Z +0001-01-01T01:01:01.010Z +-62135593138990 === -62135593138990 + +0001-01-01T01:01:01.0001Z +0001-01-01T01:01:01.000Z +-62135593139000 === -62135593139000 + +// Date-only forms with UTC offset + +0001Z +Invalid Date + +0001-01Z +Invalid Date + +0001-01-01Z +0001-01-01T00:00:00.000Z +-62135596800000 === -62135596800000 + +// Optionality of minutes + +0001-01-01T01Z +Invalid Date + +0001-01-01T01:01:01.001+01 +0001-01-01T00:01:01.001Z +-62135596738999 === -62135596738999 + +// Time-only forms + +T01:01Z +Invalid Date + +T01:01:01Z +Invalid Date + +T01:01:01.001Z +Invalid Date + +// Field before missing optional field ending with separator + +0001- +Invalid Date + +0001-01- +Invalid Date + +0001-T01:01:01.001Z +Invalid Date + +0001-01-T01:01:01.001Z +Invalid Date + +0001-01-01T01:01:Z +Invalid Date + +0001-01-01T01:01:01.Z +Invalid Date + +// Optionality and type of sign on years + ++0001-01-01T01:01:01.001Z +Invalid Date + +-0001-01-01T01:01:01.001Z +Invalid Date + +010000-01-01T01:01:01.001Z +Invalid Date + +-000000-01-01T01:01:01.001Z +Invalid Date + +// Test support for zones without colons (DEVDIV2: 481975) + +2012-02-22T03:08:26+0000 +2012-02-22T03:08:26.000Z +1329880106000 === 1329880106000 + +// Test support for zones(Issue#1402:OS8026281) + +Wed Jul 22 16:04:54 2016 +0000 +2016-07-22T16:04:54.000Z +1469203494000 === 1469203494000 + +Wed Jul 22 16:04:54 +0000 2016 +2016-07-22T16:04:54.000Z +1469203494000 === 1469203494000 + +Wed Jul 22 +0000 16:04:54 2016 +Invalid Date + +Wed Jul +0000 22 16:04:54 2016 +Invalid Date + +Wed +0000 Jul 22 16:04:54 2016 +Invalid Date + ++0000 Wed Jul 22 16:04:54 2016 +Invalid Date + +Wed Jul 22 16:04:54 2016 +2016-07-22T23:04:54.000Z +1469228694000 === 1469228694000 + +Total: 76 +Accepted: 30 +Rejected: 46 +Failed: 0 + diff --git a/test/Date/parseInvalidISO.js b/test/Date/parseInvalidISO.js new file mode 100644 index 00000000000..ca554302818 --- /dev/null +++ b/test/Date/parseInvalidISO.js @@ -0,0 +1,231 @@ +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- + +var total = 0, accepted = 0, failed = 0; +echo("////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////"); +echo("// Definitely invalid ISO strings"); +echo(""); + +echo("// Field value outside valid range"); +echo(""); +runTest("0001-00-01T01:01:01.001Z"); +runTest("0001-13-01T01:01:01.001Z"); +runTest("0001-01-00T01:01:01.001Z"); +runTest("0001-01-32T01:01:01.001Z"); +runTest("0001-01-01T25:01:01.001Z"); +runTest("0001-01-01T01:01:01.001+25:00"); +runTest("0001-01-01T01:60:01.001Z"); +runTest("0001-01-01T01:01:01.001+00:60"); +runTest("0001-01-01T01:01:60.001Z"); + +echo("// Time value outside valid range"); +echo(""); +runTest("-300000-01-01T01:01:01.001Z"); +runTest("+300000-01-01T01:01:01.001Z"); + +// Many other invalid ISO strings are tested in "potential cross-browser compatibility issues" section + +writeStats(); + +echo("////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////"); +echo("// Potential cross-browser compatibility issues"); +echo(""); + +echo("// Leading and trailing whitespace, nulls, or non-whitespace non-nulls"); +echo(""); +var s = "0001-01-01T01:01:01.001Z"; +var spaceNulls = ["", "\0", "\t", "\n", "\v", "\f", "\r", " ", "\u00a0", "\u2028", "\u2029", "\ufeff"]; +for (var i = 0; i < spaceNulls.length; ++i) { + if (s !== "") { + runTest(spaceNulls[i] + s); + runTest(s + spaceNulls[i]); + } + runTest(s + spaceNulls[i] + "x"); +} + +echo("// Less and more digits per field"); +echo(""); +runTest("001-01-01T01:01:01.001Z"); +runTest("00001-01-01T01:01:01.001Z"); +runTest("0001-1-01T01:01:01.001Z"); +runTest("0001-001-01T01:01:01.001Z"); +runTest("0001-01-1T01:01:01.001Z"); +runTest("0001-01-001T01:01:01.001Z"); +runTest("0001-01-01T1:01:01.001Z"); +runTest("0001-01-01T001:01:01.001Z"); +runTest("0001-01-01T01:1:01.001Z"); +runTest("0001-01-01T01:001:01.001Z"); +runTest("0001-01-01T01:01:1.001Z"); +runTest("0001-01-01T01:01:001.001Z"); +runTest("0001-01-01T01:01:01.01Z"); +runTest("0001-01-01T01:01:01.0001Z"); + +echo("// Date-only forms with UTC offset"); +echo(""); +runTest("0001Z"); +runTest("0001-01Z"); +runTest("0001-01-01Z"); // note: this is rejected by the ISO parser as it should be, but it's accepted by the fallback parser + +echo("// Optionality of minutes"); +echo(""); +runTest("0001-01-01T01Z"); +runTest("0001-01-01T01:01:01.001+01"); + +echo("// Time-only forms"); +echo(""); +runTest("T01:01Z"); +runTest("T01:01:01Z"); +runTest("T01:01:01.001Z"); + +echo("// Field before missing optional field ending with separator"); +echo(""); +runTest("0001-"); +runTest("0001-01-"); +runTest("0001-T01:01:01.001Z"); +runTest("0001-01-T01:01:01.001Z"); +runTest("0001-01-01T01:01:Z"); +runTest("0001-01-01T01:01:01.Z"); + +echo("// Optionality and type of sign on years"); +echo(""); +runTest("+0001-01-01T01:01:01.001Z"); +runTest("-0001-01-01T01:01:01.001Z"); +runTest("010000-01-01T01:01:01.001Z"); +runTest("-000000-01-01T01:01:01.001Z"); + +echo("// Test support for zones without colons (DEVDIV2: 481975)"); +echo(""); +runTest("2012-02-22T03:08:26+0000"); + +echo("// Test support for zones(Issue#1402:OS8026281)"); +echo(""); +runTest("Wed Jul 22 16:04:54 2016 +0000"); +runTest("Wed Jul 22 16:04:54 +0000 2016"); +runTest("Wed Jul 22 +0000 16:04:54 2016"); +runTest("Wed Jul +0000 22 16:04:54 2016"); +runTest("Wed +0000 Jul 22 16:04:54 2016"); +runTest("+0000 Wed Jul 22 16:04:54 2016"); +runTest("Wed Jul 22 16:04:54 2016"); + +writeStats(); +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Test-specific helpers + +function runTest(s) { + ++total; + echo(s); + safeCall(function () { + var iso = new Date(s); + var timeValue1 = iso.getTime(); + if (isNaN(timeValue1)) { + echo(iso); + } else { + iso = iso.toISOString(); + echo(iso); + var timeValue2 = new Date(iso).getTime(); + echo(timeValue1 + " " + (timeValue1 === timeValue2 ? "===" : "!==") + " " + timeValue2); + if (iso.indexOf("Invalid", 0) === -1) { + if (timeValue1 === timeValue2) + ++accepted; + else + ++failed; + } + } + }); + echo(""); +} + +function writeStats() { + echo("Total: " + total); + echo("Accepted: " + accepted); + echo("Rejected: " + (total - accepted - failed)); + echo("Failed: " + failed); + echo(""); + failed = accepted = total = 0; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// General helpers + +function toString(o, quoteStrings) { + switch (o) { + case null: + case undefined: + return "" + o; + } + + switch (typeof o) { + case "boolean": + case "number": + return "" + o; + + case "string": + { + var hex = "0123456789abcdef"; + var s = ""; + for (var i = 0; i < o.length; ++i) { + var c = o.charCodeAt(i); + if (c === 0) + s += "\\0"; + else if (c >= 0x20 && c < 0x7f) + s += quoteStrings && o.charAt(i) === "\"" ? "\\\"" : o.charAt(i); + else if (c <= 0xff) + s += "\\x" + hex.charAt((c >> 4) & 0xf) + hex.charAt(c & 0xf); + else + s += "\\u" + hex.charAt((c >> 12) & 0xf) + hex.charAt((c >> 8) & 0xf) + hex.charAt((c >> 4) & 0xf) + hex.charAt(c & 0xf); + } + if (quoteStrings) + s = "\"" + s + "\""; + return s; + } + + case "object": + case "function": + break; + + default: + return ""; + } + + if (o instanceof Array) { + var s = "["; + for (var i = 0; i < o.length; ++i) { + if (i) + s += ", "; + + s += this.toString(o[i], true); + } + return s + "]"; + } + if (o instanceof Error) + return o.name + ": " + o.message; + if (o instanceof RegExp) + return o.toString() + (o.lastIndex === 0 ? "" : " (lastIndex: " + o.lastIndex + ")"); + return "" + o; +} + +function echo(o) { + var s = this.toString(o); + try { + document.write(s + "
"); + } catch (ex) { + try { + WScript.Echo(s); + } catch (ex2) { + print(s); + } + } +} + +function safeCall(f) { + var args = []; + for (var a = 1; a < arguments.length; ++a) + args.push(arguments[a]); + try { + return f.apply(this, args); + } catch (ex) { + echo(ex); + } +} diff --git a/test/Date/parseValidISO.baseline b/test/Date/parseValidISO.baseline new file mode 100644 index 00000000000..4f3e0aa55d3 --- /dev/null +++ b/test/Date/parseValidISO.baseline @@ -0,0 +1,1891 @@ +0000-01-01T00:00:00.000Z +0001-01-01T00:00:00.000Z +1000-01-01T00:00:00.000Z +0000-01-01T08:00:00.000Z +0000-01-01T00:00:00.000Z +0000-01-01T00:00:00.000Z +0000-01-01T00:00:00.000Z +-000001-12-31T23:59:00.000Z +0000-01-01T00:01:00.000Z +-000001-12-31T23:50:00.000Z +0000-01-01T00:10:00.000Z +-000001-12-31T23:00:00.000Z +0000-01-01T01:00:00.000Z +-000001-12-31T22:59:00.000Z +0000-01-01T01:01:00.000Z +-000001-12-31T22:50:00.000Z +0000-01-01T01:10:00.000Z +-000001-12-31T14:00:00.000Z +0000-01-01T10:00:00.000Z +-000001-12-31T13:59:00.000Z +0000-01-01T10:01:00.000Z +-000001-12-31T13:50:00.000Z +0000-01-01T10:10:00.000Z +0001-01-01T09:01:00.000Z +0001-01-01T01:01:00.000Z +0001-01-01T01:01:00.000Z +0001-01-01T01:01:00.000Z +0001-01-01T01:00:00.000Z +0001-01-01T01:02:00.000Z +0001-01-01T00:51:00.000Z +0001-01-01T01:11:00.000Z +0001-01-01T00:01:00.000Z +0001-01-01T02:01:00.000Z +0001-01-01T00:00:00.000Z +0001-01-01T02:02:00.000Z +0000-12-31T23:51:00.000Z +0001-01-01T02:11:00.000Z +0000-12-31T15:01:00.000Z +0001-01-01T11:01:00.000Z +0000-12-31T15:00:00.000Z +0001-01-01T11:02:00.000Z +0000-12-31T14:51:00.000Z +0001-01-01T11:11:00.000Z +1000-01-01T18:10:00.000Z +1000-01-01T10:10:00.000Z +1000-01-01T10:10:00.000Z +1000-01-01T10:10:00.000Z +1000-01-01T10:09:00.000Z +1000-01-01T10:11:00.000Z +1000-01-01T10:00:00.000Z +1000-01-01T10:20:00.000Z +1000-01-01T09:10:00.000Z +1000-01-01T11:10:00.000Z +1000-01-01T09:09:00.000Z +1000-01-01T11:11:00.000Z +1000-01-01T09:00:00.000Z +1000-01-01T11:20:00.000Z +1000-01-01T00:10:00.000Z +1000-01-01T20:10:00.000Z +1000-01-01T00:09:00.000Z +1000-01-01T20:11:00.000Z +1000-01-01T00:00:00.000Z +1000-01-01T20:20:00.000Z +0000-01-01T08:00:00.000Z +0000-01-01T00:00:00.000Z +0000-01-01T00:00:00.000Z +0000-01-01T00:00:00.000Z +-000001-12-31T23:59:00.000Z +0000-01-01T00:01:00.000Z +-000001-12-31T23:50:00.000Z +0000-01-01T00:10:00.000Z +-000001-12-31T23:00:00.000Z +0000-01-01T01:00:00.000Z +-000001-12-31T22:59:00.000Z +0000-01-01T01:01:00.000Z +-000001-12-31T22:50:00.000Z +0000-01-01T01:10:00.000Z +-000001-12-31T14:00:00.000Z +0000-01-01T10:00:00.000Z +-000001-12-31T13:59:00.000Z +0000-01-01T10:01:00.000Z +-000001-12-31T13:50:00.000Z +0000-01-01T10:10:00.000Z +0001-01-01T09:01:01.000Z +0001-01-01T01:01:01.000Z +0001-01-01T01:01:01.000Z +0001-01-01T01:01:01.000Z +0001-01-01T01:00:01.000Z +0001-01-01T01:02:01.000Z +0001-01-01T00:51:01.000Z +0001-01-01T01:11:01.000Z +0001-01-01T00:01:01.000Z +0001-01-01T02:01:01.000Z +0001-01-01T00:00:01.000Z +0001-01-01T02:02:01.000Z +0000-12-31T23:51:01.000Z +0001-01-01T02:11:01.000Z +0000-12-31T15:01:01.000Z +0001-01-01T11:01:01.000Z +0000-12-31T15:00:01.000Z +0001-01-01T11:02:01.000Z +0000-12-31T14:51:01.000Z +0001-01-01T11:11:01.000Z +1000-01-01T18:10:10.000Z +1000-01-01T10:10:10.000Z +1000-01-01T10:10:10.000Z +1000-01-01T10:10:10.000Z +1000-01-01T10:09:10.000Z +1000-01-01T10:11:10.000Z +1000-01-01T10:00:10.000Z +1000-01-01T10:20:10.000Z +1000-01-01T09:10:10.000Z +1000-01-01T11:10:10.000Z +1000-01-01T09:09:10.000Z +1000-01-01T11:11:10.000Z +1000-01-01T09:00:10.000Z +1000-01-01T11:20:10.000Z +1000-01-01T00:10:10.000Z +1000-01-01T20:10:10.000Z +1000-01-01T00:09:10.000Z +1000-01-01T20:11:10.000Z +1000-01-01T00:00:10.000Z +1000-01-01T20:20:10.000Z +0000-01-01T08:00:00.010Z +0000-01-01T00:00:00.010Z +0000-01-01T00:00:00.010Z +0000-01-01T00:00:00.010Z +-000001-12-31T23:59:00.010Z +0000-01-01T00:01:00.010Z +-000001-12-31T23:50:00.010Z +0000-01-01T00:10:00.010Z +-000001-12-31T23:00:00.010Z +0000-01-01T01:00:00.010Z +-000001-12-31T22:59:00.010Z +0000-01-01T01:01:00.010Z +-000001-12-31T22:50:00.010Z +0000-01-01T01:10:00.010Z +-000001-12-31T14:00:00.010Z +0000-01-01T10:00:00.010Z +-000001-12-31T13:59:00.010Z +0000-01-01T10:01:00.010Z +-000001-12-31T13:50:00.010Z +0000-01-01T10:10:00.010Z +0001-01-01T09:01:01.000Z +0001-01-01T01:01:01.000Z +0001-01-01T01:01:01.000Z +0001-01-01T01:01:01.000Z +0001-01-01T01:00:01.000Z +0001-01-01T01:02:01.000Z +0001-01-01T00:51:01.000Z +0001-01-01T01:11:01.000Z +0001-01-01T00:01:01.000Z +0001-01-01T02:01:01.000Z +0001-01-01T00:00:01.000Z +0001-01-01T02:02:01.000Z +0000-12-31T23:51:01.000Z +0001-01-01T02:11:01.000Z +0000-12-31T15:01:01.000Z +0001-01-01T11:01:01.000Z +0000-12-31T15:00:01.000Z +0001-01-01T11:02:01.000Z +0000-12-31T14:51:01.000Z +0001-01-01T11:11:01.000Z +1000-01-01T18:10:10.001Z +1000-01-01T10:10:10.001Z +1000-01-01T10:10:10.001Z +1000-01-01T10:10:10.001Z +1000-01-01T10:09:10.001Z +1000-01-01T10:11:10.001Z +1000-01-01T10:00:10.001Z +1000-01-01T10:20:10.001Z +1000-01-01T09:10:10.001Z +1000-01-01T11:10:10.001Z +1000-01-01T09:09:10.001Z +1000-01-01T11:11:10.001Z +1000-01-01T09:00:10.001Z +1000-01-01T11:20:10.001Z +1000-01-01T00:10:10.001Z +1000-01-01T20:10:10.001Z +1000-01-01T00:09:10.001Z +1000-01-01T20:11:10.001Z +1000-01-01T00:00:10.001Z +1000-01-01T20:20:10.001Z +1000-01-01T18:10:10.100Z +1000-01-01T10:10:10.100Z +1000-01-01T10:10:10.100Z +1000-01-01T10:10:10.100Z +1000-01-01T10:09:10.100Z +1000-01-01T10:11:10.100Z +1000-01-01T10:00:10.100Z +1000-01-01T10:20:10.100Z +1000-01-01T09:10:10.100Z +1000-01-01T11:10:10.100Z +1000-01-01T09:09:10.100Z +1000-01-01T11:11:10.100Z +1000-01-01T09:00:10.100Z +1000-01-01T11:20:10.100Z +1000-01-01T00:10:10.100Z +1000-01-01T20:10:10.100Z +1000-01-01T00:09:10.100Z +1000-01-01T20:11:10.100Z +1000-01-01T00:00:10.100Z +1000-01-01T20:20:10.100Z +0000-01-01T00:00:00.000Z +0001-10-01T00:00:00.000Z +1000-01-01T00:00:00.000Z +0000-01-01T08:00:00.000Z +0000-01-01T00:00:00.000Z +0000-01-01T00:00:00.000Z +0000-01-01T00:00:00.000Z +-000001-12-31T23:59:00.000Z +0000-01-01T00:01:00.000Z +-000001-12-31T23:50:00.000Z +0000-01-01T00:10:00.000Z +-000001-12-31T23:00:00.000Z +0000-01-01T01:00:00.000Z +-000001-12-31T22:59:00.000Z +0000-01-01T01:01:00.000Z +-000001-12-31T22:50:00.000Z +0000-01-01T01:10:00.000Z +-000001-12-31T14:00:00.000Z +0000-01-01T10:00:00.000Z +-000001-12-31T13:59:00.000Z +0000-01-01T10:01:00.000Z +-000001-12-31T13:50:00.000Z +0000-01-01T10:10:00.000Z +0001-10-01T08:01:00.000Z +0001-10-01T01:01:00.000Z +0001-10-01T01:01:00.000Z +0001-10-01T01:01:00.000Z +0001-10-01T01:00:00.000Z +0001-10-01T01:02:00.000Z +0001-10-01T00:51:00.000Z +0001-10-01T01:11:00.000Z +0001-10-01T00:01:00.000Z +0001-10-01T02:01:00.000Z +0001-10-01T00:00:00.000Z +0001-10-01T02:02:00.000Z +0001-09-30T23:51:00.000Z +0001-10-01T02:11:00.000Z +0001-09-30T15:01:00.000Z +0001-10-01T11:01:00.000Z +0001-09-30T15:00:00.000Z +0001-10-01T11:02:00.000Z +0001-09-30T14:51:00.000Z +0001-10-01T11:11:00.000Z +1000-01-01T18:10:00.000Z +1000-01-01T10:10:00.000Z +1000-01-01T10:10:00.000Z +1000-01-01T10:10:00.000Z +1000-01-01T10:09:00.000Z +1000-01-01T10:11:00.000Z +1000-01-01T10:00:00.000Z +1000-01-01T10:20:00.000Z +1000-01-01T09:10:00.000Z +1000-01-01T11:10:00.000Z +1000-01-01T09:09:00.000Z +1000-01-01T11:11:00.000Z +1000-01-01T09:00:00.000Z +1000-01-01T11:20:00.000Z +1000-01-01T00:10:00.000Z +1000-01-01T20:10:00.000Z +1000-01-01T00:09:00.000Z +1000-01-01T20:11:00.000Z +1000-01-01T00:00:00.000Z +1000-01-01T20:20:00.000Z +0000-01-01T08:00:00.000Z +0000-01-01T00:00:00.000Z +0000-01-01T00:00:00.000Z +0000-01-01T00:00:00.000Z +-000001-12-31T23:59:00.000Z +0000-01-01T00:01:00.000Z +-000001-12-31T23:50:00.000Z +0000-01-01T00:10:00.000Z +-000001-12-31T23:00:00.000Z +0000-01-01T01:00:00.000Z +-000001-12-31T22:59:00.000Z +0000-01-01T01:01:00.000Z +-000001-12-31T22:50:00.000Z +0000-01-01T01:10:00.000Z +-000001-12-31T14:00:00.000Z +0000-01-01T10:00:00.000Z +-000001-12-31T13:59:00.000Z +0000-01-01T10:01:00.000Z +-000001-12-31T13:50:00.000Z +0000-01-01T10:10:00.000Z +0001-10-01T08:01:01.000Z +0001-10-01T01:01:01.000Z +0001-10-01T01:01:01.000Z +0001-10-01T01:01:01.000Z +0001-10-01T01:00:01.000Z +0001-10-01T01:02:01.000Z +0001-10-01T00:51:01.000Z +0001-10-01T01:11:01.000Z +0001-10-01T00:01:01.000Z +0001-10-01T02:01:01.000Z +0001-10-01T00:00:01.000Z +0001-10-01T02:02:01.000Z +0001-09-30T23:51:01.000Z +0001-10-01T02:11:01.000Z +0001-09-30T15:01:01.000Z +0001-10-01T11:01:01.000Z +0001-09-30T15:00:01.000Z +0001-10-01T11:02:01.000Z +0001-09-30T14:51:01.000Z +0001-10-01T11:11:01.000Z +1000-01-01T18:10:10.000Z +1000-01-01T10:10:10.000Z +1000-01-01T10:10:10.000Z +1000-01-01T10:10:10.000Z +1000-01-01T10:09:10.000Z +1000-01-01T10:11:10.000Z +1000-01-01T10:00:10.000Z +1000-01-01T10:20:10.000Z +1000-01-01T09:10:10.000Z +1000-01-01T11:10:10.000Z +1000-01-01T09:09:10.000Z +1000-01-01T11:11:10.000Z +1000-01-01T09:00:10.000Z +1000-01-01T11:20:10.000Z +1000-01-01T00:10:10.000Z +1000-01-01T20:10:10.000Z +1000-01-01T00:09:10.000Z +1000-01-01T20:11:10.000Z +1000-01-01T00:00:10.000Z +1000-01-01T20:20:10.000Z +0000-01-01T08:00:00.010Z +0000-01-01T00:00:00.010Z +0000-01-01T00:00:00.010Z +0000-01-01T00:00:00.010Z +-000001-12-31T23:59:00.010Z +0000-01-01T00:01:00.010Z +-000001-12-31T23:50:00.010Z +0000-01-01T00:10:00.010Z +-000001-12-31T23:00:00.010Z +0000-01-01T01:00:00.010Z +-000001-12-31T22:59:00.010Z +0000-01-01T01:01:00.010Z +-000001-12-31T22:50:00.010Z +0000-01-01T01:10:00.010Z +-000001-12-31T14:00:00.010Z +0000-01-01T10:00:00.010Z +-000001-12-31T13:59:00.010Z +0000-01-01T10:01:00.010Z +-000001-12-31T13:50:00.010Z +0000-01-01T10:10:00.010Z +0001-10-01T08:01:01.000Z +0001-10-01T01:01:01.000Z +0001-10-01T01:01:01.000Z +0001-10-01T01:01:01.000Z +0001-10-01T01:00:01.000Z +0001-10-01T01:02:01.000Z +0001-10-01T00:51:01.000Z +0001-10-01T01:11:01.000Z +0001-10-01T00:01:01.000Z +0001-10-01T02:01:01.000Z +0001-10-01T00:00:01.000Z +0001-10-01T02:02:01.000Z +0001-09-30T23:51:01.000Z +0001-10-01T02:11:01.000Z +0001-09-30T15:01:01.000Z +0001-10-01T11:01:01.000Z +0001-09-30T15:00:01.000Z +0001-10-01T11:02:01.000Z +0001-09-30T14:51:01.000Z +0001-10-01T11:11:01.000Z +1000-01-01T18:10:10.001Z +1000-01-01T10:10:10.001Z +1000-01-01T10:10:10.001Z +1000-01-01T10:10:10.001Z +1000-01-01T10:09:10.001Z +1000-01-01T10:11:10.001Z +1000-01-01T10:00:10.001Z +1000-01-01T10:20:10.001Z +1000-01-01T09:10:10.001Z +1000-01-01T11:10:10.001Z +1000-01-01T09:09:10.001Z +1000-01-01T11:11:10.001Z +1000-01-01T09:00:10.001Z +1000-01-01T11:20:10.001Z +1000-01-01T00:10:10.001Z +1000-01-01T20:10:10.001Z +1000-01-01T00:09:10.001Z +1000-01-01T20:11:10.001Z +1000-01-01T00:00:10.001Z +1000-01-01T20:20:10.001Z +1000-01-01T18:10:10.100Z +1000-01-01T10:10:10.100Z +1000-01-01T10:10:10.100Z +1000-01-01T10:10:10.100Z +1000-01-01T10:09:10.100Z +1000-01-01T10:11:10.100Z +1000-01-01T10:00:10.100Z +1000-01-01T10:20:10.100Z +1000-01-01T09:10:10.100Z +1000-01-01T11:10:10.100Z +1000-01-01T09:09:10.100Z +1000-01-01T11:11:10.100Z +1000-01-01T09:00:10.100Z +1000-01-01T11:20:10.100Z +1000-01-01T00:10:10.100Z +1000-01-01T20:10:10.100Z +1000-01-01T00:09:10.100Z +1000-01-01T20:11:10.100Z +1000-01-01T00:00:10.100Z +1000-01-01T20:20:10.100Z +0000-01-01T00:00:00.000Z +0001-10-10T00:00:00.000Z +1000-01-01T00:00:00.000Z +0000-01-01T08:00:00.000Z +0000-01-01T00:00:00.000Z +0000-01-01T00:00:00.000Z +0000-01-01T00:00:00.000Z +-000001-12-31T23:59:00.000Z +0000-01-01T00:01:00.000Z +-000001-12-31T23:50:00.000Z +0000-01-01T00:10:00.000Z +-000001-12-31T23:00:00.000Z +0000-01-01T01:00:00.000Z +-000001-12-31T22:59:00.000Z +0000-01-01T01:01:00.000Z +-000001-12-31T22:50:00.000Z +0000-01-01T01:10:00.000Z +-000001-12-31T14:00:00.000Z +0000-01-01T10:00:00.000Z +-000001-12-31T13:59:00.000Z +0000-01-01T10:01:00.000Z +-000001-12-31T13:50:00.000Z +0000-01-01T10:10:00.000Z +0001-10-10T08:01:00.000Z +0001-10-10T01:01:00.000Z +0001-10-10T01:01:00.000Z +0001-10-10T01:01:00.000Z +0001-10-10T01:00:00.000Z +0001-10-10T01:02:00.000Z +0001-10-10T00:51:00.000Z +0001-10-10T01:11:00.000Z +0001-10-10T00:01:00.000Z +0001-10-10T02:01:00.000Z +0001-10-10T00:00:00.000Z +0001-10-10T02:02:00.000Z +0001-10-09T23:51:00.000Z +0001-10-10T02:11:00.000Z +0001-10-09T15:01:00.000Z +0001-10-10T11:01:00.000Z +0001-10-09T15:00:00.000Z +0001-10-10T11:02:00.000Z +0001-10-09T14:51:00.000Z +0001-10-10T11:11:00.000Z +1000-01-01T18:10:00.000Z +1000-01-01T10:10:00.000Z +1000-01-01T10:10:00.000Z +1000-01-01T10:10:00.000Z +1000-01-01T10:09:00.000Z +1000-01-01T10:11:00.000Z +1000-01-01T10:00:00.000Z +1000-01-01T10:20:00.000Z +1000-01-01T09:10:00.000Z +1000-01-01T11:10:00.000Z +1000-01-01T09:09:00.000Z +1000-01-01T11:11:00.000Z +1000-01-01T09:00:00.000Z +1000-01-01T11:20:00.000Z +1000-01-01T00:10:00.000Z +1000-01-01T20:10:00.000Z +1000-01-01T00:09:00.000Z +1000-01-01T20:11:00.000Z +1000-01-01T00:00:00.000Z +1000-01-01T20:20:00.000Z +0000-01-01T08:00:00.000Z +0000-01-01T00:00:00.000Z +0000-01-01T00:00:00.000Z +0000-01-01T00:00:00.000Z +-000001-12-31T23:59:00.000Z +0000-01-01T00:01:00.000Z +-000001-12-31T23:50:00.000Z +0000-01-01T00:10:00.000Z +-000001-12-31T23:00:00.000Z +0000-01-01T01:00:00.000Z +-000001-12-31T22:59:00.000Z +0000-01-01T01:01:00.000Z +-000001-12-31T22:50:00.000Z +0000-01-01T01:10:00.000Z +-000001-12-31T14:00:00.000Z +0000-01-01T10:00:00.000Z +-000001-12-31T13:59:00.000Z +0000-01-01T10:01:00.000Z +-000001-12-31T13:50:00.000Z +0000-01-01T10:10:00.000Z +0001-10-10T08:01:01.000Z +0001-10-10T01:01:01.000Z +0001-10-10T01:01:01.000Z +0001-10-10T01:01:01.000Z +0001-10-10T01:00:01.000Z +0001-10-10T01:02:01.000Z +0001-10-10T00:51:01.000Z +0001-10-10T01:11:01.000Z +0001-10-10T00:01:01.000Z +0001-10-10T02:01:01.000Z +0001-10-10T00:00:01.000Z +0001-10-10T02:02:01.000Z +0001-10-09T23:51:01.000Z +0001-10-10T02:11:01.000Z +0001-10-09T15:01:01.000Z +0001-10-10T11:01:01.000Z +0001-10-09T15:00:01.000Z +0001-10-10T11:02:01.000Z +0001-10-09T14:51:01.000Z +0001-10-10T11:11:01.000Z +1000-01-01T18:10:10.000Z +1000-01-01T10:10:10.000Z +1000-01-01T10:10:10.000Z +1000-01-01T10:10:10.000Z +1000-01-01T10:09:10.000Z +1000-01-01T10:11:10.000Z +1000-01-01T10:00:10.000Z +1000-01-01T10:20:10.000Z +1000-01-01T09:10:10.000Z +1000-01-01T11:10:10.000Z +1000-01-01T09:09:10.000Z +1000-01-01T11:11:10.000Z +1000-01-01T09:00:10.000Z +1000-01-01T11:20:10.000Z +1000-01-01T00:10:10.000Z +1000-01-01T20:10:10.000Z +1000-01-01T00:09:10.000Z +1000-01-01T20:11:10.000Z +1000-01-01T00:00:10.000Z +1000-01-01T20:20:10.000Z +0000-01-01T08:00:00.010Z +0000-01-01T00:00:00.010Z +0000-01-01T00:00:00.010Z +0000-01-01T00:00:00.010Z +-000001-12-31T23:59:00.010Z +0000-01-01T00:01:00.010Z +-000001-12-31T23:50:00.010Z +0000-01-01T00:10:00.010Z +-000001-12-31T23:00:00.010Z +0000-01-01T01:00:00.010Z +-000001-12-31T22:59:00.010Z +0000-01-01T01:01:00.010Z +-000001-12-31T22:50:00.010Z +0000-01-01T01:10:00.010Z +-000001-12-31T14:00:00.010Z +0000-01-01T10:00:00.010Z +-000001-12-31T13:59:00.010Z +0000-01-01T10:01:00.010Z +-000001-12-31T13:50:00.010Z +0000-01-01T10:10:00.010Z +0001-10-10T08:01:01.000Z +0001-10-10T01:01:01.000Z +0001-10-10T01:01:01.000Z +0001-10-10T01:01:01.000Z +0001-10-10T01:00:01.000Z +0001-10-10T01:02:01.000Z +0001-10-10T00:51:01.000Z +0001-10-10T01:11:01.000Z +0001-10-10T00:01:01.000Z +0001-10-10T02:01:01.000Z +0001-10-10T00:00:01.000Z +0001-10-10T02:02:01.000Z +0001-10-09T23:51:01.000Z +0001-10-10T02:11:01.000Z +0001-10-09T15:01:01.000Z +0001-10-10T11:01:01.000Z +0001-10-09T15:00:01.000Z +0001-10-10T11:02:01.000Z +0001-10-09T14:51:01.000Z +0001-10-10T11:11:01.000Z +1000-01-01T18:10:10.001Z +1000-01-01T10:10:10.001Z +1000-01-01T10:10:10.001Z +1000-01-01T10:10:10.001Z +1000-01-01T10:09:10.001Z +1000-01-01T10:11:10.001Z +1000-01-01T10:00:10.001Z +1000-01-01T10:20:10.001Z +1000-01-01T09:10:10.001Z +1000-01-01T11:10:10.001Z +1000-01-01T09:09:10.001Z +1000-01-01T11:11:10.001Z +1000-01-01T09:00:10.001Z +1000-01-01T11:20:10.001Z +1000-01-01T00:10:10.001Z +1000-01-01T20:10:10.001Z +1000-01-01T00:09:10.001Z +1000-01-01T20:11:10.001Z +1000-01-01T00:00:10.001Z +1000-01-01T20:20:10.001Z +1000-01-01T18:10:10.100Z +1000-01-01T10:10:10.100Z +1000-01-01T10:10:10.100Z +1000-01-01T10:10:10.100Z +1000-01-01T10:09:10.100Z +1000-01-01T10:11:10.100Z +1000-01-01T10:00:10.100Z +1000-01-01T10:20:10.100Z +1000-01-01T09:10:10.100Z +1000-01-01T11:10:10.100Z +1000-01-01T09:09:10.100Z +1000-01-01T11:11:10.100Z +1000-01-01T09:00:10.100Z +1000-01-01T11:20:10.100Z +1000-01-01T00:10:10.100Z +1000-01-01T20:10:10.100Z +1000-01-01T00:09:10.100Z +1000-01-01T20:11:10.100Z +1000-01-01T00:00:10.100Z +1000-01-01T20:20:10.100Z ++010010-01-01T00:00:00.000Z +-010010-01-01T00:00:00.000Z +0000-01-01T00:00:00.000Z +0001-01-01T00:00:00.000Z +-000001-01-01T00:00:00.000Z ++100000-01-01T00:00:00.000Z +-100000-01-01T00:00:00.000Z ++010010-01-01T08:00:00.000Z +-010010-01-01T08:00:00.000Z ++010010-01-01T00:00:00.000Z +-010010-01-01T00:00:00.000Z ++010010-01-01T00:00:00.000Z +-010010-01-01T00:00:00.000Z ++010010-01-01T00:00:00.000Z +-010010-01-01T00:00:00.000Z ++010009-12-31T23:59:00.000Z +-010011-12-31T23:59:00.000Z ++010010-01-01T00:01:00.000Z +-010010-01-01T00:01:00.000Z ++010009-12-31T23:50:00.000Z +-010011-12-31T23:50:00.000Z ++010010-01-01T00:10:00.000Z +-010010-01-01T00:10:00.000Z ++010009-12-31T23:00:00.000Z +-010011-12-31T23:00:00.000Z ++010010-01-01T01:00:00.000Z +-010010-01-01T01:00:00.000Z ++010009-12-31T22:59:00.000Z +-010011-12-31T22:59:00.000Z ++010010-01-01T01:01:00.000Z +-010010-01-01T01:01:00.000Z ++010009-12-31T22:50:00.000Z +-010011-12-31T22:50:00.000Z ++010010-01-01T01:10:00.000Z +-010010-01-01T01:10:00.000Z ++010009-12-31T14:00:00.000Z +-010011-12-31T14:00:00.000Z ++010010-01-01T10:00:00.000Z +-010010-01-01T10:00:00.000Z ++010009-12-31T13:59:00.000Z +-010011-12-31T13:59:00.000Z ++010010-01-01T10:01:00.000Z +-010010-01-01T10:01:00.000Z ++010009-12-31T13:50:00.000Z +-010011-12-31T13:50:00.000Z ++010010-01-01T10:10:00.000Z +-010010-01-01T10:10:00.000Z +0000-01-01T09:01:00.000Z +0000-01-01T01:01:00.000Z +0000-01-01T01:01:00.000Z +0000-01-01T01:01:00.000Z +0000-01-01T01:00:00.000Z +0000-01-01T01:02:00.000Z +0000-01-01T00:51:00.000Z +0000-01-01T01:11:00.000Z +0000-01-01T00:01:00.000Z +0000-01-01T02:01:00.000Z +0000-01-01T00:00:00.000Z +0000-01-01T02:02:00.000Z +-000001-12-31T23:51:00.000Z +0000-01-01T02:11:00.000Z +-000001-12-31T15:01:00.000Z +0000-01-01T11:01:00.000Z +-000001-12-31T15:00:00.000Z +0000-01-01T11:02:00.000Z +-000001-12-31T14:51:00.000Z +0000-01-01T11:11:00.000Z +0001-01-01T18:10:00.000Z +-000001-01-01T18:10:00.000Z +0001-01-01T10:10:00.000Z +-000001-01-01T10:10:00.000Z +0001-01-01T10:10:00.000Z +-000001-01-01T10:10:00.000Z +0001-01-01T10:10:00.000Z +-000001-01-01T10:10:00.000Z +0001-01-01T10:09:00.000Z +-000001-01-01T10:09:00.000Z +0001-01-01T10:11:00.000Z +-000001-01-01T10:11:00.000Z +0001-01-01T10:00:00.000Z +-000001-01-01T10:00:00.000Z +0001-01-01T10:20:00.000Z +-000001-01-01T10:20:00.000Z +0001-01-01T09:10:00.000Z +-000001-01-01T09:10:00.000Z +0001-01-01T11:10:00.000Z +-000001-01-01T11:10:00.000Z +0001-01-01T09:09:00.000Z +-000001-01-01T09:09:00.000Z +0001-01-01T11:11:00.000Z +-000001-01-01T11:11:00.000Z +0001-01-01T09:00:00.000Z +-000001-01-01T09:00:00.000Z +0001-01-01T11:20:00.000Z +-000001-01-01T11:20:00.000Z +0001-01-01T00:10:00.000Z +-000001-01-01T00:10:00.000Z +0001-01-01T20:10:00.000Z +-000001-01-01T20:10:00.000Z +0001-01-01T00:09:00.000Z +-000001-01-01T00:09:00.000Z +0001-01-01T20:11:00.000Z +-000001-01-01T20:11:00.000Z +0001-01-01T00:00:00.000Z +-000001-01-01T00:00:00.000Z +0001-01-01T20:20:00.000Z +-000001-01-01T20:20:00.000Z ++100000-01-01T08:00:00.000Z +-100000-01-01T08:00:00.000Z ++100000-01-01T00:00:00.000Z +-100000-01-01T00:00:00.000Z ++100000-01-01T00:00:00.000Z +-100000-01-01T00:00:00.000Z ++100000-01-01T00:00:00.000Z +-100000-01-01T00:00:00.000Z ++099999-12-31T23:59:00.000Z +-100001-12-31T23:59:00.000Z ++100000-01-01T00:01:00.000Z +-100000-01-01T00:01:00.000Z ++099999-12-31T23:50:00.000Z +-100001-12-31T23:50:00.000Z ++100000-01-01T00:10:00.000Z +-100000-01-01T00:10:00.000Z ++099999-12-31T23:00:00.000Z +-100001-12-31T23:00:00.000Z ++100000-01-01T01:00:00.000Z +-100000-01-01T01:00:00.000Z ++099999-12-31T22:59:00.000Z +-100001-12-31T22:59:00.000Z ++100000-01-01T01:01:00.000Z +-100000-01-01T01:01:00.000Z ++099999-12-31T22:50:00.000Z +-100001-12-31T22:50:00.000Z ++100000-01-01T01:10:00.000Z +-100000-01-01T01:10:00.000Z ++099999-12-31T14:00:00.000Z +-100001-12-31T14:00:00.000Z ++100000-01-01T10:00:00.000Z +-100000-01-01T10:00:00.000Z ++099999-12-31T13:59:00.000Z +-100001-12-31T13:59:00.000Z ++100000-01-01T10:01:00.000Z +-100000-01-01T10:01:00.000Z ++099999-12-31T13:50:00.000Z +-100001-12-31T13:50:00.000Z ++100000-01-01T10:10:00.000Z +-100000-01-01T10:10:00.000Z ++010010-01-01T08:00:00.000Z +-010010-01-01T08:00:00.000Z ++010010-01-01T00:00:00.000Z +-010010-01-01T00:00:00.000Z ++010010-01-01T00:00:00.000Z +-010010-01-01T00:00:00.000Z ++010010-01-01T00:00:00.000Z +-010010-01-01T00:00:00.000Z ++010009-12-31T23:59:00.000Z +-010011-12-31T23:59:00.000Z ++010010-01-01T00:01:00.000Z +-010010-01-01T00:01:00.000Z ++010009-12-31T23:50:00.000Z +-010011-12-31T23:50:00.000Z ++010010-01-01T00:10:00.000Z +-010010-01-01T00:10:00.000Z ++010009-12-31T23:00:00.000Z +-010011-12-31T23:00:00.000Z ++010010-01-01T01:00:00.000Z +-010010-01-01T01:00:00.000Z ++010009-12-31T22:59:00.000Z +-010011-12-31T22:59:00.000Z ++010010-01-01T01:01:00.000Z +-010010-01-01T01:01:00.000Z ++010009-12-31T22:50:00.000Z +-010011-12-31T22:50:00.000Z ++010010-01-01T01:10:00.000Z +-010010-01-01T01:10:00.000Z ++010009-12-31T14:00:00.000Z +-010011-12-31T14:00:00.000Z ++010010-01-01T10:00:00.000Z +-010010-01-01T10:00:00.000Z ++010009-12-31T13:59:00.000Z +-010011-12-31T13:59:00.000Z ++010010-01-01T10:01:00.000Z +-010010-01-01T10:01:00.000Z ++010009-12-31T13:50:00.000Z +-010011-12-31T13:50:00.000Z ++010010-01-01T10:10:00.000Z +-010010-01-01T10:10:00.000Z +0000-01-01T09:01:01.000Z +0000-01-01T01:01:01.000Z +0000-01-01T01:01:01.000Z +0000-01-01T01:01:01.000Z +0000-01-01T01:00:01.000Z +0000-01-01T01:02:01.000Z +0000-01-01T00:51:01.000Z +0000-01-01T01:11:01.000Z +0000-01-01T00:01:01.000Z +0000-01-01T02:01:01.000Z +0000-01-01T00:00:01.000Z +0000-01-01T02:02:01.000Z +-000001-12-31T23:51:01.000Z +0000-01-01T02:11:01.000Z +-000001-12-31T15:01:01.000Z +0000-01-01T11:01:01.000Z +-000001-12-31T15:00:01.000Z +0000-01-01T11:02:01.000Z +-000001-12-31T14:51:01.000Z +0000-01-01T11:11:01.000Z +0001-01-01T18:10:10.000Z +-000001-01-01T18:10:10.000Z +0001-01-01T10:10:10.000Z +-000001-01-01T10:10:10.000Z +0001-01-01T10:10:10.000Z +-000001-01-01T10:10:10.000Z +0001-01-01T10:10:10.000Z +-000001-01-01T10:10:10.000Z +0001-01-01T10:09:10.000Z +-000001-01-01T10:09:10.000Z +0001-01-01T10:11:10.000Z +-000001-01-01T10:11:10.000Z +0001-01-01T10:00:10.000Z +-000001-01-01T10:00:10.000Z +0001-01-01T10:20:10.000Z +-000001-01-01T10:20:10.000Z +0001-01-01T09:10:10.000Z +-000001-01-01T09:10:10.000Z +0001-01-01T11:10:10.000Z +-000001-01-01T11:10:10.000Z +0001-01-01T09:09:10.000Z +-000001-01-01T09:09:10.000Z +0001-01-01T11:11:10.000Z +-000001-01-01T11:11:10.000Z +0001-01-01T09:00:10.000Z +-000001-01-01T09:00:10.000Z +0001-01-01T11:20:10.000Z +-000001-01-01T11:20:10.000Z +0001-01-01T00:10:10.000Z +-000001-01-01T00:10:10.000Z +0001-01-01T20:10:10.000Z +-000001-01-01T20:10:10.000Z +0001-01-01T00:09:10.000Z +-000001-01-01T00:09:10.000Z +0001-01-01T20:11:10.000Z +-000001-01-01T20:11:10.000Z +0001-01-01T00:00:10.000Z +-000001-01-01T00:00:10.000Z +0001-01-01T20:20:10.000Z +-000001-01-01T20:20:10.000Z ++100000-01-01T08:00:00.000Z +-100000-01-01T08:00:00.000Z ++100000-01-01T00:00:00.000Z +-100000-01-01T00:00:00.000Z ++100000-01-01T00:00:00.000Z +-100000-01-01T00:00:00.000Z ++100000-01-01T00:00:00.000Z +-100000-01-01T00:00:00.000Z ++099999-12-31T23:59:00.000Z +-100001-12-31T23:59:00.000Z ++100000-01-01T00:01:00.000Z +-100000-01-01T00:01:00.000Z ++099999-12-31T23:50:00.000Z +-100001-12-31T23:50:00.000Z ++100000-01-01T00:10:00.000Z +-100000-01-01T00:10:00.000Z ++099999-12-31T23:00:00.000Z +-100001-12-31T23:00:00.000Z ++100000-01-01T01:00:00.000Z +-100000-01-01T01:00:00.000Z ++099999-12-31T22:59:00.000Z +-100001-12-31T22:59:00.000Z ++100000-01-01T01:01:00.000Z +-100000-01-01T01:01:00.000Z ++099999-12-31T22:50:00.000Z +-100001-12-31T22:50:00.000Z ++100000-01-01T01:10:00.000Z +-100000-01-01T01:10:00.000Z ++099999-12-31T14:00:00.000Z +-100001-12-31T14:00:00.000Z ++100000-01-01T10:00:00.000Z +-100000-01-01T10:00:00.000Z ++099999-12-31T13:59:00.000Z +-100001-12-31T13:59:00.000Z ++100000-01-01T10:01:00.000Z +-100000-01-01T10:01:00.000Z ++099999-12-31T13:50:00.000Z +-100001-12-31T13:50:00.000Z ++100000-01-01T10:10:00.000Z +-100000-01-01T10:10:00.000Z ++010010-01-01T08:00:00.010Z +-010010-01-01T08:00:00.010Z ++010010-01-01T00:00:00.010Z +-010010-01-01T00:00:00.010Z ++010010-01-01T00:00:00.010Z +-010010-01-01T00:00:00.010Z ++010010-01-01T00:00:00.010Z +-010010-01-01T00:00:00.010Z ++010009-12-31T23:59:00.010Z +-010011-12-31T23:59:00.010Z ++010010-01-01T00:01:00.010Z +-010010-01-01T00:01:00.010Z ++010009-12-31T23:50:00.010Z +-010011-12-31T23:50:00.010Z ++010010-01-01T00:10:00.010Z +-010010-01-01T00:10:00.010Z ++010009-12-31T23:00:00.010Z +-010011-12-31T23:00:00.010Z ++010010-01-01T01:00:00.010Z +-010010-01-01T01:00:00.010Z ++010009-12-31T22:59:00.010Z +-010011-12-31T22:59:00.010Z ++010010-01-01T01:01:00.010Z +-010010-01-01T01:01:00.010Z ++010009-12-31T22:50:00.010Z +-010011-12-31T22:50:00.010Z ++010010-01-01T01:10:00.010Z +-010010-01-01T01:10:00.010Z ++010009-12-31T14:00:00.010Z +-010011-12-31T14:00:00.010Z ++010010-01-01T10:00:00.010Z +-010010-01-01T10:00:00.010Z ++010009-12-31T13:59:00.010Z +-010011-12-31T13:59:00.010Z ++010010-01-01T10:01:00.010Z +-010010-01-01T10:01:00.010Z ++010009-12-31T13:50:00.010Z +-010011-12-31T13:50:00.010Z ++010010-01-01T10:10:00.010Z +-010010-01-01T10:10:00.010Z +0000-01-01T09:01:01.000Z +0000-01-01T01:01:01.000Z +0000-01-01T01:01:01.000Z +0000-01-01T01:01:01.000Z +0000-01-01T01:00:01.000Z +0000-01-01T01:02:01.000Z +0000-01-01T00:51:01.000Z +0000-01-01T01:11:01.000Z +0000-01-01T00:01:01.000Z +0000-01-01T02:01:01.000Z +0000-01-01T00:00:01.000Z +0000-01-01T02:02:01.000Z +-000001-12-31T23:51:01.000Z +0000-01-01T02:11:01.000Z +-000001-12-31T15:01:01.000Z +0000-01-01T11:01:01.000Z +-000001-12-31T15:00:01.000Z +0000-01-01T11:02:01.000Z +-000001-12-31T14:51:01.000Z +0000-01-01T11:11:01.000Z +0001-01-01T18:10:10.001Z +-000001-01-01T18:10:10.001Z +0001-01-01T10:10:10.001Z +-000001-01-01T10:10:10.001Z +0001-01-01T10:10:10.001Z +-000001-01-01T10:10:10.001Z +0001-01-01T10:10:10.001Z +-000001-01-01T10:10:10.001Z +0001-01-01T10:09:10.001Z +-000001-01-01T10:09:10.001Z +0001-01-01T10:11:10.001Z +-000001-01-01T10:11:10.001Z +0001-01-01T10:00:10.001Z +-000001-01-01T10:00:10.001Z +0001-01-01T10:20:10.001Z +-000001-01-01T10:20:10.001Z +0001-01-01T09:10:10.001Z +-000001-01-01T09:10:10.001Z +0001-01-01T11:10:10.001Z +-000001-01-01T11:10:10.001Z +0001-01-01T09:09:10.001Z +-000001-01-01T09:09:10.001Z +0001-01-01T11:11:10.001Z +-000001-01-01T11:11:10.001Z +0001-01-01T09:00:10.001Z +-000001-01-01T09:00:10.001Z +0001-01-01T11:20:10.001Z +-000001-01-01T11:20:10.001Z +0001-01-01T00:10:10.001Z +-000001-01-01T00:10:10.001Z +0001-01-01T20:10:10.001Z +-000001-01-01T20:10:10.001Z +0001-01-01T00:09:10.001Z +-000001-01-01T00:09:10.001Z +0001-01-01T20:11:10.001Z +-000001-01-01T20:11:10.001Z +0001-01-01T00:00:10.001Z +-000001-01-01T00:00:10.001Z +0001-01-01T20:20:10.001Z +-000001-01-01T20:20:10.001Z ++100000-01-01T08:00:00.100Z +-100000-01-01T08:00:00.100Z ++100000-01-01T00:00:00.100Z +-100000-01-01T00:00:00.100Z ++100000-01-01T00:00:00.100Z +-100000-01-01T00:00:00.100Z ++100000-01-01T00:00:00.100Z +-100000-01-01T00:00:00.100Z ++099999-12-31T23:59:00.100Z +-100001-12-31T23:59:00.100Z ++100000-01-01T00:01:00.100Z +-100000-01-01T00:01:00.100Z ++099999-12-31T23:50:00.100Z +-100001-12-31T23:50:00.100Z ++100000-01-01T00:10:00.100Z +-100000-01-01T00:10:00.100Z ++099999-12-31T23:00:00.100Z +-100001-12-31T23:00:00.100Z ++100000-01-01T01:00:00.100Z +-100000-01-01T01:00:00.100Z ++099999-12-31T22:59:00.100Z +-100001-12-31T22:59:00.100Z ++100000-01-01T01:01:00.100Z +-100000-01-01T01:01:00.100Z ++099999-12-31T22:50:00.100Z +-100001-12-31T22:50:00.100Z ++100000-01-01T01:10:00.100Z +-100000-01-01T01:10:00.100Z ++099999-12-31T14:00:00.100Z +-100001-12-31T14:00:00.100Z ++100000-01-01T10:00:00.100Z +-100000-01-01T10:00:00.100Z ++099999-12-31T13:59:00.100Z +-100001-12-31T13:59:00.100Z ++100000-01-01T10:01:00.100Z +-100000-01-01T10:01:00.100Z ++099999-12-31T13:50:00.100Z +-100001-12-31T13:50:00.100Z ++100000-01-01T10:10:00.100Z +-100000-01-01T10:10:00.100Z ++010010-01-01T00:00:00.000Z +-010010-01-01T00:00:00.000Z +0000-10-01T00:00:00.000Z +0001-01-01T00:00:00.000Z +-000001-01-01T00:00:00.000Z ++100000-10-01T00:00:00.000Z +-100000-10-01T00:00:00.000Z ++010010-01-01T08:00:00.000Z +-010010-01-01T08:00:00.000Z ++010010-01-01T00:00:00.000Z +-010010-01-01T00:00:00.000Z ++010010-01-01T00:00:00.000Z +-010010-01-01T00:00:00.000Z ++010010-01-01T00:00:00.000Z +-010010-01-01T00:00:00.000Z ++010009-12-31T23:59:00.000Z +-010011-12-31T23:59:00.000Z ++010010-01-01T00:01:00.000Z +-010010-01-01T00:01:00.000Z ++010009-12-31T23:50:00.000Z +-010011-12-31T23:50:00.000Z ++010010-01-01T00:10:00.000Z +-010010-01-01T00:10:00.000Z ++010009-12-31T23:00:00.000Z +-010011-12-31T23:00:00.000Z ++010010-01-01T01:00:00.000Z +-010010-01-01T01:00:00.000Z ++010009-12-31T22:59:00.000Z +-010011-12-31T22:59:00.000Z ++010010-01-01T01:01:00.000Z +-010010-01-01T01:01:00.000Z ++010009-12-31T22:50:00.000Z +-010011-12-31T22:50:00.000Z ++010010-01-01T01:10:00.000Z +-010010-01-01T01:10:00.000Z ++010009-12-31T14:00:00.000Z +-010011-12-31T14:00:00.000Z ++010010-01-01T10:00:00.000Z +-010010-01-01T10:00:00.000Z ++010009-12-31T13:59:00.000Z +-010011-12-31T13:59:00.000Z ++010010-01-01T10:01:00.000Z +-010010-01-01T10:01:00.000Z ++010009-12-31T13:50:00.000Z +-010011-12-31T13:50:00.000Z ++010010-01-01T10:10:00.000Z +-010010-01-01T10:10:00.000Z +0000-10-01T08:01:00.000Z +0000-10-01T01:01:00.000Z +0000-10-01T01:01:00.000Z +0000-10-01T01:01:00.000Z +0000-10-01T01:00:00.000Z +0000-10-01T01:02:00.000Z +0000-10-01T00:51:00.000Z +0000-10-01T01:11:00.000Z +0000-10-01T00:01:00.000Z +0000-10-01T02:01:00.000Z +0000-10-01T00:00:00.000Z +0000-10-01T02:02:00.000Z +0000-09-30T23:51:00.000Z +0000-10-01T02:11:00.000Z +0000-09-30T15:01:00.000Z +0000-10-01T11:01:00.000Z +0000-09-30T15:00:00.000Z +0000-10-01T11:02:00.000Z +0000-09-30T14:51:00.000Z +0000-10-01T11:11:00.000Z +0001-01-01T18:10:00.000Z +-000001-01-01T18:10:00.000Z +0001-01-01T10:10:00.000Z +-000001-01-01T10:10:00.000Z +0001-01-01T10:10:00.000Z +-000001-01-01T10:10:00.000Z +0001-01-01T10:10:00.000Z +-000001-01-01T10:10:00.000Z +0001-01-01T10:09:00.000Z +-000001-01-01T10:09:00.000Z +0001-01-01T10:11:00.000Z +-000001-01-01T10:11:00.000Z +0001-01-01T10:00:00.000Z +-000001-01-01T10:00:00.000Z +0001-01-01T10:20:00.000Z +-000001-01-01T10:20:00.000Z +0001-01-01T09:10:00.000Z +-000001-01-01T09:10:00.000Z +0001-01-01T11:10:00.000Z +-000001-01-01T11:10:00.000Z +0001-01-01T09:09:00.000Z +-000001-01-01T09:09:00.000Z +0001-01-01T11:11:00.000Z +-000001-01-01T11:11:00.000Z +0001-01-01T09:00:00.000Z +-000001-01-01T09:00:00.000Z +0001-01-01T11:20:00.000Z +-000001-01-01T11:20:00.000Z +0001-01-01T00:10:00.000Z +-000001-01-01T00:10:00.000Z +0001-01-01T20:10:00.000Z +-000001-01-01T20:10:00.000Z +0001-01-01T00:09:00.000Z +-000001-01-01T00:09:00.000Z +0001-01-01T20:11:00.000Z +-000001-01-01T20:11:00.000Z +0001-01-01T00:00:00.000Z +-000001-01-01T00:00:00.000Z +0001-01-01T20:20:00.000Z +-000001-01-01T20:20:00.000Z ++100000-10-01T07:00:00.000Z +-100000-10-01T07:00:00.000Z ++100000-10-01T00:00:00.000Z +-100000-10-01T00:00:00.000Z ++100000-10-01T00:00:00.000Z +-100000-10-01T00:00:00.000Z ++100000-10-01T00:00:00.000Z +-100000-10-01T00:00:00.000Z ++100000-09-30T23:59:00.000Z +-100000-09-30T23:59:00.000Z ++100000-10-01T00:01:00.000Z +-100000-10-01T00:01:00.000Z ++100000-09-30T23:50:00.000Z +-100000-09-30T23:50:00.000Z ++100000-10-01T00:10:00.000Z +-100000-10-01T00:10:00.000Z ++100000-09-30T23:00:00.000Z +-100000-09-30T23:00:00.000Z ++100000-10-01T01:00:00.000Z +-100000-10-01T01:00:00.000Z ++100000-09-30T22:59:00.000Z +-100000-09-30T22:59:00.000Z ++100000-10-01T01:01:00.000Z +-100000-10-01T01:01:00.000Z ++100000-09-30T22:50:00.000Z +-100000-09-30T22:50:00.000Z ++100000-10-01T01:10:00.000Z +-100000-10-01T01:10:00.000Z ++100000-09-30T14:00:00.000Z +-100000-09-30T14:00:00.000Z ++100000-10-01T10:00:00.000Z +-100000-10-01T10:00:00.000Z ++100000-09-30T13:59:00.000Z +-100000-09-30T13:59:00.000Z ++100000-10-01T10:01:00.000Z +-100000-10-01T10:01:00.000Z ++100000-09-30T13:50:00.000Z +-100000-09-30T13:50:00.000Z ++100000-10-01T10:10:00.000Z +-100000-10-01T10:10:00.000Z ++010010-01-01T08:00:00.000Z +-010010-01-01T08:00:00.000Z ++010010-01-01T00:00:00.000Z +-010010-01-01T00:00:00.000Z ++010010-01-01T00:00:00.000Z +-010010-01-01T00:00:00.000Z ++010010-01-01T00:00:00.000Z +-010010-01-01T00:00:00.000Z ++010009-12-31T23:59:00.000Z +-010011-12-31T23:59:00.000Z ++010010-01-01T00:01:00.000Z +-010010-01-01T00:01:00.000Z ++010009-12-31T23:50:00.000Z +-010011-12-31T23:50:00.000Z ++010010-01-01T00:10:00.000Z +-010010-01-01T00:10:00.000Z ++010009-12-31T23:00:00.000Z +-010011-12-31T23:00:00.000Z ++010010-01-01T01:00:00.000Z +-010010-01-01T01:00:00.000Z ++010009-12-31T22:59:00.000Z +-010011-12-31T22:59:00.000Z ++010010-01-01T01:01:00.000Z +-010010-01-01T01:01:00.000Z ++010009-12-31T22:50:00.000Z +-010011-12-31T22:50:00.000Z ++010010-01-01T01:10:00.000Z +-010010-01-01T01:10:00.000Z ++010009-12-31T14:00:00.000Z +-010011-12-31T14:00:00.000Z ++010010-01-01T10:00:00.000Z +-010010-01-01T10:00:00.000Z ++010009-12-31T13:59:00.000Z +-010011-12-31T13:59:00.000Z ++010010-01-01T10:01:00.000Z +-010010-01-01T10:01:00.000Z ++010009-12-31T13:50:00.000Z +-010011-12-31T13:50:00.000Z ++010010-01-01T10:10:00.000Z +-010010-01-01T10:10:00.000Z +0000-10-01T08:01:01.000Z +0000-10-01T01:01:01.000Z +0000-10-01T01:01:01.000Z +0000-10-01T01:01:01.000Z +0000-10-01T01:00:01.000Z +0000-10-01T01:02:01.000Z +0000-10-01T00:51:01.000Z +0000-10-01T01:11:01.000Z +0000-10-01T00:01:01.000Z +0000-10-01T02:01:01.000Z +0000-10-01T00:00:01.000Z +0000-10-01T02:02:01.000Z +0000-09-30T23:51:01.000Z +0000-10-01T02:11:01.000Z +0000-09-30T15:01:01.000Z +0000-10-01T11:01:01.000Z +0000-09-30T15:00:01.000Z +0000-10-01T11:02:01.000Z +0000-09-30T14:51:01.000Z +0000-10-01T11:11:01.000Z +0001-01-01T18:10:10.000Z +-000001-01-01T18:10:10.000Z +0001-01-01T10:10:10.000Z +-000001-01-01T10:10:10.000Z +0001-01-01T10:10:10.000Z +-000001-01-01T10:10:10.000Z +0001-01-01T10:10:10.000Z +-000001-01-01T10:10:10.000Z +0001-01-01T10:09:10.000Z +-000001-01-01T10:09:10.000Z +0001-01-01T10:11:10.000Z +-000001-01-01T10:11:10.000Z +0001-01-01T10:00:10.000Z +-000001-01-01T10:00:10.000Z +0001-01-01T10:20:10.000Z +-000001-01-01T10:20:10.000Z +0001-01-01T09:10:10.000Z +-000001-01-01T09:10:10.000Z +0001-01-01T11:10:10.000Z +-000001-01-01T11:10:10.000Z +0001-01-01T09:09:10.000Z +-000001-01-01T09:09:10.000Z +0001-01-01T11:11:10.000Z +-000001-01-01T11:11:10.000Z +0001-01-01T09:00:10.000Z +-000001-01-01T09:00:10.000Z +0001-01-01T11:20:10.000Z +-000001-01-01T11:20:10.000Z +0001-01-01T00:10:10.000Z +-000001-01-01T00:10:10.000Z +0001-01-01T20:10:10.000Z +-000001-01-01T20:10:10.000Z +0001-01-01T00:09:10.000Z +-000001-01-01T00:09:10.000Z +0001-01-01T20:11:10.000Z +-000001-01-01T20:11:10.000Z +0001-01-01T00:00:10.000Z +-000001-01-01T00:00:10.000Z +0001-01-01T20:20:10.000Z +-000001-01-01T20:20:10.000Z ++100000-10-01T07:00:00.000Z +-100000-10-01T07:00:00.000Z ++100000-10-01T00:00:00.000Z +-100000-10-01T00:00:00.000Z ++100000-10-01T00:00:00.000Z +-100000-10-01T00:00:00.000Z ++100000-10-01T00:00:00.000Z +-100000-10-01T00:00:00.000Z ++100000-09-30T23:59:00.000Z +-100000-09-30T23:59:00.000Z ++100000-10-01T00:01:00.000Z +-100000-10-01T00:01:00.000Z ++100000-09-30T23:50:00.000Z +-100000-09-30T23:50:00.000Z ++100000-10-01T00:10:00.000Z +-100000-10-01T00:10:00.000Z ++100000-09-30T23:00:00.000Z +-100000-09-30T23:00:00.000Z ++100000-10-01T01:00:00.000Z +-100000-10-01T01:00:00.000Z ++100000-09-30T22:59:00.000Z +-100000-09-30T22:59:00.000Z ++100000-10-01T01:01:00.000Z +-100000-10-01T01:01:00.000Z ++100000-09-30T22:50:00.000Z +-100000-09-30T22:50:00.000Z ++100000-10-01T01:10:00.000Z +-100000-10-01T01:10:00.000Z ++100000-09-30T14:00:00.000Z +-100000-09-30T14:00:00.000Z ++100000-10-01T10:00:00.000Z +-100000-10-01T10:00:00.000Z ++100000-09-30T13:59:00.000Z +-100000-09-30T13:59:00.000Z ++100000-10-01T10:01:00.000Z +-100000-10-01T10:01:00.000Z ++100000-09-30T13:50:00.000Z +-100000-09-30T13:50:00.000Z ++100000-10-01T10:10:00.000Z +-100000-10-01T10:10:00.000Z ++010010-01-01T08:00:00.010Z +-010010-01-01T08:00:00.010Z ++010010-01-01T00:00:00.010Z +-010010-01-01T00:00:00.010Z ++010010-01-01T00:00:00.010Z +-010010-01-01T00:00:00.010Z ++010010-01-01T00:00:00.010Z +-010010-01-01T00:00:00.010Z ++010009-12-31T23:59:00.010Z +-010011-12-31T23:59:00.010Z ++010010-01-01T00:01:00.010Z +-010010-01-01T00:01:00.010Z ++010009-12-31T23:50:00.010Z +-010011-12-31T23:50:00.010Z ++010010-01-01T00:10:00.010Z +-010010-01-01T00:10:00.010Z ++010009-12-31T23:00:00.010Z +-010011-12-31T23:00:00.010Z ++010010-01-01T01:00:00.010Z +-010010-01-01T01:00:00.010Z ++010009-12-31T22:59:00.010Z +-010011-12-31T22:59:00.010Z ++010010-01-01T01:01:00.010Z +-010010-01-01T01:01:00.010Z ++010009-12-31T22:50:00.010Z +-010011-12-31T22:50:00.010Z ++010010-01-01T01:10:00.010Z +-010010-01-01T01:10:00.010Z ++010009-12-31T14:00:00.010Z +-010011-12-31T14:00:00.010Z ++010010-01-01T10:00:00.010Z +-010010-01-01T10:00:00.010Z ++010009-12-31T13:59:00.010Z +-010011-12-31T13:59:00.010Z ++010010-01-01T10:01:00.010Z +-010010-01-01T10:01:00.010Z ++010009-12-31T13:50:00.010Z +-010011-12-31T13:50:00.010Z ++010010-01-01T10:10:00.010Z +-010010-01-01T10:10:00.010Z +0000-10-01T08:01:01.000Z +0000-10-01T01:01:01.000Z +0000-10-01T01:01:01.000Z +0000-10-01T01:01:01.000Z +0000-10-01T01:00:01.000Z +0000-10-01T01:02:01.000Z +0000-10-01T00:51:01.000Z +0000-10-01T01:11:01.000Z +0000-10-01T00:01:01.000Z +0000-10-01T02:01:01.000Z +0000-10-01T00:00:01.000Z +0000-10-01T02:02:01.000Z +0000-09-30T23:51:01.000Z +0000-10-01T02:11:01.000Z +0000-09-30T15:01:01.000Z +0000-10-01T11:01:01.000Z +0000-09-30T15:00:01.000Z +0000-10-01T11:02:01.000Z +0000-09-30T14:51:01.000Z +0000-10-01T11:11:01.000Z +0001-01-01T18:10:10.001Z +-000001-01-01T18:10:10.001Z +0001-01-01T10:10:10.001Z +-000001-01-01T10:10:10.001Z +0001-01-01T10:10:10.001Z +-000001-01-01T10:10:10.001Z +0001-01-01T10:10:10.001Z +-000001-01-01T10:10:10.001Z +0001-01-01T10:09:10.001Z +-000001-01-01T10:09:10.001Z +0001-01-01T10:11:10.001Z +-000001-01-01T10:11:10.001Z +0001-01-01T10:00:10.001Z +-000001-01-01T10:00:10.001Z +0001-01-01T10:20:10.001Z +-000001-01-01T10:20:10.001Z +0001-01-01T09:10:10.001Z +-000001-01-01T09:10:10.001Z +0001-01-01T11:10:10.001Z +-000001-01-01T11:10:10.001Z +0001-01-01T09:09:10.001Z +-000001-01-01T09:09:10.001Z +0001-01-01T11:11:10.001Z +-000001-01-01T11:11:10.001Z +0001-01-01T09:00:10.001Z +-000001-01-01T09:00:10.001Z +0001-01-01T11:20:10.001Z +-000001-01-01T11:20:10.001Z +0001-01-01T00:10:10.001Z +-000001-01-01T00:10:10.001Z +0001-01-01T20:10:10.001Z +-000001-01-01T20:10:10.001Z +0001-01-01T00:09:10.001Z +-000001-01-01T00:09:10.001Z +0001-01-01T20:11:10.001Z +-000001-01-01T20:11:10.001Z +0001-01-01T00:00:10.001Z +-000001-01-01T00:00:10.001Z +0001-01-01T20:20:10.001Z +-000001-01-01T20:20:10.001Z ++100000-10-01T07:00:00.100Z +-100000-10-01T07:00:00.100Z ++100000-10-01T00:00:00.100Z +-100000-10-01T00:00:00.100Z ++100000-10-01T00:00:00.100Z +-100000-10-01T00:00:00.100Z ++100000-10-01T00:00:00.100Z +-100000-10-01T00:00:00.100Z ++100000-09-30T23:59:00.100Z +-100000-09-30T23:59:00.100Z ++100000-10-01T00:01:00.100Z +-100000-10-01T00:01:00.100Z ++100000-09-30T23:50:00.100Z +-100000-09-30T23:50:00.100Z ++100000-10-01T00:10:00.100Z +-100000-10-01T00:10:00.100Z ++100000-09-30T23:00:00.100Z +-100000-09-30T23:00:00.100Z ++100000-10-01T01:00:00.100Z +-100000-10-01T01:00:00.100Z ++100000-09-30T22:59:00.100Z +-100000-09-30T22:59:00.100Z ++100000-10-01T01:01:00.100Z +-100000-10-01T01:01:00.100Z ++100000-09-30T22:50:00.100Z +-100000-09-30T22:50:00.100Z ++100000-10-01T01:10:00.100Z +-100000-10-01T01:10:00.100Z ++100000-09-30T14:00:00.100Z +-100000-09-30T14:00:00.100Z ++100000-10-01T10:00:00.100Z +-100000-10-01T10:00:00.100Z ++100000-09-30T13:59:00.100Z +-100000-09-30T13:59:00.100Z ++100000-10-01T10:01:00.100Z +-100000-10-01T10:01:00.100Z ++100000-09-30T13:50:00.100Z +-100000-09-30T13:50:00.100Z ++100000-10-01T10:10:00.100Z +-100000-10-01T10:10:00.100Z ++010010-01-01T00:00:00.000Z +-010010-01-01T00:00:00.000Z +0000-10-10T00:00:00.000Z +0001-01-01T00:00:00.000Z +-000001-01-01T00:00:00.000Z ++100000-10-10T00:00:00.000Z +-100000-10-10T00:00:00.000Z ++010010-01-01T08:00:00.000Z +-010010-01-01T08:00:00.000Z ++010010-01-01T00:00:00.000Z +-010010-01-01T00:00:00.000Z ++010010-01-01T00:00:00.000Z +-010010-01-01T00:00:00.000Z ++010010-01-01T00:00:00.000Z +-010010-01-01T00:00:00.000Z ++010009-12-31T23:59:00.000Z +-010011-12-31T23:59:00.000Z ++010010-01-01T00:01:00.000Z +-010010-01-01T00:01:00.000Z ++010009-12-31T23:50:00.000Z +-010011-12-31T23:50:00.000Z ++010010-01-01T00:10:00.000Z +-010010-01-01T00:10:00.000Z ++010009-12-31T23:00:00.000Z +-010011-12-31T23:00:00.000Z ++010010-01-01T01:00:00.000Z +-010010-01-01T01:00:00.000Z ++010009-12-31T22:59:00.000Z +-010011-12-31T22:59:00.000Z ++010010-01-01T01:01:00.000Z +-010010-01-01T01:01:00.000Z ++010009-12-31T22:50:00.000Z +-010011-12-31T22:50:00.000Z ++010010-01-01T01:10:00.000Z +-010010-01-01T01:10:00.000Z ++010009-12-31T14:00:00.000Z +-010011-12-31T14:00:00.000Z ++010010-01-01T10:00:00.000Z +-010010-01-01T10:00:00.000Z ++010009-12-31T13:59:00.000Z +-010011-12-31T13:59:00.000Z ++010010-01-01T10:01:00.000Z +-010010-01-01T10:01:00.000Z ++010009-12-31T13:50:00.000Z +-010011-12-31T13:50:00.000Z ++010010-01-01T10:10:00.000Z +-010010-01-01T10:10:00.000Z +0000-10-10T08:01:00.000Z +0000-10-10T01:01:00.000Z +0000-10-10T01:01:00.000Z +0000-10-10T01:01:00.000Z +0000-10-10T01:00:00.000Z +0000-10-10T01:02:00.000Z +0000-10-10T00:51:00.000Z +0000-10-10T01:11:00.000Z +0000-10-10T00:01:00.000Z +0000-10-10T02:01:00.000Z +0000-10-10T00:00:00.000Z +0000-10-10T02:02:00.000Z +0000-10-09T23:51:00.000Z +0000-10-10T02:11:00.000Z +0000-10-09T15:01:00.000Z +0000-10-10T11:01:00.000Z +0000-10-09T15:00:00.000Z +0000-10-10T11:02:00.000Z +0000-10-09T14:51:00.000Z +0000-10-10T11:11:00.000Z +0001-01-01T18:10:00.000Z +-000001-01-01T18:10:00.000Z +0001-01-01T10:10:00.000Z +-000001-01-01T10:10:00.000Z +0001-01-01T10:10:00.000Z +-000001-01-01T10:10:00.000Z +0001-01-01T10:10:00.000Z +-000001-01-01T10:10:00.000Z +0001-01-01T10:09:00.000Z +-000001-01-01T10:09:00.000Z +0001-01-01T10:11:00.000Z +-000001-01-01T10:11:00.000Z +0001-01-01T10:00:00.000Z +-000001-01-01T10:00:00.000Z +0001-01-01T10:20:00.000Z +-000001-01-01T10:20:00.000Z +0001-01-01T09:10:00.000Z +-000001-01-01T09:10:00.000Z +0001-01-01T11:10:00.000Z +-000001-01-01T11:10:00.000Z +0001-01-01T09:09:00.000Z +-000001-01-01T09:09:00.000Z +0001-01-01T11:11:00.000Z +-000001-01-01T11:11:00.000Z +0001-01-01T09:00:00.000Z +-000001-01-01T09:00:00.000Z +0001-01-01T11:20:00.000Z +-000001-01-01T11:20:00.000Z +0001-01-01T00:10:00.000Z +-000001-01-01T00:10:00.000Z +0001-01-01T20:10:00.000Z +-000001-01-01T20:10:00.000Z +0001-01-01T00:09:00.000Z +-000001-01-01T00:09:00.000Z +0001-01-01T20:11:00.000Z +-000001-01-01T20:11:00.000Z +0001-01-01T00:00:00.000Z +-000001-01-01T00:00:00.000Z +0001-01-01T20:20:00.000Z +-000001-01-01T20:20:00.000Z ++100000-10-10T07:00:00.000Z +-100000-10-10T07:00:00.000Z ++100000-10-10T00:00:00.000Z +-100000-10-10T00:00:00.000Z ++100000-10-10T00:00:00.000Z +-100000-10-10T00:00:00.000Z ++100000-10-10T00:00:00.000Z +-100000-10-10T00:00:00.000Z ++100000-10-09T23:59:00.000Z +-100000-10-09T23:59:00.000Z ++100000-10-10T00:01:00.000Z +-100000-10-10T00:01:00.000Z ++100000-10-09T23:50:00.000Z +-100000-10-09T23:50:00.000Z ++100000-10-10T00:10:00.000Z +-100000-10-10T00:10:00.000Z ++100000-10-09T23:00:00.000Z +-100000-10-09T23:00:00.000Z ++100000-10-10T01:00:00.000Z +-100000-10-10T01:00:00.000Z ++100000-10-09T22:59:00.000Z +-100000-10-09T22:59:00.000Z ++100000-10-10T01:01:00.000Z +-100000-10-10T01:01:00.000Z ++100000-10-09T22:50:00.000Z +-100000-10-09T22:50:00.000Z ++100000-10-10T01:10:00.000Z +-100000-10-10T01:10:00.000Z ++100000-10-09T14:00:00.000Z +-100000-10-09T14:00:00.000Z ++100000-10-10T10:00:00.000Z +-100000-10-10T10:00:00.000Z ++100000-10-09T13:59:00.000Z +-100000-10-09T13:59:00.000Z ++100000-10-10T10:01:00.000Z +-100000-10-10T10:01:00.000Z ++100000-10-09T13:50:00.000Z +-100000-10-09T13:50:00.000Z ++100000-10-10T10:10:00.000Z +-100000-10-10T10:10:00.000Z ++010010-01-01T08:00:00.000Z +-010010-01-01T08:00:00.000Z ++010010-01-01T00:00:00.000Z +-010010-01-01T00:00:00.000Z ++010010-01-01T00:00:00.000Z +-010010-01-01T00:00:00.000Z ++010010-01-01T00:00:00.000Z +-010010-01-01T00:00:00.000Z ++010009-12-31T23:59:00.000Z +-010011-12-31T23:59:00.000Z ++010010-01-01T00:01:00.000Z +-010010-01-01T00:01:00.000Z ++010009-12-31T23:50:00.000Z +-010011-12-31T23:50:00.000Z ++010010-01-01T00:10:00.000Z +-010010-01-01T00:10:00.000Z ++010009-12-31T23:00:00.000Z +-010011-12-31T23:00:00.000Z ++010010-01-01T01:00:00.000Z +-010010-01-01T01:00:00.000Z ++010009-12-31T22:59:00.000Z +-010011-12-31T22:59:00.000Z ++010010-01-01T01:01:00.000Z +-010010-01-01T01:01:00.000Z ++010009-12-31T22:50:00.000Z +-010011-12-31T22:50:00.000Z ++010010-01-01T01:10:00.000Z +-010010-01-01T01:10:00.000Z ++010009-12-31T14:00:00.000Z +-010011-12-31T14:00:00.000Z ++010010-01-01T10:00:00.000Z +-010010-01-01T10:00:00.000Z ++010009-12-31T13:59:00.000Z +-010011-12-31T13:59:00.000Z ++010010-01-01T10:01:00.000Z +-010010-01-01T10:01:00.000Z ++010009-12-31T13:50:00.000Z +-010011-12-31T13:50:00.000Z ++010010-01-01T10:10:00.000Z +-010010-01-01T10:10:00.000Z +0000-10-10T08:01:01.000Z +0000-10-10T01:01:01.000Z +0000-10-10T01:01:01.000Z +0000-10-10T01:01:01.000Z +0000-10-10T01:00:01.000Z +0000-10-10T01:02:01.000Z +0000-10-10T00:51:01.000Z +0000-10-10T01:11:01.000Z +0000-10-10T00:01:01.000Z +0000-10-10T02:01:01.000Z +0000-10-10T00:00:01.000Z +0000-10-10T02:02:01.000Z +0000-10-09T23:51:01.000Z +0000-10-10T02:11:01.000Z +0000-10-09T15:01:01.000Z +0000-10-10T11:01:01.000Z +0000-10-09T15:00:01.000Z +0000-10-10T11:02:01.000Z +0000-10-09T14:51:01.000Z +0000-10-10T11:11:01.000Z +0001-01-01T18:10:10.000Z +-000001-01-01T18:10:10.000Z +0001-01-01T10:10:10.000Z +-000001-01-01T10:10:10.000Z +0001-01-01T10:10:10.000Z +-000001-01-01T10:10:10.000Z +0001-01-01T10:10:10.000Z +-000001-01-01T10:10:10.000Z +0001-01-01T10:09:10.000Z +-000001-01-01T10:09:10.000Z +0001-01-01T10:11:10.000Z +-000001-01-01T10:11:10.000Z +0001-01-01T10:00:10.000Z +-000001-01-01T10:00:10.000Z +0001-01-01T10:20:10.000Z +-000001-01-01T10:20:10.000Z +0001-01-01T09:10:10.000Z +-000001-01-01T09:10:10.000Z +0001-01-01T11:10:10.000Z +-000001-01-01T11:10:10.000Z +0001-01-01T09:09:10.000Z +-000001-01-01T09:09:10.000Z +0001-01-01T11:11:10.000Z +-000001-01-01T11:11:10.000Z +0001-01-01T09:00:10.000Z +-000001-01-01T09:00:10.000Z +0001-01-01T11:20:10.000Z +-000001-01-01T11:20:10.000Z +0001-01-01T00:10:10.000Z +-000001-01-01T00:10:10.000Z +0001-01-01T20:10:10.000Z +-000001-01-01T20:10:10.000Z +0001-01-01T00:09:10.000Z +-000001-01-01T00:09:10.000Z +0001-01-01T20:11:10.000Z +-000001-01-01T20:11:10.000Z +0001-01-01T00:00:10.000Z +-000001-01-01T00:00:10.000Z +0001-01-01T20:20:10.000Z +-000001-01-01T20:20:10.000Z ++100000-10-10T07:00:00.000Z +-100000-10-10T07:00:00.000Z ++100000-10-10T00:00:00.000Z +-100000-10-10T00:00:00.000Z ++100000-10-10T00:00:00.000Z +-100000-10-10T00:00:00.000Z ++100000-10-10T00:00:00.000Z +-100000-10-10T00:00:00.000Z ++100000-10-09T23:59:00.000Z +-100000-10-09T23:59:00.000Z ++100000-10-10T00:01:00.000Z +-100000-10-10T00:01:00.000Z ++100000-10-09T23:50:00.000Z +-100000-10-09T23:50:00.000Z ++100000-10-10T00:10:00.000Z +-100000-10-10T00:10:00.000Z ++100000-10-09T23:00:00.000Z +-100000-10-09T23:00:00.000Z ++100000-10-10T01:00:00.000Z +-100000-10-10T01:00:00.000Z ++100000-10-09T22:59:00.000Z +-100000-10-09T22:59:00.000Z ++100000-10-10T01:01:00.000Z +-100000-10-10T01:01:00.000Z ++100000-10-09T22:50:00.000Z +-100000-10-09T22:50:00.000Z ++100000-10-10T01:10:00.000Z +-100000-10-10T01:10:00.000Z ++100000-10-09T14:00:00.000Z +-100000-10-09T14:00:00.000Z ++100000-10-10T10:00:00.000Z +-100000-10-10T10:00:00.000Z ++100000-10-09T13:59:00.000Z +-100000-10-09T13:59:00.000Z ++100000-10-10T10:01:00.000Z +-100000-10-10T10:01:00.000Z ++100000-10-09T13:50:00.000Z +-100000-10-09T13:50:00.000Z ++100000-10-10T10:10:00.000Z +-100000-10-10T10:10:00.000Z ++010010-01-01T08:00:00.010Z +-010010-01-01T08:00:00.010Z ++010010-01-01T00:00:00.010Z +-010010-01-01T00:00:00.010Z ++010010-01-01T00:00:00.010Z +-010010-01-01T00:00:00.010Z ++010010-01-01T00:00:00.010Z +-010010-01-01T00:00:00.010Z ++010009-12-31T23:59:00.010Z +-010011-12-31T23:59:00.010Z ++010010-01-01T00:01:00.010Z +-010010-01-01T00:01:00.010Z ++010009-12-31T23:50:00.010Z +-010011-12-31T23:50:00.010Z ++010010-01-01T00:10:00.010Z +-010010-01-01T00:10:00.010Z ++010009-12-31T23:00:00.010Z +-010011-12-31T23:00:00.010Z ++010010-01-01T01:00:00.010Z +-010010-01-01T01:00:00.010Z ++010009-12-31T22:59:00.010Z +-010011-12-31T22:59:00.010Z ++010010-01-01T01:01:00.010Z +-010010-01-01T01:01:00.010Z ++010009-12-31T22:50:00.010Z +-010011-12-31T22:50:00.010Z ++010010-01-01T01:10:00.010Z +-010010-01-01T01:10:00.010Z ++010009-12-31T14:00:00.010Z +-010011-12-31T14:00:00.010Z ++010010-01-01T10:00:00.010Z +-010010-01-01T10:00:00.010Z ++010009-12-31T13:59:00.010Z +-010011-12-31T13:59:00.010Z ++010010-01-01T10:01:00.010Z +-010010-01-01T10:01:00.010Z ++010009-12-31T13:50:00.010Z +-010011-12-31T13:50:00.010Z ++010010-01-01T10:10:00.010Z +-010010-01-01T10:10:00.010Z +0000-10-10T08:01:01.000Z +0000-10-10T01:01:01.000Z +0000-10-10T01:01:01.000Z +0000-10-10T01:01:01.000Z +0000-10-10T01:00:01.000Z +0000-10-10T01:02:01.000Z +0000-10-10T00:51:01.000Z +0000-10-10T01:11:01.000Z +0000-10-10T00:01:01.000Z +0000-10-10T02:01:01.000Z +0000-10-10T00:00:01.000Z +0000-10-10T02:02:01.000Z +0000-10-09T23:51:01.000Z +0000-10-10T02:11:01.000Z +0000-10-09T15:01:01.000Z +0000-10-10T11:01:01.000Z +0000-10-09T15:00:01.000Z +0000-10-10T11:02:01.000Z +0000-10-09T14:51:01.000Z +0000-10-10T11:11:01.000Z +0001-01-01T18:10:10.001Z +-000001-01-01T18:10:10.001Z +0001-01-01T10:10:10.001Z +-000001-01-01T10:10:10.001Z +0001-01-01T10:10:10.001Z +-000001-01-01T10:10:10.001Z +0001-01-01T10:10:10.001Z +-000001-01-01T10:10:10.001Z +0001-01-01T10:09:10.001Z +-000001-01-01T10:09:10.001Z +0001-01-01T10:11:10.001Z +-000001-01-01T10:11:10.001Z +0001-01-01T10:00:10.001Z +-000001-01-01T10:00:10.001Z +0001-01-01T10:20:10.001Z +-000001-01-01T10:20:10.001Z +0001-01-01T09:10:10.001Z +-000001-01-01T09:10:10.001Z +0001-01-01T11:10:10.001Z +-000001-01-01T11:10:10.001Z +0001-01-01T09:09:10.001Z +-000001-01-01T09:09:10.001Z +0001-01-01T11:11:10.001Z +-000001-01-01T11:11:10.001Z +0001-01-01T09:00:10.001Z +-000001-01-01T09:00:10.001Z +0001-01-01T11:20:10.001Z +-000001-01-01T11:20:10.001Z +0001-01-01T00:10:10.001Z +-000001-01-01T00:10:10.001Z +0001-01-01T20:10:10.001Z +-000001-01-01T20:10:10.001Z +0001-01-01T00:09:10.001Z +-000001-01-01T00:09:10.001Z +0001-01-01T20:11:10.001Z +-000001-01-01T20:11:10.001Z +0001-01-01T00:00:10.001Z +-000001-01-01T00:00:10.001Z +0001-01-01T20:20:10.001Z +-000001-01-01T20:20:10.001Z ++100000-10-10T07:00:00.100Z +-100000-10-10T07:00:00.100Z ++100000-10-10T00:00:00.100Z +-100000-10-10T00:00:00.100Z ++100000-10-10T00:00:00.100Z +-100000-10-10T00:00:00.100Z ++100000-10-10T00:00:00.100Z +-100000-10-10T00:00:00.100Z ++100000-10-09T23:59:00.100Z +-100000-10-09T23:59:00.100Z ++100000-10-10T00:01:00.100Z +-100000-10-10T00:01:00.100Z ++100000-10-09T23:50:00.100Z +-100000-10-09T23:50:00.100Z ++100000-10-10T00:10:00.100Z +-100000-10-10T00:10:00.100Z ++100000-10-09T23:00:00.100Z +-100000-10-09T23:00:00.100Z ++100000-10-10T01:00:00.100Z +-100000-10-10T01:00:00.100Z ++100000-10-09T22:59:00.100Z +-100000-10-09T22:59:00.100Z ++100000-10-10T01:01:00.100Z +-100000-10-10T01:01:00.100Z ++100000-10-09T22:50:00.100Z +-100000-10-09T22:50:00.100Z ++100000-10-10T01:10:00.100Z +-100000-10-10T01:10:00.100Z ++100000-10-09T14:00:00.100Z +-100000-10-09T14:00:00.100Z ++100000-10-10T10:00:00.100Z +-100000-10-10T10:00:00.100Z ++100000-10-09T13:59:00.100Z +-100000-10-09T13:59:00.100Z ++100000-10-10T10:01:00.100Z +-100000-10-10T10:01:00.100Z ++100000-10-09T13:50:00.100Z +-100000-10-09T13:50:00.100Z ++100000-10-10T10:10:00.100Z +-100000-10-10T10:10:00.100Z +pass diff --git a/test/Date/parseValidISO.js b/test/Date/parseValidISO.js new file mode 100644 index 00000000000..0e9ea295508 --- /dev/null +++ b/test/Date/parseValidISO.js @@ -0,0 +1,227 @@ +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- + +/// +if (this.WScript && this.WScript.LoadScriptFile) { // Check for running in ch + this.WScript.LoadScriptFile("..\\UnitTestFramework\\UnitTestFramework.js"); +} + +initializeGenerateDateStrings(); +var yearDigits = 0, monthDigits = 0, dayDigits = 0, hourMinuteDigits = 0, secondDigits = 0, millisecondDigits = 0; +var tests = [{ + name: "Test if valid ISO date strings are parsed correctly", + body: function () { + for (yearDigits = 4; yearDigits <= 6; yearDigits += 2) { + dayDigits = monthDigits = 0; + runGenerateTestWithValidTime(); + monthDigits = 2; + runGenerateTestWithValidTime(); + dayDigits = 2; + runGenerateTestWithValidTime(); + } + } +}]; +function runGenerateTestWithValidTime() { + millisecondDigits = secondDigits = hourMinuteDigits = 0; + runGenerateTest(); + hourMinuteDigits = 2; + runGenerateTest(); + secondDigits = 2; + runGenerateTest(); + millisecondDigits = 3; + runGenerateTest(); +} + +testRunner.run(tests, { verbose: WScript.Arguments[0] != "summary" }); +// Test-specific helpers +function runTest(testString) { + var dateObj = new Date(testString); + var timeValue1; + try { + timeValue1 = dateObj.getTime(); + } catch (ex) { + assert.fail("Unable to parse Date \"" + testString + "\". Error is " + ex.message); + } + assert.isFalse(isNaN(timeValue1), "Unable to parse Date \"" + testString + "\""); + var ISOString = dateObj.toISOString(); + console.log(ISOString); + var timeValue2; + try { + timeValue2 = new Date(ISOString).getTime(); + } catch (ex) { + assert.fail("Unable to parse Date \"" + ISOString + "\". Error is " + ex.message); + } + assert.areEqual(timeValue1, timeValue2, "Date \"" + testString + "\" is not parsed correctly."); +} + +function runGenerateTest() { + var s = + generateDateStrings( + yearDigits, + monthDigits, + dayDigits, + hourMinuteDigits, + hourMinuteDigits, + secondDigits, + millisecondDigits); + for (var i = 0; i < s.length; ++i) + runTest(s[i]); +} + +var signs, zones; +function initializeGenerateDateStrings() { + signs = ["+", "-"]; + zones = ["", "Z"]; + var zoneDigitCombinations = ["00", "01", "10"]; + for (var i = 0; i < zoneDigitCombinations.length; ++i) + for (var j = 0; j < zoneDigitCombinations.length; ++j) + for (var k = 0; k < signs.length; ++k) + zones.push(signs[k] + zoneDigitCombinations[i] + ":" + zoneDigitCombinations[j]); +} + +// Generates date strings in the following format: +// date format: "[+|-]YYYYYY[-MM[-DD]]" +// separator: "T| " +// time format: "HH:mm[:ss[.sss]]" +// time zone: "Z|(+|-)HH:mm" +// - The separator is required only if both the date and time portions are included in the string. +// - Zero-padding is optional +// - Positive sign (+) is optional when the year is nonnegative +// - Negative sign (-) is optional when the year is zero +// - Time zone is optional +// +// The function will return an array of strings to test against, based on the parameters. +function generateDateStrings( + yearDigits, // number of digits to include for the year (0-6), 0 - exclude the year (monthDigits must also be 0) + monthDigits, // number of digits to include for the month (0-2), 0 - exclude the month (dayDigits must also be 0) + dayDigits, // number of digits to include for the day (0-2), 0 - exclude the day + hourDigits, // number of digits to include for the hour (0-2), 0 - exclude the hour (minuteDigits must also be 0) + minuteDigits, // number of digits to include for the minute (0-2), 0 - exclude the minute (hourDigits and secondDigits must also be 0) + secondDigits, // number of digits to include for the second (0-2), 0 - exclude the second (millisecondDigits must also be 0) + millisecondDigits) // number of digits to include for the millisecond (0-3), 0 - exclude the millisecond +{ + if (yearDigits === 0 && monthDigits !== 0 || + monthDigits === 0 && dayDigits !== 0 || + hourDigits === 0 && minuteDigits !== 0 || + minuteDigits === 0 && (hourDigits !== 0 || secondDigits !== 0) || + secondDigits === 0 && millisecondDigits !== 0 || + yearDigits === 0 && (hourDigits === 0 || minuteDigits === 0)) + return []; + + var s = [""]; + + if (yearDigits !== 0) { + appendDigits(s, yearDigits, true); + if (monthDigits !== 0) { + append(s, ["-"]); + appendDigits(s, monthDigits, false); + if (dayDigits !== 0) { + append(s, ["-"]); + appendDigits(s, dayDigits, false); + } + } + } + + if (hourDigits !== 0 && minuteDigits !== 0) { + append(s, ["T"]); + appendDigits(s, hourDigits, true); + append(s, [":"]); + appendDigits(s, minuteDigits, true); + if (secondDigits !== 0) { + append(s, [":"]); + appendDigits(s, secondDigits, true); + if (millisecondDigits !== 0) { + append(s, ["."]); + appendDigits(s, millisecondDigits, true); + } + } + } + + if (yearDigits !== 0 && hourDigits !== 0 && minuteDigits !== 0) + s = applyToEach(s, zones, function (str, zone) { return str + zone; }); + if (yearDigits === 6) { + s = + applyToEach( + s, + signs, + function (str, sign) { + if (sign === "-" && str.length >= 6 && str.substring(0, 6) === "000000") + return undefined; // "-000000" is not allowed + return sign + str; + }); + } + + return s; +} + +// Appends interesting combinations of n digits to the string array +function appendDigits(a, n, includeZero) { + var d = []; + switch (n) { + case 0: + break; + + case 1: + if (includeZero) + d.push("0"); + d.push("1"); + append(a, d); + break; + + case 3: + case 6: + if (n === 3) + d.push("010"); + else + d.push("010010"); + + default: + var z = zeroes(n - 1); + if (includeZero) + d.push(z + "0"); + d.push(z + "1"); + d.push("1" + z); + append(a, d); + break; + } +} + +// Returns a string of n zeroes +function zeroes(n) { + var s = ""; + while (n-- > 0) + s += "0"; + return s; +} + +// Appends patterns to the string array. The array is extended to acommodate the number of patterns, and the patterns are +// repeated to acommodate the length of the array. +function append(a, p) { + extend(a, p.length); + for (var i = 0; i < a.length; ++i) + a[i] += p[i % p.length]; +} + +// Applies the function 'f' to each combination of elements in 'a' and 'p'. 'f' will receive the element of 'a' on which it +// should apply the pattern from 'p' and it should return the modified string. The string returned by 'f' will be pushed onto a +// new array, which will be returned. +function applyToEach(a, p, f) { + var a2 = []; + for (var i = 0; i < a.length; ++i) { + for (var j = 0; j < p.length; ++j) { + var transformed = f(a[i], p[j]); + if (transformed !== undefined) + a2.push(transformed); + } + } + return a2; +} + +// Extends an array to have length n, by copying the last element as necessary +function extend(a, n) { + var originalLength = a.length; + for (var i = originalLength; i < n; ++i) + a.push(a[originalLength - 1]); +} diff --git a/test/Date/rlexe.xml b/test/Date/rlexe.xml index 1c246c23cd7..25e1e3193df 100644 --- a/test/Date/rlexe.xml +++ b/test/Date/rlexe.xml @@ -44,15 +44,6 @@ toISO_3.baseline - - - parseISO.js - parseISO.baseline - - - exclude_jenkins,exclude_xplat,Slow - - dateutc.js @@ -168,4 +159,23 @@ -args summary -endargs + + + parseValidISO.js + parseValidISO.baseline + + + exclude_jenkins,exclude_xplat + -args summary -endargs + + + + + parseInvalidISO.js + parseInvalidISO.baseline + + + exclude_jenkins,exclude_xplat + + From 642331d00b997b835339d3d9505904c06b0831c0 Mon Sep 17 00:00:00 2001 From: Taylor Woll Date: Fri, 26 Jan 2018 17:11:10 -0800 Subject: [PATCH 03/18] OS#14763260: Correctly update RegExp.$1 after RegExp.prototype.test matches and used a cached value Regression from https://github.com/Microsoft/ChakraCore/pull/3802 - if we hit the cache, we don't update the Regex constructor object with the last match and so retrieving properties about the match from the regex constructor object fails. Fixed by adding an invalidation mechanism to the `JavascriptRegExpConstructor`. If we hit the cache, we'll mark the Regex constructor object last match properties as invalidated and we will then compute them on-demand the first time they're needed. Fixes: https://microsoft.visualstudio.com/web/wi.aspx?id=14763260 --- .../Library/JavascriptRegExpConstructor.cpp | 34 +++++++++++++++++-- .../Library/JavascriptRegExpConstructor.h | 2 ++ lib/Runtime/Library/RegexHelper.cpp | 19 ++++++++++- lib/Runtime/Library/RegexHelper.h | 2 ++ test/Regex/bug_OS14763260.js | 26 ++++++++++++++ test/Regex/rlexe.xml | 6 ++++ 6 files changed, 85 insertions(+), 4 deletions(-) create mode 100644 test/Regex/bug_OS14763260.js diff --git a/lib/Runtime/Library/JavascriptRegExpConstructor.cpp b/lib/Runtime/Library/JavascriptRegExpConstructor.cpp index 7d3101268fd..02f2e3b7c50 100644 --- a/lib/Runtime/Library/JavascriptRegExpConstructor.cpp +++ b/lib/Runtime/Library/JavascriptRegExpConstructor.cpp @@ -17,6 +17,7 @@ namespace Js JavascriptRegExpConstructor::JavascriptRegExpConstructor(DynamicType * type) : RuntimeFunction(type, &JavascriptRegExp::EntryInfo::NewInstance), reset(false), + invalidatedLastMatch(false), lastPattern(nullptr), lastMatch() // undefined { @@ -53,17 +54,44 @@ namespace Js this->lastInput = lastInput; this->lastMatch = lastMatch; this->reset = true; + this->invalidatedLastMatch = false; + } + + void JavascriptRegExpConstructor::InvalidateLastMatch(UnifiedRegex::RegexPattern* lastPattern, JavascriptString* lastInput) + { + AssertMsg(lastPattern != nullptr, "lastPattern should not be null"); + AssertMsg(lastInput != nullptr, "lastInput should not be null"); + AssertMsg(JavascriptOperators::GetTypeId(lastInput) != TypeIds_Null, "lastInput should not be JavaScript null"); + + this->lastPattern = lastPattern; + this->lastInput = lastInput; + this->lastMatch.Reset(); + this->reset = true; + this->invalidatedLastMatch = true; } void JavascriptRegExpConstructor::EnsureValues() { if (reset) { - Assert(!lastMatch.IsUndefined()); ScriptContext* scriptContext = this->GetScriptContext(); + const CharCount lastInputLen = lastInput->GetLength(); + const wchar_t* lastInputStr = lastInput->GetString(); UnifiedRegex::RegexPattern* pattern = lastPattern; + + // When we perform a regex test operation it's possible the result of the operation will be loaded from a cache and the match will not be computed and updated in the ctor. + // In that case we invalidate the last match stored in the ctor and will need to compute it before it will be accessible via $1 etc. + // Since we only do this for the case of RegExp.prototype.test cache hit, we know several things: + // - The regex is not global or sticky + // - There was a match (test returned true) + if (invalidatedLastMatch) + { + this->lastMatch = RegexHelper::SimpleMatch(scriptContext, pattern, lastInputStr, lastInputLen, 0); + invalidatedLastMatch = false; + } + + Assert(!lastMatch.IsUndefined()); JavascriptString* emptyString = scriptContext->GetLibrary()->GetEmptyString(); - const CharCount lastInputLen = lastInput->GetLength(); // IE8 quirk: match of length 0 is regarded as length 1 CharCount lastIndexVal = lastMatch.EndOffset(); this->index = JavascriptNumber::ToVar(lastMatch.offset, scriptContext); @@ -82,7 +110,7 @@ namespace Js // every match is prohibitively slow. Instead, run the match again using the known last input string. if (!pattern->WasLastMatchSuccessful()) { - RegexHelper::SimpleMatch(scriptContext, pattern, lastInput->GetString(), lastInputLen, lastMatch.offset); + RegexHelper::SimpleMatch(scriptContext, pattern, lastInputStr, lastInputLen, lastMatch.offset); } Assert(pattern->WasLastMatchSuccessful()); for (int groupId = 1; groupId < min(numGroups, NumCtorCaptures); groupId++) diff --git a/lib/Runtime/Library/JavascriptRegExpConstructor.h b/lib/Runtime/Library/JavascriptRegExpConstructor.h index ef3cce251c2..1b473ba1dab 100644 --- a/lib/Runtime/Library/JavascriptRegExpConstructor.h +++ b/lib/Runtime/Library/JavascriptRegExpConstructor.h @@ -53,11 +53,13 @@ namespace Js bool GetPropertyBuiltIns(PropertyId propertyId, Var* value, BOOL* result); bool SetPropertyBuiltIns(PropertyId propertyId, Var value, BOOL* result); void SetLastMatch(UnifiedRegex::RegexPattern* lastPattern, JavascriptString* lastInput, UnifiedRegex::GroupInfo lastMatch); + void InvalidateLastMatch(UnifiedRegex::RegexPattern* lastPattern, JavascriptString* lastInput); void EnsureValues(); Field(UnifiedRegex::RegexPattern*) lastPattern; Field(JavascriptString*) lastInput; + Field(bool) invalidatedLastMatch; // true if last match must be recalculated before use Field(UnifiedRegex::GroupInfo) lastMatch; Field(bool) reset; // true if following fields must be recalculated from above before first use Field(Var) lastParen; diff --git a/lib/Runtime/Library/RegexHelper.cpp b/lib/Runtime/Library/RegexHelper.cpp index e69f2a58a3c..ea0ce2c9f1c 100644 --- a/lib/Runtime/Library/RegexHelper.cpp +++ b/lib/Runtime/Library/RegexHelper.cpp @@ -691,13 +691,20 @@ namespace Js { Assert(useCache); cachedResult = (cache->resultBV.Test(cacheIndex) != 0); + + // If our cache says this test should produce a match (which we aren't going to compute), + // notify the Ctor to invalidate the last match so it must be recomputed before access. + if (cachedResult) + { + InvalidateLastMatchOnCtor(scriptContext, regularExpression, input); + } + // for debug builds, let's still do the real test so we can validate values in the cache #if !DBG return JavascriptBoolean::ToVar(cachedResult, scriptContext); #endif } - CharCount offset; if (!GetInitialOffset(isGlobal, isSticky, regularExpression, inputLength, offset)) { @@ -2087,6 +2094,16 @@ namespace Js } } + void RegexHelper::InvalidateLastMatchOnCtor(ScriptContext* scriptContext, JavascriptRegExp* regularExpression, JavascriptString* lastInput, bool useSplitPattern) + { + Assert(lastInput); + + UnifiedRegex::RegexPattern* pattern = useSplitPattern + ? regularExpression->GetSplitPattern() + : regularExpression->GetPattern(); + scriptContext->GetLibrary()->GetRegExpConstructor()->InvalidateLastMatch(pattern, lastInput); + } + bool RegexHelper::GetInitialOffset(bool isGlobal, bool isSticky, JavascriptRegExp* regularExpression, CharCount inputLength, CharCount& offset) { if (isGlobal || isSticky) diff --git a/lib/Runtime/Library/RegexHelper.h b/lib/Runtime/Library/RegexHelper.h index 387cfe32c5d..c53bdc4c9ff 100644 --- a/lib/Runtime/Library/RegexHelper.h +++ b/lib/Runtime/Library/RegexHelper.h @@ -58,6 +58,8 @@ namespace Js , UnifiedRegex::GroupInfo lastSuccessfulMatch , bool useSplitPattern ); + static void InvalidateLastMatchOnCtor(ScriptContext* scriptContext, JavascriptRegExp* regularExpression, JavascriptString* lastInput, bool useSplitPattern = false); + static bool GetInitialOffset(bool isGlobal, bool isSticky, JavascriptRegExp* regularExpression, CharCount inputLength, CharCount& offset); static JavascriptArray* CreateMatchResult(void *const stackAllocationPointer, ScriptContext* scriptContext, bool isGlobal, int numGroups, JavascriptString* input); static void FinalizeMatchResult(ScriptContext* scriptContext, bool isGlobal, JavascriptArray* arr, UnifiedRegex::GroupInfo match); diff --git a/test/Regex/bug_OS14763260.js b/test/Regex/bug_OS14763260.js new file mode 100644 index 00000000000..9552fece7c7 --- /dev/null +++ b/test/Regex/bug_OS14763260.js @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- + +WScript.LoadScriptFile("..\\UnitTestFramework\\UnitTestFramework.js"); + +var tests = [ + { + name: "Verify last match invalidated as expected", + body: function () { + const r1 = /(abc)/; + const r2 = /(def)/; + const s1 = "abc"; + const s2 = "def"; + + r1.test(s1); + r2.test(s2); + r1.test(s1); + + assert.areEqual("abc", RegExp.$1, "Stale last match should be invalidated by second r1.test(s1)"); + } + }, +]; + +testRunner.runTests(tests, { verbose: WScript.Arguments[0] != "summary" }); diff --git a/test/Regex/rlexe.xml b/test/Regex/rlexe.xml index 391983e0d6a..3662195c2eb 100644 --- a/test/Regex/rlexe.xml +++ b/test/Regex/rlexe.xml @@ -206,4 +206,10 @@ -args summary -endargs + + + bug_OS14763260.js + -args summary -endargs + + From 7f9822abb1430ae13186691798c279057773cec6 Mon Sep 17 00:00:00 2001 From: Taylor Woll Date: Fri, 26 Jan 2018 18:10:09 -0800 Subject: [PATCH 04/18] Fix MacOS build --- lib/Runtime/Library/JavascriptRegExpConstructor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Runtime/Library/JavascriptRegExpConstructor.cpp b/lib/Runtime/Library/JavascriptRegExpConstructor.cpp index 02f2e3b7c50..1c906248412 100644 --- a/lib/Runtime/Library/JavascriptRegExpConstructor.cpp +++ b/lib/Runtime/Library/JavascriptRegExpConstructor.cpp @@ -76,7 +76,7 @@ namespace Js { ScriptContext* scriptContext = this->GetScriptContext(); const CharCount lastInputLen = lastInput->GetLength(); - const wchar_t* lastInputStr = lastInput->GetString(); + const char16* lastInputStr = lastInput->GetString(); UnifiedRegex::RegexPattern* pattern = lastPattern; // When we perform a regex test operation it's possible the result of the operation will be loaded from a cache and the match will not be computed and updated in the ctor. From dd054ff055a5d614d2311bf2a0c2d2f40709085f Mon Sep 17 00:00:00 2001 From: Oguz Bastemur Date: Fri, 26 Jan 2018 12:03:46 -0800 Subject: [PATCH 05/18] TypedArray: add HasVirtualTableInfo to check CrossSite --- lib/Runtime/Library/TypedArray.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/Runtime/Library/TypedArray.h b/lib/Runtime/Library/TypedArray.h index b79770c23ba..583a59d7ada 100644 --- a/lib/Runtime/Library/TypedArray.h +++ b/lib/Runtime/Library/TypedArray.h @@ -265,6 +265,10 @@ namespace Js static BOOL Is(Var aValue); static TypedArray* FromVar(Var aValue); static TypedArray* UnsafeFromVar(Var aValue); + static BOOL HasVirtualTableInfo(Var aValue) + { + return VirtualTableInfo>::HasVirtualTable(aValue) || VirtualTableInfo>>::HasVirtualTable(aValue); + } inline Var BaseTypedDirectGetItem(__in uint32 index) { From 680f4c9782a0c62c7287fcf85e0aa279d81e6353 Mon Sep 17 00:00:00 2001 From: Taylor Woll Date: Mon, 29 Jan 2018 13:49:54 -0800 Subject: [PATCH 06/18] Add test cases --- .../Library/JavascriptRegExpConstructor.h | 2 +- test/Regex/bug_OS14763260.js | 25 +++++++++++++++++-- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/lib/Runtime/Library/JavascriptRegExpConstructor.h b/lib/Runtime/Library/JavascriptRegExpConstructor.h index 1b473ba1dab..ec6749ea1ef 100644 --- a/lib/Runtime/Library/JavascriptRegExpConstructor.h +++ b/lib/Runtime/Library/JavascriptRegExpConstructor.h @@ -59,8 +59,8 @@ namespace Js Field(UnifiedRegex::RegexPattern*) lastPattern; Field(JavascriptString*) lastInput; - Field(bool) invalidatedLastMatch; // true if last match must be recalculated before use Field(UnifiedRegex::GroupInfo) lastMatch; + Field(bool) invalidatedLastMatch; // true if last match must be recalculated before use Field(bool) reset; // true if following fields must be recalculated from above before first use Field(Var) lastParen; Field(Var) lastIndex; diff --git a/test/Regex/bug_OS14763260.js b/test/Regex/bug_OS14763260.js index 9552fece7c7..e9b20572d4a 100644 --- a/test/Regex/bug_OS14763260.js +++ b/test/Regex/bug_OS14763260.js @@ -12,13 +12,34 @@ var tests = [ const r1 = /(abc)/; const r2 = /(def)/; const s1 = "abc"; - const s2 = "def"; + const s2 = " def"; r1.test(s1); + + assert.areEqual("abc", RegExp.input, "RegExp.input property caclculated correctly"); + assert.areEqual("abc", RegExp['$_'], "RegExp.$_ property caclculated correctly"); + assert.areEqual("abc", RegExp.lastMatch, "RegExp.lastMatch property caclculated correctly"); + assert.areEqual("abc", RegExp['$&'], "RegExp.$& property caclculated correctly"); + assert.areEqual("abc", RegExp.$1, "RegExp.$1 property caclculated correctly"); + assert.areEqual(0, RegExp.index, "RegExp.index property caclculated correctly"); + r2.test(s2); + + assert.areEqual(" def", RegExp.input, "RegExp.input property caclculated correctly"); + assert.areEqual(" def", RegExp['$_'], "RegExp.$_ property caclculated correctly"); + assert.areEqual("def", RegExp.lastMatch, "RegExp.lastMatch property caclculated correctly"); + assert.areEqual("def", RegExp['$&'], "RegExp.$& property caclculated correctly"); + assert.areEqual("def", RegExp.$1, "RegExp.$1 property caclculated correctly"); + assert.areEqual(1, RegExp.index, "RegExp.index property caclculated correctly"); + r1.test(s1); - assert.areEqual("abc", RegExp.$1, "Stale last match should be invalidated by second r1.test(s1)"); + assert.areEqual("abc", RegExp.input, "Stale RegExp.input property should be invalidated by second r1.test(s1)"); + assert.areEqual("abc", RegExp['$_'], "Stale RegExp.$_ property should be invalidated by second r1.test(s1)"); + assert.areEqual("abc", RegExp.lastMatch, "Stale RegExp.lastMatch should be invalidated by second r1.test(s1)"); + assert.areEqual("abc", RegExp['$&'], "Stale RegExp.$& property should be invalidated by second r1.test(s1)"); + assert.areEqual("abc", RegExp.$1, "Stale RegExp.$1 should be invalidated by second r1.test(s1)"); + assert.areEqual(0, RegExp.index, "Stale RegExp.index property should be invalidated by second r1.test(s1)"); } }, ]; From 1d964c2341491b5fb0f175ae1424c98da3a1530d Mon Sep 17 00:00:00 2001 From: Sandeep Agarwal Date: Fri, 19 Jan 2018 10:29:49 -0800 Subject: [PATCH 07/18] OS#15522456 ScriptContext created after calling JsDiagStopDebugging should set debugging mode as SourceRunDown instead of Debugging. Found by OSS-Fuzz. --- lib/Jsrt/Jsrt.cpp | 22 ++++++++++++++++------ lib/Jsrt/JsrtDiag.cpp | 10 +++++++--- test/Debugger/emptyJson.dbg.baseline | 1 + test/Debugger/loadscript_after_detach.js | 17 +++++++++++++++++ test/Debugger/rlexe.xml | 6 ++++++ 5 files changed, 47 insertions(+), 9 deletions(-) create mode 100644 test/Debugger/emptyJson.dbg.baseline create mode 100644 test/Debugger/loadscript_after_detach.js diff --git a/lib/Jsrt/Jsrt.cpp b/lib/Jsrt/Jsrt.cpp index f9656729846..0bb3af94ca3 100644 --- a/lib/Jsrt/Jsrt.cpp +++ b/lib/Jsrt/Jsrt.cpp @@ -178,17 +178,27 @@ JsErrorCode CreateContextCore(_In_ JsRuntimeHandle runtimeHandle, _In_ TTDRecord if(jsrtDebugManager != nullptr) { + // JsDiagStartDebugging was called + threadContext->GetDebugManager()->SetLocalsDisplayFlags(Js::DebugManager::LocalsDisplayFlags::LocalsDisplayFlags_NoGroupMethods); + Js::ScriptContext* scriptContext = context->GetScriptContext(); - scriptContext->InitializeDebugging(); Js::DebugContext* debugContext = scriptContext->GetDebugContext(); debugContext->SetHostDebugContext(jsrtDebugManager); - Js::ProbeContainer* probeContainer = debugContext->GetProbeContainer(); - probeContainer->InitializeInlineBreakEngine(jsrtDebugManager); - probeContainer->InitializeDebuggerScriptOptionCallback(jsrtDebugManager); - - threadContext->GetDebugManager()->SetLocalsDisplayFlags(Js::DebugManager::LocalsDisplayFlags::LocalsDisplayFlags_NoGroupMethods); + if (!jsrtDebugManager->IsDebugEventCallbackSet()) + { + // JsDiagStopDebugging was called so we need to be in SourceRunDownMode + debugContext->SetDebuggerMode(Js::DebuggerMode::SourceRundown); + } + else + { + // Set Debugging mode + scriptContext->InitializeDebugging(); + Js::ProbeContainer* probeContainer = debugContext->GetProbeContainer(); + probeContainer->InitializeInlineBreakEngine(jsrtDebugManager); + probeContainer->InitializeDebuggerScriptOptionCallback(jsrtDebugManager); + } } #endif diff --git a/lib/Jsrt/JsrtDiag.cpp b/lib/Jsrt/JsrtDiag.cpp index c80c62e01bf..fafd982dd62 100644 --- a/lib/Jsrt/JsrtDiag.cpp +++ b/lib/Jsrt/JsrtDiag.cpp @@ -99,9 +99,13 @@ CHAKRA_API JsDiagStartDebugging( return JsErrorFatal; } - Js::ProbeContainer* probeContainer = debugContext->GetProbeContainer(); - probeContainer->InitializeInlineBreakEngine(jsrtDebugManager); - probeContainer->InitializeDebuggerScriptOptionCallback(jsrtDebugManager); + // ScriptContext might get closed in OnDebuggerAttached + if (!scriptContext->IsClosed()) + { + Js::ProbeContainer* probeContainer = debugContext->GetProbeContainer(); + probeContainer->InitializeInlineBreakEngine(jsrtDebugManager); + probeContainer->InitializeDebuggerScriptOptionCallback(jsrtDebugManager); + } } return JsNoError; diff --git a/test/Debugger/emptyJson.dbg.baseline b/test/Debugger/emptyJson.dbg.baseline new file mode 100644 index 00000000000..0637a088a01 --- /dev/null +++ b/test/Debugger/emptyJson.dbg.baseline @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/Debugger/loadscript_after_detach.js b/test/Debugger/loadscript_after_detach.js new file mode 100644 index 00000000000..e52bc839e9d --- /dev/null +++ b/test/Debugger/loadscript_after_detach.js @@ -0,0 +1,17 @@ +//------------------------------------------------------------------------------------------------------- +// Copyright (C) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. +//------------------------------------------------------------------------------------------------------- + +var count = 0; +function foo() { + count++; + if (count == 3) { + WScript.LoadScript("", "samethread"); // ScriptContext should be created in sourcerundown mode instead of debugging mode + } +} +foo(); +WScript.Attach(foo); +WScript.Detach(foo); +WScript.Attach(foo); +WScript.Echo("pass"); diff --git a/test/Debugger/rlexe.xml b/test/Debugger/rlexe.xml index 43e5f0fa49c..065ceba6d42 100644 --- a/test/Debugger/rlexe.xml +++ b/test/Debugger/rlexe.xml @@ -74,4 +74,10 @@ dumpFunctionProperties.js + + + -dbgbaseline:emptyJson.dbg.baseline + loadscript_after_detach.js + + From f62d4d43e96c7907a2a150f800808331621223fd Mon Sep 17 00:00:00 2001 From: Jack Horton Date: Mon, 29 Jan 2018 15:53:45 -0800 Subject: [PATCH 08/18] Fix error messages on errors created through the JSRT --- lib/Jsrt/Jsrt.cpp | 35 +++++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/lib/Jsrt/Jsrt.cpp b/lib/Jsrt/Jsrt.cpp index a6b67ff599f..3f9b13f6004 100644 --- a/lib/Jsrt/Jsrt.cpp +++ b/lib/Jsrt/Jsrt.cpp @@ -2890,9 +2890,28 @@ CHAKRA_API JsCreateNamedFunction(_In_ JsValueRef name, _In_ JsNativeFunction nat return JsCreateEnhancedFunctionHelper(nativeFunction, name, callbackState, function); } -void SetErrorMessage(Js::ScriptContext *scriptContext, JsValueRef newError, JsValueRef message) +void SetErrorMessage(Js::ScriptContext *scriptContext, Js::JavascriptError *newError, JsValueRef message) { - Js::JavascriptOperators::OP_SetProperty(newError, Js::PropertyIds::message, message, scriptContext); + // ECMA262 #sec-error-message + if (!Js::JavascriptOperators::IsUndefined(message)) + { + Js::JavascriptString *messageStr = nullptr; + if (Js::JavascriptString::Is(message)) + { + messageStr = Js::JavascriptString::FromVar(message); + } + else + { + messageStr = Js::JavascriptConversion::ToString(message, scriptContext); + } + + Js::PropertyDescriptor desc; + desc.SetValue(messageStr); + desc.SetWritable(true); + desc.SetEnumerable(false); + desc.SetConfigurable(true); + Js::JavascriptOperators::SetPropertyDescriptor(newError, Js::PropertyIds::message, desc); + } } CHAKRA_API JsCreateError(_In_ JsValueRef message, _Out_ JsValueRef *error) @@ -2904,7 +2923,7 @@ CHAKRA_API JsCreateError(_In_ JsValueRef message, _Out_ JsValueRef *error) PARAM_NOT_NULL(error); *error = nullptr; - JsValueRef newError = scriptContext->GetLibrary()->CreateError(); + Js::JavascriptError *newError = scriptContext->GetLibrary()->CreateError(); SetErrorMessage(scriptContext, newError, message); *error = newError; @@ -2923,7 +2942,7 @@ CHAKRA_API JsCreateRangeError(_In_ JsValueRef message, _Out_ JsValueRef *error) PARAM_NOT_NULL(error); *error = nullptr; - JsValueRef newError = scriptContext->GetLibrary()->CreateRangeError(); + Js::JavascriptError *newError = scriptContext->GetLibrary()->CreateRangeError(); SetErrorMessage(scriptContext, newError, message); *error = newError; @@ -2942,7 +2961,7 @@ CHAKRA_API JsCreateReferenceError(_In_ JsValueRef message, _Out_ JsValueRef *err PARAM_NOT_NULL(error); *error = nullptr; - JsValueRef newError = scriptContext->GetLibrary()->CreateReferenceError(); + Js::JavascriptError *newError = scriptContext->GetLibrary()->CreateReferenceError(); SetErrorMessage(scriptContext, newError, message); *error = newError; @@ -2961,7 +2980,7 @@ CHAKRA_API JsCreateSyntaxError(_In_ JsValueRef message, _Out_ JsValueRef *error) PARAM_NOT_NULL(error); *error = nullptr; - JsValueRef newError = scriptContext->GetLibrary()->CreateSyntaxError(); + Js::JavascriptError *newError = scriptContext->GetLibrary()->CreateSyntaxError(); SetErrorMessage(scriptContext, newError, message); *error = newError; @@ -2980,7 +2999,7 @@ CHAKRA_API JsCreateTypeError(_In_ JsValueRef message, _Out_ JsValueRef *error) PARAM_NOT_NULL(error); *error = nullptr; - JsValueRef newError = scriptContext->GetLibrary()->CreateTypeError(); + Js::JavascriptError *newError = scriptContext->GetLibrary()->CreateTypeError(); SetErrorMessage(scriptContext, newError, message); *error = newError; @@ -2999,7 +3018,7 @@ CHAKRA_API JsCreateURIError(_In_ JsValueRef message, _Out_ JsValueRef *error) PARAM_NOT_NULL(error); *error = nullptr; - JsValueRef newError = scriptContext->GetLibrary()->CreateURIError(); + Js::JavascriptError *newError = scriptContext->GetLibrary()->CreateURIError(); SetErrorMessage(scriptContext, newError, message); *error = newError; From b98be0ec591c5feb1136683c277d52a83e160765 Mon Sep 17 00:00:00 2001 From: Taylor Woll Date: Mon, 29 Jan 2018 16:56:19 -0800 Subject: [PATCH 09/18] Fix a spelling mistake and add an assert --- .../Library/JavascriptRegExpConstructor.cpp | 5 ++++ test/Regex/bug_OS14763260.js | 24 +++++++++---------- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/lib/Runtime/Library/JavascriptRegExpConstructor.cpp b/lib/Runtime/Library/JavascriptRegExpConstructor.cpp index 1c906248412..b4957e6b0b6 100644 --- a/lib/Runtime/Library/JavascriptRegExpConstructor.cpp +++ b/lib/Runtime/Library/JavascriptRegExpConstructor.cpp @@ -128,6 +128,11 @@ namespace Js captures[groupId] = emptyString; reset = false; } + else + { + // If we are not resetting the values, the last match cannot be invalidated. + Assert(!invalidatedLastMatch); + } } /*static*/ diff --git a/test/Regex/bug_OS14763260.js b/test/Regex/bug_OS14763260.js index e9b20572d4a..4ffb1cb86b6 100644 --- a/test/Regex/bug_OS14763260.js +++ b/test/Regex/bug_OS14763260.js @@ -16,21 +16,21 @@ var tests = [ r1.test(s1); - assert.areEqual("abc", RegExp.input, "RegExp.input property caclculated correctly"); - assert.areEqual("abc", RegExp['$_'], "RegExp.$_ property caclculated correctly"); - assert.areEqual("abc", RegExp.lastMatch, "RegExp.lastMatch property caclculated correctly"); - assert.areEqual("abc", RegExp['$&'], "RegExp.$& property caclculated correctly"); - assert.areEqual("abc", RegExp.$1, "RegExp.$1 property caclculated correctly"); - assert.areEqual(0, RegExp.index, "RegExp.index property caclculated correctly"); + assert.areEqual("abc", RegExp.input, "RegExp.input property calculated correctly"); + assert.areEqual("abc", RegExp['$_'], "RegExp.$_ property calculated correctly"); + assert.areEqual("abc", RegExp.lastMatch, "RegExp.lastMatch property calculated correctly"); + assert.areEqual("abc", RegExp['$&'], "RegExp.$& property calculated correctly"); + assert.areEqual("abc", RegExp.$1, "RegExp.$1 property calculated correctly"); + assert.areEqual(0, RegExp.index, "RegExp.index property calculated correctly"); r2.test(s2); - assert.areEqual(" def", RegExp.input, "RegExp.input property caclculated correctly"); - assert.areEqual(" def", RegExp['$_'], "RegExp.$_ property caclculated correctly"); - assert.areEqual("def", RegExp.lastMatch, "RegExp.lastMatch property caclculated correctly"); - assert.areEqual("def", RegExp['$&'], "RegExp.$& property caclculated correctly"); - assert.areEqual("def", RegExp.$1, "RegExp.$1 property caclculated correctly"); - assert.areEqual(1, RegExp.index, "RegExp.index property caclculated correctly"); + assert.areEqual(" def", RegExp.input, "RegExp.input property calculated correctly"); + assert.areEqual(" def", RegExp['$_'], "RegExp.$_ property calculated correctly"); + assert.areEqual("def", RegExp.lastMatch, "RegExp.lastMatch property calculated correctly"); + assert.areEqual("def", RegExp['$&'], "RegExp.$& property calculated correctly"); + assert.areEqual("def", RegExp.$1, "RegExp.$1 property calculated correctly"); + assert.areEqual(1, RegExp.index, "RegExp.index property calculated correctly"); r1.test(s1); From f1c41be4afe064f5b27142b5a2b69fa5f2ceab4e Mon Sep 17 00:00:00 2001 From: Doug Ilijev Date: Fri, 26 Jan 2018 17:13:04 -0800 Subject: [PATCH 10/18] Remove comment referring to removed legacy behavior. --- lib/Runtime/Library/JavascriptRegExpConstructor.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/Runtime/Library/JavascriptRegExpConstructor.cpp b/lib/Runtime/Library/JavascriptRegExpConstructor.cpp index 8a17a6986b1..d178fd07866 100644 --- a/lib/Runtime/Library/JavascriptRegExpConstructor.cpp +++ b/lib/Runtime/Library/JavascriptRegExpConstructor.cpp @@ -92,7 +92,6 @@ namespace Js Assert(!lastMatch.IsUndefined()); JavascriptString* emptyString = scriptContext->GetLibrary()->GetEmptyString(); - // IE8 quirk: match of length 0 is regarded as length 1 CharCount lastIndexVal = lastMatch.EndOffset(); this->index = JavascriptNumber::ToVar(lastMatch.offset, scriptContext); this->lastIndex = JavascriptNumber::ToVar(lastIndexVal, scriptContext); From 219fe4432154fe849e885b84da5b70f02a354d47 Mon Sep 17 00:00:00 2001 From: rhuanjl Date: Sat, 20 Jan 2018 11:56:10 +0000 Subject: [PATCH 11/18] Remove useless setParent call and related condition. --- lib/Jsrt/Core/JsrtCore.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/lib/Jsrt/Core/JsrtCore.cpp b/lib/Jsrt/Core/JsrtCore.cpp index eaa3bf96659..10b76876133 100644 --- a/lib/Jsrt/Core/JsrtCore.cpp +++ b/lib/Jsrt/Core/JsrtCore.cpp @@ -27,10 +27,6 @@ JsInitializeModuleRecord( if (normalizedSpecifier != JS_INVALID_REFERENCE) { childModuleRecord->SetSpecifier(normalizedSpecifier); - if (Js::SourceTextModuleRecord::Is(referencingModule) && Js::JavascriptString::Is(normalizedSpecifier)) - { - childModuleRecord->SetParent(Js::SourceTextModuleRecord::FromHost(referencingModule), Js::JavascriptString::FromVar(normalizedSpecifier)->GetSz()); - } } return JsNoError; }); From eaef3d149cc9d385c1f6bf5bc0a8b08100cc0b89 Mon Sep 17 00:00:00 2001 From: Lei Shi Date: Mon, 29 Jan 2018 10:58:50 -0800 Subject: [PATCH 12/18] fix issue unregistering function table 1. in between removing entry from SList and doing the unregistering, another thread might got the code address and doing registering. the fix is to make sure unregistering function table always happen before freeing the code address. 2. remove the code for x86 --- lib/Backend/EmitBuffer.cpp | 7 ++++ lib/Backend/InterpreterThunkEmitter.cpp | 8 ----- lib/Backend/NativeCodeGenerator.cpp | 10 +++--- lib/Common/Common/Jobs.cpp | 14 ++++++-- lib/Common/Common/Jobs.h | 8 +++++ lib/Common/Core/ConfigParser.cpp | 3 +- lib/Common/Core/DelayLoadLibrary.cpp | 7 ++-- .../Memory/DelayDeletingFunctionTable.cpp | 19 ++--------- lib/Common/Memory/XDataAllocator.h | 7 ++-- lib/Common/Memory/amd64/XDataAllocator.cpp | 8 ++++- lib/Runtime/Base/FunctionBody.cpp | 32 +++++++++++-------- lib/Runtime/Base/ScriptContext.cpp | 4 +-- 12 files changed, 71 insertions(+), 56 deletions(-) diff --git a/lib/Backend/EmitBuffer.cpp b/lib/Backend/EmitBuffer.cpp index c8116a4fc58..94081478c07 100644 --- a/lib/Backend/EmitBuffer.cpp +++ b/lib/Backend/EmitBuffer.cpp @@ -55,7 +55,10 @@ template void EmitBufferManager::FreeAllocations(bool release) { +#if PDATA_ENABLED && defined(_WIN32) DelayDeletingFunctionTable::Clear(); +#endif + AutoRealOrFakeCriticalSection autoCs(&this->criticalSection); #if DBG_DUMP @@ -194,6 +197,10 @@ template bool EmitBufferManager::FreeAllocation(void* address) { +#if PDATA_ENABLED && defined(_WIN32) + DelayDeletingFunctionTable::Clear(); +#endif + AutoRealOrFakeCriticalSection autoCs(&this->criticalSection); #if _M_ARM diff --git a/lib/Backend/InterpreterThunkEmitter.cpp b/lib/Backend/InterpreterThunkEmitter.cpp index 66debff69d1..f0b2a0bc8e3 100644 --- a/lib/Backend/InterpreterThunkEmitter.cpp +++ b/lib/Backend/InterpreterThunkEmitter.cpp @@ -323,10 +323,6 @@ void* InterpreterThunkEmitter::ConvertToEntryPoint(PVOID dynamicInterpreterThunk bool InterpreterThunkEmitter::NewThunkBlock() { - // flush the function tables before allocating any new code - // to prevent old function table is referring to new code address - DelayDeletingFunctionTable::Clear(); - #ifdef ENABLE_OOP_NATIVE_CODEGEN if (CONFIG_FLAG(ForceStaticInterpreterThunk)) { @@ -401,10 +397,6 @@ bool InterpreterThunkEmitter::NewThunkBlock() #ifdef ENABLE_OOP_NATIVE_CODEGEN bool InterpreterThunkEmitter::NewOOPJITThunkBlock() { - // flush the function tables before allocating any new code - // to prevent old function table is referring to new code address - DelayDeletingFunctionTable::Clear(); - PSCRIPTCONTEXT_HANDLE remoteScriptContext = this->scriptContext->GetRemoteScriptAddr(); if (!JITManager::GetJITManager()->IsConnected()) { diff --git a/lib/Backend/NativeCodeGenerator.cpp b/lib/Backend/NativeCodeGenerator.cpp index 9498b10e170..36e493d0435 100644 --- a/lib/Backend/NativeCodeGenerator.cpp +++ b/lib/Backend/NativeCodeGenerator.cpp @@ -89,7 +89,9 @@ NativeCodeGenerator::~NativeCodeGenerator() { Assert(this->IsClosed()); +#if PDATA_ENABLED && defined(_WIN32) DelayDeletingFunctionTable::Clear(); +#endif #ifdef PROFILE_EXEC if (this->foregroundCodeGenProfiler != nullptr) @@ -902,10 +904,6 @@ void NativeCodeGenerator::CodeGen(PageAllocator* pageAllocator, CodeGenWorkItemI void NativeCodeGenerator::CodeGen(PageAllocator * pageAllocator, CodeGenWorkItem* workItem, const bool foreground) { - // flush the function tables before allocating any new code - // to prevent old function table is referring to new code address - DelayDeletingFunctionTable::Clear(); - if(foreground) { // Func::Codegen has a lot of things on the stack, so probe the stack here instead @@ -1117,7 +1115,6 @@ NativeCodeGenerator::CodeGen(PageAllocator * pageAllocator, CodeGenWorkItem* wor } #if defined(TARGET_64) - DelayDeletingFunctionTable::Clear(); XDataAllocation * xdataInfo = HeapNewZ(XDataAllocation); xdataInfo->address = (byte*)jitWriteData.xdataAddr; XDataAllocator::Register(xdataInfo, jitWriteData.codeAddress, jitWriteData.codeSize); @@ -3257,6 +3254,9 @@ NativeCodeGenerator::FreeNativeCodeGenAllocation(void* codeAddress) { if (JITManager::GetJITManager()->IsOOPJITEnabled()) { +#if PDATA_ENABLED && defined(_WIN32) + DelayDeletingFunctionTable::Clear(); +#endif ThreadContext * context = this->scriptContext->GetThreadContext(); HRESULT hr = JITManager::GetJITManager()->FreeAllocation(context->GetRemoteThreadContextAddr(), (intptr_t)codeAddress); JITManager::HandleServerCallResult(hr, RemoteCallType::MemFree); diff --git a/lib/Common/Common/Jobs.cpp b/lib/Common/Common/Jobs.cpp index 0ce5d944396..4f8af9c71af 100644 --- a/lib/Common/Common/Jobs.cpp +++ b/lib/Common/Common/Jobs.cpp @@ -615,8 +615,10 @@ namespace JsUtil threadId(GetCurrentThreadContextId()), threadService(threadService), threadCount(0), - maxThreadCount(0), - hasExtraWork(false) + maxThreadCount(0) +#if PDATA_ENABLED && defined(_WIN32) + ,hasExtraWork(false) +#endif { if (!threadService->HasCallback()) { @@ -678,7 +680,9 @@ namespace JsUtil //Wait for 1 sec on jobReady and shutdownBackgroundThread events. unsigned int result = WaitForMultipleObjectsEx(_countof(handles), handles, false, 1000, false); +#if PDATA_ENABLED && defined(_WIN32) DoExtraWork(); +#endif while (result == WAIT_TIMEOUT) { @@ -706,6 +710,7 @@ namespace JsUtil return result == WAIT_OBJECT_0; } +#if PDATA_ENABLED && defined(_WIN32) void BackgroundJobProcessor::DoExtraWork() { while (hasExtraWork) @@ -714,6 +719,7 @@ namespace JsUtil Sleep(50); } } +#endif bool BackgroundJobProcessor::WaitWithThreadForThreadStartedOrClosingEvent(ParallelThreadData *parallelThreadData, const unsigned int milliseconds) { @@ -1117,8 +1123,10 @@ namespace JsUtil } criticalSection.Leave(); +#if PDATA_ENABLED && defined(_WIN32) // flush the function tables in background thread after closed and before shutting down thread DelayDeletingFunctionTable::Clear(); +#endif EDGE_ETW_INTERNAL(EventWriteJSCRIPT_NATIVECODEGEN_STOP(this, 0)); } @@ -1420,6 +1428,7 @@ namespace JsUtil #endif } +#if PDATA_ENABLED && defined(_WIN32) void BackgroundJobProcessor::StartExtraWork() { hasExtraWork = true; @@ -1431,6 +1440,7 @@ namespace JsUtil { hasExtraWork = false; } +#endif #if DBG_DUMP //Just for debugging purpose diff --git a/lib/Common/Common/Jobs.h b/lib/Common/Common/Jobs.h index 148c1417061..8589f71a6ab 100644 --- a/lib/Common/Common/Jobs.h +++ b/lib/Common/Common/Jobs.h @@ -361,8 +361,10 @@ namespace JsUtil // Closes the job processor and closes the handle of background threads. virtual void Close(); +#if PDATA_ENABLED && defined(_WIN32) virtual void StartExtraWork() { }; virtual void EndExtraWork() { }; +#endif }; // ------------------------------------------------------------------------------------------------------------------------- @@ -460,7 +462,9 @@ namespace JsUtil unsigned int maxThreadCount; ParallelThreadData **parallelThreadData; +#if PDATA_ENABLED && defined(_WIN32) bool hasExtraWork; +#endif #if DBG_DUMP static char16 const * const DebugThreadNames[16]; @@ -470,8 +474,10 @@ namespace JsUtil BackgroundJobProcessor(AllocationPolicyManager* policyManager, ThreadService *threadService, bool disableParallelThreads); ~BackgroundJobProcessor(); +#if PDATA_ENABLED && defined(_WIN32) virtual void StartExtraWork() override; virtual void EndExtraWork() override; +#endif private: bool WaitWithThread(ParallelThreadData *parallelThreadData, const Event &e, const unsigned int milliseconds = INFINITE); @@ -489,7 +495,9 @@ namespace JsUtil void InitializeParallelThreadData(AllocationPolicyManager* policyManager, bool disableParallelThreads); void InitializeParallelThreadDataForThreadServiceCallBack(AllocationPolicyManager* policyManager); +#if PDATA_ENABLED && defined(_WIN32) void DoExtraWork(); +#endif public: virtual void AddManager(JobManager *const manager) override; diff --git a/lib/Common/Core/ConfigParser.cpp b/lib/Common/Core/ConfigParser.cpp index f522335311f..88fa44313f5 100644 --- a/lib/Common/Core/ConfigParser.cpp +++ b/lib/Common/Core/ConfigParser.cpp @@ -600,8 +600,7 @@ HRESULT ConfigParser::SetOutputFile(const WCHAR* outputFile, const WCHAR* openMo _wcsicmp(fileName, _u("ByteCodeGenerator")) == 0 || _wcsicmp(fileName, _u("spartan")) == 0 || _wcsicmp(fileName, _u("spartan_edge")) == 0 || - _wcsicmp(fileName, _u("MicrosoftEdge")) == 0 || - _wcsicmp(fileName, _u("MicrosoftEdgeCP")) == 0) + _wcsnicmp(fileName, _u("MicrosoftEdge"), wcslen(_u("MicrosoftEdge"))) == 0) { // we need to output to %temp% directory in wwa. we don't have permission otherwise. diff --git a/lib/Common/Core/DelayLoadLibrary.cpp b/lib/Common/Core/DelayLoadLibrary.cpp index 20752028d91..aee807b52e5 100644 --- a/lib/Common/Core/DelayLoadLibrary.cpp +++ b/lib/Common/Core/DelayLoadLibrary.cpp @@ -89,9 +89,10 @@ DWORD NtdllLibrary::AddGrowableFunctionTable( _Out_ PVOID * DynamicTable, RangeBase, RangeEnd); #if _M_X64 - PHASE_PRINT_TESTTRACE1(Js::XDataPhase, _u("Register: Begin: %llx, End: %x, Unwind: %llx, RangeBase: %llx, RangeEnd: %llx, table: %llx, Status: %x\n"), - FunctionTable->BeginAddress, FunctionTable->EndAddress, FunctionTable->UnwindInfoAddress, RangeBase, RangeEnd, *DynamicTable, status); + PHASE_PRINT_TESTTRACE1(Js::XDataPhase, _u("Register: [%d] Begin: %llx, End: %x, Unwind: %llx, RangeBase: %llx, RangeEnd: %llx, table: %llx, Status: %x\n"), + GetCurrentThreadId(), FunctionTable->BeginAddress, FunctionTable->EndAddress, FunctionTable->UnwindInfoAddress, RangeBase, RangeEnd, *DynamicTable, status); #endif + Assert((status >= 0 && FunctionTable != nullptr) || status == 0xC000009A /*STATUS_INSUFFICIENT_RESOURCES*/); return status; } return 1; @@ -113,7 +114,7 @@ VOID NtdllLibrary::DeleteGrowableFunctionTable( _In_ PVOID DynamicTable ) } deleteGrowableFunctionTable(DynamicTable); - PHASE_PRINT_TESTTRACE1(Js::XDataPhase, _u("UnRegister: table: %llx\n"), DynamicTable); + PHASE_PRINT_TESTTRACE1(Js::XDataPhase, _u("UnRegister: [%d] table: %llx\n"), GetCurrentThreadId(), DynamicTable); } } diff --git a/lib/Common/Memory/DelayDeletingFunctionTable.cpp b/lib/Common/Memory/DelayDeletingFunctionTable.cpp index 9a58a55f830..fa18ddabf96 100644 --- a/lib/Common/Memory/DelayDeletingFunctionTable.cpp +++ b/lib/Common/Memory/DelayDeletingFunctionTable.cpp @@ -8,24 +8,20 @@ #if PDATA_ENABLED && defined(_WIN32) #include "Core/DelayLoadLibrary.h" #include -#endif PSLIST_HEADER DelayDeletingFunctionTable::Head = nullptr; DelayDeletingFunctionTable DelayDeletingFunctionTable::Instance; DelayDeletingFunctionTable::DelayDeletingFunctionTable() { -#if PDATA_ENABLED && defined(_WIN32) Head = (PSLIST_HEADER)_aligned_malloc(sizeof(SLIST_HEADER), MEMORY_ALLOCATION_ALIGNMENT); if (Head) { InitializeSListHead(Head); } -#endif } DelayDeletingFunctionTable::~DelayDeletingFunctionTable() { -#if PDATA_ENABLED && defined(_WIN32) Clear(); if (Head) { @@ -34,13 +30,11 @@ DelayDeletingFunctionTable::~DelayDeletingFunctionTable() _aligned_free(Head); Head = nullptr; } -#endif } bool DelayDeletingFunctionTable::AddEntry(FunctionTableHandle ft) { -#if PDATA_ENABLED && defined(_WIN32) if (Head) { FunctionTableNode* node = (FunctionTableNode*)_aligned_malloc(sizeof(FunctionTableNode), MEMORY_ALLOCATION_ALIGNMENT); @@ -51,13 +45,11 @@ bool DelayDeletingFunctionTable::AddEntry(FunctionTableHandle ft) return true; } } -#endif return false; } void DelayDeletingFunctionTable::Clear() { -#if PDATA_ENABLED && defined(_WIN32) if (Head) { SLIST_ENTRY* entry = InterlockedPopEntrySList(Head); @@ -69,21 +61,16 @@ void DelayDeletingFunctionTable::Clear() entry = InterlockedPopEntrySList(Head); } } -#endif } bool DelayDeletingFunctionTable::IsEmpty() { -#if PDATA_ENABLED && defined(_WIN32) return QueryDepthSList(Head) == 0; -#else - return true; -#endif } void DelayDeletingFunctionTable::DeleteFunctionTable(void* functionTable) { -#if PDATA_ENABLED && defined(_WIN32) NtdllLibrary::Instance->DeleteGrowableFunctionTable(functionTable); -#endif -} \ No newline at end of file +} + +#endif \ No newline at end of file diff --git a/lib/Common/Memory/XDataAllocator.h b/lib/Common/Memory/XDataAllocator.h index 8b9ba96d6b8..1329b61be65 100644 --- a/lib/Common/Memory/XDataAllocator.h +++ b/lib/Common/Memory/XDataAllocator.h @@ -12,13 +12,11 @@ #include "Memory/arm64/XDataAllocator.h" #endif +#if PDATA_ENABLED && defined(_WIN32) struct FunctionTableNode { -#ifdef _WIN32 SLIST_ENTRY itemEntry; FunctionTableHandle functionTable; - -#endif }; struct DelayDeletingFunctionTable @@ -33,4 +31,5 @@ struct DelayDeletingFunctionTable static void Clear(); static bool IsEmpty(); static void DeleteFunctionTable(void* functionTable); -}; \ No newline at end of file +}; +#endif \ No newline at end of file diff --git a/lib/Common/Memory/amd64/XDataAllocator.cpp b/lib/Common/Memory/amd64/XDataAllocator.cpp index d5591038dce..addea6f9359 100644 --- a/lib/Common/Memory/amd64/XDataAllocator.cpp +++ b/lib/Common/Memory/amd64/XDataAllocator.cpp @@ -127,6 +127,13 @@ void XDataAllocator::Register(XDataAllocation * xdataInfo, ULONG_PTR functionSta BOOLEAN success = FALSE; if (AutoSystemInfo::Data.IsWin8OrLater()) { +#if DBG + // Validate the PDATA was not registered or unregistered + ULONG64 imageBase = 0; + RUNTIME_FUNCTION *runtimeFunction = RtlLookupFunctionEntry((DWORD64)functionStart, &imageBase, nullptr); + Assert(runtimeFunction == NULL); +#endif + DWORD status = NtdllLibrary::Instance->AddGrowableFunctionTable(&xdataInfo->functionTable, &xdataInfo->pdata, /*MaxEntryCount*/ 1, @@ -134,7 +141,6 @@ void XDataAllocator::Register(XDataAllocation * xdataInfo, ULONG_PTR functionSta /*RangeBase*/ functionStart, /*RangeEnd*/ functionStart + functionSize); success = NT_SUCCESS(status); - Assert(success && xdataInfo->functionTable != nullptr); } else { diff --git a/lib/Runtime/Base/FunctionBody.cpp b/lib/Runtime/Base/FunctionBody.cpp index fc936879816..434a17e26d9 100644 --- a/lib/Runtime/Base/FunctionBody.cpp +++ b/lib/Runtime/Base/FunctionBody.cpp @@ -8842,13 +8842,12 @@ namespace Js if (this->xdataInfo != nullptr) { #ifdef _WIN32 - if (this->xdataInfo->functionTable) + PHASE_PRINT_TESTTRACE1(Js::XDataPhase, _u("EntryPointInfo::Cleanup: Freeing: function table: %llx, codeAddress: %%llx\n"), this->xdataInfo->functionTable, this->GetNativeEntrypoint()); + if (this->xdataInfo->functionTable + && !DelayDeletingFunctionTable::AddEntry(this->xdataInfo->functionTable)) { - if (!DelayDeletingFunctionTable::AddEntry(this->xdataInfo->functionTable)) - { - PHASE_PRINT_TESTTRACE1(Js::XDataPhase, _u("EntryPointInfo::Cleanup: Failed to add to slist, table: %llx, address: %%llx\n"), this->xdataInfo->functionTable, this->GetNativeAddress()); - DelayDeletingFunctionTable::DeleteFunctionTable(this->xdataInfo->functionTable); - } + PHASE_PRINT_TESTTRACE1(Js::XDataPhase, _u("EntryPointInfo::Cleanup: Failed to add to slist, table: %llx, address: %%llx\n"), this->xdataInfo->functionTable, this->GetNativeEntrypoint()); + DelayDeletingFunctionTable::DeleteFunctionTable(this->xdataInfo->functionTable); } #endif XDataAllocator::Unregister(this->xdataInfo); @@ -8860,7 +8859,8 @@ namespace Js } this->xdataInfo = nullptr; } -#endif +#endif //PDATA_ENABLED + this->OnCleanup(isShutdown); FreeJitTransferData(); @@ -8994,13 +8994,11 @@ namespace Js #if PDATA_ENABLED && defined(_WIN32) if (this->xdataInfo) { - if (this->xdataInfo->functionTable) + if (this->xdataInfo->functionTable + && !DelayDeletingFunctionTable::AddEntry(this->xdataInfo->functionTable)) { - if (!DelayDeletingFunctionTable::AddEntry(this->xdataInfo->functionTable)) - { - PHASE_PRINT_TESTTRACE1(Js::XDataPhase, _u("EntryPointInfo::ResetOnLazyBailoutFailure: Failed to add to slist, table: %llx, address: %llx\n"), this->xdataInfo->functionTable, this->nativeAddress); - DelayDeletingFunctionTable::DeleteFunctionTable(this->xdataInfo->functionTable); - } + PHASE_PRINT_TESTTRACE1(Js::XDataPhase, _u("EntryPointInfo::ResetOnLazyBailoutFailure: Failed to add to slist, table: %llx, address: %llx\n"), this->xdataInfo->functionTable, this->nativeAddress); + DelayDeletingFunctionTable::DeleteFunctionTable(this->xdataInfo->functionTable); } } #endif @@ -9165,6 +9163,14 @@ namespace Js { scriptContext->FreeFunctionEntryPoint((Js::JavascriptMethod)this->GetNativeAddress(), this->GetThunkAddress()); } +#if PDATA_ENABLED && defined(_WIN32) + else + { + // in case of debugger attaching, we have a new code generator and when deleting old code generator, + // the xData is not put in the delay list yet. clear the list now so the code addresses are ready to reuse + DelayDeletingFunctionTable::Clear(); + } +#endif } #ifdef PERF_COUNTERS diff --git a/lib/Runtime/Base/ScriptContext.cpp b/lib/Runtime/Base/ScriptContext.cpp index d48d2d96e81..dfea88e69ac 100644 --- a/lib/Runtime/Base/ScriptContext.cpp +++ b/lib/Runtime/Base/ScriptContext.cpp @@ -654,7 +654,7 @@ namespace Js if (hasFunctions) { -#if ENABLE_NATIVE_CODEGEN +#if PDATA_ENABLED && defined(_WIN32) struct AutoReset { AutoReset(ThreadContext* threadContext) @@ -3044,7 +3044,7 @@ namespace Js HRESULT hr = S_OK; BEGIN_TRANSLATE_OOM_TO_HRESULT_NESTED - this->nativeCodeGen = NewNativeCodeGenerator(this); + this->nativeCodeGen = NewNativeCodeGenerator(this); SetProfileModeNativeCodeGen(this->GetNativeCodeGenerator(), this->IsProfiling()); END_TRANSLATE_OOM_TO_HRESULT(hr); From 274a06bd44bb153a7bbc92f6f4f373ddd1c53fb6 Mon Sep 17 00:00:00 2001 From: Lei Shi Date: Tue, 30 Jan 2018 14:07:43 -0800 Subject: [PATCH 13/18] fix for nojit --- lib/Runtime/Base/ScriptContext.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/Runtime/Base/ScriptContext.cpp b/lib/Runtime/Base/ScriptContext.cpp index dfea88e69ac..3a22ae4de40 100644 --- a/lib/Runtime/Base/ScriptContext.cpp +++ b/lib/Runtime/Base/ScriptContext.cpp @@ -654,6 +654,7 @@ namespace Js if (hasFunctions) { +#if ENABLE_NATIVE_CODEGEN #if PDATA_ENABLED && defined(_WIN32) struct AutoReset { @@ -670,6 +671,7 @@ namespace Js ThreadContext* threadContext; } autoReset(this->GetThreadContext()); +#endif #endif // We still need to walk through all the function bodies and call cleanup From b2471ddd068cd8cc187247cfdfa3425904e55455 Mon Sep 17 00:00:00 2001 From: Matt Gardner Date: Tue, 30 Jan 2018 15:18:30 -0800 Subject: [PATCH 14/18] ARM64: fix in-proc jit memory leak arm32 has special handling for xdata, but arm64 handles it the same way as amd64. see: https://github.com/Microsoft/ChakraCore/blob/c60cf515ac902af1c0c3d3d4e160c40d09b4659e/lib/Backend/NativeCodeGenerator.cpp#L1119 --- lib/Runtime/Base/FunctionBody.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Runtime/Base/FunctionBody.cpp b/lib/Runtime/Base/FunctionBody.cpp index fc936879816..54589828793 100644 --- a/lib/Runtime/Base/FunctionBody.cpp +++ b/lib/Runtime/Base/FunctionBody.cpp @@ -8852,7 +8852,7 @@ namespace Js } #endif XDataAllocator::Unregister(this->xdataInfo); -#if defined(_M_ARM32_OR_ARM64) +#if defined(_M_ARM) if (JITManager::GetJITManager()->IsOOPJITEnabled()) #endif { From 36b813765ba3e75b02edfc21c97183a42d20bd07 Mon Sep 17 00:00:00 2001 From: Tom Care Date: Fri, 15 Dec 2017 16:34:29 -0800 Subject: [PATCH 15/18] Ensure WithScopeObject is unwrapped for scoped __proto__ stores Fixes OS: 14291082 Setting __proto__ inside an eval inside a with takes us down a weird path. Usually we would have unwrapped the WithScopeObject automatically by using SetProperty or similar, but __proto__ is special cased (along with some other things like HostDispatch) and will directly fetch the setter function and call it, bypassing the WithScopeObject:: methods (although still keeping the @@unscopables check.) Fix is to unwrap the object after the @@unscopables object check has finished when getting the __proto__ setter. I tried several other paths but they end up going through the WithScopeObject shims. --- lib/Runtime/Language/JavascriptOperators.cpp | 5 ++ lib/Runtime/Library/RuntimeLibraryPch.h | 1 + lib/Runtime/Types/WithScopeObject.h | 83 +++++++++++--------- test/es6/unscopablesWithScopeTest.js | 24 ++++++ 4 files changed, 76 insertions(+), 37 deletions(-) diff --git a/lib/Runtime/Language/JavascriptOperators.cpp b/lib/Runtime/Language/JavascriptOperators.cpp index 21df9ad48c7..e6ff817159c 100644 --- a/lib/Runtime/Language/JavascriptOperators.cpp +++ b/lib/Runtime/Language/JavascriptOperators.cpp @@ -2947,6 +2947,11 @@ namespace Js { if (setterValueOrProxy) { + if (WithScopeObject::Is(object)) + { + object = (RecyclableObject::FromVar(object))->GetThisObjectOrUnWrap(); + } + JavascriptFunction* func = (JavascriptFunction*)setterValueOrProxy; Assert(info.GetFlags() == InlineCacheSetterFlag || info.GetPropertyIndex() == Constants::NoSlot); CacheOperators::CachePropertyWrite(object, false, type, propertyId, &info, scriptContext); diff --git a/lib/Runtime/Library/RuntimeLibraryPch.h b/lib/Runtime/Library/RuntimeLibraryPch.h index 831e787bde7..741a5972181 100644 --- a/lib/Runtime/Library/RuntimeLibraryPch.h +++ b/lib/Runtime/Library/RuntimeLibraryPch.h @@ -52,6 +52,7 @@ #include "Library/JavascriptWeakMap.h" #include "Library/JavascriptWeakSet.h" +#include "Types/WithScopeObject.h" #include "Types/PropertyIndexRanges.h" #include "Types/DictionaryPropertyDescriptor.h" #include "Types/DictionaryTypeHandler.h" diff --git a/lib/Runtime/Types/WithScopeObject.h b/lib/Runtime/Types/WithScopeObject.h index e4690b643bf..0be477ca86d 100644 --- a/lib/Runtime/Types/WithScopeObject.h +++ b/lib/Runtime/Types/WithScopeObject.h @@ -2,7 +2,17 @@ // Copyright (C) Microsoft. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- +// +// The WithScopeObject is a psuedo-object that provides us with convenience. By wrapping a normal object in this class, +// we can intercept object operations requiring checks to @@unscopables. For all other operations, the object needs to be +// unwrapped. The caller is responsible for unwrapping, which must happen only once the @@unscopables check has happened. +// For example, a getter needs to have the propId checked against @@unscopables, but for the actual getter call the +// object passed needs to be unwrapped. +// #pragma once + +#define UNWRAP_FAILFAST() AssertOrFailFastMsg(false, "This WithScopeObject must be unwrapped by the caller handling the scope before performing this operation.") + namespace Js { class WithScopeObject : public RecyclableObject @@ -10,7 +20,6 @@ namespace Js private: Field(RecyclableObject *) wrappedObject; - void AssertAndFailFast() { AssertMsg(false, "This function should not be invoked"); Js::Throw::InternalError(); } protected: DEFINE_VTABLE_CTOR(WithScopeObject, RecyclableObject); @@ -29,43 +38,43 @@ namespace Js virtual DescriptorFlags GetSetter(PropertyId propertyId, Var *setterValue, PropertyValueInfo* info, ScriptContext* requestContext) override; // A WithScopeObject should never call the Functions defined below this comment - virtual BOOL SetProperty(JavascriptString* propertyNameString, Var value, PropertyOperationFlags flags, PropertyValueInfo* info) override { AssertAndFailFast(); return FALSE; }; - virtual PropertyQueryFlags GetPropertyQuery(Var originalInstance, JavascriptString* propertyNameString, Var* value, PropertyValueInfo* info, ScriptContext* requestContext) override { AssertAndFailFast(); return PropertyQueryFlags::Property_NotFound; }; - virtual DescriptorFlags GetSetter(JavascriptString* propertyNameString, Var *setterValue, PropertyValueInfo* info, ScriptContext* requestContext) override { AssertAndFailFast(); return None; }; - virtual int GetPropertyCount() override { AssertAndFailFast(); return 0; }; - virtual PropertyId GetPropertyId(PropertyIndex index) override { AssertAndFailFast(); return Constants::NoProperty; }; - virtual PropertyId GetPropertyId(BigPropertyIndex index) override { AssertAndFailFast(); return Constants::NoProperty;; }; - virtual BOOL SetInternalProperty(PropertyId internalPropertyId, Var value, PropertyOperationFlags flags, PropertyValueInfo* info) override { AssertAndFailFast(); return FALSE; }; - virtual BOOL InitProperty(PropertyId propertyId, Var value, PropertyOperationFlags flags = PropertyOperation_None, PropertyValueInfo* info = NULL) override { AssertAndFailFast(); return FALSE; }; - virtual BOOL SetPropertyWithAttributes(PropertyId propertyId, Var value, PropertyAttributes attributes, PropertyValueInfo* info, PropertyOperationFlags flags = PropertyOperation_None, SideEffects possibleSideEffects = SideEffects_Any) override { AssertAndFailFast(); return FALSE; }; + virtual BOOL SetProperty(JavascriptString* propertyNameString, Var value, PropertyOperationFlags flags, PropertyValueInfo* info) override { UNWRAP_FAILFAST(); return FALSE; }; + virtual PropertyQueryFlags GetPropertyQuery(Var originalInstance, JavascriptString* propertyNameString, Var* value, PropertyValueInfo* info, ScriptContext* requestContext) override { UNWRAP_FAILFAST(); return PropertyQueryFlags::Property_NotFound; }; + virtual DescriptorFlags GetSetter(JavascriptString* propertyNameString, Var *setterValue, PropertyValueInfo* info, ScriptContext* requestContext) override { UNWRAP_FAILFAST(); return None; }; + virtual int GetPropertyCount() override { UNWRAP_FAILFAST(); return 0; }; + virtual PropertyId GetPropertyId(PropertyIndex index) override { UNWRAP_FAILFAST(); return Constants::NoProperty; }; + virtual PropertyId GetPropertyId(BigPropertyIndex index) override { UNWRAP_FAILFAST(); return Constants::NoProperty;; }; + virtual BOOL SetInternalProperty(PropertyId internalPropertyId, Var value, PropertyOperationFlags flags, PropertyValueInfo* info) override { UNWRAP_FAILFAST(); return FALSE; }; + virtual BOOL InitProperty(PropertyId propertyId, Var value, PropertyOperationFlags flags = PropertyOperation_None, PropertyValueInfo* info = NULL) override { UNWRAP_FAILFAST(); return FALSE; }; + virtual BOOL SetPropertyWithAttributes(PropertyId propertyId, Var value, PropertyAttributes attributes, PropertyValueInfo* info, PropertyOperationFlags flags = PropertyOperation_None, SideEffects possibleSideEffects = SideEffects_Any) override { UNWRAP_FAILFAST(); return FALSE; }; #if ENABLE_FIXED_FIELDS - virtual BOOL IsFixedProperty(PropertyId propertyId) override { AssertAndFailFast(); return FALSE; }; + virtual BOOL IsFixedProperty(PropertyId propertyId) override { UNWRAP_FAILFAST(); return FALSE; }; #endif - virtual PropertyQueryFlags HasItemQuery(uint32 index) override { AssertAndFailFast(); return PropertyQueryFlags::Property_NotFound; }; - virtual BOOL HasOwnItem(uint32 index) override { AssertAndFailFast(); return FALSE; }; - virtual PropertyQueryFlags GetItemQuery(Var originalInstance, uint32 index, Var* value, ScriptContext * requestContext) override { AssertAndFailFast(); return PropertyQueryFlags::Property_NotFound; }; - virtual PropertyQueryFlags GetItemReferenceQuery(Var originalInstance, uint32 index, Var* value, ScriptContext * requestContext) override { AssertAndFailFast(); return PropertyQueryFlags::Property_NotFound; }; - virtual DescriptorFlags GetItemSetter(uint32 index, Var* setterValue, ScriptContext* requestContext) override { AssertAndFailFast(); return None; }; - virtual BOOL SetItem(uint32 index, Var value, PropertyOperationFlags flags) override { AssertAndFailFast(); return FALSE; }; - virtual BOOL DeleteItem(uint32 index, PropertyOperationFlags flags) override { AssertAndFailFast(); return FALSE; }; - virtual BOOL ToPrimitive(JavascriptHint hint, Var* result, ScriptContext * requestContext) override { AssertAndFailFast(); return FALSE; }; - virtual BOOL GetEnumerator(JavascriptStaticEnumerator * enumerator, EnumeratorFlags flags, ScriptContext* requestContext, ForInCache * forInCache = nullptr) override { AssertAndFailFast(); return FALSE; }; - virtual BOOL SetAccessors(PropertyId propertyId, Var getter, Var setter, PropertyOperationFlags flags = PropertyOperation_None) override { AssertAndFailFast(); return FALSE; }; - virtual BOOL GetAccessors(PropertyId propertyId, Var *getter, Var *setter, ScriptContext * requestContext) override { AssertAndFailFast(); return FALSE; }; - virtual BOOL IsWritable(PropertyId propertyId) override { AssertAndFailFast(); return FALSE; }; - virtual BOOL IsConfigurable(PropertyId propertyId) override { AssertAndFailFast(); return FALSE; }; - virtual BOOL IsEnumerable(PropertyId propertyId) override { AssertAndFailFast(); return FALSE; }; - virtual BOOL SetEnumerable(PropertyId propertyId, BOOL value) override { AssertAndFailFast(); return FALSE; }; - virtual BOOL SetWritable(PropertyId propertyId, BOOL value) override { AssertAndFailFast(); return FALSE; }; - virtual BOOL SetConfigurable(PropertyId propertyId, BOOL value) override { AssertAndFailFast(); return FALSE; }; - virtual BOOL SetAttributes(PropertyId propertyId, PropertyAttributes attributes) override { AssertAndFailFast(); return FALSE; }; - virtual BOOL IsExtensible() override { AssertAndFailFast(); return FALSE; }; - virtual BOOL PreventExtensions() override { AssertAndFailFast(); return FALSE; }; - virtual BOOL Seal() override { AssertAndFailFast(); return FALSE; }; - virtual BOOL Freeze() override { AssertAndFailFast(); return FALSE; }; - virtual BOOL IsSealed() override { AssertAndFailFast(); return FALSE; }; - virtual BOOL IsFrozen() override { AssertAndFailFast(); return FALSE; }; - virtual BOOL GetDiagValueString(StringBuilder* stringBuilder, ScriptContext* requestContext) override { AssertAndFailFast(); return FALSE; }; - virtual Var GetTypeOfString(ScriptContext * requestContext) override { AssertAndFailFast(); return RecyclableObject::GetTypeOfString(requestContext); }; + virtual PropertyQueryFlags HasItemQuery(uint32 index) override { UNWRAP_FAILFAST(); return PropertyQueryFlags::Property_NotFound; }; + virtual BOOL HasOwnItem(uint32 index) override { UNWRAP_FAILFAST(); return FALSE; }; + virtual PropertyQueryFlags GetItemQuery(Var originalInstance, uint32 index, Var* value, ScriptContext * requestContext) override { UNWRAP_FAILFAST(); return PropertyQueryFlags::Property_NotFound; }; + virtual PropertyQueryFlags GetItemReferenceQuery(Var originalInstance, uint32 index, Var* value, ScriptContext * requestContext) override { UNWRAP_FAILFAST(); return PropertyQueryFlags::Property_NotFound; }; + virtual DescriptorFlags GetItemSetter(uint32 index, Var* setterValue, ScriptContext* requestContext) override { UNWRAP_FAILFAST(); return None; }; + virtual BOOL SetItem(uint32 index, Var value, PropertyOperationFlags flags) override { UNWRAP_FAILFAST(); return FALSE; }; + virtual BOOL DeleteItem(uint32 index, PropertyOperationFlags flags) override { UNWRAP_FAILFAST(); return FALSE; }; + virtual BOOL ToPrimitive(JavascriptHint hint, Var* result, ScriptContext * requestContext) override { UNWRAP_FAILFAST(); return FALSE; }; + virtual BOOL GetEnumerator(JavascriptStaticEnumerator * enumerator, EnumeratorFlags flags, ScriptContext* requestContext, ForInCache * forInCache = nullptr) override { UNWRAP_FAILFAST(); return FALSE; }; + virtual BOOL SetAccessors(PropertyId propertyId, Var getter, Var setter, PropertyOperationFlags flags = PropertyOperation_None) override { UNWRAP_FAILFAST(); return FALSE; }; + virtual BOOL GetAccessors(PropertyId propertyId, Var *getter, Var *setter, ScriptContext * requestContext) override { UNWRAP_FAILFAST(); return FALSE; }; + virtual BOOL IsWritable(PropertyId propertyId) override { UNWRAP_FAILFAST(); return FALSE; }; + virtual BOOL IsConfigurable(PropertyId propertyId) override { UNWRAP_FAILFAST(); return FALSE; }; + virtual BOOL IsEnumerable(PropertyId propertyId) override { UNWRAP_FAILFAST(); return FALSE; }; + virtual BOOL SetEnumerable(PropertyId propertyId, BOOL value) override { UNWRAP_FAILFAST(); return FALSE; }; + virtual BOOL SetWritable(PropertyId propertyId, BOOL value) override { UNWRAP_FAILFAST(); return FALSE; }; + virtual BOOL SetConfigurable(PropertyId propertyId, BOOL value) override { UNWRAP_FAILFAST(); return FALSE; }; + virtual BOOL SetAttributes(PropertyId propertyId, PropertyAttributes attributes) override { UNWRAP_FAILFAST(); return FALSE; }; + virtual BOOL IsExtensible() override { UNWRAP_FAILFAST(); return FALSE; }; + virtual BOOL PreventExtensions() override { UNWRAP_FAILFAST(); return FALSE; }; + virtual BOOL Seal() override { UNWRAP_FAILFAST(); return FALSE; }; + virtual BOOL Freeze() override { UNWRAP_FAILFAST(); return FALSE; }; + virtual BOOL IsSealed() override { UNWRAP_FAILFAST(); return FALSE; }; + virtual BOOL IsFrozen() override { UNWRAP_FAILFAST(); return FALSE; }; + virtual BOOL GetDiagValueString(StringBuilder* stringBuilder, ScriptContext* requestContext) override { UNWRAP_FAILFAST(); return FALSE; }; + virtual Var GetTypeOfString(ScriptContext * requestContext) override { UNWRAP_FAILFAST(); return RecyclableObject::GetTypeOfString(requestContext); }; }; } // namespace Js diff --git a/test/es6/unscopablesWithScopeTest.js b/test/es6/unscopablesWithScopeTest.js index c286640f610..ad12fc94999 100644 --- a/test/es6/unscopablesWithScopeTest.js +++ b/test/es6/unscopablesWithScopeTest.js @@ -626,6 +626,30 @@ var tests = [ assert.isTrue(p.configurable, "Object.getOwnPropertyDescriptor(Array.prototype, Symbol.unscopables).configurable === true"); } }, + { + name: "__proto__ on a WithScopeObject", + body: function () { + var originalProto = Object.__proto__; + var o = {}; + + with (Object) { + assert.areEqual(Object.__proto__, __proto__, "With scoped load of Object.__proto__ matches explicit Object.__proto__"); + __proto__ = o; + assert.areEqual(o, __proto__, "Object.__proto__ change in scoped 'with' matches new __proto object"); + } + Object.__proto__ = originalProto; + + with (Object) { + assert.areEqual(Object.__proto__, __proto__, "With scoped load of Object.__proto__ matches explicit Object.__proto__"); + assert.areEqual(Object.__proto__, eval('__proto__'), "Eval with scoped load of Object.__proto__ matches explicit Object.__proto__"); + eval('__proto__ = o'); + assert.areEqual(o, __proto__, "With scoped load of Object.__proto__ has changed after eval Object.__proto__ override"); + assert.areEqual(o, eval('__proto__'), "Eval with scoped load of Object.__proto__ has changed after eval Object.__proto__ override"); + } + + Object.__proto__ = originalProto; + } + }, ]; testRunner.runTests(tests, { verbose: WScript.Arguments[0] != "summary" }); From 3ddaa169cc10a45d02e6970e16c95679116f8588 Mon Sep 17 00:00:00 2001 From: Tom Care Date: Thu, 18 Jan 2018 15:32:02 -0800 Subject: [PATCH 16/18] Factor out common code in SetProperty_Internal and PatchSetPropertyScoped --- lib/Runtime/Language/JavascriptOperators.cpp | 257 +++++++++---------- lib/Runtime/Language/JavascriptOperators.h | 12 + 2 files changed, 134 insertions(+), 135 deletions(-) diff --git a/lib/Runtime/Language/JavascriptOperators.cpp b/lib/Runtime/Language/JavascriptOperators.cpp index e6ff817159c..5b4b2924a69 100644 --- a/lib/Runtime/Language/JavascriptOperators.cpp +++ b/lib/Runtime/Language/JavascriptOperators.cpp @@ -2486,61 +2486,74 @@ namespace Js return SetProperty_Internal(instance, instance, true, propertyId, newValue, info, requestContext, propertyOperationFlags); } - template - BOOL JavascriptOperators::SetProperty_Internal(Var receiver, RecyclableObject* object, const bool isRoot, PropertyId propertyId, Var newValue, PropertyValueInfo * info, ScriptContext* requestContext, PropertyOperationFlags propertyOperationFlags) - { - if (receiver) + // Returns true if a result was written. + bool JavascriptOperators::SetAccessorOrNonWritableProperty( + Var receiver, + RecyclableObject* object, + PropertyId propertyId, + Var newValue, + PropertyValueInfo * info, + ScriptContext* requestContext, + PropertyOperationFlags propertyOperationFlags, + bool isRoot, + bool allowUndecInConsoleScope, + BOOL *result) + { + *result = FALSE; + Var setterValueOrProxy = nullptr; + DescriptorFlags flags = None; + if ((isRoot && JavascriptOperators::CheckPrototypesForAccessorOrNonWritableRootProperty(object, propertyId, &setterValueOrProxy, &flags, info, requestContext)) || + (!isRoot && JavascriptOperators::CheckPrototypesForAccessorOrNonWritableProperty(object, propertyId, &setterValueOrProxy, &flags, info, requestContext))) { - Assert(!TaggedNumber::Is(receiver)); - Var setterValueOrProxy = nullptr; - DescriptorFlags flags = None; - if ((isRoot && JavascriptOperators::CheckPrototypesForAccessorOrNonWritableRootProperty(object, propertyId, &setterValueOrProxy, &flags, info, requestContext)) || - (!isRoot && JavascriptOperators::CheckPrototypesForAccessorOrNonWritableProperty(object, propertyId, &setterValueOrProxy, &flags, info, requestContext))) + if ((flags & Accessor) == Accessor) { - if ((flags & Accessor) == Accessor) + if (JavascriptError::ThrowIfStrictModeUndefinedSetter(propertyOperationFlags, setterValueOrProxy, requestContext) || + JavascriptError::ThrowIfNotExtensibleUndefinedSetter(propertyOperationFlags, setterValueOrProxy, requestContext)) { - if (JavascriptError::ThrowIfStrictModeUndefinedSetter(propertyOperationFlags, setterValueOrProxy, requestContext) || - JavascriptError::ThrowIfNotExtensibleUndefinedSetter(propertyOperationFlags, setterValueOrProxy, requestContext)) + *result = TRUE; + return true; + } + if (setterValueOrProxy) + { + RecyclableObject* func = RecyclableObject::FromVar(setterValueOrProxy); + Assert(!info || info->GetFlags() == InlineCacheSetterFlag || info->GetPropertyIndex() == Constants::NoSlot); + + if (WithScopeObject::Is(receiver)) { - return TRUE; + receiver = (RecyclableObject::FromVar(receiver))->GetThisObjectOrUnWrap(); } - if (setterValueOrProxy) + else { - RecyclableObject* func = RecyclableObject::FromVar(setterValueOrProxy); - Assert(!info || info->GetFlags() == InlineCacheSetterFlag || info->GetPropertyIndex() == Constants::NoSlot); - - if (WithScopeObject::Is(receiver)) - { - receiver = (RecyclableObject::FromVar(receiver))->GetThisObjectOrUnWrap(); - } - else - { - CacheOperators::CachePropertyWrite(RecyclableObject::FromVar(receiver), isRoot, object->GetType(), propertyId, info, requestContext); - } + CacheOperators::CachePropertyWrite(RecyclableObject::FromVar(receiver), isRoot, object->GetType(), propertyId, info, requestContext); + } #ifdef ENABLE_MUTATION_BREAKPOINT - if (MutationBreakpoint::IsFeatureEnabled(requestContext)) - { - MutationBreakpoint::HandleSetProperty(requestContext, object, propertyId, newValue); - } -#endif - JavascriptOperators::CallSetter(func, receiver, newValue, requestContext); + if (MutationBreakpoint::IsFeatureEnabled(requestContext)) + { + MutationBreakpoint::HandleSetProperty(requestContext, object, propertyId, newValue); } - return TRUE; +#endif + JavascriptOperators::CallSetter(func, receiver, newValue, requestContext); } - else if ((flags & Proxy) == Proxy) - { - Assert(JavascriptProxy::Is(setterValueOrProxy)); - JavascriptProxy* proxy = JavascriptProxy::FromVar(setterValueOrProxy); - // We can't cache the property at this time. both target and handler can be changed outside of the proxy, so the inline cache needs to be - // invalidate when target, handler, or handler prototype has changed. We don't have a way to achieve this yet. - PropertyValueInfo::SetNoCache(info, proxy); - PropertyValueInfo::DisablePrototypeCache(info, proxy); // We can't cache prototype property either + *result = TRUE; + return true; + } + else if ((flags & Proxy) == Proxy) + { + Assert(JavascriptProxy::Is(setterValueOrProxy)); + JavascriptProxy* proxy = JavascriptProxy::FromVar(setterValueOrProxy); + // We can't cache the property at this time. both target and handler can be changed outside of the proxy, so the inline cache needs to be + // invalidate when target, handler, or handler prototype has changed. We don't have a way to achieve this yet. + PropertyValueInfo::SetNoCache(info, proxy); + PropertyValueInfo::DisablePrototypeCache(info, proxy); // We can't cache prototype property either - return proxy->SetPropertyTrap(receiver, JavascriptProxy::SetPropertyTrapKind::SetPropertyKind, propertyId, newValue, requestContext); - } - else + *result = proxy->SetPropertyTrap(receiver, JavascriptProxy::SetPropertyTrapKind::SetPropertyKind, propertyId, newValue, requestContext); + return true; + } + else + { + Assert((flags & Data) == Data && (flags & Writable) == None); + if (!allowUndecInConsoleScope) { - Assert((flags & Data) == Data && (flags & Writable) == None); if (flags & Const) { JavascriptError::ThrowTypeError(requestContext, ERRAssignmentToConst); @@ -2548,70 +2561,89 @@ namespace Js JavascriptError::ThrowCantAssign(propertyOperationFlags, requestContext, propertyId); JavascriptError::ThrowCantAssignIfStrictMode(propertyOperationFlags, requestContext); - return FALSE; + + *result = FALSE; + return true; } } - else if (!JavascriptOperators::IsObject(receiver)) - { - JavascriptError::ThrowCantAssignIfStrictMode(propertyOperationFlags, requestContext); - return FALSE; - } + } + return false; + } + + template + BOOL JavascriptOperators::SetProperty_Internal(Var receiver, RecyclableObject* object, const bool isRoot, PropertyId propertyId, Var newValue, PropertyValueInfo * info, ScriptContext* requestContext, PropertyOperationFlags propertyOperationFlags) + { + if (receiver == nullptr) + { + return FALSE; + } + + Assert(!TaggedNumber::Is(receiver)); + BOOL setAccessorResult = FALSE; + if (SetAccessorOrNonWritableProperty(receiver, object, propertyId, newValue, info, requestContext, propertyOperationFlags, isRoot, false, &setAccessorResult)) + { + return setAccessorResult; + } + else if (!JavascriptOperators::IsObject(receiver)) + { + JavascriptError::ThrowCantAssignIfStrictMode(propertyOperationFlags, requestContext); + return FALSE; + } #ifdef ENABLE_MUTATION_BREAKPOINT - // Break on mutation if needed - bool doNotUpdateCacheForMbp = MutationBreakpoint::IsFeatureEnabled(requestContext) ? - MutationBreakpoint::HandleSetProperty(requestContext, object, propertyId, newValue) : false; + // Break on mutation if needed + bool doNotUpdateCacheForMbp = MutationBreakpoint::IsFeatureEnabled(requestContext) ? + MutationBreakpoint::HandleSetProperty(requestContext, object, propertyId, newValue) : false; #endif - // Get the original type before setting the property - Type *typeWithoutProperty = object->GetType(); - BOOL didSetProperty = false; - if (isRoot) - { - AssertMsg(JavascriptOperators::GetTypeId(receiver) == TypeIds_GlobalObject - || JavascriptOperators::GetTypeId(receiver) == TypeIds_ModuleRoot, - "Root must be a global object!"); + // Get the original type before setting the property + Type *typeWithoutProperty = object->GetType(); + BOOL didSetProperty = false; + if (isRoot) + { + AssertMsg(JavascriptOperators::GetTypeId(receiver) == TypeIds_GlobalObject + || JavascriptOperators::GetTypeId(receiver) == TypeIds_ModuleRoot, + "Root must be a global object!"); - RootObjectBase* rootObject = static_cast(receiver); - didSetProperty = rootObject->SetRootProperty(propertyId, newValue, propertyOperationFlags, info); - } - else + RootObjectBase* rootObject = static_cast(receiver); + didSetProperty = rootObject->SetRootProperty(propertyId, newValue, propertyOperationFlags, info); + } + else + { + RecyclableObject* instanceObject = RecyclableObject::FromVar(receiver); + while (!JavascriptOperators::IsNull(instanceObject)) { - RecyclableObject* instanceObject = RecyclableObject::FromVar(receiver); - while (!JavascriptOperators::IsNull(instanceObject)) + if (unscopables && JavascriptOperators::IsPropertyUnscopable(instanceObject, propertyId)) { - if (unscopables && JavascriptOperators::IsPropertyUnscopable(instanceObject, propertyId)) + break; + } + else + { + didSetProperty = instanceObject->SetProperty(propertyId, newValue, propertyOperationFlags, info); + if (didSetProperty || !unscopables) { break; } - else - { - didSetProperty = instanceObject->SetProperty(propertyId, newValue, propertyOperationFlags, info); - if (didSetProperty || !unscopables) - { - break; - } - } - instanceObject = JavascriptOperators::GetPrototypeNoTrap(instanceObject); } + instanceObject = JavascriptOperators::GetPrototypeNoTrap(instanceObject); } + } - if (didSetProperty) - { - bool updateCache = true; + if (didSetProperty) + { + bool updateCache = true; #ifdef ENABLE_MUTATION_BREAKPOINT - updateCache = updateCache && !doNotUpdateCacheForMbp; + updateCache = updateCache && !doNotUpdateCacheForMbp; #endif - if (updateCache) + if (updateCache) + { + if (!JavascriptProxy::Is(receiver)) { - if (!JavascriptProxy::Is(receiver)) - { - CacheOperators::CachePropertyWrite(RecyclableObject::FromVar(receiver), isRoot, typeWithoutProperty, propertyId, info, requestContext); - } + CacheOperators::CachePropertyWrite(RecyclableObject::FromVar(receiver), isRoot, typeWithoutProperty, propertyId, info, requestContext); } - return TRUE; } + return TRUE; } return FALSE; @@ -2939,55 +2971,10 @@ namespace Js // is true, this must be a normal property. // TODO: merge OP_HasProperty and GetSetter in one pass if there is perf problem. In fastDOM we have quite // a lot of setters so separating the two might be actually faster. - Var setterValueOrProxy = nullptr; - DescriptorFlags flags = None; - if (JavascriptOperators::CheckPrototypesForAccessorOrNonWritableProperty(object, propertyId, &setterValueOrProxy, &flags, &info, scriptContext)) + BOOL setAccessorResult = FALSE; + if (SetAccessorOrNonWritableProperty(object, object, propertyId, newValue, &info, scriptContext, propertyOperationFlags, false, allowUndecInConsoleScope, &setAccessorResult)) { - if ((flags & Accessor) == Accessor) - { - if (setterValueOrProxy) - { - if (WithScopeObject::Is(object)) - { - object = (RecyclableObject::FromVar(object))->GetThisObjectOrUnWrap(); - } - - JavascriptFunction* func = (JavascriptFunction*)setterValueOrProxy; - Assert(info.GetFlags() == InlineCacheSetterFlag || info.GetPropertyIndex() == Constants::NoSlot); - CacheOperators::CachePropertyWrite(object, false, type, propertyId, &info, scriptContext); - JavascriptOperators::CallSetter(func, object, newValue, scriptContext); - } - - Assert(!isLexicalThisSlotSymbol); - return; - } - else if ((flags & Proxy) == Proxy) - { - Assert(JavascriptProxy::Is(setterValueOrProxy)); - JavascriptProxy* proxy = JavascriptProxy::FromVar(setterValueOrProxy); - auto fn = [&](RecyclableObject* target) -> BOOL { - return JavascriptOperators::SetProperty(object, target, propertyId, newValue, scriptContext, propertyOperationFlags); - }; - // We can't cache the property at this time. both target and handler can be changed outside of the proxy, so the inline cache needs to be - // invalidate when target, handler, or handler prototype has changed. We don't have a way to achieve this yet. - PropertyValueInfo::SetNoCache(&info, proxy); - PropertyValueInfo::DisablePrototypeCache(&info, proxy); // We can't cache prototype property either - proxy->SetPropertyTrap(object, JavascriptProxy::SetPropertyTrapKind::SetPropertyKind, propertyId, newValue, scriptContext); - } - else - { - Assert((flags & Data) == Data && (flags & Writable) == None); - if (!allowUndecInConsoleScope) - { - if (flags & Const) - { - JavascriptError::ThrowTypeError(scriptContext, ERRAssignmentToConst); - } - - Assert(!isLexicalThisSlotSymbol); - return; - } - } + return; } else if (!JavascriptOperators::IsObject(object)) { diff --git a/lib/Runtime/Language/JavascriptOperators.h b/lib/Runtime/Language/JavascriptOperators.h index a00919e9af1..2bacfe2c728 100644 --- a/lib/Runtime/Language/JavascriptOperators.h +++ b/lib/Runtime/Language/JavascriptOperators.h @@ -674,6 +674,18 @@ namespace Js static BOOL PropertyReferenceWalk_Impl(Var instance, RecyclableObject** propertyObject, PropertyId propertyId, Var* value, PropertyValueInfo* info, ScriptContext* requestContext); static Var TypeofFld_Internal(Var instance, const bool isRoot, PropertyId propertyId, ScriptContext* scriptContext); + static bool SetAccessorOrNonWritableProperty( + Var receiver, + RecyclableObject* object, + PropertyId propertyId, + Var newValue, + PropertyValueInfo * info, + ScriptContext* requestContext, + PropertyOperationFlags propertyOperationFlags, + bool isRoot, + bool allowUndecInConsoleScope, + BOOL *result); + template static BOOL SetProperty_Internal(Var instance, RecyclableObject* object, const bool isRoot, PropertyId propertyId, Var newValue, PropertyValueInfo * info, ScriptContext* requestContext, PropertyOperationFlags flags); From 94599d2219b3e33f0fa1d546fe9dca3a04da3bcb Mon Sep 17 00:00:00 2001 From: Lei Shi Date: Tue, 30 Jan 2018 15:50:03 -0800 Subject: [PATCH 17/18] fix for wrong signed/unsigned convertion with RtlAddGrowableFunctionTable return value --- lib/Backend/PDataManager.cpp | 2 +- lib/Common/Core/DelayLoadLibrary.cpp | 4 ++-- lib/Common/Core/DelayLoadLibrary.h | 2 +- lib/Common/Memory/amd64/XDataAllocator.cpp | 2 +- lib/Common/Memory/arm/XDataAllocator.cpp | 2 +- lib/Common/Memory/arm64/XDataAllocator.cpp | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/Backend/PDataManager.cpp b/lib/Backend/PDataManager.cpp index c2869690a75..0092c7e1bbe 100644 --- a/lib/Backend/PDataManager.cpp +++ b/lib/Backend/PDataManager.cpp @@ -21,7 +21,7 @@ void PDataManager::RegisterPdata(RUNTIME_FUNCTION* pdataStart, _In_ const ULONG_ // Since we do not expect many thunk functions to be created, we are using 1 table/function // for now. This can be optimized further if needed. - DWORD status = NtdllLibrary::Instance->AddGrowableFunctionTable(pdataTable, + NTSTATUS status = NtdllLibrary::Instance->AddGrowableFunctionTable(pdataTable, pdataStart, entryCount, maxEntryCount, diff --git a/lib/Common/Core/DelayLoadLibrary.cpp b/lib/Common/Core/DelayLoadLibrary.cpp index aee807b52e5..2d9a6fb724f 100644 --- a/lib/Common/Core/DelayLoadLibrary.cpp +++ b/lib/Common/Core/DelayLoadLibrary.cpp @@ -63,7 +63,7 @@ LPCTSTR NtdllLibrary::GetLibraryName() const #if PDATA_ENABLED _Success_(return == 0) -DWORD NtdllLibrary::AddGrowableFunctionTable( _Out_ PVOID * DynamicTable, +NtdllLibrary::NTSTATUS NtdllLibrary::AddGrowableFunctionTable( _Out_ PVOID * DynamicTable, _In_reads_(MaximumEntryCount) PRUNTIME_FUNCTION FunctionTable, _In_ DWORD EntryCount, _In_ DWORD MaximumEntryCount, @@ -82,7 +82,7 @@ DWORD NtdllLibrary::AddGrowableFunctionTable( _Out_ PVOID * DynamicTable, return 1; } } - DWORD status = addGrowableFunctionTable(DynamicTable, + NTSTATUS status = addGrowableFunctionTable(DynamicTable, FunctionTable, EntryCount, MaximumEntryCount, diff --git a/lib/Common/Core/DelayLoadLibrary.h b/lib/Common/Core/DelayLoadLibrary.h index 89d21b0f2da..8d32284d515 100644 --- a/lib/Common/Core/DelayLoadLibrary.h +++ b/lib/Common/Core/DelayLoadLibrary.h @@ -126,7 +126,7 @@ class NtdllLibrary : protected DelayLoadLibrary #if PDATA_ENABLED _Success_(return == 0) - DWORD AddGrowableFunctionTable(_Out_ PVOID * DynamicTable, + NTSTATUS AddGrowableFunctionTable(_Out_ PVOID * DynamicTable, _In_reads_(MaximumEntryCount) PRUNTIME_FUNCTION FunctionTable, _In_ DWORD EntryCount, _In_ DWORD MaximumEntryCount, diff --git a/lib/Common/Memory/amd64/XDataAllocator.cpp b/lib/Common/Memory/amd64/XDataAllocator.cpp index addea6f9359..7974a37900c 100644 --- a/lib/Common/Memory/amd64/XDataAllocator.cpp +++ b/lib/Common/Memory/amd64/XDataAllocator.cpp @@ -134,7 +134,7 @@ void XDataAllocator::Register(XDataAllocation * xdataInfo, ULONG_PTR functionSta Assert(runtimeFunction == NULL); #endif - DWORD status = NtdllLibrary::Instance->AddGrowableFunctionTable(&xdataInfo->functionTable, + NTSTATUS status = NtdllLibrary::Instance->AddGrowableFunctionTable(&xdataInfo->functionTable, &xdataInfo->pdata, /*MaxEntryCount*/ 1, /*Valid entry count*/ 1, diff --git a/lib/Common/Memory/arm/XDataAllocator.cpp b/lib/Common/Memory/arm/XDataAllocator.cpp index 770ac3dabfc..97f3420b83b 100644 --- a/lib/Common/Memory/arm/XDataAllocator.cpp +++ b/lib/Common/Memory/arm/XDataAllocator.cpp @@ -81,7 +81,7 @@ void XDataAllocator::Register(XDataAllocation * xdataInfo, DWORD functionStart, // Since we do not expect many thunk functions to be created, we are using 1 table/function // for now. This can be optimized further if needed. - DWORD status = NtdllLibrary::Instance->AddGrowableFunctionTable(&xdataInfo->functionTable, + NTSTATUS status = NtdllLibrary::Instance->AddGrowableFunctionTable(&xdataInfo->functionTable, pdataArray, /*MaxEntryCount*/ xdataInfo->pdataCount, /*Valid entry count*/ xdataInfo->pdataCount, diff --git a/lib/Common/Memory/arm64/XDataAllocator.cpp b/lib/Common/Memory/arm64/XDataAllocator.cpp index 8debfb577e9..6eef3ad5203 100644 --- a/lib/Common/Memory/arm64/XDataAllocator.cpp +++ b/lib/Common/Memory/arm64/XDataAllocator.cpp @@ -125,7 +125,7 @@ void XDataAllocator::Register(XDataAllocation * xdataInfo, ULONG_PTR functionSta xdataInfo->pdata.BeginAddress = (DWORD)(functionStart - baseAddress); xdataInfo->pdata.UnwindData = (DWORD)((intptr_t)xdataInfo->address - baseAddress); - DWORD status = NtdllLibrary::Instance->AddGrowableFunctionTable(&xdataInfo->functionTable, + NTSTATUS status = NtdllLibrary::Instance->AddGrowableFunctionTable(&xdataInfo->functionTable, &xdataInfo->pdata, /*MaxEntryCount*/ 1, /*Valid entry count*/ 1, From 4cc6158afaf75cc99b888e6dd13e40c3600666ad Mon Sep 17 00:00:00 2001 From: Atul Katti Date: Tue, 30 Jan 2018 16:31:36 -0800 Subject: [PATCH 18/18] OS:14980704 Suppress incorrect TVS warning for ConcatString buffer length check. --- lib/Runtime/Library/ConcatString.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/Runtime/Library/ConcatString.h b/lib/Runtime/Library/ConcatString.h index 2c996e63c59..90a07392500 100644 --- a/lib/Runtime/Library/ConcatString.h +++ b/lib/Runtime/Library/ConcatString.h @@ -113,6 +113,7 @@ namespace Js virtual void CopyVirtual(_Out_writes_(m_charLength) char16 *const buffer, StringCopyInfoStack &nestedStringTreeCopyInfos, const byte recursionDepth) override { +#pragma prefast(suppress: __WARNING_POTENTIAL_BUFFER_OVERFLOW_HIGH_PRIORITY, "WDGVSO:14980704 The CopyImpl method uses GetLength() to ensure we only access m_charLength elements of buffer.") __super::CopyImpl(buffer, N, AddressOf(m_slots[0]), nestedStringTreeCopyInfos, recursionDepth); } virtual int GetRandomAccessItemsFromConcatString(Js::JavascriptString * const *& items) const @@ -204,6 +205,7 @@ namespace Js virtual void CopyVirtual(_Out_writes_(m_charLength) char16 *const buffer, StringCopyInfoStack &nestedStringTreeCopyInfos, const byte recursionDepth) override sealed { const_cast(this)->EnsureAllSlots(); +#pragma prefast(suppress: __WARNING_POTENTIAL_BUFFER_OVERFLOW_HIGH_PRIORITY, "WDGVSO:14980704 The CopyImpl method uses GetLength() to ensure we only access m_charLength elements of buffer.") __super::CopyImpl(buffer, _countof(m_slots), AddressOf(m_slots[0]), nestedStringTreeCopyInfos, recursionDepth); } virtual int GetRandomAccessItemsFromConcatString(Js::JavascriptString * const *& items) const override sealed @@ -253,6 +255,7 @@ namespace Js virtual void CopyVirtual(_Out_writes_(m_charLength) char16 *const buffer, StringCopyInfoStack &nestedStringTreeCopyInfos, const byte recursionDepth) override { Assert(IsFilled()); +#pragma prefast(suppress: __WARNING_POTENTIAL_BUFFER_OVERFLOW_HIGH_PRIORITY, "WDGVSO:14980704 The CopyImpl method uses GetLength() to ensure we only access m_charLength elements of buffer.") __super::CopyImpl(buffer, slotCount, AddressOf(m_slots[0]), nestedStringTreeCopyInfos, recursionDepth); } virtual int GetRandomAccessItemsFromConcatString(Js::JavascriptString * const *& items) const