diff options
author | 2021-09-07 22:08:18 -0700 | |
---|---|---|
committer | 2021-09-07 22:08:18 -0700 | |
commit | 2a6edf00cdb1326267d9099adc2986c94f048134 (patch) | |
tree | 827830dd77e1feb5fe5b292b2a1f755442bdd400 | |
parent | cbd2c56a1fb0fd36f34af20a38e681d6e5e9d64b (diff) | |
download | bun-2a6edf00cdb1326267d9099adc2986c94f048134.tar.gz bun-2a6edf00cdb1326267d9099adc2986c94f048134.tar.zst bun-2a6edf00cdb1326267d9099adc2986c94f048134.zip |
lotta changes
35 files changed, 2677 insertions, 1502 deletions
diff --git a/..bfg-report/2021-09-07/20-38-15/cache-stats.txt b/..bfg-report/2021-09-07/20-38-15/cache-stats.txt deleted file mode 100644 index e6eb7beab..000000000 --- a/..bfg-report/2021-09-07/20-38-15/cache-stats.txt +++ /dev/null @@ -1,4 +0,0 @@ -(apply,CacheStats{hitCount=282, missCount=909, loadSuccessCount=909, loadExceptionCount=0, totalLoadTime=2175868528, evictionCount=0}) -(tree,CacheStats{hitCount=5106, missCount=1854, loadSuccessCount=1825, loadExceptionCount=0, totalLoadTime=2776654359, evictionCount=0}) -(commit,CacheStats{hitCount=456, missCount=455, loadSuccessCount=455, loadExceptionCount=0, totalLoadTime=372600222, evictionCount=0}) -(tag,CacheStats{hitCount=0, missCount=1, loadSuccessCount=1, loadExceptionCount=0, totalLoadTime=1846715, evictionCount=0}) diff --git a/..bfg-report/2021-09-07/20-38-15/deleted-files.txt b/..bfg-report/2021-09-07/20-38-15/deleted-files.txt deleted file mode 100644 index 4d16daf26..000000000 --- a/..bfg-report/2021-09-07/20-38-15/deleted-files.txt +++ /dev/null @@ -1,10 +0,0 @@ -e2e5ce1979cde7a27f105fc408e375bbc6a9d78d 2440744 babel.js -1cfda0305a0e23d0aaf4459029f0b97424d0f22d 34249752 bun-mimalloc -3d1b9752b1c462355c07baf04a899d7e243de9ba 17114108 esdev-fd -e5a1f05f3dd585ebeddf0b78a78082c4f9d42a31 17114340 esdev-fd-relative -de17c61c5834facba4ce5ff167414afdb16a81ed 17105956 esdev-lists -34dfc5e5b01bb30bf117a1e4e18520646131b19d 3763972 esdev-nolists -6f7432d07df4c2779547e33f5bac81b215b3ea2e 3323468 esdev.before-comptime-js-parser -ab63d272b000dc6b557fe4352e3e23e09138ad74 5072152 esdev.beforehashmapupgrade -c3deb64ab97419cfb03a84ac88f59136da605976 1641475 index.js -e88a54f27e8adb1cb2675f199c27bab6d7af5eab 4695415 profile.json diff --git a/..bfg-report/2021-09-07/20-38-15/object-id-map.old-new.txt b/..bfg-report/2021-09-07/20-38-15/object-id-map.old-new.txt deleted file mode 100644 index c9309aa1e..000000000 --- a/..bfg-report/2021-09-07/20-38-15/object-id-map.old-new.txt +++ /dev/null @@ -1,796 +0,0 @@ -004ce69edc0de5f72b98acb99706cd95f6ae37de fdc7a6cda956785939a6e063a78f043581ce72a2 -006ca4f13c0866ff843cc47046f5b7dce18635ef 7005f4c43c8fa403b85f14afcf4c9b5a4c8c4cbc -006cdedf9cd78d468d80d7e480c09ceea01cbe9f ab0c159c5f8b10291cbcb7a265c127045f1f5646 -00c222c35a4460b21e095acc35a470fbb4778b19 d59e7b27b0b525126fe5011f5ab393f9f5e6659a -01e0b77b9826f63c96b91595a2ab86fa332186e6 75b0bf32219091de5315ffab351245dd2bcb4d81 -0202aa41c68bf264e5647107c50de3cae69634f0 6619890c616bde65b3798b28fb99018b1eac71e3 -02063fca614201895bb174cce04f920541f760d8 76bb26de8302f4dd1c833496cb7b5f2f4e808ce8 -024b2ea94ea2f32e058948c3d874ad73a03b7423 19d472c8470fc21a10af053824b3724e50ac9a9d -02ab68785f38e40a5c9be80d95f77e42c53efb3b cf65bb41ae3557df4ec6d48908deaa47b33f97ce -02db9729e1d0cddf9343135f46bf843a3d3a34f8 86642cbdd528bbf37708dbb30a815c9a68b6aea1 -03070af28d033467d43e3284f6d01d3e85e3159a 7141743ce6ee9d176a12bfb99ff60a7b02e4919e -033b74cc2a73dbd082239e01de8538436018fafe 62dab0703d7443412216e4583ac16158c5fb6f46 -0407510e4d759af6dfa05d4c02ab4e20bc70d52f a93143a377465cdc1f1bad193d1f29e4b324c24f -044e11d720bc6742dc53b30b4e88e8be7e76c419 8c6700792666b1d7a128095cd5cff392df68375c -04c57114d5a7719af387e9d2476d91b17570107c 197b3ee34d816b8b94b6257df82671b6da71342b -05b9e8941703dfcabf87ee6efcd71e694177c2c5 f51f303b356f48bc277c0faa43ec55a0360ccfdc -05c4f89ce3dcde42a08322e6fcccc475f25ff652 31cfa726daadca2d8f9be8cdb21705a3feb325fc -0603bc926ea2bd4e26f13d5e492164a536537c0c 1104878a5375c38947e90350c1c843a4fedacdba -061fa3a1525c8294cfed1c3efea446a4b93a9a77 12a72a957d55e2b264a15b054822a260fcd9f13d -0657f16e2721f3558eda5dbb83d247a752ed53b5 923e2c5c5d43adce832c8eb4999a8070dbd8cced -0686604fee7ab5afe2166f3d9445f874669e419f 46a5d15fdc456214b4a1c70ec5a5f6eae06ad149 -06fbc24b11f12d6635496a6d251324c021f7af68 ea10dacc92ed40fd7729d06a961117d25c78b9a8 -0741d36654eb5f94527cba22897d9849458e40a1 212182f7459daeb4eae3aaab7f971df9af214664 -0828b39f9961e68d2705610cbd866ad33aa2d656 172aede346f9d05cf80ec42b30bf11593560b1bf -082d18484830e21acb4b7312586041efd0246073 5a51ea3957cabb7e07fb5451506c90f30b2663c2 -0840845d680827de4f68593784fc9786c3e9be2e 54730377e204e709739db20b22880d3f7e6a450e -08b7d4153328ffbf3115b5624a3e06588d1f1c2e 6049d32360c93074a3848726687d1d6e991f523b -090d70b0d34f2410cf31399113046d0158602bb8 61c2716b4e3507655ff0bc1ee62e74fa6ea046f6 -094913a99f22888b97696aabe12fc1a5452788d6 ca6514c77ca665cff0d3bfe00077d421af10af2e -096ec1222ad723d006b0151f10cb0c1b95e2bfd3 bd9f137b1bfb5bc3b215515ff9305e70a638daf9 -09ceececba22d159805662d69b8e3aad83d20590 d264d4e4ba40ae754765afcc3d134beb4521a5cd -0a10ee211f39e5144e017cb8999c52864b0079d7 62be7227c55a767aca3a6febc8d987ab07684293 -0a3991bad1ce041448616d923e6259855b995ffa 72aa3ca7dce78f2377b1c9d40771f42383b2f766 -0a6a7b6bfe574130985a0b494590791ce87deddf 097558fc250564c524f0d2729b5332adf50cd8f4 -0aec1d2b006d469d491734c82abebe946d9c76a1 706f2387e81b255a393962daeeebad4e675d8e3b -0b404f6b004008c4c1e2157efd83f96cdbee5a94 63ba289f153db57ef744ecea4f423408d94a3646 -0b776fb7f19dde86ea53968412c6eeaf9bae556f c015c0c0cd06506c4460dd27f88aaa1fc2109344 -0b8128cb3b4db02f9d33331b4c2c1b595156e6c8 16c76743048ef905269e2711cb0148ecc4e57f3f -0be674fc33f6b65a6b961b0368db6c9e6ab7ac95 b0462af75b08528371d23431c97fd2788582349c -0bfd74af5534635c907be1ecbf2c421970d4a005 a4322470530f710fed320ccc740d6ef320c940c5 -0c4feff467d453c7e2f878f96e95886d5a3098ad 4606fc2c9bb798717c5e06b5ca825b5f54df9947 -0c737635a788c45bc88b7664eaf3e61254b99201 f7a41effddb7493cea6e433af676d9ab779be12a -0ceeeab78ee2a2805360bf6360669c6a7e794871 c31b1a0bfb075bf622e2592eec1f7d6c7a8fffa4 -0cf91f998c9b16a8118f56eba5e5292509a10460 0bc8c01a5f44bb1c5e6584420a6d56b5c14db6a0 -0d79861a94b446f9a1f5f776ee520301aa50f4fd 610c75a4922f76096b07dee38df1c101b61261a9 -0dc1c1a74b845d037326f4f2facd786924ca722e 85b6d448cebcb305dce4dee4b7fb96e309e5b94e -0e174fda765f72adc695df06925e10fa1236ab2c a857aeb5a021116e010ecd292859483c50e05759 -0e6c46819a96a9e1269572a265ade10be4a3a937 8c41ac8b23c5063329772adb1600cb1b312070f4 -0e83af70079b1c9a0b15702c2954678a0e4a62dd 5602f576d63783303b8b2f277de436dcbeb2a044 -0ebea22b0af00b60ec52412fe1e30cc027a4ffc5 028d944fa6fd58a3490d53c75428babf3735ce54 -0f14c80d78fa9b50acda0776528a82deb24efe93 3cb6c8ee40a94a9241531b9af12a673932214fe0 -0f3bc3bb6f1bcf6cd14bd8d041c5665b2ca0ac5a 23e3af849a0bbbf8943227941f900dc91421a358 -0fa9174e701e4afbfba6ec18edda25578442a7c2 00c5e07b56e376ec7ca265e3c40ce313f4072678 -0faf61249e76382dfb1aa8721249474eae920753 574be79253f503fe3caedf5d66b1ff35f71a55d0 -0fb2584f15e15a2ba59dea62eeae89eea216a0c7 21a1134de36e25b3559fac88243d1a9e1c7ca273 -100e1331f89f22f7b9f0b6ea218c802d42115607 422c9f2d9f3239036296335f0593a9e78434cb7a -106d1754971a0e8465cb9d0e1c73485a93593e05 4b647fdbec7aa5331096f21951a753edb29181e4 -107310d785ee9dfbd258a1fc015976a76cdcef82 2961b7c8cac1033c1f039272038fe309e3fe6c01 -1086d4f894611c1171f57d9eaf82f9170e9de2d1 d009e02c1db0f93b24a9c1b539135a25347f1027 -109b5e9a9ca96d95984ad56b141c5fdb624d9397 60352e1bc4b16c5bbe9ee16ea8829c7811e33e7f -10f6e28285cd9f8f16685c5c056f6b6347ec7233 a37a475450a970d76fb9a841db8ee7ceb19ffdaf -111f2ea806309f7290b4deddae19f5f40b074164 0de6cff285be7d5ea130ae1a7ee0c012e7e538e9 -119b115f69632ca93fbce753f9daf5b91f411c20 e0c0dc71918f20b19604ec0674866bca7a4f0d47 -1255952868e433ac83bc353938fefffe74e9f6d4 76e2adba7bc62f3ff17b14953869b7963989990e -12ba9b9bc288573e3a5099adfa14c486c4cc980c c92c7beececaabbfd449af62511857c694ec8f87 -12db22bc3f5875ee0c43d25f8247983967451c3f bfac22d951fb3ca2e1cf849a2af0cc60c372b1ed -13f5c150eda4c076a255fc35f8a9e522e5e3887f c8f3c7dbb7f1853ce37a18b853ae67028ff729f2 -149111132c70bcadfb5ed647856f1149d1e051cd 3dc8fe6e198ecb588befde5a3fe844e6cafa90b9 -14952ff6751d201c1ff8eefcfd5657a168e30808 198a91fc246360e17dc5c5333354d25a279441e8 -1505f4cf76c35362a3164fd2a096b9ad0f159d9f 65df535c392df13fd5de574ce10d790299f07dcc -1544ff0d1fdecf4ca9c379925f56fce98acbb656 da540bc449851163477b6c16d17143f0203c7fef -1545b49eb2e48840d37be12fe563b35cafe9abac a8e4c0573e0649701a1d100ccd486090b7d01918 -15491ad305373aca07ce73a40955c416505e1534 1502efbfb12d696e5418599ab586a9436980e9df -1567dafa8c7bbe97c34e42c86995bd193eeeb6d5 4d61ce4dd7d0e83e5ef71048874b86a8c9fdd4af -15c10a09c48cd603bee9a56729918cb8cd2f5eed ebde8e1ca24e04a07f71088ae97b5a8391426115 -16814814d7af4047bf9fdc9fe73a0a095059a4aa 273e1f88b5529b55b9ecd6a62c6b66b452fad5de -171acbb20b361f1793fa5eaf9940d4ad7f9aec1c bdeb6b0bf8137ee36df0aab436ac50713ddeb5ef -181ca7d66f0e49ff02f484ff4e9b04afeb981cc1 2305a9665a83a5c25e168414a1fa56ff12e26a43 -18996c8fd95c8bb19d5330bd55e131cb156d88e7 c6a287902e6e226b61c5f0a5c1b246b8a65d4eb2 -19275a07342879d9b02b9d9527b762c8bfadb9e6 a90760b597b5fa8eff001e82dfa9d80a4af00581 -1957f0fc23f0c4f0b3aea4a322904401d9be0853 6aa88ae93106bc3754c43fb94f9a3dee15432543 -195c69606b8fd09f4276baafcee876201e393835 26f53dbcd8859a433fcada62f3184ad2edc4a124 -19a5d395bd41b0a0b854cdf749eb96149f91cbe1 5db15b6ec7cd41cc15214f4448b064f4dd11f974 -19f4c59b4281bd24130a6898e3b43d9d6d7e6603 223410eab3c18be989e520a7aeac470bf941dd6b -1a1ae8bfb61bdf4929c2a78e356b6c27d6f8586a 91a81e3863f4724d0691fb988283debe0ca0d1c0 -1a8190d9da9955eafb4e735d260681ac4326d606 ea89765b72175ea3f56497d9e5ba41c7061b9b31 -1abca35a1e83a1ccb2cd39bc04568eb9bc170b15 0daff24b16487acfb420813793bc432f8ceaf333 -1aef375ddd4b41dacd917b2792abefc9165195bf 075b77728e83c5e2f7261a3d8b684cc7729db9b2 -1af8f276d7abdd3e635167fb3ee1106fe70fcd06 189a0c926e4a21f4b0e74d43fbf55b16bf2745b2 -1b038a16e0324191f0627dd2b9c3881b37d0d6c2 892254ba9a7f0241944283d6766ab54ca0c35e8a -1b5188743a3ee186f6e49224a2e0eaa0e07a32be 03464d2159485018656b4797388e70344e401532 -1bb1da5812dbed677b1f9a919f6dacf52a7c323e 5dd2ca9ec21affe8a4a0202ef586dfc0bd4864ce -1c1400d346eeaf3e954143bf7df0108674809257 3006012d8a10086e9ed3d536704d080d694d8edd -1c3f788fd71462eb9cde63e1e27cebac8ab746aa 3863baac41f44299c317f2d3d4255fdae3f83768 -1c808594317e02f9f25abbdc81f7f734fd7e39f7 904bf17a5171eb9b450c5cada6450fed348c6358 -1cc15b6c20f88721f55748036404e7f2e62ec71e 756c41719cd63ff3dc4b695d42ddf88a63cd8abd -1cd6b587a21a8bf20eabc64b710085dd66cc7ac0 5162ab0bbfa9668fa5d50ef4590060f6ee9ae774 -1cf9e5c6a19860c34e89e4f332a3f17c1b96006d 2435599890c48478eb34480f34b636e70916d9e1 -1d3588ef5a3677311f405c8112bc5c57be134f03 741d35f0b3f50edd58592259890ca0ef71d2b8dd -1d44b63675a64567d0b74e05d4f5bafaa56976ba ca2a3f69ffdfd59900ead5af8c93d46d55af5187 -1d598bb05a3bac62d86063125e1fe2962f0b5cc6 f59892f647ceef1c05e40c9cdef4f79d0a530c2f -1da09a997008e246955167b79883b958e23f0d78 06ef8cf9ebd6dc13bbaac6d05461294a4d7f417d -1dadcd697f7608747b2c4fb9406a008a0546b0bf ab7e49f9793bc493d89274773d444ac59c0d3163 -1de0ed05d40099149bf6bff6b50c8664723ef243 4adeba3dcbf06e5a1ddcc654d40ba9fdf8aa7bd5 -1ded3f3a1977d5dfd34f865b7e38f122d9b36e95 956258d1e8b38da452cce046681e468d5c7ecb97 -1df72ccee721726a705ddfd30a883479dee8d901 5be39f3c50033f8bce668754e5a092481439a387 -1e0462781fc05d22b6f84c2d9f23ce1124a5b9a6 ba743d776a6a417bdf42755b62a7868b15ebfe73 -1e0eb4012a5b40f32d8e6f40fa3edd9f27d0a8ec e4b054060e77a00bbcb067d17bda421294a2dc9b -1e12dcd4d5474f7827ceb7dba62a18cd7dd082b8 b11f5c371c60c8da6db35c015e1e300dacbf31ff -1e76ebb5375247231181ec19a6396c6acf4684fb f74771144e71e77969fe50d250818e2fcc0800bd -1ea6a0d624b0fc42acda9a81f214d06336b9271e 4debcdcbbbd994e989694242a4c32201514b1de2 -20352ce9bc2029d1e8ce490e408f0a37e300b4b8 68dfc075e78f8c139620a8158d6cdeb73a4bda06 -20b96180ffc41610dfb21a041d1258f2ff8d4196 4b7917ba8f5ee8e62b0e268d121b7fd30193b967 -215b03322953ea41de93c5c3c368554d1ab12e92 3b0a19efe02825d72c5ea4ac6b9bc69734a9c9d2 -2172f3c5e367e604349ad17866f7408ac259ca73 0f6a4854e32533918b85bfe0c75034ec5b7fdc15 -2174c6b769676c50686bb23a5ecca26a1d6eb1bc 69b101adcffc48e73153f581665f487ee4abe975 -223011bf76c7c344b303fd5a646c207317e8740d a0f90436a712856c9eef90ed230a9514580a7a5a -2235ce0f73dc4734268f014f5ce5d2a9c3a2dded 92150bb914b508c022f83ad6324496340006c0f5 -22732051bcbe708388299c29597662e0681c8742 9ea4715efa9495934ac7bb86f8f9b7a4b0cf607f -2299f44cc9092dad2ef48ea54af2555c192a723e e43d3e995f8ca14a1ea887a5628ca0930ecfdf9d -22dcf8f5e7e7355f4bee53e983477bece4166a62 e82bcf4860c1fc43de189f13a18e8526a2966f44 -22f55e5c8515f4f37b3e5a428f78a5ea2be23028 00bf12819a04ee454c21d34c23daa5f7ede0429a -22f8d15d518744938366487b66eab7f7047d3ab5 731c5243ac48077ffa1f974dcf46f3bc176792b6 -23220fd348f86bda50fb4e4a64cce9c4b167499f a58adfcaa2bcbf24d568af3a0175a6a3ab4e1e05 -23e64279d8bbaed26c28ac19db66c064dc3929ba 70126c074f8d29a5c1767e0830907e736a30febe -244ae8c593228005c4fa540e1ab7280e7ab0b8f2 fe88e7bcf43e8f0e12f4787d1ea496cdd30a4998 -248d1a7a93512b14ffd7d8a47942361cc0dc8745 68aa7762170d06f0e049f8f2ec58c03bbab97dab -2567243c8db7a60a5ba8ca7c662beca080cfa4f4 24d1479ea825cfc6c7ec8f74780bc72b7cd6bc8e -25902aab817f4c075d570fa5774715d3955e25a7 a23ce8245d0c18a5479b9adb75775dc52709b39a -266787bcc923cef50bd18eeae37c123ad26e393b fa9ed14975e52647cd1c98da173e4e80169a396d -26745bb5f300481fc242c8e81de6f252f698c863 ece2a3ccfd34f9d3c0bb5d8ac8b85a1dec9568f9 -26ed041f6a3e38fee54ea88583fe8bcc64b8a9da affeb9207efc63e4915e85b78f6ce99d7b6486ad -270b7f74cdbcedc9737128855b87a30157539db7 1c6882b13c462748fb6d0e45a6d9cf1d0af00bda -271edff308a26e91624bdc72cef740948111ffca 2eca27aba4bd25ebb716658dcd5028212f2ec5f6 -27284f129c72bd3faac27707cc0e6716ad9288e0 56c689d684467694a51db5aa9e765146718e6c1a -272e52f55e44e998b9238e4173de37bfc6a05a94 ca90126cc43e688cfbe8636f6b373c4bb3af602c -28534b2e34398177a118936b6baa589c1f1af648 2b66058a957a7ce4cc4818557273647f01b19568 -28645a9dd98e627a1160ec2a2baa13ae52cfb4ae 738b3755ef5263ea55a2805c764a72d7005e1dc1 -2888f060c7fdf316edcb1bd2158ddddc64c6c9fc 99db6a078ed2e3ed0b58a29fb6ce46dc5091eba0 -28fce4aac174c7cf7a492ca4c5442d57a4f395a3 bed0227a8f2d8b674a98803659922d08ac665bfe -29ceac2a8474322997b89ce217b059bc0c5bc810 88b992abd6c15be850cbc9433a37e473ce719204 -29eab9d5b02a6b4e7576aa242014d131f57aedf9 674e7ed4a8d768bb60ee612affe846c4d7904691 -29fe5b730fcef8065c55620beb985374e5ab00fc 274b139aa83a162e2de150c9ea65afed2a2d6dba -2aa165d11f45932722d48c9058d21069f054b20c 0387807abb9b1ff593bbd3bdd15fbd7f5af62183 -2b359dcdd0ea013b3a553074fc245bd7eed88a1a 3c8638b7d2130e255d353b45fc77bf97f8c0c4e6 -2b3c0584c623486d8ab5dc838bb7ba861b4395d7 fc75a0dea67aa55fa972b6244358c58ac03bd2d7 -2b6a239fb6a5ba735b544949e4a770765887fcf8 f1d3aade3b408ead1c1459eb9e0d90e90290d687 -2b9ba4fbb2af94e9fb6b812d303875bfead9b3e7 c4129a9d90373867d0d8a1eb0f52454f1d4da559 -2bb8c501f67c8af954971133a25e1e83db772ed2 2660af3a4a2ed0cd4df582e7e177d6ae644c5b98 -2c20d88e8d0cf66b32daceb942ba9bf8514f5705 f8131f42bcd039964586cbf3bd019dc9a449c438 -2c212929f8d94e08dfe8794154dc45cc97924458 feb7adcd087f1999daad4058dc7864aed6fc4796 -2c4d3184a4f06ba9dd7d27d653834589796ebd0f 7b48e206db14c8a4bcf845cc79a342fad20c36dd -2cb2628ff3be77ca42db8e40fe94dd6e42891533 bff37539b9b493b101ab01e2fdfa5b71a7a3d165 -2cbd4c9d809cff90dc4a2305c0acbaf46c3a1578 41c9896e11948b91dea278636c226516f7c01f3d -2d155ba16395ac01c08daddcbe1e861eaddacda7 6f2749d13d93963be2b512d2f64e4179561f10a1 -2d6455446033dbd32bfc2ab5dd1bba97d9bc25dc 8ffc43c3ba3982c6c3964b07b6479e0fd7462425 -2d697b7d808474f6b004f7ce178baa181054c487 f30e368f16c9f4f3a9d707ca49d21344f6ba08e5 -2e3a36779b60c1cefe6ce0d281d5f99581037f50 065f8656026303489625c3ebb9edd2e340531847 -2e8d6d549da0e278ed466358af172154faaecb7f ed9981c9c6443443a8d0e93ecaec344d79d2aec0 -2ef6397ab9af3832fe749ce9c86c7a60a1599174 28ecf60267f64d74192c71687635afa5ce415147 -2f4cd402e4f718d2ab89e4ae61582d95eae7cd97 ecabda3ced144698684717dccd067e2519def21d -2f765fbec1679619dd8d331113024b51aea99c3c 491b8a941a50e10d2770692acfbfdbf01f28ca72 -2fb07a8efc7f22e98a251a9bc0661a047fcd5d42 b4a0dc3bfcdc94a8d9222d74a7e35d065c51c4d5 -309b1516a9e1dc5d8a787b946f8fb1ebe1f77134 a72d7c24cda1b55d19bd5775fb05a47493544dd9 -3121b4f08362fbd32383453e273c1052e9db0386 daedc4c025af6fea4fa2a3dce9f15ff058e8701c -31ea3edf5301062ee7ac40bbb008363d9d4eda0f 5a010ad811495d11294f50c4a425576ae2fd5a10 -3264fe15270286b26b700eb2a2b7f5edc91628d9 61ff6b8e49d5e2ec3c1d2b3f94bbf5c7ca4cdc00 -32c52ee5d5dd7abee4cc6f5671c7260134ebb903 fb78ac97b37d64c8a39a44ddd583e441486c6887 -32cdc13f63c0d946a3ee1ec60fb65785e1035b8a 7257094662010a1f9f16dc75c708f1ff55bde14e -33135e9090e165e3d3660c0adae971f439722999 2abcfa9ce49145acba14e2fd99fa97d69f37692f -33647ef65cbac1c89c16a8b81dfa7de0fad5af3e ac123f23719e3212ec1a6a16e0b1f915d1c175b4 -3389a02e9a00eedb6d927f137d52c977f7e31b9a 83a2f64481f1268ee4cd3d03ac962c526ff44122 -339619405ab468de6d5b0747ae1055f2057331d9 04b68e3471cfaf12df4b42fd5a64fa9202eba68e -33b36259d50e4e9c16b5d8de8db607a5215d1cf4 b353a9a2f4893af782b5cdb95c68a338c26bd080 -34571e473cf4e83a92ea778f551f51598ed91ac5 a703afedddfff4f1a4652a234aea199764830c87 -3521bd1bb606f164f6ef1cdc4cfaae1663c22891 abdc26a5fc495092c865f89091bd39242fdb2b07 -35672606fc050ca2f5f8524d307a1da91263efd0 cfbbcab5ee4931d67b8e15d8175291675019ab92 -35b5bb035be33001a3c2accbe590bb5312ea4b04 d18ff76912f6c4522132adfb7c0af1db7c5b6726 -35f3e31a6a1eee8e97dc58cb437a2c3db5b44ce2 d51185340b08b37b20b94bc09d36006a57a63469 -361e1eef7ff766c0cd395bdbc75dbf1ed5689ce2 687b22908f15020d254eb90672bcdddbdaad7f06 -3637987b9ba42805c60ed664769e8fc46fa524f1 70912ec46f4633e474625539c49c19dcfb3d9823 -36a0843dfb0113ba727469e3886667a1b363e265 6ec40991e1d3d9fdaa7ec1ddc54a80818f1c40c5 -36f03bf491cf274f68361e334a706538464ee271 1d1a70c21fc1f6e9e618cb52262e21bc37ac4be3 -3708dd44843274f397ae28b2cead39de8f55e6a6 d975ab19db14b75b1099470cdf984329537a20aa -3780a0cbb033aa7524e220d247067e02af70d998 882c96339839b49fe7da6f0dc3741089836c9204 -37aaab196be93693511180f50f14618e9eb64312 dbad798c92f9c8025bdeaba34fef0fdcab167a89 -37e17be7aaad324d4236517ebc2fe4a10bd1280e 8a0836c239f9950afb4e8862e9efbd8e02de9a77 -3833d6059e1fe11590e60a5e2c11f19b2c7c48e2 6cda74994b6e205229f086b0bc3db546af32de85 -38413effab0fe4073d64780bcbc898d44c0cb724 0babc4037b4f9c580db9a7fe85d0485b6f64a142 -38c7eb73c14e3fe76a265a8da1506f90722a914d 3731376943862e17646b477bc98ce3871f064e99 -38fe54261ddd7bc7e59958bed2c8f5bb57c2392c 913891905f6d21bd7e044b034311fbd6cd204c00 -3934d5a037666dd08f827e925737ff58067d2fa7 c6fde3a32f4704b42b884d9cc4689c88195cc367 -39ccf0d9d0af0d9109e5ec45dc81059fa7d809f7 606edd00d6c3c607628a25d3f73795eecaa4e1e2 -3a09f407179b44180c9bec9ae221909012fc293b 1aa81cd90dce7bc2236ea771a43e58d1c35ec682 -3a95a74b7feadb59a215ff06446ccebff4a4008e b55e64ffa3617f8213485bf76b4ea0a7a0d6d3c3 -3b27a2cb502325f8c9ef0ae95f6bfaf5d4c9accd c8f2def7c4fc11c777e8f8247d2cadc969f5c02a -3bcce51fa4d740b1e6ddf465919ec987f995e402 81f3a52e8958df0f65450832c10e94c0ada21858 -3c4c2de1156cdc098057eb17076255b5f1a54fd7 3adc0339204f1bd138958ca476968b002327eea8 -3d831ad95904d2123964f2ebccff48f1e9f954e9 2fa09f7c09d48ac74049fd60231cd4a3a2764a31 -3d9028f0eed792f088fc04a878e436a36699fb82 fc1a37ccedba77ad8696f3580d4d1963b74ea980 -3e5e26fccb7a2127f4bf396494e99d33f965840d 194b60191d3bd339ea3f211957a09121f15e9235 -3e7edcfa75e005bdb0f0528df9e73b2c8de69ae2 adabbe0f597a4b1bc9bf33d10f105e11bdfccdf5 -3eb9218a9131cc499795101e1d6983cee295e70c d1612d7198224cb6901edd119ff1e9da0e434ac3 -3ee0efeb8ee7e1d0ad336f3ac09a8f93f1c95cf8 09d99ab640a8311c54cc216de89ea0aa58b9dc81 -3f10c8790629ab157d9377759cc50a4b962cc6f4 7ed1b19d94f93e4313af65358f37e3337dd19f27 -3f197d1ce0c197864ad4c7c7b8238af4370275b4 07416311ce087783b9dbe38cb43e49d07a298c0b -3f2a2e25ce7e495731c9490d130916683eb21e57 49ba78767c511819f746493aab8904e675a05221 -40289b88e912b24d7ff5bd0930209c34f58be0c1 092f0f786b7e40c329bff6d8a777623e4004db16 -4111cf5f2fcae89870870510b8acd282a21f7b4d ab0be4a0b5cc858f3d1db05a8bb063cbc27bec96 -41214ec4d756ceb85c8edf4859f7aa3c1e0d8032 38a18842a6b86891a1666bce0e98fd774de2c444 -412ebceb481487a2ccd48aee6eb7575860fad767 2971bb96ea201fa5596c1489caca12e26e7cb0de -41b05c241a7c0bbfb9e665264ddd55941c275cc8 75e09650d515049a15743987e121dc0e70ad2da3 -42aaa8eb8157572ca7e80fd6b03b6566b6276a61 bbc95209f00ae44db6b765a9a92c2f8683acd4ed -430460b82f411aaa2c3b87f2e2478de8de24513f bb00c519c3e0086954421f5ecc6494672e4e1fb5 -43366ce3634ca35629e1f8234df86206f6411910 5ecf48a21dffc5aebabe439ec534fea7b91b16b8 -43380a4d68d57f3d78f5b1e00962a59461140967 c51c65325faf6692d3eebf92927f56cf35f6b613 -4366e33712174036de02e0446c09abeeb89aec83 476bcfdae32b237300faeea6f78e50cf245957e3 -43b6cad8ca8df92bd050fb64b121895abfbb6b3c 10250a55288f297a3468e68d83172f2854d9aadc -4469b6802710a2131761c8eb583ffdee9b730ed3 8e038d24c11a8d4b471cb72fc86de135ec3042e5 -446b9c1449f948782a9b7d6979245e64b22193eb 8d41b835955da65d35b584fb24c8ed054bea8d58 -44bab947c650bb258d4cdfdf3dfc0b48c559945a ddd5ed1cc2e64f151864bd977cedcefa6929fb74 -44fce3c5e800f3fb3fbc139a38f14eae9e0c0225 122ef023dd642af830a5419b6172640ebf8af841 -4511f00ba592e99bafdc74aaea08b247183c135d 44ae01dded6f911bd54faa9011a59b3a65650d6c -45330259f3546d19d4b19e0b9455aa82cbb21c9b 59f3f99be9adf78584413fa400ffd096e9f3c3c7 -453cfa5689a97b2167015d8f5b6940d11f895aa3 8036244eb23f51521e330fce1fe449c2330b1292 -45b55a897022b6f8dc052cd6d43183ce56951bd6 7cc2661aa69d29cb2e888d70c2dd92786f53eede -45c27da1f4131a943667ecda3eb6bf734ffc1dce 662ffb39f149c41e8e0fa56dd5d47dc6a9360cf0 -45dcff6dbca37a66d1fc904c18bd44c9e1c3c411 5f7f782b2ade5660d26c275a0ef59379302afa24 -45ee7874f2c8566c3034743161031b0859423f41 d95ffe63023c09ea792d4f0379374f7c6c7975e6 -460d483d7a2c1ac4225a1d5e806ac9985b53544f a032e7c82ee747f5cf85257b11f0d3e3325ffac8 -4636b8eea36b7dbd7f26756801b9462c341279ce bdf49e578e836d186580979d156610112dd8157c -468927c14b8e54037fa3f10f75cbb16da232771c 1b3d46d92cde4b74aae0bb43400defcc6ad57c9a -46b7d6b052d68c0e06b7396d4090068d4e671edd 44f82e6a9c58514977363ca678985d9e504bb5dc -470a24e86e3bd78c566aa0f3f0940e9a93a729f0 97feca864193398d165d678de67b4a72d70ab182 -474df61a866ff88862a73373653ef5e55538b171 983bc9bbdc35d64f9bd5f336d000f5d42a53d577 -47d17083def6817c9fe4964d2bd52303addf793c 7cfdef87ee13374afc908dd5b0860502036d1c70 -482765145072070d956495362a86dcfc5d40ff1c be2baff4618442b3474bacb738799338b58591d1 -484f34863698c6da56aeb4948950ff9d496a44f2 6043e15c031b442759781ceb3c701d530f0d7407 -486e8c9d460eeebea024e96dbabcb7f2bfaffafb 6a5f34a6bc0546a8f17b8fc0af7688a831a797ad -48c5a443c72d4739f154f2e9f63187b49bb78720 6f8f76d6d1d3e735f99654024b38e19624c0cba0 -48ddb88937b7e0eef76020fdba279f91e24aa153 2bf645774a18710b2435e24dea4bde91cb17cbd5 -48e56be05ecb58ec0d727afc1d8be508cd4c35ac 9f74fba3951934034a573bd5bf5cda7617474eb0 -49504c79b2a5ee2a888a5a04e703c1553e22570d c4019f14cd6d65d718e8c0d558c94259d67e4a59 -4a0ffdcbc6404744f7696b05740db36d7a77e359 1ad2e204087b8b77900d7a26147c58752560b86d -4a3b4953ee83f7a084657f11565cc2d6b9dabb11 0e74b0081c63c674bc7a1a6d0d69ffabdd19dd5b -4a4039fcb3547382abb6f597efa2f679fc4ba9a2 07b26525ca7ad065d7db9515d42c32b6ff657e54 -4a5076bdc2ff91907af0293b38e29f96782d1a83 d27a599ec2ce734f9ad5490dcfac5e3b97cef30f -4a91ffab7f7d51e4f260022be6cc9ef4712aae76 6dcf1a84df8aad9bf14748b9d5a74955b772784e -4b0460253bfdb9c1bd466eff0b1f07dbb6cb0ce4 1c6a8303cae36b7d9cb4996ad8b2c64f9d7bd5a2 -4b2a396611ec03270dc768b70e488b0f5eee2a37 10b4b872a2824b6d7c66030dafc831f0da3309e8 -4b996236ef859c3f5aa8b93eae66d8878674f527 d2b15c0d75b60696e902084eeb0d1938ca3053d4 -4c60accdc11bedacef2cbe8c65e35ab5e965408d adc4e9b23c21d549c44a87c74ef191c462af2441 -4ca1e17778dc4a331da5a9a21f56e0e590c799ce 9ca283bb43ebee74bf36af50807474b962ac44a1 -4cf75ce1610a7f7e31e5501e1b9d1807cb03adde 33b7ba861e05570c5c848a6afcdcfbaf60e9b217 -4d6a8f598afe29459f1b7b243daddaa4b395036f 2fac6239771e89f3e88167e5eeec16666ff0cbc8 -4dc6e2f51867acf1cf5d601aa5444a99a9f95142 9ed3abc513da0659c5d7ecdbb16823e0df1806c4 -4e1619c17a080718e5ac7652506c0d2c8d12ad50 a16a5c209ce6136ea10e842627a846fe4cd18420 -4e3f680ac479552abd24f4d60d98a43d1ecb64c3 1e9e42618b1923fdb65232129a1556c1b962a1a7 -4e5e7b1679571e51474c607771059c8783f8dccd b698d6cbd9fd9532ec5cbe27dbd12940a4927084 -4eb1220c53ec179ed40081a3d50a5248ae013af3 063ac7dce5705a148ec5b268fe9c62e2e0f6371d -4f1d32be168c179915eca319ffabf637fdfd7938 2884b759c3143d7ba1d44ec8c38987566940d050 -4f9e073cee8e22a48bbab3ffb5b1fae89c76cd75 43f635d7a7959e578330c43d20b6f52d623acbc0 -4fd408537571b7b960d1f451ef774a067c125fce db740a4eb45aecddb1c4bddbf13e7254065ef6a6 -4fff6a2e7dfe4361a3b52db9e1e21509ebddec74 58ba0fbbd3fac97a952255676671e6b3018bb344 -5015c6a96964c23154509bc26633c18ce36aa9ff 020ce327794089995f6b4511cfca1e949a7eab03 -505f84af5b76d30fc91bdad0b6203484d547413f a8fb11b55767945a47e92120179f2f762b1f8e99 -506d9b81a7c9dac5dd870f6735c39df105e72fd4 b918e7e372fce947ffcfffb0e412c34bb2c6174a -506f7720589fae86232d802a5d4276a648e6ab29 444236a2f1ecd05650adffbc5a060a6d7d8ce37c -5164b69b57e8c11666591823c5b83435facce5c8 a4a62d9874198097245f3da8e8695587b7ecd456 -51df94e5993926573669e3490ea6e84cbff04e47 1010bae1a350d12f7db49b8ca7f94aa748790b77 -5214ce60067b21563dbb8ea61e8d74b755e2bfdd 4df2b3d6be2190e264a1573fb458e2faa424e784 -528b0161655ff705c8effc6cc617260043e7d6a7 d38ba5b88cf91f8b97decf888325fc1ce25c7396 -52966012b4b74d24ab28a0c75740aef35fb75327 c20df72d7319ff55ed4e5c9c7ff1abaab951d0bd -52de5c6b9a3e8b030dcc2baf3fb372a50a7da99f f53c4a07165bc65921e8a54d154df2920adeba9d -52f37e4fe4c8873617abcbc3b3af61e8f1d79edc 87d01c9f4a315341c1c5f57e09e29df88ce9c996 -541084b7238d54d77cb13402274718311f2030b4 afcbcd231c9328bfd9b6ae8c81ea296d4235ae81 -54b9af031aceb11592b038cb7db66b4f4034ba28 4c264eb728230921214cef4497d41f9086e07dd3 -54d9969b4ce25c04700503cac465842ede798317 494177773fb74f8c7623c1d7acf92962f7d345ad -54e5125c87f3c8fa2a032f80481a848ef4850640 6f25dad9e55294529af3a070d26bae0133b14f1a -54fe530ad6eb7ae1acb3afd5a40051cfe2997b89 33a7f2e26fd248b05169297bf10b0d570977719a -5520bfc07fc174ca4eb1ed37dabb20d898ee60b0 4f98332ea83b6882e401d351556e2a7601485959 -55951edd7a1a349c1cada83cf52abe73c6d6023c 68b6e80b911439cecbc78d23fab3be82e77f2997 -55dcde581df46b425733508c3923e073ccdf880f b5612b303b934b668c35c1a70d64f498b7c62856 -570f048ee83a2be61986afe2e22402e4b66a44c5 c3eb6e18241297a587d228d25ffcf70f78e0e860 -572035e3a0bb38f8c14595abb75277816231cd2e 42e6cd96757a0f9c01d103de1f42bdc7a9e958b8 -575548ba54df1bf91201c0df77390e939693a8ba 4f3f3e1433a286f107f654acc2be58d7b4bead92 -57d7667683ecaace3693b3fc7a0a6ebb04c70315 71ab3f46e97fbea000b24e52d5b531d67c8101e1 -5838337bc046d81b9c7fd32a3832268064b50c98 449f4d4975679c74b9e036162fdd8f623ab6b260 -589e4ffb8bf04c86ed3938fd2f39878a7dcdd1bc a4565e610dc29fcaafca819378785b5e4d46b095 -58b90d8656274d66bd117b74db3101b0bf1aea55 ec5ba789843f532ac0bd00516f569065ce03ba94 -58c1c3b1a5ff24e040d995559baf3162f7e11ab7 bae23210f4d6421e6549a1dcc94e7dc52bf280be -58d77ab82795266ecee5f437f324db81f5706682 fa2f60cdd529c589505f2ec5fa2eb21c5abf8aaa -596f3c064ab989e94eb509b88cef09a016e43620 08961dc3ce04cb615bc81a7ccc62cd53f2d126d1 -597600521199046bc81d311f9bd29983331d9dac b8941666b46f9b7aa46e3f3db42b429a0d1d26cd -59ad5254248d35c6c125120e36c6b99a07caeac6 73ccc7eebe885a6b52fd6e0942f1c330d3be1b34 -5a5495ccf9acef713a80f1f9f27bdd4e0e3f4cdc fe268bc7851f7c8d8bb1c63934dcb8a7ed708a06 -5b7e7714457dccd07091504e8b7244ba7600cd71 1b894ad9f61d4d39486f3a03aab42de4f750294e -5bb38e0bc75a600d9c1b744990d9e4a1b66edf42 54a7c4290a3112226a83f8c9cccc1433dd8d282e -5bdae0ee491e28b49ceed6136f04e0c1feddc808 afb6684782ffb35f6c750a57426c79ac762acc7b -5be66ba368826809d8db4ec9f27d524e14644055 ed88fce577a04f953b84bb105bb5597e9d9c42e7 -5c87473fc3ddacb836fa4d2b5396d55a76eea210 a79cf57db8f79d50d2484206663d5b5caa880918 -5c9b83b21ef101b6f7dbcd962fe18559f778aedf 3e3250043095684b2f06c9618699b4776bc3e09a -5c9dc3f46c2382dd72b8cf8b54cbc58355301381 3a34f2e952869e7c05f2d129cd3c24101a46d814 -5cb5af4416c12518eb195d1b310990fc5c94d6c8 4a8b2546526e97583a2743d17405f664cbf6a16e -5d208f9ea0be4e5f2a682f25b0a20a623ce61091 079fe523d4c397c5e4d877cc2faf8d29139e0a07 -5d89343b0bd923fd7400770d25b12985eb937f70 1e81d4d2a907394d2593d1f51023410ea0d5fbda -5d8e539c88cd45f9b23fb67f5664c2fadff87f57 541b8e059a79d63a9fcc8c0c4cac928249ee734f -5e5759b983e6b9a0150068ebb4e0654b0f9f9452 69cacac024c4c8edf0f64c32fcf6e00177093fad -5f72442386c143bda8669200e1ee7cd269ae9cf9 db6ac5f51bcc34651aa28e4b762e9b58a42e9ef3 -5f7e191cc0ee813807da0f223f0dbd2bd680b62b 1ac581bda71fec5dfd09a6ab508a1adfca80b358 -5fb7e05e3581b222ba782fc9d840236af740e2cd b034bad73d00f2022ccbeee2d72a95f77bce3b3a -5fe401181dc002f3c103bd043d662f7ccd35d751 09b53e14c4d4a6747bed5b045b42cd3aaadd388d -5ffd8e40b34c5b11e5632c5939d16dba6b7167f2 a2d8026810d024b8d229d810e81d8170c842c267 -60cc85dc0652b34e9c7ec409f32ba635cc4b2e51 68fa7ec2d0bc3549b398929ad9794783be451b7c -60f073fd137190e9f1d77dd659af44714c003d7d f117fb7daac19bab2a956d191f706b853918083b -621bb9573de156fae8977f62d8ac26cc7bea4db2 216c5555d60e0eb5a36f4b4e2b00fea34335ee82 -62d8cd28481cb6a55599a53a561e07e81b6f1453 789e2cb8b43afc84500681fa472461a66269e5f7 -63b8182b7cc12a34983ced41a38b98ccb2c46251 1a24d776997d4d09baf8decd0fd95bbd33894171 -63e0680a612bbcf0166593954b7a1b36dae502f9 9ac0498aebbb7b1f0c812aab370b8879d6d4aba0 -63e622f2f366a30d4432835b1e190191fd04f6df c3d3d70ced281a1d7863b2f08f036b3bc83537b9 -6431b90b9e897153d608c6425c576ae4c140b4a5 3ce9f071711ad9d9f6b9889237f1e5ceda0526ca -64754424698f1ff4bf04ed7f5890cd4ac5cf08ce 9541d268ded6ed38d739e62cb8b4cf597cf69193 -64fb00824f00f9228be0995625a3b4b81718f83a 4dff15a434b069e17c8cb16cca1a20e8a015212f -659674b46482779cc1ec52166d2c7a240fd0bf1e 3909a1f32e12051389180034ee027c19656efabb -66057d2d32b3bc63ca03f8bbfd37998845425660 805e7c9769ee50184852fde88931b7e8854bf015 -661fa35a8a0fbd9277682f6bd31cdf85c29481af f23d7c5259b9cfe6874484cecb7add5a18255c34 -664dbf569c423280c4fb40d3114e81e0d7b9ddc3 05ec7232bfc97894ae8f04d313fed97c1d619503 -66a0a9f4fc554afeef9891915b203772fce2ffc4 49929405df6f2bf15a6ea89e33782f237195393e -66a8b49a70563c6aa57584eb47fa7292f66b43aa f68117d397bd826096fd4a2e8bc18e9b400a0523 -67546a63021c0b5b58841a03115fa699ae3e441f 0ba399d8edc3020824338bd6ea0da758b27793e7 -67fc1488169e9779794b23600401f70a1e812cad db4caf0d4216644f8c554938f4fa802a441920ac -68b92f859febe6ca09183a15bb1d257edf2c41e3 85b18e33fc8a7d5c8a8438d8af23439cef74b949 -69280c285ae63feda35dcae6bd25ef5f70520924 e5f41ea300cbb17938f7c9583cf22f5a209bee75 -6b396f27940250d33539846ae47596066f12034f 4a3b03a063ea60324ec5098a8aa3e2083436647e -6b863d5d51f7f1bc293e56ed395fe4ad49174f63 18794b18b32e5cfeb190f29fe29590d742a327e8 -6ba2feb8d2f2f9f419d8c8fc1fcbb424ed08ea08 b1b459435f375bf5eef7c6aeb7285ac6c2719b62 -6c2d19c1b0d4c3e805f90cfeb8282e2c8712578a 2a54b9f13803a06514c1681464a4a86c0c15f978 -6c4fda3a850fef640ab40f9faf56939b0483f218 6513e218e49b86d30741606580cf6da5867dba7b -6c7eeb20309923af2a6ae12e51982070c28630d2 adbbe2963cdf433d5c15664df3dc5ffd1601af31 -6cbac208df3f8aedc85a7accac0af72268d03f16 ddb9e23413cf557c58770646ee3ffc74b3b46035 -6d25d816a0724e9be5ca76fe04860668e7d3b04f e2b9d4c869c62b8f20f30cad6deed0c5c8aa3969 -6d439d05155cad8923fd030ee3140aa71bbefebb 2f817b1fe1bd613d9adbfb07716c537ba12c63ce -6d4a6d4720baa42b9498f9f753d4a5e4a3bc91fb 7cbf3b697e80b807f143422ff25dd364bf072c18 -6d5aea075142a37cd43ff94e2f59eeca3fbfdda4 feb1331ea93b6f69905f250269f72452304b0c6c -6d5e6527721d42cc92280c9bba87c9c4b8d57a7b e83e1cd54c245880c3d09a6799adba092db1967a -6d6f920280bfaacf2c541ecb8d876f16d20decc0 f808630bd61f69fd1ee205c5dee7756baa8e7432 -6dde9a7540d93ca521b77f84e894f5cd09301037 e01dde3fa2e90c8757336d8d3a8ef6396bde5a38 -6e2a265273c2526049ca37f2a6901d30dc9489b6 bba9673f5c7e8ca51db7173278b1f00c9af7590a -6e2c6cd6ea1fbda73977f563fc7fbdede1438527 e1677bb77414710c1114c3b52b3fa954d9276c45 -6e95bd8a1457d3c514adb0af6ae0c5feb1564a80 2c429f7732011fa7fa9ff68eb9c251ef79f9b77b -6ebf41260cfcca2c35a76204b239a07a3ff18db4 f4167e1dffeb7c33d912ec3ad5bfab3fdff8e2f6 -6f8bfae46cc2cb588390d6275c19d83d353fc9de 2cccb4dd553f3855b7737101fb681effa95869be -6fd10335ec16715aea75e7038e0cc708ec8e0dd2 b58b09c6278fde22fcd40203ed4b8454bb3e1c4b -6fed70ec75d3e99e8b371bb1310ca0f4686f9b94 dced70b2b8767542fb2a9f82603424bcd0d5638a -701ec4668e8f8276c207d92487633857d2db5ead fb4feea8c378704a1da6ec5bbdd3066b9a5f751f -7074af33a3e7f128a710488e66263abc8a998435 7ccdc2fb77c82b7aba3db84f1916637b043fcf4b -70bccc0b41c5f42b88782149a6f466e2bea73636 76d9a0bcce588853116c741608ec992429dbdcbf -715d19a2640f37efe627d2310b823c016e5d10c1 0ab12ea1160ddaf2e47a12a5ed57812d723fffb9 -72439452918caa05a32d4e3607910901fa2f4f85 ca4120afec54fc20295a4a7d3ce6f8c29eccd84c -72813b5b48a51c898cc42770f1f7e6b571cbddf8 3bd725d80b9b3892e42a2c9e549b9a90b084252e -72f1c676b97c0380981c295b955174b84317bf5e 0b68ccd7426d6b6cf35864db6e6d349839d67be4 -730eb465fb23bcfa23842f293712cfc2cf51d363 bdc3308271b9bcc05d6ad2661ee601309aa03461 -73247e5c9199c4a426761034e60100efad5d4395 af0972d6f2346b2bd50c693acc44a5d279607b22 -7337f27a7ebdae35232de4d5e52f1a0d711ff998 6e46883ca7b901d56e4bbdb24fa900bbdb732379 -73452660fd144d071cccbccfdcfa7058d9dd91a3 38f1eb07012eaf0e09400ba06d06fe15007a9022 -7346cdaa5a32ade26821ed97ef07f7c9ae87c0c2 ecda693e3844511644a177a0bcb146bda07effb9 -734f021602ac59aeaef9d7583a927ede94ab644a 160f83cf9e73cbc4c342238c1ca45884a9316ef8 -741e1513b7c7a3912af4a05c552265c626035400 dd9e7de689dafb29ed3e79e2b7af54ea097f75e9 -74487cdf5182a04d3c59aca580fa86f89c38185f f863177e6d19a8eb7ba3afd0809c03b14386a0f5 -74973a4535244c65269247334b59ae6d7d3598ea cd69063660ed24ea31447006319343fe841fd147 -74e75d692550c3bd0071f5f9215b0dfe5454d28e 79cd2fbfe05637d30e076b6ed379ce59f9701f43 -752283485653a568b75fc6be0fa1b80dc8dc7469 efdd9eae103bd29f2a914eccb1f4c2e0009d3fa1 -75488a9e4ea953f3a5d06f299a6f2a0822c5b06b 7029ce1e00c0631c09b9188341005f818e473a90 -755a7246e8ee0b4550e031ee79610e75a569bc41 a26e97e9e7be22c4407ccc628a54eecf09516c1f -75af302946ebf1a22da45585307923c2c9a66294 403aca1804748ef27d9b2a51b3b6535949ad7bcd -76162477e0c315599b375dd2aba0acdc58864b59 34b55c33508d0e4dcf0fef0e21c19dfaba90ad6c -766a1e5f160dbc649c3d2ebe07cf655c6337fa49 01f0cb9a7fde566e8d7bed6a454d5bff7562e5e0 -778c24f176bade5658bcf1de1fb130d236a76890 c88625436cf866bdaa68249d10880a2271f611e0 -78058ac327ae266296588613d97391aa470f49a6 7eb9207a6e9c3667439228b760945f8f2f6049d9 -7815afe6a5a250b14dff1a769fd4c30066fcb466 4749669e741ae522f2e0870ec5ea1b6c1fa832ad -78ece1d74080f1003ca7356312499b7dd52a4f99 adc52fb55e3e761f236f4130753c302bd151a1cf -78fa4c4f87ca85191e045d88d49245f410506f74 7396fae4e2430eb474c6f2c2f5677faa567568e7 -79223472f7bb22c4de1f872a542f185aa7189aaa e70ac2ce825ecf5f2d6aa16152801612bf23be8d -79565ff0f8af2c11a7ef1d9a927443d8b8537963 a9ab385183450dbc84dd67918d27509ba83d8f7d -796a9854b4a698b309a6e7a4c040047558858da6 5354a44d6a60a18b0410ebb3413153b408398faf -797b2ff557542e9d318c953b840b102695711888 d49e0a5fa129152c27b70a57d1cc7a2af770577c -79accfde6d259dfebaad1891a1b0898c7886ac27 5278fee0e74b7b123c37940d53dd37078a296c19 -7a5b25e5066c3ad2c952fed65923d55d01b18b77 96911bf275f89be9d1d277b596755ab929fb26a4 -7a7c990164ce6844ec9fe48f49bc876ee0bee413 89fc0c28e164b829d1851bf881889a5abb327670 -7a89200a5c79eba0fb72a524409f112687b28494 8d94f34db6fd82624616557323f88c60fcda2aef -7aec17b6232cb51067a289944aa733466c0478fb bbe0a3d58ccb420fe94b8d59934b2b54ed71f295 -7b36d6092a536562b22f2f4fe21e68d35c14fa0b 14245d6db3d82c2bfcb20b95622b3c7a0f8e8e50 -7bc324e749ab0046f86be323356738219f4ffee9 b71deb86a83de31f82eaa1d03e65d0abdd5936d8 -7c3a0e600037ae1711b3e4de739acdfc1dfdb6c6 8b49104e19295799d25bcb4a20f87029bc6fa306 -7c400c9b248c2e4c9e07270d1c23a370cfd5f660 9dc7f258259e95fcdb1d5d7d3db0a41992efa79e -7c576d7b62d8649f8781f4f470e5ffee798e61d8 dbbde8d858d892cc1e21dbdfb86bbff7f700707b -7c92af994d5de52ef758ac1747c8e3d65eb39658 47c660f2e1438d76682b59ae84592e7e03639878 -7cbafbc9bddb77f8a1e65b084ff5942ed7ef1133 65ea600b55663898ff571ef13d214a295ba1c728 -7d3b0e7daa374577b59f9b53c7663d767df2077d ae90b3deea27f16c1e9d3d791f1cf21e342e45b5 -7d6950da461af600735e566928162d99bdfc7603 e66466cc1a453db1370a199a32729441747761bb -7d76dcc182e80c5b67db1568e769977229649980 6f94a981d848630a8301c80c8acd4d9f75e3cc7c -7da3047f2d6cbf2b1e19fd670d0d40edce5e7192 46ab6403df79337db321556a7e4be7c54532c2c0 -7dc3ee4c893a476cee1e78c19f154f33a9d824a9 dd72bf5ab657af89d45ee629e8432d9b860a2351 -7dd6c2a0ea41e892fbb0c19b9da3fdfa96f156a2 d0a782385e6aeccf62b698fe5c15f1833aba3719 -7f2a372f08b45daaeadc313fd7e0cca652b1c828 570386b5e63950b8dcc819443a5a95942f03a20c -7fa6b610ae992a327f888a0efc251d064579df8e 798e69b2532d8923018ac2cf1436c200f986bc62 -80037859ec5236e13314a336e28d5f46a96c3300 f12ed9904b03e11f755dce7b614925ea087f40da -803710921e82251674bda689c920a0910c50bd9f 52da138c360637e5dbe4408560a189e431e2349a -8070da6ec91706ecacf789f4c0a770bc92f17283 d2e1c7955be8989eac8169ab46af93492e706d0b -808e5cfac3f776ae8e772f0c4f158f0078e6fbed a9ca6c8a07d489f0daf3cbaa7aeb62c89745da25 -808f605a72fcb702ba02e3315fa99317042f2fa7 68b331735a416aca4b65ef8466935f84f90018d3 -80b454c29f8f517b6d831562b1230dccaf068bd2 5501729e5f81a6aa65ed986148956882e207d656 -812c1222bd62826a9bd829219970332d4b22bcd7 a3cfd26125bbb5fdb2872c1b3d511ccbf6f3fc4c -818d0149312b07191340427e5b2990ae6d0cec94 97cb54de2e2990f4ba41f7b68c2b5113e40f2c2e -81fda0b8e3d27689edf75534238ea1a5ca102377 f7556fe4a6819f4d17065e49a2ab5ed55ce412b5 -82524d53e54e3ca08d97df512f923a588dcc5831 0c35a2e6d242eca658882a02fae149bc13d37f02 -82de54e123f629bf3ca17df6d10151b32efb2409 4e3dd3aadc36f3187d08764f122ee093acf1983b -831a46191601aad9c8c82ac496955d944cb32f22 112741dfde4c73a3f3cacd258a05178e6bbab837 -83aae474c26cbd61fd15f1a4a25fcc272d726cfe 22b96d3941e8ebf2a9f0e58a66affc87273b0c3b -83ff3453dcac00e847a4d23419c6eba1026bd3fb d19f939e7dc7e3250d01688647236c16be6a7374 -8444492e3cfe8712ff841b36e6cab89156a3625b df01d4de6ff8dcc9461408ab23be620045786a97 -84472ed57fbe1999e5fe88e6c4df4e28efd9c3e6 2fc4a5c5646fcd9bb12e089ae259cc1ee8099baf -84bb17d9e0dd6e31995afb7b2f49436187fc9f76 8ce74beafa7712bfc3d967944c55307f08a376de -84ea80b813c8b3dffe7ccc112b10fb034f21ea30 7d1439d570d0b03bf479114106c9698926dcdc47 -8517ba72e79b75bf016c3fa66deb85fab9ff6554 cb70d08573e72a0c470f1aaf2aa3eed755912014 -853b372665a3762b1eeeb2202e279895bce6f544 a6bf54668acf6d0e099e1ffed4f2126887b5a5c8 -8542778c30e9757fa87514f46ff5086d7c8f6bfa 4b1f89114e02f8472b63794534698ec13929080e -85a0e333ac4a33e94145af5516a951948a38d4da 281672b5eae5014716768a905920154d761bb021 -85b7f2f0702734b83a6639fdcf5cee19df4adf70 23a585cba094f192097422bf2c3e7b78256cadcf -862323b86439e2e528484c6e54e04c1574974e97 d2a9fd4802e3f9a01aee1618da8d604653695c8d -867074bb0aa06bf8441edb2b54208d38b576284c 8c5a84c20758b174742084fa0a3150490320c9b8 -867ebf04348439c48037e4944fef6d48a33555bd 01086954380a5266ddb988a344ff6251c9962386 -876ce6fc85836a99c0e78c3061d44b84042ea5fa 4d38971bfd19ad3e95ecd880ba9788f6b846fdba -87771ba895a2eb11b042a252fd1dff2a4dd54512 f6f40b5b649507aee7555123e93a1b474b92f598 -87946b9fecd8b3e75a5995f38311053ae54b0424 945cd08931d70ada914d14c4ab886fcc4493eac1 -884b0e3e31e562e4f0e0676819c442842ba9040b c3c14ff9ce2c8e02ee09b44d3f17a063d2d37ff2 -885b961ed5c7cc4a130e6fa8a656b25e31007045 c3c716d4f96b86d954115d4aba8769755a1d83f5 -88aad6aeb19f3d1d73ced59a7a5aaddc2d7408ee b7d7fac635d260a09383212bfaecc3a25bfb9881 -88ac58962ea92707f3bcc87684c7edba02391c63 7b549c655161064402a5e10ccc6498c9a05132a3 -88e461d4b4db4d938350424d50065eddfad7da0b 5d07707e05891aa7002f169a68105fbb9da3e41c -891957e2e004f1e9400a673d95e994abec4d5970 139db7e910004f063a4e8131f7578f8e1c146af8 -89c5f296d13d46da9d7f7bdae6d7bf7977336f31 dcd82703f9f688744571f1e3cf3d1376fe546535 -8a10690daafe99a8d908119f9bb855cd0f3d368a e08633c883e30aa2e87ca0327fa9d7818a73a31e -8b0b30392eedcecdd556d070bbd5e5b7b81b1b62 120d6d093ba609f93f1514fde16c0a3402855336 -8b32f4c91e543b9cebba5b5cdd90fa705f471cd4 e490577a7d49dd35c54b0bab486766a34ad22c0c -8bf708bb660b1ee46453027986c065ac7e8f2f26 a7040b8b07a38f48b1993d4515d876ed075c1833 -8c4917fe60ad049789aea96018363997e9f20e8f 12615602144288b3123f352e5d586714bc01b4dc -8c85e7a8995d89df2e889d2c43d88b210b5465d6 38f0b29a16099b1e1ff779d62208122a7b96f72e -8d5fa093546432e803eb066190a3b4b48e5c95f2 3e0a78bc0d94989a46314b09109d2a8eedf1e032 -8da9322c1f9b458d7b600f857502a1cb28a7e7da e49174519fc7d3257e43fe07c39dd2963f3be567 -8db9c7650ce699cf34eb5495037f823f760cd57a 320e0460e096a15a58df154bdfa66c9c68ee0b00 -8df97221a4592d6a4ba0af9e99338166d39d7c21 175bbdd3c3ef13c3446fc5712e9dfcf96d387f0a -8e225ed887f8449821059e88737ed72286a6fdbb a85f6c84f6def49d9bcb21a76318590c48346a6a -8ec2529e5ac910e1c46b8e5b912e4a679ff4994c 3becf2d8018d92bd7eea389a9954020730cd8cac -8f2f739bcb303e0ca42853097449133a1630debe 3c6d687423b237d0c5b4d9a01e809a3b0bf6bac6 -8f49faa68bf1357bdf5f0574036fb17216c4edcd 34792c15f188d0c480d64022a9d3a67a89497c70 -8f6312a17dc9811d54e4dc31d9ada68e98bae891 6997367242139158b1feedf3475a49a87f667c11 -8faf6127547411c1fdcee9e4e7440825f21ecd99 e012efa1243d09fb1de282ac0a1fa6c8b07538a5 -8ffd9e939d2cbcd1ae877c35b8cc34c678a16bca b92e43e3e132737118eb8615ef1b65e8d3e8d824 -90f53eafb983bccd662c0329f031cef405bc80b0 2e58176ac741c18111234bdf49216daecba78bd6 -913e49a38d649ea7fc9e95f701c1dee75b55384a 58bea423b5ccde9bb4e6e7aa703e583f2191bd99 -91a465b58c9860ea601f6a5c1bf4b9238b914932 d2d7e0814504df7688e13d43bd757d6c13f29342 -91d6bf26b938e47205fc9517d11ac83265fa64b1 5e26ed13209cca84e981e9af59a873250a376c71 -928957dffcb907f188f097b13f90901f74caab86 5467f2fc1a15f6adb11abfaf8be245e2886dea3b -92ed909e1eb98542d61b7f04c1ab02c22ab20b37 bb84a8cc6c497bc43df49d1f7571b8353c6b4e60 -92f00b3aa23bf6e3c1a4851304fa0e1b663aa671 72e35a9adeb58ba748891430562a26cd3a55d63e -92f6068939eaf4636a4a2bf4342a6eb1925ed5ed fe71f7077578282ea15b5c4c1ff16de46d04b3c1 -933c89349cfb27a23fa29ff7c1f641bf6984e97f f8f26ce565f57c1c7be7fcc4820a4a230f109161 -9356802bf5ce8ceaf57c6075180112c5f79b7dfa b6f39817a3f251ec63844945262bd632d65a53ef -9362356dcd1e1eb43e0d856905b3f4bca98a866d 8b8da2b212c2ebb1eb6289031180e52236ccd6e5 -93abac71546db457d97723b4c9e9268792c136b2 508eb5c8033779b92650f6d129251c1b9a5199b8 -94304788ddbc1f94e891f035c53bb1b1a8877b54 6a4712f4c90ef7f1bb858ea81fe3d11ea60b036e -946e614bf0a61d52767869942005fa8473d3877c 039bf6ecdb0be85ca78045b647de01bd176823c6 -94750e5987ea8f6e4c946bfc06715e09a48c0eec 3ae0accbe3b34617be328ac46a3d8c7cbdbae6f6 -9495bffe649bc580c24ffac586276702f028e212 4607654baa6622c0df3e3cea183354d493b59fea -9499ee3109cb336deb9380f0190631a30c9da51c 4f7ff6db2c393b0106260ca786172a1d8f1ea1ac -94bd80057d71365b7d53d24bd749d4cdd4dfde5c f68584e8a922aeeafafe34b49e3dab405ebb715a -957e871f4a464eec39d849bad1873ed5518cf540 e0e32986c76abc18a51041ddf14e339ba1cd0eb0 -95a3b72e94ec54a22c3ef2210cbb68452315c583 254a2b779b2b51616f8ab895bd9d54b984b73a2c -95d5bc78f29e541d299d77e7c521a808f80499b7 d1db1fdd79ae34f443c3ab701016790737980458 -9670c3383142b606c41bb57699a904fc5e9e7459 84f0343b5b1c1cfa7ac7bc1d1bd0166d09bcb361 -96a33924fb1d0cf0716a6123660500146b9588ee 6a69c971d46bf4cc59221c8adcd41d12b04e5a14 -96fcfbc97cf8f07292a4607e16cd68ce7ab456c5 a9205d8911005750a9d29148952006b7b6137ee0 -96ff169e46fcb43d5afbc9a6e2fde039e27e9d5f fad34bb4abfe1715d4febec6e7de2809bfffb4e2 -977587910ebd7732fd7afe2af4d27df65eed74e4 1167bcef3d3f08c1befc2780d5b32e1e2e442285 -97b3411fe99a7331f579fc793daacd01e06ce0e8 e589daadec015a5708c4f768f032829cb2d7fe00 -980c3401db49a95a3254257e63d26c8d363e52e9 f692b0a72bc17dfe5d1ae10e6f87b747d02780ff -981759fafad9be3d53b073c18c11bc6b20ad0a61 3d827342a57f424add2e62bfe5243fadbaa92600 -98dd448ba21559caac4167f7acd1e8e9f551a0ab b6e19438ea29c48ddd647abdaf3e1938ab5df21c -99cca6f806cdb861b581989a0a17a6bb9fd6b30d 96046fcaa271eaffbd45de468912dd93f88d6a7d -9a0ea7d8f67f3534c7eb03d51d375e9c643019f5 c72a6e71cc7e6adc2eb4a5675c04ab203cb23662 -9aa8cf5386fce584758b869772f9a4122c41d59a 3d6e882ab97a49333c7df6a7a25085a5aa7361b6 -9b206cca2b41105550f33a895b8bc390dafdb11e f96528addeac3cadce4e31553838410f7e3c5560 -9b47a8791e769a05607c9999427a9128ee813b5f 84be179f7cc578335797f0e09847db3f3f8bd92a -9b5f317c5beccd71b692ecedacc81893dfdae68d 4aee9094a72f363579cc8dc9ed86953da4311d38 -9c2c005b58fc64d6f2577033cb930368f7047947 0e5955287b2e4a36c3d3dbd184e117619c78a731 -9c3d1a5fce19646b973229e85935b2a8676781e4 07068f7d1f0c0ecc22e48ad0a4f754ccc8339e73 -9ccb4dd082afbc4f94982bf092360487232d8b60 154e049638753abc10ed0eca2012685fe3b831be -9d0b894549dc5ea0982ea306044b7501d36e6782 45f10524d93dc769fe33046bc719f792fe0491e5 -9de3179b4fc115e8eac0a3900aa299819e57f909 ff6c067ea8c8ab5bdf73bbacfb4eda5ccd73e53b -9f9768dd209b1936d4d085adeaffc37ec6a5948d dcccf00ac0703cd4b5cb7044deb585e0e3ebbab3 -9fa8b234a49eb1b67c7b5e6d63a75318df3616a8 4cabb30335f0668636160ae302534ade1b6b08f7 -a01e347ae468528e3f319cc8110ae84719477948 83a331d83f5ad2733506db0f9317d160f441970d -a07db7164666e32a3f0282fac506241ce8e0dfcb bba229b0baddd11c887a5a72a1a0957f72356c65 -a0ceae3471aa3b16356588645eeca1f2159de356 81f9e0b9e68bbbf4a2081317052bdbf5b56cf596 -a0cebb4a50a5ebeb3c788e18fa7cfc75a6e73adf 4c7850c5101de23bb691c21e68769174fcc10db8 -a0d6d02fe823f59dc969f9914b7d75cc8a07b03e 76267469045a9b073ff523d19d31bc8669a6a44c -a110bb68c3c56851378c230d46192542bb897d0d 38b595ad18fbd6dbd3992ac70fe81f8de16f7916 -a13dd6402f54527e87e9afdbbf48e5ff1501c8f9 58fd17867d661a8eb162efec7d39a6ab1c0fd6fd -a16d16ac2d649b3678d3baaa7a4641c7a56f5d6d ec334111c94bc3935617f2aca89bd05ed37d1b84 -a17e5881875031d75716fcbf301185b81f166d68 b9aec624e36ff5353e0c707a81ef700d83f2e7d3 -a1b7b13b54d535743e1fc15287f27fd1b3198abc 28cc70cf50398b4b9b6e9ab027b7d965406fba2d -a1dd2a2a32819c23541eed2acfd585e5fd6e5688 dc3309d130c171f75d4e416f3569faa9c985d123 -a2637e901603aa187f9620e3c6756e04de5438ac f234456bd0ba80696881eb99fd3c64370cc973c5 -a2917196495a224872604ed78f9abe054793e6e7 6e262b821e6c5d62a089a3b03090335bbe622a55 -a2af71de27909882cac468d08798fd42d10d223c cfcf9badc354e8263df4709f92da7e4fe572384b -a32116476a168509154198369e22c2b76909347c 75d2ee53b024b06fd9cde629d42fa8f921e02258 -a3cc3d65a66ec5c420b29f0e8149b2348f95e46c 2c154b861b58080646e35042ca9a15bf57bfb9ce -a3d9d25826789f8073a99dd90c8c1fdb7e8dd1b9 9271f29d0f8ccd0f3c60d44932e4221b5f726b89 -a40625f9654e3d8eb11ab7a4e5a0642f0fbd08de 30b65daa11568715e633813c98061b5cc482acb4 -a46d0259e6024b2321e25c055b11fece207936f7 0045fc36d6188d21c8999073e98e8c048f5571e9 -a48965cb80b713f72a859cd16c2a1b670c75d731 78e1144ca52723571c5e59f2c990a8902e1f7c0b -a49ef52eec1037014e3c9cda1a09f387a01116b8 c0273a09f19e0757711592c6ad3b3b5de7acca67 -a525b9fb31e1b806ef91e1a464a93a607f2bbe32 71943a83e6173ec73d958c27c5ac9e305d253fb4 -a52b8b9f1052b3e3136c249aac0a7d93334a3eb7 a8da18cbc4071e53425fdc0fb29a9c11d8ef5037 -a5f1670e92fbe9080a0c1c7c744483933b117fe1 324784cd6ebe0bd17deef74a982a51941ee5ae25 -a6574eca3584deb7bad5e7681ddfa1c0058c652c 2d676910384b95bdfc3dfcf772b8d64dc9ead025 -a65b3b9d40abc8b1f520d4446e7b37effe9eaa07 5e414a7a9192ed10d84b841c3e81ad2aa5dc9ab6 -a6bc130918f63bfbeac220f4e1fa55f08197e1c1 ee6643ce8b8b3ac32d5ba71d2617b38bb03379af -a7214ab61c42f1454a8e17c633085f12ed6bef5a 84d7234f24fc3fb29de1b4aea9d36260acf4f01f -a7226b83f621b75d7d846a6d4fd6ea9de19deb8b c20cfd9ba22c4ca999c850edb04012d94d72ccb5 -a77fd02e73c770a0886bc18a17209f980ffbbfeb 322a6ad3b280f47804f8e429b8089bee71777c80 -a8536a73373794dc9748a97f0e4668d6bf708ca1 a1d3191b89de8f6a05469cc50d7685d7d24d77d1 -a86b6ac960b8c4831ce347e2e3f9d54afef92fb0 2d094df1202fdf44587389e3e6f20967d6487dca -a8a4f280469d4d3baf8ea6e9dbce9ec06bd3d868 e914c5f3d23bae1d0a26ac7fdc35eb708faa96cf -a8b9d27bd0946f9c48bd8e4b5b5c2031aa434f28 6e4da63abeb76540bfefa9efcb3d823f8b50eb61 -a93c53651c68baf0d251ceddbc6bf57095b7c3b7 f4245c90e8b3562b78b16678fb668df3a8f563f5 -a9bfcbce261798cdd0c3f8cb09076dc246920b48 3b6259edf33933be61ed0e8cdb2ff3dc2ae3a56a -aa13654739c00b669f0b0d864abff11a8386c2b5 0510d63ee59f334cd16d56a6df5406aee9d7b0e3 -aa554728f18984b021b9071ffb2d09a59c82dc3c 395deef793ca895d13f365bdbb5051183c16c52c -aab0cd86049b3922afb77b1f78479c4d77a2acac 3a160237a7b5d508842349762936cfcfafc10167 -aadde6f0c056cae739252e0715283be4ef7c2866 095d5b94382ea1743180791750c55d96aee27822 -ab623350c0489a1e7227430d3e2259d7b496c3bf 04af9a81309920ba04fd2e18d9f7fda3d615115b -ab73c7b323c222e5d1172c07036653ca98aa8e6b fea9faaf4cd110591e9e6f07cd4d17cbc0ea5918 -abd914c9fa996e544f2e83f5216d20464acffa1f 9918fff9fb257ed6da6cbc093c74f7d478b07f1d -abdb2aacfbac965cea77bcaf76b842a6ee5ed982 f99e56c0d21275e59c11062da0bd3a45e620feee -ac2100b990eca4288201b070d0ba972484e57556 336aa0d9a5047ae52f1371630b3d765448c7e5fc -ac4ac8f5a85bcfe723d9319920b0d675da4ecf5d cbe78efb9c130dd90fc8c4119bfc0db38c3aa007 -ac66d6af52f6a2340c57a957bed078f94a8cf8ed dbda84ff87ba42462a433f377efbcda1b68e0e20 -ac83057d08c86875ce524f481b5adf03262c9a0f c895f10bbf44e2b6f20716696f412592981f4084 -ad0b74a24ae1f9c711d05d08ca9378f0e54f1933 209391d01c9fad548d5b84d8d0c530d317aa1d92 -ad6e641cf0f3bbb13afa22fec7709b63d26c2afd 73a6a952211635f92277d69c8c5be1adfdb815a1 -adbd07a693f9d7a8686c8a3ffe23c914a56d315e ba9727d39a6d7d2c472526f708166a9cd9c64751 -ae113559c6dd1e1e77b69ee5edee93fe59b4be2e adbeb2497929d73885f9bd9911beb76bcecc2223 -ae32fa92ef6d1c5db2ee944bf3c7b7b6d16d9080 9c83deedcf584ee6ab881a615bd4080337802cf8 -ae718dbd05397bed9bc49a77fae20de70b635e82 41260ecd183694bed3c2c0789cd7133218efee8b -aed7f22ab11c442c2998b89f52854dc2f375266c 1504d6e829393b1e03b6bf8ae70ccff8ed61e2ed -af0813dc3c8cc93874a1903e7b4c92fc5817337a de657fe3500b18991187c6d36798f7310c9b3a46 -af3a54a70d8a83cb56c78336ca6d7ffe9589eabb c4a7ff448cbd9b4976b8071b2e5fd49732d18840 -af7054c69bb4f1e5972c323da7a1f274481f97e9 69627d8a47ca882841d462552f6d4a94611ab5e2 -affb0a3580ba137f217ccbdb336f56c0d9948ee8 340982e58a274dbbbb5b79c0ff9ca94b6ac24298 -b01ff8d79381f16ff5c85b3487474b2ea4b788af 8ed040425ccac8a7e4b04a9f12c2d1174b4cb5b5 -b0b2407bd5b06454b722d72757e328bc60878c8e a8e20d41aba2866df48a17ae35e6e829ffc10d87 -b0ed2efeb2f4072eb5d1a05ef945349b6dc0eacf 9fd217896e4947e82368475456dff2ae8c6a63a6 -b11a7383126daaf4b3c28c4506b891e479a3f362 6616f92155a3473c228e46f3c5693c47548761e9 -b1d3eb19872b2c09bda3e9e3b3a4c1f40c3b6a6d 86296897e55e0c80a3e93e27031e244525fb757c -b1dd6cf400112241e1a7b55bae49e46e188052c2 f280758fa7eb8565590c129e3883cd7a7daa6638 -b264b8f5c51eda43dfd03f6f0fb1d08e38f0e277 6d324ce99e4fb5bb787445e8e906053f537345ca -b28ee416f18aa3f3fc26359cfcef006291b4893b 22cf61beab784cf3c24c87860cd08fc6a614d050 -b2c4fce705222612b0457481657db3f42db41d1c 6585226de721bc43b17a66fad90738a38937f210 -b2cf011b6c6405a786fe22367e1cd4e6c2c4c90f e2b9f232315fde2f47e0d55fb01f9f214ac2b3d3 -b34458ec1fd000cef68f584b71bae90d5bb0cdb9 4e8a040d1e33b9f34bad52cfc2d5f58cdda60cb2 -b37acf309c8f42d49dc47eea446f89a3dbe9f6e2 cabe773a4f0a12e411f9f3c9698da6bbd90ec474 -b37f598975f5f0a0d821889d1a21e2b770d61539 bbbd1de976f62a9681de91b9a4d50f0aa2f1f411 -b3e918f433596d622477107a24fbb5f781d79ea9 c053cad5df831b5c376f404879c28e6e69d6cc7e -b42b239344259197238a7d9deedfe496bfa3c1a0 2eb09c1fec3a11067066602e2d6613e817a06630 -b5100fe1f0c6b93f5440d224a2bdf0b3b507df68 dc35a91a707b163a2d82d98adfa0542699de4cd2 -b584557740306a7b00daac39e62d299d2e46ec10 03444a6de9677244fe6188d695cdcb4ee629925b -b5ef936f5425e8e04e9eff9ca5482e243011ba76 63826bbbfec39a693fa93a64d21f362d86c2debc -b62f8d5832c23902baf8071caeb6a4141da95ed0 b83e8a92e9dc2d8a2c27a8a3a2804f4b93753a94 -b6612e49d9c63d9e81af763ebdd2354de9d7b8ba 55ac99090d4bdd15d9a1051740965c8e46bc95c6 -b69d73a0f55f7f3c013cfe78b38cce710372c1c0 46cd7d96bad675895986d062c0a895ceb9dabf00 -b6a313b37b2c92047eddb98dc2b05c2cda870a3b 468c22de0e8deff28b4b7f780c640ffe3529343a -b6cc244af707ffbe884ae30bc736d3d5c2823614 da4ead7ff1e0b7cb5b321703acebdf33ad9d5f8f -b6e7f01e6ae61bd47b23b918d86d511c390e3510 db5a78d5f6ee9a8bdaa7fb945005a6d8445fe2cc -b75f9f12b3ca26853d2d092766b9004cc5c9bbd6 21d202e0840338b76e961208b37b6fc3a0a2ea6f -b7868c7520cf10a146481772576ff782b7fff6e6 ace3fcdafba98d28e1834efe4c206368575ca610 -b795168d774fa0b3dcde7955e30baa0eefbc88ab 2fc89a69e35525acbd3613779c31ad6b37ea885f -b7bb4f5a9df5077bdebeb93fa1884455bb5b7b14 b69eec1650dee81c587ebb076a6ee3d81d98d600 -b7d8fe2f3501caa236aba343aefa1741613ca005 166c353ddbbd943d1bb49ad7e017a058b8f309ea -b876a8d4800779c6728a61ec51cd168d7307bc9d 3436ee9deddf21594a0b4fb3640a7596ea078093 -b8ee6b90745c7c03aceff7a619c51dde3be4ed45 d86358b6a114216ab9797811e6e49f588a79e0e4 -b97aca7fa154ce580ce9b66efba4c8ec3cb620ba f96f299377ce00afce0a4fd2dda681e417511855 -b9fd1716ac6536b19a4bc0fd019ac14c588a196e 4aa83f7cb27cf08ae6668287f75a7b6783e41f7a -babcb23b876889420788f0a03c2faa7bbcd0afe1 3cc1e0988ac0941b53fab9b4d10887edf99f4139 -bb7404d6bc74241f95cf337a90455e1a70bc48f1 3d5e021deae90c5a1b291301511e3b186ea43ead -bb8dfb92d9acb48698c99bfb77070bc6c87177a6 dfb0845f0e3db99f72ba2217ef0d6b3804592690 -bbc23b382c2eec15436fad632f5efe06e8e8360d de35ad995eb76b281045d7f7a626c4e05afdc408 -bbfd793e4fa1ba7653d86518a96afdb73c506eda 599768316852b1d4c2d083f0790ecc0d005ee66b -bc4e76c2a59f5154b8834a69aeec89f81408a450 651069762786066c300b4a873bc131c1ce3edc3a -bc794e89edfa461f4c9166c10d0607708242dea9 4a7067a0a2866ce8af2ee26197893079b77526b8 -bd02136d4277b6647b481d03d9af3b9c8b4a10db cfc0ce6d054634843dabd8fee8203f5102d31347 -bd7076fceef40d521da0ec69973d2fa45b57af59 c942103d08048141f417a4b75130326b53b73cb9 -bd779900422a88e452d564bfe6bae7e17cd48812 d33aadecbad0ecb2b7416d3f33f48d36bb1583eb -be50ad44fa85de6af9ecb52d3e6983b0533882b9 78e71af008a042a73b1dcea8868fe43ce18f67f7 -bed274fe5f666aa56afdce58e96bd494b13069a6 7ed2f566b59c7cb0a2fb5ee2b5ae6dc4e4b33998 -bf5c6b31576ee515febbe3f5c85cd1d71a48f1a8 87956420ac524b8f74e33cbd66749891fd3ab7c1 -c07afc7dd7591b47621ba4602b951fa36e86146a c4e9489eb072f08af62ad58ee57cf04e436f6ef7 -c0b75b1d7f33b49d417dfaac7991f8bc57e0cf00 dd0ae0ae6aa6c6c43407cefacc9057aa3e06bf80 -c0bbea97fef5d7c43d887f9a66df33b04bdbc41d 6dfb29fd239d81fbca04182b718376efb08721dc -c148f43bf91a08983cfebdb53d992cf9b5bbe319 2c329db85654b8e9f7da7a1382197e32a34ec63f -c166ca900324ee052a3b9e76d188862bedd51e14 101d9ba2c9ceb9780e08aa9f02acb8873d6c7185 -c17c200cfd55baa3c6c53bfe162e494c8a03dc72 faa3c867e21c3af023b584c1798b09e947a21670 -c17fc41a0117db9ff54d868a9e6263b29f09fac9 0f95d5cd7f8244ddf7adc86e9de1011fe037dd66 -c23be92889746eb64856ade0c52a554826d027f5 8cc6de95af50ed54702449b83fcd93bc02dfaf3a -c23d5c0cc1257c25f2093e7f923d19c3f471c629 86e7b6f5c98de857cfcbbbf292df777fd4c28a2a -c29ff9ff602aeed4f9b19e4f003a20effcf70c0a 029ba1ea4439dff3943b053848901d0391912037 -c2ce6db0d67d5af7857e48d9c5fb35dc991580e1 7ba6ab6121f8ced5ca164f5b365925aa7bffd6f9 -c2f1b3cc419a12c37b5d53cb493821d88a8223a1 afd324b82297daf520b3cbc0e9dc5be28047d896 -c36bdde90626aa2a931f2691eb9be75334e3d9df eb9b9682a431d384405b0d931d93916ad8b58739 -c396ba26633c8deb73ade24accc149180141845c 1b55bb45d754a33428267834b75bd26ee1fa21fb -c3f9d77391589b65951616a632af87107fba469f d09194f05a372e3ed136aa288ae76cae8c1dc641 -c408ddb0561ddaba127a69e376b7d6b11d1b2f2d 702e07d76a82ba45f85f4113c587f4b55937bb35 -c5033d11c66316d685f2f6b7b6b65e49384e33e0 2fcdc6d83fe3fc892f8d3ff97a5f05fb2b094eb1 -c5f62aab70209eb52d7ca7aced2ee25c9914319e bebd4fd8169766f91d0f181fd076b20d1ee80770 -c6be3afc78446a7e4c0dc6890eaeb7f5f566eedd 85e510ac553df8eec75afe43db549881e0cddbac -c774c395136d58330aa7cad7e9fa434bcef7d5c6 7245f90b2dd686acacb9c8ee03f5d8fb05e09aeb -c7e975191e8c507d44bc0022ae4d1295f5081ed3 ca050dc1fce343498e598f9459a0d7d09f78620a -c8a8da370c0fce638ecaa0a333f1512375b0d250 0b1fc176364ffefaf1770598dd3addeabfb34b42 -c92a2278c97008bcb19b43bfe9480ff9d42df0be 16e52c05ebfef7ee672a8110c829bc60d949e6cc -c9331e2852dceda5d51b4acd77d095fa22c202c2 fc5d5a04f762fde2ca24e6d268c84d75b84345d4 -ca2897b466f8ca3273a51dc20abcd87c092939b0 5b4c8449a8803e0d50dd2dd00397f242b41f59e5 -ca947ef3e280f01b678e53847d2574531a2ea5df 3da2d4b129b1cf32b08ed7c8ac77d21d0848f16b -cb05a02bc6ea8145cb5aef171ef7c95648b80010 f39ee057eef934bd72525472da4b404434740e87 -cb15e8a1e41e879e91bafff104355365a2236a4b 18bdbf4430564d86037de86e028a4ccd911b6064 -cb2ee39bfa27c1a1c223bbb0c135a03a9d3a4d85 516f26413849ceb5d7355405f5326a368bf76fb9 -cbb6f8b1a94e504cce875f90b45416177c9ac1d3 6fbfd696990e77020a3d7359fdcbc3e01de40a60 -cbd500053fe79468415e541d59fde2f43fd260ff 3eabe8b2ee636e2692243845fd12f41c52c0fe2f -cbf0b6750fbee21df6a78231e7050307c9af1d96 b85cfa52d0db096e3b31b6649a55c1b43132bfd0 -cbf0b77e52d77ae8a0fe00606e7be2d2af39b83c 248354d54996fee4c235a5732f392d8e05a05a9e -cc778db5989ee5c004351e96b2e24e9d1e0d0ead 6ea2ba0e23e8cffa38ff27e70261642a7aeb3763 -cc78c67163a6eaa3ab7e4399752cc0463c953b3a d960ae9541ab4ada3b7c92e8d008d07df864e838 -ccae6da4ab28ea9497134f1fac3e1d8e4e28df5c bd0f74a6fd756ebcccc629d968a3db2f789e9697 -cd6423a295a56d9e5741960fc6e269847b3a727d dafd375fc659a4883136ce51cda1e1543acf168d -cd91772f2f12af6d0939868ce4139f1d61b823d1 e73da759b9ec6281844db04e4ca8cc288c4d7c3e -cd9c4f4dccfce2a5782d285e3ade78c22f1b2a9b 9f43f92cfa8cbf120dce118c0391720a46083240 -cdb9af36c1b92ee7caaf663afd6b90bcf7043d9c 3b8cabcc81365e8cb2559f63798ed56b29a09dff -ceabfd53d3166b31d4debea7fe5b17729223e4c9 e2a252e2b2478b6b1fb7cd23eb90e4da9c5bc8cd -cee857ac4e25638e5f93d838d54124ffaca938b7 8b75f56577abc3ad2479b87fc59b7243add6a29a -ceef4402d40f701b0527eee038f9f4e5abe3fb70 3ee7467d662efaee610eea7607a23b13b3629823 -cf4d0fe3b6bb8943cf7185a3f404df11d8f39b23 515172263b54204c63f1e2d454385b956e071821 -cfd7b425f071f200504493fef206afb7c68de6d9 ae01e9b98d481332236976344fa0386bafa82f53 -cfda423c01b2c9265989bc3eb4c54c0fd124c669 534f9cf509a1816734ff77af0ae132069b25761c -d04ef8c53f7054ed51f0d677b304b5da559cea14 657903c03e46a1f3a3b30adc1677e3fb30093f0a -d0f91082fcc8da17d224acb5432339c5d817e1c2 7eb887edd527713214790198de3ccfe828a5768d -d114195fcae9ce864bcaf48fbd8cd7cddd41fab6 ed2d5b712c268deaf92bc6b613df1c16171650d0 -d16da9a547bf19529cf00a3d52562d8cd8290a83 85afc77d6e13ac08f9494be64a5a10b6b53b3ba7 -d1b3bce06733bd37aee2e22a8bc6d792e6edf53a b5173afc44acf4fdd0cade42ce011da7a55539d5 -d1c4659bbdb59ff22c16597ad705ade29e66f392 89f4f6862bb16fba1466b38ba126511b955ddfd1 -d27dc3ff9caa6700bd92f120c9afb60a995abb57 99971a8e7f58c4f506e9bb1bee63324f78bcd1ad -d36fba6fe02efdea602e70a2552eeb3e20cf58ae e48b5945c3d2696b6908552634d746b0b718fb25 -d39c2a3f7763cdb1154b36ef333c5d2f6f628bcf b77a4d0f54191456f348f2f7b085cde5883f3cf5 -d3e1d0ba373cc6ea0d62194966ec53b916e2a9d4 9bb925a4a757172e5b4dda9abe1a059e5e035f25 -d41412a7904c587ab36911cc0229480ab778da4b bffeca8050173c801ba092d5b65d561b4d03dc1b -d41abf49d0d12a9dc40ae911ee3a3965b00636e0 69cae12d7f4bb60f390d331adcfccbf2b52cd2c6 -d44fa1ca928ff69d7073607d6ea0d8dd31511341 089bce8828859b4bd7321d205eead96997bc8b08 -d49df1df573c40fbfa56c475098cc0da789aeffa da0bb118dc130c42606aa2688298d14060fc4354 -d4ded305a22484cd1b99c36f34a6cd919fe5a15c 205a0f22592a5cfb6c29705d25bfeba5efc845c7 -d50ff14ba708fc611050a3075f3f0ceef0dd29e0 ae23bef89f7b5a6d035c31ea310d0a77f215afe4 -d5406f905b4aaceeef280469e2b811363af76036 6fed07dc02e722de634618a6f2d246f52510d141 -d545b108a53ba7d2a3b820395dfdb41131e10062 b5314ffeef7c36504ff69353fa3f433dd354bd05 -d5cf563e7526ecc82b2ce0d7f57ec1de64f34fe5 11ef08560172d896e42a9b857f62b861c8a4095d -d5f7fadeb16f55b2897d9220c1d94c64b277a435 d7fa545919dd15ad51bf9492dab529e8d91ec0f8 -d619dbf175469ac11dc020e4545429af0a0c7c3b ec0ad89e22a058644d894d071ee8b4b4a8bc20e4 -d6cb92eef2ef1c5ee149329d6a5a0473ebf01111 c4a6569016ca4fad65caec119ecf063370a0baee -d75a1deb4ac34f7b39e97018900781e0d57e03e5 0c951bd012290eecca5eb6a3ccbdb3e3449af0ce -d84ca597360752138ce9e229aeec046810a602d9 4bc09cfba1d0b39ce25b05646c6985398e65b0df -d8828b69d8b1d020e372b336b6a1397a81dbca90 9fd6f635cd5092ce82359b504f1e053d7f0387d6 -d8b1d296562a01800248bd1148bc4778225b436e e80f865974df7aae5e2f6abb966b36497da693c6 -d8b32faa164d11456527dea028c88f2147ff2cd5 3a7132caaae2e3c5bff21fa48e174de16814816e -d8e7b9e41006896ac8f3c7b4d1feafe119d61336 a95605d8a1e61b3a3f11c83944b61b2d0b712c89 -d90f4747fe450c6f5d11d550df5117a9dca9962e 842bb9cba28e51172407523a4e8b624fde8d702e -d94dfa2ed1ff26079c091331ebcf7d6bfb68df69 d51d39ef320ed6ca0ba2931dd408323b1a778ca3 -da5ce60ba6b37f0e752cb73ecc6e4356b5ecfda5 2f50d15a05ce3bf0fcce8430878840ce9dd31565 -daf9ea419b7eff365064d07b3fbd5b022e759233 64d35e1dbf8348840255d1b6ecf7ec9833abb86e -db455d9f78cfe3526f79a94ef28d9680f8a21a69 7e79d9dae678b841a3682819610f0c6819437160 -dbcddc79fc7d9e145c2059475d7281acc5d78862 1fba2dc20f1e194ec3aa1475919880fd4c725118 -dbdae4daadee90ae4da29ebc80429baef1671295 90e0c5d9931b8e7ed53fdc7a1707e90b94826490 -dc1c431e6e5c24dd581857090ca872c716cffe07 d7151f07bf41f617dd96bced381660fd48faebf1 -dc6d44f8fdbdfd51d93f33dcaac3de9d349f0e86 283aaff5dd0a41064dcef457740b54d549bbb181 -dc7b2c059f3db6ca4f0e91d659b7a7269ed60263 04467b82d3a8c10f17ff0844f8d5e844336b1917 -dc940ba331beff3f9277affc3ff4b4645c8ceef7 d7a5593ae8d9fcdf9f0dc318ed8f09913a83fce1 -de21b71d15f236f8d013062aed7417001183d5af 0f29bf34be9b80453908fd788451ba8f537feaae -de26ae30116e3c13c48a710201a7da0817ffd9e5 0822e67594211850b9e21c8860594a13737f95cb -ded8ac1a05218e0e3a5e3dca67fbd04cb78b54a6 bced3884ebd9a523cce68edf5caa7f8003e5fe7b -df5973a7404caf9fc60732332156e7012034acbf efa5fa7bb1167eeb9939c45d9b196a83f465a474 -dfce90679119f78d0aa6ee6ef329133d0b5d7e4e 89e6d33ba4391a58af8549b7032fd328858d7710 -dfe1d510f09fee6ce5298bd518aa25886df304a8 dec6031cbf96c4889bc9da11390d9ee4890e883c -e03438383341c065f7793c2d24b8cb0a0f316990 ea84c6dc3cad821fbaaa60e314c088c422200d34 -e0d01a9a9169bc0593b040b58c6260da18e6e717 7a4084a23fc5045b479ed4fc08853e251e904d77 -e0fa2e78da8083dc590c4b1f3d016ba545261b84 6dce0c1e032edd9ff70f4a1c417a8662d1012e8b -e132028bf7e27e8054f9eac10ad50c57c1bd8b9a d5b76ddbfa2af296d3b0b976efb852f0c818bb85 -e140319390f56979487444529ca49a677264ad57 7a1ca0bc0cb93f62daedfb4d5dee1bd22020a9d2 -e1a88527060e187ab21ca8890ea9bce2b999885a 65f4ea1e189aad169efc010052eadf378202e653 -e1df98878d2dea8530d50d49e8e5b9369931eb43 6be0a4653fa62ba8c9ae1c62ba4c56f46f00d7b6 -e1f996e1b8cf6fac650c075a812538c1cc620f99 0666f8151a51ef96daeb8691459313d01730c014 -e23202f6228d292c4fac08c7667b5f2a0e5f1c32 d90049be28dc23ece017e8ef19de4aaaedabcb62 -e2c7c587e76159d8eccf0185b260a21ca6c1f3e3 3c19d288019cfd64613f4c6795fb1bc8632119ea -e2ff471d5afb11f6af18723ccc6bb0eb155e0f73 811cffdd6d2a3699ffdd026b22c07c9ad528b61b -e335f297c8ad57af82e74c405351a100524cd7e0 cfb549b7cef635e084a5566bbd92699a44ec0d1c -e39e38884e126208609dadf701a1dc375ad50730 8891510523025438ff06058123dc47b723fff521 -e3d9bb34c8deff27b72a45f182522a0057eeb42d 9a2ce8e1fa8ef8ddf1bd9a735b9e9b9d87586d91 -e461d5ffd9beb271b3dd9871b16ff396e536a8fc 42a0cde898867175ed41339db2bb3c2d79d43709 -e465e3e8b50a47e0a283509733d703d77fc3bb1a 0789404c9356eba255600797e7cbd5f906521a48 -e47de3102684fc7e5820428f5d510b2939b58c79 f45586ce169a19aa24978e45d8e568af414282db -e50abb7e8a1016318cc84ac87dfe1129408cf360 9f9d5eccf69b740b3fb5b2569f3834bda9f3468d -e544cedc66b1a6f6e8cb664ec77b514651eb3031 ce0a7243f662940d5c463a94f278b6cd125d590f -e598d04eb85bf74baa66f555024dd298b1e4b444 fb5b0ffedd64cc3967cf1b69376d4f1493fdbac4 -e5c6fe089e1ce2e987dc314b0a15794bc9d720b1 b0bf9f39bc9f7c52396e2618fd88a56f885a6a8c -e6c44e92e4ef82c29bab9b3fb8c756e7a53a8a97 9646821a9dc179f2fea2361cbed534ac441c550a -e6d5e06b78195a5b65ed0ea34ab6408db82fb8e7 4aa28dad134981fff4955c916923ac44a5e2cd2a -e72ad4777c1c1d1949e2751193cfa56390a1e83b da210d75e886c39ae25b2c31b0823e4832f34832 -e7d0ff27193defd870ae29bd9b4d4c2044488eac 3b684308c3153a6ca84faa0fecc49b76bbf941a8 -e7e4241bf70784c709da9cf7f2502865df73a7e7 3119ad6b6f9129a76ea267b7abf2cccf6149614e -e7ed1661b93ea8b929b777a1a7513ec05779cc0a b686b348b41c2e4c099853bdb0ae6ee5eaeb4395 -e87ef9f24a1089b8eaf02c3890edb97d1d20d1ae e0505718a7e3db63390aa778c9111bb1401e2b26 -e8d239e5d1c1e32807ac1cc44949350d93000205 728dd42e5c3bfb7272465610326868113f945a88 -eac8d65e93ab9819eb5ac5c05e4c4a66e92d8ff1 bed31f20d2802078be510ca2dec081384b21d1d0 -ebebca4da402b0cdbeff378ab74227facf34fbf6 bd11b04c18ef0ab5ba05b043829a729f45e53d5e -ebefe97073ad878550eec42a37b3bbb1dc5deaa5 c6d42bf0a9e495096c87f51119a7ce55ac6d4cba -ec68d135f0dfa833900686918d5a152ea36b1fd6 4bc5e4a984ca0c9570b52252b01b5fa9e748f219 -ecaf29b47ec7b23a13615799a4e8ced9f42dcafe 33f344288fc0317223c7092b41d2a60cb7c9f0d2 -eda993a8b74047f3d98ae01ceaeff098b4f5dc4e 84fed91f8f6522594b109c09140f69d9c39ff598 -eddbafadfb3a4ba9f41ebb736b16d30ea6048dc4 4f2077a4de22daf5cdff8de0e00390346228dcd9 -ee962c76b142ee728b02f3ca36d63641a080b435 3ca7f1213edc4ef290edfeae8a367a92904bd4dc -eec8f5afcf955034572321adcef986c34de7431a d9cf78c267344eaee08e8429f2a27946c5e4f344 -efe0fb5edf07efa7f04ec379c2d319875b53ed87 eba7b8b51e6830edba7888ce3e97a673a714a1bd -efe14792991bb39e8e7d491ce5b522588fa775ca 12dde0318448ac89b634dd7d3fef8962a437136f -f1367540fac70f0856fcdc6c18f898d6b97e5c15 f22a2612530f78ad547c64ab094b4adfab0751b3 -f1403901d94096a04f3ebbb69f4d3b91f637d289 6e8e16d91655cebb3ad78a16ab307ef35674007a -f171ccc60cebda8d76e13d5a146624e27441eb96 f37937f05e083741dff357bbbe378efadeb5c54e -f1bcf07e2b739aae1a7c198244681e9cde75cad1 6e7c9541616dc4e5df9bc1c3845597a3d3cac54e -f1c9b850cd14cce29d76eac6cf5b1ecf6fdcf456 5b7e9db0b82f956bd5c6e1189cc91964a36e9f4d -f221da115c1afcd136648c9683d8e9907005a128 92229ac0f69b61ba008f222d9ac9728bbf03ada9 -f2385424a606fbec7a495b003161e387e4c5f04e 46a3d71fbfd8abccc650554bbb54dcf1415a9a1c -f2a9dc9eea7174ecc53b225ea59ae7e77413d5c8 a381233e4050ab9e53e05906c4a0701eeec6c5df -f2b6acad6a2e77d3982dd684f88edca222edab06 0826f7710186d7ec26d8d2b284ef8f89186d9350 -f2ea2027300949b919f9d595ce3039c8bc82d21a f1d6dd2c8b78437a5371ecc5aef4e7228b52fc8e -f34bcb0cef3c00650f09991e8f3cccbbdde5d732 a20f458af480ebac505fef11225dc75099e51399 -f38ce524a75c9b0781d3fcf9ae4f5f8da888395f abf5f873b6b5f597e1af13aaab14536d7e0c7d89 -f3a8b88e80c009b3cab260b593bb8d4341fdc09b af1f4521341352366c6875ab20a63cc270c3aede -f4062ec24c4368670a0f5bc336de32fe1df6e821 306c7dda6189521b44253eaf4696eb1ea1b1227f -f4267e2d1fee0d885630dc2a87be0a5699bf526f caa747ba717e28791089d2db22ee9300f11b4d25 -f4381bb2979e7409e4809c490a5a080a2b3753c3 d92a3861c99638b7f34cc62414adf3a38eb9d8d9 -f46af8845dd1a35fb63b4f31c6d16bfcea4e3a67 0cc00b1815befb269132c26cdbe73a3a507b4d94 -f47d7b3d2ddd809ba91e72446149899ff4924e45 379566f05216e2c6489db4e5487ec7abd2ba1218 -f487acdc29df71083ba161f790cb9408368b35ad b851c2e1b4ebe90f46e57d6a19f1ca07afa2d374 -f4e14ece75b3d381798e317a45833ffa929e900f 33832aa887d2fbbf121ec2522767a8cf1783a3f9 -f502d0f1a4a41676bbaaad6da980d22a885b4b57 70cc0f47bb355f848647de0e8577172b07102890 -f5231dcdd3b535975afb1b9268486aa1c3f6f244 111f0384741b71f37e0f4b751047550507ae1fd8 -f52a9193a84f8bd35296be455046793dfe8d75a4 692b0c0bc999fe8f056bb2b88dab4d497d0001a5 -f539eaae9d83271f447d0b9e8dd2575c8705d863 bf75a3658a509982e1412fdd8d387703ef5b2926 -f5600d123d3710e7ea80ff2b7c66d13382462420 454160646923e98f00e53df025e324d3d2c585d0 -f584a38a723c1a420caf9ab7c2ee80fe9a41c321 ea2a4aa181d3ea804cdd7dd4e4d52cc2d5488838 -f59ec8d6c0c95217c1dc24e2ed2dc49aed122a68 3050d5a1a4def6fe90b62854e2252e308f5f708a -f638efe285fa5a192844acf3e4d0a7a40beb760a 65f2168ac3058a82d0a093f94a8e9d5a8321a6d8 -f6b200b20ad2eb7d9d92f691e6f0ce2b4ed0e547 3b9d40911db98aea20051a68bf89b315f3c7fb57 -f6ef52437dacc3bcb99c11fb52d193c57c564f73 b4ea91973ef6e496ba43e919bb0fdc4c2aa251ef -f77855498cc14e60b898ee0e2d265b70ca55809d 10ac6e59baa2ea17c6a0bfbed34a5208e3004094 -f7baf19b29d622460595e1c8bdb8af4fb994602e 459447bc7d3c84e184490f0f9d8c25ab9311f98e -f7ed006a083783b56d72aa2df7a7bc4cf39419bb 35b249d23ed95d8d68648fe211eac9bf3d744286 -f817d62af36bcd05f1f878153dc9b57fbc61253d b0af7c1c4cc4c0c5a03c198a338275e139a6fc37 -f8b7e45f0c1a76c970d701edf46acfec28be5b06 0e2fb5d13235c111bfe6f65bc9c32836e48f947a -f8e53e6bef06905484963c9f8616be4a59ad1234 48a0aa9e2d8c099e381332e3be5d23da61e7e371 -f8e8a357c00ceb2d71e216af21daf56f7ba27a1b 4f966f30a59a9c7801d5e6712608de0ae82e584b -f90ce9e4563de98ad2b6524653821411dd262243 2600c4f4c436a49058bfd8e664931c431e480094 -f925bf3f4e243be2293f167e4b2bb03d32a7b0ea b59ec68d139ebcb339cd7bd6d1d15eb71a423b4f -f93472101aa7338b3cdfc9db5c936d010f4cda82 f43234bc300b7e9d9d572dc1b7d8e156ad01576a -f962c2bbec1fdf015484f073eb7ee22eddf7fb98 3267759128ae7fe38e43eaf259624a5c3f298e05 -f982fc85fac3f0120e1851ad4027dd8413216439 23357806183eff94632915239f7b98a4046eb3d7 -f9a74df73d2831bfdd8e6f1c0e5c999ea300fc0d c09d7cf83905111ef7af9ee5bbd523f56664395c -f9b02d28916efce797dc1bd52cfb5c99cd8390a9 13653a93a2a4181fcea35576338fe24f465fc748 -fb94ae106c4ead17e9fe78a5ca016ffa7ad66f90 54ebe423505ff500b626896531bd6bf39bb04447 -fc2e49237784ee249b808604311dc8fd704b9356 83a777ba4198943656589067be03e979ed09723b -fcb04d39a1629047ab0a227c2992922725189ca7 e6eba3e48463a7a20bbf420fb3353b1a28994c97 -fcf884808b7a19cede224f51a222503ceb89905f 657ac2f40bdd03ef2490819128dbf25cf14f6207 -fd56d41c8e40734d849b579fd526f333112a1ee7 cb639afb57a8caf002a50ae5c0ecd42b8ddeb612 -fda6e579f9a81a953294db7946e3df0cad68e4f7 5f5858a468c47074f0537fb6c9794939f59f626a -fdbb66abc4e539ef960a72588495cd9964eff68b 3fc0c899c97977cc7843bf809c36dcdafb369144 -fdd13b7223cb2f0f2a7c543d91ddbf211ff4e406 eb3de8f7687d3011672536b31d0c44557c282cd3 -fdda2024afeaab244a19ab31380a1c4739c67f4c 48dadc17f69a5be905ebe28e811a9ad8dfc82714 -fe082e53d1c96837c808f10c5363909fa667e2e8 4d06b02306435cc823fb532ccf84cd93b01a4663 -fe6369a6fb81e82c71440202a14bd16c31ea3ad8 f7b8919771cd44be988aeffed1fe80f97e635ccc -fece9f6918a8379f6140c7fa5412bd53b81407c1 0090aabd7fa0944196fc3ef1350011a541786241 -ff8cfe1658a0cb1de006ada9bb356cf536fd1684 d1fbecaa2a650ec707e1ae0f5e23585426a0cf27 -ffa846883135a9b6cfb2231fcf0a195b68691fa7 e032597bdae3e8229a88042d1ae2b978ef63e056 diff --git a/..bfg-report/2021-09-07/20-38-15/protected-dirt/78058ac3-HEAD.csv b/..bfg-report/2021-09-07/20-38-15/protected-dirt/78058ac3-HEAD.csv deleted file mode 100644 index 2b6f27d2a..000000000 --- a/..bfg-report/2021-09-07/20-38-15/protected-dirt/78058ac3-HEAD.csv +++ /dev/null @@ -1,7 +0,0 @@ -3d1b9752b1c462355c07baf04a899d7e243de9ba,DELETE,executable,esdev-fd,17114108, -e5a1f05f3dd585ebeddf0b78a78082c4f9d42a31,DELETE,executable,esdev-fd-relative,17114340, -de17c61c5834facba4ce5ff167414afdb16a81ed,DELETE,executable,esdev-lists,17105956, -34dfc5e5b01bb30bf117a1e4e18520646131b19d,DELETE,executable,esdev-nolists,3763972, -6f7432d07df4c2779547e33f5bac81b215b3ea2e,DELETE,executable,esdev.before-comptime-js-parser,3323468, -ab63d272b000dc6b557fe4352e3e23e09138ad74,DELETE,executable,esdev.beforehashmapupgrade,5072152, -1cfda0305a0e23d0aaf4459029f0b97424d0f22d,DELETE,executable,examples/hello-next/bun-mimalloc,34249752, diff --git a/.gitmodules b/.gitmodules index 12303d5df..8870867ab 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,9 +4,12 @@ [submodule "src/deps/picohttpparser"] path = src/deps/picohttpparser url = https://github.com/h2o/picohttpparser/ + ignore = dirty [submodule "src/javascript/jsc/WebKit"] path = src/javascript/jsc/WebKit url = git@github.com:/Jarred-Sumner/WebKit + ignore = dirty [submodule "src/deps/mimalloc"] path = src/deps/mimalloc url = https://github.com/microsoft/mimalloc + ignore = dirty @@ -29,11 +29,12 @@ runtime_js: jsc: jsc-build jsc-bindings jsc-build: jsc-build-mac jsc-copy-headers -jsc-bindings: - jsc-bindings-headers - jsc-bindings-mac +jsc-bindings: jsc-bindings-headers jsc-bindings-mac + + jsc-bindings-headers: + mkdir -p src/JavaScript/jsc/bindings-obj/ zig build headers jsc-copy-headers: diff --git a/buglogs/aug10.md b/buglogs/aug10.md deleted file mode 100644 index 6f69b3830..000000000 --- a/buglogs/aug10.md +++ /dev/null @@ -1,11 +0,0 @@ -``` -ModuleNotFound on resolving "object-assign" from "/Users/jarred/Code/bun/demos/css-stress-test/node_modules/react-dom/cjs/" -``` - -Happens with `--platform=browser` when importing react while building the .bun - -`object-assign` doesn't have a `main` field set. That's not a bug; this should work. - -The error doesn't happen when `main` is set in `object-assign`'s `package.json`. - -It turns out, this was a data race! It was fixed by disabling building .jsb in parallel diff --git a/docs/module-system.md b/docs/module-system.md deleted file mode 100644 index a12fb0fff..000000000 --- a/docs/module-system.md +++ /dev/null @@ -1,9 +0,0 @@ -# Modules (JavaScript Runtime Environment) - -This is about the JavaScript Runtime Environment, so this doesn't apply when bundling for Node.js or Web. - -The JavaScript Runtime treats modules as close as possible to what it does on the web. - -That means: - -- Modules are always transformed to ES Modules diff --git a/examples/hello-next/bun-framework-next/.npmignore b/examples/hello-next/bun-framework-next/.npmignore new file mode 100644 index 000000000..dc0954477 --- /dev/null +++ b/examples/hello-next/bun-framework-next/.npmignore @@ -0,0 +1,2 @@ +*.bun +node_modules
\ No newline at end of file diff --git a/examples/hello-next/bun-framework-next/bun-error.css b/examples/hello-next/bun-framework-next/bun-error.css new file mode 100644 index 000000000..64801411f --- /dev/null +++ b/examples/hello-next/bun-framework-next/bun-error.css @@ -0,0 +1,288 @@ +:host { + --bun-error-color: #e33737; + --bun-error-monospace: ui-monospace, Menlo, Monaco, "Cascadia Mono", + "Segoe UI Mono", "Roboto Mono", "Oxygen Mono", "Ubuntu Monospace", + "Source Code Pro", "Fira Mono", "Droid Sans Mono", "Courier New", monospace; +} + +a { + color: inherit; + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} +#BunErrorOverlay-container { + box-shadow: 0px 16px 24px rgba(0, 0, 0, 0.06), 0px 2px 6px rgba(0, 0, 0, 0.1), + 0px 0px 1px rgba(0, 0, 0, 0.04); + backdrop-filter: blur(42px); + backface-visibility: visible; + border: inset 1px solid rgba(0, 0, 0, 0.2); + border-radius: 17px; + background-color: rgba(255, 255, 255, 0.92); + width: 480px; + + position: fixed; + top: 120px; + right: 48px; + z-index: 999999; + + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, + Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; +} + +#BunErrorOverlay-container a { + color: inherit; +} + +.BunError-Summary-ErrorIcon { + content: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAgCAYAAAB3j6rJAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAJiSURBVHgBzZdLUttAEIa7RwpVeKUD4Ip8hFSB7V3kG8AJgBPgG+CcAG4QcwPfIFpiigU5gRWcqmy1AVwVaTo9Y+yyiEeakc3jX7j0GEmfe7r/6QH4IELYUJNuN/LyPMwRU2g04lYcp1BDtUEYIPSJvvNhtHI5QcTB3vX1FThKQE0xxI8XEEohEQ2n+/sROKoWyP3BwYn6qHGA553DW4CgEFUfin6328fwmiDTbldBhFXjiHNlEkUBWMoJRCUoSNm3HB6Kx0fbsW4gnpQDQLT/l4hntlGxBlHR4NJ0mndW4D08WCWuNYgv5YXhVsJmNASi0bqbnNj9P2pKtwGiyxXxcM2tJNvd/bI3Hp82b26OJOK3dc9nc+PbHMRUrhyJgqV7QowMr4iqTK4SpNK8VvRXSnNiVphcKYhO0BLzIkvAZ5WaXCmID6AeDGFLYpO7NJWzEUSbF9EAHKTagYohgcnkjCDavKoVgqNMJrcWpKZ5AQlh46LBp6enCysQ36LuFy8tnBFZ2Tkn+cnLcv6vQ1PlypViC6I+PsiEUB3ZomMLLZ+Mm+Nxzwgy7XQmsMVKKVWe95q3t7E6LEyNi3ktRZSWrTWl8rxl5JcgVeZlUJI1Gq3FWsM+cQpuCn91Ov0CiEd0Bo7RkERXq2tNPps5R4UBzlU5axAdDQDrbmr5EsSvhQs7OxG4S5ucTtb7dntYxzeeNWLzi3MhWpwnxy4d3IpSX/0yxGeor0OGmPcqWHu/FixypNY2cZvSINxZ/YT3VTIHmc0u1Qm8k9R+WYO07u7SDLHH+1bnzfNGYjPkhfJIbdr/AfAS02LsKGiuAAAAAElFTkSuQmCC"); + width: 20px; + height: 19px; + + margin-right: 6px; + display: block; +} + +.BunError-Summary-CloseIcon { + content: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACYAAAAmCAYAAACoPemuAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAKKSURBVHgBxZjpTsMwEISnaTmLKLf4AX94/7fiFlRcJaUKl6exK8e1k7XTY6QVUbDjj/V4bdNBe2Uquio2nPdfKn6RqA7StKuir2JHxXZNO4LlKkb65zeWBLavYxdpelMxhABQCkaQI6QDuRrqCEoCdqjiFItXoeIagex1Gzqfo8zUMsSxByo+Vfz4fokaqH0sVx09xhxcCOwY5RSuQgbuHVZ58YGx0RlWK8LtoYT74wsXjEXyHM3eW4Y4JgFZ76ZV2xancAPrE+3T44MNRiCp2bnd5MK29A0rfyFsP7VRz3pxLOxoF8ctFZeYz7wRPfOgn/mHX6B5Rui1zP7gDmQaWc8TlEXytwGKKpy+dRoYMG41Um+52fHBuVBG0jH6ZpAtyMVV20MYLgRFq+xBpm1TFrjtbAo7dfUAI1SzxMr9ocF8UFIPUx2TsQxx4pTQ9G7migVAVYBiwagQnK0kKBsotdITblDz7eRDgAH7QZrop9CBj/67gbywVmTAxGdxVKEeGtoQKgkusz4QoxDUbK+zZOCibkzGW/yYtMawTNx73tPkJ/CXEj7zMEjPSY7zRWYNJtUwAGVWX2i1sgi/QabcgJn7X4p8JSEEJ139467TqS/oxAvup34+QrhOmR1ijHLV89uS2xY9+WjPN7N3hbRiu0hNj1U2BKfzGesVs/XCBzc7r0j32iLEbE1Xs2/aHtHivzQtxEzNTia+VUIoGnaA1Yl3iEptDC1fblGcb2nRbSNC3cGZpbq6MtGdCJf6f7Qm0c+38BwiJANKbzexeoJegT7FZOIA5SbdFjDXUJO6RrFTRChe82Jv7PQPbcFyMJZ0aOMd3qx47SMoyw5B6VnjF2aECyjXMFEl6B+GYop4atKAigAAAABJRU5ErkJggg=="); + width: 22px; + height: 22px; + border-radius: 50%; + cursor: pointer; +} + +.BunError-Summary-CloseIcon:hover { + transform: scale(1.2); + + background-color: rgb(255, 255, 255); +} + +.BunError-Summary { + display: grid; + grid-template-columns: min-content auto min-content; + grid-template-rows: 46px; + align-items: center; + padding: 0 18px; + border-bottom: 1px solid rgb(220, 220, 220); +} + +.BunError-footer { + display: grid; + padding: 12px 18px; + justify-content: flex-end; + border-top: 1px solid rgb(220, 220, 220); + align-items: center; +} + +.BunError-Summary-Title { + font-weight: 500; + letter-spacing: 0.36px; +} + +.BunError-ErrorTag, +.BunError-error-code { + color: rgb(165, 165, 165); + font-weight: 500; + font-size: 12pt; +} + +.BunError-ErrorTag { + font-size: 14px; + text-transform: uppercase; + font-weight: 300; +} + +.BunError-error-header { + display: flex; + align-items: center; + gap: 0.5ch; +} + +.BunError-error-message { + color: var(--bun-error-color); + font-size: 16pt; + font-weight: bold; +} + +.BunError-list { + margin-top: 14px; + gap: 14px; +} + +.BunError-error-subtitle, +.BunError-error-header, +.BunError-error-message { + padding-left: 18px; + padding-right: 18px; +} + +.BunError-error-subtitle { + font-size: 500; +} + +.BunError-NativeStackTrace { + margin-top: 0; +} + +.BunError-NativeStackTrace-filename { + padding: 8px 18px; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + font-weight: 500; + letter-spacing: 0.36px; + margin-bottom: 8px; + display: block; +} + +.BunError-NativeStackTrace-filename:hover { + text-decoration: underline; +} + +.BunError-SourceLines-lines { +} + +.BunError-SourceLines { + display: grid; + grid-template-columns: min-content auto; + grid-template-rows: repeat(16px, 6); + column-gap: 13px; + font-size: 14px; + padding-left: 24px; + align-items: center; + position: relative; + overflow-x: auto; +} + +.BunError-SourceLine-text { + white-space: pre; + display: block; + + font-family: var(--bun-error-monospace); +} + +.BunError-SourceLine-number { + font-variant: tabular-nums; + text-align: right; + user-select: none; + -webkit-user-select: none; +} + +.BunError-SourceLine-number--empty { + color: rgb(165, 165, 165); +} + +.BunError-SourceLine-number, +.BunError-SourceLine-text { + height: 18px; +} + +.BunError-SourceLines-highlighter--0, +.BunError-SourceLines-highlighter--1, +.BunError-SourceLines-highlighter--2, +.BunError-SourceLines-highlighter--3, +.BunError-SourceLines-highlighter--4, +.BunError-SourceLines-highlighter--5 { + position: absolute; +} + +.BunError-SourceLine-text--highlight { + color: #e33737; +} + +#BunError-poweredBy { + height: 16px; + + content: url("data:image/webp;base64,UklGRhwFAABXRUJQVlA4TBAFAAAv3MAHEBeioG0jx3f8MY+fGAgkbdz7Zz4Ekjbu/TMftpEkOaFfC5vgSJ4sHswjm7TZk7R34AJUQAFAQwYAQAUkQAZUAFTUz5XDIaPd77AAN2DlBrAAG/Ai8CFwcKICP6L+BzgTEBEBp6xqWyZJejDAWERMQEwHEuEip1yEmPDc/w1qRs7/OqL/EyBbtu22bQ4ViCHTKM0gUUNmIjMmZfu6s7nz3v//KwIgRfe3iP5PAP9bdVNLfR/hfdqK3bxLjDgr9Q4JGpfk7xHxPPu8KRdApEaiIpdSr8iU9id7Cn+vE6WbWqRuTORqm7pujCV+LKW8jyymEZHGALqpRer76LU4NXya9fhb5XgQZ2ks02uxtgBmtXSrBEAr1jO04mxfiazx06Lp71TgQXzbzoPYWSMoxV4pGLEWaMXz/xuHIyPevACm4r6BEXcaNBZeGPGt1NvmKij9pFL47cE48TgLaksRlF6SgnhtsKbrV/w0rVdO2yhdg+lKg+naB9OvK/+Ko+2KrNfeTfuV0/pp2q5rj3/G9OtK22C7ou3Laj6EXEvfHMYnOvM4D8R+Lf434PQ9/din0Vrt6wYsundZj+7QABzNPoeumpMa4Gj2JQ7mqlq3735vqjUCWmxzoq9D9C/217cCWbOtVPXsNvXOt7pD0NxVLV2xAklbflW9A6BF/YFD/clVawBi1XYX3+WbrHdRa4SiE8uWaDJcXbo4GhmrzhM41BWo+jtw6DtAsQJRfQegmSFqjcCpaeC9ALFaI5A0AVnvCWL1G2uEeOsJSXUnJFpjuI1xyWZsUVfok56wa6ZPesChEXZLc4VFN8ga6Zt1FAF23emL70DQGgGW7yJAbL4DQbedOdGvceRjyE2vbRD0hpfOg6h/wKw7vDyyJxwa4PZmmDV2hb74Zph0ZtHM8P6mMMw6Q5EmAA4pwzhOxrDpNw9oVijKWCtQzVCddwsUC6DWYfvi1jpsurLrMcrfnKOkOyySBkKi9UjOnkUcVd9QvzqtzFaCBprH6HPlSfVhjd3+J6VnNNoCmih8weaRVigaPhVg0XiYobgvOgPNm8dPKk93PUavb/KDDUhEExzSFiPJ/e7GcgwWLXDqOlg0A6G5FzdInocV4Pb9YYuPXhpGa4RZy6h+8x4VnYGZSIdE87GkPnJbj6WG7qU7LFoGWTeAYtYAi7WYu6THIHk/OjQNkm+g6dolv/HoVq30W9pqosleymsXay/vPVnXuL60RqDoayaeWukPtQA0detC831MxFPzo1A1RaZTbyBp3eeYbF+Z5pia7gNNlNEae/EtMHsOp+MNIFbHNQ6imrqsho7f/FjjI+bquEaA4rDmb87q8IfhZEdEP8ZyimkfHkXcq/qzMIy5qe2aGBdb7BY9GcfStTQBFM8RMXftFRmmpv7Ewxo+heYWs9oSH5dEGQa6mPXhCEHjdzkbZOGjBjAvkafzMk88XCaGcebhtCwzH2eeLss88XCeJ2CZeBhnYFrmic+a6M8AdaeaNj2OAeRenPy1HQeNi/U3jwIf/sszorAfTjqSf6u8rgBgWnrwcVBaOELuKhA0ruzVW7d/RGsMGJedKklKF5+rDuLSwad4ki4fA8G1jRdAUtkKZQn/Xb8pURYOgbhgEb5BfMYsIlwdwBmfMYtwdYBpwSLCxwCgzpiFCw0AScEsfB4BxHLw3x1vs1WIgXWaagBQOs1NAu94kadaAUCS5hsFe7wwCZx6sVF4/wI="); +} + +#BunError-SourceLine-text-highlightExpression { + font-weight: bold; + text-decoration-style: wavy; +} + +.BunError-JSException--TypeError #BunError-SourceLine-text-highlightExpression { + border: 1px solid rgba(0, 0, 0, 0.2); +} +.BunError-Indented { + display: inline-block; + user-select: none; + -webkit-user-select: none; +} + +.BunError-divet { + vertical-align: bottom; + user-select: none; + -webkit-user-select: none; +} + +.BunError-error-typename { + font-family: var(--bun-error-monospace); + color: #e39437; + font-weight: bold; +} + +.BunError-error-muted { + font-weight: normal; + user-select: none; + -webkit-user-select: none; +} + +.BunError-error-muted, +.BunError-StackFrame--muted { + color: rgb(165, 165, 165); +} + +.BunError-NativeStackTrace .BunError-error-typename { + user-select: none; + -webkit-user-select: none; +} + +.BunError-StackFrame-link { +} + +.BunError-StackFrame-link-content { + display: flex; + gap: 0.25ch; + white-space: nowrap; +} + +.BunError-StackFrame { + display: table-row; +} + +.BunError-StackFrame-identifier { + padding-right: 18px; + font-size: 0.8em; + font-family: var(--bun-error-monospace); + letter-spacing: 0.49px; +} + +.BunError-error-message--mono { + font-family: var(--bun-error-monospace); +} +.BunError-StackFrame-identifier, +.BunError-StackFrame-link { + display: table-cell; + font-weight: 500; +} + +.BunError-BuildError { + padding-bottom: 18px; +} + +.BunError-StackFrame-link-content { + font-size: 0.8em; +} + +.BunError-StackFrames { + display: table; + table-layout: auto; + padding: 13px 10px; + margin: 8px auto; + border-radius: 4px; + + background-color: rgb(244, 244, 244); +} diff --git a/examples/hello-next/bun-framework-next/bun-error.tsx b/examples/hello-next/bun-framework-next/bun-error.tsx new file mode 100644 index 000000000..5702f66e6 --- /dev/null +++ b/examples/hello-next/bun-framework-next/bun-error.tsx @@ -0,0 +1,783 @@ +import type { + FallbackMessageContainer, + JSException as JSExceptionType, + Message, + SourceLine, + StackFrame, + Problems, + FallbackStep, + StackTrace, + Location, + JSException, + WebsocketMessageBuildFailure, +} from "../../../src/api/schema"; + +import ReactDOM from "react-dom"; +import { + useCallback, + useState, + useEffect, + useLayoutEffect, + createContext, + useContext, + Children, +} from "react"; + +enum StackFrameScope { + Eval = 1, + Module = 2, + Function = 3, + Global = 4, + Wasm = 5, + Constructor = 6, +} + +enum JSErrorCode { + Error = 0, + EvalError = 1, + RangeError = 2, + ReferenceError = 3, + SyntaxError = 4, + TypeError = 5, + URIError = 6, + AggregateError = 7, + + // StackOverflow & OutOfMemoryError is not an ErrorType in <JavaScriptCore/ErrorType.h> within JSC, so the number here is just totally made up + OutOfMemoryError = 8, + BundlerError = 252, + StackOverflow = 253, + UserErrorCode = 254, +} + +const JSErrorCodeLabel = { + 0: "Error", + 1: "EvalError", + 2: "RangeError", + 3: "ReferenceError", + 4: "SyntaxError", + 5: "TypeError", + 6: "URIError", + 7: "AggregateError", + 253: "StackOverflow", + 8: "OutOfMemory", +}; + +const BUN_ERROR_CONTAINER_ID = "__bun-error__"; + +enum RuntimeType { + Nothing = 0x0, + Function = 0x1, + Undefined = 0x2, + Null = 0x4, + Boolean = 0x8, + AnyInt = 0x10, + Number = 0x20, + String = 0x40, + Object = 0x80, + Symbol = 0x100, + BigInt = 0x200, +} + +enum ErrorTagType { + build, + resolve, + server, + client, + hmr, +} + +const ErrorTag = ({ type }: { type: ErrorTagType }) => ( + <div className={`BunError-ErrorTag BunError-ErrorTag--${ErrorTagType[type]}`}> + {ErrorTagType[type]} + </div> +); + +const errorTags = [ + <ErrorTag type={ErrorTagType.build}></ErrorTag>, + <ErrorTag type={ErrorTagType.resolve}></ErrorTag>, + <ErrorTag type={ErrorTagType.server}></ErrorTag>, + <ErrorTag type={ErrorTagType.client}></ErrorTag>, + <ErrorTag type={ErrorTagType.hmr}></ErrorTag>, +]; + +const normalizedFilename = (filename: string, cwd: string): string => { + if (filename.startsWith(cwd)) { + return filename.substring(cwd.length); + } + + return filename; +}; + +const blobFileURL = (filename: string): string => { + return new URL("/blob:" + filename, location.href).href; +}; + +const srcFileURL = (filename: string, line: number, column: number): string => { + if (filename.endsWith(".bun")) { + return new URL("/" + filename, location.href).href; + } + + var base = `/src:${filename}`; + if (line > -1) { + base = base + `:${line}`; + + if (column > -1) { + base = base + `:${column}`; + } + } + + return new URL(base, location.href).href; +}; + +class FancyTypeError { + constructor(exception: JSException) { + this.runtimeType = exception.runtime_type || 0; + this.runtimeTypeName = RuntimeType[this.runtimeType] || "undefined"; + this.message = exception.message; + this.explain = ""; + + this.normalize(exception); + } + + runtimeType: RuntimeType; + explain: string; + runtimeTypeName: string; + message: string; + + normalize(exception: JSException) { + let i = exception.message.lastIndexOf(" is "); + if (i === -1) return; + const partial = exception.message.substring(i + " is ".length); + const nextWord = /(["a-zA-Z0-9_\.]+)\)$/.exec(partial); + if (nextWord && nextWord[0]) { + this.runtimeTypeName = nextWord[0]; + this.runtimeTypeName = this.runtimeTypeName.substring( + 0, + this.runtimeTypeName.length - 1 + ); + switch (this.runtimeTypeName.toLowerCase()) { + case "undefined": { + this.runtimeType = RuntimeType.Undefined; + break; + } + case "null": { + this.runtimeType = RuntimeType.Null; + break; + } + case "string": { + this.runtimeType = RuntimeType.String; + break; + } + case "true": + case "false": { + this.runtimeType = RuntimeType.Boolean; + break; + } + + case "number": + this.runtimeType = RuntimeType.Number; + break; + + case "bigint": + this.runtimeType = RuntimeType.BigInt; + break; + + case "symbol": + this.runtimeType = RuntimeType.Symbol; + break; + default: { + this.runtimeType = RuntimeType.Object; + break; + } + } + this.message = exception.message.substring(0, i); + this.message = this.message.substring( + 0, + this.message.lastIndexOf("(In ") + ); + } + } +} + +var onClose = dismissError; + +const IndentationContext = createContext(0); +const SourceLines = ({ + sourceLines, + highlight = -1, + highlightColumnStart = 0, + highlightColumnEnd = Infinity, + children, +}: { + sourceLines: SourceLine[]; + highlightColumnStart: number; + highlightColumnEnd: number; + highlight: number; +}) => { + let start = sourceLines.length; + let end = 0; + let dedent = Infinity; + let originalLines = new Array(sourceLines.length); + let _i = 0; + for (let i = 0; i < sourceLines.length; i++) { + // bun only prints \n, no \r\n, so this should work fine + sourceLines[i].text = sourceLines[i].text.replaceAll("\n", ""); + + // This will now only trim spaces (and vertical tab character which never prints) + const left = sourceLines[i].text.trimLeft(); + + if (left.length > 0) { + start = Math.min(start, i); + end = Math.max(end, i + 1); + + dedent = Math.min(sourceLines[i].text.length - left.length, dedent); + } + } + + const _sourceLines = sourceLines.slice(start, end); + const childrenArray = children || []; + const numbers = new Array(_sourceLines.length + childrenArray.length); + const lines = new Array(_sourceLines.length + childrenArray.length); + + let highlightI = 0; + for (let i = 0; i < _sourceLines.length; i++) { + const { line, text } = _sourceLines[i]; + const classes = { + empty: text.trim().length === 0, + highlight: highlight + 1 === line || _sourceLines.length === 1, + }; + if (classes.highlight) highlightI = i; + const _text = classes.empty ? "" : text.substring(dedent); + lines[i] = ( + <div + key={i} + className={`BunError-SourceLine-text ${ + classes.empty ? "BunError-SourceLine-text--empty" : "" + } ${classes.highlight ? "BunError-SourceLine-text--highlight" : ""}`} + > + {classes.highlight ? ( + <> + {_text.substring(0, highlightColumnStart - dedent)} + <span id="BunError-SourceLine-text-highlightExpression"> + {_text.substring( + highlightColumnStart - dedent, + highlightColumnEnd - dedent + )} + </span> + {_text.substring(highlightColumnEnd - dedent)} + </> + ) : ( + _text + )} + </div> + ); + numbers[i] = ( + <div + key={line} + className={`BunError-SourceLine-number ${ + classes.empty ? "BunError-SourceLine-number--empty" : "" + } ${classes.highlight ? "BunError-SourceLine-number--highlight" : ""}`} + > + {line} + </div> + ); + + if (classes.highlight && children) { + i++; + + numbers.push( + ...childrenArray.map((child, index) => ( + <div + key={"highlight-number-" + index} + className={`BunError-SourceLine-number ${ + classes.empty ? "BunError-SourceLine-number--empty" : "" + } ${ + classes.highlight ? "BunError-SourceLine-number--highlight" : "" + }`} + ></div> + )) + ); + lines.push( + ...childrenArray.map((child, index) => ( + <div + key={"highlight-line-" + index} + className={`BunError-SourceLine-text`} + > + {childrenArray[index]} + </div> + )) + ); + } + } + + return ( + <IndentationContext.Provider value={dedent}> + <div className="BunError-SourceLines"> + <div + className={`BunError-SourceLines-highlighter--${highlightI}`} + ></div> + + <div className="BunError-SourceLines-numbers">{numbers}</div> + <div className="BunError-SourceLines-lines">{lines}</div> + </div> + </IndentationContext.Provider> + ); +}; + +const BuildErrorSourceLines = ({ location }: { location: Location }) => { + const { line, line_text, column, file } = location; + const sourceLines: SourceLine[] = [{ line, text: line_text }]; + return ( + <SourceLines + sourceLines={sourceLines} + highlight={line} + highlightColumnStart={column} + highlightColumnEnd={column} + /> + ); +}; + +const BuildErrorStackTrace = ({ location }: { location: Location }) => { + const { cwd } = useContext(ErrorGroupContext); + const filename = normalizedFilename(location.file, cwd); + const { line, column } = location; + return ( + <div className={`BunError-NativeStackTrace`}> + <a + href={srcFileURL(filename, line, column)} + target="_blank" + className="BunError-NativeStackTrace-filename" + > + {filename}:{line}:{column} + </a> + <BuildErrorSourceLines location={location} /> + </div> + ); +}; + +const StackFrameIdentifier = ({ + functionName, + scope, +}: { + functionName?: string; + scope: StackFrameScope; +}) => { + switch (scope) { + case StackFrameScope.Constructor: { + return functionName ? `new ${functionName}` : "new (anonymous)"; + break; + } + + case StackFrameScope.Eval: { + return "eval"; + break; + } + + case StackFrameScope.Module: { + return "(esm)"; + break; + } + + case StackFrameScope.Global: { + return "(global)"; + break; + } + + case StackFrameScope.Wasm: { + return "(wasm)"; + break; + } + + default: { + return functionName ? functionName : "λ()"; + break; + } + } +}; + +const NativeStackFrame = ({ + frame, + isTop, +}: { + frame: StackFrame; + isTop: boolean; +}) => { + const { cwd } = useContext(ErrorGroupContext); + const { + file, + function_name: functionName, + position: { line, column_start: column }, + scope, + } = frame; + const fileName = normalizedFilename(file, cwd); + return ( + <div + className={`BunError-StackFrame ${ + fileName.endsWith(".bun") ? "BunError-StackFrame--muted" : "" + }`} + > + <div + title={StackFrameScope[scope]} + className="BunError-StackFrame-identifier" + > + <StackFrameIdentifier functionName={functionName} scope={scope} /> + </div> + + <a + target="_blank" + href={blobFileURL(fileName)} + className="BunError-StackFrame-link" + > + <div className="BunError-StackFrame-link-content"> + <div className={`BunError-StackFrame-file`}>{fileName}</div> + {line > -1 && ( + <div className="BunError-StackFrame-line">:{line + 1}</div> + )} + {column > -1 && ( + <div className="BunError-StackFrame-column">:{column}</div> + )} + </div> + </a> + </div> + ); +}; + +const NativeStackFrames = ({ frames }) => { + const items = new Array(frames.length); + for (let i = 0; i < frames.length; i++) { + items[i] = <NativeStackFrame key={i} frame={frames[i]} />; + } + + return <div className="BunError-StackFrames">{items}</div>; +}; + +const NativeStackTrace = ({ + frames, + sourceLines, + children, +}: { + frames: StackFrame[]; + sourceLines: SourceLine[]; +}) => { + const { file = "", position } = frames[0]; + const { cwd } = useContext(ErrorGroupContext); + const filename = normalizedFilename(file, cwd); + return ( + <div className={`BunError-NativeStackTrace`}> + <a + href={blobFileURL(filename)} + target="_blank" + className="BunError-NativeStackTrace-filename" + > + {filename}:{position.line + 1}:{position.column_start} + </a> + {sourceLines.length > 0 && ( + <SourceLines + highlight={position.line} + sourceLines={sourceLines} + highlightColumnStart={position.column_start} + highlightColumnEnd={position.column_stop} + > + {children} + </SourceLines> + )} + {frames.length > 0 && <NativeStackFrames frames={frames} />} + </div> + ); +}; + +const divet = <span className="BunError-divet">^</span>; +const DivetRange = ({ start, stop }) => { + const length = Math.max(stop - start, 0); + if (length === 0) return null; + return ( + <span + className="BunError-DivetRange" + style={{ width: `${length - 1}ch` }} + ></span> + ); +}; + +const Indent = ({ by, children }) => { + const amount = useContext(IndentationContext); + return ( + <> + {` `.repeat(by - amount)} + {children} + </> + ); +}; + +const JSException = ({ value }: { value: JSExceptionType }) => { + switch (value.code) { + case JSErrorCode.TypeError: { + const fancyTypeError = new FancyTypeError(value); + + if (fancyTypeError.runtimeType !== RuntimeType.Nothing) { + return ( + <div + className={`BunError-JSException BunError-JSException--TypeError`} + > + <div className="BunError-error-header"> + <div className={`BunError-error-code`}>TypeError</div> + {errorTags[ErrorTagType.server]} + </div> + + <div className={`BunError-error-message`}> + {fancyTypeError.message} + </div> + + {fancyTypeError.runtimeTypeName.length && ( + <div className={`BunError-error-subtitle`}> + It's{" "} + <span className="BunError-error-typename"> + {fancyTypeError.runtimeTypeName} + </span> + . + </div> + )} + + {value.stack && ( + <NativeStackTrace + frames={value.stack.frames} + sourceLines={value.stack.source_lines} + > + <Indent by={value.stack.frames[0].position.column_start}> + <span className="BunError-error-typename"> + {fancyTypeError.runtimeTypeName} + </span> + </Indent> + </NativeStackTrace> + )} + </div> + ); + } + } + + default: { + return ( + <div className={`BunError-JSException`}> + <div className="BunError-error-header"> + <div className={`BunError-error-code`}>{value.name}</div> + {errorTags[ErrorTagType.server]} + </div> + + <div className={`BunError-error-message`}>{value.message}</div> + + {value.stack && ( + <NativeStackTrace + frames={value.stack.frames} + sourceLines={value.stack.source_lines} + /> + )} + </div> + ); + } + } +}; + +const Summary = ({ + errorCount, + onClose, +}: { + errorCount: number; + onClose: Function; +}) => { + return ( + <div className="BunError-Summary"> + <div className="BunError-Summary-ErrorIcon"></div> + <div className="BunError-Summary-Title"> + {errorCount} error{errorCount > 1 ? "s" : ""} on this page + </div> + + <div onClick={onClose} className="BunError-Summary-CloseButton"> + <div className="BunError-Summary-CloseIcon"></div> + </div> + </div> + ); +}; + +const BuildError = ({ message }: { message: Message }) => { + let title = (message.data.text || "").trim(); + const newline = title.indexOf("\n"); + let subtitle = ""; + if (newline > -1) { + subtitle = title.slice(newline + 1).trim(); + title = title.slice(0, newline); + } + return ( + <div className={`BunError-BuildError BunError-BuildError--build`}> + <div className="BunError-error-header"> + <div className={`BunError-error-code`}>BuildError</div> + </div> + + <div className={`BunError-error-message`}>{title}</div> + + {subtitle.length > 0 && ( + <div className={`BunError-error-subtitle`}>{subtitle}</div> + )} + + {message.data.location && ( + <BuildErrorStackTrace location={message.data.location} /> + )} + </div> + ); +}; + +const ResolveError = ({ message }: { message: Message }) => { + const { cwd } = useContext(ErrorGroupContext); + let title = (message.data.text || "").trim(); + const newline = title.indexOf("\n"); + let subtitle = null; + if (newline > -1) { + subtitle = title.slice(newline + 1).trim(); + title = title.slice(0, newline); + } + + return ( + <div className={`BunError-BuildError BunError-BuildError--resolve`}> + <div className="BunError-error-header"> + <div className={`BunError-error-code`}>ResolveError</div> + </div> + + <div className={`BunError-error-message`}> + Can't import{" "} + <span className="BunError-error-message--mono"> + {message.on.resolve} + </span> + </div> + + {subtitle && <div className={`BunError-error-subtitle`}>{subtitle}</div>} + + {message.data.location && ( + <BuildErrorStackTrace location={message.data.location} /> + )} + </div> + ); +}; +const OverlayMessageContainer = ({ + problems, + reason, + router, +}: FallbackMessageContainer) => { + return ( + <div id="BunErrorOverlay-container"> + <div className="BunError-content"> + <div className="BunError-header"> + <Summary + errorCount={problems.exceptions.length + problems.build.errors} + onClose={onClose} + problems={problems} + reason={reason} + /> + </div> + <div className={`BunError-list`}> + {problems.exceptions.map((problem, index) => ( + <JSException key={index} value={problem} /> + ))} + {problems.build.msgs.map((buildMessage, index) => { + if (buildMessage.on.build) { + return <BuildError key={index} message={buildMessage} />; + } else if (buildMessage.on.resolve) { + return <ResolveError key={index} message={buildMessage} />; + } else { + throw new Error("Unknown build message type"); + } + })} + </div> + <div className="BunError-footer"> + <div id="BunError-poweredBy"></div> + </div> + </div> + </div> + ); +}; + +const BuildFailureMessageContainer = ({ + messages, +}: { + messages: Message[]; +}) => { + return ( + <div id="BunErrorOverlay-container"> + <div className="BunError-content"> + <div className="BunError-header"> + <Summary onClose={onClose} errorCount={messages.length} /> + </div> + <div className={`BunError-list`}> + {messages.map((buildMessage, index) => { + if (buildMessage.on.build) { + return <BuildError key={index} message={buildMessage} />; + } else if (buildMessage.on.resolve) { + return <ResolveError key={index} message={buildMessage} />; + } else { + throw new Error("Unknown build message type"); + } + })} + </div> + <div className="BunError-footer"> + <div id="BunError-poweredBy"></div> + </div> + </div> + </div> + ); +}; + +const ErrorGroupContext = createContext<{ cwd: string }>(null); +var reactRoot; + +function renderWithFunc(func) { + if (!reactRoot) { + const root = document.createElement("div"); + root.id = "__bun__error-root"; + + reactRoot = document.createElement("div"); + reactRoot.id = BUN_ERROR_CONTAINER_ID; + reactRoot.style.visibility = "hidden"; + const link = document.createElement("link"); + link.rel = "stylesheet"; + link.href = new URL("/bun:erro.css", document.baseURI).href; + link.onload = () => { + reactRoot.style.visibility = "visible"; + }; + + const shadowRoot = root.attachShadow({ mode: "open" }); + shadowRoot.appendChild(link); + shadowRoot.appendChild(reactRoot); + + document.body.appendChild(root); + ReactDOM.render(func(), reactRoot); + + debugger; + } else { + ReactDOM.render(func(), reactRoot); + } +} + +export function renderFallbackError(fallback: FallbackMessageContainer) { + return renderWithFunc(() => ( + <ErrorGroupContext.Provider value={fallback}> + <OverlayMessageContainer {...fallback} /> + </ErrorGroupContext.Provider> + )); +} + +export function dismissError() { + if (reactRoot) { + ReactDOM.unmountComponentAtNode(reactRoot); + const root = document.getElementById("__bun__error-root"); + if (root) root.remove(); + reactRoot = null; + } +} + +globalThis.renderBuildFailure = ( + failure: WebsocketMessageBuildFailure, + cwd: string +) => { + renderWithFunc(() => ( + <ErrorGroupContext.Provider value={{ cwd }}> + <BuildFailureMessageContainer messages={failure.log.msgs} /> + </ErrorGroupContext.Provider> + )); +}; diff --git a/examples/hello-next/bun-framework-next/bun-error/close.png b/examples/hello-next/bun-framework-next/bun-error/close.png Binary files differnew file mode 100644 index 000000000..11e513a1b --- /dev/null +++ b/examples/hello-next/bun-framework-next/bun-error/close.png diff --git a/examples/hello-next/bun-framework-next/bun-error/error.png b/examples/hello-next/bun-framework-next/bun-error/error.png Binary files differnew file mode 100644 index 000000000..c35e01a2b --- /dev/null +++ b/examples/hello-next/bun-framework-next/bun-error/error.png diff --git a/examples/hello-next/bun-framework-next/client.development.tsx b/examples/hello-next/bun-framework-next/client.development.tsx new file mode 100644 index 000000000..0d019e175 --- /dev/null +++ b/examples/hello-next/bun-framework-next/client.development.tsx @@ -0,0 +1,416 @@ +import "./bun-error"; +globalThis.global = globalThis; +globalThis.Bun_disableCSSImports = true; + +import * as React from "react"; +var onlyChildPolyfill = React.Children.only; +React.Children.only = function (children) { + if (children && typeof children === "object" && children.length == 1) { + return onlyChildPolyfill(children[0]); + } + + return onlyChildPolyfill(children); +}; + +import * as ReactDOM from "react-dom"; +import App from "next/app"; +import mitt, { MittEmitter } from "next/dist/shared/lib/mitt"; +import { RouterContext } from "next/dist/shared/lib/router-context"; +import Router, { + AppComponent, + AppProps, + delBasePath, + hasBasePath, + PrivateRouteInfo, +} from "next/dist/shared/lib/router/router"; + +import * as NextRouteLoader from "next/dist/client/route-loader"; +import { isDynamicRoute } from "next/dist/shared/lib/router/utils/is-dynamic"; +import { + urlQueryToSearchParams, + assign, +} from "next/dist/shared/lib/router/utils/querystring"; +import { setConfig } from "next/dist/shared/lib/runtime-config"; +import { + getURL, + loadGetInitialProps, + NEXT_DATA, + ST, +} from "next/dist/shared/lib/utils"; +// import { Portal } from "next/dist/client/portal"; +import initHeadManager from "next/dist/client/head-manager"; +import { HeadManagerContext } from "next/dist/shared/lib/head-manager-context"; +import PageLoader from "./page-loader"; +import measureWebVitals from "next/dist/client/performance-relayer"; +import { RouteAnnouncer } from "next/dist/client/route-announcer"; +import { + createRouter, + makePublicRouterInstance, +} from "next/dist/client/router"; +export const emitter: MittEmitter<string> = mitt(); + +declare global { + interface Window { + /* test fns */ + __NEXT_HYDRATED?: boolean; + __NEXT_HYDRATED_CB?: () => void; + + /* prod */ + __NEXT_PRELOADREADY?: (ids?: (string | number)[]) => void; + __NEXT_DATA__: NEXT_DATA; + __NEXT_P: any[]; + } +} + +function nextDataFromBunData() { + const { + router: { routes, route, params: paramsList }, + problems, + } = globalThis.__BUN_DATA__; + + const paramsMap = new Map(); + for (let i = 0; i < paramsList.keys.length; i++) { + paramsMap.set( + decodeURIComponent(paramsList.keys[i]), + decodeURIComponent(paramsList.values[i]) + ); + } + + const params = {}; + var url = new URL(location.href); + Object.assign(params, Object.fromEntries(url.searchParams.entries())); + Object.assign(params, Object.fromEntries(paramsMap.entries())); + + const pages = routes.reduce((acc, route) => { + var name = route.substring(route.indexOf("_next") + "_next/".length); + + while (name.startsWith("/")) { + name = name.substring(1); + } + + if (name.startsWith("pages")) { + name = name.substring("pages".length); + } + + while (name.startsWith("/")) { + name = name.substring(1); + } + + if (name.endsWith(".jsx")) { + name = name.substring(0, name.length - ".jsx".length); + } + + if (name.endsWith(".tsx")) { + name = name.substring(0, name.length - ".tsx".length); + } + + if (name.endsWith(".ts")) { + name = name.substring(0, name.length - ".ts".length); + } + + if (name.endsWith(".js")) { + name = name.substring(0, name.length - ".js".length); + } + + acc["/" + name] = [route]; + return acc; + }, {}); + + return { + page: routes[route], + buildId: "1234", + assetPrefix: "", + isPreview: false, + locale: null, + locales: [], + isFallback: false, + err: null, + props: {}, + query: params, + pages, + }; +} + +type RenderRouteInfo = PrivateRouteInfo & { + App: AppComponent; + scroll?: { x: number; y: number } | null; +}; +type RenderErrorProps = Omit<RenderRouteInfo, "Component" | "styleSheets">; + +const nextDataTag = document.getElementById("__NEXT_DATA__"); + +const data: typeof window["__NEXT_DATA__"] = nextDataTag + ? JSON.parse(document.getElementById("__NEXT_DATA__")!.textContent!) + : nextDataFromBunData(); +window.__NEXT_DATA__ = data; + +const { + props: hydrateProps, + err: hydrateErr, + page, + query, + buildId, + assetPrefix, + runtimeConfig, + dynamicIds, + isFallback, + locale, + locales, + domainLocales, + isPreview, +} = data; + +const prefix: string = assetPrefix || ""; + +setConfig({ + serverRuntimeConfig: {}, + publicRuntimeConfig: runtimeConfig || {}, +}); + +let asPath: string = getURL(); + +// make sure not to attempt stripping basePath for 404s +if (hasBasePath(asPath)) { + asPath = delBasePath(asPath); +} + +export const pageLoader: PageLoader = new PageLoader( + buildId, + prefix, + data.pages +); + +const headManager: { + mountedInstances: Set<unknown>; + updateHead: (head: JSX.Element[]) => void; +} = initHeadManager(); +const appElement: HTMLElement | null = document.getElementById("__next"); + +let lastRenderReject: (() => void) | null; +let webpackHMR: any; +export let router: Router; +let CachedApp: AppComponent, onPerfEntry: (metric: any) => void; + +export default function boot(EntryPointNamespace, loader) { + _boot(EntryPointNamespace).then(() => {}, false); +} + +class Container extends React.Component<{ + fn: (err: Error, info?: any) => void; +}> { + componentDidCatch(componentErr: Error, info: any) { + this.props.fn(componentErr, info); + } + + componentDidMount() { + this.scrollToHash(); + + // We need to replace the router state if: + // - the page was (auto) exported and has a query string or search (hash) + // - it was auto exported and is a dynamic route (to provide params) + // - if it is a client-side skeleton (fallback render) + if ( + router.isSsr && + // We don't update for 404 requests as this can modify + // the asPath unexpectedly e.g. adding basePath when + // it wasn't originally present + page !== "/404" && + page !== "/_error" && + (isFallback || + (data.nextExport && + (isDynamicRoute(router.pathname) || + location.search || + process.env.__NEXT_HAS_REWRITES)) || + (hydrateProps && + hydrateProps.__N_SSG && + (location.search || process.env.__NEXT_HAS_REWRITES))) + ) { + // update query on mount for exported pages + router.replace( + router.pathname + + "?" + + String( + assign( + urlQueryToSearchParams(router.query), + new URLSearchParams(location.search) + ) + ), + asPath, + { + // @ts-ignore + // WARNING: `_h` is an internal option for handing Next.js + // client-side hydration. Your app should _never_ use this property. + // It may change at any time without notice. + _h: 1, + // Fallback pages must trigger the data fetch, so the transition is + // not shallow. + // Other pages (strictly updating query) happens shallowly, as data + // requirements would already be present. + shallow: !isFallback, + } + ); + } + } + + componentDidUpdate() { + this.scrollToHash(); + } + + scrollToHash() { + let { hash } = location; + hash = hash && hash.substring(1); + if (!hash) return; + + const el: HTMLElement | null = document.getElementById(hash); + if (!el) return; + + // If we call scrollIntoView() in here without a setTimeout + // it won't scroll properly. + setTimeout(() => el.scrollIntoView(), 0); + } + + render() { + return this.props.children; + } +} + +let CachedComponent: React.ComponentType; + +const wrapApp = + (App: AppComponent) => + (wrappedAppProps: Record<string, any>): JSX.Element => { + const appProps: AppProps = { + ...wrappedAppProps, + Component: CachedComponent, + err: hydrateErr, + router, + }; + return ( + <AppContainer> + <App {...appProps} /> + </AppContainer> + ); + }; + +function AppContainer({ + children, +}: React.PropsWithChildren<{}>): React.ReactElement { + return ( + <Container fn={(error) => <div>{JSON.stringify(error)}</div>}> + <RouterContext.Provider value={makePublicRouterInstance(router)}> + <HeadManagerContext.Provider value={headManager}> + {children} + </HeadManagerContext.Provider> + </RouterContext.Provider> + </Container> + ); +} + +export async function _boot(EntryPointNamespace, isError) { + NextRouteLoader.default.getClientBuildManifest = () => Promise.resolve({}); + + const PageComponent = EntryPointNamespace.default; + + const appScripts = globalThis.__NEXT_DATA__.pages["/_app"]; + if (appScripts && appScripts.length > 0) { + let appSrc; + for (let asset of appScripts) { + if (!asset.endsWith(".css")) { + appSrc = asset; + break; + } + } + + if (appSrc) { + const AppModule = await import(appSrc); + console.assert( + AppModule.default, + appSrc + " must have a default export'd React component" + ); + + CachedApp = AppModule.default; + } else { + CachedApp = App; + } + } + + router = createRouter(page, query, asPath, { + initialProps: hydrateProps, + pageLoader, + App: CachedApp, + Component: CachedComponent, + wrapApp, + err: null, + isFallback: Boolean(isFallback), + subscription: async (info, App, scroll) => { + return render( + Object.assign< + {}, + Omit<RenderRouteInfo, "App" | "scroll">, + Pick<RenderRouteInfo, "App" | "scroll"> + >({}, info, { + App, + scroll, + }) + ); + }, + locale, + locales, + defaultLocale: "", + domainLocales, + isPreview, + }); + + globalThis.next.router = router; + + if (isError) { + ReactDOM.render( + <TopLevelRender + App={CachedApp} + Component={PageComponent} + props={{ pageProps: hydrateProps }} + />, + document.querySelector("#__next") + ); + } else { + ReactDOM.hydrate( + <TopLevelRender + App={CachedApp} + Component={PageComponent} + props={{ pageProps: hydrateProps }} + />, + document.querySelector("#__next") + ); + } +} + +function TopLevelRender({ App, Component, props, scroll }) { + return ( + <AppContainer scroll={scroll}> + <App Component={Component} {...props}></App> + </AppContainer> + ); +} + +export function render(props) { + ReactDOM.render( + <TopLevelRender {...props} />, + document.querySelector("#__next") + ); +} + +export function renderError(e) { + ReactDOM.render( + <AppContainer> + <App Component={<div>UH OH!!!!</div>} pageProps={data.props}></App> + </AppContainer>, + document.querySelector("#__next") + ); +} + +globalThis.next = { + version: "11.1.0", + emitter, + render, + renderError, +}; diff --git a/examples/hello-next/bun-framework-next/fallback.development.tsx b/examples/hello-next/bun-framework-next/fallback.development.tsx new file mode 100644 index 000000000..1cd5f847e --- /dev/null +++ b/examples/hello-next/bun-framework-next/fallback.development.tsx @@ -0,0 +1,82 @@ +import { insertStyleSheet } from "./page-loader"; +import type { + FallbackMessageContainer, + FallbackStep, +} from "../../../src/api/schema"; + +var once = false; +function insertGlobalStyleSheet(detail) { + if (!once) { + document.head.insertAdjacentHTML( + "beforeend", + `<meta name="next-head-count" content="${document.head.childElementCount}">` + ); + once = true; + } + pageLoader.cssQueue.push(insertStyleSheet(detail).then(() => {})); +} + +[...globalThis["__BUN"].allImportedStyles].map((detail) => + insertGlobalStyleSheet(detail) +); + +document.addEventListener("onimportcss", insertGlobalStyleSheet, { + passive: true, +}); + +import { renderError, _boot, pageLoader } from "./client.development"; +import { renderFallbackError } from "bun-error"; + +function renderFallback({ + router, + reason, + problems, +}: FallbackMessageContainer) { + const route = router.routes[router.route]; + + if (!document.getElementById("__next")) { + const next = document.createElement("div"); + next.id = "__next"; + document.body.prepend(next); + } + + document.removeEventListener("onimportcss", insertGlobalStyleSheet); + document.addEventListener("onimportcss", pageLoader.onImportCSS, { + passive: true, + }); + + globalThis.__NEXT_DATA__.pages["/_app"] = [ + ...globalThis.__NEXT_DATA__.pages["/_app"], + ...globalThis["__BUN"].allImportedStyles, + ]; + + return import(route) + .then((Namespace) => { + return _boot(Namespace, true); + }) + .then(() => { + const cssQueue = pageLoader.cssQueue.slice(); + pageLoader.cssQueue = []; + return Promise.all([...cssQueue]); + }) + .finally(() => { + document.body.style.visibility = "visible"; + document.removeEventListener("onimportcss", pageLoader.onImportCSS); + }); +} + +export default function render(props: FallbackMessageContainer) { + renderFallback(props).then( + () => { + Promise.all(pageLoader.cssQueue).finally(() => { + renderFallbackError(props); + document.body.style.visibility = "visible"; + }); + }, + (err) => { + Promise.all(pageLoader.cssQueue).finally(() => { + renderFallbackError(props); + }); + } + ); +} diff --git a/examples/hello-next/bun-framework-next/index.js b/examples/hello-next/bun-framework-next/index.js new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/examples/hello-next/bun-framework-next/index.js diff --git a/examples/hello-next/bun-framework-next/next-server.tsx b/examples/hello-next/bun-framework-next/next-server.tsx new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/examples/hello-next/bun-framework-next/next-server.tsx diff --git a/examples/hello-next/bun-framework-next/package.json b/examples/hello-next/bun-framework-next/package.json new file mode 100644 index 000000000..af6286343 --- /dev/null +++ b/examples/hello-next/bun-framework-next/package.json @@ -0,0 +1,81 @@ +{ + "name": "bun-framework-next", + "version": "0.0.0-18", + "description": "", + "framework": { + "displayName": "Next.js", + "static": "public", + "assetPrefix": "_next/", + "router": { + "dir": [ + "pages", + "src/pages" + ], + "extensions": [ + ".js", + ".ts", + ".tsx", + ".jsx" + ] + }, + "css": "onimportcss", + "development": { + "client": "client.development.tsx", + "fallback": "fallback.development.tsx", + "server": "server.development.tsx", + "css": "onimportcss", + "define": { + "client": { + ".env": "NEXT_PUBLIC_", + "defaults": { + "process.env.__NEXT_TRAILING_SLASH": "false", + "process.env.NODE_ENV": "\"development\"", + "process.env.__NEXT_ROUTER_BASEPATH": "''", + "process.env.__NEXT_SCROLL_RESTORATION": "false", + "process.env.__NEXT_I18N_SUPPORT": "false", + "process.env.__NEXT_HAS_REWRITES": "false", + "process.env.__NEXT_ANALYTICS_ID": "null", + "process.env.__NEXT_OPTIMIZE_CSS": "false", + "process.env.__NEXT_CROSS_ORIGIN": "''", + "process.env.__NEXT_STRICT_MODE": "false", + "process.env.__NEXT_IMAGE_OPTS": "null" + } + }, + "server": { + ".env": "NEXT_", + "defaults": { + "process.env.__NEXT_TRAILING_SLASH": "false", + "process.env.__NEXT_OPTIMIZE_FONTS": "false", + "process.env.NODE_ENV": "\"development\"", + "process.env.__NEXT_OPTIMIZE_IMAGES": "false", + "process.env.__NEXT_OPTIMIZE_CSS": "false", + "process.env.__NEXT_ROUTER_BASEPATH": "''", + "process.env.__NEXT_SCROLL_RESTORATION": "false", + "process.env.__NEXT_I18N_SUPPORT": "false", + "process.env.__NEXT_HAS_REWRITES": "false", + "process.env.__NEXT_ANALYTICS_ID": "null", + "process.env.__NEXT_CROSS_ORIGIN": "''", + "process.env.__NEXT_STRICT_MODE": "false", + "process.env.__NEXT_IMAGE_OPTS": "null", + "global": "globalThis", + "window": "undefined" + } + } + } + }, + "production": { + "client": "client.production.tsx", + "server": "server.production.tsx", + "fallback": "fallback.production.tsx", + "css": "onimportcss" + } + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "react-is": "^17.0.2" + } +} diff --git a/examples/hello-next/bun-framework-next/page-loader.ts b/examples/hello-next/bun-framework-next/page-loader.ts new file mode 100644 index 000000000..fc07578db --- /dev/null +++ b/examples/hello-next/bun-framework-next/page-loader.ts @@ -0,0 +1,147 @@ +import NextPageLoader from "next/dist/client/page-loader"; +import getAssetPathFromRoute from "next/dist/shared/lib/router/utils/get-asset-path-from-route"; +// import createRouteLoader from "./route-loader"; + +export function insertStyleSheet(url: string) { + if (document.querySelector(`link[href="${url}"]`)) { + return Promise.resolve(); + } + + return new Promise((resolve, reject) => { + const link = document.createElement("link"); + link.rel = "stylesheet"; + + link.onload = () => resolve(); + link.onerror = () => reject(); + + link.href = url; + + // if (headCount) { + // document.head.insertBefore(headCount, link); + // } else { + document.head.appendChild(link); + // } + }); +} + +export default class PageLoader extends NextPageLoader { + public routeLoader: RouteLoader; + + constructor(_, __, pages) { + super(_, __); + + // TODO: assetPrefix? + // this.routeLoader = {}; //createRouteLoader(""); + + // Rewrite the pages object to omit the entry script + // At this point, the entry point has been loaded so we don't want to do that again. + for (let name in pages) { + for (let i = 0; i < pages[name].length; i += 1) { + const lastDot = pages[name][i].lastIndexOf("."); + if (lastDot == -1) continue; + if ( + pages[name][i].substring(lastDot - ".entry".length, lastDot) !== + ".entry" + ) + continue; + + pages[name][i] = + pages[name][i].substring(0, lastDot - ".entry".length) + + pages[name][i].substring(lastDot); + } + } + + this.pages = pages; + this.pageList = Object.keys(this.pages); + } + + pageList: string[]; + pages: Record<string, string[]>; + + getPageList() { + return this.pageList; + } + + cssQueue = []; + + onImportCSS = (event) => { + this.cssQueue.push( + insertStyleSheet(event.detail).then( + () => {}, + () => {} + ) + ); + }; + + prefetch(route) { + return Promise.resolve({}); + } + + async loadPage(route: string): Promise<GoodPageCache> { + const assets = + this.pages[route] || this.pages[getAssetPathFromRoute(route)]; + + var src; + console.log(getAssetPathFromRoute(route), assets); + for (let asset of assets) { + if (!asset.endsWith(".css")) { + src = asset; + break; + } + } + console.assert(src, "Invalid or unknown route passed to loadPage"); + + document.removeEventListener("onimportcss", this.onImportCSS); + this.cssQueue.length = 0; + document.addEventListener("onimportcss", this.onImportCSS, { + passive: true, + }); + + try { + const res = await import(src); + + if (this.cssQueue.length > 0) { + await Promise.all(this.cssQueue); + this.cssQueue.length = 0; + } + + document.removeEventListener("onimportcss", this.onImportCSS); + + if (this.cssQueue.length > 0) { + await Promise.all(this.cssQueue); + + this.cssQueue.length = 0; + } + + return { + page: res.default, + mod: res, + styleSheets: [], + __N_SSG: false, + __N_SSP: false, + }; + } catch (exception) { + console.error({ exception }); + } + + // return this.routeLoader.loadRoute(route).then((res) => { + // debugger; + // if ("component" in res) { + // return { + // page: res.component, + // mod: res.exports, + // styleSheets: res.styles.map((o) => ({ + // href: o.href, + // text: o.content, + // })), + // }; + // } + // throw res.error; + // }); + } + + // not used in development! + // prefetch(route: string): Promise<void> { + // return this.routeLoader.prefetch(route); + // } +} diff --git a/examples/hello-next/bun-framework-next/render.tsx b/examples/hello-next/bun-framework-next/render.tsx new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/examples/hello-next/bun-framework-next/render.tsx diff --git a/examples/hello-next/bun-framework-next/renderDocument.tsx b/examples/hello-next/bun-framework-next/renderDocument.tsx new file mode 100644 index 000000000..356ff788b --- /dev/null +++ b/examples/hello-next/bun-framework-next/renderDocument.tsx @@ -0,0 +1,722 @@ +import * as App from "next/app"; +import { AmpStateContext } from "next/dist/shared/lib/amp-context"; +import { HeadManagerContext } from "next/dist/shared/lib/head-manager-context"; +import Loadable from "next/dist/shared/lib/loadable"; +import { LoadableContext } from "next/dist/shared/lib/loadable-context"; +import { RouterContext } from "next/dist/shared/lib/router-context"; +import { NextRouter } from "next/dist/shared/lib/router/router"; +import { + AppType, + ComponentsEnhancer, + DocumentInitialProps, + DocumentProps, + DocumentType, + getDisplayName, + loadGetInitialProps, + NextComponentType, + RenderPage, + RenderPageResult, + HtmlContext, +} from "next/dist/shared/lib/utils"; +import * as NextDocument from "next/document"; +import * as ReactDOMServer from "react-dom/server.browser"; +import * as url from "url"; +import * as React from "react"; +import * as ReactIs from "react-is"; +import { BODY_RENDER_TARGET } from "next/constants"; + +const dev = process.env.NODE_ENV === "development"; + +type ParsedUrlQuery = Record<string, string | string[]>; + +const isJSFile = (file: string) => + file.endsWith(".js") || + file.endsWith(".jsx") || + file.endsWith(".mjs") || + file.endsWith(".ts") || + file.endsWith(".tsx"); + +const notImplementedProxy = (base) => + new Proxy( + {}, + { + deleteProperty: function (target, prop) { + return undefined; + }, + enumerate: function (oTarget, sKey) { + return [].entries(); + }, + ownKeys: function (oTarget, sKey) { + return [].values(); + }, + has: function (oTarget, sKey) { + return false; + }, + defineProperty: function (oTarget, sKey, oDesc) { + return undefined; + }, + getOwnPropertyDescriptor: function (oTarget, sKey) { + return undefined; + }, + get(this, prop) { + throw new ReferenceError( + `${base} is not available for this environment.` + ); + }, + set(this, prop, value) { + throw new ReferenceError( + `${base} is not available for this environment.` + ); + }, + } + ); + +globalThis.fetch = (url, options) => { + return Promise.reject(new Error(`fetch is not implemented yet. sorry!!`)); +}; + +function getScripts(files: DocumentFiles) { + const { context, props } = this; + const { + assetPrefix, + buildManifest, + isDevelopment, + devOnlyCacheBusterQueryString, + disableOptimizedLoading, + } = context; + const normalScripts = files.allFiles.filter(isJSFile); + const lowPriorityScripts = buildManifest.lowPriorityFiles?.filter(isJSFile); + + return [...normalScripts, ...lowPriorityScripts].map((file) => { + return ( + <script + key={file} + src={`${encodeURI(file)}${devOnlyCacheBusterQueryString}`} + nonce={props.nonce} + async + crossOrigin={props.crossOrigin || process.env.__NEXT_CROSS_ORIGIN} + type="module" + /> + ); + }); +} + +// function fixLink(from: string) { +// if (from.startsWith("/_next/http://") || from.startsWith("/_next/https://")) +// return from.substring("/_next".length); +// return from; +// } + +// function cloneWithOverwrittenLink(element: React.ReactElement<any>) { +// const props = { ...element.props }; +// if ("href" in element.props) { +// props.href = fixLink(props.href); +// } + +// if ("n-href" in element.props) { +// props["n-href"] = fixLink(props["n-href"]); +// } + +// if ("n-src" in element.props) { +// props["n-src"] = fixLink(props["n-src"]); +// } + +// if ("src" in element.props) { +// props["src"] = fixLink(props.src); +// } + +// return React.cloneElement(element, props); +// } + +interface DomainLocale { + defaultLocale: string; + domain: string; + http?: true; + locales?: string[]; +} + +function renderDocument( + Document: DocumentType, + { + buildManifest, + docComponentsRendered, + props, + docProps, + pathname, + query, + buildId, + canonicalBase, + assetPrefix, + runtimeConfig, + nextExport, + autoExport, + isFallback, + dynamicImportsIds, + dangerousAsPath, + err, + dev, + ampPath, + ampState, + inAmpMode, + hybridAmp, + dynamicImports, + headTags, + gsp, + gssp, + customServer, + gip, + appGip, + unstable_runtimeJS, + unstable_JsPreload, + devOnlyCacheBusterQueryString, + scriptLoader, + locale, + locales, + defaultLocale, + domainLocales, + isPreview, + disableOptimizedLoading, + }: RenderOpts & { + props: any; + docComponentsRendered: DocumentProps["docComponentsRendered"]; + docProps: DocumentInitialProps; + pathname: string; + query: ParsedUrlQuery; + dangerousAsPath: string; + ampState: any; + ampPath: string; + inAmpMode: boolean; + hybridAmp: boolean; + dynamicImportsIds: (string | number)[]; + dynamicImports: string[]; + headTags: any; + isFallback?: boolean; + gsp?: boolean; + gssp?: boolean; + customServer?: boolean; + gip?: boolean; + appGip?: boolean; + devOnlyCacheBusterQueryString: string; + scriptLoader: any; + isPreview?: boolean; + autoExport?: boolean; + } +): string { + const htmlProps = { + __NEXT_DATA__: { + props, // The result of getInitialProps + page: pathname, // The rendered page + query, // querystring parsed / passed by the user + buildId, // buildId is used to facilitate caching of page bundles, we send it to the client so that pageloader knows where to load bundles + assetPrefix: assetPrefix === "" ? undefined : assetPrefix, // send assetPrefix to the client side when configured, otherwise don't sent in the resulting HTML + runtimeConfig, // runtimeConfig if provided, otherwise don't sent in the resulting HTML + nextExport, // If this is a page exported by `next export` + autoExport, // If this is an auto exported page + isFallback, + dynamicIds: + dynamicImportsIds.length === 0 ? undefined : dynamicImportsIds, + err: err || undefined, // err: err ? serializeError(dev, err) : undefined, // Error if one happened, otherwise don't sent in the resulting HTML + gsp, // whether the page is getStaticProps + gssp, // whether the page is getServerSideProps + customServer, // whether the user is using a custom server + gip, // whether the page has getInitialProps + appGip, // whether the _app has getInitialProps + locale, + locales, + defaultLocale, + domainLocales, + isPreview, + + pages: buildManifest.pages, + }, + buildManifest, + docComponentsRendered, + dangerousAsPath, + canonicalBase, + ampPath, + inAmpMode, + isDevelopment: !!dev, + hybridAmp, + dynamicImports, + assetPrefix, + headTags, + unstable_runtimeJS, + unstable_JsPreload, + devOnlyCacheBusterQueryString, + scriptLoader, + locale, + disableOptimizedLoading, + ...docProps, + }; + return ( + "<!DOCTYPE html>" + + ReactDOMServer.renderToStaticMarkup( + <AmpStateContext.Provider value={ampState}> + <HtmlContext.Provider value={htmlProps}> + <Document {...htmlProps} {...docProps}></Document> + </HtmlContext.Provider> + </AmpStateContext.Provider> + ) + ); +} + +class ServerRouter implements NextRouter { + route: string; + pathname: string; + query: ParsedUrlQuery; + asPath: string; + basePath: string; + events: any; + isFallback: boolean; + locale?: string; + isReady: boolean; + locales?: string[]; + defaultLocale?: string; + domainLocales?: DomainLocale[]; + isPreview: boolean; + isLocaleDomain: boolean; + + constructor( + pathname: string, + query: ParsedUrlQuery, + as: string, + { isFallback }: { isFallback: boolean }, + isReady: boolean, + basePath: string, + locale?: string, + locales?: string[], + defaultLocale?: string, + domainLocales?: DomainLocale[], + isPreview?: boolean, + isLocaleDomain?: boolean + ) { + this.route = pathname.replace(/\/$/, "") || "/"; + this.pathname = pathname; + this.query = query; + this.asPath = as; + this.isFallback = isFallback; + this.basePath = basePath; + this.locale = locale; + this.locales = locales; + this.defaultLocale = defaultLocale; + this.isReady = isReady; + this.domainLocales = domainLocales; + this.isPreview = !!isPreview; + this.isLocaleDomain = !!isLocaleDomain; + } + + push(): any { + noRouter(); + } + replace(): any { + noRouter(); + } + reload() { + noRouter(); + } + back() { + noRouter(); + } + prefetch(): any { + noRouter(); + } + beforePopState() { + noRouter(); + } +} + +function noRouter() { + const message = + 'No router instance found. you should only use "next/router" inside the client side of your app. https://nextjs.org/docs/messages/no-router-instance'; + throw new Error(message); +} + +function enhanceComponents( + options: ComponentsEnhancer, + App: AppType, + Component: NextComponentType +): { + App: AppType; + Component: NextComponentType; +} { + // For backwards compatibility + if (typeof options === "function") { + return { + App, + Component: options(Component), + }; + } + + return { + App: options.enhanceApp ? options.enhanceApp(App) : App, + Component: options.enhanceComponent + ? options.enhanceComponent(Component) + : Component, + }; +} + +Object.defineProperty(NextDocument.Head.prototype, "getScripts", { + get() { + return getScripts; + }, +}); +Object.defineProperty(NextDocument.NextScript.prototype, "getScripts", { + get() { + return getScripts; + }, +}); + +export async function render({ + route, + PageNamespace, + AppNamespace, + appStylesheets = [], + pageStylesheets = [], + DocumentNamespace = null, + buildId, + routePaths = [], +}: { + buildId: number; + route: any; + PageNamespace: { default: NextComponentType<any> }; + AppNamespace: { default: NextComponentType<any> } | null; + DocumentNamespace: Object | null; + appStylesheets: string[]; + pageStylesheets: string[]; + routePaths: string[]; +}): Promise<Response> { + const { default: Component, getStaticProps = null } = PageNamespace || {}; + const { default: AppComponent_ } = AppNamespace || {}; + var query = Object.assign({}, route.query); + + // These are reversed in our Router versus Next.js...mostly due to personal preference. + const pathname = "/" + route.name; + var asPath = route.pathname; + const pages = {}; + + for (let path of routePaths) { + const filePath = path.substring( + path.indexOf("_next/pages/") + "_next/pages".length + ); + const name = filePath.substring(0, filePath.indexOf(".")); + pages[name] = [path]; + } + + pages[pathname] = [route.scriptSrc, ...pageStylesheets]; + + if (appStylesheets.length > 0) { + if (pages["/_app"]) { + pages["/_app"].push(...appStylesheets); + } else { + pages["/_app"] = appStylesheets; + } + } + + const AppComponent = AppComponent_ || App.default; + const Document = + (DocumentNamespace && DocumentNamespace.default) || NextDocument.default; + // Document.Html.prototype.getScripts = getScripts; + // } + + const callMiddleware = async (method: string, args: any[], props = false) => { + let results: any = props ? {} : []; + + if ((Document as any)[`${method}Middleware`]) { + let middlewareFunc = await (Document as any)[`${method}Middleware`]; + middlewareFunc = middlewareFunc.default || middlewareFunc; + + const curResults = await middlewareFunc(...args); + if (props) { + for (const result of curResults) { + results = { + ...results, + ...result, + }; + } + } else { + results = curResults; + } + } + return results; + }; + + const headTags = (...args: any) => callMiddleware("headTags", args); + + if (!ReactIs.isValidElementType(Component)) { + const exportNames = Object.keys(PageNamespace || {}); + + const reactComponents = exportNames.filter(ReactIs.isValidElementType); + if (reactComponents.length > 2) { + throw new Error( + `\"export default\" missing in ${ + route.filePath + }.\nTry exporting one of ${reactComponents.join(", ")}\n` + ); + } else if (reactComponents.length === 2) { + throw new Error( + `\"export default\" missing in ${route.filePath}.\n\nTry exporting <${reactComponents[0]} /> or <${reactComponents[1]} />\n` + ); + } else if (reactComponents.length == 1) { + throw new Error( + `\"export default\" missing in ${route.filePath}. Try adding this to the bottom of the file:\n\n export default ${reactComponents[0]};\n` + ); + } else if (reactComponents.length == 0) { + throw new Error( + `\"export default\" missing in ${route.filePath}. Try exporting a React component.\n` + ); + } + } + + const isFallback = !!query.__nextFallback; + delete query.__nextFallback; + delete query.__nextLocale; + delete query.__nextDefaultLocale; + + const isSSG = !!getStaticProps; + const isBuildTimeSSG = isSSG && false; + const defaultAppGetInitialProps = + App.getInitialProps === (App as any).origGetInitialProps; + + const hasPageGetInitialProps = !!(Component as any).getInitialProps; + const pageIsDynamic = route.kind === "dynamic"; + const isAutoExport = false; + + if (isAutoExport || isFallback) { + // // remove query values except ones that will be set during export + // query = { + // ...(query.amp + // ? { + // amp: query.amp, + // } + // : {}), + // }; + asPath = `${asPath}${ + // ensure trailing slash is present for non-dynamic auto-export pages + asPath.endsWith("/") && asPath !== "/" && !pageIsDynamic ? "/" : "" + }`; + } + + let head: JSX.Element[] = [ + <meta charSet="utf-8" />, + <meta name="viewport" content="width=device-width" />, + ]; + + const nextExport = isAutoExport || isFallback; + const reactLoadableModules: string[] = []; + var scriptLoader = {}; + const AppContainer = ({ children }: any) => ( + <RouterContext.Provider value={router}> + {/* <AmpStateContext.Provider value={ampState}> */} + <HeadManagerContext.Provider + value={{ + updateHead: (state) => { + head = state; + }, + updateScripts: (scripts) => { + scriptLoader = scripts; + }, + scripts: {}, + mountedInstances: new Set(), + }} + > + <LoadableContext.Provider + value={(moduleName) => reactLoadableModules.push(moduleName)} + > + {children} + </LoadableContext.Provider> + </HeadManagerContext.Provider> + {/* </AmpStateContext.Provider> */} + </RouterContext.Provider> + ); + + await Loadable.preloadAll(); // Make sure all dynamic imports are loaded + + const router = new ServerRouter( + pathname, + query, + asPath, + { + isFallback: isFallback, + }, + true, + Bun.origin, + null, + [], // renderOpts.locales, + null, //renderOpts.defaultLocale, + [], // renderOpts.domainLocales, + false, + false + ); + + const ctx = { + err: null, + req: undefined, + res: undefined, + pathname, + query, + asPath, + locale: null, + locales: [], + defaultLocale: null, + AppTree: (props: any) => { + return ( + <AppContainer> + <App {...props} Component={Component} router={router} /> + </AppContainer> + ); + }, + }; + + var props = await loadGetInitialProps(AppComponent, { + AppTree: ctx.AppTree, + Component, + router, + ctx, + }); + + // This isn't correct. + // We don't call getServerSideProps on clients. + const getServerSideProps = PageNamespace.getServerSideProps; + if (typeof getServerSideProps === "function") { + const result = await getServerSideProps({ + params: route.params, + query: route.query, + req: notImplementedProxy("req"), + res: notImplementedProxy("res"), + resolvedUrl: route.pathname, + preview: false, + previewData: null, + locale: null, + locales: [], + defaultLocale: null, + }); + + if (result) { + if ("props" in result) { + if (typeof result.props === "object") { + Object.assign(props, result.props); + } + } + } + } + + const renderToString = ReactDOMServer.renderToString; + const ErrorDebug = null; + + const renderPage: RenderPage = ( + options: ComponentsEnhancer = {} + ): RenderPageResult | Promise<RenderPageResult> => { + if (ctx.err && ErrorDebug) { + const htmlOrPromise = renderToString(<ErrorDebug error={ctx.err} />); + return typeof htmlOrPromise === "string" + ? { html: htmlOrPromise, head } + : htmlOrPromise.then((html) => ({ + html, + head, + })); + } + + if (dev && (props.router || props.Component)) { + throw new Error( + `'router' and 'Component' can not be returned in getInitialProps from _app.js https://nextjs.org/docs/messages/cant-override-next-props` + ); + } + + const { App: EnhancedApp, Component: EnhancedComponent } = + enhanceComponents(options, AppComponent, Component); + + const htmlOrPromise = renderToString( + <AppContainer> + <EnhancedApp Component={EnhancedComponent} router={router} {...props} /> + </AppContainer> + ); + return typeof htmlOrPromise === "string" + ? { html: htmlOrPromise, head } + : htmlOrPromise.then((html) => ({ + html, + head, + })); + }; + + const documentCtx = { ...ctx, renderPage }; + const docProps: DocumentInitialProps = await loadGetInitialProps( + Document, + documentCtx + ); + + if (!docProps || typeof docProps.html !== "string") { + const message = `"${getDisplayName( + Document + )}.getInitialProps()" should resolve to an object with a "html" prop set with a valid html string`; + throw new Error(message); + } + + const renderOpts = { + params: route.params, + }; + // renderOpts.params = _params || params; + + // parsedUrl.pathname = denormalizePagePath(parsedUrl.pathname!); + // renderOpts.resolvedUrl = formatUrl({ + // ...parsedUrl, + // query: origQuery, + // }); + const docComponentsRendered: DocumentProps["docComponentsRendered"] = {}; + + const isPreview = false; + + let html = renderDocument(Document, { + docComponentsRendered, + ...renderOpts, + disableOptimizedLoading: false, + canonicalBase: Bun.origin, + buildManifest: { + devFiles: [], + allFiles: [], + polyfillFiles: [], + lowPriorityFiles: [], + pages: pages, + }, + // Only enabled in production as development mode has features relying on HMR (style injection for example) + unstable_runtimeJS: true, + // process.env.NODE_ENV === "production" + // ? pageConfig.unstable_runtimeJS + // : undefined, + // unstable_JsPreload: pageConfig.unstable_JsPreload, + unstable_JsPreload: true, + dangerousAsPath: router.asPath, + ampState: undefined, + props, + assetPrefix: "", + headTags: await headTags(documentCtx), + isFallback, + docProps, + pathname, + ampPath: undefined, + query, + inAmpMode: false, + hybridAmp: undefined, + dynamicImportsIds: [], // Array.from(dynamicImportsIds), + dynamicImports: [], //Array.from(dynamicImports), + gsp: !!getStaticProps ? true : undefined, + gssp: !!getServerSideProps ? true : undefined, + gip: hasPageGetInitialProps ? true : undefined, + appGip: !defaultAppGetInitialProps ? true : undefined, + devOnlyCacheBusterQueryString: "", + scriptLoader, + isPreview: isPreview === true ? true : undefined, + autoExport: isAutoExport === true ? true : undefined, + nextExport: nextExport === true ? true : undefined, + }); + const bodyRenderIdx = html.indexOf(BODY_RENDER_TARGET); + html = + html.substring(0, bodyRenderIdx) + + (false ? "<!-- __NEXT_DATA__ -->" : "") + + docProps.html + + html.substring(bodyRenderIdx + BODY_RENDER_TARGET.length); + return new Response( + html + .replaceAll("/_next/http://", "http://") + .replaceAll("/_next/https://", "https://") + ); +} diff --git a/examples/hello-next/bun-framework-next/route-loader.ts b/examples/hello-next/bun-framework-next/route-loader.ts new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/examples/hello-next/bun-framework-next/route-loader.ts diff --git a/examples/hello-next/bun-framework-next/server.development.tsx b/examples/hello-next/bun-framework-next/server.development.tsx new file mode 100644 index 000000000..e3cd24e01 --- /dev/null +++ b/examples/hello-next/bun-framework-next/server.development.tsx @@ -0,0 +1,79 @@ +import * as React from "react"; +import { Buffer } from "buffer"; +globalThis.Buffer = Buffer; + +class URL { + constructor(base, source) { + this.pathname = source; + this.href = base + source; + } +} +var onlyChildPolyfill = React.Children.only; +React.Children.only = function (children) { + if (children && typeof children === "object" && children.length == 1) { + return onlyChildPolyfill(children[0]); + } + + return onlyChildPolyfill(children); +}; +globalThis.URL = URL; +globalThis.global = globalThis; +import { render } from "./renderDocument"; + +let buildId = 0; + +var DocumentLoaded = false; +var DocumentNamespace; + +import(Bun.routesDir + "_document").then( + (doc) => { + DocumentNamespace = doc; + DocumentLoaded = true; + }, + (err) => { + if (err instanceof ResolveError) { + DocumentLoaded = true; + } else { + console.error(err); + } + } +); + +addEventListener("fetch", async (event: FetchEvent) => { + var route = Bun.match(event); + + // This imports the currently matched route. + const PageNamespace = await import(route.filePath); + + // This returns all .css files that were imported in the line above. + // It's recursive, so any file that imports a CSS file will be included. + const pageStylesheets = (Bun.getImportedStyles() as string[]).slice(); + + var appRoute; + + try { + appRoute = await import(Bun.routesDir + "_app"); + } catch (exception) { + appRoute = null; + } + const appStylesheets = (Bun.getImportedStyles() as string[]).slice(); + + event.respondWith( + render({ + route, + PageNamespace, + appStylesheets, + pageStylesheets, + DocumentNamespace, + AppNamespace: appRoute, + buildId, + routePaths: Bun.getRouteFiles(), + }) + ); + buildId++; +}); + +// typescript isolated modules +export {}; + +declare var Bun: any; diff --git a/examples/hello-next/bun-framework-next/server.production.tsx b/examples/hello-next/bun-framework-next/server.production.tsx new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/examples/hello-next/bun-framework-next/server.production.tsx diff --git a/examples/hello-next/bun-framework-next/tsconfig.json b/examples/hello-next/bun-framework-next/tsconfig.json new file mode 100644 index 000000000..d14767c9f --- /dev/null +++ b/examples/hello-next/bun-framework-next/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "target": "esnext", + "lib": ["dom", "dom.iterable", "esnext", "WebWorker"], + "allowJs": true, + "skipLibCheck": true, + "strict": false, + "forceConsistentCasingInFileNames": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "Node", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "baseUrl": ".", + "paths": {} + }, + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], + "exclude": ["node_modules"] +} diff --git a/examples/hello-next/package.json b/examples/hello-next/package.json index 77ce7b80e..aacc87742 100644 --- a/examples/hello-next/package.json +++ b/examples/hello-next/package.json @@ -6,9 +6,10 @@ "dependencies": { "next": "^11.1.0", "parcel": "2.0.0-rc.0", - "path": "^0.12.7", + "path-browserify": "^1.0.1", "react": "^17.0.2", "react-dom": "^17.0.2", + "react-is": "^17.0.2", "whatwg-url": "^9.1.0" }, "devDependencies": { diff --git a/examples/hello-next/pages/errortest.tsx b/examples/hello-next/pages/errortest.tsx new file mode 100644 index 000000000..49a293df7 --- /dev/null +++ b/examples/hello-next/pages/errortest.tsx @@ -0,0 +1,14 @@ +import IndexPage from "pages/index"; + +export default function ErrorTestPage() { + class Wow {} + + const ladee = "", + foo = { bar: { boom: new Wow() } }; + + if (typeof window === "undefined") { + const Doge = import("wow/such-esm/very-import"); + } + + return <IndexPage />; +} diff --git a/examples/hello-next/pages/index.tsx b/examples/hello-next/pages/index.tsx index dab661672..7a2eb9f64 100644 --- a/examples/hello-next/pages/index.tsx +++ b/examples/hello-next/pages/index.tsx @@ -3,10 +3,10 @@ import Image from "next/image"; import styles from "../styles/Home.module.css"; import Link from "next/link"; import { useRouter } from "next/router"; -import Title from "../components/Title"; +import Title, { TitleEnum } from "../components/Title"; import React from "react"; -export default function Home() { +export default function Home({}) { const router = useRouter(); return ( @@ -17,11 +17,9 @@ export default function Home() { <link rel="icon" href="/favicon.ico" /> </Head> - <Title /> - <main className={styles.main}> <h1 className={styles.title}> - asdasdasd to <a href="https://nextjs.org">Next.js!</a> + Welcome to <a href="https://nextjs.org">Next.js!</a> </h1> <p className={styles.description}> @@ -37,14 +35,13 @@ export default function Home() { </div> </Link> - <button + <a onClick={() => router.push("/foo/bar/third")} className={styles.card} - style={{ backgroundColor: "white" }} > <h2>Third Page →</h2> <p>button, router.push()</p> - </button> + </a> <a href="https://github.com/vercel/next.js/tree/master/examples" diff --git a/examples/hello-next/styles/2.css b/examples/hello-next/styles/2.css index 1e30d2166..e69de29bb 100644 --- a/examples/hello-next/styles/2.css +++ b/examples/hello-next/styles/2.css @@ -1,3 +0,0 @@ -* { - background-color: red; -} diff --git a/examples/hello-next/styles/globals.css b/examples/hello-next/styles/globals.css index e5e2dcc23..1abf383f1 100644 --- a/examples/hello-next/styles/globals.css +++ b/examples/hello-next/styles/globals.css @@ -14,3 +14,8 @@ a { * { box-sizing: border-box; } + +body { + background-image: url(https://wompampsupport.azureedge.net/fetchimage?siteId=7575&v=2&jpgQuality=100&width=700&url=https%3A%2F%2Fi.kym-cdn.com%2Fentries%2Ficons%2Foriginal%2F000%2F013%2F564%2Fdoge.jpg); + background-size: cover; +} diff --git a/examples/hello-next/tsconfig.json b/examples/hello-next/tsconfig.json index b423bb201..7af6240a5 100644 --- a/examples/hello-next/tsconfig.json +++ b/examples/hello-next/tsconfig.json @@ -1,7 +1,7 @@ { "compilerOptions": { - "target": "esnext", - "lib": ["dom", "dom.iterable", "esnext", "WebWorker"], + "target": "es5", + "lib": ["dom", "dom.iterable", "esnext"], "allowJs": true, "skipLibCheck": true, "strict": false, @@ -9,15 +9,13 @@ "noEmit": true, "esModuleInterop": true, "module": "esnext", - "moduleResolution": "Node", + "moduleResolution": "node", "resolveJsonModule": true, "isolatedModules": true, "jsx": "preserve", "baseUrl": ".", - "paths": { - "path": ["node_modules/path-browserify"] - } + "paths": {} }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "pages/index.tsx"], + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], "exclude": ["node_modules"] } diff --git a/examples/lotta-modules/index.js b/examples/lotta-modules/index.js index 4968cac4b..e86d5e2d8 100644 --- a/examples/lotta-modules/index.js +++ b/examples/lotta-modules/index.js @@ -1,641 +1,11 @@ -import "lodash/_DataView.js"; -import "lodash/_Hash.js"; -import "lodash/_LazyWrapper.js"; -import "lodash/_ListCache"; -import "lodash/_LodashWrapper.js"; -import "lodash/_Map.js"; -import "lodash/_MapCache.js"; -import "lodash/_Promise.js"; -import "lodash/_Set.js"; -import "lodash/_SetCache.js"; -import "lodash/_Stack.js"; -import "lodash/_Symbol.js"; -import "lodash/_Uint8Array.js"; -import "lodash/_WeakMap.js"; -import "lodash/_apply.js"; -import "lodash/_arrayAggregator.js"; -import "lodash/_arrayEach.js"; -import "lodash/_arrayEachRight.js"; -import "lodash/_arrayEvery.js"; -import "lodash/_arrayFilter.js"; -import "lodash/_arrayIncludes.js"; -import "lodash/_arrayIncludesWith.js"; -import "lodash/_arrayLikeKeys.js"; -import "lodash/_arrayMap.js"; -import "lodash/_arrayPush.js"; -import "lodash/_arrayReduce.js"; -import "lodash/_arrayReduceRight.js"; -import "lodash/_arraySample.js"; -import "lodash/_arraySampleSize.js"; -import "lodash/_arrayShuffle.js"; -import "lodash/_arraySome.js"; -import "lodash/_asciiSize.js"; -import "lodash/_asciiToArray.js"; -import "lodash/_asciiWords.js"; -import "lodash/_assignMergeValue.js"; -import "lodash/_assignValue.js"; -import "lodash/_assocIndexOf.js"; -import "lodash/_baseAggregator.js"; -import "lodash/_baseAssign.js"; -import "lodash/_baseAssignIn.js"; -import "lodash/_baseAssignValue.js"; -import "lodash/_baseAt.js"; -import "lodash/_baseClamp.js"; -import "lodash/_baseClone.js"; -import "lodash/_baseConforms.js"; -import "lodash/_baseConformsTo.js"; -import "lodash/_baseCreate.js"; -import "lodash/_baseDelay.js"; -import "lodash/_baseDifference.js"; -import "lodash/_baseEach.js"; -import "lodash/_baseEachRight.js"; -import "lodash/_baseEvery.js"; -import "lodash/_baseExtremum.js"; -import "lodash/_baseFill.js"; -import "lodash/_baseFilter.js"; -import "lodash/_baseFindIndex.js"; -import "lodash/_baseFindKey.js"; -import "lodash/_baseFlatten.js"; -import "lodash/_baseFor.js"; -import "lodash/_baseForOwn.js"; -import "lodash/_baseForOwnRight.js"; -import "lodash/_baseForRight.js"; -import "lodash/_baseFunctions.js"; -import "lodash/_baseGet.js"; -import "lodash/_baseGetAllKeys.js"; -import "lodash/_baseGetTag.js"; -import "lodash/_baseGt.js"; -import "lodash/_baseHas.js"; -import "lodash/_baseHasIn.js"; -import "lodash/_baseInRange.js"; -import "lodash/_baseIndexOf.js"; -import "lodash/_baseIndexOfWith.js"; -import "lodash/_baseIntersection.js"; -import "lodash/_baseInverter.js"; -import "lodash/_baseInvoke.js"; -import "lodash/_baseIsArguments.js"; -import "lodash/_baseIsArrayBuffer.js"; -import "lodash/_baseIsDate.js"; -import "lodash/_baseIsEqual.js"; -import "lodash/_baseIsEqualDeep.js"; -import "lodash/_baseIsMap.js"; -import "lodash/_baseIsMatch.js"; -import "lodash/_baseIsNaN.js"; -import "lodash/_baseIsNative.js"; -import "lodash/_baseIsRegExp.js"; -import "lodash/_baseIsSet.js"; -import "lodash/_baseIsTypedArray.js"; -import "lodash/_baseIteratee.js"; -import "lodash/_baseKeys.js"; -import "lodash/_baseKeysIn.js"; -import "lodash/_baseLodash.js"; -import "lodash/_baseLt.js"; -import "lodash/_baseMap.js"; -import "lodash/_baseMatches.js"; -import "lodash/_baseMatchesProperty.js"; -import "lodash/_baseMean.js"; -import "lodash/_baseMerge.js"; -import "lodash/_baseMergeDeep.js"; -import "lodash/_baseNth.js"; -import "lodash/_baseOrderBy.js"; -import "lodash/_basePick.js"; -import "lodash/_basePickBy.js"; -import "lodash/_baseProperty.js"; -import "lodash/_basePropertyDeep.js"; -import "lodash/_basePropertyOf.js"; -import "lodash/_basePullAll.js"; -import "lodash/_basePullAt.js"; -import "lodash/_baseRandom.js"; -import "lodash/_baseRange.js"; -import "lodash/_baseReduce.js"; -import "lodash/_baseRepeat.js"; -import "lodash/_baseRest.js"; -import "lodash/_baseSample.js"; -import "lodash/_baseSampleSize.js"; -import "lodash/_baseSet.js"; -import "lodash/_baseSetData.js"; -import "lodash/_baseSetToString.js"; -import "lodash/_baseShuffle.js"; -import "lodash/_baseSlice.js"; -import "lodash/_baseSome.js"; -import "lodash/_baseSortBy.js"; -import "lodash/_baseSortedIndex.js"; -import "lodash/_baseSortedIndexBy.js"; -import "lodash/_baseSortedUniq.js"; -import "lodash/_baseSum.js"; -import "lodash/_baseTimes.js"; -import "lodash/_baseToNumber.js"; -import "lodash/_baseToPairs.js"; -import "lodash/_baseToString.js"; -import "lodash/_baseTrim.js"; -import "lodash/_baseUnary.js"; -import "lodash/_baseUniq.js"; -import "lodash/_baseUnset.js"; -import "lodash/_baseUpdate.js"; -import "lodash/_baseValues.js"; -import "lodash/_baseWhile.js"; -import "lodash/_baseWrapperValue.js"; -import "lodash/_baseXor.js"; -import "lodash/_baseZipObject.js"; -import "lodash/_cacheHas.js"; -import "lodash/_castArrayLikeObject.js"; -import "lodash/_castFunction.js"; -import "lodash/_castPath.js"; -import "lodash/_castRest.js"; -import "lodash/_castSlice.js"; -import "lodash/_charsEndIndex.js"; -import "lodash/_charsStartIndex.js"; -import "lodash/_cloneArrayBuffer.js"; -import "lodash/_cloneBuffer.js"; -import "lodash/_cloneDataView.js"; -import "lodash/_cloneRegExp.js"; -import "lodash/_cloneSymbol.js"; -import "lodash/_cloneTypedArray.js"; -import "lodash/_compareAscending.js"; -import "lodash/_compareMultiple.js"; -import "lodash/_composeArgs.js"; -import "lodash/_composeArgsRight.js"; -import "lodash/_copyArray.js"; -import "lodash/_copyObject.js"; -import "lodash/_copySymbols.js"; -import "lodash/_copySymbolsIn.js"; -import "lodash/_coreJsData.js"; -import "lodash/_countHolders.js"; -import "lodash/_createAggregator.js"; -import "lodash/_createAssigner.js"; -import "lodash/_createBaseEach.js"; -import "lodash/_createBaseFor.js"; -import "lodash/_createBind.js"; -import "lodash/_createCaseFirst.js"; -import "lodash/_createCompounder.js"; -import "lodash/_createCtor.js"; -import "lodash/_createCurry.js"; -import "lodash/_createFind.js"; -import "lodash/_createFlow.js"; -import "lodash/_createHybrid.js"; -import "lodash/_createInverter.js"; -import "lodash/_createMathOperation.js"; -import "lodash/_createOver.js"; -import "lodash/_createPadding.js"; -import "lodash/_createPartial.js"; -import "lodash/_createRange.js"; -import "lodash/_createRecurry.js"; -import "lodash/_createRelationalOperation.js"; -import "lodash/_createRound.js"; -import "lodash/_createSet.js"; -import "lodash/_createToPairs.js"; -import "lodash/_createWrap.js"; -import "lodash/_customDefaultsAssignIn.js"; -import "lodash/_customDefaultsMerge.js"; -import "lodash/_customOmitClone.js"; -import "lodash/_deburrLetter.js"; -import "lodash/_defineProperty.js"; -import "lodash/_equalArrays.js"; -import "lodash/_equalByTag.js"; -import "lodash/_equalObjects.js"; -import "lodash/_escapeHtmlChar.js"; -import "lodash/_escapeStringChar.js"; -import "lodash/_flatRest.js"; -import "lodash/_freeGlobal.js"; -import "lodash/_getAllKeys.js"; -import "lodash/_getAllKeysIn.js"; -import "lodash/_getData.js"; -import "lodash/_getFuncName.js"; -import "lodash/_getHolder.js"; -import "lodash/_getMapData.js"; -import "lodash/_getMatchData.js"; -import "lodash/_getNative.js"; -import "lodash/_getPrototype.js"; -import "lodash/_getRawTag.js"; -import "lodash/_getSymbols.js"; -import "lodash/_getSymbolsIn.js"; -import "lodash/_getTag.js"; -import "lodash/_getValue.js"; -import "lodash/_getView.js"; -import "lodash/_getWrapDetails.js"; -import "lodash/_hasPath.js"; -import "lodash/_hasUnicode.js"; -import "lodash/_hasUnicodeWord.js"; -import "lodash/_hashClear.js"; -import "lodash/_hashDelete.js"; -import "lodash/_hashGet.js"; -import "lodash/_hashHas.js"; -import "lodash/_hashSet.js"; -import "lodash/_initCloneArray.js"; -import "lodash/_initCloneByTag.js"; -import "lodash/_initCloneObject.js"; -import "lodash/_insertWrapDetails.js"; -import "lodash/_isFlattenable.js"; -import "lodash/_isIndex.js"; -import "lodash/_isIterateeCall.js"; -import "lodash/_isKey.js"; -import "lodash/_isKeyable.js"; -import "lodash/_isLaziable.js"; -import "lodash/_isMaskable.js"; -import "lodash/_isMasked.js"; -import "lodash/_isPrototype.js"; -import "lodash/_isStrictComparable.js"; -import "lodash/_iteratorToArray.js"; -import "lodash/_lazyClone.js"; -import "lodash/_lazyReverse.js"; -import "lodash/_lazyValue.js"; -import "lodash/_listCacheClear.js"; -import "lodash/_listCacheDelete.js"; -import "lodash/_listCacheGet.js"; -import "lodash/_listCacheHas.js"; -import "lodash/_listCacheSet.js"; -import "lodash/_mapCacheClear.js"; -import "lodash/_mapCacheDelete.js"; -import "lodash/_mapCacheGet.js"; -import "lodash/_mapCacheHas.js"; -import "lodash/_mapCacheSet.js"; -import "lodash/_mapToArray.js"; -import "lodash/_matchesStrictComparable.js"; -import "lodash/_memoizeCapped.js"; -import "lodash/_mergeData.js"; -import "lodash/_metaMap.js"; -import "lodash/_nativeCreate.js"; -import "lodash/_nativeKeys.js"; -import "lodash/_nativeKeysIn.js"; -import "lodash/_nodeUtil.js"; -import "lodash/_objectToString.js"; -import "lodash/_overArg.js"; -import "lodash/_overRest.js"; -import "lodash/_parent.js"; -import "lodash/_reEscape.js"; -import "lodash/_reEvaluate.js"; -import "lodash/_reInterpolate.js"; -import "lodash/_realNames.js"; -import "lodash/_reorder.js"; -import "lodash/_replaceHolders.js"; -import "lodash/_root.js"; -import "lodash/_safeGet.js"; -import "lodash/_setCacheAdd.js"; -import "lodash/_setCacheHas.js"; -import "lodash/_setData.js"; -import "lodash/_setToArray.js"; -import "lodash/_setToPairs.js"; -import "lodash/_setToString.js"; -import "lodash/_setWrapToString.js"; -import "lodash/_shortOut.js"; -import "lodash/_shuffleSelf.js"; -import "lodash/_stackClear.js"; -import "lodash/_stackDelete.js"; -import "lodash/_stackGet.js"; -import "lodash/_stackHas.js"; -import "lodash/_stackSet.js"; -import "lodash/_strictIndexOf.js"; -import "lodash/_strictLastIndexOf.js"; -import "lodash/_stringSize.js"; -import "lodash/_stringToArray.js"; -import "lodash/_stringToPath.js"; -import "lodash/_toKey.js"; -import "lodash/_toSource.js"; -import "lodash/_trimmedEndIndex.js"; -import "lodash/_unescapeHtmlChar.js"; -import "lodash/_unicodeSize.js"; -import "lodash/_unicodeToArray.js"; -import "lodash/_unicodeWords.js"; -import "lodash/_updateWrapDetails.js"; -import "lodash/_wrapperClone.js"; -import "lodash/add.js"; -import "lodash/after.js"; -import "lodash/array.js"; -import "lodash/ary.js"; -import "lodash/assign.js"; -import "lodash/assignIn.js"; -import "lodash/assignInWith.js"; -import "lodash/assignWith.js"; -import "lodash/at.js"; -import "lodash/attempt.js"; -import "lodash/before.js"; -import "lodash/bind.js"; -import "lodash/bindAll.js"; -import "lodash/bindKey.js"; -import "lodash/camelCase.js"; -import "lodash/capitalize.js"; -import "lodash/castArray.js"; -import "lodash/ceil.js"; -import "lodash/chain.js"; -import "lodash/chunk.js"; -import "lodash/clamp.js"; -import "lodash/clone.js"; -import "lodash/cloneDeep.js"; -import "lodash/cloneDeepWith.js"; -import "lodash/cloneWith.js"; -import "lodash/collection.js"; -import "lodash/commit.js"; -import "lodash/compact.js"; -import "lodash/concat.js"; -import "lodash/cond.js"; -import "lodash/conforms.js"; -import "lodash/conformsTo.js"; -import "lodash/constant.js"; -import "lodash/core.js"; -import "lodash/core.min.js"; -import "lodash/countBy.js"; -import "lodash/create.js"; -import "lodash/curry.js"; -import "lodash/curryRight.js"; -import "lodash/date.js"; -import "lodash/debounce.js"; -import "lodash/deburr.js"; -import "lodash/defaultTo.js"; -import "lodash/defaults.js"; -import "lodash/defaultsDeep.js"; -import "lodash/defer.js"; -import "lodash/delay.js"; -import "lodash/difference.js"; -import "lodash/differenceBy.js"; -import "lodash/differenceWith.js"; -import "lodash/divide.js"; -import "lodash/drop.js"; -import "lodash/dropRight.js"; -import "lodash/dropRightWhile.js"; -import "lodash/dropWhile.js"; -import "lodash/each.js"; -import "lodash/eachRight.js"; -import "lodash/endsWith.js"; -import "lodash/entries.js"; -import "lodash/entriesIn.js"; -import "lodash/eq.js"; -import "lodash/escape.js"; -import "lodash/escapeRegExp.js"; -import "lodash/every.js"; -import "lodash/extend.js"; -import "lodash/extendWith.js"; -import "lodash/fill.js"; -import "lodash/filter.js"; -import "lodash/find.js"; -import "lodash/findIndex.js"; -import "lodash/findKey.js"; -import "lodash/findLast.js"; -import "lodash/findLastIndex.js"; -import "lodash/findLastKey.js"; -import "lodash/first.js"; -import "lodash/flatMap.js"; -import "lodash/flatMapDeep.js"; -import "lodash/flatMapDepth.js"; -import "lodash/flatten.js"; -import "lodash/flattenDeep.js"; -import "lodash/flattenDepth.js"; -import "lodash/flip.js"; -import "lodash/floor.js"; -import "lodash/flow.js"; -import "lodash/flowRight.js"; -import "lodash/forEach.js"; -import "lodash/forEachRight.js"; -import "lodash/forIn.js"; -import "lodash/forInRight.js"; -import "lodash/forOwn.js"; -import "lodash/forOwnRight.js"; -import "lodash/fp"; -import "lodash/fp.js"; -import "lodash/fromPairs.js"; -import "lodash/function.js"; -import "lodash/functions.js"; -import "lodash/functionsIn.js"; -import "lodash/get.js"; -import "lodash/groupBy.js"; -import "lodash/gt.js"; -import "lodash/gte.js"; -import "lodash/has.js"; -import "lodash/hasIn.js"; -import "lodash/head.js"; -import "lodash/identity.js"; -import "lodash/inRange.js"; -import "lodash/includes.js"; -import "lodash/index.js"; -import "lodash/indexOf.js"; -import "lodash/initial.js"; -import "lodash/intersection.js"; -import "lodash/intersectionBy.js"; -import "lodash/intersectionWith.js"; -import "lodash/invert.js"; -import "lodash/invertBy.js"; -import "lodash/invoke.js"; -import "lodash/invokeMap.js"; -import "lodash/isArguments.js"; -import "lodash/isArray.js"; -import "lodash/isArrayBuffer.js"; -import "lodash/isArrayLike.js"; -import "lodash/isArrayLikeObject.js"; -import "lodash/isBoolean.js"; -import "lodash/isBuffer.js"; -import "lodash/isDate.js"; -import "lodash/isElement.js"; -import "lodash/isEmpty.js"; -import "lodash/isEqual.js"; -import "lodash/isEqualWith.js"; -import "lodash/isError.js"; -import "lodash/isFinite.js"; -import "lodash/isFunction.js"; -import "lodash/isInteger.js"; -import "lodash/isLength.js"; -import "lodash/isMap.js"; -import "lodash/isMatch.js"; -import "lodash/isMatchWith.js"; -import "lodash/isNaN.js"; -import "lodash/isNative.js"; -import "lodash/isNil.js"; -import "lodash/isNull.js"; -import "lodash/isNumber.js"; -import "lodash/isObject.js"; -import "lodash/isObjectLike.js"; -import "lodash/isPlainObject.js"; -import "lodash/isRegExp.js"; -import "lodash/isSafeInteger.js"; -import "lodash/isSet.js"; -import "lodash/isString.js"; -import "lodash/isSymbol.js"; -import "lodash/isTypedArray.js"; -import "lodash/isUndefined.js"; -import "lodash/isWeakMap.js"; -import "lodash/isWeakSet.js"; -import "lodash/iteratee.js"; -import "lodash/join.js"; -import "lodash/kebabCase.js"; -import "lodash/keyBy.js"; -import "lodash/keys.js"; -import "lodash/keysIn.js"; -import "lodash/lang.js"; -import "lodash/last.js"; -import "lodash/lastIndexOf.js"; -import "lodash/lodash.js"; -import "lodash/lodash.min.js"; -import "lodash/lowerCase.js"; -import "lodash/lowerFirst.js"; -import "lodash/lt.js"; -import "lodash/lte.js"; -import "lodash/map.js"; -import "lodash/mapKeys.js"; -import "lodash/mapValues.js"; -import "lodash/matches.js"; -import "lodash/matchesProperty.js"; -import "lodash/math.js"; -import "lodash/max.js"; -import "lodash/maxBy.js"; -import "lodash/mean.js"; -import "lodash/meanBy.js"; -import "lodash/memoize.js"; -import "lodash/merge.js"; -import "lodash/mergeWith.js"; -import "lodash/method.js"; -import "lodash/methodOf.js"; -import "lodash/min.js"; -import "lodash/minBy.js"; -import "lodash/mixin.js"; -import "lodash/multiply.js"; -import "lodash/negate.js"; -import "lodash/next.js"; -import "lodash/noop.js"; -import "lodash/now.js"; -import "lodash/nth.js"; -import "lodash/nthArg.js"; -import "lodash/number.js"; -import "lodash/object.js"; -import "lodash/omit.js"; -import "lodash/omitBy.js"; -import "lodash/once.js"; -import "lodash/orderBy.js"; -import "lodash/over.js"; -import "lodash/overArgs.js"; -import "lodash/overEvery.js"; -import "lodash/overSome.js"; -import "lodash/pad.js"; -import "lodash/padEnd.js"; -import "lodash/padStart.js"; -import "lodash/parseInt.js"; -import "lodash/partial.js"; -import "lodash/partialRight.js"; -import "lodash/partition.js"; -import "lodash/pick.js"; -import "lodash/pickBy.js"; -import "lodash/plant.js"; -import "lodash/property.js"; -import "lodash/propertyOf.js"; -import "lodash/pull.js"; -import "lodash/pullAll.js"; -import "lodash/pullAllBy.js"; -import "lodash/pullAllWith.js"; -import "lodash/pullAt.js"; -import "lodash/random.js"; -import "lodash/range.js"; -import "lodash/rangeRight.js"; -import "lodash/rearg.js"; -import "lodash/reduce.js"; -import "lodash/reduceRight.js"; -import "lodash/reject.js"; -import "lodash/remove.js"; -import "lodash/repeat.js"; -import "lodash/replace.js"; -import "lodash/rest.js"; -import "lodash/result.js"; -import "lodash/reverse.js"; -import "lodash/round.js"; -import "lodash/sample.js"; -import "lodash/sampleSize.js"; -import "lodash/seq.js"; -import "lodash/set.js"; -import "lodash/setWith.js"; -import "lodash/shuffle.js"; -import "lodash/size.js"; -import "lodash/slice.js"; -import "lodash/snakeCase.js"; -import "lodash/some.js"; -import "lodash/sortBy.js"; -import "lodash/sortedIndex.js"; -import "lodash/sortedIndexBy.js"; -import "lodash/sortedIndexOf.js"; -import "lodash/sortedLastIndex.js"; -import "lodash/sortedLastIndexBy.js"; -import "lodash/sortedLastIndexOf.js"; -import "lodash/sortedUniq.js"; -import "lodash/sortedUniqBy.js"; -import "lodash/split.js"; -import "lodash/spread.js"; -import "lodash/startCase.js"; -import "lodash/startsWith.js"; -import "lodash/string.js"; -import "lodash/stubArray.js"; -import "lodash/stubFalse.js"; -import "lodash/stubObject.js"; -import "lodash/stubString.js"; -import "lodash/stubTrue.js"; -import "lodash/subtract.js"; -import "lodash/sum.js"; -import "lodash/sumBy.js"; -import "lodash/tail.js"; -import "lodash/take.js"; -import "lodash/takeRight.js"; -import "lodash/takeRightWhile.js"; -import "lodash/takeWhile.js"; -import "lodash/tap.js"; -import "lodash/template.js"; -import "lodash/templateSettings.js"; -import "lodash/throttle.js"; -import "lodash/thru.js"; -import "lodash/times.js"; -import "lodash/toArray.js"; -import "lodash/toFinite.js"; -import "lodash/toInteger.js"; -import "lodash/toIterator.js"; -import "lodash/toJSON.js"; -import "lodash/toLength.js"; -import "lodash/toLower.js"; -import "lodash/toNumber.js"; -import "lodash/toPairs.js"; -import "lodash/toPairsIn.js"; -import "lodash/toPath.js"; -import "lodash/toPlainObject.js"; -import "lodash/toSafeInteger.js"; -import "lodash/toString.js"; -import "lodash/toUpper.js"; -import "lodash/transform.js"; -import "lodash/trim.js"; -import "lodash/trimEnd.js"; -import "lodash/trimStart.js"; -import "lodash/truncate.js"; -import "lodash/unary.js"; -import "lodash/unescape.js"; -import "lodash/union.js"; -import "lodash/unionBy.js"; -import "lodash/unionWith.js"; -import "lodash/uniq.js"; -import "lodash/uniqBy.js"; -import "lodash/uniqWith.js"; -import "lodash/uniqueId.js"; -import "lodash/unset.js"; -import "lodash/unzip.js"; -import "lodash/unzipWith.js"; -import "lodash/update.js"; -import "lodash/updateWith.js"; -import "lodash/upperCase.js"; -import "lodash/upperFirst.js"; -import "lodash/util.js"; -import "lodash/value.js"; -import "lodash/valueOf.js"; -import "lodash/values.js"; -import "lodash/valuesIn.js"; -import "lodash/without.js"; -import "lodash/words.js"; -import "lodash/wrap.js"; -import "lodash/wrapperAt.js"; -import "lodash/wrapperChain.js"; -import "lodash/wrapperLodash.js"; -import "lodash/wrapperReverse.js"; -import "lodash/wrapperValue.js"; -import "lodash/xor.js"; -import "lodash/xorBy.js"; -import "lodash/xorWith.js"; -import "lodash/zip.js"; -import "lodash/zipObject.js"; -import "lodash/zipObjectDeep.js"; -import "lodash/_setToString"; -import "lodash"; -import "lodash/lodash"; - -import "underscore"; -import "three"; - -// import "@babel/standalone/babel.js"; +import "three/three1"; +import "three/three2"; +import "three/three3"; +import "three/three4"; +import "three/three5"; +import "three/three6"; +import "three/three7"; +import "three/three8"; +import "three/three9"; +import "three/three10"; +// import "@babel/standalone/babel"; diff --git a/examples/lotta-modules/public/index.html b/examples/lotta-modules/public/index.html new file mode 100644 index 000000000..bb6a38234 --- /dev/null +++ b/examples/lotta-modules/public/index.html @@ -0,0 +1,6 @@ +<html> + <head> </head> + <body> + <script src="/index.js"></script> + </body> +</html> diff --git a/profile.json b/profile.json deleted file mode 100644 index 8e13246b4..000000000 --- a/profile.json +++ /dev/null @@ -1 +0,0 @@ -{"libs":[{"arch":"x86_64","breakpadId":"574375CEFD033EF7A15002297814AF6A0","debugName":"spjs","debugPath":"/Users/jarred/Code/esdev/./build/debug/macos-x86_64/spjs","end":4472999936,"name":"spjs","offset":0,"path":"/Users/jarred/Code/esdev/./build/debug/macos-x86_64/spjs","start":4445261824},{"arch":"x86_64","breakpadId":"4F6F071B798F3BF4A51409B4AE629CCE0","debugName":"libperfrecord_preload.dylib","debugPath":"/private/var/folders/3w/mlds18cs0pzd1yjqsgf88v9c0000gn/T/.tmpFvKClU/libperfrecord_preload.dylib","end":4491603968,"name":"libperfrecord_preload.dylib","offset":0,"path":"/private/var/folders/3w/mlds18cs0pzd1yjqsgf88v9c0000gn/T/.tmpFvKClU/libperfrecord_preload.dylib","start":4490952704},{"arch":"x86_64","breakpadId":"8087D0C2B99138628D6D9BDCFE3D48EA0","debugName":"libicudata.69.dylib","debugPath":"/usr/local/opt/icu4c/lib/libicudata.69.dylib","end":4521541632,"name":"libicudata.69.dylib","offset":0,"path":"/usr/local/opt/icu4c/lib/libicudata.69.dylib","start":4492869632},{"arch":"x86_64","breakpadId":"4A58BF67385B3D32BF7FCF171C5B68990","debugName":"libicui18n.69.dylib","debugPath":"/usr/local/opt/icu4c/lib/libicui18n.69.dylib","end":4523180032,"name":"libicui18n.69.dylib","offset":0,"path":"/usr/local/opt/icu4c/lib/libicui18n.69.dylib","start":4521574400},{"arch":"x86_64","breakpadId":"DF845C31C9093B00B19CA9351E928CFE0","debugName":"libicuuc.69.dylib","debugPath":"/usr/local/opt/icu4c/lib/libicuuc.69.dylib","end":4525502464,"name":"libicuuc.69.dylib","offset":0,"path":"/usr/local/opt/icu4c/lib/libicuuc.69.dylib","start":4524322816},{"arch":"x86_64","breakpadId":"1AC765614F9A34B1BA7C4516CACEAED70","debugName":"dyld","debugPath":"/usr/lib/dyld","end":4579250176,"name":"dyld","offset":0,"path":"/usr/lib/dyld","start":4578611200},{"arch":"x86_64","breakpadId":"48AF56A96E423A5EA213E6AFD8F810440","debugName":"libsystem_blocks.dylib","debugPath":"/usr/lib/system/libsystem_blocks.dylib","end":140733730664448,"name":"libsystem_blocks.dylib","offset":0,"path":"/usr/lib/system/libsystem_blocks.dylib","start":140733730656256},{"arch":"x86_64","breakpadId":"5751A7F56DC53090B7F1D90ED71BEF1F0","debugName":"libxpc.dylib","debugPath":"/usr/lib/system/libxpc.dylib","end":140733730885632,"name":"libxpc.dylib","offset":0,"path":"/usr/lib/system/libxpc.dylib","start":140733730664448},{"arch":"x86_64","breakpadId":"8E243C00BFC23FAA989C0D72314DB04D0","debugName":"libsystem_trace.dylib","debugPath":"/usr/lib/system/libsystem_trace.dylib","end":140733730983936,"name":"libsystem_trace.dylib","offset":0,"path":"/usr/lib/system/libsystem_trace.dylib","start":140733730885632},{"arch":"x86_64","breakpadId":"FADB19A01BF33F47B72987B4FA8CA6770","debugName":"libcorecrypto.dylib","debugPath":"/usr/lib/system/libcorecrypto.dylib","end":140733731631104,"name":"libcorecrypto.dylib","offset":0,"path":"/usr/lib/system/libcorecrypto.dylib","start":140733730983936},{"arch":"x86_64","breakpadId":"CAD162A573673A309C155D036411AEDE0","debugName":"libsystem_malloc.dylib","debugPath":"/usr/lib/system/libsystem_malloc.dylib","end":140733731815424,"name":"libsystem_malloc.dylib","offset":0,"path":"/usr/lib/system/libsystem_malloc.dylib","start":140733731631104},{"arch":"x86_64","breakpadId":"7B2297971F2E34099D0C060C7EEF2E120","debugName":"libdispatch.dylib","debugPath":"/usr/lib/system/libdispatch.dylib","end":140733732098048,"name":"libdispatch.dylib","offset":0,"path":"/usr/lib/system/libdispatch.dylib","start":140733731815424},{"arch":"x86_64","breakpadId":"FE5AF22E80A134BB98D6610879988BAA0","debugName":"libobjc.A.dylib","debugPath":"/usr/lib/libobjc.A.dylib","end":140733732335616,"name":"libobjc.A.dylib","offset":0,"path":"/usr/lib/libobjc.A.dylib","start":140733732098048},{"arch":"x86_64","breakpadId":"77F7F47939BD3111BE3CC74567FD120C0","debugName":"libsystem_featureflags.dylib","debugPath":"/usr/lib/system/libsystem_featureflags.dylib","end":140733732347904,"name":"libsystem_featureflags.dylib","offset":0,"path":"/usr/lib/system/libsystem_featureflags.dylib","start":140733732335616},{"arch":"x86_64","breakpadId":"38F8A126C995349AB909FF831914ED2E0","debugName":"libsystem_c.dylib","debugPath":"/usr/lib/system/libsystem_c.dylib","end":140733732909056,"name":"libsystem_c.dylib","offset":0,"path":"/usr/lib/system/libsystem_c.dylib","start":140733732347904},{"arch":"x86_64","breakpadId":"B3812B864FCF3A108866DF67940A974C0","debugName":"libc++.1.dylib","debugPath":"/usr/lib/libc++.1.dylib","end":140733733261312,"name":"libc++.1.dylib","offset":0,"path":"/usr/lib/libc++.1.dylib","start":140733732909056},{"arch":"x86_64","breakpadId":"A0FE88B7E1573C9CA29A11D3BE3436B30","debugName":"libc++abi.dylib","debugPath":"/usr/lib/libc++abi.dylib","end":140733733351424,"name":"libc++abi.dylib","offset":0,"path":"/usr/lib/libc++abi.dylib","start":140733733261312},{"arch":"x86_64","breakpadId":"A4938CF5ABC0397B8A6EB7BEEFA24D0A0","debugName":"libsystem_kernel.dylib","debugPath":"/usr/lib/system/libsystem_kernel.dylib","end":140733733548032,"name":"libsystem_kernel.dylib","offset":0,"path":"/usr/lib/system/libsystem_kernel.dylib","start":140733733351424},{"arch":"x86_64","breakpadId":"17482C9D061E3769AC9EBE1239D330980","debugName":"libsystem_pthread.dylib","debugPath":"/usr/lib/system/libsystem_pthread.dylib","end":140733733597184,"name":"libsystem_pthread.dylib","offset":0,"path":"/usr/lib/system/libsystem_pthread.dylib","start":140733733548032},{"arch":"x86_64","breakpadId":"C10CEA28D5A0324F8F078C7CE48054120","debugName":"libdyld.dylib","debugPath":"/usr/lib/system/libdyld.dylib","end":140733733842944,"name":"libdyld.dylib","offset":0,"path":"/usr/lib/system/libdyld.dylib","start":140733733597184},{"arch":"x86_64","breakpadId":"8664A4CDEE273C71B5CC06E2B1B4F3940","debugName":"libsystem_platform.dylib","debugPath":"/usr/lib/system/libsystem_platform.dylib","end":140733733883904,"name":"libsystem_platform.dylib","offset":0,"path":"/usr/lib/system/libsystem_platform.dylib","start":140733733842944},{"arch":"x86_64","breakpadId":"EA3F9C9C31163DB4A3F15B03172C1E720","debugName":"libsystem_info.dylib","debugPath":"/usr/lib/system/libsystem_info.dylib","end":140733734064128,"name":"libsystem_info.dylib","offset":0,"path":"/usr/lib/system/libsystem_info.dylib","start":140733733883904},{"arch":"x86_64","breakpadId":"9957A773012E3ABA9587CFF787170AE80","debugName":"libicucore.A.dylib","debugPath":"/usr/lib/libicucore.A.dylib","end":140733771587584,"name":"libicucore.A.dylib","offset":0,"path":"/usr/lib/libicucore.A.dylib","start":140733769097216},{"arch":"x86_64","breakpadId":"BF5B5FD8B5A330358641466E625A6CE80","debugName":"libsystem_darwin.dylib","debugPath":"/usr/lib/system/libsystem_darwin.dylib","end":140733771628544,"name":"libsystem_darwin.dylib","offset":0,"path":"/usr/lib/system/libsystem_darwin.dylib","start":140733771587584},{"arch":"x86_64","breakpadId":"7FFECC25FA843B599CC84D9DC84E6EC10","debugName":"libsystem_notify.dylib","debugPath":"/usr/lib/system/libsystem_notify.dylib","end":140733775958016,"name":"libsystem_notify.dylib","offset":0,"path":"/usr/lib/system/libsystem_notify.dylib","start":140733775908864},{"arch":"x86_64","breakpadId":"02486B74EAAD3055AE20F12E79B392970","debugName":"libsystem_networkextension.dylib","debugPath":"/usr/lib/system/libsystem_networkextension.dylib","end":140733809086464,"name":"libsystem_networkextension.dylib","offset":0,"path":"/usr/lib/system/libsystem_networkextension.dylib","start":140733809025024},{"arch":"x86_64","breakpadId":"B3E89650A7FE3E938A1BD88145FDD45C0","debugName":"libsystem_asl.dylib","debugPath":"/usr/lib/system/libsystem_asl.dylib","end":140733809565696,"name":"libsystem_asl.dylib","offset":0,"path":"/usr/lib/system/libsystem_asl.dylib","start":140733809471488},{"arch":"x86_64","breakpadId":"3BEA5355D26739D48BC6A1703845BD3F0","debugName":"libsystem_symptoms.dylib","debugPath":"/usr/lib/system/libsystem_symptoms.dylib","end":140733833469952,"name":"libsystem_symptoms.dylib","offset":0,"path":"/usr/lib/system/libsystem_symptoms.dylib","start":140733833437184},{"arch":"x86_64","breakpadId":"2BBFF58CD27E3371968D7DE1E53749F60","debugName":"libsystem_containermanager.dylib","debugPath":"/usr/lib/system/libsystem_containermanager.dylib","end":140733867118592,"name":"libsystem_containermanager.dylib","offset":0,"path":"/usr/lib/system/libsystem_containermanager.dylib","start":140733867048960},{"arch":"x86_64","breakpadId":"C7A9BD10192B31D392ED2581A61A99F60","debugName":"libsystem_configuration.dylib","debugPath":"/usr/lib/system/libsystem_configuration.dylib","end":140733880795136,"name":"libsystem_configuration.dylib","offset":0,"path":"/usr/lib/system/libsystem_configuration.dylib","start":140733880778752},{"arch":"x86_64","breakpadId":"DC075A7C9D4A32D39022CD47764AFDAD0","debugName":"libsystem_sandbox.dylib","debugPath":"/usr/lib/system/libsystem_sandbox.dylib","end":140733880815616,"name":"libsystem_sandbox.dylib","offset":0,"path":"/usr/lib/system/libsystem_sandbox.dylib","start":140733880795136},{"arch":"x86_64","breakpadId":"4611645F58173A8083822DB03A8C01410","debugName":"libquarantine.dylib","debugPath":"/usr/lib/system/libquarantine.dylib","end":140733894397952,"name":"libquarantine.dylib","offset":0,"path":"/usr/lib/system/libquarantine.dylib","start":140733894385664},{"arch":"x86_64","breakpadId":"1E2DA16BD5283D4386C22BB9127954A00","debugName":"libsystem_coreservices.dylib","debugPath":"/usr/lib/system/libsystem_coreservices.dylib","end":140733900349440,"name":"libsystem_coreservices.dylib","offset":0,"path":"/usr/lib/system/libsystem_coreservices.dylib","start":140733900328960},{"arch":"x86_64","breakpadId":"21949128D4E63179B24841B05C1CE1020","debugName":"libsystem_m.dylib","debugPath":"/usr/lib/system/libsystem_m.dylib","end":140733902802944,"name":"libsystem_m.dylib","offset":0,"path":"/usr/lib/system/libsystem_m.dylib","start":140733902508032},{"arch":"x86_64","breakpadId":"3677B3B703E83804B2FE5640B18FE40E0","debugName":"libmacho.dylib","debugPath":"/usr/lib/system/libmacho.dylib","end":140733902831616,"name":"libmacho.dylib","offset":0,"path":"/usr/lib/system/libmacho.dylib","start":140733902807040},{"arch":"x86_64","breakpadId":"BBA72D86B9C13123AE59D629DE2786950","debugName":"libcommonCrypto.dylib","debugPath":"/usr/lib/system/libcommonCrypto.dylib","end":140733902995456,"name":"libcommonCrypto.dylib","offset":0,"path":"/usr/lib/system/libcommonCrypto.dylib","start":140733902946304},{"arch":"x86_64","breakpadId":"3149D79A911B39ED9C936C7E6B0860C70","debugName":"libunwind.dylib","debugPath":"/usr/lib/system/libunwind.dylib","end":140733903040512,"name":"libunwind.dylib","offset":0,"path":"/usr/lib/system/libunwind.dylib","start":140733902995456},{"arch":"x86_64","breakpadId":"0A17EAFC15E937FE8EE2DE0F7F220AD80","debugName":"liboah.dylib","debugPath":"/usr/lib/liboah.dylib","end":140733903073280,"name":"liboah.dylib","offset":0,"path":"/usr/lib/liboah.dylib","start":140733903040512},{"arch":"x86_64","breakpadId":"7304CA0DE93C367F9BEEAC56B873F06C0","debugName":"libcopyfile.dylib","debugPath":"/usr/lib/system/libcopyfile.dylib","end":140733903118336,"name":"libcopyfile.dylib","offset":0,"path":"/usr/lib/system/libcopyfile.dylib","start":140733903073280},{"arch":"x86_64","breakpadId":"0DB1902EC79C3E26BE51F70960ECF0B90","debugName":"libcompiler_rt.dylib","debugPath":"/usr/lib/system/libcompiler_rt.dylib","end":140733903151104,"name":"libcompiler_rt.dylib","offset":0,"path":"/usr/lib/system/libcompiler_rt.dylib","start":140733903118336},{"arch":"x86_64","breakpadId":"E180C04A9CFB3C8E9C2B978D23A99F2A0","debugName":"libsystem_collections.dylib","debugPath":"/usr/lib/system/libsystem_collections.dylib","end":140733903163392,"name":"libsystem_collections.dylib","offset":0,"path":"/usr/lib/system/libsystem_collections.dylib","start":140733903151104},{"arch":"x86_64","breakpadId":"8C33D323C11C34CB92954D7C98B8AFD60","debugName":"libsystem_secinit.dylib","debugPath":"/usr/lib/system/libsystem_secinit.dylib","end":140733903175680,"name":"libsystem_secinit.dylib","offset":0,"path":"/usr/lib/system/libsystem_secinit.dylib","start":140733903163392},{"arch":"x86_64","breakpadId":"6DEAEEC92A653C7BA9CE23245772FD070","debugName":"libremovefile.dylib","debugPath":"/usr/lib/system/libremovefile.dylib","end":140733903187968,"name":"libremovefile.dylib","offset":0,"path":"/usr/lib/system/libremovefile.dylib","start":140733903175680},{"arch":"x86_64","breakpadId":"FD16783538293FFDB13ED18113E271AB0","debugName":"libkeymgr.dylib","debugPath":"/usr/lib/system/libkeymgr.dylib","end":140733903192064,"name":"libkeymgr.dylib","offset":0,"path":"/usr/lib/system/libkeymgr.dylib","start":140733903187968},{"arch":"x86_64","breakpadId":"7BB607FEEF7931448BD0A66792FF14430","debugName":"libsystem_dnssd.dylib","debugPath":"/usr/lib/system/libsystem_dnssd.dylib","end":140733903224832,"name":"libsystem_dnssd.dylib","offset":0,"path":"/usr/lib/system/libsystem_dnssd.dylib","start":140733903192064},{"arch":"x86_64","breakpadId":"8B2010582C343C129A7A898CB0AAD1500","debugName":"libcache.dylib","debugPath":"/usr/lib/system/libcache.dylib","end":140733903249408,"name":"libcache.dylib","offset":0,"path":"/usr/lib/system/libcache.dylib","start":140733903224832},{"arch":"x86_64","breakpadId":"A830907431CC31F0A14381DF019F7A860","debugName":"libSystem.B.dylib","debugPath":"/usr/lib/libSystem.B.dylib","end":140733903257600,"name":"libSystem.B.dylib","offset":0,"path":"/usr/lib/libSystem.B.dylib","start":140733903249408},{"arch":"x86_64","breakpadId":"0E0E729827813D72B40F5FF7DE7DF0680","debugName":"libresolv.9.dylib","debugPath":"/usr/lib/libresolv.9.dylib","end":140733945929728,"name":"libresolv.9.dylib","offset":0,"path":"/usr/lib/libresolv.9.dylib","start":140733945827328},{"arch":"x86_64","breakpadId":"FB6430FCAACB3AFF87634C5AFABEF40E0","debugName":"liblaunch.dylib","debugPath":"/usr/lib/system/liblaunch.dylib","end":140733957808128,"name":"liblaunch.dylib","offset":0,"path":"/usr/lib/system/liblaunch.dylib","start":140733957804032},{"arch":"x86_64","breakpadId":"D5194AB161C43C8D9E3CC65702BAB8590","debugName":"libsystem_product_info_filter.dylib","debugPath":"/usr/lib/system/libsystem_product_info_filter.dylib","end":140733996142592,"name":"libsystem_product_info_filter.dylib","offset":0,"path":"/usr/lib/system/libsystem_product_info_filter.dylib","start":140733996138496}],"meta":{"categories":[{"color":"transparent","name":"Idle"},{"color":"blue","name":"Running"},{"color":"grey","name":"Other"}],"interval":0.00009999999999999999,"pausedRanges":[],"pid":82383,"processType":0,"product":"./build/debug/macos-x86_64/spjs","shutdownTime":13.697011,"startTime":1626488565310.992,"version":14},"processes":[],"threads":[{"frameTable":{"data":[[0,false,null,null,null,null,1],[1,false,null,null,null,null,1],[2,false,null,null,null,null,1],[3,false,null,null,null,null,1],[4,false,null,null,null,null,1],[5,false,null,null,null,null,1],[6,false,null,null,null,null,1],[7,false,null,null,null,null,1],[8,false,null,null,null,null,1],[9,false,null,null,null,null,1],[10,false,null,null,null,null,1],[11,false,null,null,null,null,1],[12,false,null,null,null,null,1],[13,false,null,null,null,null,1],[14,false,null,null,null,null,1],[15,false,null,null,null,null,1],[16,false,null,null,null,null,1],[17,false,null,null,null,null,1],[18,false,null,null,null,null,1],[19,false,null,null,null,null,1],[20,false,null,null,null,null,1],[21,false,null,null,null,null,1],[22,false,null,null,null,null,1],[23,false,null,null,null,null,1],[24,false,null,null,null,null,1],[25,false,null,null,null,null,1],[26,false,null,null,null,null,1],[27,false,null,null,null,null,1],[28,false,null,null,null,null,1],[29,false,null,null,null,null,1],[30,false,null,null,null,null,1],[31,false,null,null,null,null,1],[32,false,null,null,null,null,1],[33,false,null,null,null,null,1],[34,false,null,null,null,null,1],[35,false,null,null,null,null,1],[36,false,null,null,null,null,1],[37,false,null,null,null,null,1],[38,false,null,null,null,null,1],[39,false,null,null,null,null,1],[40,false,null,null,null,null,1],[41,false,null,null,null,null,1],[42,false,null,null,null,null,1],[43,false,null,null,null,null,1],[44,false,null,null,null,null,1],[45,false,null,null,null,null,1],[46,false,null,null,null,null,1],[47,false,null,null,null,null,1],[48,false,null,null,null,null,1],[49,false,null,null,null,null,1],[50,false,null,null,null,null,1],[51,false,null,null,null,null,1],[52,false,null,null,null,null,1],[53,false,null,null,null,null,1],[54,false,null,null,null,null,1],[55,false,null,null,null,null,1],[56,false,null,null,null,null,1],[57,false,null,null,null,null,1],[58,false,null,null,null,null,1],[59,false,null,null,null,null,1],[60,false,null,null,null,null,1],[61,false,null,null,null,null,1],[62,false,null,null,null,null,1],[63,false,null,null,null,null,1],[64,false,null,null,null,null,1],[65,false,null,null,null,null,1],[66,false,null,null,null,null,1],[67,false,null,null,null,null,1],[68,false,null,null,null,null,1],[69,false,null,null,null,null,1],[70,false,null,null,null,null,1],[71,false,null,null,null,null,1],[72,false,null,null,null,null,1],[73,false,null,null,null,null,1],[74,false,null,null,null,null,1],[75,false,null,null,null,null,1],[76,false,null,null,null,null,1],[77,false,null,null,null,null,1],[78,false,null,null,null,null,1],[79,false,null,null,null,null,1],[80,false,null,null,null,null,1],[81,false,null,null,null,null,1],[82,false,null,null,null,null,1],[83,false,null,null,null,null,1],[84,false,null,null,null,null,1],[85,false,null,null,null,null,1],[86,false,null,null,null,null,1],[87,false,null,null,null,null,1],[88,false,null,null,null,null,1],[89,false,null,null,null,null,1],[90,false,null,null,null,null,1],[91,false,null,null,null,null,1],[92,false,null,null,null,null,1],[93,false,null,null,null,null,1],[94,false,null,null,null,null,1],[95,false,null,null,null,null,1],[96,false,null,null,null,null,1],[97,false,null,null,null,null,1],[98,false,null,null,null,null,1],[99,false,null,null,null,null,1],[100,false,null,null,null,null,1],[101,false,null,null,null,null,1],[102,false,null,null,null,null,1],[103,false,null,null,null,null,1],[104,false,null,null,null,null,1],[105,false,null,null,null,null,1],[106,false,null,null,null,null,1],[107,false,null,null,null,null,1],[108,false,null,null,null,null,1],[109,false,null,null,null,null,1],[110,false,null,null,null,null,1],[111,false,null,null,null,null,1],[112,false,null,null,null,null,1],[113,false,null,null,null,null,1],[114,false,null,null,null,null,1],[115,false,null,null,null,null,1],[116,false,null,null,null,null,1],[117,false,null,null,null,null,1],[118,false,null,null,null,null,1],[119,false,null,null,null,null,1],[120,false,null,null,null,null,1],[121,false,null,null,null,null,1],[122,false,null,null,null,null,1],[123,false,null,null,null,null,1],[124,false,null,null,null,null,1],[125,false,null,null,null,null,1],[126,false,null,null,null,null,1],[127,false,null,null,null,null,1],[128,false,null,null,null,null,1],[129,false,null,null,null,null,1],[130,false,null,null,null,null,1],[131,false,null,null,null,null,1],[132,false,null,null,null,null,1],[133,false,null,null,null,null,1],[134,false,null,null,null,null,1],[135,false,null,null,null,null,1],[136,false,null,null,null,null,1],[137,false,null,null,null,null,1],[138,false,null,null,null,null,1],[139,false,null,null,null,null,1],[140,false,null,null,null,null,1],[141,false,null,null,null,null,1],[142,false,null,null,null,null,1],[143,false,null,null,null,null,1],[144,false,null,null,null,null,1],[145,false,null,null,null,null,1],[146,false,null,null,null,null,1],[147,false,null,null,null,null,1],[148,false,null,null,null,null,1],[149,false,null,null,null,null,1],[150,false,null,null,null,null,1],[151,false,null,null,null,null,1],[152,false,null,null,null,null,1],[153,false,null,null,null,null,1],[154,false,null,null,null,null,1],[155,false,null,null,null,null,1],[156,false,null,null,null,null,1],[157,false,null,null,null,null,1],[158,false,null,null,null,null,1],[159,false,null,null,null,null,1],[160,false,null,null,null,null,1],[161,false,null,null,null,null,1],[162,false,null,null,null,null,1],[163,false,null,null,null,null,1],[164,false,null,null,null,null,1],[165,false,null,null,null,null,1],[166,false,null,null,null,null,1],[167,false,null,null,null,null,1],[168,false,null,null,null,null,1],[169,false,null,null,null,null,1],[170,false,null,null,null,null,1],[171,false,null,null,null,null,1],[172,false,null,null,null,null,1],[173,false,null,null,null,null,1],[174,false,null,null,null,null,1],[175,false,null,null,null,null,1],[176,false,null,null,null,null,1],[177,false,null,null,null,null,1],[178,false,null,null,null,null,1],[179,false,null,null,null,null,1],[180,false,null,null,null,null,1],[181,false,null,null,null,null,1],[182,false,null,null,null,null,1],[183,false,null,null,null,null,1],[184,false,null,null,null,null,1],[185,false,null,null,null,null,1],[186,false,null,null,null,null,1],[187,false,null,null,null,null,1],[188,false,null,null,null,null,1],[189,false,null,null,null,null,1],[190,false,null,null,null,null,1],[191,false,null,null,null,null,1],[192,false,null,null,null,null,1],[193,false,null,null,null,null,1],[194,false,null,null,null,null,1],[195,false,null,null,null,null,1],[196,false,null,null,null,null,1],[197,false,null,null,null,null,1],[198,false,null,null,null,null,1],[199,false,null,null,null,null,1],[200,false,null,null,null,null,1],[201,false,null,null,null,null,1],[202,false,null,null,null,null,1],[203,false,null,null,null,null,1],[204,false,null,null,null,null,1],[205,false,null,null,null,null,1],[206,false,null,null,null,null,1],[207,false,null,null,null,null,1],[208,false,null,null,null,null,1],[209,false,null,null,null,null,1],[210,false,null,null,null,null,1],[211,false,null,null,null,null,1],[212,false,null,null,null,null,1],[213,false,null,null,null,null,1],[214,false,null,null,null,null,1],[215,false,null,null,null,null,1],[216,false,null,null,null,null,1],[217,false,null,null,null,null,1],[218,false,null,null,null,null,1],[219,false,null,null,null,null,1],[220,false,null,null,null,null,1],[221,false,null,null,null,null,1],[222,false,null,null,null,null,1],[223,false,null,null,null,null,1],[224,false,null,null,null,null,1],[225,false,null,null,null,null,1],[226,false,null,null,null,null,1],[227,false,null,null,null,null,1],[228,false,null,null,null,null,1],[229,false,null,null,null,null,1],[230,false,null,null,null,null,1],[231,false,null,null,null,null,1],[232,false,null,null,null,null,1],[233,false,null,null,null,null,1],[234,false,null,null,null,null,1],[235,false,null,null,null,null,1],[236,false,null,null,null,null,1],[237,false,null,null,null,null,1],[238,false,null,null,null,null,1],[239,false,null,null,null,null,1],[240,false,null,null,null,null,1],[241,false,null,null,null,null,1],[242,false,null,null,null,null,1],[243,false,null,null,null,null,1],[244,false,null,null,null,null,1],[245,false,null,null,null,null,1],[246,false,null,null,null,null,1],[247,false,null,null,null,null,1],[248,false,null,null,null,null,1],[249,false,null,null,null,null,1],[250,false,null,null,null,null,1],[251,false,null,null,null,null,1],[252,false,null,null,null,null,1],[253,false,null,null,null,null,1],[254,false,null,null,null,null,1],[255,false,null,null,null,null,1],[256,false,null,null,null,null,1],[257,false,null,null,null,null,1],[258,false,null,null,null,null,1],[259,false,null,null,null,null,1],[260,false,null,null,null,null,1],[261,false,null,null,null,null,1],[262,false,null,null,null,null,1],[263,false,null,null,null,null,1],[264,false,null,null,null,null,1],[265,false,null,null,null,null,1],[266,false,null,null,null,null,1],[267,false,null,null,null,null,1],[268,false,null,null,null,null,1],[269,false,null,null,null,null,1],[270,false,null,null,null,null,1],[271,false,null,null,null,null,1],[272,false,null,null,null,null,1],[273,false,null,null,null,null,1],[274,false,null,null,null,null,1],[275,false,null,null,null,null,1],[276,false,null,null,null,null,1],[277,false,null,null,null,null,1],[278,false,null,null,null,null,1],[279,false,null,null,null,null,1],[280,false,null,null,null,null,1],[281,false,null,null,null,null,1],[282,false,null,null,null,null,1],[283,false,null,null,null,null,1],[284,false,null,null,null,null,1],[285,false,null,null,null,null,1],[286,false,null,null,null,null,1],[287,false,null,null,null,null,1],[288,false,null,null,null,null,1],[289,false,null,null,null,null,1],[290,false,null,null,null,null,1],[291,false,null,null,null,null,1],[292,false,null,null,null,null,1],[293,false,null,null,null,null,1],[294,false,null,null,null,null,1],[295,false,null,null,null,null,1],[296,false,null,null,null,null,1],[297,false,null,null,null,null,1],[298,false,null,null,null,null,1],[299,false,null,null,null,null,1],[300,false,null,null,null,null,1],[301,false,null,null,null,null,1],[302,false,null,null,null,null,1],[303,false,null,null,null,null,1],[304,false,null,null,null,null,1],[305,false,null,null,null,null,1],[306,false,null,null,null,null,1],[307,false,null,null,null,null,1],[308,false,null,null,null,null,1],[309,false,null,null,null,null,1],[310,false,null,null,null,null,1],[311,false,null,null,null,null,1],[312,false,null,null,null,null,1],[313,false,null,null,null,null,1],[314,false,null,null,null,null,1],[315,false,null,null,null,null,1],[316,false,null,null,null,null,1],[317,false,null,null,null,null,1],[318,false,null,null,null,null,1],[319,false,null,null,null,null,1],[320,false,null,null,null,null,1],[321,false,null,null,null,null,1],[322,false,null,null,null,null,1],[323,false,null,null,null,null,1],[324,false,null,null,null,null,1],[325,false,null,null,null,null,1],[326,false,null,null,null,null,1],[327,false,null,null,null,null,1],[328,false,null,null,null,null,1],[329,false,null,null,null,null,1],[330,false,null,null,null,null,1],[331,false,null,null,null,null,1],[332,false,null,null,null,null,1],[333,false,null,null,null,null,1],[334,false,null,null,null,null,1],[335,false,null,null,null,null,1],[336,false,null,null,null,null,1],[337,false,null,null,null,null,1],[338,false,null,null,null,null,1],[339,false,null,null,null,null,1],[340,false,null,null,null,null,1],[341,false,null,null,null,null,1],[342,false,null,null,null,null,1],[343,false,null,null,null,null,1],[344,false,null,null,null,null,1],[345,false,null,null,null,null,1],[346,false,null,null,null,null,1],[347,false,null,null,null,null,1],[348,false,null,null,null,null,1],[349,false,null,null,null,null,1],[350,false,null,null,null,null,1],[351,false,null,null,null,null,1],[352,false,null,null,null,null,1],[353,false,null,null,null,null,1],[354,false,null,null,null,null,1],[355,false,null,null,null,null,1],[356,false,null,null,null,null,1],[357,false,null,null,null,null,1],[358,false,null,null,null,null,1],[359,false,null,null,null,null,1],[360,false,null,null,null,null,1],[361,false,null,null,null,null,1],[362,false,null,null,null,null,1],[363,false,null,null,null,null,1],[364,false,null,null,null,null,1],[365,false,null,null,null,null,1],[366,false,null,null,null,null,1],[367,false,null,null,null,null,1],[368,false,null,null,null,null,1],[369,false,null,null,null,null,1],[370,false,null,null,null,null,1],[371,false,null,null,null,null,1],[372,false,null,null,null,null,1],[373,false,null,null,null,null,1],[374,false,null,null,null,null,1],[375,false,null,null,null,null,1],[376,false,null,null,null,null,1],[377,false,null,null,null,null,1],[378,false,null,null,null,null,1],[379,false,null,null,null,null,1],[380,false,null,null,null,null,1],[381,false,null,null,null,null,1],[382,false,null,null,null,null,1],[383,false,null,null,null,null,1],[384,false,null,null,null,null,1],[385,false,null,null,null,null,1],[386,false,null,null,null,null,1],[387,false,null,null,null,null,1],[388,false,null,null,null,null,1],[389,false,null,null,null,null,1],[390,false,null,null,null,null,1],[391,false,null,null,null,null,1],[392,false,null,null,null,null,1],[393,false,null,null,null,null,1],[394,false,null,null,null,null,1],[395,false,null,null,null,null,1],[396,false,null,null,null,null,1],[397,false,null,null,null,null,1],[398,false,null,null,null,null,1],[399,false,null,null,null,null,1],[400,false,null,null,null,null,1],[401,false,null,null,null,null,1],[402,false,null,null,null,null,1],[403,false,null,null,null,null,1],[404,false,null,null,null,null,1],[405,false,null,null,null,null,1],[406,false,null,null,null,null,1],[407,false,null,null,null,null,1],[408,false,null,null,null,null,1],[409,false,null,null,null,null,1],[410,false,null,null,null,null,1],[411,false,null,null,null,null,1],[412,false,null,null,null,null,1],[413,false,null,null,null,null,1],[414,false,null,null,null,null,1],[415,false,null,null,null,null,1],[416,false,null,null,null,null,1],[417,false,null,null,null,null,1],[418,false,null,null,null,null,1],[419,false,null,null,null,null,1],[420,false,null,null,null,null,1],[421,false,null,null,null,null,1],[422,false,null,null,null,null,1],[423,false,null,null,null,null,1],[424,false,null,null,null,null,1],[425,false,null,null,null,null,1],[426,false,null,null,null,null,1],[427,false,null,null,null,null,1],[428,false,null,null,null,null,1],[429,false,null,null,null,null,1],[430,false,null,null,null,null,1],[431,false,null,null,null,null,1],[432,false,null,null,null,null,1],[433,false,null,null,null,null,1],[434,false,null,null,null,null,1],[435,false,null,null,null,null,1],[436,false,null,null,null,null,1],[437,false,null,null,null,null,1],[438,false,null,null,null,null,1],[439,false,null,null,null,null,1],[440,false,null,null,null,null,1],[441,false,null,null,null,null,1],[442,false,null,null,null,null,1],[443,false,null,null,null,null,1],[444,false,null,null,null,null,1],[445,false,null,null,null,null,1],[446,false,null,null,null,null,1],[447,false,null,null,null,null,1],[448,false,null,null,null,null,1],[449,false,null,null,null,null,1],[450,false,null,null,null,null,1],[451,false,null,null,null,null,1],[452,false,null,null,null,null,1],[453,false,null,null,null,null,1],[454,false,null,null,null,null,1],[455,false,null,null,null,null,1],[456,false,null,null,null,null,1],[457,false,null,null,null,null,1],[458,false,null,null,null,null,1],[459,false,null,null,null,null,1],[460,false,null,null,null,null,1],[461,false,null,null,null,null,1],[462,false,null,null,null,null,1],[463,false,null,null,null,null,1],[464,false,null,null,null,null,1],[465,false,null,null,null,null,1],[466,false,null,null,null,null,1],[467,false,null,null,null,null,1],[468,false,null,null,null,null,1],[469,false,null,null,null,null,1],[470,false,null,null,null,null,1],[471,false,null,null,null,null,1],[472,false,null,null,null,null,1],[473,false,null,null,null,null,1],[474,false,null,null,null,null,1],[475,false,null,null,null,null,1],[476,false,null,null,null,null,1],[477,false,null,null,null,null,1],[478,false,null,null,null,null,1],[479,false,null,null,null,null,1],[480,false,null,null,null,null,1],[481,false,null,null,null,null,1],[482,false,null,null,null,null,1],[483,false,null,null,null,null,1],[484,false,null,null,null,null,1],[485,false,null,null,null,null,1],[486,false,null,null,null,null,1],[487,false,null,null,null,null,1],[488,false,null,null,null,null,1],[489,false,null,null,null,null,1],[490,false,null,null,null,null,1],[491,false,null,null,null,null,1],[492,false,null,null,null,null,1],[493,false,null,null,null,null,1],[494,false,null,null,null,null,1],[495,false,null,null,null,null,1],[496,false,null,null,null,null,1],[497,false,null,null,null,null,1],[498,false,null,null,null,null,1],[499,false,null,null,null,null,1],[500,false,null,null,null,null,1],[501,false,null,null,null,null,1],[502,false,null,null,null,null,1],[503,false,null,null,null,null,1],[504,false,null,null,null,null,1],[505,false,null,null,null,null,1],[506,false,null,null,null,null,1],[507,false,null,null,null,null,1],[508,false,null,null,null,null,1],[509,false,null,null,null,null,1],[510,false,null,null,null,null,1],[511,false,null,null,null,null,1],[512,false,null,null,null,null,1],[513,false,null,null,null,null,1],[514,false,null,null,null,null,1],[515,false,null,null,null,null,1],[516,false,null,null,null,null,1],[517,false,null,null,null,null,1],[518,false,null,null,null,null,1],[519,false,null,null,null,null,1],[520,false,null,null,null,null,1],[521,false,null,null,null,null,1],[522,false,null,null,null,null,1],[523,false,null,null,null,null,1],[524,false,null,null,null,null,1],[525,false,null,null,null,null,1],[526,false,null,null,null,null,1],[527,false,null,null,null,null,1],[528,false,null,null,null,null,1],[529,false,null,null,null,null,1],[530,false,null,null,null,null,1],[531,false,null,null,null,null,1],[532,false,null,null,null,null,1],[533,false,null,null,null,null,1],[534,false,null,null,null,null,1],[535,false,null,null,null,null,1],[536,false,null,null,null,null,1],[537,false,null,null,null,null,1],[538,false,null,null,null,null,1],[539,false,null,null,null,null,1],[540,false,null,null,null,null,1],[541,false,null,null,null,null,1],[542,false,null,null,null,null,1],[543,false,null,null,null,null,1],[544,false,null,null,null,null,1],[545,false,null,null,null,null,1],[546,false,null,null,null,null,1],[547,false,null,null,null,null,1],[548,false,null,null,null,null,1],[549,false,null,null,null,null,1],[550,false,null,null,null,null,1],[551,false,null,null,null,null,1],[552,false,null,null,null,null,1],[553,false,null,null,null,null,1],[554,false,null,null,null,null,1],[555,false,null,null,null,null,1],[556,false,null,null,null,null,1],[557,false,null,null,null,null,1],[558,false,null,null,null,null,1],[559,false,null,null,null,null,1],[560,false,null,null,null,null,1],[561,false,null,null,null,null,1],[562,false,null,null,null,null,1],[563,false,null,null,null,null,1],[564,false,null,null,null,null,1],[565,false,null,null,null,null,1],[566,false,null,null,null,null,1],[567,false,null,null,null,null,1],[568,false,null,null,null,null,1],[569,false,null,null,null,null,1],[570,false,null,null,null,null,1],[571,false,null,null,null,null,1],[572,false,null,null,null,null,1],[573,false,null,null,null,null,1],[574,false,null,null,null,null,1],[575,false,null,null,null,null,1],[576,false,null,null,null,null,1],[577,false,null,null,null,null,1],[578,false,null,null,null,null,1],[579,false,null,null,null,null,1],[580,false,null,null,null,null,1],[581,false,null,null,null,null,1],[582,false,null,null,null,null,1],[583,false,null,null,null,null,1],[584,false,null,null,null,null,1],[585,false,null,null,null,null,1],[586,false,null,null,null,null,1],[587,false,null,null,null,null,1],[588,false,null,null,null,null,1],[589,false,null,null,null,null,1],[590,false,null,null,null,null,1],[591,false,null,null,null,null,1],[592,false,null,null,null,null,1],[593,false,null,null,null,null,1],[594,false,null,null,null,null,1],[595,false,null,null,null,null,1],[596,false,null,null,null,null,1],[597,false,null,null,null,null,1],[598,false,null,null,null,null,1],[598,false,null,null,null,null,0],[599,false,null,null,null,null,1],[600,false,null,null,null,null,1],[601,false,null,null,null,null,1],[602,false,null,null,null,null,1],[603,false,null,null,null,null,1],[604,false,null,null,null,null,1],[605,false,null,null,null,null,1],[606,false,null,null,null,null,1],[607,false,null,null,null,null,1],[608,false,null,null,null,null,1],[609,false,null,null,null,null,1],[610,false,null,null,null,null,1],[611,false,null,null,null,null,1],[612,false,null,null,null,null,1],[613,false,null,null,null,null,1],[614,false,null,null,null,null,1],[615,false,null,null,null,null,1],[616,false,null,null,null,null,1],[617,false,null,null,null,null,1],[618,false,null,null,null,null,1],[619,false,null,null,null,null,1],[620,false,null,null,null,null,1],[621,false,null,null,null,null,1],[622,false,null,null,null,null,1],[623,false,null,null,null,null,1],[624,false,null,null,null,null,1],[625,false,null,null,null,null,1],[626,false,null,null,null,null,1],[627,false,null,null,null,null,1],[628,false,null,null,null,null,1],[629,false,null,null,null,null,1],[630,false,null,null,null,null,1],[631,false,null,null,null,null,1],[632,false,null,null,null,null,1],[633,false,null,null,null,null,1],[634,false,null,null,null,null,1],[635,false,null,null,null,null,1],[636,false,null,null,null,null,1],[637,false,null,null,null,null,1],[638,false,null,null,null,null,1],[639,false,null,null,null,null,1],[640,false,null,null,null,null,1],[641,false,null,null,null,null,1],[642,false,null,null,null,null,1],[643,false,null,null,null,null,1],[644,false,null,null,null,null,1],[645,false,null,null,null,null,1],[646,false,null,null,null,null,1],[647,false,null,null,null,null,1],[648,false,null,null,null,null,1],[649,false,null,null,null,null,1],[650,false,null,null,null,null,1],[651,false,null,null,null,null,1],[652,false,null,null,null,null,1],[653,false,null,null,null,null,1],[654,false,null,null,null,null,1],[655,false,null,null,null,null,1],[656,false,null,null,null,null,1],[657,false,null,null,null,null,1],[658,false,null,null,null,null,1],[659,false,null,null,null,null,1],[660,false,null,null,null,null,1],[661,false,null,null,null,null,1],[662,false,null,null,null,null,1],[663,false,null,null,null,null,1],[664,false,null,null,null,null,1],[665,false,null,null,null,null,1],[666,false,null,null,null,null,1],[667,false,null,null,null,null,1],[668,false,null,null,null,null,1],[669,false,null,null,null,null,1],[670,false,null,null,null,null,1],[671,false,null,null,null,null,1],[672,false,null,null,null,null,1],[673,false,null,null,null,null,1],[674,false,null,null,null,null,1],[675,false,null,null,null,null,1],[676,false,null,null,null,null,1],[677,false,null,null,null,null,1],[678,false,null,null,null,null,1],[679,false,null,null,null,null,1],[680,false,null,null,null,null,1],[681,false,null,null,null,null,1],[682,false,null,null,null,null,1],[683,false,null,null,null,null,1],[684,false,null,null,null,null,1],[685,false,null,null,null,null,1],[686,false,null,null,null,null,1],[687,false,null,null,null,null,1],[688,false,null,null,null,null,1],[689,false,null,null,null,null,1],[690,false,null,null,null,null,1],[691,false,null,null,null,null,1],[692,false,null,null,null,null,1],[693,false,null,null,null,null,1],[694,false,null,null,null,null,1],[695,false,null,null,null,null,1],[696,false,null,null,null,null,1],[697,false,null,null,null,null,1],[698,false,null,null,null,null,1],[699,false,null,null,null,null,1],[700,false,null,null,null,null,1],[701,false,null,null,null,null,1],[702,false,null,null,null,null,1],[703,false,null,null,null,null,1],[704,false,null,null,null,null,1],[705,false,null,null,null,null,1],[706,false,null,null,null,null,1],[707,false,null,null,null,null,1],[708,false,null,null,null,null,1],[709,false,null,null,null,null,1],[710,false,null,null,null,null,1],[711,false,null,null,null,null,1],[712,false,null,null,null,null,1],[713,false,null,null,null,null,1],[714,false,null,null,null,null,1],[715,false,null,null,null,null,1],[716,false,null,null,null,null,1],[717,false,null,null,null,null,1],[718,false,null,null,null,null,1],[719,false,null,null,null,null,1],[720,false,null,null,null,null,1],[721,false,null,null,null,null,1],[722,false,null,null,null,null,1],[723,false,null,null,null,null,1],[724,false,null,null,null,null,1],[725,false,null,null,null,null,1],[726,false,null,null,null,null,1],[727,false,null,null,null,null,1],[728,false,null,null,null,null,1],[729,false,null,null,null,null,1],[730,false,null,null,null,null,1],[731,false,null,null,null,null,1],[732,false,null,null,null,null,1],[733,false,null,null,null,null,1],[734,false,null,null,null,null,1],[735,false,null,null,null,null,1],[736,false,null,null,null,null,1],[737,false,null,null,null,null,1],[738,false,null,null,null,null,1],[739,false,null,null,null,null,1],[740,false,null,null,null,null,1],[741,false,null,null,null,null,1],[742,false,null,null,null,null,1],[743,false,null,null,null,null,1],[744,false,null,null,null,null,1],[745,false,null,null,null,null,1],[746,false,null,null,null,null,1],[747,false,null,null,null,null,1],[748,false,null,null,null,null,1],[749,false,null,null,null,null,1],[750,false,null,null,null,null,1],[751,false,null,null,null,null,1],[752,false,null,null,null,null,1],[753,false,null,null,null,null,1],[754,false,null,null,null,null,1],[755,false,null,null,null,null,1],[756,false,null,null,null,null,1],[757,false,null,null,null,null,1],[758,false,null,null,null,null,1],[759,false,null,null,null,null,1],[760,false,null,null,null,null,1],[761,false,null,null,null,null,1],[762,false,null,null,null,null,1],[763,false,null,null,null,null,1],[764,false,null,null,null,null,1],[765,false,null,null,null,null,1],[766,false,null,null,null,null,1],[767,false,null,null,null,null,1],[768,false,null,null,null,null,1],[769,false,null,null,null,null,1],[770,false,null,null,null,null,1],[771,false,null,null,null,null,1],[772,false,null,null,null,null,1],[773,false,null,null,null,null,1],[774,false,null,null,null,null,1],[775,false,null,null,null,null,1],[776,false,null,null,null,null,1],[777,false,null,null,null,null,1],[778,false,null,null,null,null,1],[779,false,null,null,null,null,1],[780,false,null,null,null,null,1],[781,false,null,null,null,null,1],[782,false,null,null,null,null,1],[783,false,null,null,null,null,1],[784,false,null,null,null,null,1],[785,false,null,null,null,null,1],[786,false,null,null,null,null,1],[787,false,null,null,null,null,1],[788,false,null,null,null,null,1],[789,false,null,null,null,null,1],[790,false,null,null,null,null,1],[791,false,null,null,null,null,1],[792,false,null,null,null,null,1],[793,false,null,null,null,null,1],[794,false,null,null,null,null,1],[795,false,null,null,null,null,1],[796,false,null,null,null,null,1],[797,false,null,null,null,null,1],[798,false,null,null,null,null,1],[799,false,null,null,null,null,1],[800,false,null,null,null,null,1],[801,false,null,null,null,null,1],[802,false,null,null,null,null,1],[803,false,null,null,null,null,1],[804,false,null,null,null,null,1],[805,false,null,null,null,null,1],[806,false,null,null,null,null,1],[807,false,null,null,null,null,1],[808,false,null,null,null,null,1],[809,false,null,null,null,null,1],[810,false,null,null,null,null,1],[811,false,null,null,null,null,1],[812,false,null,null,null,null,1],[813,false,null,null,null,null,1],[814,false,null,null,null,null,1],[815,false,null,null,null,null,1],[816,false,null,null,null,null,1],[817,false,null,null,null,null,1],[818,false,null,null,null,null,1],[819,false,null,null,null,null,1],[820,false,null,null,null,null,1],[821,false,null,null,null,null,1],[822,false,null,null,null,null,1],[823,false,null,null,null,null,1],[824,false,null,null,null,null,1],[825,false,null,null,null,null,1],[826,false,null,null,null,null,1],[827,false,null,null,null,null,1],[828,false,null,null,null,null,1],[829,false,null,null,null,null,1],[830,false,null,null,null,null,1],[831,false,null,null,null,null,1],[832,false,null,null,null,null,1],[833,false,null,null,null,null,1],[834,false,null,null,null,null,1],[835,false,null,null,null,null,1],[836,false,null,null,null,null,1],[837,false,null,null,null,null,1],[838,false,null,null,null,null,1],[839,false,null,null,null,null,1],[840,false,null,null,null,null,1],[841,false,null,null,null,null,1],[842,false,null,null,null,null,1],[843,false,null,null,null,null,1],[844,false,null,null,null,null,1],[845,false,null,null,null,null,1],[846,false,null,null,null,null,1],[847,false,null,null,null,null,1],[848,false,null,null,null,null,1],[849,false,null,null,null,null,1],[850,false,null,null,null,null,1],[851,false,null,null,null,null,1],[852,false,null,null,null,null,1],[853,false,null,null,null,null,1]],"schema":{"category":6,"column":5,"implementation":2,"line":4,"location":0,"optimizations":3,"relevantForJS":1}},"markers":{"data":[],"schema":{"data":2,"name":0,"time":1}},"name":"GeckoMain","pid":82383,"processType":"default","registerTime":0.0,"samples":{"data":[[11,0.12100999999999999],[13,0.683407],[13,0.754216],[15,0.7698699999999999],[15,0.799191],[15,0.815376],[24,0.8292459999999999],[24,0.895161],[27,0.9119160000000001],[27,0.9775770000000001],[32,0.9940769999999999],[36,1.061464],[36,1.118244],[36,1.162686],[40,1.1756710000000001],[41,1.244982],[41,1.303946],[42,1.333633],[42,1.390542],[42,1.4184359999999998],[42,1.4297579999999999],[42,1.442941],[45,1.4541739999999999],[45,1.53463],[45,1.553543],[45,1.6004990000000001],[48,1.642307],[51,1.684312],[60,1.708167],[62,1.859087],[62,1.885297],[62,1.9327649999999998],[62,1.997926],[62,2.095476],[62,2.2013279999999997],[62,2.2586690000000003],[62,2.318781],[62,2.343843],[62,2.428665],[62,2.465852],[62,2.481166],[62,2.5316330000000002],[62,2.576302],[62,2.589024],[62,2.629484],[62,2.643905],[62,2.6942340000000002],[62,2.709408],[62,2.769979],[62,2.791976],[62,2.8201150000000004],[62,2.8643929999999997],[62,2.935144],[62,2.979786],[62,3.001895],[62,3.0244500000000003],[62,3.070161],[62,3.1117179999999998],[62,3.158163],[62,3.199541],[62,3.2226160000000004],[62,3.247041],[74,3.2697410000000002],[82,3.311795],[93,3.352004],[95,3.389011],[101,3.4172540000000002],[102,3.455237],[106,3.4803680000000004],[112,3.504864],[113,3.5453669999999997],[119,3.605282],[126,3.66966],[144,3.707308],[146,3.745872],[148,3.770995],[149,4.0268120000000005],[150,4.074934],[151,4.111073],[159,4.143279],[162,4.165906],[169,4.191663],[181,4.2182640000000005],[187,4.262905],[196,4.290583],[206,4.3203260000000006],[208,4.348439],[219,4.374155999999999],[229,4.482571],[234,4.540174],[237,4.577554999999999],[240,4.6343570000000005],[242,4.707189],[248,4.7545],[251,4.78709],[266,4.819285000000001],[269,4.858582],[273,4.8894589999999996],[290,4.921336],[302,4.95732],[304,4.992041],[305,5.050206],[313,5.096490999999999],[316,5.131087],[319,5.192058],[321,5.223574],[327,5.2552010000000005],[338,5.287936],[348,5.340001],[349,5.374159],[351,5.426991],[355,5.473401999999999],[361,5.504756],[365,5.550151],[369,5.600846],[371,5.667112],[373,5.710964],[375,5.763090999999999],[380,5.805905999999999],[384,5.835177000000001],[385,5.88107],[402,5.909827],[404,5.942901000000001],[408,5.971475000000001],[411,5.99977],[417,6.0277400000000005],[428,6.060714],[430,6.090863000000001],[444,6.118511],[446,6.171062],[450,6.215431000000001],[455,6.308756000000001],[462,6.337682],[471,6.387131],[477,6.417891999999999],[481,6.487007999999999],[485,6.5675930000000005],[494,6.598231],[496,6.632497],[500,6.662551],[501,6.709587],[503,6.75831],[517,6.787921],[521,6.846321],[525,6.887868999999999],[528,6.926053],[533,6.959453],[543,6.992845999999999],[545,7.026415999999999],[547,7.0591170000000005],[550,7.091118000000001],[552,7.125775],[565,7.158597],[576,7.194583],[578,7.2330570000000005],[582,7.267605],[586,7.298774],[590,7.329738],[594,7.360953],[603,7.424761999999999],[614,7.459388],[626,7.495476],[629,7.547313],[634,7.577891],[638,7.6091429999999995],[642,7.64037],[645,7.674336],[647,7.705468],[653,7.736776],[657,7.768828],[661,7.799726],[671,7.831904000000001],[672,7.865534],[673,7.911628],[679,7.940983],[683,7.972290999999999],[686,8.002865],[687,8.034816],[694,8.063777],[699,8.094722],[701,8.125093999999999],[705,8.154296],[708,8.183553999999999],[710,8.211992],[717,8.240781],[720,8.296371],[732,8.337627],[738,8.370888],[741,8.415346000000001],[738,8.446137],[720,8.491895],[742,8.551654000000001],[745,8.580480999999999],[738,8.611583000000001],[720,8.648159000000001],[738,8.689245999999999],[720,8.727322],[754,8.788071],[757,8.820523],[765,8.850046],[781,8.914128],[782,8.950441],[783,8.984547000000001],[783,9.008017],[783,9.030586],[783,9.053109000000001],[783,9.075721],[783,9.098076],[783,9.12033],[783,9.142643000000001],[783,9.165245],[783,9.188858],[783,9.211129999999999],[783,9.233542000000002],[785,9.278696],[796,9.324699],[800,9.359518000000001],[802,9.391406],[810,9.419891],[720,9.453046],[813,9.538509000000001],[814,9.569673000000002],[813,9.600276],[738,9.629141],[816,9.664732],[720,9.694211],[818,9.766517],[813,9.796713],[765,9.825781000000001],[782,9.881839999999999],[783,9.912178],[783,9.936597],[783,9.959017000000001],[783,9.981449999999999],[783,10.003761],[783,10.025848],[783,10.048043],[783,10.070531],[783,10.092867],[783,10.115157],[783,10.137547],[783,10.161261],[823,10.207130999999999],[830,10.254821000000002],[835,10.314846000000001],[836,10.342753],[836,10.365611],[836,10.387805],[836,10.409896],[836,10.432063],[836,10.454171],[836,10.477661],[836,10.499905],[836,10.521961],[836,10.544028],[836,10.566009],[836,10.588136],[836,10.610611],[841,10.656063],[850,10.704985],[858,10.738591000000001],[869,10.774941],[873,10.815064],[880,10.891542000000001],[883,10.923157],[886,10.955351],[893,10.984829999999999],[898,11.021947],[899,11.101547],[899,11.12474],[899,11.146881],[899,11.170248],[899,11.192053],[899,11.213846],[899,11.235846],[899,11.258450999999999],[899,11.280254],[899,11.302401999999999],[899,11.3244],[906,11.369799],[911,11.417926],[916,11.4511],[920,11.481969999999999],[924,11.518226],[929,11.553631],[935,11.586885],[939,11.625241999999998],[941,11.679896000000001],[944,11.729379],[956,11.797851],[957,11.865793],[968,11.899233],[971,11.935846999999999],[972,11.96757],[979,11.997496],[985,12.029606999999999],[992,12.063265999999999],[997,12.097246],[1003,12.128496],[1011,12.180468],[1019,12.215958],[1023,12.255306000000001],[1031,12.288464000000001],[1046,12.334861],[1047,12.374779],[1052,12.408283],[1054,12.442748],[1072,12.476341],[1074,12.514873],[1076,12.551336],[1088,12.617292],[1092,12.717017],[1098,12.763831]],"schema":{"responsiveness":2,"rss":3,"stack":0,"time":1,"uss":4}},"stackTable":{"data":[[null,0],[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,7],[8,8],[9,9],[10,10],[10,11],[12,12],[12,13],[14,14],[12,15],[16,16],[17,17],[18,18],[19,19],[20,20],[21,21],[22,22],[23,23],[22,24],[25,25],[26,26],[12,27],[28,28],[29,29],[30,30],[31,31],[6,32],[33,33],[34,34],[35,35],[3,36],[37,37],[38,38],[39,39],[1,40],[null,41],[null,42],[43,43],[44,44],[44,45],[46,46],[47,47],[47,48],[49,49],[50,50],[47,51],[52,52],[53,53],[54,54],[55,55],[56,56],[57,57],[58,58],[59,59],[54,60],[61,61],[47,62],[63,63],[64,64],[65,65],[66,66],[67,67],[68,68],[69,69],[70,70],[71,71],[72,72],[73,73],[47,74],[75,75],[76,76],[77,77],[78,78],[79,79],[80,80],[81,81],[77,82],[83,83],[84,84],[85,85],[86,86],[87,87],[88,88],[89,89],[90,90],[91,91],[92,92],[92,93],[94,94],[76,95],[96,96],[97,97],[98,98],[99,99],[100,100],[99,101],[76,102],[103,103],[104,104],[105,105],[76,106],[107,107],[108,108],[109,109],[110,110],[111,111],[76,112],[75,113],[114,114],[115,115],[116,116],[117,117],[118,118],[118,116],[120,119],[121,116],[122,120],[123,121],[124,122],[125,123],[120,124],[127,116],[128,116],[129,125],[130,126],[131,127],[132,64],[133,65],[134,66],[135,67],[136,68],[137,69],[138,70],[139,71],[140,72],[141,128],[142,129],[143,130],[128,131],[145,132],[128,133],[147,134],[128,135],[128,136],[128,137],[null,65],[152,66],[153,67],[154,68],[155,69],[156,70],[157,71],[158,138],[120,139],[160,140],[161,141],[120,142],[163,116],[164,143],[165,144],[166,145],[167,146],[168,147],[168,148],[170,64],[171,65],[172,66],[173,67],[174,68],[175,69],[176,70],[177,71],[178,72],[179,149],[180,150],[170,151],[182,152],[183,153],[184,154],[185,155],[186,156],[183,157],[188,158],[189,159],[190,160],[191,161],[192,162],[193,163],[194,154],[195,164],[183,64],[197,65],[198,66],[199,67],[200,68],[201,69],[202,70],[203,71],[204,165],[205,166],[168,167],[207,168],[167,169],[209,64],[210,65],[211,66],[212,67],[213,68],[214,69],[215,70],[216,71],[217,165],[218,170],[165,171],[220,172],[221,173],[222,174],[223,175],[224,176],[225,177],[226,178],[227,179],[228,136],[117,180],[230,116],[231,181],[232,116],[233,182],[231,183],[235,184],[236,185],[231,186],[238,184],[239,187],[117,188],[241,189],[117,190],[243,116],[244,191],[245,192],[246,193],[247,137],[117,194],[249,195],[250,196],[117,197],[252,198],[253,199],[254,64],[255,65],[256,66],[257,67],[258,68],[259,69],[260,70],[261,71],[262,72],[263,128],[264,129],[265,200],[117,201],[267,116],[268,202],[115,203],[270,204],[271,205],[272,206],[271,207],[274,208],[275,116],[276,209],[277,116],[278,64],[279,65],[280,66],[281,67],[282,68],[283,69],[284,70],[285,71],[286,72],[287,128],[288,129],[289,210],[274,211],[291,116],[292,64],[293,65],[294,66],[295,67],[296,68],[297,69],[298,70],[299,71],[300,72],[301,212],[274,213],[303,214],[274,215],[274,216],[306,217],[307,218],[308,219],[309,220],[310,221],[311,222],[312,223],[274,224],[314,225],[315,226],[271,227],[317,228],[318,229],[271,230],[320,231],[271,232],[322,233],[323,234],[324,235],[325,236],[326,237],[271,238],[328,239],[329,240],[330,241],[331,242],[332,243],[333,244],[334,245],[335,246],[336,174],[337,247],[328,248],[339,249],[340,250],[341,251],[342,252],[343,244],[344,245],[345,246],[346,174],[347,247],[340,253],[328,254],[350,255],[271,256],[352,257],[353,258],[354,259],[353,260],[356,261],[357,262],[358,263],[359,264],[360,265],[353,266],[362,261],[363,267],[364,268],[353,269],[366,261],[367,270],[368,271],[353,272],[370,273],[353,274],[372,275],[352,276],[374,277],[352,278],[376,261],[377,262],[378,263],[379,279],[352,280],[381,261],[382,267],[383,268],[271,281],[271,282],[386,283],[387,284],[388,285],[389,286],[390,240],[391,241],[392,242],[393,287],[394,244],[395,245],[396,246],[397,174],[398,175],[399,288],[400,289],[401,290],[271,291],[403,292],[403,293],[405,294],[406,295],[407,296],[403,297],[409,294],[410,298],[271,299],[412,300],[413,301],[414,302],[415,303],[416,304],[271,305],[418,64],[419,65],[420,66],[421,67],[422,68],[423,69],[424,70],[425,71],[426,165],[427,306],[114,307],[429,308],[114,309],[431,310],[432,311],[433,312],[434,313],[435,314],[436,315],[437,316],[438,317],[439,318],[440,319],[441,320],[442,321],[443,322],[433,323],[445,324],[434,325],[447,326],[448,327],[449,328],[114,329],[451,330],[452,331],[453,332],[454,333],[451,334],[456,335],[457,96],[458,97],[459,98],[460,99],[461,100],[456,336],[463,337],[464,338],[465,339],[466,340],[467,315],[468,316],[469,341],[470,342],[463,343],[472,344],[473,345],[474,346],[475,347],[476,348],[472,349],[478,350],[479,351],[480,352],[475,353],[482,354],[483,355],[484,356],[473,357],[486,358],[487,359],[488,360],[489,361],[490,362],[491,363],[492,364],[493,365],[484,366],[495,367],[472,368],[497,369],[498,370],[499,371],[495,372],[463,373],[502,374],[502,375],[504,376],[505,377],[506,378],[507,379],[508,380],[509,381],[510,382],[511,383],[512,384],[513,385],[514,386],[515,56],[516,387],[502,388],[518,389],[519,390],[520,391],[502,392],[522,393],[523,394],[524,395],[524,396],[526,397],[527,398],[502,399],[529,400],[530,401],[531,402],[532,403],[502,404],[534,350],[535,351],[536,405],[537,406],[538,318],[539,319],[540,320],[541,321],[542,407],[541,408],[544,409],[537,410],[546,411],[541,412],[548,413],[549,414],[537,415],[551,416],[502,417],[553,418],[554,419],[555,420],[556,421],[557,422],[558,318],[559,319],[560,320],[561,321],[562,423],[563,424],[564,425],[556,426],[566,427],[567,428],[568,429],[569,430],[570,431],[571,318],[572,319],[573,320],[574,321],[575,432],[562,433],[577,434],[456,435],[579,436],[580,437],[581,438],[114,439],[583,440],[584,441],[585,442],[583,443],[587,444],[588,445],[589,446],[588,447],[591,448],[592,449],[593,450],[592,451],[595,452],[596,453],[597,454],[598,455],[599,456],[600,457],[601,458],[602,459],[595,460],[604,461],[605,462],[606,463],[607,464],[608,465],[609,285],[610,286],[611,240],[612,241],[613,466],[592,467],[615,468],[616,469],[617,453],[618,470],[619,471],[620,472],[621,473],[622,474],[623,475],[624,476],[625,477],[592,478],[627,479],[628,480],[592,481],[630,482],[631,483],[632,484],[633,485],[592,486],[635,487],[636,488],[637,489],[636,490],[639,491],[640,483],[641,492],[636,493],[643,494],[644,495],[636,496],[646,497],[592,498],[648,499],[649,500],[650,501],[651,502],[652,503],[592,504],[654,474],[655,505],[656,506],[592,507],[658,240],[659,241],[660,466],[592,508],[662,509],[663,510],[664,453],[665,470],[666,471],[667,511],[668,512],[669,513],[670,514],[592,515],[592,516],[592,517],[674,518],[675,519],[676,520],[677,521],[678,522],[592,523],[680,524],[681,525],[682,526],[592,527],[684,528],[685,529],[592,530],[592,531],[688,532],[689,533],[690,534],[691,454],[692,535],[693,536],[591,537],[695,538],[696,240],[697,241],[698,466],[75,539],[700,540],[700,541],[702,542],[703,543],[704,544],[75,545],[706,546],[707,547],[707,548],[709,549],[709,550],[711,551],[712,552],[713,553],[714,554],[715,555],[716,556],[709,557],[718,558],[719,559],[709,560],[721,561],[722,562],[723,563],[724,564],[725,565],[726,566],[727,567],[728,568],[729,320],[730,321],[731,569],[709,570],[733,552],[734,553],[735,554],[736,555],[737,556],[725,571],[739,572],[740,573],[719,574],[721,575],[743,576],[744,577],[724,578],[746,579],[747,568],[748,320],[749,321],[750,580],[751,581],[752,582],[753,583],[709,584],[755,585],[756,586],[755,587],[758,588],[759,589],[760,590],[761,591],[762,592],[763,555],[764,556],[760,593],[766,594],[767,595],[768,596],[769,64],[770,65],[771,66],[772,67],[773,68],[774,69],[775,70],[776,71],[777,72],[778,128],[779,129],[780,597],[769,598],[769,599],[759,600],[784,601],[784,602],[786,603],[787,357],[788,604],[789,605],[790,606],[791,607],[792,608],[793,609],[794,610],[795,611],[788,612],[797,613],[798,614],[799,615],[709,616],[801,617],[709,618],[803,619],[804,320],[805,321],[806,620],[807,621],[808,622],[809,623],[721,624],[811,625],[812,626],[750,627],[755,628],[815,629],[746,630],[817,631],[797,632],[819,633],[820,634],[821,635],[822,636],[755,637],[824,638],[825,590],[826,591],[827,592],[828,555],[829,556],[825,593],[831,594],[832,595],[833,596],[834,598],[834,599],[824,639],[837,640],[838,641],[839,642],[840,643],[840,644],[842,645],[843,645],[844,645],[845,646],[846,647],[847,648],[848,649],[849,650],[837,651],[851,652],[852,653],[853,654],[854,655],[855,656],[856,370],[857,657],[707,658],[859,659],[860,660],[861,661],[862,662],[863,551],[864,552],[865,553],[866,554],[867,555],[868,556],[861,663],[870,664],[871,558],[872,559],[870,665],[874,561],[875,562],[876,563],[877,578],[878,630],[879,666],[879,667],[881,668],[882,669],[75,670],[884,671],[885,672],[884,673],[887,674],[888,675],[889,591],[890,592],[891,555],[892,556],[888,676],[894,677],[895,595],[896,596],[897,598],[897,599],[887,678],[900,679],[901,680],[902,681],[903,682],[904,683],[905,684],[903,685],[907,686],[908,687],[909,688],[910,689],[903,690],[912,686],[913,687],[914,688],[915,691],[900,692],[917,693],[918,694],[919,695],[918,696],[921,697],[922,698],[923,699],[923,700],[925,701],[926,702],[927,703],[928,704],[928,705],[930,706],[931,701],[932,702],[933,703],[934,704],[918,707],[936,708],[937,709],[938,710],[936,711],[940,712],[918,713],[942,714],[943,715],[943,716],[945,717],[946,718],[947,719],[948,720],[949,721],[950,722],[951,723],[952,724],[953,725],[954,726],[955,727],[945,728],[918,729],[958,730],[959,731],[960,732],[961,733],[962,734],[963,735],[964,736],[965,737],[966,738],[967,739],[958,740],[969,741],[970,742],[887,743],[884,744],[973,745],[974,746],[975,747],[976,748],[977,749],[978,750],[884,751],[980,752],[981,753],[982,754],[983,755],[984,756],[980,757],[986,758],[987,759],[988,760],[989,761],[990,762],[991,763],[980,764],[993,765],[994,766],[995,767],[996,768],[995,769],[998,770],[999,771],[1000,772],[1001,773],[1002,774],[1000,775],[1004,776],[1005,777],[1006,778],[1007,779],[1008,780],[1009,781],[1010,782],[1008,783],[1012,784],[1013,785],[1014,786],[1015,787],[1016,788],[1017,789],[1018,790],[999,791],[1020,792],[1021,793],[1022,794],[980,795],[1024,796],[1025,797],[1026,798],[1027,799],[1028,800],[1029,801],[1030,123],[1026,802],[1032,803],[1033,804],[1034,805],[1035,806],[1036,807],[1037,808],[1038,809],[1039,810],[1040,811],[1041,812],[1042,809],[1043,813],[1044,814],[1045,815],[1043,816],[1034,817],[1048,818],[1049,819],[1050,820],[1051,821],[1049,822],[1053,823],[1048,824],[1055,825],[1056,826],[1057,827],[1058,828],[1059,829],[1060,64],[1061,65],[1062,66],[1063,67],[1064,68],[1065,69],[1066,70],[1067,71],[1068,72],[1069,128],[1070,830],[1071,166],[1059,831],[1073,832],[1033,833],[1075,834],[1075,835],[1077,836],[1078,837],[1079,838],[1080,839],[1081,840],[1082,841],[1083,842],[1084,843],[1085,261],[1086,270],[1087,844],[1026,845],[1089,846],[1090,847],[1091,848],[1090,849],[1093,850],[1094,851],[1095,852],[1096,853],[1097,854]],"schema":{"frame":1,"prefix":0}},"stringTable":["0x110e82025","0x110e82224","0x110e89eb2","0x110e8386b","0x110e97310","0x110e97299","0x110e9726f","0x110e99421","0x110e994b6","0x110e9ead2","0x110e9e5a4","0x110e9e6c7","0x7fff202d32a2","0x7fff2029f0a9","0x7fff202efda2","0x7fff2029f0b2","0x7fff2029ec7e","0x7fff2029f116","0x7fff20294d9e","0x7fff202b2e5c","0x7fff202b2e09","0x7fff202b1a1a","0x7fff202b0c70","0x7fff202be899","0x7fff202b0cb7","0x7fff202b33bb","0x7fff202c0a70","0x7fff2029f0cc","0x7fff20258bf3","0x7fff20258ab4","0x7fff20324e51","0x7fff20324f86","0x110e994a4","0x110e83567","0x110e99283","0x110ed9897","0x110e9731c","0x110e86ad6","0x110ed5d33","0x110e95533","0x110e89f78","0x109f7c980","0x7fff20344f5d","0x109f7ca66","0x109f7cafb","0x109f7cb28","0x10a019f69","0x10a7ac6c0","0x109f7c23b","0x109f7c415","0x7fff2036c0f0","0x109f7c247","0x109f7c4a9","0x7fff2033b614","0x7fff2033b7d8","0x7fff2016afe5","0x7fff20151792","0x7fff20157cbb","0x7fff2015ad8e","0x7fff202f4212","0x7fff2033b7e9","0x7fff2036c029","0x109f7c253","0x109f7c4cf","0x10aa62310","0x7fff20343c46","0x7fff20343d08","0x110e8654b","0x110ea7f61","0x110ea48eb","0x110ea4659","0x110e95a8b","0x110e9d609","0x110e9d58b","0x109f7c294","0x109f7c595","0x109f7d88e","0x109f83934","0x109f87953","0x109f87bc6","0x109f8a9cc","0x109f8f630","0x109f83ade","0x109f87a94","0x109f88259","0x109f88855","0x109f8ab66","0x109f8ac57","0x109f8af1f","0x109f8b008","0x10a01b7b6","0x109f93559","0x10a33e5e0","0x10a08024f","0x10a33e7fc","0x109f7da53","0x109f8435d","0x109f8f214","0x7fff202250fa","0x7fff20225716","0x7fff202f4ce6","0x7fff202f57c6","0x109f7db47","0x109f847a4","0x109f907b3","0x109f8f71a","0x109f7e3b7","0x109f85427","0x109f94fd8","0x10a01f732","0x10a0289f7","0x10a08cbc1","0x109f7effd","0x109f7c62c","0x109f7f44f","0x108fdb2ed","0x10a7e4e2b","0x109aba8dc","0x109f18961","0x109f1896b","0x109f42d9a","0x7fff202f4178","0x7fff202f53e4","0x7fff202f42ba","0x109f18970","0x109f7221d","0x109f7234d","0x109f715ee","0x110e9d57f","0x110ea3bb0","0x110e99d8d","0x109f71b85","0x7fff2a4b2332","0x109f71c45","0x7fff202f4d86","0x7fff202f6ea2","0x7fff202f7236","0x7fff202f64b2","0x110e9d5c7","0x109f18988","0x109effe51","0x109eff67e","0x109f18992","0x109f68e67","0x109f6f06b","0x109f6efad","0x109f6f4a8","0x109f77b40","0x109f7241f","0x110e9d5c3","0x110ea3357","0x109f72908","0x109f7a50d","0x109f77ec4","0x7fff201919d8","0x7fff201ab748","0x7fff201ab8f7","0x109f77ecd","0x7fff20184ddf","0x7fff20191c33","0x7fff20191d3e","0x7fff2019ba03","0x7fff2019c372","0x7fff2019c7ad","0x7fff201ab703","0x110e9d5ed","0x110e9da54","0x109f72433","0x109f72480","0x109f6f4e0","0x110e9da51","0x109f6e752","0x109f6e547","0x109f73a98","0x109f73614","0x109f7323c","0x109f7458b","0x109f74710","0x109f7508b","0x7fff2015a08e","0x109aba8e1","0x109c4524c","0x7fff202f573e","0x109c49b5f","0x7fff20259171","0x7fff2025905c","0x109c4e00a","0x7fff2025904c","0x109aba8eb","0x1097e5d3e","0x109aba8f0","0x109ce0378","0x1097e533d","0x1097f0ce8","0x109aba929","0x1098cefd8","0x108f78ffa","0x109aba950","0x109f6b0f0","0x109f16d67","0x110e99d2a","0x109aba987","0x7fff201880f7","0x108fdb2f8","0x109cd2f42","0x109ccaa9d","0x109f6c310","0x109ccab0f","0x1096fa820","0x109f148c9","0x110e99d42","0x1096fa8ff","0x110e9d5b4","0x1096fa99d","0x1097200e0","0x10972eb40","0x1096faf8d","0x109f1432a","0x109f16803","0x7fff2024daec","0x7fff2024da45","0x7fff20267975","0x7fff2024155f","0x7fff2036c552","0x1096faff0","0x10972b544","0x109720100","0x109ccc482","0x1097052d0","0x1090476b7","0x109ccc66b","0x109f520c0","0x109ccc872","0x109cde66e","0x10971c4b8","0x10971c6a3","0x10972fe05","0x1096f470e","0x109ccca9f","0x109c83b74","0x10971c55f","0x1096f480d","0x109720d84","0x109719f87","0x109f6e65e","0x109f6e565","0x109f73cd6","0x109f73266","0x109c83a7a","0x109f4c8c0","0x109f4eeda","0x109f4da65","0x109f03236","0x109f4edc1","0x109c83ceb","0x109f4c29a","0x109cccab7","0x109a5e9b3","0x10914ef39","0x109f4c297","0x10915033d","0x109f4c2d2","0x109f4e840","0x109f4dacd","0x109f4dc28","0x109f5b4c6","0x109152119","0x109f4e7a1","0x109f52a61","0x109153ec1","0x109f4e74e","0x109f4e8f0","0x109156793","0x109a82ab7","0x109158fe1","0x109a82c0c","0x109a5f49e","0x7fff203254b6","0x109a5fa4e","0x109f4db16","0x109a613b2","0x109afdfe0","0x109ccecf1","0x109afe3bf","0x109afe103","0x1096f76ae","0x1096f78c8","0x109f06ea8","0x109f7447a","0x109f742f5","0x109f74daf","0x109ccee74","0x10917f940","0x109179f74","0x10917fd4c","0x109188912","0x1091889e8","0x10917ce0e","0x109188905","0x109ccf20c","0x1098a2df1","0x1098a2af1","0x1098c2918","0x1098c23e1","0x1098b0160","0x109ccf38d","0x110e9da74","0x109f7f597","0x109f96000","0x109f7f6f6","0x109f961e1","0x109f9bca2","0x109f9c637","0x109f9ce6e","0x109f9d0cf","0x109f9d1dd","0x109f9d684","0x109f9d824","0x109f95add","0x109f95b04","0x109f95a85","0x109fd91d3","0x10a03380a","0x109f9c6d2","0x109f8f72c","0x109f9cdf4","0x109f9d05d","0x109f85b12","0x109f8f728","0x109f7f789","0x109f97298","0x109f9996a","0x109f9fb33","0x7fff2036c4c9","0x109f9736c","0x109f99dc2","0x109f99fb3","0x109fa02f0","0x109fa3e4f","0x109fa3ea7","0x109fa5e80","0x109f9d834","0x109f9dfe5","0x109fa04b6","0x109fa4465","0x109fa6ca4","0x109fab6a0","0x109facca5","0x109faf9e0","0x109fa48c2","0x109fa6bd5","0x109faac4e","0x109fc4a60","0x109faccbf","0x109faef4d","0x109fb4a82","0x109fbcc96","0x109fa6d34","0x109fabbd3","0x109fbeab8","0x10a026235","0x10a0879aa","0x10a340e88","0x10a48bb84","0x10a50cc42","0x109f8f6fb","0x109fbcf1f","0x109fad187","0x109fa403a","0x109fa637a","0x109fa8ac5","0x10a02113b","0x109fad207","0x109fa05c7","0x109fc0eb0","0x109fa4c89","0x109fa5f97","0x109fa737c","0x109fa7455","0x10a7ef01a","0x109fa791d","0x109f9ea1b","0x109f9ec66","0x109f7a99c","0x109f7ce35","0x7fff20159414","0x7fff2016b352","0x7fff20157d42","0x109fa4d0c","0x109fc0ff7","0x109fc1f7c","0x109fc2051","0x109fa5951","0x109fc1395","0x109fc376e","0x10a027f16","0x10a027edc","0x109fc3f44","0x109fc2884","0x109fa4f50","0x109fc10b1","0x109fc30a2","0x109fc3193","0x10a01bad1","0x109fa5980","0x10a0227cc","0x109fc4aa4","0x10a034495","0x109fd90f6","0x109fd8d93","0x109fc4ae7","0x109fa8349","0x109fd9162","0x10a031c17","0x109f7abfb","0x109fc4c15","0x109fa834f","0x109fa55bb","0x109fc1997","0x109fc38f0","0x109fc39ed","0x109fc3e94","0x109fc3f14","0x10a031e48","0x10a098858","0x109fbc141","0x109fc3b45","0x109fc2035","0x10a7ef3f4","0x109fc28c0","0x109fc2ee2","0x10a027962","0x10a0324f9","0x10a03448e","0x10a098a28","0x109f9a137","0x109fa1140","0x109fc7858","0x109fc7d2f","0x109f7fae5","0x109f97817","0x109fd10a7","0x108fe0ed1","0x109f97824","0x108fdb4fd","0x108fd4368","0x109b22159","0x108fd43ad","0x109b30e52","0x109b233bc","0x109cb153e","0x109b23750","0x109aaa8f9","0x109b854ae","0x109b11f47","0x109b0e932","0x109b7725e","0x109cae82e","0x109caf0b3","0x109cad524","0x109aaa986","0x109b855bc","0x109af4622","0x109af9036","0x108fe2b79","0x109b86417","0x109720dfc","0x109b23973","0x109c2de40","0x109c28c6f","0x109b11eb6","0x109cd3485","0x1098a37f1","0x109c1f3c8","0x10971c54a","0x10971b76c","0x1090085de","0x7fff2036c10c","0x109b23bf5","0x109cb55a4","0x109cb9a81","0x109b23cd8","0x108fcc63f","0x1091efde4","0x1091eff69","0x109aa92fb","0x109b24030","0x109a21d00","0x109a21f96","0x109141290","0x109a223c1","0x108fc792f","0x1091eff4f","0x109a226f8","0x108fcaf8c","0x109148ffe","0x109a22b4c","0x108fe29bb","0x109b243a2","0x109b29c50","0x109c694f2","0x108fc975c","0x1091457bf","0x10913c455","0x109b28dd2","0x10971b73b","0x10972ac18","0x109b28e70","0x109b24c16","0x109c99798","0x109c89c63","0x1098a3547","0x1098c4e4b","0x1098c4fbd","0x10916e9b6","0x109b8cbf0","0x109b2a010","0x109b25682","0x109b8c558","0x109b8c726","0x108fcb13c","0x109149473","0x10913c5f0","0x109b261b8","0x109ad64ce","0x109ad66d4","0x109ac5ea0","0x109b27b97","0x109b2c736","0x109b2d9d0","0x109b40af0","0x109b28faa","0x109b42329","0x109b424f0","0x109cbd3d2","0x109b0e989","0x109a35de9","0x109b30eb0","0x108fd461e","0x109f7c856","0x109fdd071","0x109f7ff7b","0x109fa2be0","0x109fcbc74","0x10a08e030","0x109f7c881","0x109f80db0","0x109fe2750","0x109fdb91b","0x109fdf4c7","0x109fde54a","0x109fa2740","0x109fcac57","0x109fea988","0x10a0364b0","0x10a082b2c","0x7fff202f56b2","0x109fdee9b","0x109fe6ed4","0x7fff202f5946","0x109fdff77","0x109fe739a","0x109fed1a7","0x10a038020","0x10a0380e9","0x10a0381e5","0x10a038605","0x10a038d60","0x109f95c14","0x10a0325ef","0x109fdf8b4","0x10a03817c","0x10a038265","0x10a038774","0x109fecb43","0x109fe7444","0x109fece87","0x10a037074","0x10a038135","0x10a03822c","0x10a032760","0x10a0987e3","0x10a098a35","0x10a0f69d8","0x109fdf0ca","0x109fe7606","0x7fff2033b4ec","0x109fe798e","0x109fee512","0x10a03c058","0x10a03c8ac","0x109f91397","0x10a01e2bc","0x10a03cc3b","0x10a0403ef","0x10a040ed4","0x109ffab66","0x110e99d4f","0x7fff202f5716","0x10a03b361","0x10a09c3e1","0x10a03d54e","0x10a09c464","0x109fac65f","0x109fac783","0x109fbf6e5","0x10a027766","0x10a08a847","0x10a08aaaf","0x10a08ab98","0x10a13cf30","0x109fac412","0x109fbf28f","0x10a027406","0x109f8f736","0x109fdf22b","0x109fe8653","0x109fdfdaa","0x109fe4924","0x10a03232e","0x10a09890e","0x10a0988c8","0x109f9481c","0x109fe7317","0x109fed11d","0x7fff2036c19c","0x10a031ebd","0x109fe78fe","0x7fff2036c001","0x10a038240","0x10a039504","0x109fbf21b","0x10a0272ef","0x10a088da4","0x10a089207","0x10a0896c3","0x109fe7dbc","0x109feec53","0x109feedbc","0x10a03ef98","0x10a04157c","0x10a09d694","0x10a34e8c0","0x10a09d924","0x10a34f8ef","0x10a34f383","0x109fbeec6","0x109fad9dc","0x109face6d","0x109faf9f1","0x10a03f9b6","0x10a0422eb","0x10a09e6a2","0x109fa911e","0x109fa929d","0x10a021436","0x10a021283","0x109fdbd0f","0x109fe167e","0x109ff1290","0x10a0441e9","0x10a0a0b91","0x10a044377","0x10a0a0cfd","0x10a0a0dda","0x10a039431","0x10a039519","0x10a09a221","0x10a038d23","0x109f7c79d","0x109f815f9","0x109ff8b30","0x109f820c9","0x109ff675d","0x109fff8ac","0x109fffc3b","0x10a050d59","0x109ff6b8d","0x10a000532","0x10a0525ec","0x10a0adb02","0x10a0ade78","0x10a0af6b7","0x10a0af798","0x10a0ae19a","0x10a0af6fb","0x10a0af7ef","0x10a3666ec","0x10a36664c","0x10a0aef1a","0x10a365fa0","0x10a0005ec","0x10a052cea","0x10a0bfa4f","0x10a0d3b50","0x10a0bfc2c","0x10a267d34","0x10a270920","0x10a27f711","0x10a27e376","0x10a27f759","0x10a436b65","0x10a27e273","0x10a7ac6ec","0x10a42d305","0x10a4e521d","0x10a0bfcc2","0x10a268337","0x10a0f3a5b","0x10a0f4fc2","0x10a2695b6","0x109fab265","0x10a0bfd86","0x10a269a4b","0x10a28a280","0x10a289afb","0x10a28a4f0","0x10a28cd69","0x10a293743","0x10a29df48","0x10a29c9f6","0x10a4421b1","0x10a441faa","0x10a291694","0x10a0f681c","0x10a0f6a87","0x10a0f8a8f","0x10a105d30","0x10a0c063b","0x10a26ac45","0x10a2a47dc","0x10a39d1d5","0x10a4bed86","0x10a52b677","0x10a52b94f","0x10a52ba38","0x10a5c41b6","0x10a64bc37","0x7fff2036c4d5","0x10a26b2a5","0x109fcd17b","0x109fcea95","0x109ff70be","0x109f82224","0x109ff78c4","0x10a00127a","0x10a003fea","0x10a006c76","0x10a007391","0x10a009ab6","0x109f826d9","0x109ff88e9","0x109ffb785","0x109ffbe0a","0x10a04ba12","0x10a35eec1","0x109ff8412","0x109f7c915","0x109f82b51","0x109f8ef61","0x109f8dfec","0x109f7d13e","0x7fff202f704e","0x109ff8682","0x108fdca43","0x109aa78c8","0x109aa7a54","0x109f50c50","0x109aa7d99","0x1091f00e9","0x109a496ce","0x109a49f5a","0x10992920e","0x1098f8638","0x109a49f84","0x108fe32e7","0x10992baa6","0x109930d80","0x10999f3d6","0x10995d042","0x109960545","0x1099654e1","0x10995de10","0x109970ab6","0x109971080","0x109972299","0x10996a0bb","0x10998606e","0x10996808c","0x1099091a9","0x109a49a8d","0x109a4a444","0x109a5132a","0x109a51610","0x109ff86cb","0x108fdf67d","0x109a469e4","0x1097cdb98","0x109cda55c","0x109f68b03","0x7fff202f8ff6","0x1097cdc34","0x109c80185","0x109c7f71c","0x1091f02da","0x1091f25c3","0x1091f29d5","0x10992bacd","0x109931c87","0x10999e162","0x1099a3bfa","0x1099a4a4e","0x10999e13d","0x1099a3615","0x109992f50","0x1091cb310","0x1091f04c0","0x1091f2848","0x1091f71f2","0x1091f6607","0x109206fb0","0x1091f8079","0x10924f4f0","0x1091f2857","0x1091f46af","0x10924401e","0x10923d28e","0x109200f3d","0x10922d2a6","0x110ea3c49","0x10922d51d","0x10927eb30","0x109c7f88c","0x109195056","0x10919620b","0x109b94e30","0x109b1c177","0x109b81767","0x109c140a4","0x109b82c56","0x109b37cd4","0x109b38030","0x109a80b84","0x109f4e8e2","0x1097cdce6","0x108f584d8","0x108f687a8","0x1098eb188","0x108f74453","0x444bac201027","0x108fd87ef","0x10a093466","0x10a02c940","0x10a092c10"],"tid":5282759,"unregisterTime":12.804566},{"frameTable":{"data":[[0,false,null,null,null,null,1],[1,false,null,null,null,null,1],[2,false,null,null,null,null,1],[3,false,null,null,null,null,1],[4,false,null,null,null,null,1],[5,false,null,null,null,null,1],[6,false,null,null,null,null,1],[7,false,null,null,null,null,1],[8,false,null,null,null,null,1],[9,false,null,null,null,null,1],[6,false,null,null,null,null,0]],"schema":{"category":6,"column":5,"implementation":2,"line":4,"location":0,"optimizations":3,"relevantForJS":1}},"markers":{"data":[],"schema":{"data":2,"name":0,"time":1}},"name":"JavaScriptCore bmalloc scavenger","pid":82383,"processType":"default","registerTime":4.374155999999999,"samples":{"data":[[6,4.374155999999999],[6,4.482571],[10,4.540174],[10,4.577554999999999],[10,4.6343570000000005],[10,4.707189],[10,4.7545],[10,4.78709],[10,4.819285000000001],[10,4.858582],[10,4.8894589999999996],[10,4.921336],[10,4.95732],[10,4.992041],[10,5.050206],[10,5.096490999999999],[10,5.131087],[10,5.192058],[10,5.223574],[10,5.2552010000000005],[10,5.287936],[10,5.340001],[10,5.374159],[10,5.426991],[10,5.473401999999999],[10,5.504756],[10,5.550151],[10,5.600846],[10,5.667112],[10,5.710964],[10,5.763090999999999],[10,5.805905999999999],[10,5.835177000000001],[10,5.88107],[10,5.909827],[10,5.942901000000001],[10,5.971475000000001],[10,5.99977],[10,6.0277400000000005],[10,6.060714],[10,6.090863000000001],[10,6.118511],[10,6.171062],[10,6.215431000000001],[10,6.308756000000001],[10,6.337682],[10,6.387131],[10,6.417891999999999],[10,6.487007999999999],[10,6.5675930000000005],[10,6.598231],[10,6.632497],[10,6.662551],[10,6.709587],[10,6.75831],[10,6.787921],[10,6.846321],[10,6.887868999999999],[10,6.926053],[10,6.959453],[10,6.992845999999999],[10,7.026415999999999],[10,7.0591170000000005],[10,7.091118000000001],[10,7.125775],[10,7.158597],[10,7.194583],[10,7.2330570000000005],[10,7.267605],[10,7.298774],[10,7.329738],[10,7.360953],[10,7.424761999999999],[10,7.459388],[10,7.495476],[10,7.547313],[10,7.577891],[10,7.6091429999999995],[10,7.64037],[10,7.674336],[10,7.705468],[10,7.736776],[10,7.768828],[10,7.799726],[10,7.831904000000001],[10,7.865534],[10,7.911628],[10,7.940983],[10,7.972290999999999],[10,8.002865],[10,8.034816],[10,8.063777],[10,8.094722],[10,8.125093999999999],[10,8.154296],[10,8.183553999999999],[10,8.211992],[10,8.240781],[10,8.296371],[10,8.337627],[10,8.370888],[10,8.415346000000001],[10,8.446137],[10,8.491895],[10,8.551654000000001],[10,8.580480999999999],[10,8.611583000000001],[10,8.648159000000001],[10,8.689245999999999],[10,8.727322],[10,8.788071],[10,8.820523],[10,8.850046],[10,8.914128],[10,8.950441],[10,8.984547000000001],[10,9.008017],[10,9.030586],[10,9.053109000000001],[10,9.075721],[10,9.098076],[10,9.12033],[10,9.142643000000001],[10,9.165245],[10,9.188858],[10,9.211129999999999],[10,9.233542000000002],[10,9.278696],[10,9.324699],[10,9.359518000000001],[10,9.391406],[10,9.419891],[10,9.453046],[10,9.538509000000001],[10,9.569673000000002],[10,9.600276],[10,9.629141],[10,9.664732],[10,9.694211],[10,9.766517],[10,9.796713],[10,9.825781000000001],[10,9.881839999999999],[10,9.912178],[10,9.936597],[10,9.959017000000001],[10,9.981449999999999],[10,10.003761],[10,10.025848],[10,10.048043],[10,10.070531],[10,10.092867],[10,10.115157],[10,10.137547],[10,10.161261],[10,10.207130999999999],[10,10.254821000000002],[10,10.314846000000001],[10,10.342753],[10,10.365611],[10,10.387805],[10,10.409896],[10,10.432063],[10,10.454171],[10,10.477661],[10,10.499905],[10,10.521961],[10,10.544028],[10,10.566009],[10,10.588136],[10,10.610611],[10,10.656063],[10,10.704985],[10,10.738591000000001],[10,10.774941],[10,10.815064],[10,10.891542000000001],[10,10.923157],[10,10.955351],[10,10.984829999999999],[10,11.021947],[10,11.101547],[10,11.12474],[10,11.146881],[10,11.170248],[10,11.192053],[10,11.213846],[10,11.235846],[10,11.258450999999999],[10,11.280254],[10,11.302401999999999],[10,11.3244],[10,11.369799],[10,11.417926],[10,11.4511],[10,11.481969999999999],[10,11.518226],[10,11.553631],[10,11.586885],[10,11.625241999999998],[10,11.679896000000001],[10,11.729379],[10,11.797851],[10,11.865793],[10,11.899233],[10,11.935846999999999],[10,11.96757],[10,11.997496],[10,12.029606999999999],[10,12.063265999999999],[10,12.097246],[10,12.128496],[10,12.180468],[10,12.215958],[10,12.255306000000001],[10,12.288464000000001],[10,12.334861],[10,12.374779],[10,12.408283],[10,12.442748],[10,12.476341],[10,12.514873],[10,12.551336],[10,12.617292],[10,12.717017],[10,12.763831]],"schema":{"responsiveness":2,"rss":3,"stack":0,"time":1,"uss":4}},"stackTable":{"data":[[null,0],[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[3,7],[7,8],[8,9],[9,10]],"schema":{"frame":1,"prefix":0}},"stringTable":["0x7fff20325443","0x7fff203298fc","0x109f79897","0x109f78349","0x109f788fb","0x10a7d75ef","0x7fff202f6cde","0x109f78975","0x109f79b20","0x10a7d768a"],"tid":5282782,"unregisterTime":12.804566}]}
\ No newline at end of file diff --git a/src/runtime.version b/src/runtime.version index 30358191b..b309f488e 100644 --- a/src/runtime.version +++ b/src/runtime.version @@ -1 +1 @@ -913cb9780447be7d
\ No newline at end of file +a36793f60275e5e9
\ No newline at end of file |