cainiaoblog 23.2.189 → 23.2.191
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/appConfigs/config +1 -1
- package/article/14192.html +1 -1
- package/article/53962.html +1 -1
- package/article/c5576490.html +187 -7
- package/atom.xml +22 -22
- package/baidusitemap.xml +403 -403
- package/hosts/github.txt +10 -1
- package/package.json +1 -1
- package/search.xml +3 -3
- package/sitemap.xml +346 -346
package/appConfigs/config
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
1A399589A7FA0F24D60BD94F13E5AE8115690C5A589A312CDB7990FA047720BC82797471F64DD1F668BAAEA97B424AFC036B654B211B783DBD8EBEF0187D49B74FE42AD36551C46026A4763B7D2C5DA9434AE8AB15CDFD43FC924E60FE0F53BA18468531EF46D9137414A3BA203652DA5138ED819550C8013131BCA455D9DD52218372692E708E2A9A9A6273F7495DCE1CDDFAB4A01F7986FEC02B993AC0130210257B818DE3A4302A387F4224C0941C0CEBC1609C68A74DD2C614106F1ED6E6010FD1FA3F703D60016FC52FFA1D5928C480D4B5AE83FB824319ACCA8AABCCA056CCFC7626E140FDD7D93C355816C9022345D4B500F2DACEDD22FD2B73F92E038FE12487D9B3290AAED27160B8005D3CCEB482E7797823990C7FAA3C55D54DC373F6AF71C5A50C4EBD7BCE0D45AE006C24733131F4E3E56FBCF6AE2337BD64D5D5996EEB65FE7F7247E0119C19D2B0FCB201F4D6E70CE8552B76B4B7C13CDCC3219F5E62C61C3551A8E683888862D247C18EFA2B958654C68EEB6B70E0895FBB7590725BDF2DFB6B31F41873D38C08564BE80FE33A86839E1D1F8FCBD9224DDE5411DDF04D48FDE3481287EC7D7456DC75C2EFD5E7F2FFF2150AC310C462032C4FEECE38E827982419B02F20D0941FC909E859E8F2D34ECB2BD0F28857A14490700542D4DF5F90857C4F7F674256928068834170BF4E7EB985251383159125FCF0057C9A80AF7E4181A39CB0481313DC23F86B886D63FBD1D71FCFE962F8041A660E7D46B58FAF136F70B190060CB1ECA335CC044F4825E90DA3A79BE88E31480D0BCFFA4B921724C693049A8BCE898F6B77B1B3085DE9AA3CA43BA63CC580A2DE0D7FD4D0BFBE903683CDBAF92D0D40B4432ECECE5CE35E7F7A2CA9242AB15CEBC1D3A75AE20E1E35437FC615B39EE45AC09AC9A16EB5CFBB7787D4A8B9C0D56A2B5806562774F9494750E07D4BA0ECE4EB2AA7CA8D0356C79E01E339507118BA49E127938CD91C132B4339359808B861373A99EEB6C1B1E60015957BD22A4916872EE9360A6270154C270E9CB7E535071A3712D647DECD43F03C0D419EC9D9B98EDDD8BCB7634415FD68FC6B02DC0DA71212C3F10BF8E9563D83257617ECAFD050470E82BE3422700486F70D94B6960E2E6DD048DA3A4456AC959B5BE4A4C0EB647B5033A50AE2677BADD14EAFFFB43EFA97B209AB3B203A500A1728A986E55F09BE7923B90DD58D42758A76350C24AA04F50E4BBABC9DC0EA1926CA817238641B1B450518085D2E4038C2EA338AEA225AB59C29D6CA3A3F77F06A678E8056911657A2CE86E8D7B0E347DD6B8E2B57CBCE4B68E8439FCD7446BDA5F78E15AA6684873DD5B7A63D6E03C1D3B707A054BFE36BBDC88C65AF690FA169F5889E9A37DD751D44164FDC32AC7758CB6F2426229D00B8D2AABCCBFA3A56A26EDE96106A3F19E653E3826B499B2CF9DEBCA2276B9249307AE2CC97E0FF6924005645E36FC2A1CA3EAA0238A63AFE72AA996DB736F5FCA08B76FDADFEE41D7DC91DE0D3FFF809A9A111A310EFD333674CF9C8D7402C31BB19758AF0206ED1839F046CC3947B99E81CBD989F9662D9F201C05EBDC531563433A5A1CAEC5F7255A69C784BF9D536C30BDEEA5BDBFC86FC08A6C2162D1B06F64607E5039F6641BAABBA23B7C7A33C8838BF2285B69FCA892B64A16672D571FD4709CA7CC88AF66236A09AABB16AC759ADDEC3AA1CB484DE19B85F9BE9A4F2D5BA08BA9B1E6A3613FD033E02206D99F68D670B8198AB2BFD2754C085118EE994C496ABECED334D38B278B30F8CEF97C2679F5E4B6390338638D510756765AF0FE20FE3116DD21E15238AABC24F041A33329C3E58A4E47674E820EFA99BDD26B0333718491BF6399D7515684D329E6C1C65E5BC2FECC2CDCC13F11BF773A4BEB8D4E7248101912C7E50894F8E0E65B12BA8D6E4DC1A457630A6F5D888B00B749033FD4FE839F6C37E02CFC55BEBCE5DE5EDF073A064C8FB8D1E022F499C2E51740450325C5C49553008677708C2852CF6E905602C51F8B51E010E0F53B9E622C421A04CCD8827429FDE4CCB916F0439C63931ABCF4C8A0DFA6A88100AA5E6D4B1F542BB9DC66E19D3163925CA044E14567AF10F723EDC3F3E407D20DD8A312D833F3C491EA2B4ED2AB157415350F36762AAA3D08F4BC1DA8958958A49F6B13529AAB74FA924657B628C0858B7E29F07DF0895B1F3E5B756D78163DB7C0070DC87F30C53C6E1EEDD7799C8821498A74C21105CC9044E37B7AAB68341A801E55918BFEB19E8CDE0F5986D5BBE622F037C644D0C81AE81BE4E18405BD0B46118A20C81FCB646647BBA9F946EFD90DAE409074CEBC4D3B55DFA17F79A1B4141B7DD69DEABE623C6FFC525908A627DB31681BBEDC6DD53DBBCF08DA2C076226C19C6FAFB603102F6F78000C794DBAE8696C7D2DFAD2A5F30F4134E55259F7A0E2841EBB2361E64328B42B19B0A848CFCD99C26FCBB47EDD9B7F3154A8078178FD651B90797C649CD69950BFACF75724F2CE7BA88C6EFEB9084C5FE68FDB594924593789EE3C248F4A1D0C1E5577C734923237177C6FA89DE2ECDBA0DD1AD520544CE6C2E22A3AB334411E4AEE1F5548F42DD71AD50BFCD3C8A4C0A6ABE9DE29BC9DDD68E2E3C500CCFCD2BCD28CF1F523A7D9C228484DFCCFE4793B86A092DA6C4E03A1808BF108BDEC8F1429BC813DDEA51CDBC28833D9F24DD263939338A6782766A39396C2E2CF886F83C220672FE7E300DD36265926D0F1A775E622D412BCCCB666C82C9BA91C516314392773B08E9C8E197597EB3E481181BF39E3DE98F8110332C944F9BE01D5AE865BF611E85928C740ECFB33F0FAB640D62721A77887ECD521246DC02DD8029BEC5E1D8E69A961548BCF1EC98EEB9F8752632DAD7ECE87431BF42A3D50B41215A45F83C53DBB8E935EE8183D7E2778622297C8C4AD3F2BCB063ACB61DF15E613078C386B3E5080E84B3EFE0A79B8D3AEE2FD1A64571CD91FC31B9EEC610F2CE5D063119B0BB9736FC75390622511C07D3173BD52A868774176CA4B53C1F03613A37BF7A6B9BA48FF377D38C50B1458F2E2B215210A90CBBD804FA305CB372353B3E8FD842F01E0AEC35DCF01B81C17C06AFE20FCA610686ED51F0455B0D2C9BCB69D114EADB930A663E212C3625B019BC5D43E7E8464006CE609F90A58B7EA721356DC2F2DF8BEFC18520BD9C8475C471069BE4ECB7DEA3779D52584B1B9153E78967032DB9C0E8158E99B3022518B42D0CFE897A43D4713A0208A0F0277ACC82D8BE4C5C203395F612D2ECE3CFF9938B00B8F7319FE12B36B5E70BF20C4B272AF3105364F72ADFE063002E08573EE8F71DCE0EFD494E8C00189EB97E368E0F785561123D32A681880268E8A90ED75A25C9D83E40987559084106ADD7E0C31D4D92BE140FF4BFAB87283B9C7B8EC77424C83A1E44A7A3B4A7CE1046C1826973A496BED5FD53188769B518CD4E94D4F23DE6B69D822F1A1B13838731252118A0643FC8BEC513B54EC1262818A57F4FE1C1CAB2FAB5A074718DDD89BC0D39B535333B95087E8BE0F20CAAD820C5DFECA584D9D5DB4142DB13E4D8B0015200587734C745B69856DE2EB21EAC650F21F27FA6565F5469C424D54E3D91C3C9F2AFF7C5AD99F0611471A726C43CF2AF5632712BAC6E63BBD485BD888E5E1A584BF5A66F1C7FA0C47DA75EBAFEDDF146211C63205320ECC116F4A4964DDC66C0F8D429FF5C14B5EEF75EBF2594CA23558B0BFA653E098880697FFFDF976B4BB03EE537DCEBCC8228958218A6A9C857A04EBDE93218E95CE963D28A4B025BC0032C57F056E99098F29EFD01530C1D18505143F0542E20A4B93C0E406BA4120FF375C4B22FDA389ED1E15A2F4571BA575544A0657A38AB1932C44DA3ED5D9172CC705FF02072EA65B8F61385EB09C376022D9B4661F9F22C330B6FD41A219185682296F9A69B73C531264F1E2C7D05A767EB83A653084CC777AE8A576367AE5074CBC8C26C8692949ED3D94B0C61E0F0C46F2D5E9FDB3B70DE2BF60279682AC26D529091A709521B7C699646784CA2C8015364C6146D466F7394DECBD0A18F0722681E384FB5C20A9A4A8E40EEA631BD5B3DC320B3D455B76B5C3DB966AE2703AD90268827084742E4AC7F8F5C8892D57BEFC5BAF789D6B16424F9E4058417411C954DC622913CD905597825DFC364159D96722727810BB5472C090B7547CE2336A9EED763B051B02C4C9978D24401A2CDCA5E5EE5EF6BBF81EFA35E80CAEA8F4BDF116E3CAA20B9FE99F715E330B4500427B5368987365AACD6264D6D634412EAC70000A4728213F5379D81C79B8CA2E63F644CA9753C79DF7B154EED7BDC97D90C3E41D0882A64F7750D2A0DEEF05975BF3252C4773DD2E819C62812FC3A0FB119AAEDC04B43AF1A732357622AA99D966E2DA4E86379D23EA2706F4CE20B00B9DDEF08880274CA7A23CD92B7DADF664DB584B2C2B56D4FAF72B32177B82B109A6B82D40631A061E164BD246E45A27A5CCD1F66EAA7D36DD3C182D3264BADFB6665C15539B3388A52DEDE7403C99033308043EAE392C0ADFCD6F17CC10A7A6933E70D0C555E0E8C85864AC731043A814D99D1AD2D51CF95A4A6D67166CA2B58704B6B04FCA24A72F5A58D6829CAC0364199661E9C7797E58C579D7BE47ECFDBAC8DB8BCFA64CE40673CBCF559A38513EE00E629BDAC2C25A110E2F24EC5A92503E66EE12703152A87C1E44FF982A4A8984019ED54BB4162013B1C4484F868FDBD02612930F9099F4BBDF5BBB38FF47AEEF57C2529C5EF8F586646236B2B7A66ED966913FD59C986C489FBAA9A4CADBEE3BB05A652F581AF3DCC9C8ED5FC89844F3F917A17B869632642BD6C9C682BBEF8359A8ADB75D3DB3075A60B23DE47B5C295F16AD5BA1BE1B6EB3628D33861B652A77084E69CCC035BEE80FB4C461C12F5AD606475EACEE39EF77481C1999550B13D9F18A4D278FEB74D74350AFD4731F26C30CBBDC687FDD8B06D505967747EB15B0859C7A60FEF1A69EA0253088B8F497AD5042D9A6E335327BD0B1869E2CE0A712474438CB1A259DA34B1C9D028B29DC860CABB0488DA784528046AAC348D6C0E9F426380612B83FE2442E91E8968227854AC5E0A28BE5EFDDE03FDF6CB47D998405723506B032611D68EB162A8FF499C65645049D8C56DFBF9D5DD5E8FA234D9D37AD364C4C3BE3F7130562C9816A96945CDF1A7975D8562CB8729D8511AF76B1EB13AEB386BCB83A8BB3DC44BDE40E0B4139810075D079B394E114E94BB720028EDA36B4C69824EC2E788ACF0AE339DCFEA267855B851BE19E3EC9B040B386FE15F1E895FAD88383F81DCD60EDA60A85AB11CC9F191B1D954C32042C15CF703265C54030D0F5B7A290608592B057CED1640F295B564A6CCA643D7369DD1BDB4FA2A54E6A074E7DB443D5651CFC901CE16F4ACD3D54D14DBF110D9C4B731C569CE9A5C7D9B1B657860D3553F84B675977479BBF2B59F20A07436245932F94AB7F2A8E3BF95FD867A2F57E4FD75781C89ADCA9F7880AF4E026E2A69A6A78E8D49511258F2EFFE701A423A18BE4E74CDC9255DE2261B6DE7C1EC1E74DA94A8253862E3397D4D0B533B9A192D2EFBD950F33A2E47572A9E1AEDBA2D993E4E563491DB7204B7E401F1662196CD9E011B0E3DF23E080459599CC02D5EE1E58C12D169244BF5F47BDD340F79FBB0DA1B0ADA3DB591D86C00F7A16F6785E4A7BE0EFA68D176D88A41B4D6730359AA52046E6D97E55CDDC161C37DFBFD3512D8EE1109420E39FE766701C6E2557A01F85750209163E263690488C698C396FB4BA0A3A289E470849BC7B7CF5712E17E48BC4ED1F6675874D08EF12B2E59A7A1826643CAED6C5DB34DC011F805D209F6215A0FFC0A1025020E5237E95871835E010F0B90E31BA39E1F38D062C2A0818B3CA9C00400194D2431558C6267F0A594F4EE296C341A0C17F0C48A4F6134057216880D46E259352F19CBDEEDA58B87C061D823E773B5F02B9F8255A78D86B532FF605555173700DA876FDE3453C2E8AB670B0FD18DB3906BEB454EC8AAC7DC4A9878C8F452F92268A8DFA0B88A5EA496B33F5D69BF4E7CEEA44005FEDD35ED6C723715AB36E7A89245B60BE4D1CD6DEB89B65CB9782287C68A07044EE98063F3C6026BFB9DBAFB1A34121E3A4A58D9B76B7F5ED686EE882EA6D20D30F13A684819436E48285BD6F29D72D5EAE34AF1BD28082184D5D8FF8A71B70273AF3E7B31990AA1BC7C17A6BAC263DA6E18735F4FA1443EF8451B05BDFD2945AFB8AD49B97004B4E0B8EC2CFF8250BB1EA11C2F2E72C86CE381FAA8BAE668C6F1AC0E83C67A1A885CC9FCA9F146CD7E23E96C2AFDB5AD43FD5CED77C0AAFC5FD988851EE7E12065F94AC764B0CB8BCBEF3FA0A49E72B3C6D102ECBB5CF1DF4CF211DA1D90C7DD53347F5A9C6AF5CE9525F2C8DF998F47834ABC67D8A656F11457942C2A4290317D185094741BFDDD94FDDECBBA1FA19635BC9A616D10C636F39A70870BF891071DAF8AB0E4CE3E9E91F7423300E31D332D68A8B2648F06E801E3048EE0FC1DC26EB4D962367C52D4412C952D077E32478CDC0EEE0E3A9FFBEB22A639EBFF12C7185BAFD1099FF528CC5B5E22F90BF5BE2A605ADD51D9E42CECAC1D8B11237FCD1F8A6FF0238B2B94E25325CE14440A1EEF7B3EDCB3D0170D4A8F5DD3A329E632047029D16CE7ED0F0395276D888E0284C9588B032F456FCD03C596557CE8075CC5719FF8B5323B48141CCA2E596056A3BA0764D6A58588AE15ED33FEA07CBFB8FF0FE21B9ACAE3BCA822D609D2FDFE802D1E0E0742B39B013779935A4B142092B6B35946C3E40B4F603635DDD8C995EED480D79473BEDBE1F982250C9ACE6C2ECB38FB7F5E3E433BAF6F8EF94C1AEF148DDAE7481301C5D644B4D71CC6F468DB5909706424EEF048CA258A1C35B15558EC09B757CCB8B569046F01F0CBD49DAC1F55130D884FFACCE9D2BE0C8EF4854180808F74EA9386A58D6B996F5765843CEE256B2D6E0DEB10D7BB72947E392144FC049397FB15B473041E92EBC8BC8342569D62413CE7DD79C7803B84AE27CD5D6565DFFC91EBBE4C8CDC11564CF42DC6DDF28C6E533796926232F3BABC07EC77247E32CCAD42216ADA54EB98EB73BAEC12AA611F55E24C79876543E0185985BBD8612576FF586DF6AB2F7C3A06EE93C97CE60123A0101695659CD8F98AA79F4732762338627E74F21D2D2B88507CF3BBDEF2AEB254430C2AB1A3AE3C9A4941A3E6C4E74E1D42BEFB41A3A57AE5E7D8EB1478FE91717CFFFD1084B8AD0315256077F31807574C5AD795D035D12ECEA1CD410CBF1EA0E68C0FAE6DE23A49C96B476C9FF73C4F68A6ED86864B3393A092E3C6B317FEF2761D7A40559DA5F5F9441DF2A1734C2DB4B8AFEEC0E66A0B098694E0FDBF5FC9659325EAB3AFB7DB87566D3C1CCDB6E29F892F5E1B1FCDDD7942DEA554AA53403F6B5E3B7D49EA9ACE1513026659E46EF0EE94F8CED7C7BE049D8C2690718016EB61F1C2898B7BC0383164A82F74EE50ACAD27002B78A6398295F3791E5C54CB4218D83560A04015FFCD270687374D54676626A1641FBB9D42334683C36B3DA86762FDE98CE8332FA5B8B0E5D84869BCFE5D3229A78BB8615DE7C74D6DFC15727F82C592BDD3BA182FA62E13DF2852B5FE5C020F2574D6001AFF685EA3B6AF118B775B9A9E7314135D4B90EE51B990D4D3456974817C03D8AF811412676A0BB88D62E97F64F09D0C594153714577346E41C9092A27134FD81294D3625235DB93B119BFD256BFDCFE090AC1ED81FBD28E4E621537337782C3BFF939ED819A447EB7EFD83140ADCC8622266AA9294138DA800E954F46BBED2ED6AFF0563AD6E86A5B55E1BC52BECBE5562ACD5E8F58B54876028E7626C6ECD0F12547F2A484CB046D28A33AB4D1274A0581809B326B45603BC5ECAD192EFB67ED21A3C9188294F7ED387C9062E0E1D6E1A35D30F270255AE565EABF52A1B533EBE96936D4CFA013909C638319A0FB47AD61D38FC96B4217D9E774B586CB74CE9F96437CAF538B12BC4A3735B63145BD0DF603344564B9CE140F8884E702FE9A0722C28330A193572559A303FA8564986FAA3B7FC2CF563784CDB3FE721B918C503A5996DED5853B211DDE62205BF1F1FF798551C3CE58C52380CAD50CBCF49F3707DB01D7B3637F7916C682ECD4E407A1A169D96978F7A5B7DBCA70533CD6D072DC85C58E5B051CB12FC9A942872140A07AF45B18676E03576BFA2CE4B3664293D3146553CC9FA1BAC9DFF345C21F58D2E37A5167880013E0EFFD3B4BC76727FC8FE33E21C42B4F90AC5686F052DE419653B4B8AD5EFAB71ECA041A1C72EDD4F85F3D7C0AE6137A91A373D9632493DEF7420D9E0DAA4E775D43DBF42A71D59CB584A26EAEEEC9C3283780538FF9D27FCDE3D47EEC9F95DBC9A7A904F7BBD7B085BA642F7641C8298AF6CD48335EFCBCF59C65629266BB24D40446714FDF05BC12F7ACB9B41402A2588555C89B8BCC1D2CD4877EEEB4F291892FF18283D8B9ABA4736B6DC5A410473D8E646CDB283B31372B85E231F366EBC1788B41A5EE66F6EBB1CA82E1AE0C7AD693534ADF44BD32AC72A07967B2275B10D3F51A49E06957BAFFA704B56DCC7F54348D9A915DB92203406B6D2E7397708B3FD4FD01F3FB72A22EF272C9A10C35465C07556D5A2147E67CCB08B62262E43B46C8A93B5830A860B3F47E16AAAFFDF3CAA2E00C023B2ADF26DC08FEC73D938521EA7A4680A33CB5D49C8E74EEF98C7FB0D39AD7B95AD72F4E700A1BD70F135EDBE8A81860C57CE3FFDEDA665CAE20C6020DA5328C44BCACA3BFC9F861B134967F97293F5C5A4D540CD9BEC9BF6541183EDBD12ABC587E7AF300453535A960565EB61CB1137BF20306D1BE6427DDF2DD7E520F2715EC5837EADBA74C56BBE8AA9A03592959AE54CBDFB0C8D1D538C521C2D31DD11AF8F4B4F224CD2FD2274788182A24CB251E210A0F25A01230C7DBB8B24FDCF55761F3DC39E628668A42FA44C14414C2815085BF738976625EECE30F6410BBA6D74E0695CE5F9222E635C1ED3DD2C9E382DD8164E8E88D66A38BD7D70F64F9844A8AE04A141AC7C5822705F37345FE2BF052DDC7324828EA59E68B48E1DBF036576AE7003B9292882025DBAF32F8FA647E08D1E712E21F97F29BFB264342E7CEE18ECB097AA65DD127415C5B7F7E5DF601ECAC0051383C1FF422D04FCF5C6844DC713F47CA87A11E75A3DA3D069BC075A600671D0592E91834EEE523BE77E72E89F1A5F460A24E29C4A96ED0561AD6287A06D2F795AB44D580F5186A7BC2C86ACE1806E079AB237809FC7680911673B4813DCA37ADC94AB279B5C8019F1858EF2228A9D10CA21D46B3D9B535E1A0ED3B0DB9E605B0C9F63A81E194EAE15F37B85C07E8F0C75F0E8062094DBE28EECF51E94835262E06058ADA553C6C657420CED8D27AC11614EBDBE572A6EF144B18B6DDE45674E3DEAD07CB49CE7870DC8E36A92C36DE95D7F30005A9D3FE135C748491089FBE38A624DE645EA0F7F56681543E570567B381D9DBBA63579DEBBBFE46503DD2C7575D129B31C6B93C214C30AFD195AA8740BB82E017751932B08966E30A4089766EB83D2B1F0012CEFD6E1B1299682D24758661867A7338031F2E580D24CEFE73F61A4058E5F4AC91748ED19319354C4B4470435181E8EA9344D0A9756AF15BF0566799459976D8F58650215683EC9C309CEED4AA6E36AF8530D41B459F9B901B8E5A692F64941E1395EE9C90EA600C2D822EBD837384A497421A72B0C04A0B80478CC14F1C2E902CB46C80C5C0DAC61046CE21A514C7B439463E7B42CB3130980919F5D9229066DA439D7F30F92413D8602EC053A08A481566D2363CB7E268B3206CE23F533E09ABAFEBFD24ECCA17F0047C3F7104B62D3BEAD2C027D23A9D45186B6727BAEC3B59C333599B481AFF9B90DF89D0E4EF7387D98D139A2297132682E52994ED7AB9FCA97951D5473BA7F10530EAA106076B246E06867DBDB6C35C7814F5A9DF5D7CFF38FCFB476B5C99886127535CD3A828A0FF2BDBECC936C4B695A9205DA5D386035EACE8182F2BF6B356146BAC1B5727B9E82A4CD799B959AD44775C425B7CADE2D64A9F303A828C66B3E48651B7ADAEEB14C1D6E88F2D7B55881D02816537C25ADC62EC11C0E950E2F4665BE019E203E6EEC55B6E24BE1CF89D79CF530F802E244135ABD7CF40284A0E4C504F6BC68D3B928EBDE0FB9A112C9DD22360A44064CC0CA36F99F3BB625D1E6326020D209ECB723621253C6A8D9D89F463E12E3AF9E6938996DA0069AEED79F895A6D4E63029620D6AD2B8AC60D20CF1220151C3971532CE0716242EA747EC19E7C8BABE673420D93FA43148990774BF72A48992EF00E713F6903DC1B8D51C289078E1D23C103B57E1FB2B2C14403E236F7729509A03AB9FFD6849615D7C150795447B3531B6AAB89341689E0F522C73642A56F8FE8BCE26ECFC7D03D6F9BAB337F960DAD7288FF74F087E7BD67B282958B15DB5BF33742A3EEB7A6D53C6A194E7E597D6616C8BA9CAD39EB1E07DBDE1C49832420AFBA07EF493362D6D71E8E1CFA75A431688AADDBD565CD3E9EF13BD26AEA271C2366DD2C3413B82B4DBDE4E2A1026A4DC4562ED76F2D5B36BA812DDF7D9CB045F7B10D2F91B60DF6E84A116C3B7D74B19E422812FFBFFEE378683EE9EE82382361963E668CC277DD180D99B58D47C674225FE4FAD25888771D7C5618C0D88333DF70AC866C26F751D13330784D0029033BAD1585B168752B24AD4ECC35438F8FB3F9BDBC9ED5AEB15241CED81F3DDDE4560A1825B13703550272D685C22D4951315DEBD142C471287573FDD5E08DAEC7D502E7C705DD469A3422E78F41A579E46C9B309C79007CCD10FF9F4C03DA4E5BC62F51F6B914B2FD6CCCD8FCB6994817D1B3ADF7A57931B27B4AE7CD83C0F2BD1DFB00119E5408693CF7286C0B7E7659DCAFA936BC1EABCB444FBEEAAD12F715BA2D3181C79E19074D4E45FCF5DD0C2DDC24F52872ABADC9D014D25D5AD06BDB0CCBA1409A4F158B094C966E52163484973A5B2ADA2285D3C71BFAF7B55902D2D02FD73FDE070DF5CF6FD10040146CBFDE5BA968D3E6451758C410A19BC6E1DCAEFE7BCBEA1CADDF1140D5E4734F39DB85E9F7EB24BC647FC14B4C001C8866FC097F7E2226C6473F443DABB86FAF1942EDB78220EA4FE7CCF505332087A63AE5835F7C85637D492FE32FD65401D66091F408161D8DE9E923FAA2EDEEE84B9EF4104E807204FB64234A4A18D2A005F019727FEC949F7206DFC7B3BB30120C03DBE375E89552A90E1244A81CEB2DCE04587AFD90CCC135CE166F9EF5B567E9A09E9152C72C72658D79B9098CC3BE2D0A57FC20C6B7A9AC506AABD4F34CF18FF1AE30ABDD0041567A8BEE81B9AE6F19C377E014BFCE97AE836E74EDABB61857202F4852D164BC18600EC8038323A1D01E0EB0F799FE11E5DE58A3A1F91DF1D9A86704D521E6D668792AC420FA16B8443BFC630CC2A7D142E5F7EA0C35BF96AB0C5D59DC0F78227777CF1C2C688EE1C6EE8F52D80548B8F9EDE0902C09C689982477CCE96FA00699B435A625307043F41FC01223E9A7AD785C0EC527BE48AC9800745DA83EA145CAEB687DD857459219A99CAAC8A34F4AEF02FB9FB26B63BE1271AC1BB44DB76E9BC6E9D427087F391420EE083B43C79144D21187C394ECE64E2E5954C1A0D99807C4002748B518A127E021531C8ABD267452F22C539404B8888E0AB9CD28A139E1EB57464F59B81C7B65D1A215EDAC835CD7F0D9B09DCB07D7B1F1344189918F7E3F265070FE9FE931D9D9290AA50169A34A42B1E63B1460B20DEA731557D97D306B7D576FEC17D32E1C7213CB7780936D5ECB528E9D019052982AF95408DEE54FCEAAA43677EA41DD36740C5E302BA2526B3F31CB81F02AC58D61BF27BF8E7C89D7243AAD0E38FD2653ED98C02794142F397A08CC7CE1BE83FDF5FA1F96A0A9C9ACEB8FB19B61F7A1C0600EB159E4C5F3C2B247C4B196F1619FE986E8AC6202367528858637F4820A93D231476AF43CE793858E66B974AE77074AE39455E38536E71573EB683EBCDBB2AB99B7084A34856F26ECD25D11CC0EF8F75FCE1C3969A4509325014C8CF29BBB26F35534EE26C9B5D24DC85E1F830C132BB96623ECBE3C17B319B3769DC2BF105FC0ABB10782C55F144B249DFBDBC88CF6D93E852EB1FA63DD7395D8F088809C68F018D7CA41EA59AEEF3153277CBBC31644C36C9CF437609B27CAF12B844058264963EAE7E09CC723C791E7FE1323183F06EF455C89B09ED55F6D1051BDEB7656AAEB5FFD84A7238E012E249F776CD6D1160EB27ED0775E7BDB57367EA7188B7FB574353FF242C0A4E4D1761EBCE097AEE6585F69E22ADFB44C3CD71D32D665FFE7B732CB4BCEDC42D9D1C5CCD0FCD7732680203F5CD0C2C6B6F8BD39353D29999FFCB6A44C4C789DD8CA27590FD2CC7E6DBA54000CD479093EBD13E77FB471ACC98DF8C60BCDC3E3C6C880D0983422C59EE2233AC5B41FDBCF412DA22A4CF522A20261502302CD492690E91F68227B3E03765DA382B21D8A2303AF2573499486F62D42366BBFC16572D7737CF12A70A1F94B259D2EA7336FDFAB6B26F99A0B479397AA397AF4A5BD0FA33036C1F9BFFCDA25260A37CAEC601B64C095B9F87C400FB17479F6E0CF4EDE24F41CDC96EC3601A4740B03F03A13AEEC37D9B9E6B97529BE097AA8AD01ED0F9A73AC09D00287522976DCD59CCAC036E933721E7B809BB99FAC0665869FB885AF11706BFE4C5E5A71799F23C856B17DDF1271289367EB3BCE73F3430ACA1BB31806DDD6D92DB93B6450243641B5F27F11315BD9EB0B950D6A826BAF574E1490208A6EF6681B72A96F492E4F07D55338F57644F5A3FCCE9A54EAEF68396710D4B5E118FBAEB6183C691640534FFD31F920A024E5304C8704C9E8F7D23BB5E5C893BBEC80BA754177BFE929BA47637D1EC05ECF127B0781B2884A100206EBBB3EF93350040884E452C1976FA7D94CC669E53351333967B9537EAE287AA532AB885647EBAE070901F49FB32C89215C39525AC60A9A81949D2B6E3E37508D97A8B20E1EC37A1A307C94935918BBBF634A16E33E56C99CC30514A887900C3B2ED35F54117BE479FBC936674C065D7A4253B0DD062B4812CB1E7976E9EA17EE36F0F1825DA820A9C16EB22F140D1F57947AF6EC9B77DA11C32C50F00A32F6510747A1C71B6F52C50CAC4CE5626A84A33BF7FFE825713581F345F3694D60BEE466E046A42B3D954E1678F0BDA64374A482AA1EF51E34342CFBA47D15BBFDB73C3402F7634F57C2D78434BD8651EE1AA873063732842696AA47447BA75711B6C2743C3B9395C84BD480FCF5B979D666CAF76AFBBEDC618D0B38D492B1EAC4ED22A12119BF5BEF516447BC502652BC2208803D117805B347BCCB258D4090D0DB98D23656ABDD9864702024AAD8AD18DBA846CB3FB691CF4652648A958A7F1F3F5EA56540312D307906A5D4EEC07A509E3BBD0F32836077948447A7603F09255E94537465AF0AA40D7A9327F15456576E59ADCD893E5C7356E39EEE4CCEFA26B18113FCEB0ACFFDC60FDDD9C308107AE92AF42362D4DBF0C9D7BE09DD8F3878DDDB915DBBDDA19759165308B041868F7D4DCD12C16A0A2D243320BDC1F249A031E3D4D755F6D55B76182DBAB5D384A8265926E81D669FFF3BB774D4F715F9A8CA3F35B10AB7216F0A8C4E6E27DDDE1C58DB05641A401EA6115C540C71985575F7BAC4B6C9AAF0300EE001D38EB4B2AC69A27A47D9CD236F555C4C0B622027B9302BC793B68A454981BFE5D6079BEBAF33E7621AF591701F00249544AA10448C96618C524A521B7F14B6C6CA1CBD44BF251608B90C562F557F328B34B4CD8635C6A9376B18C898FDACBE7EF7E6B8D215822178CB0D68A0DCAE75674BBAA2067A41B50286AA864B8D4A8545BCFB5730C7B6943B5E907788CB07E40283232A1E63687ACE07A9B2F44A19E2C79A082CC62AA0AFFA508C078C267B0A26A3AC027ABF7D77D93540767F80A869E97109A8C5069E936DF2EDA1FB2ACB0C822810AD70FD1FDA90EB2F9663DDE35CF964F88B6CCAAC63DD306E1CFC3A34EA063D892926D9B70BB4D13F11095E12BD8F85E1A5A3F95B1CD29DE1218FE8A37293DD17E4EEC8C1F852A6DCFC5CE893EF787021D8C6208693B197D6683E50B33CA08654DCA652B60EC559E0DCFF03851D6CA39B296D18802BFB566FE4C1DE6F4ACA79274B6181C9109F3A1EC03FE0E8F6E9B9976EF6DE5AC9C50E8A89DEA6A7B06CFE9E5C4696DC1B9A14B0C8FF4E9C857510817217490704BBF9C6230A0F999F22783372E13D677BCCB892234C0D510B53643715E7D06C954D2D1E99DC1F9F68DAF40C7FDB2B05EBF59467DC18373FA62FD4E0629D0D3B4FD3350358D741AF3F815E02F53783BB733B82670F629FF6D1D31A237D12691A344D0FCCB4802DC0D2571EB2D6077E773672413727932DD4C561F967192F64D58E4A9A4C7DE72A02945279C551E3331F23B3868F75ACA451FA9B192D391445499414BD5BF7241AF2420F3F92F521791FA03296CD6FBA03890119764055DFE19A02AE3ADA9AB1FA7EE719DEBCCB49C1D81621B134E27BC786BBD1171F156B12F26D8E60FDD705327AF8367D13C3F10E1C1DFF8EBF3503AB238EE9A7DFECBBF8B9EA2CD5F1E714E1E6796DCEF8D7D53A9815C73D5ACCEA477941B42B69D3048EAA291102DF4DF9B2BCBDCCCD6F2C6AD65FF1D1CCA483983BA4EFF96B3336E1735C8FD6AD582D4D846854C0B7A7A2F20D6D02FD3C23220C889FB560E0CB1A1D7E02B6142CE5159765A414EBD772D72C13EF46EC92C3A72BA7C46B5667EC91069DBB08D10A20E3433CE4C18408E5BAAFB7E8B2FF476A25DB5DFC480A412A26AB3693DD6CD4A7DAA1C3AAFC2C48B0DD1D4723F1C95A374635B92CCDC0E4D3820584EA33B4C7864445EF9931CB215AFA9873ABC3AF0AAA76A804DD36553760BB23B204EF2A0856716BEA10FC1AE60E108F93AC75CF9A5193ACF2448D0A26B004A1F16ADD5F97C99869215699D91DABC96DB271B17BAD1EA34EF30854BA6FE2616318BEBEAF2B248F8B3E0E4EA94D18726BEC1BB8FC20BC66F944A31226CD59456FF4ABA5D6D60F3A4F8599AA4C7726C6A8E7AFF821DDE58A9145977191EFD8F24960F46387BFDBD74FF7C5FE88EB7E735108B3A2EAF472E96B6D26FEDE3D9030A7C3CEF36CB3A9CC9E603617C4F25B4122F8AD6445383DE005B1FC43DC9C9848A7D0D42120B13BB6805F82F6B1D467C73E843D1A7B6D310A8B0274B9E661C7E7D0B61EFB9F7747C5726E93D2E2DE1CB43773012599453814E0D8D749640EF9D01B9D95D33CEC8BEBCF1BD0E6C207FABCD26C0BB2E16F47CC71C0A9CCC8F62F9A96F879819E396DACB34550E63A5B8630A65FBBDF2092DB7ABDEBAA245D2BCF84DF1A365F4119C22E00D8D21D78876ECBB6A2B47147392B497242512942CE0C5EB1C035E5C9A507BFCEB6CAD8DD0F42648F1FF9EA95401DC7C84472ED60653D61613DDA02A33CE344F99AEBC84438C2468BA557F9578143D869ECC67159D701EAFA051BCB5398CC50AF7E0AA4121DCEE11A7C9C69CB23022D633A0953EB0EC49E3B08A4873BD44BA6A238E227BF6BE5CCDDA6CDD3CAD7BAAEC20B3199AE3E1A1AD0F4A00903E1660E2A98C9872B4FD63EFA83C7009533FF0CF9B9EAD627C23A136A210572E39A4B5C70864F7E766EE37D431557B419F6C5631834AA74872D2B41FBF92031F74F576E0708D7848E4067127263904A05B2F348F448946D084BE10F1044A51A27AC807A4C7A1DB13A0C2F5B4B184730C4CD91F87A0CB92F71F9FFF2CE8A3603F8326577820E0E42786EB92B36208675AF046EEB73EAE922F518BB163172072BFB482DAF5E909603F7C399C80378038A50D7152731E41E5D4396607587B67A1A3C27FB0607CA8781923B8A5C721AF8B45290C3966063C1120201E78F09DC5DD1655A9E41DD2F8755DB748C4D68211FD0170216A65E3E400152FB7248A354A1F31B16505A205CF930CCDC1D440856049C387CD7DB689967428D95C6E287BF1CF651DC84AC26CCBE6CAA87CCC0EA69795BF80870357F0411F31E43A51891BB9D67D6A54F2BD783B6B2CEE0191575049A323F38DFAB417C4A5E0BE9135093D115045EC784E6BF6B9FE6AA991FA4B738610241F0ECEC47592BCCFC04BEE26AD008F21DB4E9A7F29AB5E0F4A7F900B4B8F7E422683480669063F06474BBF3630309ACE5435ED575361C08EAE1C4847009F527B489F706B6F66A4D5F63096E7515C3470D93C706BE107401F605E7DCFC8730867EB9A4F7F2EA8DD5B2ADD18EDC086517840BC3C56C8FC4D23A7DDAD2EE90F11DA6210012623E5104B29B97F9F3AC4A304EFBFB7697C9027440807DFA7DC587AD9991C61609F9D2A6C47BB7B03230B30BBF3224A581EAA8EB772F680A6948613AC644DC044BC2276B2640DA016A764C16A4EE6CD064D6A143C82B707A2AB4A69B7DFF283824D085A7081531D932CF58BF89139BDCE9B7D2CDD475A49C3C7A0744D55A7D57F078ACBA19A24B1B09C3F40A2634855977D1C2A60EFF8158A8684F49FCB96D303F16C65A1B8146C6424378BB0DB422A1118D2B171298C2E9B887D0680DFE34D4E6A3538D2B4F7CE46BDD53D2D6AB6738E884B0E0201034D5FF47F0C85FEA42AFD56F87D1B96668A0EB375AC83A646386A65E06423B21DCBB784C103F8F293C10EED48F4695F8450213B4A3B0FB2DAEE7090260B4917693139E4772EBFD8E542D6A04E684D24B1795D7C9395C457CE6B246AC47B67FF850390A4936DFE88F30ACE338A709F9E351504D6FA0156E1C5964A672209679B8B5B1C04A9DE85BA781033B6086F6F02396BED0D8D0736B7EFC0B04706F2089E1E5417BA7FA75381F18F3C27ABA6382C84663C4AE11F5AF76972673B008F726EE4C207D85190CB7E1C82C32228ABFD3ADE0A56E171EC11751B3B5B3CDD90B675CFE5605472D99AA61ADC8F97B1C8AADE16F05A09CA06F3E0D0E2632884C74C4C7FE015513FD48BCE47501542059D81A119E4FE721CC5535F2C64BA378238C55695B04AD343658B129B372E1B4E2ADFA6CFDC8103CA60A290B7D33F9201FD8F6BB06037058ABA592A35151845FFC3159221288E817F6D3580E5DE8E05516233E7CBDEA9590CC38F16806320F0F7B16018915F0CB845516C6621111B75B5EC6302338A76A11CBC15FB23D2C1A1683B3E0F1531624FCCCD2E6088BBA348D17190BF22E2F20EE08A915B8A111C8051844D84E008E9AAAD84F24A6E6124A6200CB3154B4F0B00BF3A17EBE4E8CA8C865760FDFC0770B68F5CDA52C959E2D255C18DF77A88FE1151AF40CE1592BC413425BEFDDF1902ABB7BF551045B5BF26A6101CE50E9D8E516862CC037DA168B24EFCB616DD8960E33EC19255779D8652652ADC458491848081C9ABFF97A4151A264A4707FF720311265B71D8C0EF8EE81EED507AC921C7A4FDD2DC4A69392EEF3C3FE62D3B30DFD24EDE7875EDC8FDB7A6F2B363492D438100452C5DA527D706EC4DCFAD3E1B196A8A6E57218A6DB01A452638FE3C620EF7BDF3CEE3C85DB22DB5D108935CF949D5E73255CB96D0211072E3D5B854F059C74B9A812FA13C6D4D78BAC2E9B54CB7AE7474BA8577CFF4F1065AF71740C898EEFDFD3A0211593E4EACE4B933884821B4876B7C92A1895FB2B11D4C16BAAACD38F8010CCC1B826C284F0D6AF781AD8DB3C695B59A7AE748321A68CD7CB26DCAC173CE9ECAC9C315ADAAE4BB7221BD45F3116376AEDD4725401F57F1E444521A11D6FA7B2C801B53416F67F98E9F78A07C9A19A5249FDA13A949EF549223A65A071C4F51236A09864307FE095E169E86CA0636AE3A4F70591603E86D597B69A45BB4AF63B575F70B9D7F0947F0ED6D407B4F8096F5CB15B945E1741CEA875CE2E41D86C7CB21FD455A851F52380FE8B91CB4F3195603F0AE059A7CF71AD75A4B144806E3545E13AED118DAB22A23CF73162EBB252983A907247551936DDFA838E3BF2A1C1BF553623781A1BF149292F3B78A20BCFC3510239872EC1924AC75E3980626ABA4C8AFD90518F707077B9B199ABE044CD2F5E1007EC5039AF8257A8DA15421E24DE67CFA7EA08650D859969D90C67BF53DEF2FE79A4A422341EDAA02BEB4AA70C42D170EDD8753EE7BF139B4098BDE95AFA55D20B3F79DE47D186CC944DF2296553449CD0F1EC3856B3E880C89FD64062495612C61F87AB0C93AD471A82CC9DD535E5497F826B81D6F99CAA8364ECD0C19844C62F01191821503C90A5CD9A173577B5CA7DA9B3B4BB0FE1E0B76C6318E638332673E193A66E2579157D8045B4EFE7BF745D8D2B6FE4346C5F4E8B18631C00E5E08145D19BD703FDF6477C8C355E410CFB2FD4842A3CAB71BB8C91083494B369B2628821D3E3E380DC62D346BD0ABEC0FF4D5F357286D7C8A4D646F15DDAA48791AF1E2C1E263250C63298837DF65C6AC6742E84AC3F40A4CEB32ABE054D4CD35F84F3762F6F0C0B18BF77CFFDB57A6BCAB92F32219A00E2BE6982307
|
|
1
|
+
1A399589A7FA0F24D60BD94F13E5AE8115690C5A589A312CDB7990FA047720BC82797471F64DD1F668BAAEA97B424AFC036B654B211B783DBD8EBEF0187D49B74FE42AD36551C46026A4763B7D2C5DA9434AE8AB15CDFD43FC924E60FE0F53BA18468531EF46D9137414A3BA203652DA5138ED819550C8013131BCA455D9DD52218372692E708E2A9A9A6273F7495DCE1CDDFAB4A01F7986FEC02B993AC0130210257B818DE3A4302A387F4224C0941C0CEBC1609C68A74DD2C614106F1ED6E6010FD1FA3F703D60016FC52FFA1D5928C480D4B5AE83FB824319ACCA8AABCCA056CCFC7626E140FDD7D93C355816C9022345D4B500F2DACEDD22FD2B73F92E038FE12487D9B3290AAED27160B8005D3CCEB482E7797823990C7FAA3C55D54DC373F6AF71C5A50C4EBD7BCE0D45AE006C24733131F4E3E56FBCF6AE2337BD64D5D5996EEB65FE7F7247E0119C19D2B0FCB201F4D6E70CE8552B76B4B7C13CDCC3219F5E62C61C3551A8E683888862D247C18EFA2B958654C68EEB6B70E0895FBB7590725BDF2DFB6B31F41873D38C08564BE80FE33A86839E1D1F8FCBD9224DDE5411DDF04D48FDE3481287EC7D7456DC75C2EFD5E7F2FFF2150AC310C462032C4FEECE38E827982419B02F20D0941FC909E859E8F2D34ECB2BD0F28857A14490700542D4DF5F90857C4F7F674256928068834170BF4E7EB985251383159125FCF0057C9A80AF7E4181A39CB0481313DC23F86B886D63FBD1D71FCFE962F8041A660E7D46B58FAF136F70B190060CB1ECA335CC044F4825E90DA3A79BE88E31480D0BCFFA4B921724C693049A8BCE898F6B77B1B3085DE9AA3CA43BA63CC580A2DE0D7FD4D0BFBE903683CDBAF92D0D40B4432ECECE5CE35E7F7A2CA9242AB15CEBC1D3A75AE20E1E35437FC615B39EE45AC09AC9A16EB5CFBB7787D4A8B9C0D56A2B5806562774F9494750E07D4BA0ECE4EB2AA7CA8D0356C79E01E33950711814BDA1F8C78BE4AFD32628E618973C6D04818FA930C08628266F27DD95CD6F91D16375E2DB08A324B080185062F74E8738E871840AE8FE1CF0207D3D79FFE9C006B32723359FC25DE9D5431617D930BFA9F12F03F854740349F20CD814C0F9956F34AD1D2019EF4241A17C2054F4EB71364733E31D99C6A961EAC07B8418A56B327960CB99E8410BE95BE732B5463A0C00EF98BE228200B6AD8A9A16320C6141E74D0C35D3B74EAFFDCC9DB9DB01CF2AD488788DEAACE6670BC936E051FCDA8CD523EB7D8F745AC0024BAFB55A0C69919766430048A772A3FF0BA727CD1C5AA4511DA2FAF726D9BBB15BED0A6B26A8D5B85954DD49AFCE1A4BEBE5DAA9F1BA747AD61CF414ADA792AA03770EC0FFEB7E6F3036BAF4E7D15BB3EDFFA7E5D2A2641785290259EC2553F0A85EB332E34C303B0EDBDC651308940100C09BA60B3D99AB01898E168CCB9C60A479CB52A375D15A25C77A42CFCD39EB5E2884569951B2B7D46FF859CA601FBFCFF53D139545D638A28888C8360D3F3A96C3485925889DBAF83B939BE35A81A26A4C33F965C0354A967546DB2EF8163CDBEE987BABD0782F86C1DCD8CE44A0A2768DDB7175E8532EE075ABE920EA6D534F17196402A06D4A607C7DB4E95550EBF03E1707D645F74CE2C59C188F85E83D9102A0AF19F1A21565C226FB2C70148B2110D26C29C74CDE39B5E80AA5A421653BF9A06E3A03BF163CFFDB4F3E2DA5A3DE25744D4EB41DFFF16AE05D2616AAC5CD0430F5817DF2C8C4CBCC64783B3D70625C6FC8E7352B8681DFE36E17681C0EE711699D1A81E684A3CDACF740F1F3F6EF71DD3000F790B1A62D6A9EBCEBE7313FE6EC0C41F61DCB519741568DF1F10362EA57D6E024079933456E33A19915EDA40E605D6A8498FBD441E4172E89C62F98823A2E02416A2476ADC0221ECACB0BC7B718BAA86D3FC3854CA0C376E5B658601EB52116FBF3DDD8FC0F402513E8022A09644D590E2FDD917FFCF8E25B2721F3BBFD56C2F5C9E2D1CD0DAE0DF943C8E892A39145D02004B5632AC5CB09E66A8E9A0784978C30A67929EEEB00B9B580B719CEB87710C5C665DC7B1711041DD4AA06F91FBB9DB8DA2E5E7FF4B371CA9E6033AF2F3462CDD692FF2B76C01BDBD34736D197E7CB192E5AF03F6754551DDF67A6A633E9B561D15F544B6DF64A4EC53BEB87136D4DD370B5B42129D1EEA9E0CCCB6CFC3062FC0C63959642D556050E14E2679F227E61F3C6DCA3647D82B0C01DE1D07BA63DF6678D8F29A4FDB770D8C01AB288B884D74C6516A00C542D020C8D3A732B3192DC7782545643A12D613D12D5586BE2FFA0ACE23AAE59534ABEC29C18298F14F1F551BD01EC6DA20A58D42C4936318566C33E232DE0AE0D0189C35D58C19C53630B128B30B8FB707201F81A3B9676A9BF30F2DC46C9EF295D0F5C49C7F326E85D82F4B4B4815CFC8A30A8B6F789C82080B5940357A85E2755B1F385C5ACBE44F0443B91F15B4EA36B56E9563C977CABD653F18AB967B195CDF3CBF359C8F20251F5D1C9A09F7E61D313909250CBEA8DDBBD57E5E82A3DDFB6007BD9A4BBA7CBB2F426F63469CE52E0C870A6A9778AEE20EB908EB13B86858E1F5D4F3AADDBBE9D3B571901E9130D5C879DC8AE5ED97B6167722E43DCCBD80DC0A7CCACD1B6C66F6D57E602173076AF8FCEF9DC27D7D10DC341D0EC85E9C13C307D2F25E7A9600909F8521D1CD298C97AAF14A3DBB7CCB2E8DF722C0DC15975DB15733B21FE34923A6A4D7484F1A781679A17EA698F8A730253890314566606274462C7BFC4FFB900D72D4F10AA915E3AE25EBE1060D75AAA9A46BA25995CF170E7AB8B720EC7BD36BF2CDC31B09640124FA4AFAA44ECCA98EE8C01995B9DC3A33B4598AB1EC877C0F1ECE8EC763CA10239BBF87A1951F76372964B6C925983D0737E70360F543DC4228AB8CD3D5840B5AF1F3FAA4C41DEE1963AE430A7CE3D7A9C716FC0840B65B9E81053638CBD5935632DDACB0305F0E9F02371BD9BD9ED657B1F79315A909CC6F4F7DF1E09F318BB1C9C52CF430A83070C633F04D8FF5ED530386695A7086B3D7336AF8BCD2983CD2267A5FCDF4E914F9BEB005A472BBEF8015EA8D3AB81C98E1E4C31DC263E3783B6FDACE71FBCB1D82FCC67F14205E1B9EFD534D3A74E80F32847E190BDF88040DAF4DCD2093BFB3B97B0CF5E5F1FE68B798514B25F3FBE6C3984DBB861AAE46919FCC6688BF2D8DA221FD1ACCB92A0A884ACB95BD65B6C4B4AC29A580DB529F1B996E1D4D53FCECAADF7BEDAF60282CBE52AB21D4EA8B7C891083F105C5497692D8802157A96432AD3FD73F52C290A70B0CD869946713AB05926423A0D48169509FCF9C94E3D13E512D51D1D13F087BCE4A7126AC1A41F9A9F4D5EA1886C8CF3975587EB1B6A36356A577027033A62F3C4A31A3B921411028F99CA319F584A39F71BEB43959B262DBBD04F36835EC2AB6DEB711DD2E5D93A0F0D23089BCE26DEA155E0640D19B627E58B1659FEFFF353AEF812C83E1989706E0ADFA225226D5199F35ED74AFF1015AA18364625935D523D6F8BF3DC1ABEFDC59C06A7D4DCF4486B98F73E2D6E75673EB93DF7F5B484FA1DE1E034E944E20FE107A2C69BC83293649C78E6FAB11E9EA68CA5C120EBD0F5C18AF08B0B1890A7BE762F19D2EA7B92EEB7AD876D0A85B49F6E9B97C7CFE35C087BADE591997F739CCA263F41B8770214EA071B7F7E9224F64E45C5CCC8F073CF194683881B49F95BA41841BADF54B1A2B00E5F69AA8D8358F884FC1B3AE32B71E4975F0D2779281B10A00A3FB92ABF2B8AF185947460EB832CFC00CC6322BB29F24D89BF4F83FA979997AAF0AA853F140F2063BA2F4496ADB6A8D45EEA154F43888306D3ECDF11410E463526E0A322E88A1DFC994FCB2BB447E394417A6C912E7045F29E8BC567D2B25513CE64AC0195AA941ACB24ED572FE0E090A04CCB1D3AD69CE60018806A7150F44FD6AE92D5DE2CA2BBF02F2E2FDAF1B0F42F79FB61F4C3A15033FE7B3A220DFE059BECE342DB8A48D0B666D6FF42E4B639569F685462F2A3B9ADDD39D4236C5C6829DDDB64991C3822685914B678907DE7391E1FB92E3446B92EA37E9BEFE52114579268063308A827AC551634B0D8D25AE60349FC83508C70080A53F907DC32C8A7C4C22C0398245A1C11ED78195B4174BD3EF0B4CDF064073EF588D205484E18FED6B3D955BD2E8A86291E7519CE8AC0CC5FB4ACA40B90FE29F0F8CC82D51A14C02B3459BCAEE4796608F6BA5DE47017ACBCD11628B25CFF998C6DCC62AF326BD36B88046153149D7EE67FA15D13DC4CEC95ECE9D2A01E0BD8B46816E4073CA19C85927182D3D3187485E78A9AA85D4ADA94BBC5A543077BEBACE26308E23370FA21EF89C7885A07747DBC6605C4755329C3C1B2A1A5CAB3BA6E3A6B539DC7964A7DE84C499A6EB4CEB3EDA33C4F2061E5FA142B4030A58353A72329B0CD35F4F1E98395085DA426EBCAE3F13E3C8DEDA883402B4126DB4DFB76A1241E2852CDF3CC400D8F4E50FA5224B58292C228C82022651AB49B732852924AF071DDA90A456CCF3929738DEF9B68648FCBE8F0B4746ED133BDBBCB0BED85BC1607EC8FCDE9D8B94DB244552B2690A236C4805920DAFA0043FCFBB4D5A7230ED1A065D358368E9DD9E929E33D46D62F024578A1811782FE6AB469D98759FD0312C26253E83D62872F700D9F62E642C30510DC289212A9D76B05727E092A979DEA9845C11C5F18FE251B8B59D541DB1CE57460B7F0570933C76C5630508B102902401707E9B91FC0BCE580BC4D0C0406C8017B8016D7600BC774571EC60208BAAD546517BE79F31ECC36B5917D203EE9F3947420F665A4FAF20D69370214BAD1E9E00DAF6BE26B8FDB40F3A9C114D907D65A0B24469AA6BD51DB4E819487FFE5E2A7C549F450873C45C9AFBEBA8A99D8561E84C99B894E34747A44CADA5D574F433206CF21A0C6F4D421D6F90F2205027ECEF37CA30CFFB2D4F5F76A3E26DD398C37B0D5395ED98C3D083D8BD655602B636F13A2C6E8D6181BC35995F75787BEEAB2E551B4DD7AB757ED91AFBF018D88350F50BF504E1FCF7FDD372B64EEB2DFE3EB446A3687D5CC99E16F614AE7D04B23BC32530059EC0E5CCD74379F145D8E3B084C0BD7193B03D16D404FF857B911DD9A5FD1CA6CB392A13472A77FAF937650ECA53AA887632ED279AE45300E0C057884ED09D06385FB55F134981BEC77E8C614A857A56799B9D1A17233322F2E3FD54411ABA62B728E35C850A58F4280092DA45C5575EC66B41A7931F0E025AA30317AB6188D25F718A84D044017D27ABBE904F2E373264654307F07C97DBD704C6BE1E2A24527E6515A68AEFC4167CD9A5A2E139B2DC2C93AF21677C730CEC35234D974D87D54B4956A40AD89F66DF868BF38C8E22AEAC36AC44AAD7331F3D399833FD25FF1D832C99A96A8BE7B4326038699A38F0640E3706C232EFE3F1B6F4DF556A568DAC62F06BC74EB27B8876C89E92C88BD529DAF5D7098413D611F6F2A1BF6C362F951509D813CE13D77FFD6701AAC4B7DE72FA9E86A376C17F0677EEFC21198384276ED927C7DBEE6956D63445C021D79013E6211E1DAE33B8F557657F268A65723350DE6F7EF375A86A12C829936CD13FF9A967D9B6D3800ABA63660210A15C6AF2DB85F10C95CBED897E459800D3E859A0F30E8447585B2E48A61C242DB562E5D287E8E1E347EA26AA5CBA7C78A2DBDFFF25CF6C97AEAB63B0D30082F5A1C87536F248603D41FA49C29B6346EDC3194A6B13D0D2DE9D763CCFEE054E5369C3F1FF3DE9841F351CDA4616A8BA7714EEFAF1B688CC7B56BAD6B9D1EDBF44C7F47857DC68057B7CC91AEC53B6B8E901FDBEC9A685A44D69F37C92A54533152BA750B4764C7971D2147C20C4DDEBFEC9A9DAB123EEDA161ACCA52CB0F283B73119D5A599AC2379EBFBB6C561EAD11AB0157F408441CCEC39197F560661395219FF3D662EC368E9D8B7C30699AAFFBCCF407964B491EE6C45D31513E3E120FBCBC70A727C45084907E787C6AAA54B753C84F4127D750F28CB2DC988660151AA61AFC8B2E09E89CCE17A11E74F0190D00257E069C3FB471479C1359795B7732C7371E07B508A5CD0BB4244F8F703F77B80AAC0F532AD364E8300601BD2D2176CB652BEDF821A4E96380F15F968BAD4AA2AC1F3EE5415F3CF8FB707E68CE81DD3F972DE6F21B2D0C7989DFAD5CC35559A91D3A497C095867E3BFF891A3299532AFFBD95DB732E05DA028E9D73B6059EBA077BD3EFBD17B77AA21FF1766E6B8B68E6C69C9517B991221C1615A53B2759CA7CD53FC5E35504A6D66FA44FC10D261C7716EAE6B9122E92EF80621B6A46564119D19E3CA7F2B384786B5E124323B9445A2F0342BA956D6670E03FBDDA6AC6D3B786C2710FE5BB75F423904007A6BA04E3060998D2AE04485A575717FE638100965026BE4B5665157FD38F44995F069765912057A48D80656417B1E51EFDA1982E8D64713C2A148708474FF0B2C2E9003EEE5E907A7363A4B0DBFD1A60EFC989D715FE527D8C49919DB5677D49611F4F0E6715A9E4F8C3E6CA8CDD74C254753B8D3D2D0911B4A3DC45EC1E09652E1A0AE908DC54F82A6C0E25A546AFE59F1296186CEC6684CC6F17000B7C97103C55E8E90022418E41CC02E5E06D5E4BA96A99EAEF3783A86C1CF68EAF6208810247A56DDC0FEFDE67B3ED1975062B5233824E54A654B9E1119813CE2BAC58E86BA858F76C5AD09BBEF2E27F87387F5F3F0FB2812AE4896B497BDD64AA5972BA7AD7AF9F46C91E03CE4CD3DDDE42D9B0114D846F0C9B50E4A5202D7A217FD4F0B6702C3D3F46627E03C049D69C478350133D33CB072F8901C68748C4248CBE540E0B233E1C7696DE74AD7650311665F7D3763F8D6F0ABFC4C54BF105129A9777E43B8D131BFB02B1EAE5F7C703327551211DFBCAF4C1FED29332CED6D34AA2138F02C1D8910668409E2D1E80F112F9D271375BBF73A0184C6EF3E45B8DD7C6B6417C1E35D52A9FBD8DC206A23784D8AAC5EE1B32919091EF967758642BA6202EAF82125B224909D7D11D38251D6CC70DDA0EEAFBD0FF99FD07C460E7BF2B25E7ADA1611FE890DC3D92E03AA2F9C645E01E41C47F1ED3D03BC8DF81580A1D4C9ED6E67F531EBE830CD067037397E8B65DD7D8A3574BBE741F8DD1F0560DC88C695FBE0E258FDD62F25335A439A9C730A57B9005B9CEA6D48E9BF9AACBD7DA411AAC047719A29D8717F9C5521BBE84ED74404A759B3D5A1087CCFCA37A6D38C020D644A024E317D4D307045DD4834C7EDA26FD6F65EFBAE3A896A51D3DDF2B0A1B62AB210221CF5CAF649286D86DB29345401CBEE9FE20520CA48E304CBFDB00A0777A576AC3A3576A2B1E7F5979B70A2BE0F9E054F62BE136466928A44DA390BB326BA2258CEEEC8D2612A7AA3062479A3286406A3C62610A405DDE3CBDC02508ABC6B5CD54CDFB0F6763A5A2EB81AFB180E6017D26BB053CE680F66017DE8A8A3B4DBC529DFC07FCB5992BC21EB847A8B05BF09C4D7C5274B16DF7962478B16DD82799862861D0C353203B333245503816720F439184809B84CC2E8F31B1ED89372EAB9AF56F85A1CEF28CAE096FB6A7FD8B7CAAC5F66DADA11501EDD9FE7ECECE27A4CBF4EDCA926A9A086F75B5E43376BAD2B6826DB67B13062A26A820688792266E1F06513EBE1C7F697407917C3C1DE796CDFA639095264408B8732264A15DB2ABB4BCEC52D09BF34621142566A49DD6449AA24ACF26CCD7CAC49DA89E4758F9FA426BEAE334DC43DB870FCDCFA544539D81DB1504031FDEB70D759B28BB3AC9EE264CC2F57994CEE5D7F4F00A0B0ED98FCF34168D4B3D0E77A540C2D17AEBB592173E258BC0A56C34E4A1BC55C3468C3F8160258DAF0091EB74183F2797E23D7A5FEE38BD180235867FABD32934AEF04EEEF3BCDEFEBA05E1224CEF717266A3F49A66D4CDEFF587D083761712653E7901536B6C32ADDA85F873E2E02D13DC93C78E22C2F94FFEAFA15983509456C4BADFF73CC43041ACE27EC799D0BF13B27A24938C9346036AF1A2493030BBAF79C14CF2226FB120DFBCD82F476FCB8BE3FF7C247EEA038268EF02DD39917383C413BE7D57710486A20A89CE7933F42DB02304FB5686CF1533B6B45BC8506112053F8899D15413E6C6627E1C78C562FF9B6FBA8CBCC641C087E4416A7D7EE2270493C5C24E9BCA6E73F5E300E284E361AC75985C128A30671B95E0A7164981B8AF9FF81A2894631B4A175E075F427D9FAF6F37511569DB3A198802A51803A429AAF94FFFC1AE9D80E140342E873F506620DCE09C14AFBD4CDD7FC263293D4CECBB82C8698AAEFBEFC172DEBB35F24D2EBB981D26934325C52521FA2887DA1828DF1075892C89CD029B9FC47C62B94CA1FA9B45D511C08E2D25260DC65134527938EC6EF9715B69741FE7DB3CB699AEA6400290758987A080D3BB00F335DB80634C541CF4DBD43009B2E2DD4770E6C7CA1906BD8F16C69B29BFD711020D542D92AA09A8847C4EA002D7D4F2226F8835D1D4FCAA50FB9739002EC47FA6ED1A137F3E8383DC486346C1F13207D3B979E25FAAF5FEE67EABE47631AF220AC5B4FCF04DADCA2C16481E3775022DC70D32385C135F032CF9861F30F6C11D749E63BDF69152FDED6ACF6EF7B8D9D200611F0E9422358EAC23BCB36BA093F9459B17DC8CFC8E3966AEBD6917C4AEDC85CE4C206E71ADB921B853D552CDBE5F8FDEC052D98D0CECA066B13C091B21C58DD2C390636A82E2507AB104F981CEADFA08AD96FC86F874FC5870E670ACFF9F6B15E82F5629415DFF1BFBE529D205D361DD8094B70E7FBB8F139857E10E973332567AD26B75BD3DE680E74FF54B8C4E81141CA50F58FD86D9DF7A2C7D7500BD5EE4D6B47FBF00DFCE03EDDD6CB27D236D6A784A22792189097E02CBAB6ACAA885AFF19486CFE147E42ACD3AC3AFC4B45B4572540FDC87B2F160BA08168ECE8052B9A1D171CAB63ED8D87D488A8D587C087D83361E80A43B49985CE34515A0FD0CA30D4D7A04AF4A1BACF02C0FEA0901289A04DE587708D0EA5805584FFA64E01515A3BB0B5B309D80E2D24069876397040AF69D04B78635B10298A0BB991D5E19F7EE6C81C9E0A39FF9A7028C4EDED1109DB50A034576191880299402333B72139FE27F856BA175C4A714B7E8B761C7A04A060677245A69184A82A7596E6B5754E7DA2956414105B0F1402863ACBEDE8841B522C05B308750AA2531A7AC8D5DBC6FD4C10B631F3BF146E6BFB76FB05B3C65464AB1197745C8C73D3AA7D8B47B3D2B097AFB493C15459867ED85EBEC3A09DF95547412F199533728159247B98612ACF8AC156CE77B98502B12F1110D99BDB7ED286C2D21314062D2534288872F910CA92B158B2F20696449490062654CB7B7C7E97458C868A591BDEF8635EBBA0ECD9AD36C682F5A86ACB587AB0DA985D0A01B95894B4A63562A8C30EA328E0B64A8BE719C720B7BD6C240E9F8597D63392F9CB9D55BCEBAEFA31D5CEF22E1DA3BD5E41246755E772E30439834250D9E639360B29FDA68C2AAF656EC181B7E4A084AB3481D2234A3CA8AF9FF24534A9CFABC4F6000281C4E2D057D1BA5BB7E22C558625A60A3EF98C7B783552DC5C2C20486E38A284EDE80C9685E0ED803EAD7AE405C2D4592494B88EDD8692E6F14D11941524B17619AA8B566BFE0EDD3E250FEBECFFF809E598C804E14FAA18A208A557DBA15D3D27FDE74586386AE32906AEDC0E8335499106701B0179BE9DCC5DD21C03491AB499BF75573277B6D98077F9DC413F658EA72EBD27504F8DCFCB29CAD22BAE6D033B4951350C0AAE50A6293AE8A3EA1BD9A53C24262F63909BCAFA8FC674939896A43A8A587628E8FF7E768F6E2C9A559C782CC9110CD9DB66A3E1C19F919B451C0B2FACB36E0DDC74CACFA130EDCCAE0B9D5D086D17BD6EE936547337CAF9A1518F38FC413AAC9B124BC3775509EC629A09FC9879DB55DB3B252951DA1881DDF19F719CA6244A038EE95AAF8668D88345DB8E6C12FE65F714291783590E0B48F837A21A4DF12A7C3092C0D292589E2B70DE6B6EDB403C1C760C45787A0E3D4625A1A5DBA08F936A4AEB83E0F00AC818F039F24E750D18349373BC20610A6415EF1FAB3C368EED95AA880887ACFBD2FC2F33AD213936F741E9B94B0CD84AFFC1004DAD2F05DD81CC8BDA214F281AD8634FA678A7FAE59DF110C2E56427F3AE301F91A054C589F16BFAD3FA1B33FB9B16498AE93F52BCD7DDC6108A87FB557EC32449AD06E9582D8F84A3DE8589E5B785B33F613F16591733F6062EC14E58A651E2B57C2FBF88695A39AA701A784D23D6906F3F14DDC7CCA6A4A2BE5751AA42B956E004489C2428899360E40244B9718E53135A0CF0A59CF329CD485EC78ADFF1FE0F1124A14C67DB0103C430F5FD3E6BE8469FACF966A3DD73263B1549187A37D6DBA7C53392980F25678FBF66D12D923208667DDC860C84B7207EAE17F3E0082029B37F2E7D1A80A16369B7A4AF970F9D73FD0D4A6D907DF197F1F29360838A75EE1F3B929A7F4ECC2F9FAB57743FBAD7A660B85592D873E202BCD572EB83FE0E7041F7B15DED4A62F9E09A63078EC7AE748C8A430D021C09CA273EA0956F740E6390939E9C0ED7B7D05C04FE90F2FF5AB01BF50A2C5291AA953A27CC572A96BD2E9B4FDA7D815E3C0505DF8CCBFE3105F12172ACBCD7B67895E1498E2843C554F77D4F93A35FAF3BC8C6571D66E6E87B4A29058AA1E3D855FA2CF7BE4CB4627A5F71E4DC3D2F0F09EF5176288A4CF0455369FEFD1D36C67A3A0B2E068FA6E0A0E78E96D9CE2B69670D1FBD34C18888FCBFCB6762465F12CCA96D1289114FF4A3B2583FCBFA2B1538BC3128E4D7EF112E3D08F040CE8DB05509C8E84802B4618250BB3E0F7D5C6EF2560E20C1407CFAE2F08E915BFB1A3154FFADA658E34627B2A23EA92D4CA798B347BB6810345EEF0B80C6992188DB90FD6AA9CD176BEEE0BEABBD8792E1605BDBC5BDBFF54FA8493332226D004417F25A6D254E4AB48B7B61129DB6D4FDE9D14E86BD3D2E7528F31F2FC4F5544140DA675419770DCB3DB0198D611C7FB14A1E8452B4A0CA477CFA8E21859E4D974D1916CDA3F6007CBB56D2958873507A6FE824F4B91A9CAB161E1281E2EC1602D89FED04D8D7387AB6EBC4E33BB9DDC16CA01EC79DB93A846E321705C1C6046B4F50CA2F0F492C6FC82E563C7057A0452B164636FE650E32BAD2072526761D07EB673955DAAC0F8B3820F782D58855E0CDAD8359887FECEBAA1FEA8CD251F05A75524D58440AA5F45ADE077E00AFC9C0773045E14538E181076896A60065A5D96D5099DFD2DACED3D5C0C1EAEDD24BB94AAA77808E92383EA1AC4B2E4E5E873CCEA751164E4D5AD924E6B70F1D57AC951CD2AF9C5D92A6D7E50DC468CA05444D313B509EA524C38FC98474BC962FDC690843FE4109CC49771DB04E47A3C6F473111EF4951D053D4746A570DA0388845CC6203509877601C7E63156B571FFFEE2FC5214D82FEFD8D8FE615B28905F2ADA36AD39D3049467C2674B9F8444C49DF30AA62424B02FBB6775CAACE70BE327E67635A38F3C821BA91BB78ABFCF3A165A782E1D3E90C79C5B0C26CE83365A516934BCC78391A64F444434B31BAC3E6989CBFB33AFF0ABDB5C463C2904CCDBCEAC2513BB774DA0F57862ED2A152AAE2514B3A2498B0761AC506AD647B7E5683C9479F56E05A8EB0EEAAB04673F4FCCD3C3EF3E8CC099659AD5AD8C2ED1BA9423AEE0CF40AF81EABD455D82F0FA9E1F555CA49F42F8D54245A346CB6478B2208383640ED0238FB32E4229E8A10A305DAD4346B985856575F88ED40869E30ABDA31B3D665803B970EAE2DBA92672D728A05CFC00263CEB1E822B3F47B2E290F8E6D0FC8C687D80C245E5FFEBB12FFC411060EB83B37F64459428FC7DE2D62DFB59D63126066E62DD98DEE25C10BCE68E5720609BBA467E33950D11FF3316002C7C8C8C40FF30973961276D2138B4C84B981D05D0C7EB3414187758C3196C4784B74C3DF00E4C020CAB6AE2012A18BF12BB190D492894E0734BB2B43F05D3EEFBC836D2F3E1961B51549CBB8D2E0EE385FA413D8FF3C635F393133900F2FABBE33CABF54E20335693347EEF9D824A52748523710E9970564A387D756F198503C9A5AA4FA9D6978836D1D0C2387B24D2D5AE4F8A81CAC48730CDC902F8E51BD22C42D11A61B6BB0FA8ABCE9D219782765C44EBFC0BC2DBBF9E0159F71419EDA2418E4D924B09402E75048EF11149E877C5C35931AA33776E17C22995E551290B13EE06770353BBECA4F8F60ED4EDDC177D5FAB4D1383B70B55520A7C19706064258990D70D6EDD616851E14B63B9551F3E1E0017967A477351E22528168F9740389133F86A0CDE2A086AE3FCC711F3F5A82FFBFF0BA9C30074FBB847FFE89005C1253F2C87235279AD5FD00DF10FED943425EC92A742C5EBE809359535DEC9C291354C6B23A3A9B8A9D34180EEEEC2660A145B92851C1B185CD1AE1B063B40F261C94318DB608103ECB17874520405464EC189BC1611000FEDD9303523D93B177A9140FB60A46D6ABEBC0DE81E99B3F5E70F78494ECB199D6BDC48753DECDE32F9F8345C53BC380B3098D35FE673C4D0837F9C2E82F74983C3FD288CAC2E4FC1B2AC243A561262CDA4735639C1F80294115F031626E5CC56AE0EF92E8A3560F672411F31211DC61EA1BC9BB261BF98B6FB69977E5F08DEF34420519A5680542D28211B9399CD342D4268772DBEC1F2A04B75B56A50A56A5C96459818ACAD1F0A9AC47ED2F34175FD7E236868A41964939D4D0ECD746C43632B7FAEE9E27714D980D93279F09134F5A77EEB7E3883C267CF2B6732793D4A54BDF4F1668CF1E385F9A9DEE38DBE60BE9396BFE8A7FD85A9FD94F89A8D6DE99364CAB5DA952247C2D5B04F3F37705C8F4A5504E0270232D45C763D6C70BCD07E63C67449EADB758E899A76DB15860649A06668E03872AD5E2FBF74C14BC75AF0B940FDECFAC9FAD8BD7D7DAD0A8E0418BDF60993AB6F4528EF4015C2039699F02D6816F24E0F31A5E029B03A875CF433625C3469CF91F27536867D1BD21D37B0279BF231CDA8A9BDF9185DE06483AAA5610C972E3C149999ACA7605C7EA8880758C7A70DEDBFB06C766996462DEE84F0A549AF08E888F81FF86C074BE52AEAAF46720370B36ED17EC3581436120676206B78FDF87EEBEB6A78CB2C2E25047A75455FA5C0832ACDCF047B039929C5BABABDC3847D09D14DBEBC98B0A03A4F8E9C378A61A79C22A4E6767444A63279D102DF6D8AEDC446CFEE3D0605C93C2100D9143EA9912BC96F3D661C33D8DC8A894FB0765E285FB1ED6729929B0C7AD3374E8DB8F28EFBA9ED0733BB2396FBEA1133666118D3E011FC7C832AC07887A6A330A16D65736DAEA16BB0733204139F171A18735C3232B255261730DD04DE96BA2CC322BB9D3E743955BD843F5695587FC2CB4C5C7139E1FE6519E9635DE13B2C6B89A3596DF516C1928E1D8B3E112450CFE1B3BDF6D04CB32922633F74802FDCF824CCA857EB1A7566A400BFFF737A544A968429E61D9732023756792F583A78B511A392B652E0C10BB3CE9D28D1D3496181E325022E54BB71A43B188D11F849D9BA2BC23A36B838BDB9603B0964BFA0B2622B9DBAB671B69A2D704DEE27272155C9B7FD9FDACA8747E3979B595A55C8E87FC220A1959D2B5C616FF7FE628619B3F01FA2BA57DEEFF432EF1769FCB82FB2C7C004A427B483573539627F6ED8179A279C85F4DE06B9DB43C37E8EB9FBD5160A9BB263F4854572644769EEB21720425FE6A21890F262DAB359683715DC58D5DBB6A198EA4F3A1D515A1EAA2EE32C094267FCF9FC3EBE61D9898AFC71FEDFE3FC30769236CB7ACA684332E3294153613C7B87F0AFB751094BA31E7F64BA7FE0FEA53F5D4AFCE8058A6F1704DF96300D2EDD3432DC26F837FAE18B7D5A1CCF5C1370095520DD2BD1DE33FFEF1E8265BE514FEE9CC2155308443A9CF6C80928288CB616D0F425C8D6EE8CF9D464278746CF9EA5BDBE327DADFC1D2113BCF4FC2942DC908A3E35A813891F89F7C2F5C420051497BF8CD221D813F6789A70DCE3D86452F4541CEFECD917909531D518BF6F378356739A7C256FCE9B0044807E5D51F34FD64F4AAA1203C9356D69756E8F6F0926FDE7B693E9364717E43DB634B2DDC0F60DFE35F0F72AD1E832BF21E8C7B4D091EA0CB2C6B2F7E99ACF7D92EE9C21643CDE2012CB57F6684FA8D7C6C988FC1FFB4B0FCDAAC554E01A65805B150EB3275E003010B912F0468FA6E17CD98C9CAE29712845176E1DBB0FDBA61548F9BE086DC6E773975CBBA4905116AE5DA1296089432540325FF513EEEFB3984D7B2ED1DC3598FD1E4C0DA0FB594E1CDAB551C6F3FF1833BDB11F530130BE5A9721D0F9043EE3C276998AE8091DBFF22C1AAD4C371C6819BA71365A309FF9193AC7E48009493C9143005DB5486F79530942B9EE0AB591BEAFB097E7CC078BAF2B454BD4D5666365F5A26728B4AE98BDC2420B02F50C0A202F1A4A56C0532A9FEB681C5CD1A46E1988EABFBB7529C59B87DF69C43C1A4E8D2FAADB2A3750486B17F6047D150A74249C0ADFAA4AD043443608D6C703CCAB9108F90F9901D4377BAE6C97CDE60967D14E3EC6B10D98E9F104C8E63AEB603F3CA2440FD13DC057F9D652DE412B75593F784AEFB50AB0C011132F19BDA07BCCEC1811C425F721F3E61307E9AF93BB1EC89CE57F138BADD798A1D5F86A481FAA060B7A84824D263A8CBC706A614636295801B8D5455D78503738ED91F9EC09D989D53DBB520977BCF7D2CFEFFA4960959E6AC1860CAF1383E5A30EA096663FC770C4BA520C34268D63FD84D4EA80BDEFF9FDFCD1EB2B25A524528216591708D399D395466865662EF0AAF4A6E51ACDD82BC506D5D299D12D36F35DA06A1CD0278022445654A8CC20937DF4A21053529E27962315CF3CF1739ACB7EF3281011A4A93451922BFF5C8A1C547EE3BEA535B0DA13FB1EC5D98D05B16C1561FC6FC53E8F2D8A61D7B9236D322BE6FA894ECD789EBF68F46821092E18FC5F753503B469E1F2BC82DD1E72144E6E55BBF31B121B8EC8443E34C6199EB5C5862BC779B6FF4A9E78E06EE0E38C88FE937E473BDF5B0FC4EEE87D80AC5E76F57AC89553F49708C98C867FCE270B610A3DD90DC976AFFE65FF3B1DC862138943D9AB96505F67637A568F681EFF9A12FB0304C316207BD1FE3B45D8FAB834145F2047D0BA8A62C54F396252CDF0E6B62BFCF1078ED7FFEF9ACE7B4C23AA03B65466D99E0D5D6892405BFFACE394D85354DE555417ADD4603B6CCA2BCDAAB109D9761652703EA2A560F057C4346E02F5C7637CE96DC613C1991EE75FDB9ABD7172C9CE9FE106454E0ED8726893D1DEDD984C6A1FA7A9985D1EE7297DBACB0E5CF4E60B9524886E33985D7634E0C2318B82B338FBEFE91FB003310C62023D4EB2802BF9ABCE6E3D9F6410C43C39283F7CA8B47C763CEB79FADFE5A8E4B19433BA3AA2A72369FFFE76C2C5C350CEA071FD90C0936426033AE25D3CF4CEDC2029AF574CECFCFF6CAC81CCAA370CB457118E934F79E3B97B14D6EE38EFEEF3961A7EED8B7E75D28B8085ECD9C19CB21960BB5AA7BB29584B74F616111C7982C62D1B12D5E7356ED837DE641961A49BD2F7F6DA86EC43585F1BDBBC8A4D797927B63ED2F26487C423A72C46A207661CCE3D979A3804D9C208EA5D5D60EE790D255BD8E13E2E95E7072D0C0203E3BEC088A6FE25DD32925809C30E5741FC88D97E4C745D572AACCAEBBAFAE6A151BD633EB917FB9B149A65B837BA7B28E0C5ABE578E66F80541CF457A76D2C387B5ED611C683CC4A990E26C772BE2BA7C5C1004C78FE328C8C48FC250F3CF7337BC4F3A837FF086610E440729540CD282F7673C9FC7E41947DF425204A4F16F1E447BCBF9AFDCCA5271E87F1F82E63183674A743D7C4A4498CD44EF5943F83FEE1E796E1C80BD8A2B042D6CB3E1ED83F952C30EF466E3BD2414A5C25841A72BB96C920E6F7B9EB3F980C47FDE70700296A8BCB4A527459B8486560840B27BDB13CCC89994AC7DA93220EB165F920B2C174B6AADCE21FC0BCAF47DA9D732E637A3E795AC18A47E62EF46D628A917456C79967EA3A3DF8C44A8C784B9F64DE8D412A41F28084D9540C6B16F566652D0B575BFAF5F4046A665241CEDE872B26A2D3994F1414C686F5AF0104211ED5673CB3D3C76F9DA75812E77AC9235DA573F066C6A5252F6124AD3604B6F41E5C005061358B9F1754E31A018C0D57CAFB47AE201F23387EC5E0EB0D0B7E5E172F02D0CD9D7890D09E2A1C05D6DD4D1331CDE89C2D58E04F3E65CF53731945926E725423C5EB7A9DA4F77CB445636D3965360199B9855A46072556DAA2FCE88DF87121AC00602E06921A61055DF3950F61C7B99CCD2BA63B957636BAEF1DF677CEFDCFDD18649CC5EE1CEFCC94970742690B43861F610F398D90C30E6BB280C41D0BDD5CA1FFE176A96376DA325B4B3C4F8761C16CA26AF620D55394B9FAD73AD0A9E79CEE74B2849A11DF918EDD8C4E9490A27730CCC37C8F96B42D9C665387B4B90599C762454E9B7315886E46E9200682E4F4543F7E0BD7DD8D2B2B3ADD28CB28E910236F4B88ECC8031B5E0478AA5221A4CC3083A16328F1401181AB61C8D4927760EDBC2544972926188A53A4C1371B924C4DA5FD656E8000C4D7E115A58D232B0544D67602812CC7F2F4DFDC0A50A667B83F0C2D5485B5B3EA2FC8F939EE718B4371EC8B588704B55D75BCF1DDD75163747485C5534545489756E277477FD6E695F9B4BBA6EE952FC73C9E6A6E79F1E5467ABB7ADA9957D34506AF09383F61EC9B9AF2E701D29C7DA8378E18CF8FCC23735AB6EDE34C446F15510EE77D2941BEEED10801DCA5EEA80DE237927CDA66F0BE538206BFD5F8A34724777A78E29720D20C2931F281802996DED62C671696B9F273B9AC37A03E877126337B73E65245E2F3FCDB2FA259013B797BB6A1D177337B06F40822B4E4380FFB79A982ED37D3D8553BBA94F7A1751709B60CEA13882955B90B5099CA022771E48F57E2B0915B6BD67612B045821DEC15EAA45AEAE570AEA064C032B21ED11912A763E61B11A32B651FBB66D9EE6863C5D92613D11374589506055F9B17A0DA6DFC9C884055A438F44BDEF006DD084A98715AF0AC1AB3C214047E5CA518A9EA881DCFB796186F5AFA07F0E7D1F6DDA10A17321AE891A4FBD6BFAC23985C1CD3884A02FFDEEE2B3139AA17DFBE727FC4293D322741D09BC93C23B69CD4F0A0696538E665BA68ADF683ADD4E6D0597F02B92A27DAF33B1CBE5AA2539C5FC1EB024857CEDF3591E2708FA16FDCA37F00F16485F6BA1FE4B1C670645D628A9E3176B18B1CA1538377C09B3C30145B1CB6799B7848F455F94F873F64602A94C6AA35BCA5611212A4CEA2DB843759CA0A3F2494C3432142CE85179CA3B3B197ABDF0462F34313F7EF80F96C20DF30B3D5CD8337BF7BA4C95E302FEE2F8DB4D36B12D94CFF15086443991BA29247A712BA9CF9080FCDDF2AA6ECFCC83E1A46DE7427AB04753FD7A5D573FFAA1759E419D45A823A7E6FB4D233FB7B500B23C250AAA12E1A2B7075647701712FCAE64D5AA6CCA48D02BA576D4F7518DE3499460E98940B01E48A06CA5691CC500CD28C7E51312BF1404082D2D6734F89C65A03D2BCAF5040FAE6E279A76FF86F22B516B8C21C0C76598F1665715E802F99A0A52DAAD9C7E44C6B6CFF672876C2DEA15E88DF2A0D59EFFCDA73501254317BE0E1F7F86434B80CF9ED09100D61EE5411D708E5C744E099A7357CF42CDD1543011B10849F920B450CB39BD3D0F6AD1CB70407F1C4FD61EBDB66F690CC2F082A1A08022043097D846C146EE3967D2D0B70182C55900518BFD58C7134B4F5EEC7408D93E6C45BFC0C356BEC5D326479B459941F5C2BC6888F4D4536C912D91BECF0E0D8AC303BAE7BE2D90870B8B0C82372374F8E8355228203659B7A54EE557378048A8A7B9DB1F04E9CA09C551A327CC9B8622A0FD3E808A576D1DF5F1AD64B2172AAB16AF0F837C356318D395EBB6FB2E2F36ED022F3F564D9108FB656B1974E7DAA09D82678CABD564E39876F654799D89123D535C6E7246098D3E7A0F45D0306AA900261C38DF0A66EA2C18BA1ABE5C6D5389A5212F8B1046A0DB2FF639938B46D1951D1B6E24734004C62A41A8903B18C933A2F2FB166EBCF8D37A5A443D5EBE955DCB5E675E03EC0A494B23FE6919015F4DFD15F362A3C68E385CBB2EE56D3AB3DD73169D892D019BD499C3F9D44BA915B9261E7ABAEBA494F95482578D69D2C2D33984B41AA6E3C38D1F6531B11518CE131FDAC1928DD6AEDB42C3DCAA89AF167AA5CB3EA845E28E3B903F30F1ED5F4F973AFF9B343E8F2DE37AFD4E65770D346AE15BE7AD81E2B477184C12BA1795BC6952B881393BB9A6309270E588ACE04132AD6FD9E1F739D0FE6699006E9298A183EA087C4B9E8E57671B104EE5F90B78B93939D4DC3987090EF242D4F192164A2E08E1B0DF95B8104FB10DE
|
package/article/14192.html
CHANGED
|
@@ -506,7 +506,7 @@ server.listen(3000, () => console.log("正在监听 3000 端口"));
|
|
|
506
506
|
</ul>
|
|
507
507
|
<h1 id="源代码"><a href="#源代码" class="headerlink" title="源代码"></a>源代码</h1><p>源代码增加了一些按钮的状态,交互更加友好,文章表达比较晦涩的地方可以跳转到源代码查看</p>
|
|
508
508
|
<p><a target="_blank" rel="noopener" href="https://github.com/yeyan1996/file-upload">file-upload</a><br><img src="https://user-gold-cdn.xitu.io/2020/1/9/16f8859bdc09fa25?imageView2/0/w/1280/h/960/format/webp/ignore-error/1" alt="xuehuayu.cn"><br>谢谢观看 :)</p>
|
|
509
|
-
<h1 id="字节跳动-EA(Enterprise-Application)前端团队招人啦~"><a href="#字节跳动-EA(Enterprise-Application)前端团队招人啦~" class="headerlink" title="字节跳动 EA(Enterprise Application)前端团队招人啦~"></a>字节跳动 EA(Enterprise Application)前端团队招人啦~</h1><p>坐标上海/北京,校招社招都有,hc 无上限,有兴趣的欢迎投递简历至 <a href="mailto:1&#
|
|
509
|
+
<h1 id="字节跳动-EA(Enterprise-Application)前端团队招人啦~"><a href="#字节跳动-EA(Enterprise-Application)前端团队招人啦~" class="headerlink" title="字节跳动 EA(Enterprise Application)前端团队招人啦~"></a>字节跳动 EA(Enterprise Application)前端团队招人啦~</h1><p>坐标上海/北京,校招社招都有,hc 无上限,有兴趣的欢迎投递简历至 <a href="mailto:1996yeyan@gmail.com">1996yeyan@gmail.com</a>,校招内推码 Q7QUGMV</p>
|
|
510
510
|
<h1 id="参考资料"><a href="#参考资料" class="headerlink" title="参考资料"></a>参考资料</h1><p><a target="_blank" rel="noopener" href="https://juejin.im/post/5da14778f265da5bb628e590">写给新手前端的各种文件上传攻略,从小图片到大文件断点续传</a></p>
|
|
511
511
|
<p><a target="_blank" rel="noopener" href="https://developer.mozilla.org/zh-CN/docs/Web/API/Blob/slice">Blob.slice</a><a target="_blank" rel="noopener" href="https://developer.mozilla.org/zh-CN/docs/Web/API/Blob/slice">developer.mozilla.org/zh-CN/docs/…</a>)</p>
|
|
512
512
|
</div><iframe src="/donate/?AliPayQR=https://store.xuehuayu.cn/store/public/alipay_qr.jpg&WeChatQR=https://store.xuehuayu.cn/store/public/wechat_qr.png&UnionPayQR=null&GitHub=null&BTCQR=null&BTCKEY=null&PayPal=https://www.paypal.com/paypalme/OrdinaryPerson" style="overflow-x:hidden; overflow-y:hidden; border:0xp none #fff; min-height:240px; width:100%;" frameborder="0" scrolling="no"></iframe><div><ul class="post-copyright"><li class="post-copyright-author"><strong>本文作者:</strong>雪花雨</li><li class="post-copyright-link"><strong>本文链接:</strong><a href="/article/14192.html">https://xuehuayu.cn/article/14192.html</a></li><li class="post-copyright-license"><strong>版权声明:</strong>① 标为原创的文章为博主原创,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接。② 转载文章来自网络,已标明出处,<a href="mailto:cainiaoblog@126.com">侵删</a>。</li></ul></div><br><div class="tags"><a href="/tags/%E8%BD%AC%E8%BD%BD/">转载</a></div><div class="post-nav"><a class="pre" href="/article/45157.html">新型肺炎疫情最新动态播报汇总</a><a class="next" href="/article/54313.html">70个JavaScript面试问题</a></div><div id="vcomment"></div><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@waline/client@v2/dist/waline.min.css"><script src="//cdn.jsdelivr.net/npm/@waline/client@v2/dist/waline.js"></script><script>const origin = window.location.origin
|
package/article/53962.html
CHANGED
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
<li>render()</li>
|
|
68
68
|
<li>componentDidMount()</li>
|
|
69
69
|
</ol>
|
|
70
|
-
<p>注意: getDerivedStateFromProps/getSnapshotBeforeUpdate 和 componentWillMount/componentWillReceiveProps/componentWillUpdate 如果同时存在,React会在控制台给出警告信息,且仅执行 getDerivedStateFromProps/getSnapshotBeforeUpdate 【<a href="mailto:&#
|
|
70
|
+
<p>注意: getDerivedStateFromProps/getSnapshotBeforeUpdate 和 componentWillMount/componentWillReceiveProps/componentWillUpdate 如果同时存在,React会在控制台给出警告信息,且仅执行 getDerivedStateFromProps/getSnapshotBeforeUpdate 【<a href="mailto:React@16.7.0">React@16.7.0</a>】</p>
|
|
71
71
|
<blockquote>
|
|
72
72
|
<p>运行时:</p>
|
|
73
73
|
</blockquote>
|
package/article/c5576490.html
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
})();
|
|
17
17
|
</script><script>var _hmt=_hmt||[];(function(){var hm=document.createElement("script");hm.src='https://hm.baidu.com/hm.js?011f0b44e8452bfa57fbfa23c5fe7683';var s=document.getElementsByTagName("script")[0];s.parentNode.insertBefore(hm, s);})();
|
|
18
18
|
</script><script async src="https://www.googletagmanager.com/gtag/js?id=UA-150860401-1"></script><script>window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments);};gtag('js',new Date());gtag('config','UA-150860401-1');
|
|
19
|
-
</script><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/fixedPage.min.js"></script><meta name="generator" content="Hexo 6.3.0"></head><body><div class="body_container"><div id="header"><div class="site-name"><a id="logo" href="/.">前端壹菜鸟</a><p class="description">关注前端知识,收集精彩博文,做技术的搬运工</p></div><div id="nav-menu"><a class="current" href="/." target="_self"><i class="fa fa-home"> 首页</i></a><a href="/archives/" target="_self"><i class="fa fa-archive"> 归档</i></a><a href="/guestbook/" target="_self"><i class="fa fa-comments"> 留言</i></a><a href="/about/" target="_self"><i class="fa fa-user"> 关于</i></a><a href="https://laonongmin.online/" target="_target"><i class="fa fa-group"> 看看</i></a><a href="https://love.xuehuayu.cn/" target="_target"><i class="fa fa-heart"> LOVE</i></a></div></div><div class="pure-g" id="layout"><div class="pure-u-1 pure-u-md-3-4"><div class="content_container"><div class="post"><h1 class="post-title c-post">面试准备</h1><div class="post-meta"><span class="date">2023-02-21</span><span> | </span><span class="tag original"><a href="/tags/%E5%8E%9F%E5%88%9B/">原创 </a></span><span> | </span><span class="category"><a href="/categories/%E5%89%8D%E7%AB%AF/">前端 </a></span><span id="busuanzi_container_page_pv"> | <span id="busuanzi_value_page_pv"><i class="fa fa-spinner"></i></span><span> 阅读</span></span><span class="post-time"><span class="post-meta-item-text"> | </span><span class="post-meta-item-icon"><i class="fa fa-keyboard-o"></i><span class="post-count">
|
|
19
|
+
</script><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/fixedPage.min.js"></script><meta name="generator" content="Hexo 6.3.0"></head><body><div class="body_container"><div id="header"><div class="site-name"><a id="logo" href="/.">前端壹菜鸟</a><p class="description">关注前端知识,收集精彩博文,做技术的搬运工</p></div><div id="nav-menu"><a class="current" href="/." target="_self"><i class="fa fa-home"> 首页</i></a><a href="/archives/" target="_self"><i class="fa fa-archive"> 归档</i></a><a href="/guestbook/" target="_self"><i class="fa fa-comments"> 留言</i></a><a href="/about/" target="_self"><i class="fa fa-user"> 关于</i></a><a href="https://laonongmin.online/" target="_target"><i class="fa fa-group"> 看看</i></a><a href="https://love.xuehuayu.cn/" target="_target"><i class="fa fa-heart"> LOVE</i></a></div></div><div class="pure-g" id="layout"><div class="pure-u-1 pure-u-md-3-4"><div class="content_container"><div class="post"><h1 class="post-title c-post">面试准备</h1><div class="post-meta"><span class="date">2023-02-21</span><span> | </span><span class="tag original"><a href="/tags/%E5%8E%9F%E5%88%9B/">原创 </a></span><span> | </span><span class="category"><a href="/categories/%E5%89%8D%E7%AB%AF/">前端 </a></span><span id="busuanzi_container_page_pv"> | <span id="busuanzi_value_page_pv"><i class="fa fa-spinner"></i></span><span> 阅读</span></span><span class="post-time"><span class="post-meta-item-text"> | </span><span class="post-meta-item-icon"><i class="fa fa-keyboard-o"></i><span class="post-count"> 2.8k</span><span class="post-meta-item-text"> 字</span></span></span><span class="post-time"> | <span class="post-meta-item-icon"><i class="fa fa-hourglass-half"></i><span class="post-count"> 11</span><span class="post-meta-item-text"> 分钟</span></span></span></div><a class="disqus-comment-count" href="/article/c5576490.html#vcomment"><span class="waline-comment-count" data-path="/article/c5576490.html"></span><span> 条评论</span></a><div class="post-content"><p>面试准备</p>
|
|
20
20
|
<span id="more"></span>
|
|
21
21
|
<h2 id="Vue"><a href="#Vue" class="headerlink" title="Vue"></a>Vue</h2><h3 id="基本使用"><a href="#基本使用" class="headerlink" title="基本使用"></a>基本使用</h3><h4 id="v-html"><a href="#v-html" class="headerlink" title="v-html"></a>v-html</h4><p>原始html内容,有xss防线</p>
|
|
22
22
|
<h4 id="computed"><a href="#computed" class="headerlink" title="computed"></a>computed</h4><ul>
|
|
@@ -147,7 +147,7 @@
|
|
|
147
147
|
<li>window.onhashchange</li>
|
|
148
148
|
<li>会出发网页跳转,</li>
|
|
149
149
|
<li>可前进后退,</li>
|
|
150
|
-
<li>不会提交到server
|
|
150
|
+
<li>不会提交到server端,强制刷新也不会</li>
|
|
151
151
|
<li>可刷新</li>
|
|
152
152
|
</ul>
|
|
153
153
|
</li>
|
|
@@ -200,20 +200,200 @@
|
|
|
200
200
|
<li>tag和key都相同,则认为是相同节点,不再深度比较</li>
|
|
201
201
|
</ul>
|
|
202
202
|
<h5 id="模板编译"><a href="#模板编译" class="headerlink" title="模板编译"></a>模板编译</h5><ul>
|
|
203
|
-
<li>vue
|
|
204
|
-
<li>执行render函数生成vnode</li>
|
|
203
|
+
<li>vue将模板编译为render函数</li>
|
|
204
|
+
<li>执行render函数生成vnode,patch</li>
|
|
205
|
+
<li>触发响应式,监听data属性getter setter</li>
|
|
206
|
+
</ul>
|
|
207
|
+
<blockquote>
|
|
208
|
+
<ul>
|
|
205
209
|
<li>with语法</li>
|
|
210
|
+
<li>vue组件可以用render代替template</li>
|
|
206
211
|
</ul>
|
|
207
|
-
|
|
212
|
+
</blockquote>
|
|
213
|
+
<h6 id="初次渲染过程"><a href="#初次渲染过程" class="headerlink" title="初次渲染过程"></a>初次渲染过程</h6><ul>
|
|
208
214
|
<li>解析为render函数</li>
|
|
209
|
-
<li
|
|
215
|
+
<li>触发响应式,监听data属性getter setter</li>
|
|
210
216
|
<li>执行render函数,生成vnode,patch</li>
|
|
211
217
|
</ul>
|
|
212
218
|
<h6 id="更新过程"><a href="#更新过程" class="headerlink" title="更新过程"></a>更新过程</h6><ul>
|
|
213
|
-
<li>修改data
|
|
219
|
+
<li>修改data,触发setter,(此前在getter中已被监听)</li>
|
|
214
220
|
<li>重新执行render函数,生成newVnode</li>
|
|
215
221
|
<li>patch(oldVnode, newVnode)</li>
|
|
216
222
|
</ul>
|
|
223
|
+
<h5 id="组件异步渲染"><a href="#组件异步渲染" class="headerlink" title="组件异步渲染"></a>组件异步渲染</h5><ul>
|
|
224
|
+
<li>$nextTick</li>
|
|
225
|
+
<li>汇总data修改,一次性更新视图</li>
|
|
226
|
+
<li>减少dom操作次数,提高性能</li>
|
|
227
|
+
</ul>
|
|
228
|
+
<h4 id="Vue3"><a href="#Vue3" class="headerlink" title="Vue3"></a>Vue3</h4><h5 id="新功能"><a href="#新功能" class="headerlink" title="新功能"></a>新功能</h5><ul>
|
|
229
|
+
<li><p>createApp</p>
|
|
230
|
+
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">// vue2</span><br><span class="line">const app = new Vue({})</span><br><span class="line">Vue.use()</span><br><span class="line">Vue.mixin()</span><br><span class="line">Vue.component()</span><br><span class="line">Vue.directive()</span><br><span class="line">// vue3</span><br><span class="line">const app = Vue.createApp({})</span><br><span class="line">app.use()</span><br><span class="line">app.mixin()</span><br><span class="line">app.component()</span><br><span class="line">app.directive()</span><br></pre></td></tr></table></figure>
|
|
231
|
+
</li>
|
|
232
|
+
<li><p>emits属性</p>
|
|
233
|
+
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">emits: ['onClickhandler'] // 建议 onXxx</span><br></pre></td></tr></table></figure>
|
|
234
|
+
</li>
|
|
235
|
+
<li><p>生命周期</p>
|
|
236
|
+
</li>
|
|
237
|
+
<li><p>多事件处理, @click=”one($event),two($event)”</p>
|
|
238
|
+
</li>
|
|
239
|
+
<li><p>Fragment, 模板不需要包在一个根组件中了,template下面可以写多个标签</p>
|
|
240
|
+
</li>
|
|
241
|
+
<li><p>移除.sync改为v-model参数</p>
|
|
242
|
+
</li>
|
|
243
|
+
<li><p>异步组件的引用方式, defindAsyncComponent</p>
|
|
244
|
+
</li>
|
|
245
|
+
<li><p>移除filter,如:v-if=”boolA | boolB”</p>
|
|
246
|
+
</li>
|
|
247
|
+
<li><p>Teleport,<teleport to="body"></teleport></p>
|
|
248
|
+
</li>
|
|
249
|
+
<li><p>Suspense</p>
|
|
250
|
+
</li>
|
|
251
|
+
</ul>
|
|
252
|
+
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><Suspense></span><br><span class="line"> <template></span><br><span class="line"> <Test1/> <!-- 是一个异步组件 --></span><br><span class="line"> </template></span><br><span class="line"> <!-- 具名插槽 </span><br><span class="line"> 即:Suspense 组件内部,有两个slot,</span><br><span class="line"> 其中一个具名为 fallback</span><br><span class="line"> --></span><br><span class="line"> <tempalte #fallback></span><br><span class="line"> Loading...</span><br><span class="line"> </tempalte></span><br><span class="line"></Suspense></span><br></pre></td></tr></table></figure>
|
|
253
|
+
|
|
254
|
+
<ul>
|
|
255
|
+
<li>Compositio API<ul>
|
|
256
|
+
<li>reactive</li>
|
|
257
|
+
<li>ref toRef toRefs</li>
|
|
258
|
+
<li>readonly</li>
|
|
259
|
+
<li>computed</li>
|
|
260
|
+
<li>watch watchEffect</li>
|
|
261
|
+
<li>钩子函数生命周期</li>
|
|
262
|
+
</ul>
|
|
263
|
+
</li>
|
|
264
|
+
</ul>
|
|
265
|
+
<h5 id="原理"><a href="#原理" class="headerlink" title="原理"></a>原理</h5><ul>
|
|
266
|
+
<li>proxy 实现响应式<ul>
|
|
267
|
+
<li>对值类型无能为力,所以要用 ref</li>
|
|
268
|
+
</ul>
|
|
269
|
+
</li>
|
|
270
|
+
<li>编译优化<ul>
|
|
271
|
+
<li>PatchFlag 静态标记</li>
|
|
272
|
+
<li>hoistStatic 静态提升</li>
|
|
273
|
+
<li>cacheHandler 缓存事件</li>
|
|
274
|
+
<li>SSR 优化</li>
|
|
275
|
+
<li>Tree-shaking 优化</li>
|
|
276
|
+
</ul>
|
|
277
|
+
</li>
|
|
278
|
+
</ul>
|
|
279
|
+
<h5 id="Vue3-比-vue2-优势"><a href="#Vue3-比-vue2-优势" class="headerlink" title="Vue3 比 vue2 优势"></a>Vue3 比 vue2 优势</h5><ul>
|
|
280
|
+
<li>性能更好</li>
|
|
281
|
+
<li>体积更小</li>
|
|
282
|
+
<li>更好的ts支持</li>
|
|
283
|
+
<li>更好的代码组织</li>
|
|
284
|
+
<li>更好的逻辑抽离</li>
|
|
285
|
+
<li>更多的新功能</li>
|
|
286
|
+
</ul>
|
|
287
|
+
<h5 id="生命周期"><a href="#生命周期" class="headerlink" title="生命周期"></a>生命周期</h5><ul>
|
|
288
|
+
<li>beforeDestroy 改为 beforeUnmount</li>
|
|
289
|
+
<li>destroyed 改为 unmounted</li>
|
|
290
|
+
<li>其他沿用vue2的生命周期</li>
|
|
291
|
+
<li>setup等于 beforeCreate 和 created</li>
|
|
292
|
+
</ul>
|
|
293
|
+
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">import { onBeforeMount } from 'vue'</span><br><span class="line"></span><br><span class="line">export default {</span><br><span class="line"> <!-- 其他代码 --></span><br><span class="line"> setup () {</span><br><span class="line"> onBeforeMount(() => {</span><br><span class="line"> console.log('onBeforeMount')</span><br><span class="line"> })</span><br><span class="line"> }</span><br><span class="line"> <!-- 其他代码 --></span><br><span class="line">}</span><br></pre></td></tr></table></figure>
|
|
294
|
+
|
|
295
|
+
<h5 id="Composition-API-对比-Options-API"><a href="#Composition-API-对比-Options-API" class="headerlink" title="Composition API 对比 Options API"></a>Composition API 对比 Options API</h5><ul>
|
|
296
|
+
<li>更好的代码组织</li>
|
|
297
|
+
<li>更好的逻辑复用(options api 分散于生命周期中,代码越多越明显)</li>
|
|
298
|
+
<li>更好的类型推导(直接this.a 和 this.fn,不利于类型判断 )</li>
|
|
299
|
+
<li>不建议公用</li>
|
|
300
|
+
</ul>
|
|
301
|
+
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">export default {</span><br><span class="line"> data () {</span><br><span class="line"> return {</span><br><span class="line"> a: 10</span><br><span class="line"> }</span><br><span class="line"> },</span><br><span class="line"> methods: {</span><br><span class="line"> fn () {</span><br><span class="line"> const a = this.a</span><br><span class="line"> }</span><br><span class="line"> },</span><br><span class="line"> mounted: {</span><br><span class="line"> this.fn()</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
|
|
302
|
+
|
|
303
|
+
<h5 id="ref-toRef-toRefs"><a href="#ref-toRef-toRefs" class="headerlink" title="ref toRef toRefs"></a>ref toRef toRefs</h5><ul>
|
|
304
|
+
<li>toRef 将一个响应式对象中的某个属性变为ref</li>
|
|
305
|
+
<li>toRefs 将一个响应式对象变为普通对象,这个普通对象的每个属性变为ref</li>
|
|
306
|
+
</ul>
|
|
307
|
+
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br></pre></td><td class="code"><pre><span class="line"><template></span><br><span class="line"> <div>{{name}}{{ageRef}}</div></span><br><span class="line"> <div ref="eleRef">我是文字</div></span><br><span class="line"></template></span><br><span class="line"></span><br><span class="line"><script></span><br><span class="line"> import { ref, toRef, toRefs, reactive, onMounted } from 'vue'</span><br><span class="line"></span><br><span class="line"> export default {</span><br><span class="line"> name: 'Ref',</span><br><span class="line"> setup() {</span><br><span class="line"> const eleRef = ref(null)</span><br><span class="line"> const ageRef = ref(20)</span><br><span class="line"> // 两者保持引用关系↓</span><br><span class="line"> // 不能返回解构的state,会丢失响应式</span><br><span class="line"> const state = reactive({</span><br><span class="line"> name: '张三'</span><br><span class="line"> })</span><br><span class="line"> const nameRef = toRef(state, 'name')</span><br><span class="line"> nameRef.value = '李四' // state中的name也会改变</span><br><span class="line"> state.name = '王五' // nameRef的值也会改变</span><br><span class="line"> // 两者保持引用关系 ↑</span><br><span class="line"> ageRef.value = 30</span><br><span class="line"> onMounted(() => {</span><br><span class="line"> console.log(eleRef.value.innerHTML)</span><br><span class="line"> })</span><br><span class="line"></span><br><span class="line"> // const stateRefs = toRefs(state)</span><br><span class="line"> // const {name: nameRef} = stateRefs</span><br><span class="line"> // return stateRefs // toRefs的返回</span><br><span class="line"></span><br><span class="line"> // 其他返回</span><br><span class="line"> return {</span><br><span class="line"> ageRef,</span><br><span class="line"> eleRef</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"></script></span><br><span class="line"></span><br></pre></td></tr></table></figure>
|
|
308
|
+
|
|
309
|
+
<h5 id="为什么要用-Ref"><a href="#为什么要用-Ref" class="headerlink" title="为什么要用 Ref"></a>为什么要用 Ref</h5><ul>
|
|
310
|
+
<li>返回 值类型,会丢失响应式</li>
|
|
311
|
+
<li>如在setup、computed、合成函数,都有可能返回 值类型</li>
|
|
312
|
+
<li>vue如果不定义ref。用户将自造ref,反而更混乱</li>
|
|
313
|
+
</ul>
|
|
314
|
+
<h5 id="为什么要-value"><a href="#为什么要-value" class="headerlink" title="为什么要.value"></a>为什么要.value</h5><ul>
|
|
315
|
+
<li>ref 是个对象(不丢失响应式),value存储值</li>
|
|
316
|
+
<li>通过.value属性的get和set实现响应式</li>
|
|
317
|
+
<li>用于模板、reactive时,(vue可以自己控制)不需要.value,其他情况都需要</li>
|
|
318
|
+
</ul>
|
|
319
|
+
<h5 id="Composition-API-实现逻辑复用"><a href="#Composition-API-实现逻辑复用" class="headerlink" title="Composition API 实现逻辑复用"></a>Composition API 实现逻辑复用</h5><ul>
|
|
320
|
+
<li>抽离逻辑代码到一个函数</li>
|
|
321
|
+
<li>函数命名约定为 useXxx 格式</li>
|
|
322
|
+
<li>setup中引用 useXxx 函数</li>
|
|
323
|
+
</ul>
|
|
324
|
+
<h5 id="Proxy-实现响应式"><a href="#Proxy-实现响应式" class="headerlink" title="Proxy 实现响应式"></a>Proxy 实现响应式</h5><ul>
|
|
325
|
+
<li>基本使用</li>
|
|
326
|
+
<li>Reflect</li>
|
|
327
|
+
<li>实现响应式</li>
|
|
328
|
+
<li>对比 defineProperty 提高性能<ul>
|
|
329
|
+
<li>set第一层属性的时候,触发set</li>
|
|
330
|
+
<li>set第二层属性的时候触发第一层属性的get</li>
|
|
331
|
+
<li>所以在get的时候,返回一个 新的proxy对象即可 深度监听,而且是惰性监听</li>
|
|
332
|
+
<li>所以性能比defineProperty好</li>
|
|
333
|
+
</ul>
|
|
334
|
+
</li>
|
|
335
|
+
</ul>
|
|
336
|
+
<h5 id="watch-和-watchEffect-的区别"><a href="#watch-和-watchEffect-的区别" class="headerlink" title="watch 和 watchEffect 的区别"></a>watch 和 watchEffect 的区别</h5><ul>
|
|
337
|
+
<li>两者都可以监听data属性变化</li>
|
|
338
|
+
<li>watch 需要明确监听哪个属性</li>
|
|
339
|
+
<li>watchEffect会根据其中的属性,自动监听其变化</li>
|
|
340
|
+
</ul>
|
|
341
|
+
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line">// watch 默认不会立即执行</span><br><span class="line">// 监听ref</span><br><span class="line">watch(nameRef, (newVal, oldVal) => {}, [options])</span><br><span class="line">// 监听响应式</span><br><span class="line">watch(() => state.name, (newState, oldState) => {}, [options])</span><br><span class="line"></span><br><span class="line">watchEffect(() => {</span><br><span class="line"> // 初始化就会执行一次,收集监听的数据</span><br><span class="line"> console.log('watchEffect')</span><br><span class="line">})</span><br><span class="line">watchEffect(() => {</span><br><span class="line"> // 写了 state.name 就监听, 不写的不会监听</span><br><span class="line"> console.log(state.name)</span><br><span class="line">})</span><br></pre></td></tr></table></figure>
|
|
342
|
+
|
|
343
|
+
<h5 id="setup中如何获取组件实例"><a href="#setup中如何获取组件实例" class="headerlink" title="setup中如何获取组件实例"></a>setup中如何获取组件实例</h5><ul>
|
|
344
|
+
<li>在setup 和 Composition API 中没有this</li>
|
|
345
|
+
<li>可通过 getCurrentInstance 获取当前实例</li>
|
|
346
|
+
<li>若使用 options API 可照常使用 this</li>
|
|
347
|
+
</ul>
|
|
348
|
+
<h5 id="vue3-为何比-vue2-快"><a href="#vue3-为何比-vue2-快" class="headerlink" title="vue3 为何比 vue2 快"></a>vue3 为何比 vue2 快</h5><ul>
|
|
349
|
+
<li>Proxy 响应式</li>
|
|
350
|
+
<li>PatchFlag // 标记节点类型</li>
|
|
351
|
+
<li>hoistStatic // 缓存静态节点,多个节点合并</li>
|
|
352
|
+
<li>cacheHandler // </li>
|
|
353
|
+
<li>SSR 优化</li>
|
|
354
|
+
<li>tree-shaking</li>
|
|
355
|
+
</ul>
|
|
356
|
+
<h6 id="PatchFlag"><a href="#PatchFlag" class="headerlink" title="PatchFlag"></a>PatchFlag</h6><ul>
|
|
357
|
+
<li>编译模板时,动态节点做标记</li>
|
|
358
|
+
<li>标记分为不同类型,如 TEXT PROPS</li>
|
|
359
|
+
<li>diff算法时,可以区分静态节点,以及不同类型的节点</li>
|
|
360
|
+
</ul>
|
|
361
|
+
<h6 id="hoistStatic"><a href="#hoistStatic" class="headerlink" title="hoistStatic"></a>hoistStatic</h6><ul>
|
|
362
|
+
<li>将静态节点的定义,提升到父作用域,缓存起来</li>
|
|
363
|
+
<li>多个相邻的静态节点,会被合并起来</li>
|
|
364
|
+
<li>典型的拿空间换时间的优化策略</li>
|
|
365
|
+
</ul>
|
|
366
|
+
<h6 id="cacheHandler"><a href="#cacheHandler" class="headerlink" title="cacheHandler"></a>cacheHandler</h6><ul>
|
|
367
|
+
<li>将事件缓存起来</li>
|
|
368
|
+
</ul>
|
|
369
|
+
<h5 id="vite-ES6-module"><a href="#vite-ES6-module" class="headerlink" title="vite - ES6 module"></a>vite - ES6 module</h5><h2 id="React"><a href="#React" class="headerlink" title="React"></a>React</h2><h3 id="基本使用-1"><a href="#基本使用-1" class="headerlink" title="基本使用"></a>基本使用</h3><h4 id="setState"><a href="#setState" class="headerlink" title="setState"></a>setState</h4><ul>
|
|
370
|
+
<li>不可变值</li>
|
|
371
|
+
<li>可能异步可能同步</li>
|
|
372
|
+
<li>可能会被合并</li>
|
|
373
|
+
</ul>
|
|
374
|
+
<h5 id="是同步还是异步"><a href="#是同步还是异步" class="headerlink" title="是同步还是异步"></a>是同步还是异步</h5><ul>
|
|
375
|
+
<li>直接使用是异步的</li>
|
|
376
|
+
<li>在setTimeout或者自定义的dom事件中是同步的</li>
|
|
377
|
+
</ul>
|
|
378
|
+
<h5 id="何时会合并"><a href="#何时会合并" class="headerlink" title="何时会合并"></a>何时会合并</h5><ul>
|
|
379
|
+
<li>对象形式,会被合并</li>
|
|
380
|
+
<li>函数形式,不会合并</li>
|
|
381
|
+
</ul>
|
|
382
|
+
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">this.setState((state, props) => {})</span><br></pre></td></tr></table></figure>
|
|
383
|
+
|
|
384
|
+
<ul>
|
|
385
|
+
<li>直接修改state的值,影响性能</li>
|
|
386
|
+
</ul>
|
|
387
|
+
<h4 id="事件为何要bind-this"><a href="#事件为何要bind-this" class="headerlink" title="事件为何要bind this"></a>事件为何要bind this</h4><h4 id="Reaact-高级特性"><a href="#Reaact-高级特性" class="headerlink" title="Reaact 高级特性"></a>Reaact 高级特性</h4><ul>
|
|
388
|
+
<li>函数组件</li>
|
|
389
|
+
<li>非受控组件</li>
|
|
390
|
+
<li>Portals ReactDOM.createPortals()</li>
|
|
391
|
+
<li>context</li>
|
|
392
|
+
<li>异步组件,import() React.lazy React.Suspense</li>
|
|
393
|
+
<li>性能优化,SCU 核心问题是 不可变值</li>
|
|
394
|
+
<li>高阶组件HOC</li>
|
|
395
|
+
<li>render props</li>
|
|
396
|
+
</ul>
|
|
217
397
|
</div><iframe src="/donate/?AliPayQR=https://store.xuehuayu.cn/store/public/alipay_qr.jpg&WeChatQR=https://store.xuehuayu.cn/store/public/wechat_qr.png&UnionPayQR=null&GitHub=null&BTCQR=null&BTCKEY=null&PayPal=https://www.paypal.com/paypalme/OrdinaryPerson" style="overflow-x:hidden; overflow-y:hidden; border:0xp none #fff; min-height:240px; width:100%;" frameborder="0" scrolling="no"></iframe><div><ul class="post-copyright"><li class="post-copyright-author"><strong>本文作者:</strong>雪花雨</li><li class="post-copyright-link"><strong>本文链接:</strong><a href="/article/c5576490.html">https://xuehuayu.cn/article/c5576490.html</a></li><li class="post-copyright-license"><strong>版权声明:</strong>① 标为原创的文章为博主原创,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接。② 转载文章来自网络,已标明出处,<a href="mailto:cainiaoblog@126.com">侵删</a>。</li></ul></div><br><div class="tags"><a href="/tags/%E5%8E%9F%E5%88%9B/">原创</a></div><div class="post-nav"><a class="next" href="/article/84c9ccd6.html">精读《SolidJS》</a></div><div id="vcomment"></div><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@waline/client@v2/dist/waline.min.css"><script src="//cdn.jsdelivr.net/npm/@waline/client@v2/dist/waline.js"></script><script>const origin = window.location.origin
|
|
218
398
|
const serverURL = origin.includes('cainiaoblog') ? 'https://cmts.cainiaoblog.cn' : 'https://cmts.xuehuayu.cn'
|
|
219
399
|
const locale = {
|